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"}'
FieldMeaning
amountRequired. 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.
currencyRequired. 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_idYour own order id, up to 80 characters. If empty, CryBit generates CB-….
purposeDescription, up to 240 characters.
ttl_minutesLifetime from 5 to 1440 minutes, 30 by default.
return_urlWhere the customer returns after payment (http or https, up to 500 characters). Falls back to the merchant return URL.
crypto, networkOptional. Pass both to get the address, the amount and a QR code in the response at once, for example USDT and TRC-20.
confirmationOptional. {"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.

More

Get an API key