Changelog

Journal public des modifications de l’API. Changements additifs et rétrocompatibles (nouveaux champs facultatifs) ; les changements cassants sont signalés explicitement — les intégrations existantes continuent de fonctionner sans modification.

2026-06-30 — OCR multi-fournisseurs (BYOK)

Cassant. L’étape OCR prend désormais ocr.{provider, model, providerKey} (auparavant ocr.mistralApiKey). Choisissez n’importe quel fournisseur pris en charge — Mistral est le fournisseur par défaut (mistral-ocr-latest). model est requis. De nouveaux marqueurs d’erreur OCR (provider_auth_failed, provider_key_required, rate_limited, ocr_timeout, ocr_backend_*, too_many_pages) remplacent mistral_key_required.

2026-06-26 — Clés d’idempotence

POST /v1/jobs accepte idempotencyKey. Réessayer avec la même clé et des paramètres identiques renvoie le job d’origine ; la même clé avec des paramètres différents renvoie 400.

2026-06-24 — webhooks de fin de job

  • Nouveaux champs webhookUrl et webhookSecret (tous deux facultatifs) à la création d’un job. webhookUrl est un endpoint absolu http/https ; le service y envoie un POST une fois, avec un corps JSON (job_id, account_id, status, finished_at), lorsque le job atteint un statut terminal. webhookSecret est un secret HMAC : lorsqu’il est défini, chaque requête inclut les en-têtes X-Hotdoc-Timestamp et X-Hotdoc-Signature (sha256=hex(hmac_sha256(secret, "<ts>.<body>"))). Les deux champs sont acceptés uniquement en entrée et n’apparaissent jamais dans les réponses. Politique de réessai : jusqu’à 6 tentatives avec des délais de 1 m / 5 m / 15 m / 30 m / 30 m. Voir « Webhooks » pour les détails.

2026-06-24 — découpage conscient de la structure et taille de chunk configurable

  • Découpage du texte conscient de la structure. Le texte reconnu long est désormais coupé le long des frontières de la structure de son format (Markdown / HTML / XML / plain) : les tableaux ne sont pas déchirés au milieu d’une ligne (l’en-tête d’un tableau est répété dans chaque chunk), et le contexte des titres de section est préservé. Le comportement précédent (les chunks comme lignes llm[] distinctes indexées par chunkIndex / chunkTotal) reste inchangé — le service ne fusionne toujours pas les chunks.
  • Nouveau champ neural.chunkBudgetTokens (facultatif) à la création d’un job — budget de tokens par chunk pour la fenêtre de contexte de votre modèle ; plage 160002000000, par défaut la valeur conservatrice du service. La réponse renvoie le budget effectif réel.
  • Nouveau champ ocr[].outputFormat dans le résultat du job — le format du texte reconnu (markdown / html / xml / plain).