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

Користувацькі запити для завантаження документів, отримання JSON-результату та роботи з webhook. Base URL: https://jdoc.net.ua.

Створити API-ключ Порядок дій Інтеграція з 1С/BAS

Зміст

Базові правила

ПараметрОпис
Base URLhttps://jdoc.net.ua
АвторизаціяAuthorization: Bearer <API_KEY>
ІдемпотентністьIdempotency-Key для кожного нового завантаження.
Формат тілаmultipart/form-data
Файлиfiles[], PDF/PNG/JPG/JPEG/TIFF.
ПакетДо 100 файлів за один запит, якщо інше не обмежено вашим тарифом або налаштуваннями компанії.

У Postman не задавайте вручну Content-Type для multipart: Postman сам поставить boundary.

1. Завантажити один документ

curl --location 'https://jdoc.net.ua/api/v1/operations' \
  --header 'Authorization: Bearer <API_KEY>' \
  --header 'Idempotency-Key: upload-one-001' \
  --form 'files[]=@document.pdf'

Поля form-data

ПолеТипОбовʼязковоОпис
files[]FileТакОдин або кілька файлів. Для пакета повторіть поле кілька разів.
webhook_urlTextНіURL для доставки результату саме цієї операції. Якщо не передати, використовується webhook компанії, якщо він налаштований у кабінеті.
metadataText/JSONНіВаш службовий коментар або JSON, який допомагає звʼязати операцію з вашою системою.
client_operation_idTextНіВаш ID операції в ERP/CRM/1С/BAS.

2. Завантажити кілька документів

Можна передати до 100 файлів за один запит. Усі файли передаються з однаковим ключем files[].

curl --location 'https://jdoc.net.ua/api/v1/operations' \
  --header 'Authorization: Bearer <API_KEY>' \
  --header 'Idempotency-Key: upload-batch-001' \
  --form 'files[]=@invoice.pdf' \
  --form 'files[]=@act.pdf' \
  --form 'files[]=@scan.png'

3. Завантажити з webhook для конкретної операції

curl --location 'https://jdoc.net.ua/api/v1/operations' \
  --header 'Authorization: Bearer <API_KEY>' \
  --header 'Idempotency-Key: upload-webhook-001' \
  --form 'files[]=@document.pdf' \
  --form 'webhook_url=https://example.com/jdoc/webhook'

4. Відповідь на створення операції

{
  "operation_id": "op_xxx",
  "status": "ACCEPTED",
  "files_total": 1,
  "documents": [
    {
      "document_id": "doc_xxx",
      "filename": "document.pdf",
      "status": "QUEUED"
    }
  ],
  "webhook_enabled": false,
  "created_at": "2026-05-10T10:00:00+00:00"
}
ПолеОпис
operation_idID операції для перевірки статусу та отримання результату.
statusПоточний статус операції.
files_totalКількість прийнятих файлів.
documents[].document_idID конкретного документа.
webhook_enabledЧи буде виконана доставка результату на webhook.

5. Отримати операцію і JSON-результат

curl --location 'https://jdoc.net.ua/api/v1/operations/op_xxx' \
  --header 'Authorization: Bearer <API_KEY>'

Коли статус PROCESSED або PROCESSED_WITH_WARNINGS, результат буде в documents[].result.

6. Отримати результати операції окремо

curl --location 'https://jdoc.net.ua/api/v1/operations/op_xxx/results' \
  --header 'Authorization: Bearer <API_KEY>'

7. Отримати результат конкретного документа

curl --location 'https://jdoc.net.ua/api/v1/documents/doc_xxx/result' \
  --header 'Authorization: Bearer <API_KEY>'

8. Отримати список доступних artifacts і final JSON

curl --location 'https://jdoc.net.ua/api/v1/documents/doc_xxx/artifacts' \
  --header 'Authorization: Bearer <API_KEY>'
curl --location 'https://jdoc.net.ua/api/v1/documents/doc_xxx/artifacts/final_json/signed-url' \
  --header 'Authorization: Bearer <API_KEY>'

9. Webhook: налаштування і формат доставки

Webhook потрібен, якщо ваша система має автоматично отримувати повідомлення після завершення обробки. Його можна налаштувати в кабінеті у розділі Webhook.

Поля webhook у кабінеті

ПолеОпис
nameНазва webhook у вашому кабінеті. Наприклад: Production BAS.
urlHTTPS-адреса вашої системи, на яку JDOC буде надсилати POST-запит.
secretСекрет для перевірки підпису. Зберігайте його у своїй системі, не показуйте користувачам.
signature_requiredЯкщо увімкнено, JDOC підписує webhook-запит. Ваша система може перевірити, що запит справді надійшов від JDOC і тіло не змінювали.
is_defaultЯкщо webhook основний, він автоматично використовується для нових операцій компанії.
max_delivery_attemptsМаксимальна кількість спроб доставки.
retry_delays_secЗатримки між повторними спробами у секундах. Наприклад: [60,300,900,3600].
statusACTIVE або DISABLED.

Що приходить на webhook

JDOC надсилає HTTP POST з Content-Type: application/json. Є два типи подій: по операції та по документу.

Заголовки webhook-запиту

HeaderОпис
X-DocParser-EventТип події: наприклад operation.completed або document.processed.
X-DocParser-Operation-IdID операції.
X-DocParser-Document-IdID документа, якщо подія стосується конкретного документа.
X-DocParser-Delivery-IdID доставки webhook.
X-DocParser-Event-IdID події. Використовуйте для дедуплікації.
X-DocParser-TimestampUnix timestamp підпису.
X-DocParser-SignatureПідпис sha256=..., якщо для webhook заданий secret.

Підпис webhook

Підпис потрібен для перевірки справжності запиту. Алгоритм:

