ДокументыКак работаетТарифыКомпаниямВойти

API для компаний и разработчиков ПО

Загружайте документы качества из своей программы, получайте распознанные поля, скачивайте сертификаты из общей библиотеки. Один тариф — 3 000 ₽ в месяц без лимитов на запросы и хранение (fair use — 1 000 распознаваний в месяц). На время беты — бесплатно.

Базовый адрес: https://lk.alldocs.pro/v1. Формат — JSON, кодировка UTF-8, даты YYYY-MM-DD, время ISO 8601.

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

Ключ создаётся в кабинете: Профиль → API → Создать ключ. Передавайте его в заголовке:

curl https://lk.alldocs.pro/v1/me \
  -H "Authorization: Bearer ad_live_0123456789abcdef0123456789abcdef"
{
  "user": { "id": "…", "email": "you@company.ru", "name": "…", "company": "…" },
  "key":  { "name": "1С склад", "prefix": "01234567", "webhook_url": null, "default_visibility": "private" },
  "plan": "api-beta",
  "usage": { "month": "2026-09", "uploads": 12, "recognitions": 12, "downloads": 3, "fair_use_recognitions": 1000 }
}

Ключ действует от имени владельца: видимость, кредиты и правила библиотеки те же, что в кабинете. Ключ можно отозвать в любой момент; полный ключ показывается один раз при создании.

Объект «документ»

id — ваш документ (копия файла у вас), file_id — общий файл в библиотеке (один и тот же PDF у всех пользователей хранится и распознаётся один раз).

{
  "id": "58912132-…",                 // ваш документ
  "file_id": "09b277b2-…",            // общий файл (SHA-256-дедупликация)
  "external_id": "1c:00012345",       // ваш идентификатор, если передавали
  "file_name": "Сертификат КНАУФ.pdf",
  "visibility": "private",            // public | friends | private
  "status": "done",                   // queued | done | error
  "verify_status": "plausible",       // verified | plausible | suspicious | rejected
  "verify_note": null,
  "confidence": 0.95,
  "fields": {
    "doc_type": "Сертификат соответствия",
    "doc_number": "РОСС RU.СГ64.Н01380",
    "doc_date": "2022-12-16",
    "valid_until": "2025-12-15",
    "material": "Профили прессованные из алюминиевых сплавов …",
    "material_short": "Профили алюминиевые",
    "manufacturer": "ООО «ЛПЗ «Сегал»",
    "supplier": null
  },
  "file": { "size": 506998, "mime": "application/pdf", "ext": "pdf", "pages": 1, "sha256": "…" },
  "owners_count": 3, "downloads_count": 7,
  "created_at": "2026-09-14T04:44:49.087Z",
  "links": { "self": "https://lk.alldocs.pro/v1/documents/58912132-…", "file": "https://lk.alldocs.pro/v1/documents/58912132-…/file" }
}

Загрузка

POST /v1/documents

Загрузить файл (multipart/form-data). PDF, JPG, PNG, TIFF, WEBP до 50 МБ. Сшитый PDF из нескольких документов режется на отдельные автоматически.

fileфайл, обязателен
visibilitypublic | friends (только друзьям владельца) | private; по умолчанию — настройка ключа
external_idваш идентификатор (до 120 символов). Повторная загрузка с тем же external_id вернёт существующий документ (200), а не создаст новый
fieldsJSON-строка с готовыми полями: doc_type, doc_number, doc_date, valid_until, material, material_short, manufacturer, supplier
recognizefalse — не распознавать, записать fields как есть (только вместе с fields). Иначе файл распознаётся, а fields сохраняются как ваши правки
file_nameимя файла в кабинете, если отличается от имени в форме
curl -X POST https://lk.alldocs.pro/v1/documents \
  -H "Authorization: Bearer ad_live_…" \
  -F "file=@sert-knauf.pdf" \
  -F "visibility=public" \
  -F "external_id=1c:00012345"

Ответ 201 с status: "queued" — распознавание занимает 3–15 секунд. Готовность узнаёте по webhook или опросом GET /v1/documents/{id}. Если такой файл уже есть в библиотеке — 200, dedup: true, поля готовы сразу.

Список и карточка

GET /v1/documents

Ваши документы, новые первыми.

limit, offsetстраница, по умолчанию 100, максимум 200
statusqueued | done | error
qпоиск по номеру, материалу, изготовителю, имени файла
external_idточное совпадение
visibilitypublic | friends | private
sinceсозданные не раньше даты/времени (ISO 8601)
{ "items": [ { …документ… } ], "total": 1319, "limit": 100, "offset": 0 }

GET /v1/documents/{id}

Карточка документа.

PATCH /v1/documents/{id}

Правка: fields (объект), visibility, note, external_id. Если файл есть только у вас — правки становятся каноническими; иначе сохраняются в вашей копии.

curl -X PATCH https://lk.alldocs.pro/v1/documents/58912132-… \
  -H "Authorization: Bearer ad_live_…" -H "Content-Type: application/json" \
  -d '{ "fields": { "valid_until": "2027-01-01" }, "visibility": "public" }'

