StarEx Docs
EN
ДокументацияMerchant API

Merchant API

v1

Контракт интеграции для приёма платежей, выплат и событий

Базовый URL {{base_url}}/api/v1
Авторизация Bearer token
Формат JSON · строки

Знаков после запятой: обычно 2 · KRW — 0 · BHD/JOD — 3

Базовый URL {{base_url}}/api/v1. В каждом запросе:

TEXT
Authorization: Bearer {{merchant_token}}
Content-Type: application/json

Суммы — строки; знаков после запятой по валюте: обычно 2, KRW — 0, BHD/JOD — 3.

#Приём платежа

POST /api/v1/pay-in/{метод}. В теле — amount, currency, merchant_order_id (ваш идентификатор, ключ идемпотентности). Реквизит для оплаты вернётся в ответе (формат — в разделе «Ответ»).

#RUB

#Карта

SHELL
curl '{{base_url}}/api/v1/pay-in/card' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-1"}'

#СБП

SHELL
curl '{{base_url}}/api/v1/pay-in/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-2"}'

#Счёт

SHELL
curl '{{base_url}}/api/v1/pay-in/account' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-3"}'

#QR-НСПК

SHELL
curl '{{base_url}}/api/v1/pay-in/qr' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-4"}'

#Карта · Монобанк

SHELL
curl '{{base_url}}/api/v1/pay-in/mono-card' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","bank_name":"Альфа-Банк","merchant_order_id":"order-5"}'

#СБП · Монобанк

SHELL
curl '{{base_url}}/api/v1/pay-in/mono-sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","bank_name":"Сбербанк","merchant_order_id":"order-6"}'

#QR-Монобанк

SHELL
curl '{{base_url}}/api/v1/pay-in/mono-qr' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","bank_name":"Т-Банк","merchant_order_id":"order-7"}'

#Универсальный QR

SHELL
curl '{{base_url}}/api/v1/pay-in/qr-req' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-7b"}'

#Карта · Трансгран

SHELL
curl '{{base_url}}/api/v1/pay-in/transgran-card' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-8"}'

#СБП · Трансгран

SHELL
curl '{{base_url}}/api/v1/pay-in/transgran-sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-9"}'

#QR · Трансгран

SHELL
curl '{{base_url}}/api/v1/pay-in/transgran-qr' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-10"}'

#VietQR

SHELL
curl '{{base_url}}/api/v1/pay-in/vietqr' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-10b"}'

#Мобком

SHELL
curl '{{base_url}}/api/v1/pay-in/mobcom' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-11"}'

#Мобком · Трансгран

SHELL
curl '{{base_url}}/api/v1/pay-in/transgran-mobcom' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"RUB","merchant_order_id":"order-12"}'

#UZS

#Карта UZS

SHELL
curl '{{base_url}}/api/v1/pay-in/card' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"50000","currency":"UZS","merchant_order_id":"order-13"}'

#Humo

SHELL
curl '{{base_url}}/api/v1/pay-in/humo' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"50000","currency":"UZS","merchant_order_id":"order-13b"}'

#KZT

#Карта KZT

SHELL
curl '{{base_url}}/api/v1/pay-in/card' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"15000","currency":"KZT","merchant_order_id":"order-14"}'

#Карта KZT · Трансгран

SHELL
curl '{{base_url}}/api/v1/pay-in/transgran-card' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"15000","currency":"KZT","merchant_order_id":"order-14b"}'

#Kaspi · Казахстан

SHELL
curl '{{base_url}}/api/v1/pay-in/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"15000","currency":"KZT","bank_name":"Kaspi Bank","merchant_order_id":"order-15"}'

#KRW

#Счёт KRW

SHELL
curl '{{base_url}}/api/v1/pay-in/account' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100000","currency":"KRW","merchant_order_id":"order-16"}'

#KakaoPay · KRW

SHELL
curl '{{base_url}}/api/v1/pay-in/kakaopay' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100000","currency":"KRW","merchant_order_id":"order-krw-kakao-1","payer_name":"Gildong","payer_surname":"Hong"}'

#TRY

#IBAN · Турция

SHELL
curl '{{base_url}}/api/v1/pay-in/iban' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"500","currency":"TRY","payer_name":"Ivan","payer_surname":"Petrov","merchant_order_id":"order-17"}'

