Learn how to handle authorization requests.

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

  1. An Authorization object is created
  2. Stripe checks if the Issuing balance has sufficient funds
  3. Stripe checks if the card is active
  4. Stripe checks if spending controls should decline the authorization
  5. Stripe sends an issuing_authorization.request event which you approve or decline
  6. If you do not respond to the webhook within 2 seconds, Stripe uses your default settings to approve or decline the authorization.

Authorization updates

Once an authorization request is approved, the status on the authorization is updated to pending, and the issuing_authorization.updated webhook event is sent. The amount is deducted from your Issuing balance and held in reserve until the authorization is either captured or voided. Once captured, a transaction is created, and the status of the authorization is set to closed.

If the authorization request is declined, its status is immediately set to closed. If the authorization request is voided or not captured in a timely manner, its status is set to reversed.

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 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.

Incremental authorizations are additional authorizations that come in after an original authorization. These are common in the hotel industry, for instance to cover room service or cleaning fees after checking out.

You can approve or decline incremental requests with the same webhook integration as regular authorizations. When incremental authorizations occur, Stripe sends another issuing_authorization.request event for the original Authorization object so you can decide whether to approve the updated amount. This object will have an updated pending_request, with pending_request.amount corresponding to the requested incremental amount.

{ "id": "iauth_1CmMk2IyNTgGDVfzFKlCm0gU", "object": "issuing_authorization", "approved": true, "amount": 400, "currency" : "usd", "status": "pending", "pending_request": { "amount": 100, "currency": "usd", "merchant_amount": 360, "merchant_currency": "gbp", } }

Note that approved is true, because the original authorization was approved, and that status is pending as it has not cleared. The top-level amount field corresponds to the original, approved amount for the authorization. In the example above, if the incremental amount is approved, authorization.amount will be updated to 5 USD. If the incremental amount is declined, approved will remain true (because the original authorization request was approved), and amount will remain 4 USD.

You can see a history of requests for an authorization in the request_history of the Authorization.

If a merchant decides to reduce the amount authorized, they may perform a partial reversal.

Partial reversals can be accounted for as issuing_authorization.updated events, where the original authorization’s amount and merchant_amount are lowered. Surplus held funds are released back to your available balance immediately.