Подтверждение перевода
Уведомляет систему о том, что клиент совершил перевод, и передаёт чек.
Подтверждение — это сигнал, а не смена состояния: статус платежа не меняется, платёж по-прежнему закрывается уведомлением из банковского приложения исполнителя либо колбэком провайдера. Сигнал виден в карточке сделки, а приложенный чек — тому, кто будет разбирать спор.
Endpoint
POST /v1/payments/{id}/confirm
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
id | string | ID платежа (UUID) |
Параметры запроса
Запрос принимается как multipart/form-data (с файлом чека) или как
application/json. Все параметры необязательные — запрос без тела допустим.
| Поле | Тип | Описание |
|---|---|---|
receipt | file | Чек перевода. Также принимаются имена attachment, file, proof |
data | string (JSON) | JSON-часть запроса, например {"receipt_url":"..."} |
receipt_url | string | Ссылка на чек на вашей стороне (в 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_001 | 500 | Внутренняя ошибка |
PAY_006 | 404 | Платёж не найден |
PAY_008 | 400 | Платёж не может быть подтверждён (не в статусе PENDING) |
PAY_009 | 400 | Файл чека больше 10 МБ |
PAY_010 | 400 | Неподдерживаемый формат файла чека |
Чек можно приложить и позже, отдельным запросом
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