Skip to main content

Submit Checkout

Submits an order built from a previously resolved purchase offer. Returns 202 Accepted with a trackingNumber and follow-up polling instructions.

URL

POST /api/c2a/offer/checkout

Request Parameters

Body: CheckoutRequest.

NameTypeDescription
order (alias ORD)object (OrderCart)Required. The cart, bound to a resolved offerIdentifier.
paymentMethod (alias PMT)object (PaymentMethodDto)Required. Payment instrument or stored-method reference.

OrderCart

NameTypeDescription
offerIdentifier (alias OID)stringRequired. Must come from a fresh POST /c2a/offer/bundles response and be non-expired.
correlationId (alias CLD)stringCaller-side correlation id (your order id) for log joining. Used for idempotency.
installmentIdentifierstringOptional installment selection.
resellerIDintegerReseller / partner attribution.
items (alias ITM)array (CheckoutOrderItem[])Required. Bundles + add-ons to buy.
customer (alias CUST)object (CustomerInfo)Required. At minimum customerUrn; optionally ipAddress for risk scoring.

CheckoutOrderItem

NameTypeDescription
itemIdentifier (alias ITM)stringRequired. The itemIdentifier from the offer's artifactGroups.
parentItemIdentifier (alias PURN)stringConditional. For add-ons: parent bundle line.
quantity (alias QTY)integerDefault 1.

PaymentMethodDto

NameTypeDescription
paymentChannel (alias TP)string (EnPaymentChannel)Required. CreditCard, PayPal, Klarna, SEPA, Bank.
providerIdentifier (alias PI)stringPSP key when the caller wants to force a specific PSP. Auto-resolved when null.
useStoredMethod (alias UM)booleanIf true, charge an already-tokenized card.
creditCard (alias CC)object (CreditCardDto)Conditional. Card data (raw or stored-method reference). Required when paymentChannel = CreditCard.
storeMethodSuccessPayment (alias SM)stringTokenize the card on a successful payment.

CreditCardDto

NameTypeDescription
cardHolderName (alias CHN)stringConditional. Required for fresh-card flow.
cardNumber (alias CN)stringConditional. Raw PAN. Required for fresh-card flow. Never logged.
expireYear (alias EY)stringConditional. 4 digits. Required for fresh-card flow.
expireMonth (alias EM)stringConditional. MM. Required for fresh-card flow.
cvc (alias CVC)stringConditional. Required for fresh-card flow.
cardAlias (alias CA)stringOptional user-facing label.
useStoredMethod (alias USM)booleanWhen true, use storedMethodUrn instead of PAN/CVC.
storedMethodUrn (alias SMU)stringConditional. URN from /c2a/customer/payment/methods/list. Required when useStoredMethod = true.
storedMethodToken (alias SMT)stringPSP token (server-side use).

Request Example — fresh card

{
"order": {
"offerIdentifier": "of_8z2k1q",
"correlationId": "shop-2026-0001",
"items": [ { "itemIdentifier": "it_ab1", "quantity": 1 } ],
"customer": { "customerUrn": "cu.00.482", "ipAddress": "84.118.92.180" }
},
"paymentMethod": {
"paymentChannel": "CreditCard",
"creditCard": {
"cardHolderName": "Jane Doe",
"cardNumber": "4111111111111111",
"expireMonth": "12",
"expireYear": "2029",
"cvc": "123"
},
"storeMethodSuccessPayment": "always"
}
}

Request Example — stored card

{
"order": {
"offerIdentifier": "of_8z2k1q",
"items": [ { "itemIdentifier": "it_ab1" } ],
"customer": { "customerUrn": "cu.00.482" }
},
"paymentMethod": {
"paymentChannel": "CreditCard",
"useStoredMethod": true,
"creditCard": {
"useStoredMethod": true,
"storedMethodUrn": "pm.00.482.7"
}
}
}

Response Parameters

CheckoutResult (HTTP 202 on accept).

NameTypeDescription
trackingNumberstringRequired for status polling.
statusobject (AzotteStatus)Usually CHECK_OUT_PROCESSING at this stage.
followUpInstructionsobject (RetryInstruction)Polling guidance.
followUpInstructions.retryAfterSecondsintegerWait at least this long before next poll. Default 2.
followUpInstructions.remainingRetryCountintegerSuggested max retries left.
followUpInstructions.currentRetryAttemptintegerEchoes back across polls.
followUpInstructions.followUpUrlstringAbsolute URL to the status endpoint.
followUpInstructions.canFollowUpbooleanfalse when order already terminal.
redirectInstructionsobject (RedirectInstructions)Populated only if PSP needs 3DS / hosted page.
messagestringOptional caller-facing message.

Response Headers

HeaderDescription
LocationStatus endpoint URL.
Link<{statusUrl}>; rel="status".
Retry-AfterMirrors retryAfterSeconds.

Sample Response

{
"trackingNumber": "trk_01HZ9XPZ3K2A8E0VBVQH7N9XGB",
"status": { "messageCode": "CHECK_OUT_PROCESSING" },
"followUpInstructions": {
"retryAfterSeconds": 2,
"remainingRetryCount": 30,
"currentRetryAttempt": 0,
"followUpUrl": "https://acme.sandbox.azotte.com/api/v1/c2a/offer/checkout/trk_01HZ9XPZ3K2A8E0VBVQH7N9XGB/status",
"canFollowUp": true
}
}

Conflict at admission (HTTP 409)

Order rejected (expired offer, idempotency clash, invalid stored-method URN). Body is a CheckoutResult with a non-success status.

{
"trackingNumber": null,
"status": { "messageCode": "OFFER_EXPIRED" },
"followUpInstructions": { "canFollowUp": false }
}

Sample Codes

curl --location 'https://acme.sandbox.azotte.com/api/v1/c2a/offer/checkout' \
--header 'Content-Type: application/json' \
--header 'x-tn: e2a1c7b2-4f3a-4b8e-9c2d-1a2b3c4d5e6f' \
--header 'x-api-key: sk_dev_acme_sample_123456789' \
--data '{
"order": {
"offerIdentifier": "of_8z2k1q",
"correlationId": "shop-2026-0001",
"items": [ { "itemIdentifier": "it_ab1", "quantity": 1 } ],
"customer": { "customerUrn": "cu.00.482" }
},
"paymentMethod": {
"paymentChannel": "CreditCard",
"useStoredMethod": true,
"creditCard": { "useStoredMethod": true, "storedMethodUrn": "pm.00.482.7" }
}
}'