Skip to content
Last updated

Создание котировки (Prepare Order)

Первый шаг для оплаты QR-кода СБП — создание котировки с фиксированным курсом.

Endpoint

POST /orders/prepare

Параметры запроса

ПараметрТипОбязательныйОписание
qrCodestringДаQR СБП (URL/payload), строка ST00012 (ЖКХ) или gibdd:uin:{УИН} (штраф ГИБДД)
externalOrderIdstringНетВаш внутренний ID заказа

Пример запроса

curl -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/AS10003P3RCT8NTGH6LR6D3P815L3SHK?type=02&bank=100000000001&sum=50000&cur=RUB&crc=F4AB",
    "externalOrderId": "order-12345"
  }'

Пример ответа

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "amountRub": 5000.00,
  "amountUsdt": 52.63,
  "rate": 95.00,
  "paymentType": "nspk",
  "expiresAt": "2026-03-10T12:00:30Z",
  "isBalanceSufficient": true,
  "merchantName": "ООО Кофейня"
}

Поля ответа

ПолеТипОписание
iduuidID котировки (используйте для accept)
amountRubnumberСумма в рублях
amountUsdtnumberСумма в USDT по текущему курсу
ratenumberКурс RUB/USDT
paymentTypestringТип платежа: nspk, st00012 (ЖКХ) или gibdd_uin (штраф ГИБДД)
expiresAtdatetimeВремя истечения котировки
isBalanceSufficientbooleanДостаточно ли средств на балансе
merchantNamestringНазвание получателя (если доступно)

TTL котировки

Котировка действует 30 секунд. После истечения:

  • Котировка становится недействительной
  • Попытка accept вернёт ошибку 400 Quote expired
  • Необходимо создать новую котировку

Проверка баланса

Поле isBalanceSufficient показывает, достаточно ли средств для оплаты:

  • true — можно вызывать accept
  • false — сначала пополните баланс

Что можно передать в qrCode

Одно поле принимает три типа платежа — тип определяется автоматически и возвращается в paymentType:

QR СБП/NSPK (paymentType: nspk) — ссылка qr.nspk.ru, диплинк банка либо ссылка multiqr.ru / platiqr.ru:

https://qr.nspk.ru/AS10003P3RCT8NTGH6LR6D3P815L3SHK?type=02&bank=100000000001&sum=50000&cur=RUB&crc=F4AB

ЖКХ — строка ST00012 (paymentType: st00012), сумма берётся из поля Sum:

ST00012|Name=ООО УК Комфорт|PersonalAcc=40702810...|Sum=350075|Purpose=Оплата ЖКУ

Штраф ГИБДД по УИН (paymentType: gibdd_uin), сумма и реквизиты подтягиваются автоматически:

gibdd:uin:18810177230000000000

Подробности и реквизиты получателя — в гайде Оплата ЖКХ и штрафов ГИБДД.

Курс и комиссия

rate — это итоговый курс RUB/USDT с уже учтённой комиссией компании (qrRateOffsetBps). По нему рассчитан amountUsdt в этой котировке — именно эта сумма будет списана с баланса при accept. Сырой курс Rapira без комиссии и текущие лимиты на сумму можно посмотреть через GET /rates/current.

Лимиты по сумме

Каждой компании можно задать qrMinAmountRub / qrMaxAmountRub. По умолчанию: 0 ₽ ... 1 000 000 ₽. Если сумма QR не попадает в диапазон — endpoint вернёт 400 с сообщением Сумма ниже минимальной / Сумма выше максимальной. Изменение лимитов делается через техподдержку.

Ошибки

КодОшибкаОписание
400Invalid QR codeНевалидный QR-код
400QR code parsing failedОшибка парсинга QR
400Сумма ниже минимальной: N RUBСумма меньше qrMinAmountRub
400Сумма выше максимальной: N RUBСумма больше qrMaxAmountRub
400FINE_NOT_FOUND / FINE_ALREADY_PAIDШтраф ГИБДД не найден / уже оплачен
401UnauthorizedНеверный API-ключ
503NSPK service unavailable / DRIVER_HELPER_TRANSIENTСервис НСПК или проверки штрафов недоступен

Что дальше?

После получения котировки с isBalanceSufficient: true, переходите к подтверждению оплаты.