Перейти к основному содержимому

Подтверждение перевода

Уведомляет систему о том, что клиент совершил перевод, и передаёт чек.

Подтверждение — это сигнал, а не смена состояния: статус платежа не меняется, платёж по-прежнему закрывается уведомлением из банковского приложения исполнителя либо колбэком провайдера. Сигнал виден в карточке сделки, а приложенный чек — тому, кто будет разбирать спор.

Endpoint

POST /v1/payments/{id}/confirm

Параметры пути

ПараметрТипОписание
idstringID платежа (UUID)

Параметры запроса

Запрос принимается как multipart/form-data (с файлом чека) или как application/json. Все параметры необязательные — запрос без тела допустим.

ПолеТипОписание
receiptfileЧек перевода. Также принимаются имена attachment, file, proof
datastring (JSON)JSON-часть запроса, например {"receipt_url":"..."}
receipt_urlstringСсылка на чек на вашей стороне (в JSON-теле или JSON-части)

Ограничения файла: не больше 10 МБ, форматы png, jpg, jpeg, webp, heic, pdf.

Пример запроса

curl -X POST https://api.bopay.io/v1/payments/550e8400-e29b-41d4-a716-446655440000/confirm \
-H "X-Identity: your-api-key" \
-H "X-Signature: calculated-signature" \
-F "[email protected]"

Со ссылкой вместо файла:

curl -X POST https://api.bopay.io/v1/payments/550e8400-e29b-41d4-a716-446655440000/confirm \
-H "Content-Type: application/json" \
-H "X-Identity: your-api-key" \
-H "X-Signature: calculated-signature" \
-d '{"receipt_url":"https://your-site.com/receipts/12345.jpg"}'

Без файла:

curl -X POST https://api.bopay.io/v1/payments/550e8400-e29b-41d4-a716-446655440000/confirm \
-H "X-Identity: your-api-key" \
-H "X-Signature: calculated-signature"

Ответ

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"ext_id": "order_12345",
"amount": 5000,
"currency": "RUB",
"status": "PENDING",
"method": "SBP",
"requisites": {
"type": "sbp",
"value": "+79001234567",
"bank": "sberbank",
"holder": "Иван И."
},
"payment_url": "https://pay.bopay.io/invoice?id=550e8400-e29b-41d4-a716-446655440000",
"valid_until": "2026-01-30T12:30:00Z",
"created_at": "2026-01-30T12:15:00Z",
"message": "Transfer confirmation received, waiting for verification"
}

Статусы после подтверждения

Статус платежа остаётся прежним (PENDING). Далее возможны:

СтатусОписание
COMPLETEDПлатёж успешно подтверждён системой
CANCELLEDПлатёж отменён (перевод не найден)

Ошибки

КодHTTPОписание
PAY_001500Внутренняя ошибка
PAY_006404Платёж не найден
PAY_008400Платёж не может быть подтверждён (не в статусе PENDING)
PAY_009400Файл чека больше 10 МБ
PAY_010400Неподдерживаемый формат файла чека

Чек можно приложить и позже, отдельным запросом POST /payments/{id}/receipt.

Пример ошибки

{
"error": "PAY_008",
"message": "Payment cannot be confirmed",
"data": {
"status": "COMPLETED"
}
}

1. Прямой вызов API

Мерчант сам отображает реквизиты клиенту и вызывает /confirm когда клиент подтверждает оплату:

Мерчант → POST /payments → Получает реквизиты
Мерчант → Показывает реквизиты клиенту
Клиент → Делает перевод
Клиент → Нажимает "Я оплатил" на сайте мерчанта
Мерчант → POST /payments/{id}/confirm

2. Payment Page (опционально)

Можно перенаправить клиента на нашу страницу оплаты payment_url:

Мерчант → POST /payments → Получает payment_url
Мерчант → Редиректит клиента на payment_url
Клиент → Видит реквизиты на странице
Клиент → Делает перевод
Клиент → Нажимает "Я оплатил" на странице
Система → Автоматически вызывает /confirm