#MNT

#IBAN · Монголия

SHELL
curl '{{base_url}}/api/v1/pay-in/iban' \
  -H 'Authorization: Bearer {{api_key}}' -H 'Content-Type: application/json' \
  -d '{"amount":"250000","currency":"MNT","merchant_order_id":"order-mn-1"}'

#AZN

#Карта · Азербайджан

SHELL
curl '{{base_url}}/api/v1/pay-in/card' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"AZN","merchant_order_id":"order-18"}'

#Телефон · Азербайджан

SHELL
curl '{{base_url}}/api/v1/pay-in/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"AZN","merchant_order_id":"order-19"}'

#KGS

#Карта · Киргизия

SHELL
curl '{{base_url}}/api/v1/pay-in/card' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"1000","currency":"KGS","merchant_order_id":"order-20"}'

#Телефон · Киргизия

SHELL
curl '{{base_url}}/api/v1/pay-in/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"1000","currency":"KGS","merchant_order_id":"order-21"}'

#EGP

#InstaPay · Египет

SHELL
curl '{{base_url}}/api/v1/pay-in/qr' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"200","currency":"EGP","merchant_order_id":"order-22"}'

#Телефон · Египет

SHELL
curl '{{base_url}}/api/v1/pay-in/sim' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"200","currency":"EGP","merchant_order_id":"order-23"}'

#BHD

#Телефон · Бахрейн

SHELL
curl '{{base_url}}/api/v1/pay-in/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"5.500","currency":"BHD","merchant_order_id":"order-24"}'

#JOD

#Телефон · Иордания

SHELL
curl '{{base_url}}/api/v1/pay-in/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"5.500","currency":"JOD","merchant_order_id":"order-25"}'

#SAR

#BarqWallet · Саудовская Аравия

SHELL
curl '{{base_url}}/api/v1/pay-in/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"SAR","merchant_order_id":"order-26"}'

#ARS

#Банк-перевод · Аргентина

SHELL
curl '{{base_url}}/api/v1/pay-in/bank-transfer' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"5000","currency":"ARS","merchant_order_id":"order-27"}'

#QR · Аргентина

SHELL
curl '{{base_url}}/api/v1/pay-in/qr' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"5000","currency":"ARS","merchant_order_id":"order-28"}'

#PKR

#JazzCash/EasyPaisa · Пакистан

SHELL
curl '{{base_url}}/api/v1/pay-in/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"1000","currency":"PKR","merchant_order_id":"order-29"}'

#LBP

#WhishWallet · Ливан

SHELL
curl '{{base_url}}/api/v1/pay-in/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100000","currency":"LBP","merchant_order_id":"order-30"}'

#BRL

#PIX · Бразилия

SHELL
curl '{{base_url}}/api/v1/pay-in/qr' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100","currency":"BRL","merchant_order_id":"order-31"}'

#Особенности методов

  • mono-card / mono-sbp / mono-qr: bank_name обязателен.
  • Kaspi · Казахстан: используйте bank_name со значением Kaspi Bank.
  • kakaopay: обязательны payer_name и payer_surname; в ответе payment_link — прямая ссылка KakaoPay, банковские реквизиты и phone_numbernull.
  • iban для TRY: обязательны payer_name и payer_surname.
  • qr-req: qr и payment_link ведут на страницу оплаты; qr_image_url — прямая ссылка на QR в PNG, для SVG замените .../qr.png на .../qr.svg.
  • vietqr: qr содержит строку VietQR (EMVCo), которая отображается на payment_link; qr_image_urlnull.

#Ответ

201 (при повторе с тем же merchant_order_id200 и та же транзакция):

JSON
{
  "id": "ceadf9ea-6eba-4664-a99c-4404eb412c9d",
  "merchant_order_id": "order-1",
  "status": "pending",
  "sub_status": "waiting_for_payment",
  "expires_at": "2026-06-12T13:57:36Z",
  "amount": "100.00",
  "currency": "RUB",
  "currency_rate": "78.2",
  "amount_usdt": "1.27",
  "commission_percent": "8.00",
  "commission": "0.10",
  "card_number": "2202 2050 1234 5678",
  "phone_number": null,
  "iban": null,
  "account_number": null,
  "qr": null,
  "qr_image_url": null,
  "owner_name": "IVAN PETROV",
  "bank_name": "sberbank",
  "country_name": "Россия",
  "payment_currency": "RUB",
  "payment_link": "https://pay.example.com/pay/ceadf9ea-…",
  "created_at": "2026-06-12T13:42:36Z"
}

