Merchant API Reference

Интеграционный API для приема быстрых платежей. Базовый адрес шлюза:https://api.cispay.app. Все денежные значения передаются в копейках для исключения погрешностей вычислений.

Открыть Swagger / OpenAPI
1. Создайте счет
2. Перенаправьте на чекаут
3. Получите результат

Аутентификация

Все запросы к нашему шлюзу авторизуются с помощью заголовков:

ПолеТипОписание
X-Shop-IDUUIDУникальный идентификатор вашего магазина.
X-Api-KeystringСекретный ключ авторизации (формат cis_sec_...). Должен храниться строго на вашем сервере.
cURL
curl https://api.cispay.app/balance \ -H "X-Shop-ID: c56d9539-7814-4112-9c44-59e55728a3bd" \ -H "X-Api-Key: cis_sec_live_9b2e04f32a76cc89"

Справочники системы

payment_method (Метод оплаты)

ПолеТипОписание
CARDstringОплата банковской картой РФ.
SBPstringОплата по Системе Быстрых Платежей (СБП) через QR-код.

status (Статус транзакции)

ПолеТипОписание
PENDINGstringПлатеж зарегистрирован и ожидает оплаты (время жизни — 30 минут).
PAIDstringСредства успешно списаны с плательщика.
FAILEDstringПлатеж отменен банком или провайдером.
EXPIREDstringВремя жизни платежа истекло без оплаты.
REFUNDEDstringВыполнен полный возврат средств.
JSON
// Справочные форматы статусов и методов { "payment_method": "CARD | SBP", "status": "PENDING | PAID | FAILED | EXPIRED | REFUNDED", "customer_fee_share_percent": "0-10000 (basis points; 0 = merchant absorbs the fee, 10000 = fully passed to the customer)" }

Создание платежа

POST/payments

Создает счет и возвращает ссылку `payment_url` для перенаправления покупателя.

ПолеТипОписание
amountintegerСумма в копейках. Обязательно.
order_idstringИдентификатор заказа в вашей системе (уникальный для магазина). Обязательно.
payment_methodCARD | SBPЖелаемый способ оплаты. Обязательно.
customer_idstringID покупателя в вашей системе. Обязательно при SBP.
redirect_success_urlstringАдрес возврата после успешной оплаты. Опционально.
redirect_fail_urlstringАдрес возврата при неудачном платеже. Опционально.
Запрос (JSON)
{ "amount": 150000, "order_id": "ORDER-99238", "payment_method": "CARD", "redirect_success_url": "https://myshop.ru/success", "redirect_fail_url": "https://myshop.ru/fail" }
Ответ (201 Created)
{ "id": "7fa12a88-294b-4b11-bbfe-e69c3dbeaab9", "order_id": "ORDER-99238", "status": "PENDING", "amount": 150000, "charged_amount": 150000, "payment_url": "https://cispay.app/pay/7fa12a88-294b-4b11-bbfe-e69c3dbeaab9", "created_at": "2026-07-13T10:00:00Z" }

Проверка статуса

GET/payments/status

Используется для опроса статуса платежа. Вы должны передавать либо внутренний ID шлюза (`id`), либо ваш идентификатор (`order_id`) в качестве query-параметра.

ПолеТипОписание
idstring (query)ID платежа в cisPay. Обязательно, если не передан order_id.
order_idstring (query)ID заказа мерчанта. Обязательно, если не передан id.
Запрос
curl https://api.cispay.app/payments/status?id=7fa12a88-294b-4b11-bbfe-e69c3dbeaab9 \ -H "X-Shop-ID: c56d9539-7814-4112-9c44-59e55728a3bd" \ -H "X-Api-Key: cis_sec_live_9b2e04f32a76cc89"
Ответ (200 OK)
{ "id": "7fa12a88-294b-4b11-bbfe-e69c3dbeaab9", "order_id": "ORDER-99238", "status": "PAID", "amount": 150000, "charged_amount": 150000, "payment_method": "CARD", "currency": "RUB", "store_name": "Мой Магазин", "paid_at": "2026-07-13T10:02:14Z", "created_at": "2026-07-13T10:00:00Z" }

