August 25, 2026
[New] Documentation reorganised around nodes The docs are now organised around the workflow nodes. Parse, Extract, Classify, Split, If/Else, Validate, Edit and Knowledge each have their own page, with API and SDK examples side by side, and every example is written against API v3. The v2 version switcher is gone; v2 stays documented in the migration guide until its sunset. Start at the node overview. [New + API] Drive anyformat from any agent host over MCP anyformat now serves a remote MCP server, so Claude Code, Claude Desktop, Cursor, ChatGPT or your own agent can work with your workflows through typed tools, with one connection and no SDK code to write. The first release covers the workflow lifecycle: list, get, create, update and delete.Technical detail
Technical detail
The server is mounted at
https://api.anyformat.ai/mcp (Streamable HTTP, stateless) and authenticates with your existing af_* API key as a bearer token. Tools: list_workflows, get_workflow, create_workflow, update_workflow, delete_workflow. Every tool calls the matching /v3/workflows/ route, so rate limits, ids and the error envelope are the ones you already know; a failed call returns the standard {error, error_code, retryable, request_id} envelope as the tool error. A missing or invalid key answers 401 with MISSING_API_KEY / INVALID_API_KEY.Technical detail
Technical detail
mode: "lite" on a parse or extract node bills under the new lite_parse and lite_extract operators. mode: "max" keeps billing as extract.August 24, 2026
[Improved] Fast parse always runs the strongest OCR The Fast parse tier is now one recipe: the strongest deployed OCR with native layout detection, every time. The effort selector is gone from Studio and from the SDK builders.Technical detail
Technical detail
ocr_effort is still accepted on a parse node and ignored. Losing the knob re-keys the parse cache, so the first Fast parse of a document after this change is a cache miss.Technical detail
Technical detail
GET /api/v3/files/{file_id}/download/ serves the original file. A new GET /api/v3/files/{file_id}/processed/ serves the PDF-converted variant and answers 404 when the file has none (native PDFs).August 21, 2026
[New] Evals 2.0 is generally available The Health tab, with Datasets, Evaluations and the Optimizer, now shows for every organisation. The 1.0 / 2.0 toggle is gone. See Evaluations. [Fixed] The Run button counted 0 documents after an upload After uploading documents, the Run button’s count stayed at 0 until the page was reloaded. [Fixed] If/Else workflows show the upstream extraction results When an If/Else run did not branch into a further step, the results view showed nothing. It now shows the upstream Extract results. [Improved] Smart-table extraction reports a clear refusal on multi-file documents A smart-table field cannot run over a document packet with more than one file. The refusal now appears in the results view with a message that says so. [Fixed] One node order and one node name in the run’s progress trail The progress trail could list a run’s nodes in a different order, or under a different name, from the workflow page. Both now come from one source.August 20, 2026
[Improved] Flash OCRs scanned and rotated pages Flash’sscanned_pages option gains an "ocr" policy, and it is the new default: a page with no text layer, or a rotated page, is OCR’d and then flows through the same layout and reading-order steps as the rest of the document. "skip" and "fail" keep their behaviour. Because the default moved, a Flash workflow that never set the option now OCRs pages that used to come back blank.
[Improved] Flash parses multi-page documents faster
Flash now runs its layout-detection batches concurrently, so a long document no longer waits on one page at a time.
[Fixed] Flash markdown follows the rendered reading order
Flash served its markdown as a join of the element list instead of the rendered reading order, so columns and captions could come out in the wrong sequence.
[Improved] Validate leaves beta
The Validate node no longer carries a beta label in Studio.
[Improved] Long-running extractions get 90 minutes
The time limit on a single extraction is raised to 90 minutes, so a very large document no longer times out before it finishes.
[Fixed] Error-page counts on the Usage page
The Usage page’s error-pages figure was read from a source that could disagree with the Results view. It now counts from the run records.
[Improved] Results-page node tabs match the workflow page
The node tabs on a file’s results page now use the same labels as the workflow page.
August 19, 2026
[New + API] Flash: a CPU-only parse tier for born-digital documents Flash is the rung below Fast. It reads the PDF’s own text layer, detects regions and reading order with a layout model, and serves markdown with no model call and no paid OCR, at 7 credits per page. Born-digital text and ruled tables report confidence 100; a heuristic structure reports no confidence rather than a fabricated one. Available in Studio’s parse menu, on the API and in both SDKs. See Parse.Technical detail
Technical detail
Set
"mode": "flash" on a parse node. scanned_pages decides what happens to a page without a text layer. Flash bills 7 credits per page under its own operator.August 18, 2026
[API] Filled forms from the Edit node on the results envelope A run with an Edit node now returns its filled forms with the results: one entry per filled file, with the detected fields, each field’s link confidence, and a presigned URL for the filled PDF.Technical detail
Technical detail
The results envelope gains
edits[]. It reaches both the v2 results endpoint and GET /v3/runs/{run_id}/, and the Python SDK surfaces it on Result. confidence is int | None: a raw linker match score, not a calibrated probability. The presigned URL is minted fresh on every read.Technical detail
Technical detail
figure_enhancement is still accepted on a parse node and ignored. ParseMode and the SDKs are unchanged.August 17, 2026
[New + API] Ask questions over a workflow’s knowledge base With a Knowledge node in a workflow, every completed run’s parsed documents are indexed into a per-workflow knowledge base. You can now ask that base a question over the API and get an answer with citations. See Knowledge.Technical detail
Technical detail
POST /v3/workflows/{workflow_id}/knowledge/ask with { "question": ... }; client.ask(...) in the Python SDK (sync and async), and the JS SDK from the regenerated spec. An ask bills 3 credits per 10,000 input tokens. An organisation with no credit is refused with 402 PAYMENT_REQUIRED before the question runs. 409 KNOWLEDGE_NOT_ENABLED means the workflow has no Knowledge node; 409 KNOWLEDGE_NOT_READY (retryable) means the index is still building.August 14, 2026
[New + API] Edit and Knowledge nodes on the public API A workflow definition sent to the API can now carry anedit node and a knowledge node. The Edit node fills a form PDF; the Knowledge node opts the workflow into the knowledge base. Both are accepted on create, update and the read response, on v2 and v3, and in both SDKs. See Edit and Knowledge.
Technical detail
Technical detail
{"type": "edit", ...} accepts reference_document_ids; the resolved storage locations stay server-side and a caller-supplied reference_uris is rejected. {"type": "knowledge"} carries nothing but id and type.Technical detail
Technical detail
{"kind": "deterministic", "check": {"type": "expression", "expression": "abs(sum(data.lines.map(l, l.amount)) - num(data.total)) <= 1.0"}}. Expressions are CEL with the root variable data and the helpers num(), sum() and abs(). Anything that is not a boolean answer (a missing field, a division by zero) is inconclusive. An unparsable expression answers 400 on every write path, naming the rule and node..csv, .txt, .md, .rst) are free; a PDF reference is parsed once at upload for 25 credits per page. Manual instructions override the reference when both address a field. Uploads go straight to storage, so the size cap is your tier’s cap: 25 MB on Free, 100 MB on paid plans.
[Improved] Edit node: font, output mode, and an Original / Filled viewer
Choose the font and the output mode for a filled form, and compare the original and the filled PDF in the Edit results tab.
[New] Billing for the Edit node and the knowledge index
The Edit node bills 35 credits per page. The knowledge index bills 2 credits per page indexed, and only for pages whose content is new or changed since the last run, so re-running a workflow over a stable corpus costs nothing. See How credits work.
[Fixed] An If/Else after a splitter routes each split independently
Each split of a document is now routed on its own condition result rather than on the first split’s.
[Fixed] Numeric and boolean fields can answer “not present”
A number or boolean field could not report that the document does not contain the value; it now can.
[Improved] Standard parse layout accuracy
Over the past week the standard parse tier stopped merging text across columns and absorbing figures into neighbouring text, resolves partially overlapping blocks, never lets a figure or chart be absorbed into a non-figure container, and keeps the document when the layout refiner fails instead of failing the parse.
[Improved] Studio polish: check cards, field picker, Knowledge node, New workflow button
Validate and If/Else check cards use one grammar and wording. The field picker hides the children of object fields. The Knowledge node renders as a scope band around the graph rather than a wired-in step. A New workflow button sits on the home page.
August 13, 2026
[New + API] Datasets and evaluations over the v3 API You can now build a workflow’s dataset and grade the workflow against it without opening the app: upload a document with optional ground truth into the dataset, launch an evaluation over the whole dataset, and poll it to completion to read its accuracy. Both SDKs gain matching methods, and a workflow-evaluation recipe walks through the loop.Technical detail
Technical detail
POST /v3/workflows/{workflow_id}/dataset/upload/ (multipart, optional ground truth; GT_INVALID and EXTRACT_NODE_UNRESOLVED error codes). POST /v3/workflows/{workflow_id}/evals/ answers 202 with {eval_id, run_number, enqueued_count, failed_count}; version_id is optional and defaults to the current version; an Idempotency-Key replays the original eval instead of launching a second. GET /v3/workflows/{workflow_id}/evals/{eval_id}/ and the keyset-paginated GET /v3/workflows/{workflow_id}/evals/ return status, accuracy, matched, mismatched, ungraded (null while in_progress), file_count and failed_count. Python SDK: upload_to_dataset, launch_eval, get_eval, list_evals, iter_evals.Technical detail
Technical detail
The v2 status enum briefly exposed the backend’s run acknowledgement as a status. Only the documented values are served now.
August 12, 2026
[Improved] Annie is available to every organisation Annie, the workflow assistant, is out of preview. Her replies render markdown fences as formatted prose, and a markdown reply can be copied as raw markdown or as rendered HTML. [Improved] Document packet metadata is bounded before it reaches the model Themetadata you attach to a document packet is inlined into the extraction prompt. That block is now hardened: control characters collapse to spaces, each value is capped at 512 characters, and the whole block at 8,192 characters, keeping as many top-level keys as fit in alphabetical order. A value sourced from metadata is also kept out of the confidence judge, so it cannot inflate a score. The packet still echoes your original JSON back verbatim. See Attaching metadata.
[Fixed] Assistant-created graphs are laid out by topology
A workflow Annie created could open in Studio with its nodes stacked on top of each other. Nodes are now placed by their position in the graph.
[Improved] Honest empty states and accessible names
Empty states across the app say what is actually empty, and interactive controls carry accessible names for screen readers.
[Fixed] Studio: one If/Else check-editor action, no redundant Config tabs
The If/Else check editor had two calls to action that did the same thing and a Config tab that duplicated the card. Both are gone.
August 11, 2026
[New] Confidence threshold as editable presets The confidence threshold slider on the results view is replaced by a combobox of presets you can also type into. [API] Dataset registration honoursIdempotency-Key
Technical detail
Technical detail
Registering a dataset document with the same
Idempotency-Key, or the same file_id, replays the original response instead of creating a duplicate member.August 10, 2026
[New] If/Else and Slack Alert are available to every organisation Both nodes leave preview in Studio: every organisation sees them in the sidebar without a “soon” badge. An Extract step placed after an If/Else branch stays in preview. [New] Results controls in the document view The document view gains an unverified switch that persists between visits, and a verified badge on sub-tables. [New] Upload a consolidated ground-truth manifest Datasets accept a single manifest file carrying the ground truth for many documents, instead of one ground-truth upload per document. [Improved] Validate tabs and mode selector The Validate node’s tabs and its AI / Deterministic selector are polished. [Fixed] The data viewer resets row selection when the sort changes [Fixed] A run fails clearly when no model served the extraction A run whose extraction no model answered used to sit in an ambiguous state. It now fails with that reason.August 7, 2026
[Fixed] Unmeasured confidence is shown, not hidden as perfect The results view’s confidence filter treated a value with no measured confidence as 100 and hid it under any threshold. It now surfaces the value as unmeasured. [Fixed] Extraction robustness with enum fields A multi-select enum field accepts a bare list of selections, enum option names are quoted in the prompt so a value containing spaces or punctuation is matched exactly, and the extractor is asked for the field shape the schema enforces. [Fixed] The Optimizer survives a malformed proposal A malformed, truncated or stringified proposal no longer fails the optimization run, and a round that crashed keeps its candidate inspectable. [Improved] Studio node header The node card header is redesigned; tooltip, PDF viewer and calendar fixes ride along.August 6, 2026
[Fixed] The v3 collections list reports status for the requested workflow versionGET /v3/workflows/{workflow_id}/document-packets/ reported the status of the latest version’s run even when another version was requested.
[Fixed] The performance dashboard counts a run’s pages once
August 5, 2026
[Improved] Default models refreshed The default parse and extract models moved to the current generation across providers, with a failover attempt on every operator. [Fixed] Markdown, CSV and spreadsheet uploads carry evidence anchors Values extracted from a markdown, CSV or spreadsheet upload now link back to the block they came from, like values from a PDF. [Fixed] Annie builds parse-only workflows [Fixed] Studio design-review polish Eight fixes reconcile Studio with its design: spacing, alignment and state colours across the node cards and menus.August 4, 2026
[Improved] The Optimizer explains itself The Optimizer page is redesigned: an explainer banner, an accuracy chart across rounds, a timeline, and a per-iteration detail view with baseline descriptions and an accuracy-delta badge. A crashed round is masked rather than plotted. The Optimizer guide replaces the “Coming soon” card. [Improved] Usage page polish The tier badge is capitalised and the billing button is secondary, so the primary action stands out. [Fixed] The Slack empty state points at the Connectors menuAugust 3, 2026
[New + API] Route and alert on validation outcomes An If/Else node can now branch on the outcome of a Validate rule upstream, and a Slack Alert template can interpolate that outcome. Studio draws the Validate node’s output handle, so edges from Validate to If/Else and Slack Alert are drawable, and the condition picker offers the validation check.Technical detail
Technical detail
The
Check union gains a validation variant keyed on rule_id and status. Slack templates accept ${validation.<rule_id>.<attr>} tokens. Outcomes are evaluated per split, so one partition’s result never leaks into another’s message.
