Skip to main content

Get Checkout Status

Poll the status of a previously submitted checkout. Returns the latest CheckoutResult.

URL

GET /api/c2a/offer/checkout/{trackingId}/status

Request Parameters

NameTypeDescription
trackingIdstringPath parameter, required. The trackingNumber from the original Submit Checkout response.

Response Parameters

CheckoutResult (HTTP 200). Same shape as the submit response. The status.messageCode is the source of truth.

messageCodeStageAction
CHECK_OUT_PROCESSINGWorker still processing.Keep polling, respect Retry-After.
CHECK_OUT_3DS_REQUIREDPSP requires 3DS challenge.Present redirectInstructions.htmlContent or .redirectUrl to the end-user.
CHECK_OUT_DONEPayment captured, entitlements delivered.Terminal success.
CHECK_OUT_FAILEDAuthorization, capture, or fulfilment failed.Terminal failure. Inspect message.

RedirectInstructions

Returned when status = CHECK_OUT_3DS_REQUIRED or any redirect-bound state.

NameTypeDescription
redirectUrlstringHosted page to navigate the user to.
htmlContentstringInline HTML form to post (3DS step-up).
threeDIdentifierstringPSP-side 3DS reference.
isRedirectRequiredbooleanWhether the client must act.
hasNextStepsbooleanMore steps after this redirect (resume polling after the browser returns).
showHtmlContentbooleanRender htmlContent instead of a redirect.

Sample Response — terminal success

{
"trackingNumber": "trk_01HZ9XPZ3K2A8E0VBVQH7N9XGB",
"status": { "messageCode": "CHECK_OUT_DONE" },
"followUpInstructions": { "canFollowUp": false }
}

3DS required

{
"trackingNumber": "trk_01HZ9XPZ3K2A8E0VBVQH7N9XGB",
"status": { "messageCode": "CHECK_OUT_3DS_REQUIRED" },
"redirectInstructions": {
"redirectUrl": "https://psp.example/3ds/abc",
"isRedirectRequired": true,
"hasNextSteps": true,
"showHtmlContent": false
},
"followUpInstructions": { "retryAfterSeconds": 3, "canFollowUp": true }
}

Not Found (HTTP 404)

trackingId unknown for this tenant.

{
"status": { "messageCode": "ORDERED_ITEM_NOT_FOUND" }
}

Conflict (HTTP 409)

State conflict (e.g. tracking belongs to another tenant). Body is ProblemDetails.

Polling Pattern

1. POST /checkout                       -> 202, trackingNumber, Retry-After: 2
2. wait `retryAfterSeconds`
3. GET /checkout/{trackingId}/status -> 200, status = CHECK_OUT_PROCESSING
4. repeat until status ∈ { CHECK_OUT_DONE, CHECK_OUT_FAILED, CHECK_OUT_3DS_REQUIRED }
5. if 3DS: drive the user through redirectInstructions, then resume polling

Sample Codes

curl --location \
'https://acme.sandbox.azotte.com/api/v1/c2a/offer/checkout/trk_01HZ9XPZ3K2A8E0VBVQH7N9XGB/status' \
--header 'x-tn: e2a1c7b2-4f3a-4b8e-9c2d-1a2b3c4d5e6f' \
--header 'x-api-key: sk_dev_acme_sample_123456789'