Список транзакций

GET/transactions

Позволяет получить список последних транзакций магазина с фильтрацией по статусу. Список отсортирован по дате создания в обратном порядке.

ПолеТипОписание
limitint (query)Количество записей. По умолчанию 20, максимум 100.
offsetint (query)Смещение для постраничной пагинации. По умолчанию 0.
statusstring (query)Фильтр по статусу (PENDING, PAID, FAILED, EXPIRED, REFUNDED).
Запрос
curl "https://api.cispay.app/transactions?limit=1&status=PAID" \ -H "X-Shop-ID: c56d9539-7814-4112-9c44-59e55728a3bd" \ -H "X-Api-Key: cis_sec_live_9b2e04f32a76cc89"
Ответ
{ "items": [ { "id": "7fa12a88-294b-4b11-bbfe-e69c3dbeaab9", "order_id": "ORDER-99238", "payment_method": "CARD", "status": "PAID", "amount": 150000, "charged_amount": 150000, "merchant_revenue": 144000, "customer_id": "cust-8822", "paid_at": "2026-07-13T10:02:14Z", "created_at": "2026-07-13T10:00:00Z" } ], "limit": 1, "offset": 0, "has_more": false }

Баланс мерчанта

GET/balance

Возвращает текущий баланс личного кабинета мерчанта и сумму выплат в обработке.

Ответ
{ "pending_conversion_rub_kopecks": 4820000, "available_usd_cents": 12345, "pending_payouts_usd_cents": 0 }

Возможности магазина

GET/store/capabilities

Запрос возвращает список активированных методов оплаты с тарифами в базисных пунктах (400 = 4.0%).

Ответ
{ "store_id": "c56d9539-7814-4112-9c44-59e55728a3bd", "store_name": "Мой Магазин", "is_active": true, "payment_methods": [ { "payment_method": "CARD", "is_active": true, "system_fee_percent": 400, "customer_fee_share_percent": 0 }, { "payment_method": "SBP", "is_active": true, "system_fee_percent": 400, "customer_fee_share_percent": 0 } ] }

Вебхуки (Уведомления)

При успешной оплате счета cisPay асинхронно отправляет HTTP POST запрос на `webhook_url` магазина. Для проверки подлинности проверяйте заголовок `X-Signature`, вычисляя хэш HMAC-SHA256 от тела запроса с использованием `X-Api-Key` в качестве ключа.

Вебхук (JSON)
{ "id": "7fa12a88-294b-4b11-bbfe-e69c3dbeaab9", "store_id": "c56d9539-7814-4112-9c44-59e55728a3bd", "order_id": "ORDER-99238", "payment_method": "CARD", "status": "PAID", "amount": 150000, "currency": "RUB", "charged_amount": 150000, "merchant_revenue": 144000, "paid_at": "2026-07-13T10:02:14Z", "timestamp": "2026-07-13T10:02:15Z" }
Python
import hmac import hashlib def verify_webhook(api_key: str, body: bytes, header_sig: str) -> bool: expected = hmac.new( api_key.encode("utf-8"), body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, header_sig) # body - сырое тело POST запроса в байтах # header_sig - значение заголовка X-Signature
Node.js
const crypto = require("crypto"); function verifyWebhook(apiKey, rawBody, headerSig) { const expected = crypto .createHmac("sha256", apiKey) .update(rawBody) .digest("hex"); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(headerSig) ); }

Коды ответов шлюза

Наш API использует стандартные коды состояния HTTP для индикации успешности запросов:

ПолеТипОписание
400 Bad RequestОшибка запросаНекорректный JSON, отсутствует обязательное поле, либо метод оплаты не активен.
401 UnauthorizedОшибка доступаНеверный X-Shop-ID или X-Api-Key.
404 Not FoundНе найденоТранзакция отсутствует в базе данных.
502 Bad GatewayВременный сбойВременная ошибка связи с банком. Рекомендуется повторить запрос позже.
Пример Ошибки (401)
{ "detail": "Некорректный ключ X-Api-Key или Shop ID" }