Create a checkout session
Bills a payer a FIXED amount. destAmount is the amount you receive, and the payer covers whatever the route costs on top. Use this when you are selling something at a known price.
Creation is idempotent on orderId: replaying the same orderId while a session is still open returns the EXISTING session with 200 instead of creating a second one, so a retried request cannot double-charge. A new session is 201. Multi-destination Checkout is deprecated; existing requests remain supported during migration to one fixed Checkout destination.
Authorizations
Secret partner API key (sk_live_… or sk_test_…). Required to create or manage payment sessions. Server-side only — it can move money, so it must never reach a browser bundle. The key's prefix also selects the environment: sk_test_ is confined to testnets.
Body
Your identifier for this payment, and the IDEMPOTENCY key. Creating twice with the same orderId returns the existing non-terminal session with a 200 instead of a 201, rather than charging the payer twice. Send one, and send the same one on retry.
"order_1029"
Destination chain id — where the recipient is paid.
8453
Destination token address on chain.
"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
Amount in BASE UNITS, as a string (10 USDC at 6 decimals is "10000000"). A string because these exceed IEEE-754 safe range at 18 decimals. Omit for an OPEN amount — the payer names it — which is the normal shape for deposit and legal for withdrawal; a checkout almost always fixes it.
"10000000"
Address that receives the funds on the destination chain.
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
Alternative destinations offered to the payer. Mutually exclusive with top-level chain/token/recipient/amount/minAmount/maxAmount. One entry takes the legacy single-session path; two or more require payer selection.
Arbitrary JSON echoed back on reads and webhooks. Never shown to the payer.
Where to send the payer after a completed payment.
Where to send the payer if they abandon the payment.
Lower bound for an OPEN-amount session, base units. Ignored when amount is fixed.
Upper bound for an OPEN-amount session, base units. Ignored when amount is fixed.
Session lifetime in seconds. Defaults to the server's configured TTL.
1800
Response
Idempotent replay: the existing non-terminal session for the same partner and orderId.
W3C trace id of the request — correlate with logs/traces in SigNoz.
"4bf92f3577b34da6a3ce929d0e0e4736"
Domain error code. OK on success; non-OK values come with a non-null error.
OK, BAD_REQUEST, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, RATE_LIMITED, PAYLOAD_TOO_LARGE, UNSUPPORTED_CHAIN, INTERNAL_ERROR, UPSTREAM_TIMEOUT, UPSTREAM_ERROR, SERVICE_UNAVAILABLE, KILL_SWITCH_ACTIVE, CIRCUIT_BREAKER_OPEN, NO_QUOTE_AVAILABLE, QUOTE_STALE, SIMULATION_REVERTED, INVALID_PARAMS, AMOUNT_OUT_OF_BOUNDS, PAYOUT_TOKEN_NOT_ALLOWED, RECIPIENT_NOT_ALLOWLISTED, PAYMENT_EXPIRED, PAYMENT_NOT_FOUND, NOT_CONFIGURED, INSUFFICIENT_LIQUIDITY, ROUTE_TEMPORARILY_UNAVAILABLE, UNSUPPORTED_ROUTE, OVER_DELIVERY_CAP "OK"
Human-readable error message. null on success.
null
Endpoint-specific payload. null on error.