Pay a payment's checkout (sandbox only)
/sandbox/payments/{paymentId}/completeSandbox only. In production this path does not exist and answers 404.
The sandbox's test customer pays the payment's checkout, through the same path a real customer's payment takes:
the payment becomes completed, your account is credited, and the payment.completed event is recorded and
sent to your webhook as for any payment.
Send the payment's checkout.url exactly as the create response returned it. Only the hash of its token is
stored, so the URL is how the sandbox knows you hold the checkout. A URL that is not this payment's is
404 not_found, like a payment id that is not yours.
Always 202 with the payment as it stands, usually still pending or processing. The completion follows as
it does for a real payment: wait for the webhook, or read GET /payments/{paymentId}. A refusal is the real
checkout's: a payment that can no longer be paid (expired, already paid) is refused with the code the checkout
gives. Requires sandbox:write.
Parameters
paymentIdstringpathrequiredA payment's id. Opaque — use it as you received it.Example:
pay_019985c24a6e7c3b9f102d5e8a1b3c4dpattern ^pay_[0-9a-f]{32}$
Idempotency-KeystringheaderrequiredClient-generated unique key for this logical request (UUID recommended). See Idempotency.min length 1 · max length 255
X-Request-IdstringheaderOptional client correlation id; echoed back unchanged.max length 128
Request body application/jsonrequired
checkoutUrlstring (uri)requiredThe payment'scheckout.url, exactly as the create response returned it.
Responses
The payment as it stands. Its completion follows asynchronously.
Headers
Locationstring (uri-reference)The resource URL to poll for the current state (RFC 9110 §15.3.3 status monitor).X-Request-IdstringThe client'sX-Request-Idif supplied, otherwise a server-generated id. EqualstraceIdin problems.RateLimit-LimitintegerRateLimit-RemainingintegerRateLimit-ResetintegerSeconds until the window resets.Idempotent-Replayedbooleantruewhen this response was replayed from an earlier request with the sameIdempotency-Key.
Schema application/json
objectstringrequiredAllowed values:
paymentidstringrequiredA payment's id. Opaque — use it as you received it.Example:
pay_019985c24a6e7c3b9f102d5e8a1b3c4dpattern ^pay_[0-9a-f]{32}$
merchantReferencestringrequiredYour own reference for this payment, as you sent it.statusstringrequiredpendingawaiting the customer — also after a failed attempt, while the customer may retry ·processingcustomer acted, settlement in flight ·completedfunds credited ·failednot used for payments: one never paid endsexpired·cancelled·expiredcheckout TTL elapsed unpaid (a customer who committed just before the deadline can still turn itcompleted) ·refunded. (partially_refundedis not reported yet.)Allowed values:
pendingprocessingcompletedfailedcancelledexpiredrefundedamountMoneyrequiredDecimal amount as a string — never a float, never minor units. An amount you send may carry no more decimal places than its currency has (and never more than 8); trailing zeros do not count, so10.100 EURis fine and10.123 EURis400 validation_failedonamount.value.valuestringrequiredExample:
149.90pattern ^-?\d{1,18}(\.\d{1,18})?$
currencystringrequiredISO 4217 code for fiat (EUR), asset ticker for crypto (USDT).Example:
EURpattern ^[A-Z0-9]{3,10}$
feeobjectPresent once the payment is completed: the fee charged to you on it, in the payment's currency. You were creditedamountless this.valuestringrequiredExample:
149.90pattern ^-?\d{1,18}(\.\d{1,18})?$
currencystringrequiredISO 4217 code for fiat (EUR), asset ticker for crypto (USDT).Example:
EURpattern ^[A-Z0-9]{3,10}$
methodstringrequiredExample:
jeton_walletcheckoutobjectPresent while the payment ispendingorprocessing.urlstring (uri)Redirect the customer here. Returned once, in the create response only — the checkout token is stored hashed, soGETcannot reproduce it. Persist it with your order.expiresAtstring (date-time)requiredRFC 3339, UTC, with millisecond precision.Example:
2026-09-18T10:15:30.123Z
customerCustomerThe payer. Only the e-mail is reported for now; name, phone, country and locale are not provided yet.emailstring (email)max length 100
payerobjectPresent once the payment is completed: the Jeton user who actually paid. Distinct fromcustomer, which is what you sent. Passpayer.customerNumberasdestination.customerNumberonPOST /payoutsto pay the same customer back.customerNumberstringrequired
languagestringcreatedAtstring (date-time)requiredRFC 3339, UTC, with millisecond precision.Example:
2026-09-18T10:15:30.123ZupdatedAtstring (date-time)requiredLast change. It never moves backwards, so use it to discard stale webhook snapshots.Example:
2026-09-18T10:15:30.123ZcompletedAtstring (date-time)Present once the payment is completed — when the funds were credited.Example:
2026-09-18T10:15:30.123Z