Menu — Документация

Host‑to‑host

Эндпойнты Pay In и Pay Out для прямой интеграции

Режим host‑to‑host (далее — h2h) предполагает, что мерчант реализует пользовательский интерфейс оплаты самостоятельно. Платформа возвращает реквизиты для перевода или принимает реквизиты получателя выплаты; взаимодействие с конечным клиентом мерчанта на стороне платформы отсутствует.

Если реализация собственного UI оплаты не требуется, применяется режим платёжной формы.

POST /host2host/payin

Создание операции приёма платежа.

Запрос

Базовый пример (СБП)

curl -X POST https://api.menu.casino/host2host/payin \
  -H "Authorization: Bearer $MENU_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "sbp",
    "idTransactionMerchant": "order-42",
    "amount": 1500,
    "clientID": "user-7af3",
    "clientIP": "203.0.113.5",
    "clientDateCreated": "2026-05-16T12:00:00Z",
    "integrationMerhcnatData": {
      "webHook": "https://example.com/menu/webhook"
    }
  }'

Перевод на карту

curl -X POST https://api.menu.casino/host2host/payin \
  -H "Authorization: Bearer $MENU_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "toCard",
    "idTransactionMerchant": "order-101",
    "amount": 12500.50,
    "clientID": "user-c4a2",
    "clientIP": "198.51.100.42",
    "clientDateCreated": "2025-11-03T09:14:22Z"
  }'

Моно‑банковский метод

curl -X POST https://api.menu.casino/host2host/payin \
  -H "Authorization: Bearer $MENU_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "alfa_alfa",
    "idTransactionMerchant": "order-208",
    "amount": 7800,
    "clientID": "user-aa-19",
    "clientIP": "203.0.113.71",
    "clientDateCreated": "2026-02-12T18:30:00Z"
  }'

Значение alfa_alfa приведено в качестве примера. Перечень доступных моно‑банковских методов — раздел Методы платежа.

Банковская форма с 3‑D Secure (e‑commerce)

curl -X POST https://api.menu.casino/host2host/payin \
  -H "Authorization: Bearer $MENU_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "ecom",
    "idTransactionMerchant": "order-ec-512",
    "amount": 4990,
    "clientID": "user-ec-512",
    "clientIP": "203.0.113.5",
    "clientDateCreated": "2026-05-10T11:00:00Z"
  }'

Тенге, перевод карта–карта

curl -X POST https://api.menu.casino/host2host/payin \
  -H "Authorization: Bearer $MENU_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "kzt_c2c",
    "idTransactionMerchant": "order-kz-77",
    "amount": 45000,
    "clientID": "user-kz-77",
    "clientIP": "2.133.142.18",
    "clientDateCreated": "2026-04-01T08:22:11Z"
  }'

Параметры

ПолеТипОбязательноОписание
paymentMethodenumдаспособ оплаты, см. Методы платежа
idTransactionMerchantstringдаидентификатор операции в системе мерчанта, уникальный в пределах мерчанта
amountdecimalдасумма операции в валюте операции, до четырёх знаков после разделителя
clientIDstringдаустойчивый идентификатор конечного клиента в системе мерчанта; применяется антифрод‑контролем
clientIPstringдаIPv4 или IPv6 конечного клиента; применяется антифрод‑контролем
clientDateCreatedISO‑8601дадата регистрации конечного клиента в системе мерчанта; применяется антифрод‑контролем
integrationMerhcnatData.webHookstringнетURL для доставки событий смены статуса; при отсутствии используется значение из настроек личного кабинета

Поля clientID, clientIP, clientDateCreated являются обязательными. Передача фиктивных значений (0.0.0.0, случайные идентификаторы) приводит к срабатыванию антифрод‑контроля и возврату кода fraud.

Ответ

Успешное создание (СБП)

