# BaaS
# Роутинг платежей
# Аутентификация
Запросы к API роутинга аутентифицируются заголовком x-auth. Формирование значения — в разделе Аутентификация запросов.
Для подключения сервиса и начала работы необходимо обратиться в Службу поддержки (opens new window) или к вашему курирующему менеджеру (opens new window).
# Регистрация саб-мерчанта
Саб-мерчантом может быть юридическое лицо или индивидуальный предприниматель.
Для начала работы Саб-мерчант должен самостоятельно завести Личный кабинет Mandarin через процедуру стандартной регистрации (opens new window), пройдя шаги от (1) подачи заявки до (4) завершения обработки анкеты.
Помимо основного процесса регистрации Личного кабинета доступно массовое заведение Личных кабинетов через реестр. Для использования этого сценария обратитесь к вашему курирующему менеджеру.
После одобрения Личного кабинета можно переходить к процедуре привязки созданного Личного кабинета Саб-мерчанта к вашему аккаунту Маркетплейса
# Создание аккаунта саб-мерчанта
Для создания аккаунта Саб-мерчанта используется token, который доступен в Личном кабинете Саб-мерчанта в разделе Routing Настроек проекта.
| Параметр | Тип | Обязателен | Описание |
|---|---|---|---|
| accountType | string | Да | Тип аккаунта, для юрлица принимает значение business. |
| token | string | Да | Токен аккаунта юрлица. |
Синхронный ответ содержит id (идентификатор) аккаунта.
Запрос
curl --request POST \
--url https://secure.mandarinpay.com/api/v1/accounts/business \
--header 'Content-Type: application/json' \
--header 'x-auth: {{x_auth}}' \
--data-raw '{
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjaGFudF9pZCI6MiwiaXNzIjoiMzAg0LzQsNGPIDIwMjIg0LMuIn0.unGctyIBkp4EHXw-7bFqWbbkmfhs2yCJ-jAKJGqRP_1"
}'
Ответ в случае успешного создания аккаунта (200 ОК)
{
"id": "01dab7d8-be9b-4f87-ba91-801731787725",
"type": "Business"
}
Ответ в случае, если запрос не создан (400 Bad request)
{
"error": "Invalid request"
}
# Прием платежей (Роутинг)
Используются стандартные API-запросы для приема платежей, в соответствии с документацией. Возможны одностадийная оплата, рекуррентный платеж (автосписание) и двухстадийная оплата (в этом случае авторизация остается стандартной, а распределение платежей происходит при завершении расчетов).
При этом в запрос pay добавляется объект routing.destination, содержащий схему распределения платежа. Для приема платежей: сумма значений amount из объекта routing должна быть равна верхнеуровневому amount!
ВАЖНО! При использовании двух-стадийной оплаты объект routing добавляется во второй запрос с "action": "pay"
Плательщик может вводить данные карты на платежной странице или встраиваемой форме оплаты Mandarin Custom Pay.
| Параметр | Тип | Обязателен | Описание |
|---|---|---|---|
| routing | Да | Объект, содержащий параметры роутинга. | |
| routing.destination | string | Да | Массив, содержащий получателей платежа. |
| routing.destination. accountId | string | Да | Идентификатор аккаунта получателя. |
| routing.destination. amount.value | string | Да | Сумма, перечисляемая на аккаунт получателя. Для приема платежей: от этой суммы будет удержана комиссия платформы. Разделитель - точка. |
| routing.destination. amount.currency | string | Да | Валюта суммы, перечисляемой на аккаунт получателя. Сейчас всегда RUB. |
| routing.destination. platformFeeAmount. value | string | Да | Комиссия платформы, от суммы, перечисляемой на аккаунт получателя. Разделитель - точка. |
| routing.destination. platformFeeAmount. currency | string | Да | Валюта комиссии платформы. Сейчас всегда RUB. |
| routing.destination. description | string | Нет | Описание. |
В примере ниже с карты плательщика списывается 5000 рублей, которые будут зачислены следующим получателям:
- 3950 рублей на аккаунт
16f90c5e-6bc3-11eb-9439-0242ac130002, принадлежащий юрлицу. - 50 рублей на аккаунт платформы.
- 950 рублей на аккаунт
8ba85f01-8cc8-4161-b45d-ce6442e678ae, который принадлежит другому юрлицу. - еще 50 рублей на аккаунт платформы. Итого 100 рублей на аккаунт платформы.
Запрос одностадийной оплаты
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'x-auth: {{x_auth}}' \
--data-raw '{
"payment": {
"action": "pay",
"orderId": "your_unique_order_id",
"price": "5000.00"
},
"orderActualTill": "2020-02-20 12:34:56+00:00"
},
"routing": {
"destination": [{
"accountId": "16f90c5e-6bc3-11eb-9439-0242ac130002",
"amount": {
"value": "4000.00",
"currency": "RUB"
},
"platformFeeAmount": {
"value": "50.00",
"currency": "RUB"
},
"description": ""
},
{
"accountId": "8ba85f01-8cc8-4161-b45d-ce6442e678ae",
"amount": {
"value": "1000.00",
"currency": "RUB"
},
"platformFeeAmount": {
"value": "50.00",
"currency": "RUB"
},
"description": ""
}
]
},
"customerInfo": {
"email": "user@example.com",
"phone": "+79001234567"
}
}'
Ответ на запрос соответствует стандартному ответу для создания транзакций.
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
# Токенизация (Роутинг)
Для токенизации используются стандартные запросы на токенизацию. Впоследствие токен карты можно использовать для создания рекуррентных списаний, платежей с сохраненной картой в интерактивном режиме или платежей с сохраненной картой без ввода cvv кода и без прохождения 3d-secure
# Отмена платежа (Роутинг)
Используются стандартный API-запросы для возврата по ранее завершенной оплате, в соответствии с документацией.
Для отмены успешной транзакции на списание средств с карты ("action": "pay") используйте "action": "reversal" и id ранее проведенной транзакции в качестве target.transaction
При этом в запрос pay добавляется объект routing.source, содержащий схему распределения возврата между аккаунтами Саб-мерчантов. Для приема платежей: сумма значений amount из объекта routing должна быть равна верхнеуровневому price!
Отмена возможна как на всю сумму транзакции, так и на часть суммы (частичная отмена). Допускается неограниченное количество частичных отмен одной операции платежа в пределах суммы оплаты. Активного участия плательщика при этом не требуется.
| Параметр | Обязателен | Параметр | Обязателен | |
|---|---|---|---|---|
| routing | Да | Объект, содержащий параметры роутинга. | ||
| routing.source | string | Да | Массив, содержащий плательщиков. | |
| routing.source.accountId | string | Да | Идентификатор аккаунта плательщика. | |
| routing.source.amount.value | string | Да | Сумма, перечисляемая на аккаунт плательщика. Разделитель - точка. | |
| routing.source.amount.currency | string | Да | Валюта суммы, списанной с аккаунта плательщика. Сейчас всегда RUB. | |
| routing.source.platformFeeAmount. value | string | Да | Используется при возврате удержанной комиссии, может быть равно 0. Разделитель - точка. | |
| routing.source.platformFeeAmount. currency | string | Да | Валюта комиссии платформы. Сейчас всегда RUB. | |
| routing.source.description | string | Нет | Описание. |
Синхронный ответ и асинхронное callback-уведомление могут содержать более широкий набор параметров по сравнению с примером.
Запрос
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'x-auth: {{x_auth}}' \
--data-raw '{
"payment": {
"action": "reversal",
"orderId": "your_unique_order_id",
"price": "5000.00"
},
"target": {
"transaction": "43913ddc000c4d3990fddbd3980c1725"
},
"customValues": [
{"name": "first parameter to save and show", "value": "p1"},
{"name": "second parameter to save and show", "value": "p2"}
],
"metadata": {
"first_parameter_to_callback_and_not_to_show": "p1",
"second_parameter_to_callback_and_not_to_show": "p2"
},
"routing": {
"source": [{
"accountId": "16f90c5e-6bc3-11eb-9439-0242ac130002",
"amount": {
"value": "4000.00",
"currency": "RUB"
},
"platformFeeAmount": {
"value": "50.00",
"currency": "RUB"
},
"description": ""
},
{
"accountId": "8ba85f01-8cc8-4161-b45d-ce6442e678ae",
"amount": {
"value": "1000.00",
"currency": "RUB"
},
"platformFeeAmount": {
"value": "50.00",
"currency": "RUB"
},
"description": ""
}
]
},
"urls": {
"callback": "http://...",
"return": "http://..."
}
}'
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
# Перечисление средств (Роутинг)
Перечисление средств Саб-мерчантам осуществляется автоматически на следующий рабочий день после даты платежа.
# Работа с виртуальными счетами
ТЕСТИРОВАНИЕ
Перед интеграцией получите тестовые учетные данные и сценарии в разделе BaaS: OAuth-приложение, Sandbox, тестовые ФИО для создания ЭСП.
# Окружения
Доступны два окружения:
| Environment | Base URL |
|---|---|
| Sandbox | https://sandbox-payment-tokens.mandarin.io |
| Production | https://payment-tokens.mandarin.io |
Sandbox используется для тестирования интеграции.
# Аутентификация
Запросы к API виртуальных счетов аутентифицируются по протоколу OAuth 2.0 (Bearer). Формирование токена — в разделе Аутентификация запросов.
В примерах ниже используется шаблон --header 'Authorization: Bearer '.
Запрос на получение токена
curl --request POST \
--url https://accounts.mandarinbank.com/oauth/token/ \
--form 'grant_type=client_credentials' \
--form 'client_id={{client_id}}' \
--form 'client_secret={{client_secret}}' \
--form 'scope=payment-tokens:tokens.write payment-tokens:tokens.read payment-tokens:otp.write'
В параметре scope передайте права для вызываемых методов API, через пробел. Пример: payment-tokens:tokens.write payment-tokens:tokens.read payment-tokens:otp.write.
# Создание виртуального счета (ЭСП)
# Точки входа
Неоходимый скоуп: payment-tokens:tokens.write
Sandbox: POST https://sandbox-payment-tokens.mandarin.io/api/v1/tokens/generate
Production: POST https://payment-tokens.mandarin.io/api/v1/tokens/generate
Запрос
curl --request POST \
--url https://payment-tokens.mandarin.io/api/v1/tokens/generate \
--header 'Mid: {{mid}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"first_name": "Николай",
"last_name": "Николаев",
"middle_name": "Николаевич",
"birth_date": "1993-12-22",
"citizenship": "RU",
"registration_address": "г. Москва, ул. Петровка, д.2, кв.1",
"living_address": "г. Москва, ул. Петровка, д.2, кв.1",
"document": {
"document_type": "Passport",
"serial": "1233",
"number": "123458",
"issue_date": "2002-04-24T15:23:14.969Z",
"birth_place": "г. Москва",
"issuer": "ОВД района Фили Давыдково",
"issue_code": "404-004",
"expiration_date": null
},
"inn": "777777777777",
"snils": "140-120-150 35",
"phones": [
{
"phone": "79017636353",
"type": "Personal"
}
],
"email": "ivanoff@mail.ru",
"fax": "string",
"phone_check": true,
"terms_agreement": true,
"is_public_official_person": false,
"presence_of_beneficiary": false,
"beneficiary_information": false,
"exist_fatf_government_bills": false,
"affiliation_with_foreign_taxpayers": false
}'
Ответ в случае успешной отправки запроса на создание (200 OK)
{
"id": "f289271a-914d-4987-88c4-d7cc66482c75",
"status": "Processing",
"created_at": "2026-03-16T10:00:36.0018804Z",
"processed_at": null,
"finished_at": null
}
Поле id используется как payment_token_id в последующих запросах.
# Отправка в OTP
Отправляет SMS код подтверждения.
POST https://payment-tokens.mandarin.io/api/v1/otp/{payment_token_id}/send
Запрос
curl --request POST \
--url https://payment-tokens.mandarin.io/api/v1/otp/{payment_token_id}/send \
--header 'Authorization: Bearer {{access_token}}'
Неоходимый скоуп: payment-tokens:otp.write
Ответ в случае успешной отправки SMS кода (200 OK)
{
"status": "pending",
"retries": 10,
"channel": "sms",
"channel_status": "queued"
}
Описание channel_status:
| Значение | Описание |
|---|---|
| queued | Сообщение поставлено в очередь на отправку |
| delivered | Сообщение успешно доставлено |
| unknown | Статус доставки неизвестен или доставка не подтверждена |
Примечание:
- поле
channel_statusносит информационный характер;- статус доставки не влияет на успешность OTP.
# Верификация OTP
Подтверждает SMS код.
POST https://payment-tokens.mandarin.io/api/v1/otp/{payment_token_id}/verify
Запрос
curl --request POST \
--url https://payment-tokens.mandarin.io/api/v1/otp/{payment_token_id}/verify \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"code": "0153"
}'
Неоходимый скоуп: payment-tokens:otp.write
Ответ в случае успешного подтверждения кода (200 OK)
{
"verified": true,
"retries": 9,
"channel": "sms",
"channel_status": "delivered"
}
# Получение статуса OTP
GET https://payment-tokens.mandarin.io/api/v1/otp/{payment_token_id}/status
Метод позволяет получить:
- текущий статус OTP;
- количество оставшихся попыток;
- статус доставки SMS.
Запрос
curl --request GET \
--url https://payment-tokens.mandarin.io/api/v1/otp/{payment_token_id}/status \
--header 'Authorization: Bearer {{access_token}}'
Неоходимый скоуп: payment-tokens:otp.write
OTP ожидает подтверждения (200 OK):
{
"status": "pending",
"retries": 9,
"channel_status": "queued"
}
OTP успешно подтвержден (200 OK):
{
"status": "correct",
"retries": 9,
"channel_status": "delivered"
}
Описание значений status:
| Значение | Описание |
|---|---|
| pending | Статус в ожидании |
| correct | Статус успешного подтверждения |
Описание значений channel_status:
| Значение | Описание |
|---|---|
| queued | Ожидается подтверждение |
| delivered | Успешно подтверждено |
| unknown | Статус неизвестен или сообщение не подтверждено |
# Проверка статуса ЭСП
GET https://payment-tokens.mandarin.io/api/v1/tokens/{payment_token_id}/status
Запрос
curl --request GET \
--url https://payment-tokens.mandarin.io/api/v1/tokens/{payment_token_id}/status \
--header 'Authorization: Bearer {{access_token}}'
Неоходимый скоуп: payment-tokens:tokens.read
Ответ в случае успешной отправки запроса на создание (200 OK)
{
"id": "06dca2f1-4e1c-44e7-8848-3e9e3adba875",
"status": "Success",
"created_at": "2025-11-21T10:33:27.021823Z",
"processed_at": "2025-11-21T10:33:32.431478Z",
"finished_at": "2025-11-21T10:33:33.022295Z"
}
# Вебхуки
Для получения уведомлений о статусе кошелька можно настроить webhook.
Webhook отправляется методом POST.
Payload:
{
"event_id": "17c5fdaf-3570-4d77-8966-6ae4505c2454",
"payment_token_id": "98a4a683-305e-4664-8d96-5f51d9e668f6",
"status": "Success",
"created_at": "2026-03-04T14:44:57.079171Z"
}
# Статусы ЭСП
| Status | Description |
|---|---|
| Processing | кошелек создается |
| Success | кошелек активирован |
| Failed | ошибка создания |
| Blocked | кошелек заблокирован |
| Suspended | кошелек приостановлен |
# Процесс интеграции
- Получить
access_token - Создать ЭСП (
generate) - Отправить SMS код (
send) - Пользователь вводит код
- Подтвердить код (
verify) - Получить статус ЭСП (
status) или через webhook
# Получение баланса ЭСП
GET https://payment-tokens.mandarin.io/api/v1/tokens/{payment_token_id}/wallet/balance
Запрос
curl --request GET \
--url https://payment-tokens.mandarin.io/api/v1/tokens/{{payment_token_id}}/wallet/balance \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Mid: {{mid}}'
Ответ в случае успешного получения баланса (200 ОК)
{
"wallet_id": "fsdfrg3amt",
"balance": 1500075,
"currency": "RUB"
}
# Платежные операции
Все платежные операции выполняются через единый endpoint: POST https://secure.mandarinpay.com/api/transactions.
Операция является асинхронной. Финальный статус передается в callback-уведомлении.
# Внутренние операции
Зачисление средств на ЭСП (business → wallet)
Запрос
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'Mid: {{mid}}' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"payment": {
"action": "payout",
"orderId": "your_unique_order_id",
"price": "10.00",
"orderActualTill": "2026-02-20 12:34:56+00:00"
},
"target": {
"paymentToken": "payment_token_id"
},
"customerInfo": {
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues": [
{ "name": "first parameter to save and show", "value": "p1" },
{ "name": "second parameter to save and show", "value": "p2" }
],
"metadata": {
"first_parameter_to_callback_and_not_to_show": "p1",
"second_parameter_to_callback_and_not_to_show": "p2"
},
"urls": {
"callback": "http://...",
"return": "http://..."
}
}'
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
Списание средств с ЭСП на счет бизнеса (wallet → business)
Запрос
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'Mid: {{mid}}' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"payment": {
"action": "pay",
"orderId": "your_unique_orde1f313fr_id",
"price": "10.00",
"orderActualTill": "2026-02-20 12:34:56+00:00"
},
"target": {
"paymentToken": "payment_token_id"
},
"customerInfo": {
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues": [
{ "name": "first parameter to save and show", "value": "p1" },
{ "name": "second parameter to save and show", "value": "p2" }
],
"metadata": {
"first_parameter_to_callback_and_not_to_show": "p1",
"second_parameter_to_callback_and_not_to_show": "p2"
},
"urls": {
"callback": "http://...",
"return": "http://..."
}
}'
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "9b3c8a1f7e52d4096b0c2f8d3a5e17b4",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=f2a85b1c-3e9d-4871-a0b4-6c83d9f1e502",
"jsOperationId": "p3j8m267t1n9f4k5d0q8b3v6"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
# Внешние операции (вывод средств с ЭСП)
На карту по номеру карты (wallet → knownCardNumber)
Запрос
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"payment": {
"action": "payout",
"orderId": "1756292752",
"price": "100"
},
"customerInfo": {
"email": "noreply@example.ru",
"phone": "+72244861047"
},
"source": {
"paymentToken": "63eed817-c56e-4aac-ad38-15113ed13744"
},
"destination": {
"knownCardNumber": "2202202244861047"
}
}'
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "e7a2f1b409d83c6a25e0b8d14c9f3a72",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=7d14c9a3-0b8e-42f6-95c1-e3a6f0d8b247",
"jsOperationId": "k5h8293xq4m7p1tg6r0n8s2v3"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
На привязанную карту (wallet → binded card)
Запрос
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"payment": {
"action": "payout",
"orderId": "1756292807",
"price": "100"
},
"customerInfo": {
"email": "noreply@example.ru",
"phone": "+72244861047"
},
"source": {
"paymentToken": "63eed817-c56e-4aac-ad38-15113ed13744"
},
"destination": {
"card": "63eed817-c56e-4aac-ad38-15113ed13722"
}
}'
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "a7f4c2098e3b15d60f8a2e1b7c390d4f",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=1d8f3b9a-6e05-4c12-9a7d-0c4a8b5f3e12",
"jsOperationId": "j384m76t9k5f1d2w0n8q7x3r5"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
На СБП (1-step)
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"payment": {
"action": "payout",
"orderId": "1756292895",
"price": "100"
},
"customerInfo": {
"phone": "+7926087626",
"email": "test@example.ru",
"firstName": "Иван",
"middleName": "Валерьевич",
"lastName": "Иванов"
},
"source": {
"paymentToken": "63eed817-c56e-4aac-ad38-15113ed13744"
},
"destination": {
"sbp": {
"bankId": "100000000008",
"bankBic": "044525593"
}
}
}'
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
На СБП с подтверждением (2-step)
Создание выплаты
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"payment": {
"action": "payout",
"orderId": "1756291493",
"price": "100"
},
"customerInfo": {
"phone": "+7926087626",
"email": "test@example.ru",
"firstName": "Иван",
"middleName": "Валерьевич",
"lastName": "Иванов"
},
"source": {
"paymentToken": "63eed817-c56e-4aac-ad38-15113ed13744"
},
"destination": {
"sbp": {
"bankId": "100000000008",
"bankBic": "044525593"
}
}
}'
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "e8f2a1b90c7d34f562a8e0b9d1c7f3a5",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=9d4c7a1f-3b28-4e65-8f09-2a5b6c0d7e31",
"jsOperationId": "z5q8n2r7k1m4f9t0p3w6b8x2v"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
Получение ФИО
curl --request POST \
--url https://secure.mandarinpay.com/api/sbp/{id}/status \
--header 'Authorization: Bearer {{access_token}}'
Подтверждение выплаты
curl --request POST \
--url https://secure.mandarinpay.com/api/sbp/{id}/confirm \
--header 'Authorization: Bearer {{access_token}}'
Отклонение выплаты
curl --request POST \
--url https://secure.mandarinpay.com/api/sbp/{id}/reject \
--header 'Authorization: Bearer {{access_token}}'
# Транзитные операции
Выплата на карту с транзитом через ЭСП
Запрос
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"payment": {
"action": "payout",
"orderId": "1756291886",
"price": "100"
},
"customerInfo": {
"email": "noreply@example.ru",
"phone": "+72244861047"
},
"transit": {
"paymentToken": "63eed817-c56e-4aac-ad38-15113ed13744"
},
"target": {
"card": "63eed817-c56e-4aac-ad38-15113ed13722"
}
}'
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "8c3f9a2d1e7b0456f0c8d2e5a1b7f3d9",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
# Операции оплаты
Пополнение ЭСП с привязанной карты
Запрос
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
"payment": {
"action": "pay",
"orderId": "1756293713",
"price": "1"
},
"customerInfo": {
"email": "noreply@example.ru",
"phone": "+72244861047"
},
"source": {
"card": "63eed817-c56e-4aac-ad38-15113ed13722"
},
"destination": {
"paymentToken": "63eed817-c56e-4aac-ad38-15113ed13721"
}
}'
Ответ в случае успешного создания транзакции (200 ОК)
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (400 Bad request)
{
"error": "Invalid request"
}
Важные замечания для мерчантов
Все сценарии реализуются последовательностью вызовов существующих API-методов. Отдельных эндпоинтов под «выплату», «прием», «рефинансирование» или «распределение средств» не существует. Сценарии формируются логикой на стороне платформы. Для sandbox и production используются одинаковые пути API. Отличие заключается в доменах сервисов и значениях merchant_id и secret. Все операции асинхронные и требуют обработки callback-уведомлений.
← Выплаты Mandarin.ID →