S
docs.syncra.money
API ReferenceMerchant API

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

Управление финансовыми балансами мерчанта, типы балансов и поддерживаемые фиатные и криптовалюты в Syncra V2

Управление балансами мерчанта

Платформа Syncra V2 предоставляет мультивалютный финансовый шлюз, позволяющий мерчантам принимать и выплачивать средства в различных фиатных валютах СНГ и Азии, а также аккумулировать и выводить средства в криптовалюте (USDT).

Для каждого мерчанта в системе ведется учет балансов в разрезе типов кошельков и используемых валют.


Получение балансов мерчанта

Чтобы запросить актуальную финансовую информацию по вашим балансам, выполните следующий GET-запрос:

GET /api/v1/p2p/merchant/balance

Формат ответа (200 OK)

В ответ возвращается объект с массивом кошельков wallets верхнего уровня (без обёртки data), содержащим идентификатор кошелька, валюту, доступный (available), замороженный (frozen), общий (total) и находящийся в пути (pending_credits) баланс. Все суммы — int64 в минорных единицах, в JSON передаются строками (канон proto3 JSON). Живой ответ стейджа:

{
  "wallets": [
    {
      "wallet_id": "1af2d1ee-7fc3-4796-9dda-10d97af62094",
      "currency": "USDT",
      "available": "95982",
      "frozen": "4018",
      "total": "100000",
      "pending_credits": "0"
    },
    {
      "wallet_id": "9b2fcbd6-b6f4-4f17-a94d-b7309f84bde5",
      "currency": "USDT",
      "available": "0",
      "frozen": "0",
      "total": "0",
      "pending_credits": "0"
    }
  ]
}

wallets — это реальные кошельки мерчанта из money-сервиса: каждая строка соответствует фактическому кошельку со своей валютой и собственным wallet_id (UUID кошелька; TRC-20 адрес пополнения — отдельная сущность, см. Wallet → Deposit Address). Никаких синтетических или агрегированных строк в ответе нет — состав массива отражает фактически провижиненные кошельки. frozen отражает активные холды (см. Замороженные средства).

Все суммы в ответах передаются в минимальных единицах соответствующей валюты (например, в копейках для RUB, центах для USDT и т.д.) в виде 64-битного целого числа (int64). В JSON значения int64 сериализуются строками ("available": "95982") — канон proto3 JSON, исключающий потерю точности в JS-клиентах.


Средства в пути (pending_credits)

Поле pending_credits каждого кошелька — это сумма, которая уже заработана завершёнными сделками, но ещё не добралась до available: после COMPLETED сделки её нетто-зачисление проходит через внутреннюю очередь распределения комиссий (fee-distribution), и до её проведения деньги видны как «в пути».

  • Отдаётся всегда, включая 0 — обе цифры, available и pending, видны постоянно (канон Stripe available/pending).
  • Та же минорная единица, что и остальные поля кошелька (для USDT — центы), сериализуется строкой.
  • Инвариант эскроу-нуля: холды живут в frozen и в pending_credits не попадают — «в пути» строго меньше либо равна нетто-зачислениям завершённых сделок, ожидающим распределения.
  • В кабинете отображается как «В пути» — чтобы было видно, почему нетто завершённой сделки ещё не в доступном балансе.

Типовой жизненный цикл: сделка COMPLETED → нетто появляется в pending_credits → фоновое распределение комиссий проводит зачисление → сумма переезжает в available, pending_credits уменьшается на неё же.


Как устроен баланс мерчанта

Баланс мерчанта — это набор мультивалютных кошельков money-сервиса, перечисленных в GET /balance. Каждый кошелёк ведёт свою валюту; операции двигают конкретный кошелёк:

  1. Зачисление PayIn. Все успешные входящие платежи (за вычетом комиссии платформы) зачисляются на USDT-кошелёк операционного баланса мерчанта.
  2. Выплаты (PayOut). При создании выплаты на USDT-кошельке размещается холд (по SELL-курсу на момент создания): сумма резервируется в frozen до финального исхода — списания (COMPLETED) или возврата (FAILED/ EXPIRED).
  3. Пополнение. Операционный баланс пополняется USDT-депозитами на TRC-20 адрес мерчанта (Wallet → Deposit Address).

«Типы балансов» MAIN/INSURANCE/DEPOSIT в API V2 не моделируются: GET /balance возвращает только фактические кошельки без классификации. Залоговые (insurance) счета существуют в домене команд трейдеров и в API мерчанта не видны.


Поддерживаемые валюты

Syncra V2 — мультивалютная платформа. Список поддерживаемых валют определяется конфигурацией тенанта (таблица p2p_currencies) и может быть расширен администратором в реальном времени без перезапуска сервисов.

Примеры валют:

ISO КодНазвание валютыМинимальная единица
RUBРоссийский рубльКопейка (0.01 RUB)
USDTTether (USDT)Цент (0.01 USDT)

Актуальный список валют вашего тенанта возвращает эндпоинт GET /api/v1/p2p/merchant/currencies, методов оплаты — GET /payment-methods. Конкретный набор зависит от вашего тенанта и региона.


Замороженные средства (Frozen)

Показатель frozen в ответе API указывает на сумму средств, временно заблокированную на кошельке:

  • Удержание на выплату (Payout Hold): Когда вы создаете запрос на выплату (POST /deals/payout), сумма транзакции плюс расчетная комиссия переводятся в статус frozen до момента подтверждения выплаты трейдером или банком. При успешном завершении средства окончательно списываются, при ошибке — возвращаются в доступный баланс (available).
  • Спорные транзакции (Disputes Hold): В случае открытия диспута по входящей транзакции, оспариваемая сумма временно замораживается на балансе мерчанта до вынесения решения арбитражем платформы.

On this page