signed_payload = X-DocParser-Timestamp + "." + raw_body
expected = "sha256=" + HMAC_SHA256(secret, signed_payload)

Порівняйте expected з X-DocParser-Signature. Також перевіряйте, що timestamp не старіший за кілька хвилин.

Payload події операції

{
  "event_type": "operation.completed",
  "event": "operation.completed",
  "event_id": "evt_xxx",
  "operation_id": "op_xxx",
  "status": "PROCESSED",
  "summary": {
    "files_total": 1,
    "processed": 1,
    "processed_with_warnings": 0,
    "rejected": 0,
    "failed": 0,
    "cancelled": 0
  },
  "created_at": "2026-05-10T10:00:00+00:00",
  "completed_at": "2026-05-10T10:01:00+00:00",
  "documents": [
    {
      "document_id": "doc_xxx",
      "filename": "document.pdf",
      "status": "PROCESSED",
      "pages_count": 2,
      "document_type_code": "act",
      "structure_type_code": "structured",
      "billing": {
        "billable": true,
        "documents_charged": 1
      },
      "created_at": "2026-05-10T10:00:00+00:00",
      "completed_at": "2026-05-10T10:01:00+00:00"
    }
  ]
}

Payload події документа

{
  "event_type": "document.processed",
  "event": "document.processed",
  "event_id": "evt_xxx",
  "operation_id": "op_xxx",
  "document_id": "doc_xxx",
  "status": "PROCESSED",
  "document": {
    "document_id": "doc_xxx",
    "filename": "document.pdf",
    "status": "PROCESSED",
    "pages_count": 2,
    "billing": {
      "billable": true,
      "documents_charged": 1
    }
  },
  "created_at": "2026-05-10T10:00:00+00:00",
  "completed_at": "2026-05-10T10:01:00+00:00"
}

Webhook-повідомлення є сигналом, що результат готовий. Повний JSON результату забирайте через GET /api/v1/operations/{operation_id} або GET /api/v1/documents/{document_id}/result.

Перевірити webhook status

curl --location 'https://jdoc.net.ua/api/v1/operations/op_xxx/webhook' \
  --header 'Authorization: Bearer <API_KEY>'

Формат відповіді операції

ПолеОпис
operation_idПублічний ID операції.
statusСтатус операції.
progressЛічильники: всього, оброблено, з попередженнями, відхилено, помилки, скасовано, в обробці.
documents[]Документи операції.
documents[].billingЧи списано документ з балансу.
documents[].resultСтруктурований JSON документа.
documents[].validationСтатус перевірки, warnings/errors.
documents[].warningsПопередження, які варто перевірити перед імпортом.
documents[].artifactsПосилання на доступні artifacts, наприклад final JSON.
webhookСтан доставки webhook.

Формат result

ПолеОпис
documentНомер, дата, назва, валюта, мова.
document_typeТип документа і confidence.
structure_typeТип структури документа.
partiesКонтрагенти: продавець, покупець, інші сторони.
line_itemsРядки документа: опис, кількість, ціна, ПДВ, сума.
totalsПідсумки: база, ПДВ, загальна сума, сума до сплати.
taxesПодаткові ставки і суми.
bank_accountsIBAN, банк, МФО, сторона.
signatoriesПідписанти.
extra_fieldsДодаткові поля: договір, період, примітки тощо.
confidenceОцінка впевненості розпізнавання.
validationРезультат перевірки JSON.

Статуси операції

СтатусОпис
ACCEPTEDЗапит прийнято, операцію створено.
QUEUEDОперація або документи очікують черги.
PROCESSINGЄ документи в обробці.
PARTIALLY_PROCESSEDЧастина документів уже оброблена, частина ще ні.
PROCESSEDУсі документи успішно оброблені без попереджень.
PROCESSED_WITH_WARNINGSОперацію завершено, але є документи з попередженнями.
COMPLETED_WITH_REJECTIONSОперацію завершено, але частина документів була відхилена.
COMPLETED_WITH_ERRORSОперацію завершено, але частина документів має помилки.
FAILEDОперацію не вдалося виконати.
CANCELLEDОперацію скасовано.

Статуси документа

СтатусОпис
QUEUEDДокумент очікує обробки.
PREPROCESSINGПідготовка файла до читання.
TEXT_EXTRACTINGОтримання тексту з документа.
OCR_PROCESSINGРозпізнавання скану або зображення.
CLEANINGОчищення і підготовка тексту.
CANDIDATES_EXTRACTINGПошук кандидатів реквізитів і сум.
AI_EXTRACTINGAI формує структурований JSON.
VALIDATINGПеревірка структури, сум і попереджень.
PROCESSEDДокумент готовий без попереджень.
PROCESSED_WITH_WARNINGSДокумент готовий, але є warnings.
REJECTEDФайл відхилено до або під час обробки.
FAILEDДокумент не вдалося обробити.
CANCELLEDОбробку документа скасовано.

Статуси webhook-доставки

СтатусОпис
PENDINGДоставка очікує першої спроби.
SENDINGJDOC зараз відправляє webhook.
DELIVEREDВаша система повернула HTTP 2xx.
RETRYБуде повторна спроба доставки.
FAILEDУсі спроби доставки вичерпані.
CANCELLEDДоставку скасовано.

Формат помилки

{
  "error": {
    "code": "HTTP_ERROR",
    "message": "Operation not found."
  }
}
HTTPЩо означає
400Невірний запит або параметри.
401Не передано або невірний API-ключ.
403API-ключ не має потрібних прав.
404Операцію або документ не знайдено.
409Конфлікт ідемпотентності.
422Невірні поля запиту.
429Перевищено ліміт запитів.
500Технічна помилка сервісу.

Питання по інтеграції можна надсилати на support@jdoc.net.ua.