Transactions Invite only

     

    Transactions represent money moving as a result of approved authorizations and cardholder activity on issued cards.

     

    Transaction objects are created when an issued card is used to send or receive money, such as when completing a purchase or receiving a refund. Transactions contain information about the card used, the cardholder, and the merchant involved.

    Some time after an authorization is approved, the merchant will capture its monetary amount. In most cases, this happens within 24 hours, although it may take up to 7 days. Most merchants won’t be allowed to capture an authorization after 7 days, although a few merchant categories (including hotels, airlines, and car rental companies) have up to 30 days.

    When an authorization is captured, two things happen at the same time:

    • The Authorization object’s status changes to closed, releasing the purchase amount held by that authorization. A balance transaction of type issuing_authorization_release is created to represent this. In addition, an issuing_authorization.updated webhook event is triggered.
    • A new Transaction object of type capture is created that deducts the purchase amount from your account balance. Another balance transaction of type issuing_transaction is created to represent this. In addition, an issuing_transaction.created webhook event is triggered.

    Reporting

    The Issuing transactions dashboard lists all transactions across all issued cards, providing details such as:

    • Amount
    • Card used
    • Cardholder name
    • Date
    • Description
    • Merchant category

    You can filter which transactions you want to see by specifying the ID of an issued card, or download all transactions as a CSV file.

    You can also retrieve transactions using the API to develop and generate custom reports. For example, you can retrieve transactions to generate a typical credit card statement by listing transactions within a date range (e.g., 30 days) for a particular card.

    curl https://api.stripe.com/v1/issuing/transactions \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d card=ic_1CoYuRKEl2ztzE5GIEDjQiUI \ -d "created[gte]"=1576842326 \ -d "created[lte]"=1579434326
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' transactions = Stripe::Issuing::Transaction.list({ card: 'ic_1CoYuRKEl2ztzE5GIEDjQiUI', created: { gte: '1576842326', lte: '1579434326', }, })
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' transactions = stripe.issuing.Transaction.list( card='ic_1CoYuRKEl2ztzE5GIEDjQiUI', created={ 'gte': '1576842326', 'lte': '1579434326', }, )
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $transactions = \Stripe\Issuing\Transaction::all([ 'card' => 'ic_1CoYuRKEl2ztzE5GIEDjQiUI', 'created' => [ 'gte' => '1576842326', 'lte' => '1579434326', ], ]);
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; Map<String, Object> createdParams = new HashMap<String, Object>(); createdParams.put("gte", "1576842326"); createdParams.put("lte", "1579434326"); Map<String, Object> params = new HashMap<>(); params.put("card", "ic_1CoYuRKEl2ztzE5GIEDjQiUI"); params.put("created", createdParams); TransactionCollection transactions = Transaction.list(params);
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); (async () => { const transactions = await stripe.issuing.transactions.list({ card: 'ic_1CoYuRKEl2ztzE5GIEDjQiUI', created: { gte: '1576842326', lte: '1579434326', }, }); })();
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params := &stripe.IssuingTransactionListParams{ Card: stripe.String("ic_1CoYuRKEl2ztzE5GIEDjQiUI"), Created: &stripe.RangeQueryParams{ GreaterThanOrEqual: stripe.Int64(1576842326), LessThanOrEqual: stripe.Int64(1579434326), }, } i := transaction.List(params) for i.Next() { transaction := i.IssuingTransaction() }
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var options = new TransactionListOptions { Card = "ic_1CoYuRKEl2ztzE5GIEDjQiUI", Created = new DateRangeOptions { GreaterThanOrEqual = DateTimeOffset.FromUnixTimeSeconds(1576842326).UtcDateTime, LessThanOrEqual = DateTimeOffset.FromUnixTimeSeconds(1579434326).UtcDateTime, }, }; var service = new TransactionService(); var transactions = service.List(options);

    Transactions usually contain the ID of their original authorization in the authorization field. In some cases, including refunds or a force-cleared purchase, there isn’t an authorization that a transaction can link to. In these cases, the authorization field has a value of null.

    You can also include pending purchases in your statements by listing authorizations that have a status of pending. These authorizations hold funds but have not yet been captured, and as a result no transactions have been created for them yet.

    curl https://api.stripe.com/v1/issuing/authorizations \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d card=ic_1CoYuRKEl2ztzE5GIEDjQiUI \ -d status=pending
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' authorizations = Stripe::Authorization.list({ card: 'ic_1CoYuRKEl2ztzE5GIEDjQiUI', status: 'pending', })
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' authorizations = stripe.issuing.Authorization.list( card='ic_1CoYuRKEl2ztzE5GIEDjQiUI', status='pending', )
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $authorizations = \Stripe\Issuing\Authorization::all([ 'card' => 'ic_1CoYuRKEl2ztzE5GIEDjQiUI', 'status' => 'pending', ]);
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; Map<String, Object> params = new HashMap<>(); params.put("card", "ic_1CoYuRKEl2ztzE5GIEDjQiUI"); params.put("status", "pending"); AuthorizationCollection authorizations = Authorization.list(params);
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); (async () => { const authorizations = await stripe.issuing.authorizations.list({ card: 'ic_1CoYuRKEl2ztzE5GIEDjQiUI', status: 'pending', }); })();
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params := &stripe.IssuingAuthorizationListParams{ Card: stripe.String("ic_1CoYuRKEl2ztzE5GIEDjQiUI"), Status: stripe.String(string(stripe.IssuingAuthorizationStatusPending)), } i := authorization.List(params) for i.Next() { transaction := i.IssuingAuthorization() }
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var options = new AuthorizationListOptions { Card = "ic_1CoYuRKEl2ztzE5GIEDjQiUI", Status = "pending", }; var service = new AuthorizationService(); var authorizations = service.List(options);

    By automating this process, you can quickly generate card statements every month for each of your cardholders.

    Refunds

    Both refunds (in the case of legitimate transactions) and credits (in the case of accidentally-duplicated captures from the acquirer) result in transactions with a type of refund. Refunds may also be reversed (in the case of duplicated refunds from the acquirer), which results in a transaction with a type of refund_reversal.

    When we create a transaction representing a refund, credit, or refund reversal, we try to link it to the original authorization. However, in some cases, this isn’t possible. In these cases, the authorization field of the transaction is set to null, and the transaction won’t be linked to the authorization in the Issuing dashboard.

    Cash withdrawals

    Cash withdrawal is a feature that allows cardholders to receive a cash advance or use their cards at ATMs to withdraw cash. This feature isn’t currently available on issued cards.

    Next steps

    Was this page helpful?

    Thank you for helping improve Stripe's documentation. If you need help or have any questions, please consider contacting support.

    On this page