reqdoc API

Распознавание документов РФ: один документ → чистый JSON. Один POST-запрос с фото паспорта, ВУ или СТС — на выходе размеченные поля. Модель как у DaData.

Обзор

Базовый адрес API:

# все запросы — по HTTPS
https://api.reqdoc.ru

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

Все запросы авторизуются API-ключом — заголовок Authorization: Bearer reqdoc_live_…. Лимиты запросов и месячная квота определяются вашим тарифом.

Боевой ключ вида reqdoc_live_… выдаёт Telegram-бот @req_doc_bot — команда /key. Ключ показывается один раз, храните его в секрете и не публикуйте в клиентском коде.

Каждый ответ содержит request_id (он же в заголовке X-Request-Id) — указывайте его при обращении в поддержку.

Быстрый старт

Минимальный вызов с ключом — выберите язык:

POST /v1/recognizebash
curl -X POST https://api.reqdoc.ru/v1/recognize \
  -H "Authorization: Bearer reqdoc_live_<ВАШ_КЛЮЧ>" \
  -F "type=passport" \
  -F "file=@passport.jpg"
POST /v1/recognizepython
import requests

r = requests.post(
    "https://api.reqdoc.ru/v1/recognize",
    headers={"Authorization": "Bearer reqdoc_live_<ВАШ_КЛЮЧ>"},
    data={"type": "passport"},
    files={"file": open("passport.jpg", "rb")},
)
print(r.json())
POST /v1/recognizenode
import fs from "node:fs";

const form = new FormData();
form.append("type", "passport");
form.append("file", new Blob([fs.readFileSync("passport.jpg")]), "passport.jpg");

const res = await fetch("https://api.reqdoc.ru/v1/recognize", {
  method: "POST",
  headers: { Authorization: "Bearer reqdoc_live_<ВАШ_КЛЮЧ>" },
  body: form,
});
console.log(await res.json());

Эндпоинт

POST https://api.reqdoc.ru/v1/recognize
Content-Type: multipart/form-data

Параметры запроса (form-data)

ПолеТипОбяз.Описание
filebinaryдаФото/скан документа: jpg, png, pdf. До 10 МБ.
typestringдаТип документа: passport · driver_license · vehicle_registration (лицевая СТС) · vehicle_registration_back (оборот СТС).

Формат ответа

Единый конверт. Поле, которое OCR не распознал, приходит как null.

Успех — HTTP 200

200 OK · application/json
{
  "status": "ok",
  "type": "passport",
  "data": {
    "surname": "Иванов",
    "first_name": "Иван",
    "patronymic": "Иванович",
    "birth_date": "03.08.1978",
    "series": "9223",
    "number": "376525"
    /* остальные поля — см. ниже по типу */
  },
  "request_id": "e8468676-c5d0-4e84-8625-4b2eb7396241"
}

Ошибка — HTTP 400 / 401 / 422 / 429 / 502

4xx / 5xx · application/json
{
  "status": "error",
  "error": {
    "code": "invalid_type",
    "message": "Unknown document type. Use: passport, driver_license, vehicle_registration."
  },
  "request_id": "92c2a084-1737-4909-a6f8-f02898280a4a"
}

Коды ошибок

codeHTTPКогда
invalid_key401Передан Authorization, но ключ неверный или отозван.
missing_file400Не передан file.
invalid_type400type не из списка допустимых.
rate_limited429Превышен лимит запросов/мин по вашему тарифу.
recognition_empty422OCR отработал, но не извлёк ни одного поля.
ocr_failed502OCR-сервер недоступен или вернул ошибку.

Поля: passport — Паспорт РФ

ПолеПример
surnameИванов
first_nameИван
patronymicИванович
genderfemale · male
birth_date03.08.1978
birth_placeс. Леоново, Иркутская обл.
series9223
number376525
issue_date08.09.2023
issuing_authorityМВД по Республике Татарстан
division_code160-008
registration_addressг. Москва, …
OCR отдаёт номер одной строкой (9223 376525) — API разбивает на series (первые 4) и number (остаток). registration_address есть только на странице регистрации; на развороте с фото приходит null.

Поля: driver_license — Водительское удостоверение

ПолеПример
surnameИванов
first_nameИван Иванович
birth_date03.08.1978
birth_placeИркутская обл.
series9904
number218375
categories["B", "B1", "M"]
valid_from06.11.2018
valid_to06.11.2028
issued_inРесп. Татарстан
У ВУ first_name содержит имя и отчество одной строкой (отдельного поля отчества OCR для ВУ не даёт). Номер приходит строкой (99 04 218375) — API разбивает на series и number.

Поля: vehicle_registration — СТС, лицевая

ПолеПример
makeGAC
modelGS8
vehicle_typeЛегковой универсал
vehicle_categoryB
year2025
vinLMGJU3G86S1055176
body_numberLMGJU3G86S1055176
chassis_numberОТСУТСТВУЕТ
colorБелый
engine_power150
environmental_classШестой
max_mass2555 (кг)
unladen_mass2105 (кг)
plateА123ВС777
sts_number99 88 446042
vehicle_passport_series1643
vehicle_passport_number02128572791
OCR отдаёт марку и модель строкой (GAC GS8) — API разбивает на make (первое слово) и model (остаток).

Поля: vehicle_registration_back — СТС, оборот

Владелец и адрес регистрации (обратная сторона СТС).

ПолеПример
owner_surnameИванов
owner_nameИван
owner_patronymicИванович
regionТатарстан
districtnull
cityПестрецы
streetул Окольная
house31
buildingnull
apartmentnull
sts_number99 88 446042
registration_date04.03.2026
Лицевая и оборот СТС — это два разных снимка, поэтому два type: загружаете фото нужной стороны.

Лимиты и квоты

Roadmap

Пока не поддерживаются (нет OCR-эндпоинтов): европротокол, справка ГАИ, СНИЛС, ИНН, ПТС. Нужен какой-то из них — напишите в @req_doc_bot.

Готовы встроить?Получите боевой ключ в Telegram за минуту.
Получить API-ключ