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

Парсек API

REST API для извлечения структурированных данных из счетов, УПД, актов, ТОРГ-12 и кассовых чеков. Запросы и ответы в JSON, файлы — multipart/form-data или бинарным телом.

https://api.parsek.example/v1
ФорматыPDF, JPG, PNG, HEIC, TIFF, WEBP
Размер файладо 20 МБ, до 50 страниц
КодировкаUTF-8, даты в ISO 8601, суммы — числа в рублях с копейками
OpenAPIopenapi.yaml — импортируйте в Postman или сгенерируйте клиент
Мок-серверnode mock-server/server.js — локальная копия API на порту 4545

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

Передавайте секретный ключ в заголовке Authorization. Ключи создаются в консоли.

Authorization: Bearer psk_live_9f3c2a1b7e4d6c8a0b5e
ПрефиксСреда
psk_test_Тестовая. Страницы не списываются, возвращается эталонный ответ для типа документа. Лимит 10 запросов в секунду.
psk_live_Боевая. Реальное распознавание и тарификация по страницам.
Секретный ключ нельзя использовать в браузере или мобильном приложении. Отправляйте файлы через свой сервер или создавайте ограниченные ключи со scope documents:write и IP-allowlist.

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

  1. Создайте тестовый ключ в консоли.
  2. Отправьте документ с параметром wait=true, чтобы получить результат в том же ответе.
  3. Проверьте validation.passed и сохраните data в учётную систему.

Загрузить документ

POST/v1/documents

Создаёт задачу распознавания. По умолчанию асинхронно: ответ 202 Accepted со статусом processing, результат приходит вебхуком. С wait=true сервер ждёт результата до 30 секунд и отвечает 200 OK.

Параметры запроса

ПараметрОписание
file · обязательно*binaryФайл документа в multipart/form-data. Альтернатива — бинарное тело с заголовками Content-Type и X-Filename.
urlstringHTTPS-ссылка на файл вместо загрузки. *Нужен file или url.
typeenumauto (по умолчанию), invoice, upd, vat_invoice, act, torg12, receipt, company_card
waitboolean, queryСинхронный режим. По умолчанию false.
options[validate]booleanПроверки реквизитов и арифметики. По умолчанию true.
options[return_boxes]booleanКоординаты полей на странице (нормализованные 0..1).
options[egrul_check]booleanПроверка контрагента в ЕГРЮЛ/ЕГРИП. Тариф «Бизнес» и выше.
options[fns_check]booleanПроверка кассового чека в ФНС. Тариф «Бизнес» и выше.
metadataobjectДо 20 пар ключ-значение, возвращаются в ответе и вебхуке. Например, ID документа в вашей системе.

Пример ответа 200 OK

Получить документ

GET/v1/documents/{id}

Возвращает объект Document. Пока идёт обработка — status: "processing". Рекомендуем вебхуки вместо опроса; если опрашиваете, делайте это не чаще раза в секунду.

Список документов

GET/v1/documents?limit=20&starting_after=doc_…&status=processed&type=invoice

Курсорная пагинация, сортировка от новых к старым. Ответ: { "object": "list", "data": [...], "has_more": true }.

Удалить документ

DELETE/v1/documents/{id}

Немедленно удаляет файл и результат распознавания. Возвращает { "id": "doc_…", "deleted": true }. Автоматическое удаление настраивается в консоли: файлы — от 0 часов, результаты — до 30 дней.

Объект Document

ПолеОписание
idstringИдентификатор doc_…
statusenumprocessing, processed, failed
typeenumОпределённый тип документа, type_confidence — уверенность 0..1
pagesintegerЧисло тарифицируемых страниц
dataobjectИзвлечённые поля по схеме типа
confidenceobjectУверенность по ключевым полям. Рекомендуемый порог ручной проверки — 0,9
validationobjectpassed, warnings, массив checks со статусами passed / warning / failed / skipped
errorobject | nullПри failed: code и message
livemodebooleanfalse для тестовых ключей

Схемы данных

invoice — счёт на оплату