Реквизит — в поле по методу (card_number / phone_number / iban / account_number / qr), остальные — null. Обычно payment_link — наша страница оплаты. currency_rate / amount_usdt / commission_percent / commission — предпросмотр комиссии в USDT ("", если курс/тариф не настроен).

country_name и payment_currency — производные от currency (страна — её русское название, только для отображения). В своей логике опирайтесь на currency (ISO-код), а не на них.

status: pendingsuccess | fail. sub_status: waiting_details_to_be_selectedwaiting_for_paymentsuccessfully_paid | expired | cancelled | declined_no_requisites.

GET /api/v1/pay-in/{id} — статус транзакции.

#Чек по заказу

После оплаты вы можете приложить чек к заказу. multipart/form-data, поле файла — receipt (PDF); {id} — id заказа из ответа pay-in.

SHELL
curl -X POST '{{base_url}}/api/v1/pay-in/{id}/receipt' \
  -H 'Authorization: Bearer {{merchant_token}}' \
  -F 'receipt=@check.pdf;type=application/pdf'

#Выплаты

POST /api/v1/pay-out/{метод}. В теле — merchant_payout_id (ключ идемпотентности), amount, currency и реквизит назначения.

#Карта

SHELL
curl '{{base_url}}/api/v1/pay-out/card' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"merchant_payout_id":"po-1","amount":"4000","currency":"RUB","card_number":"2202209912345678"}'

#Humo

SHELL
curl '{{base_url}}/api/v1/pay-out/humo' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"merchant_payout_id":"po-1b","amount":"50000","currency":"UZS","card_number":"9860123412345678"}'

#СБП / телефон

SHELL
curl '{{base_url}}/api/v1/pay-out/sbp' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"merchant_payout_id":"po-2","amount":"4000","currency":"RUB","phone_number":"+79991234567"}'

#Счёт

SHELL
curl '{{base_url}}/api/v1/pay-out/account' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"merchant_payout_id":"po-3","amount":"4000","currency":"RUB","account_number":"40817810099910004312"}'

#IBAN

SHELL
curl '{{base_url}}/api/v1/pay-out/iban' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"merchant_payout_id":"po-4","amount":"500","currency":"TRY","iban":"TR33...","recipient_name":"Ivan","recipient_surname":"Petrov"}'

#IBAN · Монголия

SHELL
curl '{{base_url}}/api/v1/pay-out/iban' \
  -H 'Authorization: Bearer {{api_key}}' -H 'Content-Type: application/json' \
  -d '{"merchant_payout_id":"po-mn-1","amount":"250000","currency":"MNT","iban":"MN12 1234 1234 5678 9123","recipient_name":"Bat-Erdene","recipient_surname":"Bold"}'

#Оператор (SIM)

SHELL
curl '{{base_url}}/api/v1/pay-out/sim' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"merchant_payout_id":"po-5","amount":"200","currency":"EGP","phone_number":"+201234567890"}'

#Банк-перевод

SHELL
curl '{{base_url}}/api/v1/pay-out/bank-transfer' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"merchant_payout_id":"po-6","amount":"5000","currency":"ARS","account_number":"0001234567890123456789"}'

#Особенности методов

  • iban: обязательны recipient_name и recipient_surname.

#Ответ

201:

JSON
{
  "id": "9f1c…",
  "merchant_payout_id": "po-1",
  "status": "pending",
  "currency": "RUB",
  "amount": "4000.00",
  "destination": "2202209912345678",
  "fee_usdt": "0.51",
  "fail_reason": null,
  "created_at": "2026-06-12T13:42:36Z"
}

Сумма + комиссия удерживаются с баланса при создании; не хватает → INSUFFICIENT_FUNDS; при failed — возвращаются. status: pendingtakencompleted | failed.

GET /api/v1/pay-out/{id} — статус выплаты.

