POST /v3/workflows/{workflow_id}/upload/run/, which uploads and runs in one call. You can also upload a packet first and run it separately. anyformat creates a document packet to hold the document, walks the workflow graph, and writes structured results.
Run lifecycle
Every run moves through a sequence of statuses:
A run only exists once it is triggered, so runs start at
queued. Before that, the document packet carries status: not_started.
Read a run with GET /v3/runs/{run_id}/. It always returns 200 OK with the status above; results is null until the run is processed, then the results envelope arrives inline on the same read. Poll until the status is terminal, then stop.
A processed run looks like this (parse.blocks shortened to one block; field values are strings on the wire):
What the results contain
A run produces one output section per node type that ran. The results envelope has a fixed shape — sections corresponding to nodes you didn’t include come back empty (null or []), so client code can read every key unconditionally.
Each extracted field carries a
value, an optional human-supplied value_override, a confidence score (0–100), a verification_status, and an evidence array (source-text snippets + page numbers). See Get run for the full envelope. Read value_override when it is set, and value otherwise.
What the SDKs give you back — both the TypeScript and Python SDKs return a
Result from Run.wait(). For linear parse → extract workflows the scalar values are right there: result.fields["name"].value (Python) or result.field("name")?.value (TypeScript). The full envelope — parse markdown, classifications, splits, multi-extraction entries — lives at result.raw in both languages, with Python additionally exposing a typed result.parse view. Expect more typed accessors as the underlying atomic operations stabilise.Filled forms
An Edit node produces a document rather than data, so its output lands in its own section:edits[], one entry per file the node processed. A collection of five blank forms comes back as five entries.
Each entry records which fields were found and what was written into them:
fields: every form field detected, filled or not, in document order. A field carries its printedlabel, itskind(textorcheckbox), thepageandbboxit occupies, and thevaluewritten into it. Fields the document already carried a value for come back asstate: "prefilled"; they are never overwritten, so they always read back withvalue: null.unmatched_instructions: the instruction fragments, quoted verbatim, that the linker matched to no field in this document. It covers instructions that found no field, not every reason a value can be missing from the rendered PDF, so treat the filled document itself as the final word.download_url: a temporary link to the filled PDF.
Confidence and evidence
Two signals that travel with most outputs.Confidence
A 0–100 score indicating how certain anyformat is about a value.- For
parse: two document-level scores —parse_confidence(0–100) for how confident anyformat is in the text it read, andlayout_confidence(0–1) for how confident it is in the page layout it detected — plus the same pair on every entry ofblocks[]. (Technically:parse_confidencecomes from the language model’s token log-probabilities, andlayout_confidencefrom the YOLO layout-segmentation model.) - For
extractions: a per-field score on each extracted value. - For
classifications: a per-verdict score. - For
edits: a per-field score with a different meaning from the rest. It grades how surely a filling instruction addressed that field, not whether the value written in is correct. It is raw and uncalibrated, and it is not a probability - treat it as a ranking signal for review, not as a quality score for the filled document.
Evidence
An array of metadata objects showing where a value came from. It’s an array because some values are inferred across multiple spans rather than copied from a single place. Each evidence object has:- The snippet of text the value was derived from
- The page number in the document
metadata rather than from the document, evidence[0].text is metadata.<key> (e.g. metadata.customer_reference). Client code can key on this prefix to render metadata provenance differently — or to route the value to a “verified upstream” path — instead of trying to plot a page number that doesn’t exist.
What’s next?
Outputs
Export formats for results — CSV, Excel, JSON, Markdown
Upload and run
Upload a document and start a run in one call
Get a run
The flat read that returns a run with its results inline
Document packets
The unit a workflow runs on

