После создания котировки подтвердите её — это создаёт ордер и запускает платёж.
POST /orders/accept/{id}| Параметр | Расположение | Тип | Обязательный | Описание |
|---|---|---|---|---|
id | path | uuid | Да | ID котировки из /orders/prepare |
Idempotency-Key | header | string | Нет | Ключ идемпотентности |
Нужно право orders.create.
Заголовок Idempotency-Key защищает от двойного подтверждения при повторе запроса:
curl -X POST 'https://b2b.lumowallet.io/orders/accept/550e8400-e29b-41d4-a716-446655440000' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Idempotency-Key: accept-order-12345'- Повтор с тем же ключом возвращает ответ первого успешного запроса — ордер в том виде, каким он был при создании. Актуальный статус берите из
GET /orders/{id}или вебхука. - Без ключа повтор вернёт
404 QUOTE_NOT_FOUND: котировка расходуется при первом подтверждении. - Ключ действует в рамках компании и не привязан к котировке: если передать тот же ключ с другой котировкой, вернётся первый ордер. Делайте ключ уникальным для каждой котировки, например
accept-{quoteId}.
Рекомендация: всегда передавайте Idempotency-Key на продакшене.
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"amountUsdt": 52.63,
"amountRub": 5000,
"status": "created",
"paymentType": "nspk",
"paymentUntil": "2026-03-10T12:01:00.000Z",
"merchantName": "ООО Кофейня",
"externalOrderId": "order-12345",
"createdAt": "2026-03-10T12:00:00.000Z"
}Ответ — 201.
| Поле | Тип | Описание |
|---|---|---|
id | uuid | ID ордера — совпадает с ID котировки |
amountUsdt | number | Сумма в USDT |
amountRub | number | Сумма в рублях |
status | string | Текущий статус. Сразу после accept — created |
paymentType | string | nspk, st00012 или gibdd_uin — как в котировке |
paymentUntil | datetime | Срок, до которого платёж должен завершиться: 60 секунд после accept для nspk, 4 минуты для st00012 и gibdd_uin, от 50 000 ₽ на 10 секунд больше |
merchantName | string | Название получателя, если известно |
externalOrderId | string | Ваш ID из котировки, если передавали |
completedAt | datetime | Время завершения — появляется у завершённого ордера |
failureReason | string | Причина неудачи или спора; до завершения — null. После спора у ордера в success может остаться прежнее значение — ориентируйтесь на status |
createdAt | datetime | Время создания |
- Заморозка средств —
amountUsdtпереходит воfrozenBalance, в доступном балансе их больше нет. - Передача в оплату — ордер уходит исполнителю.
in_progress— исполнитель взял ордер.- Финал —
success(сумма списана с баланса) илиfailed(заморозка снята). Приходит вебхукorder.status_changed.
Срок оплаты зависит от типа платежа, точное время приходит в paymentUntil:
paymentType | Срок после accept |
|---|---|
nspk | 60 секунд |
st00012, gibdd_uin | 4 минуты |
От 50 000 ₽ срок на 10 секунд больше. Если к этому моменту ордер не завершился и спор по нему не открыт, он переводится в failed с failureReason: "Order expired", заморозка снимается и приходит вебхук. Если оплата всё же прошла позже, ордер перейдёт из failed в success и сумма спишется с баланса — см. Жизненный цикл ордера.
Все переходы — в разделе Жизненный цикл ордера.
| HTTP | errorCode | Описание |
|---|---|---|
| 400 | BAD_REQUEST | id — не UUID (Validation failed (uuid is expected)) |
| 400 | QUOTE_EXPIRED | Котировка истекла (TTL 30 секунд) — создайте новую |
| 400 | INSUFFICIENT_BALANCE | Доступного баланса меньше amountUsdt |
| 401 | AUTH_REQUIRED / INVALID_API_KEY | Нет ключа или ключ неверный |
| 403 | PERMISSION_DENIED | У ключа нет права orders.create |
| 404 | QUOTE_NOT_FOUND | Котировки нет: id неверный, она уже подтверждена или удалена после истечения |
| 500 | INTERNAL_ERROR | Платёжный сервис недоступен. Ордер не создан, средства не заморожены — можно повторить, пока котировка не истекла |
| 502 | WALLET_BACKEND_ERROR | Платёжный сервис не принял ордер. Средства не заморожены, котировка не израсходована — можно повторить, пока она не истекла. Если ошибка повторяется, платёж этому получателю не принимается |
# 1. Создаём котировку
QUOTE=$(curl -s -X POST 'https://b2b.lumowallet.io/orders/prepare' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"qrCode": "https://qr.nspk.ru/..."}')
QUOTE_ID=$(echo $QUOTE | jq -r '.id')
# 2. Подтверждаем
curl -X POST "https://b2b.lumowallet.io/orders/accept/$QUOTE_ID" \
-H 'X-API-Key: YOUR_API_KEY' \
-H "Idempotency-Key: accept-$QUOTE_ID"- Жизненный цикл ордера — все статусы и переходы
- Webhooks — получение уведомлений о статусе