#Баланс

GET /api/v1/balance — баланс мерчанта в USDT.

SHELL
curl '{{base_url}}/api/v1/balance' -H 'Authorization: Bearer {{merchant_token}}'
JSON
{"balance_usdt": "1250.00"}

#Вывод (сеттл)

POST /api/v1/settlements — заявка на вывод баланса. Кошелёк — из настроек кабинета (TRC20), в запросе только сумма.

SHELL
curl '{{base_url}}/api/v1/settlements' \
  -H 'Authorization: Bearer {{merchant_token}}' -H 'Content-Type: application/json' \
  -d '{"amount":"100"}'

Ответ 201:

JSON
{
  "id": "3f2b9c10-8a1d-4e77-9c2e-5b0f1a2d3e44",
  "status": "pending",
  "amount": "100.00",
  "currency": "USDT",
  "network": "TRC20",
  "wallet": "••••4F2a",
  "tx_hash": "",
  "created_at": "2026-07-14T10:00:00Z"
}
  • Сумма холдируется с баланса; больше баланса → INSUFFICIENT_FUNDS.
  • Кошелёк в запросе не принимается; TRC20-кошелёк не задан в настройках → VALIDATION_ERROR.
  • status: pendingpaid | rejected (при отклонении сумма возвращается).
  • GET /api/v1/settlements/{id} — статус заявки.

#Споры (апелляции)

POST /api/v1/appealsmultipart/form-data.

SHELL
curl '{{base_url}}/api/v1/appeals' -H 'Authorization: Bearer {{merchant_token}}' \
  -F 'transaction_id=ceadf9ea-6eba-4664-a99c-4404eb412c9d' \
  -F 'amount=1001' \
  -F 'attachments=@receipt.jpg' \
  -F 'attachments=@proof.mp4'
  • transaction_id — наш id (UUID) или ваш merchant_order_id.
  • attachments — 1..10 файлов, ≤ 50 МиБ: jpg, jpeg, png, webp, gif, heic, pdf, mp4, mov, webm, m4v, avi.
  • Один спор на сделку.

Ответ 201: id, status (open), amount, currency, attachments. GET /api/v1/appeals?limit=&offset= — список; GET /api/v1/appeals/{id} — один; GET /api/v1/appeals/{id}/files/{aid} — скачать вложение.

#Webhooks

POST на ваш callback_url при смене статуса. Верните 2xx — это подтверждение приёма. 5xx/таймаут → повтор с backoff'ом (до 7 попыток, ~1 час); 4xx повтором не сопровождается — считаем, что сервер получил и осознанно отклонил. Обрабатывайте события идемпотентно; при пропуске статус всегда можно добрать опросом GET /api/v1/pay-in/{id} (и аналоги для выплат/спора). Подпись — заголовок X-Starex-Signature: hex(HMAC-SHA256(сырое тело, ваш callback-токен)). Тип события по полю type: нет поля → платёж; "payout" → выплата; "dispute" → спор.

  • Платёж: id, merchant_order_id, status, sub_status, currency, amount, requisite, holder_name, bank, expires_at, created_at, event_at.
  • Выплата: type, id, merchant_payout_id, status, currency, amount, destination, fail_reason, event_at.
  • Спор: type, event (dispute.approved / dispute.rejected), id, transaction_id, merchant_order_id, status, amount, currency, reason, created_at, event_at.

#Коды ошибок

КодHTTPКогда
VALIDATION_ERROR422Некорректные поля/сумма/JSON или неизвестное поле
METHOD_NOT_AVAILABLE422Метод недоступен для валюты
METHOD_NOT_ENABLED422Метод не включён вашему аккаунту
AMOUNT_OUT_OF_RANGE422Сумма вне вашего диапазона (min/max)
RATE_SOURCE_NOT_CONFIGURED422Валюта без настроенного курса
INSUFFICIENT_FUNDS422Баланса не хватает на выплату + комиссию
UNAUTHORIZED401Токен неверен/отсутствует либо IP вне whitelist
PAYIN_NOT_FOUND / PAYOUT_NOT_FOUND / APPEAL_NOT_FOUND404Нет объекта
INTERNAL_ERROR500Наша проблема — повторите запрос