Developers
Create an invoice
One POST request creates an invoice and returns the link to the payment page. The customer picks a coin and a network there.
Request
curl
curl -X POST https://api.crybit.net/api/v1/payments \
-H "X-Public-Key: pk_…" \
-H "X-Private-Key: sk_…" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"amount":1490,"currency":"RUB","order_id":"ORD-1048","purpose":"Order 1048"}'| Field | Meaning |
|---|---|
amount | Required. A number from 0.01. There is a minimum in USDT because the network fee cannot exceed the invoice when the merchant pays it: ask GET /api/payments/quote for the current minimum. |
currency | Required. Fiat (RUB, USD, EUR, CNY, GBP, CHF, JPY, KZT and other major currencies) or USDT/USDC. The amount is converted at the live rate. |
order_id | Your own order id, up to 80 characters. If empty, CryBit generates CB-…. |
purpose | Description, up to 240 characters. |
ttl_minutes | Lifetime from 5 to 1440 minutes, 30 by default. |
return_url | Where the customer returns after payment (http or https, up to 500 characters). Falls back to the merchant return URL. |
crypto, network | Optional. Pass both to get the address, the amount and a QR code in the response at once, for example USDT and TRC-20. |
confirmation | Optional. {"type":"embedded"} for the embedded widget. The token is always in the response. |
Response
The response is 201 with the invoice object. Send the customer to callback_url (the payment page). Without crypto and network, needs_method is true and the customer chooses on that page.
JSON
{
"uuid": "28d0ff38-949c-435e-ad41-c81c219b3597",
"order_id": "ORD-1048",
"amount": 1490,
"currency": "RUB",
"status": "waiting",
"sandbox": true,
"needs_method": true,
"callback_url": "https://pay.crybit.net/28d0ff38-949c-435e-ad41-c81c219b3597",
"confirmation": { "type": "embedded", "confirmation_token": "28d0ff38-…", "widget_url": "https://pay.crybit.net/widget.js" },
"expires_at": "2026-09-21T13:41:42+00:00"
}Status
GET /api/v1/payments/{uuid} returns the same object. The status is waiting, paid, expired or cancelled. After the customer chooses a network the object has crypto, network, address and the fee; after payment it has status paid, txid and paid_at. A waiting invoice past its lifetime becomes expired when you ask for it. fee_payer is shop when the merchant pays the fee and buyer when the amount to pay already includes it.
FAQ
Which headers do I send?
X-Public-Key and X-Private-Key, both required. A missing, wrong or old private key returns 401.
Is there a rate limit?
60 requests per minute per key.
