NUMUS Документация API

QR-платежи

Для каждого заказа создаётся отдельный QR с суммой и сроком действия. NUMUS определяет партнёра по подписи. Если активна одна платёжная точка, её идентификатор в запросе не требуется.

Создать QR

POST https://api.numus.online/api/qr

Метод требует подпись Ed25519 и уникальный Idempotency-Key длиной 16–128 символов. Для сетевого повтора отправьте тот же ключ и то же тело.

POST /api/qr HTTP/1.1
Host: api.numus.online
Authorization: {"partnerID":"partner-001","key":"ssh-ed25519 ...","sign":"...","timestamp":"1784912400","nonce":"..."}
Content-Type: application/json
Idempotency-Key: order-2026-00000001

{
  "qrtype": "QRDynamic",
  "amount": 1490.50,
  "currency": "RUB",
  "qrDescription": "Заказ 100500",
  "customerID": "customer-42",
  "returnUrl": "https://merchant.example/orders/100500/payment-result"
}

Поля

ПолеЧто передавать
paymentPointIDНеобязателен при одной активной точке. При нескольких выберите точку из GET /api/integration/payment-points.
amountСумма в рублях, не более двух знаков после точки.
currencyRUB.
qrDescriptionНазначение платежа для истории. Это описание, а не идентификатор заказа.
customerIDВаш стабильный идентификатор покупателя; поле необязательное.
returnUrlНеобязательный адрес для этого заказа. Разрешён другой path и query на сохранённом HTTPS-домене.

Ответ

Если QR уже готов, ответ содержит ссылку и PNG:

{
  "id": "0190c5ad-2f51-7b1d-9f2e-e0a01d8f9a21",
  "paymentPointID": "shop-001-main",
  "amount": 1490.5,
  "currency": "RUB",
  "status": "QR_READY",
  "nspkurl": "https://qr.example/...",
  "qrImage": "data:image/png;base64,...",
  "qrExpirationDate": "2026-07-24T17:20:00Z",
  "statusUrl": "/api/qr/0190c5ad-2f51-7b1d-9f2e-e0a01d8f9a21"
}

Динамический QR действует не более 20 минут с момента создания. Используйте точное значение qrExpirationDate из ответа и после этого времени создавайте новую попытку с новым Idempotency-Key.

При статусе SUBMITTED запрашивайте statusUrl примерно раз в секунду. Остановитесь после получения QR, конечного статуса или через 45 секунд.

Сохраните поле id рядом с идентификатором заказа в своей базе. В callback оно возвращается как data.orderId и используется для связи уведомления с созданным QR-платежом.

Статусы

СтатусЗначениеДействие
CREATEDЗапрос сохранёнПодождать
SUBMITTEDQR готовитсяЗапрашивать statusUrl
QR_READYQR можно показатьОткрыть ссылку или показать PNG
PENDINGОжидается оплатаЖдать подписанное уведомление
COMPLETEDПлатёж подтверждёнОбработать событие один раз
REJECTED, FAILEDПлатёж не состоялсяСоздать новый платёж
EXPIRED, CANCELLEDQR больше не действуетСоздать новый платёж

История и дневные итоги

GET https://api.numus.online/api/payments/{paymentPointID}

Возвращает только платежи текущего партнёра. Запрос подписывается Ed25519.

GET https://api.numus.online/api/payment-totals/{paymentPointID}?date=2026-07-24

Дата трактуется по московскому времени.

Частые ошибки

КодПричинаЧто проверить
400Неверное тело или суммаНазвания полей, RUB и допустимый диапазон
401Подпись не прошла проверкуpartnerID, ключ, время, nonce и canonical body hash
404Торговая точка не найденаpaymentPointID и окружение
409Ключ уже использован с другим теломНе меняйте тело при повторе
429Превышена частотаСделайте паузу, сохранив тот же ключ
202Результат создания уточняетсяПроверяйте исходный statusUrl; не создавайте новый платёж
503Маршрут временно недоступенПовторите тот же запрос с тем же ключом