Unscheduled payments with stored card details
Last updated: December 17, 2025
With an unscheduled payment agreement, you can request to store a customer's card details during an initial transaction and perform a card-not-present (CNP) transaction with the stored card at a later date. These types of transactions are referred to as merchant-initiated transactions (MITs).
For example, a customer may provide their card details when checking in to a hotel, but will only be charged after they check out, at which point they may have incurred additional charges.
In regions that require Strong Customer Authentication (SCA), you must enable 3D Secure (3DS) authentication for the initial payment by setting 3ds.enabled to true in the initial payment request.
If you do not supply the required information, your payment request has a higher risk of declining with a 20154 response code. If this happens, we automatically upgrade the payment to 3DS and retry the transaction. See SCA compliance for more information.
You must also set 3ds.challenge_indicator to challenge_requested_mandate to prevent subsequent CNP transactions from being declined.
Information
If the transaction qualifies, you can also make use of 3DS exemptions.
For more information, see SCA compliance.
To obtain consent for an unscheduled payment via a card verification transaction, call the Request a payment or payout endpoint with the following fields:
amount- Set to0.payment_type- Set toUnscheduled.
You do not need to set source.store_for_future_use to true. Unscheduled payments automatically request to store the cardholder's details.
Alternatively, you can perform an initial transaction in which amount is set to a non-zero value and store_for_future_use is set to true.
post
https://api.checkout.com/payments
1{2"source": {3"type": "card",4"number": 4242424242424242,5"expiry_month": 10,6"expiry_year": 20267},8"amount": 0,9"currency": "USD",10"payment_type": "Unscheduled",11"merchant_initiated": false,12"3ds": {13"enabled": true,14"challenge_indicator": "challenge_requested_mandate"15}16}
1{2"id": "pay_4hlqceyyib5ezpxtpdpwfhwtda",3"status": "Pending",4"reference": "ORD-5023-4E89",5"3ds": {6"downgraded": false,7"enrolled": "Y"8},9"source": {10"type": "id",11"id": "src_nwd3m4in3hkuddfpjsaevunhdy"12},13"_links": {14"self": {15"href": "https://api.sandbox.checkout.com/payments/pay_fbfrj7f3bwou5bdgmzsryd223i"16},17"actions": {18"href": "https://api.sandbox.checkout.com/payments/pay_fbfrj7f3bwou5bdgmzsryd223i/actions"19},20"redirect": {21"href": "https://api.sandbox.checkout.com/redirect/act_y3oqhf46pyzuxjbcn2giaqnb44"22}23}24}
The response returns a payment instrument value in the source.id field, which you can use to request future payments with the stored card details.
Once you've set up an unscheduled payment agreement with your customer, you can request a payment at a later date and perform a CNP transaction.
- Call the Request a payment or payout endpoint with the following fields:
payment_type– Set toUnscheduled.merchant_initiated– Set totrue.previous_payment_id– Set to the ID of initial CIT.
post
https://api.checkout.com/payments
1{2"source": {3"type": "id",4"id": "src_nwd3m4in3hkuddfpjsaevunhdy"5},6"amount": 5000,7"currency": "USD",8"payment_type": "Unscheduled",9"merchant_initiated": true,10"previous_payment_id": "pay_4hlqceyyib5ezpxtpdpwfhwtda",11"processing": {12"merchant_initiated_reason": "delayed_charge"13}14}
To improve your approval rates and chargeback processes, we recommend that you include the merchant_initiated_reason field and set it to one of the following:
resubmission– Use when the original purchase has occurred, but you could not get authorization at the time that goods or services were provided. For example, when goods or services were provided, but the post-event authorization request was declined for insufficient funds.delayed_charge– Use when there is a delayed charge. For example, in travel and cruise environments, where a delayed charge is used to complete a supplemental account charge after original services were provided.no_show– Use when the cardholder entered into an agreement to purchase but they failed to meet the terms of the agreement.reauthorization– Use when an additional purchase was made after the original purchase, typically for delayed or split orders.
This improves issuer visibility over the intent of the transaction.
Note
If you process a payment with full card details or network tokens stored in a card-on-file system external to Checkout.com, you must set source.stored to true in the request.
1{2"source": {3"type": "card",4"number": 4242424242424242,5"expiry_month": 10,6"expiry_year": 2026,7"stored": true8},9"amount": 5000,10"currency": "USD",11"payment_type": "Unscheduled",12"merchant_initiated": true,13"previous_payment_id": "pay_4hlqceyyib5ezpxtpdpwfhwtda",14"processing": {15"merchant_initiated_reason": "delayed_charge"16}17}
If you do not provide a previous_payment_id:
- Checkout.com automatically attempts to retrieve the payment ID from the initial CIT in the payment series.
- If the fallback mechanism fails to find a payment ID, we attempt to downgrade the MIT to a CIT and apply relevant exceptions.
Note
Do not use the fallback mechanism as your primary method of managing transaction IDs.
Merchant-initiated transactions (MIT) fall out of scope of SCA and qualify for exemption under the merchant-initiated exclusion, which means 3DS authentication is not required.
You can either set 3ds.enabled to false, or omit it from the request.
1{2"id": "pay_4prafl3phiyejkfrjtgzlh4kye",3"action_id": "act_ep5277oczf7u7lg6hrsscbt6xy",4"amount": 100,5"currency": "USD",6"approved": true,7"status": "Authorized",8"auth_code": "482LT5",9"response_code": "10000",10"response_summary": "Approved",11"balances": {12"total_authorized": 100,13"total_voided": 0,14"available_to_void": 100,15"total_captured": 0,16"available_to_capture": 100,17"total_refunded": 0,18"available_to_refund": 019},20"risk": {21"flagged": false22},23"source": {24"id": "src_y4pwpefkykre7ijbeyxjsxdkf4",25"type": "card",26"expiry_month": 12,27"expiry_year": 2025,28"scheme": "Visa",29"last4": "4242",30"fingerprint": "005D09BED0F110E7B3B13407DF0167F6E68C2FEFAB094D49DA4B4BFAE459C569",31"bin": "424242",32"card_type": "CREDIT",33"card_category": "CONSUMER",34"issuer": "Test Bank",35"issuer_country": "GB",36"product_id": "F",37"product_type": "Visa Classic",38"payment_account_reference": ""39},40"processed_on": "2023-01-25T16:42:20.8748358Z",41"reference": "ORD-5023-4E89",42"scheme_id": "481108533665280",43"processing": {44"acquirer_transaction_id": "931228481108533665280",45"retrieval_reference_number": "302516931228"46},47"expires_on": "2023-02-01T16:42:20.8106477Z",48"_links": {49"self": {50"href": "https://api.sandbox.checkout.com/payments/pay_fbfrj7f3bwou5bdgmzsryd223i"51},52"actions": {53"href": "https://api.sandbox.checkout.com/payments/pay_fbfrj7f3bwou5bdgmzsryd223i/actions"54},55"redirect": {56"href": "https://api.sandbox.checkout.com/redirect/act_y3oqhf46pyzuxjbcn2giaqnb44"57}58}59}
Information
You may be able to automatically retry failed payments if you configure scheduled retries, or enable automatic downtime retries.