Issuing transactions
Learn how to use Issuing to handle transactions.
After an authorization is approved and is captured, the status
on the authorization is set to closed
and a Transaction object is created. This normally happens within 24 hours; however hotels, airlines, and car rental companies are able to capture up to 31 days after authorization.
When an authorization is captured, two things happen.
- The
status
on the authorization is set to closed
, releasing the purchase amount held by that authorization. A balance transaction of type issuing_authorization_release
is created to represent this. - A new transaction object of type
capture
is created. The purchase amount is deducted from the balance you’re using for Issuing.
Spending controls, real time authorization controls, and card status (whether a card is active or not) don’t apply for capture. They can be used to determine whether authorizations are approved, but captures for approved authorizations always succeed.
Handling other transactions
In addition to regular transactions, there are a few other cases that you should be ready to handle.
Merchants might initiate a capture despite receiving a declined authorization, or even without an authorization. In either case, Stripe creates transaction objects, and we deduct the captured amount from your Issuing balance and send it to the merchant. If we didn’t receive an authorization request for the capture, the transaction objects won’t have a linked authorization object.
Sometimes these transactions correspond to legitimate purchases. In other cases, these transactions are unauthorized purchases or a result of fraudulent behavior. It’s up to you (or your cardholder) to recognize when this is the case and dispute illegitimate transactions. Because some of these transactions are legitimate, you can’t block them.
An example of a legitimate transaction without an authorization is a payment on an airplane. The terminals used on airplanes are usually not connected to the internet. Purchases on flights are not able to create authorizations and instead create transactions that are sent after the plane lands.
{
"id": "ipi_1GTG10EEsyYlpYZ9VJn2xV3B",
"object": "issuing.transaction",
"amount": -100,
"authorization": null,
"balance_transaction": null,
"card": "ic_1GBZQJEEsyYlpYZ99v6rq38S",
"cardholder": null,
"created": 1585783834,
"currency": "usd",
"livemode": false,
"merchant_amount": -100,
"merchant_currency": "usd",
"merchant_data": {
"category": "airlines_air_carriers",
"city": "San Francisco",
"country": "US",
"name": "Rocket Rides",
"network_id": "1234567890",
"postal_code": "94111",
"state": "CA",
"url": null
},
"metadata": {},
"type": "capture",
}
Testing
To simulate the creation of a force capture, you can use the Transaction Create Force Capture API in the Issuing test helpers.
curl https://api.stripe.com/v1/test_helpers/issuing/transactions/create_force_capture \
-u "sk_test_4eC39HqLyjWDarjtT1zdp7dc
:" \
-d card= \
-d amount=100