reqdoc API
Распознавание документов РФ: один документ → чистый JSON. Один POST-запрос с фото паспорта, ВУ или СТС — на выходе размеченные поля. Модель как у DaData.
Обзор
Базовый адрес API:
# все запросы — по HTTPS
https://api.reqdoc.ru- Единственный эндпоинт —
POST /v1/recognize: принимает файл и тип документа, возвращает JSON. - Ответ — единый конверт со
status,dataиrequest_id. - Даты возвращаются как в документе (
DD.MM.YYYY), ключи —snake_case. - Данные обрабатываются на территории РФ; файлы не сохраняются (152-ФЗ).
Аутентификация
Все запросы авторизуются API-ключом — заголовок Authorization: Bearer reqdoc_live_…. Лимиты запросов и месячная квота определяются вашим тарифом.
Боевой ключ вида reqdoc_live_… выдаёт Telegram-бот @req_doc_bot — команда /key. Ключ показывается один раз, храните его в секрете и не публикуйте в клиентском коде.
request_id (он же в заголовке X-Request-Id) — указывайте его при обращении в поддержку.Быстрый старт
Минимальный вызов с ключом — выберите язык:
curl -X POST https://api.reqdoc.ru/v1/recognize \ -H "Authorization: Bearer reqdoc_live_<ВАШ_КЛЮЧ>" \ -F "type=passport" \ -F "file=@passport.jpg"
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())
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());
Эндпоинт
Content-Type: multipart/form-data
Параметры запроса (form-data)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
file | binary | да | Фото/скан документа: jpg, png, pdf. До 10 МБ. |
type | string | да | Тип документа: passport · driver_license · vehicle_registration (лицевая СТС) · vehicle_registration_back (оборот СТС). |
Формат ответа
Единый конверт. Поле, которое OCR не распознал, приходит как null.
Успех — HTTP 200
{
"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
{
"status": "error",
"error": {
"code": "invalid_type",
"message": "Unknown document type. Use: passport, driver_license, vehicle_registration."
},
"request_id": "92c2a084-1737-4909-a6f8-f02898280a4a"
}Коды ошибок
code | HTTP | Когда |
|---|---|---|
invalid_key | 401 | Передан Authorization, но ключ неверный или отозван. |
missing_file | 400 | Не передан file. |
invalid_type | 400 | type не из списка допустимых. |
rate_limited | 429 | Превышен лимит запросов/мин по вашему тарифу. |
recognition_empty | 422 | OCR отработал, но не извлёк ни одного поля. |
ocr_failed | 502 | OCR-сервер недоступен или вернул ошибку. |
Поля: passport — Паспорт РФ
| Поле | Пример |
|---|---|
surname | Иванов |
first_name | Иван |
patronymic | Иванович |
gender | female · male |
birth_date | 03.08.1978 |
birth_place | с. Леоново, Иркутская обл. |
series | 9223 |
number | 376525 |
issue_date | 08.09.2023 |
issuing_authority | МВД по Республике Татарстан |
division_code | 160-008 |
registration_address | г. Москва, … |
9223 376525) — API разбивает на series (первые 4) и number (остаток). registration_address есть только на странице регистрации; на развороте с фото приходит null.Поля: driver_license — Водительское удостоверение
| Поле | Пример |
|---|---|
surname | Иванов |
first_name | Иван Иванович |
birth_date | 03.08.1978 |
birth_place | Иркутская обл. |
series | 9904 |
number | 218375 |
categories | ["B", "B1", "M"] |
valid_from | 06.11.2018 |
valid_to | 06.11.2028 |
issued_in | Респ. Татарстан |
first_name содержит имя и отчество одной строкой (отдельного поля отчества OCR для ВУ не даёт). Номер приходит строкой (99 04 218375) — API разбивает на series и number.Поля: vehicle_registration — СТС, лицевая
| Поле | Пример |
|---|---|
make | GAC |
model | GS8 |
vehicle_type | Легковой универсал |
vehicle_category | B |
year | 2025 |
vin | LMGJU3G86S1055176 |
body_number | LMGJU3G86S1055176 |
chassis_number | ОТСУТСТВУЕТ |
color | Белый |
engine_power | 150 |
environmental_class | Шестой |
max_mass | 2555 (кг) |
unladen_mass | 2105 (кг) |
plate | А123ВС777 |
sts_number | 99 88 446042 |
vehicle_passport_series | 1643 |
vehicle_passport_number | 02128572791 |
GAC GS8) — API разбивает на make (первое слово) и model (остаток).Поля: vehicle_registration_back — СТС, оборот
Владелец и адрес регистрации (обратная сторона СТС).
| Поле | Пример |
|---|---|
owner_surname | Иванов |
owner_name | Иван |
owner_patronymic | Иванович |
region | Татарстан |
district | null |
city | Пестрецы |
street | ул Окольная |
house | 31 |
building | null |
apartment | null |
sts_number | 99 88 446042 |
registration_date | 04.03.2026 |
type: загружаете фото нужной стороны.Лимиты и квоты
- Rate-limit (запросов/мин) и месячная квота определяются вашим тарифом: Trial / Старт / Про / Бизнес.
- Сверх квоты — биллинг по факту использования, без отключения сервиса. Тарифы: reqdoc.ru/#pricing.
Roadmap
Пока не поддерживаются (нет OCR-эндпоинтов): европротокол, справка ГАИ, СНИЛС, ИНН, ПТС. Нужен какой-то из них — напишите в @req_doc_bot.