Cryptocurrency
Orders in RUB or USD paid by the payer in cryptocurrency
Before you start
Authorization
How to sign your requests with the API token.
Create payment
The base order request that this page extends.
This payment method is not enabled for all merchants. Check availability with your manager.
Overview
A crypto payment is a regular order in fiat currency: you create it in RUB or USD, and the payer pays the equivalent in cryptocurrency. No extra fields are needed: the method is selected by the terminal your service is connected to.
| Order currency | What the payer pays | Who sets the token |
|---|---|---|
RUB, USD | Cryptocurrency, e.g. USDT (TRC-20) or BTC | Terminal settings, not the payer |
The payment system converts the order amount into the token at the current rate. The payer does not choose the token: it is fixed in the terminal settings. Ask your manager which token and network are enabled for your account.
Request example
Send a regular order creation request in RUB or USD:
curl -X POST "https://api.1capital.capital/v1/orders" \
-H "Content-Type: application/json" \
-H "X-Api-Token: YOUR_API_TOKEN" \
-d '{
"amount": "5000.00",
"currency": "RUB",
"serviceId": 3,
"externalId": "order_12345",
"purpose": "Payment for order #12345",
"successUrl": "https://example.com/success",
"failUrl": "https://example.com/fail",
"callbackUrl": "https://example.com/webhooks/payments"
}'Response
The response is a standard order object. The order is created with the CREATED status; redirect the payer to paymentLink to complete the payment.
Order object fields
Crypto orders come with paymentType: "CARD": there is no separate payment type for cryptocurrency. To tell crypto orders apart, use terminalId.
What the payer sees
Redirect the payer to paymentLink. Depending on the terminal, the payer lands on one of two pages:
- the provider's payment page, where the payment is completed;
- our payment page with the transfer details:
- wallet address and its QR code;
- exact amount in the token;
- tag / memo, if the network requires one. A transfer without it is not credited, so the payer must enter it exactly as shown;
- a timer showing how long the details are valid.
Wallet details are shown only on the payment page. The API does not return them: you cannot render them in your own interface.
Final amount
The amount of a crypto order can differ from the amount you requested. If the payer transfers less than required, the order stays PENDING until the payment time runs out: during this time the payer can still send the rest. After that the order is closed as COMPLETED for the amount actually paid, converted into the order currency. The amount field of the order is updated to this value.
Credit the payer with the amount from the webhook or from the order status, not with the amount from your request. A transfer received after the payment time has run out does not change the order.
Statuses
Crypto orders use the regular order statuses:
| Status | When |
|---|---|
PENDING | Awaiting the transfer and its confirmation in the network, or awaiting the rest of an underpaid amount |
COMPLETED | The transfer is confirmed. amount is the amount actually paid, see Final amount |
EXPIRED | Nothing was paid before the payment time ran out |
FAILED | The payment failed on the provider's side |
Webhooks are sent on every status change, the same way as for other methods, see Order status and webhooks.
Test mode
On a test terminal no transfer is made; the order status follows the amount, as for other methods: 1000 — COMPLETED, 1001 — CANCELED, 1002 — FAILED, 1003 — COMPLETED, then REFUND, any other amount — EXPIRED in 5 minutes.
Recommendations
- Take the paid amount from the webhook, not from your request: it can be lower after an underpayment.
- Wait for
COMPLETEDbefore delivering goods: a transfer in the network is not yet a confirmed payment.