Чеки клиента
Как загрузить чек клиента к заявке на приём, как мы его проверяем и что делать, если нужен доп
Клиент переводит деньги только из приложения Т-Банка. Чек — PDF из приложения банка — к заявке загружаете вы. Мы проверяем чек: подлинность, получателя и сумму. По зачтённым чекам заявка становится оплаченной.
Сроки
| Что | Срок |
|---|---|
| Оплатить и загрузить чек | до expireAt заявки: срок задаётся для магазина, у вас 60 минут с создания |
| Проверить чек | обычно несколько минут. Если проверка идёт дольше 15 минут, чек решает оператор Parallel; до решения статус — checking |
| Прислать доп, если мы его запросили | до proofRequest.deadline: 60 минут с запроса |
Пока чек проверяется или ждёт допа, заявка не истекает, даже если expireAt уже прошёл.
Загрузка чека
Тело — multipart/form-data:
Поле
Тип
К одной заявке можно загрузить несколько чеков: например, клиент перевёл двумя переводами или доплатил.
Повторная загрузка того же файла к той же заявке вернёт уже загруженный чек с кодом 200 OK.
curl -X POST "https://api.parallel-pay.com/api/v1/invoices/cm3k8x7y80001z8j4k5m6n7o8/receipts" \
-H "Authorization: Bearer $PARALLEL_TOKEN" \
-F "file=@receipt.pdf"HTTP Status: 201 Created
{
"id": "rc8k2m4n6p8q0s2u4w6y8a0c2",
"invoiceId": "cm3k8x7y80001z8j4k5m6n7o8",
"status": "checking",
"fileName": "receipt.pdf",
"amount": null,
"basis": null,
"rejectionReason": null,
"proofRequest": null,
"createdAt": "2025-11-03T15:04:00.000Z"
}Код 201 и есть подтверждение, что чек дошёл. Итог проверки придёт webhook-уведомлением receipt.*,
а если чек зачтён — ещё и invoice.paid.
Ошибки
| Код | Когда |
|---|---|
400 | Файл не PDF, JPG или PNG, или больше 10 МБ |
404 | Заявки нет или она другого магазина |
409 | Заявка не принимает чеки: срок expireAt вышел, заявка оплачена целиком, отменена или по ней открывали апелляцию. Платёж после срока — апелляцией |
Что происходит с чеком
| Статус | Что это значит |
|---|---|
checking | Проверяем |
accepted | Зачтён на amount. Заявка — paid |
proof_required | Нужен доп: что прислать — в proofRequest. См. Доп. Прислали PDF чека — снова checking |
proof_review | Доп получен, его проверяет администратор Parallel |
rejected | Не зачтён, причина — в rejectionReason |
Почему чек может быть не зачтён:
rejectionReason | Что случилось |
|---|---|
wrong_requisites | Клиент перевёл не на реквизиты заявки: в другой банк, на другую карту или телефон |
duplicate | Этот перевод уже зачтён — в этой или другой заявке, даже другим файлом |
proof_rejected | Доп не подтвердил перевод |
proof_timeout | Доп не прислали к proofRequest.deadline |
Сумма оплаты
Заявка оплачивается на сумму зачтённых чеков, но не больше суммы заявки: она в paidAmount уведомления invoice.paid.
- Клиент перевёл меньше. Заявка оплачена на сумму чека,
paidAmountменьшеamount. Сообщать нам об этом отдельно не нужно. - Доплата. Загрузите чек доплаты до
expireAt: придёт ещё одноinvoice.paidс новымpaidAmount. - Клиент оплатил дважды. Каждый загруженный чек мы считаем частью оплаты, но зачтено не больше суммы заявки.
Если оба чека загружены до того, как заявка оплачена целиком, по второму придёт только
receipt.accepted; после полной оплаты новые чеки не принимаются (409). Если второй перевод — ошибка клиента, не загружайте его. - Не согласны с суммой. Откройте апелляцию
invalid_sumс фактической суммой.
Пример: заявка на 1000 RUB, клиент перевёл 600 и потом 400.
| Вы | Мы присылаем |
|---|---|
| Загрузили первый чек | receipt.accepted с amount: "600", invoice.paid с paidAmount: "600" |
| Загрузили второй чек | receipt.accepted с amount: "400", invoice.paid с paidAmount: "1000" |
Доп
Доп мы запрашиваем, если вместо PDF прислали картинку (not_pdf: пришлите PDF из приложения банка) или PDF не прошёл
проверку подлинности (failed_check: пришлите выписку по счёту или видео с переводом). Запрос приходит
уведомлением receipt.proof_required:
{
"id": "rc8k2m4n6p8q0s2u4w6y8a0c2",
"invoiceId": "cm3k8x7y80001z8j4k5m6n7o8",
"status": "proof_required",
"fileName": "screenshot.jpg",
"amount": null,
"basis": null,
"rejectionReason": null,
"proofRequest": {
"reason": "not_pdf",
"accepts": ["pdf"],
"deadline": "2025-11-03T16:07:00.000Z"
},
"createdAt": "2025-11-03T15:04:00.000Z"
}Ответ — до proofRequest.deadline:
Файлом
Тело — multipart/form-data:
Поле
Тип
curl -X POST "https://api.parallel-pay.com/api/v1/receipts/rc8k2m4n6p8q0s2u4w6y8a0c2/proof" \
-H "Authorization: Bearer $PARALLEL_TOKEN" \
-F "kind=file" -F "proofKind=pdf" -F "file=@bank-receipt.pdf"Ответ — объект чека. PDF чека мы проверяем как чек: статус снова checking, а если PDF не пройдёт проверку
подлинности, придёт новый receipt.proof_required с failed_check. Выписку и видео проверяет администратор
Parallel: статус proof_review. Итог придёт уведомлением receipt.accepted или receipt.rejected.
Повтор того же запроса (например, ответ не дошёл из-за сети) вернёт тот же чек с кодом 200 OK. Другой ответ на
уже принятый доп — 409.
Под вашу финансовую ответственность
Тело — тоже multipart/form-data:
Поле
Тип
curl -X POST "https://api.parallel-pay.com/api/v1/receipts/rc8k2m4n6p8q0s2u4w6y8a0c2/proof" \
-H "Authorization: Bearer $PARALLEL_TOKEN" \
-F "kind=financial_responsibility" -F "amount=1000"Чек зачитывается сразу на amount с basis: "financial_responsibility", без проверки. Если окажется, что клиент не
перевёл деньги, убыток ваш.
Ответ — объект чека со статусом accepted, следом придёт invoice.paid. Если ответа нет к proofRequest.deadline,
чек отклоняется с proof_timeout.
Объект чека
Этот же объект приходит в ответе на загрузку и на доп, в проверке чека и в теле уведомлений receipt.*.
Поле
Тип
Проверка чека
Возвращает чек с текущим статусом. Используйте, если уведомление не дошло.
Платёж после срока
После expireAt заявка, по которой не зачтён ни один чек и ни один не проверяется, становится expired, и чеки к ней
больше не принимаются (409). Если клиент всё же перевёл, откройте апелляцию has_payment и
приложите чек.