/ api/ v1/ sessions
Secret keyReturns 201 {id, url, amount, currency, priced?, expiresAt}. amount is the USDT the customer pays; priced is the locked quote, there unless you price in USDT.
| Name | Type | Required | Description |
|---|---|---|---|
amountBody · string · Required | string | Required | Your price as a decimal string, like "25.00" (up to 6 decimals), in currency. 1.00 to 1,000.00 USDT once converted. |
currencyBody · string · Optional | string | Optional | USDT (the default), USD, EUR, GBP, INR, AED or SGD. Any but USDT is converted at a quote locked for the checkout. |
referenceBody · string · Optional | string | Optional | Your order id, up to 40 characters, trimmed. It comes back on the checkout, the payment and the webhook. The SDK's orderId. |
itemsBody · array · Optional | array | Optional | Up to 20 {name, qty, price}: qty 1 to 999, price a string in currency. They must add up to amount. |
returnUrlBody · string · Optional | string | Optional | Where the checkout's back link goes: http or https, up to 200 characters. A hint for the browser, never proof of payment. |
Idempotency-KeyHeader · string · Optional | string | Optional | 1 to 255 characters. The same key and body within 24 hours gets the first checkout back; another body gets 422. |
curl "$GATEWAY_URL/api/v1/sessions" \
-H "Authorization: Bearer $GATEWAY_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-42" \
-d '{
"amount": "20.00",
"currency": "EUR",
"reference": "order-42",
"returnUrl": "https://shop.example/"
}'
{
"id": "9b2f6c1e-4d7a-4f3b-8e21-5a0c3d9e7b14",
"url": "https://your-gateway.example/checkout/9b2f6c1e-4d7a-4f3b-8e21-5a0c3d9e7b14",
"amount": "22.51",
"currency": "EUR",
"priced": {
"currency": "EUR",
"amount": "20.00",
"rate": "0.88875",
"rateAt": "2026-11-06",
"source": "Frankfurter (ECB and central-bank reference rates)"
},
"expiresAt": "2026-11-06T10:40:00.000Z"
}