Sign in
An image of the Stripe logo
Create account
Sign in
Home
Payments
Business operations
Financial services
Developer tools
No-code
All products
Home
Payments
Business operations
Home
Payments
Business operations
Financial services
Developer tools
Overview
Issuing cards
    Overview
    Global Issuing
    Get started
    How Issuing works
    Choose your card offering
    Customize your program
    Add funds to your card program
    Manage fraud
    Cards
    Create cards
    Virtual cards
    Physical cards
    Manage cards
    Digital wallets
    Replacement cards
    Testing and support
    Testing physical cards
    Support
    Controls
    Spending controls
    Real-time authorizations
    SMS fraud alerts
    3D Secure
    PIN management
    Issuing Elements
    Token Management
    Funding
    Balance
    Issuing with Connect
    Set up an Issuing and Connect integration
    Connect funding
    Connected accounts cardholders and cards
    Purchases
    Authorizations
    Transactions
    Disputes
    Testing
    Merchant categories
    Additional information
    Choose a cardholder type
    Marketing guidance (Europe/UK)
    Product and marketing compliance guidance (US)
Crypto
Treasury
Business financing
Issuing
·
HomeFinancial servicesIssuing cards

Issuing authorizations

Learn how to use Issuing to handle authorization requests.

When a card is used to make a purchase, it generates an authorization request, which is approved or declined based on the following steps:

  1. Stripe checks that the balance used for Issuing has sufficient funds, that the card is active, and that your spending controls allow the authorization.
  2. Stripe sends an issuing_authorization.request event.
Listen for Stripe events

Set up a webhook to listen for this event so you can synchronously approve/decline Authorizations.

  1. Before closing the issuing_authorization.request event, you can approve or decline the authorization by responding directly to the webhook event (preferred) or by calling our approve or decline endpoints.
  2. If you don’t approve or decline the authorization within 2 seconds, Stripe uses your default settings to approve or decline the authorization.
  3. Stripe sends an issuing_authorization.created event, notifying you of the Authorization’s creation.

Authorization updates

When Stripe receives an authorization request, we send an issuing_authorization.created webhook event. If you approve the authorization, we deduct the amount from your Issuing balance and hold it in reserve until the authorization is either captured, voided, or expired without capture. If you decline the authorization, the status is set to closed and we don’t place any holds.

When the authorization is captured, a transaction is created and the status of the authorization is set to closed.

If the authorization request is voided, we send an issuing_authorization.updated webhook event with its status set to reversed and the amount as 0. We add the voided amount back to your Issuing balance, essentially undoing the balance impact of the original authorization.

If the authorization request is expired without capture, we send an issuing_authorization.updated webhook event with its status set to reversed and the amount representing any remaining amount authorized for possible late captures. We add the expired amount back to your Issuing balance, essentially undoing the balance impact of the original authorization.

Purchases in different currencies

Cards can be used for purchases in any currency that the card network supports. Stripe automatically converts the currency of the purchase into the card’s currency when holding funds, using the card network’s daily rate.

The merchant_amount represents the cost of the purchase in the local currency. The amount field represents the expected amount of the Transaction in the card’s currency and is not final until the Authorization has been captured.

Handling other authorizations

In addition to regular authorizations, there are a few other cases that you should be ready to handle.

Some authorizations can be partially authorized to limit spending. This allows you to authorize a specific lower amount and is useful when there are not sufficient funds to cover the full purchase.

Fueling stations in the US are a special example of this. When a card is used at a fuel dispenser, an issuing_authorization.request for 1 USD is sent. The default amount held is 100 USD to cover the unknown purchase amount. When the cardholder finishes pumping fuel, the authorization is updated and an issuing_authorization.updated event is sent to reflect the amount of the purchase.

When an authorization can be partially authorized, the is_amount_controllable field on the authorization request is set to true. You can specify the amount you would like to approve by setting the amount in the approve response.

Using with Stripe Treasury

Authorizations on cards that use funds stored in Treasury FinancialAccounts have a treasury field with references to Treasury resources: Treasury Transaction, ReceivedCredit, and ReceivedDebit.

Was this page helpful?
Questions? Contact Sales.
Need help? Contact Support.
Watch our developer tutorials.
Check out our product changelog.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
On this page
Authorization updates
Purchases in different currencies
Handling other authorizations
Using with Stripe Treasury
Stripe Shell
Test mode
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Login to your Stripe account and press Control + Backtick on your keyboard to start managing your Stripe resources in test mode. - View supported Stripe commands: - Find webhook events: - Listen for webhook events: - Call Stripe APIs: stripe [api resource] [operation] (e.g. )
The Stripe Shell is best experienced on desktop.
$