number, dateНомер и дата счёта (ISO 8601)
suppliername, inn, kpp, address, bank { name, bik, account, corr_account }
buyername, inn, kpp
items[]name, quantity, unit, price, amount, vat_rate
total, vat_rate, vat_amount, amount_dueИтоги. vat_rate: 22%, 10%, 0%, none
payment_purposeГотовое назначение платежа для платёжного поручения

upd — УПД

status1 — счёт-фактура и передаточный документ, 2 — только передаточный документ
seller, buyerРеквизиты сторон, kpp может быть null для ИП
items[]name, code (ОКЕИ), unit, quantity, price, amount_without_vat, vat_rate, vat_amount, amount
total_without_vat, vat_amount, totalИтоги
basis, shipped_atОснование передачи и дата отгрузки

receipt — кассовый чек

sellername, inn, address
datetime, operation, tax_systemДата и время с часовым поясом, признак расчёта, система налогообложения
items[], total, paymentПозиции, итог, payment { cash, card }
fiscal, qrfn, fd, fp и строка QR-кода для проверки в ФНС

Вебхуки

Добавьте HTTPS-адрес в консоли. События: document.processed, document.failed, usage.threshold (80% и 100% лимита).

Проверка подписи

Заголовок Parsek-Signature: t=1757849525,v1=5d2c…. Подпись — HMAC-SHA256 от строки {t}.{тело запроса} с секретом эндпоинта. Отклоняйте события старше 5 минут.

import crypto from 'node:crypto';

export function verifyParsek(rawBody, header, secret) {
  const { t, v1 } = Object.fromEntries(header.split(',').map((p) => p.split('=')));
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}

Повторные попытки при ответе не 2xx: через 1 мин, 5 мин, 30 мин, 2 ч, 6 ч, 24 ч. Отвечайте 200 в течение 10 секунд, тяжёлую обработку выполняйте в фоне. Событие может прийти повторно — используйте event.id для дедупликации.

Идемпотентность

Передайте заголовок Idempotency-Key (до 255 символов) в POST /v1/documents. Повтор с тем же ключом в течение 24 часов вернёт исходный ответ без повторной тарификации. Повтор с тем же ключом, но другим телом — 409 idempotency_conflict.

Ошибки

HTTPcodeЧто делать
400invalid_requestПроверьте параметры, подробности в error.param
401unauthorizedНеверный или отозванный ключ
402quota_exceededЗакончились страницы на бесплатном тарифе
403forbiddenНет scope или IP не в allowlist
404not_foundДокумент не найден или удалён
409idempotency_conflictКлюч идемпотентности использован с другим телом
413file_too_largeФайл больше 20 МБ или больше 50 страниц
415unsupported_media_typeФормат файла не поддерживается
422unprocessable_documentДокумент не распознан (пустая страница, не финансовый документ). Не тарифицируется
429rate_limitedПовторите после Retry-After секунд
5xxserver_errorПовторите с экспоненциальной задержкой и тем же Idempotency-Key

Лимиты

ТарифЗапросов в секундуПараллельных задач
Тестовые ключи105
Бесплатный / Старт510
Бизнес3050
Корпоративныйпо договорупо договору

Каждый ответ содержит заголовки X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset и X-Request-Id — указывайте его при обращении в поддержку.

Использование

GET/v1/usage?period=2026-09

Страницы и запросы за месяц: { "period": "2026-09", "pages": 2841, "included": 10000, "overage_pages": 0, "requests": 3310 }. Требуется scope usage:read.

Версии и изменения

Мажорная версия в URL (/v1). Обратно совместимые изменения — новые поля и типы документов — выпускаются без смены версии: не полагайтесь на фиксированный набор полей. Об удалении полей сообщаем за 6 месяцев.

2026-09-01Ставка НДС 22% во всех схемах, поле payment_purpose в счёте
2026-07-15Тип company_card, опция egrul_check
2026-05-20Бета bank_statement, вебхук usage.threshold
2026-03-02Проверка QR-кода кассового чека, ускорение p95 на 35%