Changelog

Our versioning policy: new fields and new endpoints are additive and never count as a breaking change under the /api/v1/ prefix — removing or changing the meaning of an existing field would be a v2. That means you can treat every entry below as "here's what's new," not "here's what might break your integration."

2026-09-26

  • format_requirement on ad-hoc fields is now applied. When POST /batches/{batch_name}/process was called with fields (no template_id), each field's format_requirement was dropped before extraction, so values came back as printed on the document. They now reach the model, and they take precedence over any template the documents were uploaded with. Saved templates were not affected. See the Batches reference.
  • POST /documents rejects a batch_name longer than 50 characters with 400 invalid_parameter. Such names previously failed with a 500, or with a misleading "Failed to render PDF." on PDF uploads.

2026-09-14

  • PUT /templates/{id}/settings added. Sets a template's global format requirement and Multi-Page Merge configuration (whether multiple uploaded pages belonging to the same record — a multi-page lease, a stapled receipt bundle — should fold into a single output row). The Template object returned by every templates endpoint now also includes global_format_requirement and every merge_* field. See the Templates & Fields reference.
  • GET /batches/{batch_name}/results now supports ?merge=true. Applies the batch's resolved template's Multi-Page Merge config, if it has one — documents that fold into a merged record carry a new source_document_ids field alongside the usual document_id, and the response gains a top-level merge_active field. Default stays false: this endpoint predates Multi-Page Merge, so existing integrations keep seeing one entry per uploaded document unless they explicitly opt in. Cannot be combined with include=bbox. GET /batches/{batch_name}/export already applied merge unconditionally before this change and is unaffected. See the Batches reference.
  • Model Tier now correctly reflected in credit accounting for POST /batches/{batch_name}/process. An account assigned Advanced or Premium (3x/6x the Standard credit cost per document) now has that rate applied consistently to both the deduction at process time and any later refund for a canceled or failed document — previously a document whose ImageUpload row had already been removed by the time a refund ran could fall back to being refunded at the Standard rate, under-refunding a non-Standard account. GET /account/usage entries for a non-Standard deduction/refund now carry a tier-suffixed action (deduction_advanced, deduction_premium) instead of the bare name. Model Tier itself isn't new, and there's still no request-level way to select or override it — this entry is about the accounting now being correct and visible, not a new capability. See the Account Settings & API Behavior guide and the Account reference.

2026-08-04

  • GET /events added for polling integrations. The event feed returns batch.completed, document.completed, and document.failed events newest-first, with stable event IDs for Zapier-style deduplication. See the Webhooks reference.

2026-07-22

  • POST /templates now enforces a 30-template cap per account. Once you're at the limit, creating another template (from scratch or from a preset) returns 400 template_limit_reached — delete an existing template first. This limit was previously unenforced. See the Templates & Fields reference.

2026-07-21

  • POST /documents now accepts Word (.docx) and plain text (.txt) files, not just images and PDFs. Both are converted to a PDF server-side and then follow the exact same per-page split as a native PDF upload — a multi-page .docx produces one Document per page, same as today's PDF behavior. The legacy binary .doc format is not supported; save as .docx first. See the Documents reference.
  • Per-upload page limit raised from 30 to 50 pages. Applies to both native PDF uploads and .docx/.txt files converted server-side. See the Documents reference.
  • GET /documents/{document_id}/image now supports ?size=thumb for a smaller, pre-generated version of the page image — faster to load in a list/grid view than the full resolution page. Falls back to the full image if no thumbnail was generated for that document (never an error). See the Documents reference.

2026-07-20

  • Batch webhooks now re-arm automatically when you reprocess a batch. If you upload more documents into a batch that already notified you once and call process again, you'll now get notified again when that new wave finishes — no need to re-PUT the webhook. See the Webhooks guide. If your integration currently re-registers the webhook before each wave as a workaround, it's safe to stop — that call was never actually re-arming anything.
  • Bbox annotation jobs now deliver a webhook event. A document.bbox_completed event fires on the document's batch webhook when a bbox job reaches a terminal status — previously bbox completions produced no notification at all, regardless of registration. See the Webhooks guide.
  • remaining_batch_capacity added to POST /documents responses. Tells you how many more documents this batch can accept before hitting your plan's max batch size, without a separate call to GET /account.
  • document.bbox_completed deliveries are now claimed atomically, same as batch.completed. A bbox job whose row-groups finish within moments of each other on different threads used to sometimes fire two separate deliveries for what was logically one completion — you should no longer see that. If your integration was deduping these events by data.group_batch_id as a workaround, that's harmless to keep doing.

2026-07-16

  • v1 API launched. Public release of /api/v1/, covering Documents, Batches, Templates & Fields, Webhooks, and Account resources for the table (structured field extraction) processing mode. See API Overview to get started.
📮 contact email: [email protected]