Syncra Merchant API V2
Syncra Merchant API V2 — полная документация для интеграции
Merchant API V2
Добро пожаловать в документацию Syncra Merchant API V2. Этот программный интерфейс разработан для мерчантов (онлайн-сервисы, платформы, ритейлеры), которым требуется надёжный и масштабируемый процессинг P2P-платежей в реальном времени.
С помощью нашего API вы можете полностью автоматизировать приём платежей (PayIn), отправку выплат (PayOut), управление балансами, отслеживание диспутов, управление whitelist-pass'ами и криптографическими выводами USDT.
Базовая информация
Базовый URL
Все запросы к Merchant API V2 отправляются на следующий базовый адрес:
https://api.syncra.money/api/v1/p2p/merchantУстаревшая legacy-версия API (V1) доступна по адресу
https://api.syncra.money/v1/ только для совместимости ранее
интегрированных мерчантов. Дата полного отключения (sunset) V1 —
12 января 2027 года: после этой даты все V1-запросы возвращают
410 Gone (до отключения каждый ответ V1 несёт заголовки Deprecation,
Sunset и Link; rel="successor-version"). Новым клиентам настоятельно
рекомендуется сразу использовать эндпоинты V2 по основному пути.
Формат данных
Интерфейс спроектирован по принципу REST с использованием JSON:
- Запросы должны содержать заголовок
Content-Type: application/json. - Все тела ответов возвращаются в формате JSON (кроме
CSV-экспорта с
Accept: text/csv). - Имена полей —
snake_case. - Временные метки — ISO 8601 (например,
2026-07-12T15:00:00Z). - Денежные суммы —
int64в минорных единицах (копейки/центы/satoshi); в JSON-ответах API значенияint64передаются строками ("amount": "100000"— канон proto3 JSON, исключает потерю точности в JS-клиентах). В телах вебхуков суммы — обычные числа ("amount": 250050). - Успешные ответы — канон-конверт по типу ответа: единичный объект —
напрямую (
{"deal": {...}}); все списки/листинги (GET /deals,GET /callbacks,GET /payment-methods,GET /appeals,/passes,/banks,/currencies,/wallet/deposits,/wallet/withdrawals,/deals/turnover) — единый конверт{"data": [...], "next_page_token": ""}(AIP-158: пустая строка = последняя страница; других полей конверт не несёт —total_countна HTTP не отдаётся). Исключение —GET /balance({"wallets": [...]}): он не листинг, а проекция баланса. - Все ошибки (non-2xx) — RFC 9457
application/problem+json(см. Коды ошибок):type/title/status/detail(с вложенными gRPC-деталями)/instance; трассировка — заголовкомX-Trace-Id. Неверное состояние запроса (нехватка баланса, дневной лимит, повторная апелляция) →400(не409).
Лимиты и Rate Limiting
Для защиты платформы применяется ограничение частоты запросов (Rate Limiting), настраиваемое per-merchant:
-
По умолчанию: 10 000 запросов в минуту на один токен мерчанта (per-merchant
rate_limit_per_minute; окно — календарная минута UTC). -
Каждый ответ несёт заголовки
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset(Unix-секунды сброса окна). -
При превышении — HTTP
429 Too Many Requestsс телом RFC 9457 problem+json (см. Коды ошибок):{ "type": "about:blank", "title": "Too Many Requests", "status": 429, "detail": "{\"code\":8,\"message\":\"merchant rate limit exceeded (limit: 10000/min)\",\"details\":[]}", "instance": "/api/v1/p2p-engine" }
Обзор эндпоинтов
Сводная таблица всех доступных API-методов V2:
| Категория | Метод | Эндпоинт | Описание |
|---|---|---|---|
| PayIn | POST | /deals/payin | Создание заявки на приём платежа |
| PayOut | POST | /deals/payout | Создание заявки на выплату клиенту |
| Deals | GET | /deals/{deal_id} | Информация о конкретной сделке (PayIn/PayOut) |
| Deals | POST | /deals/{deal_id}/cancel | Отмена PayIn-сделки до подтверждения платежа (из INITIALIZED / ESCROW_LOCKED / PAYMENT_NOTIFIED; повтор — идемпотентен) |
| Deals | GET | /deals | UNION-листинг сделок (PAYIN + PAYOUT) с фильтрами и пагинацией |
| Export | GET | /api/v1/p2p/merchant/deals/export | CSV-выгрузка сделок (Accept: text/csv; legacy-зеркало без merchant-префикса — /api/v1/p2p/deals/export) |
| Turnover | GET | /deals/turnover | Дневные обороты сделок (окно ≤ 92 дней) |
| Balance | GET | /balance | Доступные балансы мерчанта по валютам (мультивалютный) |
| Withdraw | POST | /wallet/withdraw | Заявка на криптовывод USDT на TRON-адрес |
| Withdraw Fee | GET | /wallet/withdraw-fee | Расчёт комиссии крипто-вывода до отправки заявки |
| Wallet History | GET | /wallet/deposits | Входящие TRC-20 депозиты мерчанта |
| Wallet History | GET | /wallet/withdrawals | История крипто-выводов мерчанта |
| Deposit Address | GET | /wallet/deposit-address | Текущий TRC-20 адрес пополнения collateral-баланса мерчанта (404, если ещё не сгенерирован) |
| Deposit Address | POST | /wallet/deposit-address | Генерация/ротация TRC-20 адреса пополнения collateral-баланса мерчанта |
| Merchant | POST | /disable | Приостановка активности мерчанта (kill switch). Admin-only — выполняется оператором платформы, не самим мерчантом |
| Merchant | POST | /enable | Возобновление активности мерчанта. Admin-only — выполняется оператором платформы |
| Merchant | POST | /api/v1/p2p/merchants/{merchant_id}/kill-switch | Переключатель kill-switch (toggle без тела; admin-зеркало — /api/v1/p2p/admin/merchants/{merchant_id}/kill-switch). Admin-only |
| API Keys | POST | /api-keys | Выпуск новой пары токен + webhook-secret (разовый показ старой). Admin-only |
| API Keys | POST | /api-keys/rotate | Ротация ключей (мерчант сам: HMAC или кабинетный JWT; старая пара — 15-мин grace-окно) |
| My Merchant | GET | /api/v1/p2p/my-merchant | Собственный профиль + лимиты + kill_switch (кабинетный JWT или HMAC) |
| My Merchant | PATCH | /api/v1/p2p/my-merchant | Изменение профиля и лимитов сделок (кабинетный JWT) |
| Passes | POST | /passes | Создание whitelist-pass'а (пред-одобренная сумма) |
| Passes | GET | /passes | Список pass'ов мерчанта/провайдера |
| Callbacks | GET | /callbacks | История доставок вебхуков (page_size/page_token → next_page_token) |
| Callbacks | POST | /callbacks/{callback_id}/retry | Ручной retry доставки (только ERROR/RETRY; cooldown 60 с) |
| Appeals | POST | /appeals | Создание апелляции (спора) по сделке |
| Appeals | GET | /appeals/{appeal_id} | Информация о конкретной апелляции |
| Appeals | GET | /appeals | Список апелляций мерчанта |
| Appeals | POST | /appeals/{appeal_id}/messages | Отправка сообщения в чат апелляции |
| Appeals | GET | /appeals/{appeal_id}/messages | История сообщений чата апелляции |
| Banks | GET | /banks | Список доступных банков (methods = типы реквизитов, без UUID) |
| Payment Methods | GET | /payment-methods | Активные методы тенанта — канонический каталог идентификаторов: UUID (id) и слаги (slug) принимаются в обеих ногах сделки (PayIn payment_method_id / PayOut payment_method) |
| Currencies | GET | /currencies | Активные валюты тенанта (словарь кабинета) |
Поля ответов сделок (MerchantDealInfo) используют canonical имена V2:
deal_id (НЕ id), payment_url (НЕ payment_page_url), deal_type,
target_requisite. Полный список полей — в разделе
Deals.
Быстрый старт (Quick Start)
Первый тестовый запрос — получение баланса мерчанта:
curl -X GET https://api.syncra.money/api/v1/p2p/merchant/balance \
-H "X-Merchant-Token: your_merchant_token_here" \
-H "X-Timestamp: 1783856120" \
-H "X-Signature: t=1783856120,v1=9e87d0c3c8801d0a5198d023b6b19a16f2c8d2037920ab3e09819cd8e412cfab" \
-H "Content-Type: application/json"Ответ (RetrieveMerchantBalanceResponse) — массив wallets[] верхнего
уровня (без обёртки data), каждый элемент — реальный кошелёк мерчанта из
money-сервиса со своей валютой и wallet_id: wallet_id, currency,
available, frozen, total (все суммы — int64 в минорных единицах,
в JSON передаются строками). Живой ответ стейджа:
{
"wallets": [
{
"wallet_id": "1af2d1ee-7fc3-4796-9dda-10d97af62094",
"currency": "USDT",
"available": "95982",
"frozen": "4018",
"total": "100000"
},
{
"wallet_id": "9b2fcbd6-b6f4-4f17-a94d-b7309f84bde5",
"currency": "USDT",
"available": "0",
"frozen": "0",
"total": "0"
}
]
}Подробную информацию о расчёте заголовка подписи X-Signature и защите от
атак повторного воспроизведения — в разделе
Аутентификация. О приёме webhook'ов —
в Callbacks.