Sandbox

Pay a payment's checkout (sandbox only)

POST/sandbox/payments/{paymentId}/complete

Sandbox 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.

Authentication
ApiKeyAuth
Execution
asynchronous

Parameters

  • paymentIdstringpathrequired
    A payment's id. Opaque — use it as you received it.

    Example: pay_019985c24a6e7c3b9f102d5e8a1b3c4d

    pattern ^pay_[0-9a-f]{32}$

  • Idempotency-Keystringheaderrequired
    Client-generated unique key for this logical request (UUID recommended). See Idempotency.

    min length 1 · max length 255

  • X-Request-Idstringheader
    Optional client correlation id; echoed back unchanged.

    max length 128

Request body application/jsonrequired

  • checkoutUrlstring (uri)required
    The payment's checkout.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-Idstring
    The client's X-Request-Id if supplied, otherwise a server-generated id. Equals traceId in problems.
  • RateLimit-Limitinteger
  • RateLimit-Remaininginteger
  • RateLimit-Resetinteger
    Seconds until the window resets.
  • Idempotent-Replayedboolean
    true when this response was replayed from an earlier request with the same Idempotency-Key.

Schema application/json

  • objectstringrequired

    Allowed values: payment

  • idstringrequired
    A payment's id. Opaque — use it as you received it.

    Example: pay_019985c24a6e7c3b9f102d5e8a1b3c4d

    pattern ^pay_[0-9a-f]{32}$

  • merchantReferencestringrequired
    Your own reference for this payment, as you sent it.
  • statusstringrequired
    pending awaiting the customer — also after a failed attempt, while the customer may retry · processing customer acted, settlement in flight · completed funds credited · failed not used for payments: one never paid ends expired · cancelled · expired checkout TTL elapsed unpaid (a customer who committed just before the deadline can still turn it completed) · refunded. (partially_refunded is not reported yet.)

    Allowed values: pendingprocessingcompletedfailedcancelledexpiredrefunded

  • amountMoneyrequired
    Decimal 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, so 10.100 EUR is fine and 10.123 EUR is 400 validation_failed on amount.value.
    • valuestringrequired

      Example: 149.90

      pattern ^-?\d{1,18}(\.\d{1,18})?$

    • currencystringrequired
      ISO 4217 code for fiat (EUR), asset ticker for crypto (USDT).

      Example: EUR

      pattern ^[A-Z0-9]{3,10}$

  • feeobject
    Present once the payment is completed: the fee charged to you on it, in the payment's currency. You were credited amount less this.
    • valuestringrequired

      Example: 149.90

      pattern ^-?\d{1,18}(\.\d{1,18})?$

    • currencystringrequired
      ISO 4217 code for fiat (EUR), asset ticker for crypto (USDT).

      Example: EUR

      pattern ^[A-Z0-9]{3,10}$

  • methodstringrequired

    Example: jeton_wallet

  • checkoutobject
    Present while the payment is pending or processing.
    • urlstring (uri)
      Redirect the customer here. Returned once, in the create response only — the checkout token is stored hashed, so GET cannot reproduce it. Persist it with your order.
    • expiresAtstring (date-time)required
      RFC 3339, UTC, with millisecond precision.

      Example: 2026-09-18T10:15:30.123Z

  • customerCustomer
    The payer. Only the e-mail is reported for now; name, phone, country and locale are not provided yet.
    • emailstring (email)

      max length 100

  • payerobject
    Present once the payment is completed: the Jeton user who actually paid. Distinct from customer, which is what you sent. Pass payer.customerNumber as destination.customerNumber on POST /payouts to pay the same customer back.
    • customerNumberstringrequired
  • languagestring
  • createdAtstring (date-time)required
    RFC 3339, UTC, with millisecond precision.

    Example: 2026-09-18T10:15:30.123Z

  • updatedAtstring (date-time)required
    Last change. It never moves backwards, so use it to discard stale webhook snapshots.

    Example: 2026-09-18T10:15:30.123Z

  • completedAtstring (date-time)
    Present once the payment is completed — when the funds were credited.

    Example: 2026-09-18T10:15:30.123Z