# 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 кошелек приостановлен

# Процесс интеграции

  1. Получить access_token
  2. Создать ЭСП (generate)
  3. Отправить SMS код (send)
  4. Пользователь вводит код
  5. Подтвердить код (verify)
  6. Получить статус ЭСП (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-уведомлений.