Changelog

Un registro público de los cambios de la API. Cambios aditivos y compatibles hacia atrás (nuevos campos opcionales); los cambios incompatibles se marcan de forma explícita: las integraciones existentes siguen funcionando sin cambios.

2026-06-30 — OCR multiproveedor (BYOK)

Cambio incompatible. La etapa de OCR ahora toma ocr.{provider, model, providerKey} (antes ocr.mistralApiKey). Elija cualquier proveedor compatible — Mistral es el predeterminado (mistral-ocr-latest). model es obligatorio. Los nuevos marcadores de error de OCR (provider_auth_failed, provider_key_required, rate_limited, ocr_timeout, ocr_backend_*, too_many_pages) reemplazan a mistral_key_required.

2026-06-26 — Claves de idempotencia

POST /v1/jobs acepta idempotencyKey. Reintentar con la misma clave y parámetros idénticos devuelve la tarea original; la misma clave con parámetros diferentes devuelve 400.

2026-06-24 — webhooks de finalización de tareas

  • Nuevos campos webhookUrl y webhookSecret (ambos opcionales) al crear una tarea. webhookUrl es un endpoint absoluto http/https; el servicio le envía un POST una vez con un cuerpo JSON (job_id, account_id, status, finished_at) cuando la tarea alcanza un estado terminal. webhookSecret es un secreto HMAC: cuando está definido, cada solicitud incluye las cabeceras X-Hotdoc-Timestamp y X-Hotdoc-Signature (sha256=hex(hmac_sha256(secret, "<ts>.<body>"))). Ambos campos se aceptan solo como entrada y nunca aparecen en las respuestas. Política de reintentos: hasta 6 intentos con retrasos de 1 m / 5 m / 15 m / 30 m / 30 m. Consulte «Webhooks» para más detalles.

2026-06-24 — división consciente de la estructura y tamaño de fragmento configurable

  • División de texto consciente de la estructura. El texto reconocido largo ahora se corta por los límites de la estructura de su formato (Markdown / HTML / XML / plain): las tablas no se rompen a mitad de fila (el encabezado de una tabla se repite en cada fragmento) y se preserva el contexto de los encabezados de sección. El comportamiento anterior (fragmentos como filas llm[] independientes identificadas por chunkIndex / chunkTotal) no cambia: el servicio sigue sin fusionar los fragmentos.
  • Nuevo campo neural.chunkBudgetTokens (opcional) al crear una tarea: presupuesto de tokens por fragmento para la ventana de contexto de su modelo; rango 160002000000, por defecto el valor conservador del servicio. La respuesta devuelve el presupuesto efectivo real.
  • Nuevo campo ocr[].outputFormat en el resultado de la tarea: el formato del texto reconocido (markdown / html / xml / plain).