Parallel

Чеки клиента

Как загрузить чек клиента к заявке на приём, как мы его проверяем и что делать, если нужен доп

Клиент переводит деньги только из приложения Т-Банка. Чек — PDF из приложения банка — к заявке загружаете вы. Мы проверяем чек: подлинность, получателя и сумму. По зачтённым чекам заявка становится оплаченной.

Сроки

ЧтоСрок
Оплатить и загрузить чекдо expireAt заявки: срок задаётся для магазина, у вас 60 минут с создания
Проверить чекобычно несколько минут. Если проверка идёт дольше 15 минут, чек решает оператор Parallel; до решения статус — checking
Прислать доп, если мы его запросилидо proofRequest.deadline: 60 минут с запроса

Пока чек проверяется или ждёт допа, заявка не истекает, даже если expireAt уже прошёл.

Загрузка чека

POST/api/v1/invoices/:invoiceId/receipts

Тело — 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:

POST/api/v1/receipts/:receiptId/proof

Файлом

Тело — 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.*.

Поле

Тип

Проверка чека

GET/api/v1/receipts/:receiptId

Возвращает чек с текущим статусом. Используйте, если уведомление не дошло.

Платёж после срока

После expireAt заявка, по которой не зачтён ни один чек и ни один не проверяется, становится expired, и чеки к ней больше не принимаются (409). Если клиент всё же перевёл, откройте апелляцию has_payment и приложите чек.

На этой странице