Changelog
A public log of API changes. Additive, backward-compatible changes (new optional fields); breaking changes are flagged explicitly — existing integrations keep working unchanged.
2026-06-30 — Multi-provider OCR (BYOK)
Breaking. The OCR stage now takes ocr.{provider, model, providerKey} (was
ocr.mistralApiKey). Choose any supported provider — Mistral is the default
(mistral-ocr-latest). model is required. New OCR error markers
(provider_auth_failed, provider_key_required, rate_limited, ocr_timeout,
ocr_backend_*, too_many_pages) replace mistral_key_required.
2026-06-26 — Idempotency keys
POST /v1/jobs accepts idempotencyKey. Retrying with the same key and identical
parameters returns the original job; the same key with different parameters returns
400.
2026-06-24 — job completion webhooks
- New
webhookUrlandwebhookSecretfields (both optional) on job creation.webhookUrlis an absolutehttp/httpsendpoint; the service POSTs it once with a JSON body (job_id,account_id,status,finished_at) when the job reaches a terminal status.webhookSecretis an HMAC secret: when set, each request includesX-Hotdoc-TimestampandX-Hotdoc-Signatureheaders (sha256=hex(hmac_sha256(secret, "<ts>.<body>"))). Both fields are accepted as input only and never appear in responses. Retry policy: up to 6 attempts with delays 1 m / 5 m / 15 m / 30 m / 30 m. See “Webhooks” for details.
2026-06-24 — structure-aware chunking and configurable chunk size
- Structure-aware text chunking. Long recognized text is now cut along the boundaries of its format’s structure (Markdown / HTML / XML / plain): tables are not torn mid-row (a table’s header is repeated in each chunk), and section-heading context is preserved. The previous behavior (chunks as separate
llm[]rows keyed bychunkIndex/chunkTotal) is unchanged — the service still does not merge chunks. - New
neural.chunkBudgetTokensfield (optional) on job creation — per-chunk token budget for your model’s context window; range16000–2000000, defaults to the service’s conservative value. The response echoes the actual effective budget. - New
ocr[].outputFormatfield in the job result — the format of the recognized text (markdown/html/xml/plain).