{
  "status": "Success",
  "data": {
    "id": "d7b8e0f4-1b3a-4a3f-8d29-9c7c0a4d0a01",
    "dateAdded": "2026-05-16T12:00:01.123Z",
    "dateUpdated": "2026-05-16T12:00:01.123Z",
    "typeOperation": "payIn",
    "status": "created",
    "idTransactionMerchant": "order-42",
    "amountInitial": 1500,
    "amountRandomized": 1500.13,
    "amount": 1500.13,
    "amountComission": 30,
    "currency": "RUB",
    "amountInCurrencyBalance": 14.95,
    "amountComissionInCurrencyBalance": 0.30,
    "exchangeRate": 100.30,
    "paymentDetailsData": {
      "paymentMethod": "sbp",
      "bankName": "Банк-эквайер",
      "nameMediator": "И. И.",
      "number": "+79991234567",
      "numberAdditional": null,
      "qRcode": null
    }
  },
  "traceID": "8b3e1f6e-7d28-46c0-9c8a-2f6b4d1d4f02"
}

Успешное создание (карта)

{
  "status": "Success",
  "data": {
    "id": "a1f9c721-7e22-41a6-8aa2-1f04b6f5e7e1",
    "dateAdded": "2025-11-03T09:14:23.044Z",
    "dateUpdated": "2025-11-03T09:14:23.044Z",
    "typeOperation": "payIn",
    "status": "created",
    "idTransactionMerchant": "order-101",
    "amountInitial": 12500.50,
    "amountRandomized": 12500.50,
    "amount": 12500.50,
    "amountComission": 250,
    "currency": "RUB",
    "amountInCurrencyBalance": 124.50,
    "amountComissionInCurrencyBalance": 2.49,
    "exchangeRate": 100.42,
    "paymentDetailsData": {
      "paymentMethod": "toCard",
      "bankName": "Банк-эквайер",
      "nameMediator": "А. П.",
      "number": "2200 0000 1234 5678",
      "numberAdditional": null,
      "qRcode": null
    }
  },
  "traceID": "11a32cd0-9f01-4bb1-8f3a-7b5c5e6f1aa2"
}

Ошибка: повторное использование идентификатора

{
  "status": "Warning",
  "data": null,
  "codeError": "duplicateIdentifier",
  "message": "Operation with idTransactionMerchant=order-42 already exists",
  "traceID": "f3a5e7d1-0a8c-4d61-9d05-2e29a1bbeb3c"
}

Ошибка: метод не разрешён тарифом

{
  "status": "Warning",
  "data": null,
  "codeError": "noSuitableTariffForRequest",
  "message": "Tariff does not allow paymentMethod=transgranSBP for this merchant",
  "traceID": "2e7a4b81-c1f2-44d2-aa70-3e0f6d1a9b1c"
}

Ошибка: нет свободных реквизитов

{
  "status": "Warning",
  "data": null,
  "codeError": "noPaymentDetailsAvailable",
  "message": "No payment details available for paymentMethod=alfa_alfa",
  "traceID": "9c5e1a02-8b3d-49a8-9b7e-4f0c11d2e8b4"
}

Ошибка: блокировка антифрод‑контролем

{
  "status": "Warning",
  "data": null,
  "codeError": "fraud",
  "message": "Client rate limit exceeded",
  "traceID": "7d31f9a4-2c08-4a91-8e44-1f6b7d2a3c5e"
}

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

Переходы статусов

created → in_progress → success
                     └→ failed

В отдельных случаях между created и in_progress присутствует промежуточный статус booking, означающий резервирование реквизитов на стороне провайдера.

Перечень статусов и допустимые переходы — раздел Статусы.

POST /host2host/payout

Создание операции выплаты на реквизиты конечного получателя.

Запрос

Выплата по СБП

curl -X POST https://api.menu.casino/host2host/payout \
  -H "Authorization: Bearer $MENU_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "sbp",
    "idTransactionMerchant": "withdraw-101",
    "amount": 5000,
    "number": "+79991234567",
    "bankName": "<наименование из справочника банков>",
    "nameMediator": "Иван Иванов",
    "clientID": "user-7af3",
    "clientIP": "203.0.113.5",
    "clientDateCreated": "2026-05-16T12:00:00Z",
    "integrationMerhcnatData": {
      "webHook": "https://example.com/menu/webhook"
    }
  }'

Выплата на банковскую карту

curl -X POST https://api.menu.casino/host2host/payout \
  -H "Authorization: Bearer $MENU_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "toCard",
    "idTransactionMerchant": "withdraw-202",
    "amount": 18000,
    "number": "2200000012345678",
    "bankName": "<наименование из справочника банков>",
    "nameMediator": "Мария С.",
    "clientID": "user-c4a2",
    "clientIP": "198.51.100.42",
    "clientDateCreated": "2025-11-03T09:14:22Z"
  }'