DELETE /v1/documents/{id}

Удалить документ у себя. Файл остаётся в библиотеке, пока есть другие владельцы.

POST /v1/documents/{id}/reparse

Распознать заново (считается в fair use).

Файл

GET /v1/documents/{id}/file

Ссылка на скачивание (действует 15 минут). ?inline=1 — для просмотра в браузере, ?redirect=1 — сразу 302 на файл, ?num=7 — номер в имени файла для комплекта ИД.

{ "url": "https://alldocs-files.storage.yandexcloud.net/…", "expires_in": 900,
  "file_name": "СС Профили алюминиевые РОСС RU.СГ64.Н01380 16.12.2022.pdf", "mime": "application/pdf", "size": 506998 }

Библиотека

Общие публичные документы всех участников — то, ради чего всё затевалось: сертификат на типовой материал, скорее всего, уже загрузил кто-то другой.

GET /v1/search

Поиск по библиотеке (публичные документы + ваши).

qпоиск по смыслу: «каменная вата технониколь», номер, изготовитель
doc_typeточный тип: «Сертификат соответствия», «Паспорт качества», …
manufacturer, material_shortточное совпадение без учёта регистра
materialвхождение в полное или краткое наименование
valid1 — только действующие (срок не истёк или не указан)
limit, offsetстраница
curl "https://lk.alldocs.pro/v1/search?q=каменная+вата&doc_type=Сертификат+соответствия&valid=1" \
  -H "Authorization: Bearer ad_live_…"
{ "items": [ { "file_id": "…", "fields": { … }, "verify_status": "plausible", "owners_count": 12, "is_mine": false,
    "links": { "self": "https://lk.alldocs.pro/v1/files/…", "file": "https://lk.alldocs.pro/v1/files/…/file" } } ], "total": 41, "limit": 100, "offset": 0 }

GET /v1/files/{file_id}

Карточка библиотечного файла.

GET /v1/files/{file_id}/file

Ссылка на скачивание библиотечного файла (те же параметры, что у документа). Скачивание чужого публичного файла засчитывается загрузившему.

POST /v1/files/{file_id}/add

Добавить библиотечный файл к себе без загрузки: { "visibility": "private" }. Возвращает ваш документ.

GET /v1/types

Типы документов с количеством — для фильтров.

Webhook

В кабинете задайте для ключа Webhook URL (только https) — вы получите секрет для проверки подписи. Мы шлём POST с JSON при событиях:

document.recognizedраспознавание завершено (или файл уже был в библиотеке / загружен с recognize=false) — в теле полный объект документа
document.failedраспознавание не удалось, status: "error", parse_error
POST https://your.app/alldocs-hook
Content-Type: application/json
X-AllDocs-Event: document.recognized
X-AllDocs-Delivery: 1042
X-AllDocs-Signature: sha256=5f1c…

{ "event": "document.recognized", "created_at": "2026-09-14T04:45:00Z", "document": { …документ… } }

Ответьте любым кодом 2xx в течение 10 секунд. Иначе повторим через 1 мин, 5 мин, 30 мин, 2 ч и 12 ч; после пяти неудач доставка помечается как failed (видно в кабинете и в GET /v1/webhooks/deliveries).

Проверка подписи — HMAC-SHA256 от сырого тела запроса:

// Node.js
const crypto = require('crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', SECRET).update(rawBody).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-alldocs-signature'] || ''));

# Python
import hmac, hashlib
expected = 'sha256=' + hmac.new(SECRET.encode(), raw_body, hashlib.sha256).hexdigest()
ok = hmac.compare_digest(expected, request.headers.get('X-AllDocs-Signature', ''))

Лимиты и ошибки

300 запросов/минна ключ; при превышении — 429 rate_limited, заголовки RateLimit-*
60 загрузок/минна ключ
1 000 распознаваний/месfair use тарифа API; при превышении в бете — предупреждение в заголовке X-AllDocs-Usage. Дедупликация и recognize=false не считаются
50 МБмаксимальный размер файла — 413 file_too_large

Ошибка всегда { "error": "код", "message": "пояснение" }: 401 invalid_api_key, 403 email_not_verified, 404 not_found, 400 fields_required / bad_date / unknown_field / bad_visibility, 415 unsupported_type, 429 rate_limited, 500 server_error.

Импорт из своей системы

Если поля уже распознаны у вас (учётная система, старый архив) — загрузите файлы с fields и recognize=false: распознавание не тратится, поля записываются как есть, дубликаты по содержимому склеиваются автоматически. external_id делает импорт идемпотентным — скрипт можно запускать повторно.

curl -X POST https://lk.alldocs.pro/v1/documents \
  -H "Authorization: Bearer ad_live_…" \
  -F "file=@archive/1234.pdf" -F "external_id=archive:1234" -F "recognize=false" \
  -F 'fields={"doc_type":"Паспорт качества","doc_number":"14","doc_date":"2024-05-06","material":"Клин монтажный 22х143х43","material_short":"Клин монтажный","manufacturer":"ООО «Дек»"}'

Вопросы и доступ к тарифу API: support@alldocs.pro.