API документация

Программная проверка PDF-чеков Сбербанка, Т-Банка, Ozon Банка, Альфа-Банка и ЮMoney на подлинность. Базовый адрес: https://check-pdf.bliznec-go.ru/api/v1

Аутентификация POST /api/v1/verify — проверка чека GET /banks · /config · /health Кабинет пользователя Коды ошибок и лимиты Примеры кода

Аутентификация

Каждый запрос на проверку требует ключ. Персональный ключ выдаётся в личном кабинете после регистрации (100 бесплатных проверок). Передавайте его заголовком:

X-API-Key: checkpdf_u_xxxxxxxxxxxxxxxx

Альтернатива для пользователей кабинета — заголовок сессии X-Session-Token: проверка спишет бесплатный лимит и попадёт в историю «Мои проверки».

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

POST/api/v1/verify

Multipart/form-data. Время ответа — 1–3 секунды (OCR-фолбэк может занимать дольше).

Параметры

ПолеТипОбяз.Описание
filefile (PDF)даPDF-чек из приложения банка, до 10 МБ. Скриншоты и фото отклоняются.
bankstringнетauto (по умолчанию) | sber | tbank | ozon | alfa | yoomoney
X-API-Keyheaderда*Персональный или интеграционный ключ. *Либо X-Session-Token кабинета.

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

curl -X POST https://check-pdf.bliznec-go.ru/api/v1/verify \
  -H "X-API-Key: checkpdf_u_xxxxxxxxxxxxxxxx" \
  -F "file=@receipt.pdf" \
  -F "bank=auto"

Ответ 200

{
  "verification_id": "34253185…",
  "checked_at": "2026-09-01T19:00:00+00:00",
  "requested_bank": "auto",
  "bank": "sber",
  "bank_name": "Сбербанк",
  "method": "sbp",
  "method_name": "Перевод по СБП",
  "verdict": "genuine",        // genuine | fake | inconclusive
  "confidence": 1.0,            // 0…1
  "score": 1.0,                 // балл документа: 0 — подделка, 1 — эталон
  "extracted": {
    "amount": "1 000.00 ₽", "date": "2026-07-24",
    "operation_id": "A6205…", "recipient": "Эдуард Владимирович К.",
    "sender": "Роман Сергеевич Б.", "status": "Успешно"
  },
  "checks": [
    { "id": "glyph_coverage", "label": "Покрытие глифов шрифтов",
      "status": "ok", "detail": "Все глифы встроенных шрифтов используются" }
  ],
  "notice": null,
  "remaining_checks": 99
}

Поля ответа

ПолеОписание
verdictgenuine — подлинный; fake — поддельный/не принимается; inconclusive — неоднозначно, сверьте операцию в банке.
method, method_nameОпределённый тип операции (метод): например sbp / «Перевод по СБП», num_card / «Перевод по номеру карты», sbp_abroad / «СБП за рубеж». Для неопределённого банка — null.
confidenceУверенность сервиса в вердикте, 0…1.
scoreБалл документа: насколько файл совпадает с эталоном банка.
extractedИзвлечённые поля: сумма, дата, ID операции, получатель, отправитель, статус.
checks[]Полный список выполненных проверок со статусами ok/warn/fail/info и пояснениями.
noticeЧеловеку читаемое пояснение (например, «файл — скриншот»).
remaining_checksОстаток лимита (только для проверок от имени пользователя).

Служебные методы

GET/api/v1/banks

Список поддерживаемых банков с методами (типами операций) — используйте его, чтобы всегда работать с актуальным списком:

[
  { "id": "sber", "name": "Сбербанк", "op_types": [
      { "id": "sbp",      "name": "Перевод по СБП" },
      { "id": "num_card", "name": "Перевод по номеру карты" } ] },
  { "id": "tbank",    "name": "Т-Банк",     "op_types": [ … ] },
  { "id": "ozon",     "name": "Ozon Банк",  "op_types": [ … ] },
  { "id": "alfa",     "name": "Альфа-Банк", "op_types": [ "sbp_ru", "sbp_abroad", "pay" ] },
  { "id": "yoomoney", "name": "ЮMoney",     "op_types": [ … ] }
]
GET/api/v1/config

Публичная конфигурация: максимальный размер файла и тот же список банков с методами.

GET/api/v1/health

Статус сервиса: {"status":"ok","service":"check-pdf","version":"1.4.0"}.

Кабинет пользователя

Методы кабинета требуют заголовок сессии X-Session-Token (выдаётся при POST /api/auth/login). Файлы можно получать и параметром ?token=… — удобно для прямых ссылок на скачивание.

МетодПутьОписание
POST/api/auth/registerРегистрация по email: 100 бесплатных проверок, письмо с кодом подтверждения.
POST/api/auth/loginВход; после неудачи — капча-подтверждение (challengeId + nonce из /api/auth/captcha). При включённой 2FA вернёт needs_2fa + билет, код подтверждается через /api/auth/login/2fa.
GET/api/account/infoПрофиль: email, роль, API-ключ, суточные лимиты и остатки (проверки и генерации).
GET/api/account/checksИстория проверок (пагинация page/per_page): банк, метод, вердикт, уверенность.
GET/api/account/checks/{id}/fileСкачать PDF загруженного чека (14 дней хранения).
POST/api/account/passwordСмена пароля (old_password, new_password; с 2FA — ещё и код).
GET/api/account/fakegen/typesТипы фейк-чеков тест-лаба с методом генерации и остатком суточного лимита.
POST/api/account/fakegen/createСобрать тестовую подделку: bank_type (например sber_sbp, sber_num_card, tbank_sbp, yoomoney_sbp), amount, recipient, phone, card. Результат сразу прогоняется через детектор.
GET/api/account/fakegen/historyИстория созданных тестовых подделок с вердиктом самопроверки.
GET/api/account/fakegen/{id}/previewPNG-превью первой страницы фейк-чека.
GET/api/account/support/messagesЧат с поддержкой (after_id — получить новые).
POST/api/account/support/sendНаписать в поддержку (text).

Коды ошибок и лимиты

КодПричина
400Файл не PDF, неизвестный банк, неверная капча, пустой текст сообщения.
401Нет или неверный ключ/сессия.
403Аккаунт заблокирован, почта не подтверждена или тест-лаб отключён администратором.
413Файл больше 10 МБ.
422Не передано обязательное поле формы.
429Исчерпан суточный лимит проверок.

Лимиты (сутки): файл до 10 МБ · 100 проверок в день · 100 генераций фейк-чеков в день (тест-лаб, настраивается) · хранение чеков 14 дней. Лимиты проверок и генераций суточные — обнуляются сами в полночь UTC.

Примеры кода

Python (requests)

import requests

r = requests.post(
    "https://check-pdf.bliznec-go.ru/api/v1/verify",
    headers={"X-API-Key": "checkpdf_u_xxxxxxxxxxxxxxxx"},
    files={"file": open("receipt.pdf", "rb")},
    data={"bank": "auto"},
)
verdict = r.json()["verdict"]
print("Вердикт:", verdict)

JavaScript (fetch)

const form = new FormData();
form.append("file", fileInput.files[0]);
form.append("bank", "auto");

const resp = await fetch("/api/v1/verify", {
  method: "POST",
  headers: { "X-API-Key": API_KEY },
  body: form,
});
const { verdict, confidence } = await resp.json();

Нужен доступ для интеграций или увеличенный лимит — напишите в поддержку из кабинета.