Выплата на расчётный счёт

curl -X POST https://api.menu.casino/host2host/payout \
  -H "Authorization: Bearer $MENU_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "toAccount",
    "idTransactionMerchant": "withdraw-303",
    "amount": 250000,
    "number": "40817810099910001234",
    "bankName": "<наименование из справочника банков>",
    "nameMediator": "ООО Ромашка",
    "clientID": "merchant-ext-77",
    "clientIP": "203.0.113.5",
    "clientDateCreated": "2024-06-01T00:00:00Z"
  }'

Параметры

Дополнительно к параметрам Pay In:

ПолеТипОбязательноОписание
numberstringданомер карты, номер телефона или номер счёта получателя; интерпретация зависит от paymentMethod
bankNamestringданаименование банка получателя из справочника, см. Справочник банков
nameMediatorstringнетимя получателя; при отсутствии допускается пустая строка, передача null не допускается

Значение bankName должно быть взято из справочника, возвращаемого GET /masterdata/bank/list. Передача значения, отсутствующего в справочнике, приводит к применению межбанковского тарифа. Для отдельных банков платформа поддерживает обратную совместимость с устаревшими значениями; перечень синонимов раскрывается через менеджера. В новых интеграциях применяются только канонические значения из справочника.

Допустимые значения paymentMethod для Pay Out

toCard, sbp, toAccount и моно‑банковские каналы (alfa_alfa, sber_sber, ozon_ozon, tbank_tbank, vtb_vtb, gazprom_gazprom, psb_psb).

Методы transgran, transgranSBP, nspk, ecom, mobile для Pay Out не применяются.

Ответ

Успешное создание Pay Out

{
  "status": "Success",
  "data": {
    "id": "8e1f0d24-3a2b-4c8f-9f1c-d3e8a5b9c021",
    "dateAdded": "2026-05-16T12:05:11.422Z",
    "dateUpdated": "2026-05-16T12:05:11.422Z",
    "typeOperation": "payOut",
    "status": "created",
    "idTransactionMerchant": "withdraw-101",
    "amountInitial": 5000,
    "amountRandomized": 5000,
    "amount": 5000,
    "amountComission": 50,
    "currency": "RUB",
    "amountInCurrencyBalance": 49.85,
    "amountComissionInCurrencyBalance": 0.50,
    "exchangeRate": 100.30
  },
  "traceID": "0c4a1b8e-3f7d-44e2-9b6c-1d5f8a2e7c11"
}

Недостаточно средств на балансе

{
  "status": "Warning",
  "data": null,
  "codeError": "notEnoughMoneyOnBalance",
  "message": "Required: 50.50 USDT, available: 12.34 USDT",
  "traceID": "5b1d3e0a-6f8b-4a72-9e3a-2c0a1f5d4b21"
}

Некорректные параметры запроса

{
  "status": "Warning",
  "data": null,
  "codeError": "invalidRequestParameters",
  "message": "Field 'number' is required for paymentMethod=sbp",
  "traceID": "a91f7c20-8b14-4f3a-9d80-1e2a3c4b5d61"
}

В ответе на Pay Out поле paymentDetailsData отсутствует.

Переходы статусов

created → in_progress → success
                     └→ failed
created → pending_retry → in_progress → success
                                     └→ failed

Статус pending_retry означает, что операция не была принята провайдером с первой попытки и поставлена в очередь повторной отправки. В этом случае создание повторной операции с другим значением idTransactionMerchant не требуется.

Коды ошибок

Перечень кодов ошибок и реакция на них приведены в разделе Ошибки. Часто встречающиеся при h2h‑интеграции коды:

  • duplicateIdentifier — повторное использование idTransactionMerchant;
  • notEnoughMoneyOnBalance — недостаточно средств для Pay Out;
  • noPaymentDetailsAvailable — нет свободных реквизитов под указанный метод;
  • noSuitableTariffForRequest — метод не разрешён тарифом мерчанта;
  • invalidRequestParameters — нарушен формат запроса;
  • fraud — операция отклонена антифрод‑контролем.