# BaaS
# Роутинг платежей
Для подключения сервиса и начала работы необходимо обратиться в Службу поддержки (opens new window) или к вашему курирующему менеджеру (opens new window).
# Регистрация саб-мерчанта
Саб-мерчантом может быть юридическое лицо или индивидуальный предприниматель.
Для начала работы Саб-мерчант должен самостоятельно завести Личный кабинет Mandarin через процедуру стандартной регистрации (opens new window), пройдя шаги от (1) подачи заявки до (4) завершения обработки анкеты.
Помимо основного процесса регистрации Личного кабинета доступно массовое заведение Личных кабинетов через реестр. Для использования этого сценария обратитесь к вашему курирующему менеджеру.
После одобрения Личного кабинета можно переходить к процедуре привязки созданного Личного кабинета Саб-мерчанта к вашему аккаунту Маркетплейса
# Создание аккаунта саб-мерчанта
Для создания аккаунта Саб-мерчанта используется token, который доступен в Личном кабинете Саб-мерчанта в разделе Routing Настроек проекта.
| Параметр | Тип | Обязателен | Описание |
|---|---|---|---|
| accountType | string | Да | Тип аккаунта, для юрлица принимает значение business. |
| token | string | Да | Токен аккаунта юрлица. |
Синхронный ответ содержит id (идентификатор) аккаунта.
Запрос
POST https://secure.mandarinpay.com/api/v1/accounts/business
{
"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 рублей на аккаунт платформы.
Запрос одностадийной оплаты
POST https://api.mandarin.io/secure/transactions
{
"payment": {
"action": "pay",
"orderId": "your_unique_order_id",
"amount": {
"value": "5000.00",
"currency": "RUB"
},
"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 должна быть равна верхнеуровневому amount!
Отмена возможна как на всю сумму транзакции, так и на часть суммы (частичная отмена). Допускается неограниченное количество частичных отмен одной операции платежа в пределах суммы оплаты. Активного участия плательщика при этом не требуется.
| Параметр | Обязателен | Параметр | Обязателен | |
|---|---|---|---|---|
| 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-уведомление могут содержать более широкий набор параметров по сравнению с примером.
Запрос
POST https://secure.mandarinpay.com/api/transactions
{
"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"
}
# Перечисление средств (Роутинг)
Перечисление средств Саб-мерчантам осуществляется автоматически на следующий рабочий день после даты платежа.
# Работа с виртуальными счетами
# Начало работы
Перед началом интеграции необходимо обратиться в службу поддержки для получения следующих данных:
client_idclient_secret- доступ к Sandbox окружению
- (опционально) настройка webhook URL для получения уведомлений о статусе кошельков
Эти данные используются для получения access_token и выполнения запросов к API.
# Окружения
Доступны два окружения:
| Environment | Base URL |
|---|---|
| Sandbox | https://sandbox-payment-tokens.mandarin.io |
| Production | https://payment-tokens.mandarin.io |
Sandbox используется для тестирования интеграции.
# Аутентификация запросов
Для работы с API используется OAuth2 Bearer Token.
# Запрос на получение токена
Точка входа для боевого (production) окружения:
POST https://accounts.mandarinbank.com/oauth/token/
Включает в себя обязательные form-data параметры, которые передаются в теле запроса (параметры application.client_id и application.client_secret неизменны для приложения и хранятся на стороне клиента).
| Параметр | Описание | Пример |
|---|---|---|
| grant_type | Грант авторизации (всегда равен client_credentials). | client_credentials |
| client_id | Идентификатор клиента (равен значению application.client_id, предоставленному Mandarin). | VvPtlhcyldKtkuoUWY42 pErdrj4er2AwFoBWrn8n |
| client_secret | Секретный ключ-пароль клиента (равен значению application.client_secret, предоставленному Mandarin). | uQfOIMsltZYL8x3XMqUGP5 iFM59PyFnKlN0UmD3Ihre2 Ry3AGazUAv5jPdUI4dBJqV 0Of6b9GFvWvzGahYnq2aVV xkxn9n4qWF57FP0C01Kp6l EtajhfYv3UZ2f4pAZ7 |
| scope | Запрашиваемые скоупы (области доступа): например, transactions.read - "Чтение транзакций". Разделитель - пробел. Запрашивать можно любой список скоупов, при этом в ответе вернется тот список запрошенных скоупов, который может быть предоставлен для данного приложения. | payment-tokens:tokens.write payment-tokens:tokens.read payment-tokens:otp.write |
Пример запроса:
curl --location 'https://accounts.mandarinbank.com/oauth/token/' \
--form 'grant_type=client_credentials' \
--form 'client_id=YOUR_CLIENT_ID' \
--form 'client_secret=YOUR_CLIENT_SECRET' \
--form 'scope=REQUESTED_SCOPES'
В параметре scope необходимо передать права для вызываемых методов API.
Пример:
payment-tokens:tokens.write payment-tokens:tokens.read payment-tokens:otp.write
Права передаются через пробел, без дополнительных символов.
Полученный токен необходимо передавать в заголовке всех API-запросов:
Authorization: Bearer {access_token}
# Создание виртуального счёта (ЭСП)
# Точки входа
Sandbox:
POST https://sandbox-payment-tokens.mandarin.io/api/v1/tokens/generate
Production:
POST https://payment-tokens.mandarin.io/api/v1/tokens/generate
Неоходимый скоуп:
payment-tokens:tokens.write
Запрос
curl --location 'https://sandbox-payment-tokens.mandarin.io/api/v1/tokens/generate' \
--header 'Mid: 123' \
--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 в последующих запросах.
# Отправка в ОТП
Отправляет SMS код подтверждения.
Точка входа:
POST /payment-tokens/api/v1/otp/{payment_token_id}/send
Неоходимый скоуп:
payment-tokens:otp.write
Ответ в случае успешной отправки SMS кода (200 OK)
{
"to": "79017636353",
"ttl": 1773659797,
"status": "pending",
"retries": 10
}
# Верификация ОТП
Подтверждает SMS код.
Точка входа:
POST /payment-tokens/api/v1/otp/{payment_token_id}/verify
Неоходимый скоуп:
payment-tokens:otp.write
Запрос:
{
"code": "0153"
}
Ответ в случае успешного подтверждения кода (200 OK)
{
"verified": true,
"retries": 9
}
# Проверка статуса ЭСП
Запрос:
GET /payment-tokens/api/v1/tokens/{payment_token_id}/status
Неоходимый скоуп:
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 | кошелек приостановлен |
# Данные для тестовых запросов
# Успешное создание кошелька
first_name: Успешный
last_name: Успех
middle_name: Успехович
# Ошибка создания кошелька
first_name: Неуспешный
last_name: Неуспех
middle_name: Неуспехович
# Процесс интеграции
- Получить
access_token - Создать ЭСП (
generate) - Отправить SMS код (
send) - Пользователь вводит код
- Подтвердить код (
verify) - Получить статус ЭСП (
status) или через webhook
# Получение баланса ЭСП
Запрос
curl --location 'https://payment-tokens.mandarin.io/api/v1/tokens/{{payment_token_id}}/wallet/balance' \
--header 'Authorization: Bearer Token' \
--header 'Mid: 3019'
Ответ в случае успешного получения баланса (200 ОК)
{
"wallet_id": "fsdfrg3amt",
"balance": 1500075,
"currency": "RUB"
}
# Платёжные операции
Все платёжные операции выполняются через единый endpoint
POST https://secure.mandarinpay.com/api/transactions
Операция является асинхронной. Финальный статус передаётся в callback-уведомлении.
# Внутренние операции
Зачисление средств на ЭСП (business → wallet)
Запрос
curl --location 'https://secure.mandarinpay.com/api/transactions' \
--header 'Content-Type: application/json' \
--header 'Mid: 777' \
--header 'Authorization: Bearer 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 --location 'https://secure.mandarinpay.com/api/transactions' \
--header 'Content-Type: application/json' \
--header 'Mid: 777' \
--header 'Authorization: Bearer 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 --location 'https://secure.mandarinpay.com/api/transactions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 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 --location 'https://secure.mandarinpay.com/api/transactions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 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 --location 'https://secure.mandarinpay.com/api/transactions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 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 --location 'https://secure.mandarinpay.com/api/transactions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 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"
}
Получение ФИО
POST https://secure.mandarinpay.com/api/sbp/{id}/status
Подтверждение выплаты
POST https://secure.mandarinpay.com/api/sbp/{id}/confirm
Отклонение выплаты
POST https://secure.mandarinpay.com/api/sbp/{id}/reject
# Транзитные операции
Выплата на карту с транзитом через ЭСП
Запрос
curl --location 'https://secure.mandarinpay.com/api/transactions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 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 --location 'https://secure.mandarinpay.com/api/transactions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 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-уведомлений.