Paygrator API позволяет платформам создавать QR-коды СБП, принимать платежи по подписке, получать статусы операций и выполнять возвраты.
https://api.paygrator.pro/api/payments{BASE_URL}https://api.paygrator.pro — используется в примерах нижеContent-Type: application/json)
Каждый запрос должен содержать заголовок X-Api-Token с токеном платформы.
Токен выдаётся администратором системы и привязан к контракту платформы.
X-Api-Token: ваш_токен_платформы
Для каждого токена администратор может задать список разрешённых IP-адресов. Если список задан — запросы с любых других адресов будут отклонены с кодом 401 Unauthorized до проверки самого токена.
Список задаётся строкой с IP-адресами через запятую:
192.168.1.10, 10.0.0.5, 203.0.113.42
| Значение поля | Поведение |
|---|---|
| Не задано (пусто) | Запросы принимаются с любого IP-адреса. |
192.168.1.10, 10.0.0.5 |
Запросы принимаются только с указанных адресов; остальные получают 401. |
192.168.1.0/24)
не поддерживаются. Пробелы вокруг запятых игнорируются.
Каждый контракт платформы имеет два ограничения, задаваемых администратором:
| Параметр | Описание |
|---|---|
MaxAmountPerTransaction |
Максимальная сумма одной транзакции (в копейках). |
MaxDailyAmount |
Максимальная суммарная сумма транзакций за сутки UTC (в копейках). |
При превышении любого лимита запрос возвращает 400 Bad Request
с описанием причины в поле error.
При ошибке сервер возвращает HTTP 400 Bad Request с телом:
{
"errorCode": "КОД_ОШИБКИ", // код банка или внутренний (может быть null)
"errorMessage": "Описание" // читаемое сообщение об ошибке
}
Возможные внутренние ошибки:
| Сценарий | Ответ |
|---|---|
| Неверный или отсутствующий токен | 401 Unauthorized |
| Активный контракт не найден | 400 — Активный контракт не найден. |
| Превышен лимит на транзакцию | 400 — Превышен лимит на транзакцию. |
| Превышен суточный лимит | 400 — Превышен суточный лимит. |
| Неподдерживаемая валюта | 400 — Валюта '...' не поддерживается. |
/api/payments/qr/onetime
Создаёт одноразовый QR-код СБП для приёма оплаты. После первой успешной оплаты
QR-код переходит в статус ACCEPTED и становится недействительным.
{
"amount": 10000, // сумма в копейках (обязательно)
"currency": "RUB", // валюта ISO 4217 (обязательно)
"purpose": "Оплата заказа #1234", // назначение платежа (опционально)
"redirectUrl": "https://example.com/return", // URL редиректа после оплаты (опционально)
"ttlMinutes": 15, // время жизни QR в минутах (опционально)
"imageMediaType": "image/png", // формат изображения: "image/png" или "image/svg+xml" (опционально)
"imageSize": 300 // размер изображения в пикселях 200–1000, по умолчанию 300 (опционально)
}
{
"isSuccess": true,
"uniQrId": "A2B3C4D5E6F7...", // идентификатор QR в системе банка
"payload": "https://qr.nspk.ru/...", // SBP-ссылка для генерации QR
"status": "CREATED",
"imageMediaType": "image/png", // null если imageMediaType не был передан
"imageContent": "iVBORw0KGgo...", // QR-изображение в base64, null если не запрошено
"errorCode": null,
"errorMessage": null
}
"amount": 10000.
Поля imageMediaType и imageContent заполняются только если в запросе передан imageMediaType.
/api/payments/qr/reusable
Создаёт многоразовый QR-код для привязки счёта плательщика (C2B Подписка). Плательщик сканирует QR, подтверждает привязку — после этого можно инициировать списания без повторного сканирования.
{
"purpose": "Ежемесячная подписка", // назначение (обязательно)
"redirectUrl": "https://example.com/return", // URL редиректа после привязки (опционально)
"amount": 50000, // фиксированная сумма списания в копейках (опционально)
"currency": "RUB", // валюта, обязательна при указании amount (опционально)
"ttlMinutes": 1440, // время жизни QR в минутах (опционально)
"imageMediaType": "image/png", // формат изображения: "image/png" или "image/svg+xml" (опционально)
"imageSize": 300 // размер изображения в пикселях 200–1000, по умолчанию 300 (опционально)
}
{
"isSuccess": true,
"uniQrId": "A2B3C4D5E6F7...",
"payload": "https://qr.nspk.ru/...",
"status": "CREATED",
"imageMediaType": "image/png", // null если imageMediaType не был передан
"imageContent": "iVBORw0KGgo...", // QR-изображение в base64, null если не запрошено
"errorCode": null,
"errorMessage": null
}
/api/payments/qr/status
Возвращает текущий статус одного или нескольких QR-кодов.
Можно опрашивать до получения финального статуса (ACCEPTED / REJECTED).
| Параметр | Тип | Описание |
|---|---|---|
uniQrIds |
string | Идентификаторы QR через запятую. Пример: A1B2,C3D4 |
GET {BASE_URL}/api/payments/qr/status?uniQrIds=A2B3C4D5E6F7
X-Api-Token: ваш_токен_платформы
{
"isSuccess": true,
"items": [
{
"uniQrId": "A2B3C4D5E6F7...",
"status": "ACCEPTED", // CREATED | NOT_STARTED | RECEIVED | ACCEPTED | REJECTED | BLOCKED | EXPIRED
"transactionId": "TXN123456789", // null если оплата ещё не произошла
"errorCode": null,
"errorMessage": null,
"subscriptionToken": "a1b2c3d4-...", // только для подписочных QR; null пока счёт не привязан
"memberId": "100000000111" // только для подписочных QR; null пока счёт не привязан
}
],
"errorCode": null,
"errorMessage": null
}
| Статус | Описание |
|---|---|
CREATED | QR-код создан, оплата ещё не начиналась. |
NOT_STARTED | Финансовая операция ещё не начата. |
RECEIVED | Запрос получен, ожидает подтверждения. |
ACCEPTED | Оплата завершена успешно — финальный статус. |
REJECTED | Оплата отменена — финальный статус. |
BLOCKED | QR заблокирован — финальный статус. |
EXPIRED | Истёк срок жизни QR-кода (TTL); оплата не поступила — финальный статус. |
/api/payments/qr/subscription
Создаёт подписочный QR-код СБП для привязки счёта плательщика.
После сканирования плательщик подтверждает привязку в приложении своего банка —
система получает subscriptionToken и memberId,
необходимые для последующих списаний через
/subscription/pay.
{
"purpose": "Ежемесячная подписка", // описание для плательщика, до 140 символов (опционально)
"redirectUrl": "https://example.com/return", // URL возврата после привязки (опционально)
"ttlMinutes": 1440, // время жизни QR в минутах (опционально)
"imageMediaType": "image/png", // формат изображения: "image/png" или "image/svg+xml" (опционально)
"imageSize": 300 // размер изображения в пикселях 200–1000 (опционально)
}
{
"isSuccess": true,
"uniQrId": "A2B3C4D5E6F7...", // идентификатор QR в системе банка
"payload": "https://qr.nspk.ru/...", // SBP-ссылка для генерации QR
"status": "CREATED",
"imageMediaType": "image/png", // null если imageMediaType не был передан
"imageContent": "iVBORw0KGgo...", // QR-изображение в base64, null если не запрошено
"errorCode": null,
"errorMessage": null
}
POST /api/payments/qr/subscription и получает uniQrId и payload.CallbackSubscriptionUrl с параметрами:{
"qrcId": "A2B3C4D5E6F7...", // совпадает с uniQrId
"status": "ACWP", // ACWP — привязан, RJCT — отказ
"subscriptionToken": "TOKEN_VALUE", // сохраните для списаний
"memberId": "100000012000" // ID банка плательщика, сохраните для списаний
}
subscriptionToken и memberId нужны для каждого вызова
/subscription/pay. Мы сохраняем их у себя при получении
уведомления, поэтому платформа может в любой момент получить их через
/qr/status (поля subscriptionToken и memberId)
— отдельно сохранять уведомление не обязательно.
/api/payments/subscription/pay
Инициирует списание денежных средств с привязанного счёта плательщика (C2B Подписка). Требует предварительно привязанного счёта через подписочный QR.
{
"qrcId": "A2B3C4D5E6F7...", // UniQrId подписочного QR (обязательно)
"memberId": "MEMBER_ID", // идентификатор плательщика от банка (обязательно)
"subscriptionToken": "TOKEN_VALUE", // токен подписки от банка (обязательно)
"amount": 5000 // сумма в копейках (обязательно)
}
{
"isSuccess": true,
"transactionId": null, // transactionId появляется асинхронно, отслеживайте через /operation/info
"errorCode": null,
"errorMessage": null
}
memberId и subscriptionToken передаёт банк
через уведомление о привязке счёта на URL вашего callback-сервера.
/api/payments/operation/info
Запрашивает актуальный статус операции у банка по transactionId
и обновляет запись в системе.
| Параметр | Тип | Описание |
|---|---|---|
transactionId |
string | Идентификатор транзакции, полученный ранее. |
GET {BASE_URL}/api/payments/operation/info?transactionId=TXN123456789
X-Api-Token: ваш_токен_платформы
{
"isSuccess": true,
"transactionId": "TXN123456789",
"type": "C2BQRS", // тип операции из СБП
"status": "ACCEPTED", // статус операции
"fpMessageId": "FP_MSG_ID", // идентификатор ОПКЦ СБП
"origSbpId": null, // исходный SBP-идентификатор (для возвратов)
"errorCode": null,
"errorMessage": null
}
/api/payments/transfer/rollback
Инициирует автоматический возврат (откат) подписочного перевода по QR-коду. Используется для отмены операции, инициированной через подписку. Статус отслеживается асинхронно через /operation/info.
{
"qrcId": "A2B3C4D5E6F7..." // UniQrId QR-кода (обязательно)
}
{
"isSuccess": true,
"transactionId": "TXN_ROLLBACK_ID", // transactionId операции отката
"errorCode": null,
"errorMessage": null
}
/api/payments/payment/refund
Одношаговый возврат платежа по оригинальной транзакции. Инициирует возврат и автоматически подтверждает его в фоне. Фоновый процесс циклически опрашивает статус до получения финального результата.
{
"transactionId": "TXN123456789", // transactionId исходного платежа (обязательно)
"amount": 5000, // сумма возврата в копейках (обязательно)
"currency": "RUB", // валюта ISO 4217 (обязательно)
"comment": "Возврат по запросу клиента" // комментарий (опционально)
}
{
"isSuccess": true,
"transactionId": "TXN_REFUND_ID", // transactionId операции возврата
"errorCode": null,
"errorMessage": null
}
transactionId.