curl -X GET 'https://api.anyformat.ai/v3/runs/069dcc2c-e14c-7606-8000-2ee4fb17b4f9/' \
-H 'Authorization: Bearer YOUR_API_KEY'
import requests
import time
run_id = "069dcc2c-e14c-7606-8000-2ee4fb17b4f9"
url = f"https://api.anyformat.ai/v3/runs/{run_id}/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
for _ in range(100):
run = requests.get(url, headers=headers).json()
if run["status"] == "processed":
print(run["results"])
break
if run["status"] in ("error", "cancelled"):
print(f"Terminal: {run['status']}")
break
time.sleep(3)
interface RunDetail {
id: string;
workflow_id: string;
document_packet_id: string;
status: 'queued' | 'in_progress' | 'processed' | 'error' | 'cancelled';
created_at: string | null;
updated_at: string | null;
results: Record<string, unknown> | null;
}
const runId = '069dcc2c-e14c-7606-8000-2ee4fb17b4f9';
const response = await fetch(`https://api.anyformat.ai/v3/runs/${runId}/`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
const run: RunDetail = await response.json();
if (run.status === 'processed') {
console.log(run.results);
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "processed",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:02:30.000Z",
"results": {
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/0686bb97-8c30-70f0-8000-97669e000eb8/files/069dcc2c-e14c-7606-8000-2ee4fb17b4e3?versionId=FGaV4I2JAA",
"parse": {
"markdown": "<a id=\"p1_b0\"></a>\n\n# INVOICE\n\n<a id=\"p1_b1\"></a>\n\nInvoice #: INV-001 \nIssue date: 2026-02-20\n\n<a id=\"p1_b5\"></a>\n\n<table>...</table>",
"text": "# INVOICE\n\nInvoice #: INV-001 ...",
"parse_confidence": 90.6,
"layout_confidence": 0.7,
"blocks": [
{
"id": "p1_b1",
"type": "text",
"page": 1,
"bbox": { "x0": 0.114, "y0": 0.132, "x1": 0.322, "y1": 0.210 },
"parse_confidence": 96.5,
"layout_confidence": 0.96,
"content": "Invoice #: INV-001 \nIssue date: 2026-02-20",
"hyperlinks": [],
"rows": null,
"image_base64": null
}
]
},
"classifications": [],
"splits": [],
"extractions": [
{
"split_name": null,
"partition": null,
"fields": {
"invoice_number": {
"value": "INV-001",
"value_override": null,
"verification_status": "not_verified",
"confidence": 95.0,
"evidence": [{ "text": "Invoice #INV-001", "page_number": 1 }]
}
}
}
],
"edits": []
}
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "processed",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:02:30.000Z",
"results": {
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/0686bb97-8c30-70f0-8000-97669e000eb8/files/069dcc2c-e14c-7606-8000-2ee4fb17b4e3?versionId=FGaV4I2JAA",
"parse": {
"markdown": "<a id=\"p1_b0\"></a>\n\n# INVOICE\n\n<a id=\"p1_b1\"></a>\n\nInvoice #: ONB-001 \nIssue date: 2026-02-20\n\n<a id=\"p1_b5\"></a>\n\n<table>...</table>",
"text": "# INVOICE\n\nInvoice #: ONB-001 ...",
"parse_confidence": 90.6,
"layout_confidence": 0.7,
"blocks": [
{
"id": "p1_b1",
"type": "text",
"page": 1,
"bbox": { "x0": 0.114, "y0": 0.132, "x1": 0.322, "y1": 0.210 },
"parse_confidence": 96.5,
"layout_confidence": 0.96,
"content": "Invoice #: ONB-001 \nIssue date: 2026-02-20",
"hyperlinks": [],
"rows": null,
"image_base64": null
}
]
},
"classifications": [],
"splits": [],
"extractions": [],
"edits": [
{
"file_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e3",
"file_name": "onboarding-form.pdf",
"fields": [
{
"form_field_id": "p1_f0",
"label": "Full name",
"kind": "text",
"state": "empty",
"page": 1,
"bbox": { "x0": 0.1, "y0": 0.1, "x1": 0.5, "y1": 0.16 },
"value": "ACME SL",
"confidence": 95
},
{
"form_field_id": "p1_f1",
"label": "Form reference",
"kind": "text",
"state": "prefilled",
"page": 1,
"bbox": { "x0": 0.6, "y0": 0.1, "x1": 0.9, "y1": 0.16 },
"value": null,
"confidence": null
}
],
"unmatched_instructions": [],
"download_url": "https://storage.anyformat.ai/filled/onboarding-form.pdf?X-Amz-Signature=..."
}
]
}
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "in_progress",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:00:15.000Z",
"results": null
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "error",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:02:30.000Z",
"results": null
}
Get Run
Fetch a single run flat: lifecycle status plus the results envelope inline
curl -X GET 'https://api.anyformat.ai/v3/runs/069dcc2c-e14c-7606-8000-2ee4fb17b4f9/' \
-H 'Authorization: Bearer YOUR_API_KEY'
import requests
import time
run_id = "069dcc2c-e14c-7606-8000-2ee4fb17b4f9"
url = f"https://api.anyformat.ai/v3/runs/{run_id}/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
for _ in range(100):
run = requests.get(url, headers=headers).json()
if run["status"] == "processed":
print(run["results"])
break
if run["status"] in ("error", "cancelled"):
print(f"Terminal: {run['status']}")
break
time.sleep(3)
interface RunDetail {
id: string;
workflow_id: string;
document_packet_id: string;
status: 'queued' | 'in_progress' | 'processed' | 'error' | 'cancelled';
created_at: string | null;
updated_at: string | null;
results: Record<string, unknown> | null;
}
const runId = '069dcc2c-e14c-7606-8000-2ee4fb17b4f9';
const response = await fetch(`https://api.anyformat.ai/v3/runs/${runId}/`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
const run: RunDetail = await response.json();
if (run.status === 'processed') {
console.log(run.results);
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "processed",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:02:30.000Z",
"results": {
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/0686bb97-8c30-70f0-8000-97669e000eb8/files/069dcc2c-e14c-7606-8000-2ee4fb17b4e3?versionId=FGaV4I2JAA",
"parse": {
"markdown": "<a id=\"p1_b0\"></a>\n\n# INVOICE\n\n<a id=\"p1_b1\"></a>\n\nInvoice #: INV-001 \nIssue date: 2026-02-20\n\n<a id=\"p1_b5\"></a>\n\n<table>...</table>",
"text": "# INVOICE\n\nInvoice #: INV-001 ...",
"parse_confidence": 90.6,
"layout_confidence": 0.7,
"blocks": [
{
"id": "p1_b1",
"type": "text",
"page": 1,
"bbox": { "x0": 0.114, "y0": 0.132, "x1": 0.322, "y1": 0.210 },
"parse_confidence": 96.5,
"layout_confidence": 0.96,
"content": "Invoice #: INV-001 \nIssue date: 2026-02-20",
"hyperlinks": [],
"rows": null,
"image_base64": null
}
]
},
"classifications": [],
"splits": [],
"extractions": [
{
"split_name": null,
"partition": null,
"fields": {
"invoice_number": {
"value": "INV-001",
"value_override": null,
"verification_status": "not_verified",
"confidence": 95.0,
"evidence": [{ "text": "Invoice #INV-001", "page_number": 1 }]
}
}
}
],
"edits": []
}
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "processed",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:02:30.000Z",
"results": {
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/0686bb97-8c30-70f0-8000-97669e000eb8/files/069dcc2c-e14c-7606-8000-2ee4fb17b4e3?versionId=FGaV4I2JAA",
"parse": {
"markdown": "<a id=\"p1_b0\"></a>\n\n# INVOICE\n\n<a id=\"p1_b1\"></a>\n\nInvoice #: ONB-001 \nIssue date: 2026-02-20\n\n<a id=\"p1_b5\"></a>\n\n<table>...</table>",
"text": "# INVOICE\n\nInvoice #: ONB-001 ...",
"parse_confidence": 90.6,
"layout_confidence": 0.7,
"blocks": [
{
"id": "p1_b1",
"type": "text",
"page": 1,
"bbox": { "x0": 0.114, "y0": 0.132, "x1": 0.322, "y1": 0.210 },
"parse_confidence": 96.5,
"layout_confidence": 0.96,
"content": "Invoice #: ONB-001 \nIssue date: 2026-02-20",
"hyperlinks": [],
"rows": null,
"image_base64": null
}
]
},
"classifications": [],
"splits": [],
"extractions": [],
"edits": [
{
"file_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e3",
"file_name": "onboarding-form.pdf",
"fields": [
{
"form_field_id": "p1_f0",
"label": "Full name",
"kind": "text",
"state": "empty",
"page": 1,
"bbox": { "x0": 0.1, "y0": 0.1, "x1": 0.5, "y1": 0.16 },
"value": "ACME SL",
"confidence": 95
},
{
"form_field_id": "p1_f1",
"label": "Form reference",
"kind": "text",
"state": "prefilled",
"page": 1,
"bbox": { "x0": 0.6, "y0": 0.1, "x1": 0.9, "y1": 0.16 },
"value": null,
"confidence": null
}
],
"unmatched_instructions": [],
"download_url": "https://storage.anyformat.ai/filled/onboarding-form.pdf?X-Amz-Signature=..."
}
]
}
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "in_progress",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:00:15.000Z",
"results": null
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "error",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:02:30.000Z",
"results": null
}
run_id. The path is flat: no workflow id, and no /results/ sub-path. The response carries the run’s status and its results envelope together, so reading a completed run costs one round-trip.
Status model
The endpoint always returns200 while the run exists. An extraction in flight raises no precondition error.
status | Meaning | results |
|---|---|---|
queued | Waiting for a processing slot | null |
in_progress | Extraction actively running | null |
processed | Terminal. The extraction succeeded | the results envelope |
error | Terminal. The extraction failed | null |
cancelled | Terminal. The extraction was cancelled | null |
status is terminal. A run that ended in error or cancelled stays readable with results: null.
The results envelope carries the parse, classifications, splits, extractions and edits sections. Each extractions entry carries its own validations[]. This is the same envelope v2 returned from its /results/ route: only the read path changed. See Runs & results for what each section holds.
Parse documents the parse section. The samples below shorten blocks[] to one block. Field values in extractions[] are strings on the wire.
An unknown id returns 404, as does a run belonging to another organization.
Extracted fields
Each entry inextractions[].fields maps a field name to its extracted value:
| Field | Type | Description |
|---|---|---|
value | string | null | The extracted value, always as a string. A field declared integer returns "3", not 3. The data_type governs how the field is extracted and validated, not the JSON type you get back, so parse the string yourself. A document may write a number as 1.026,00. It is null when the extraction found no value. |
value_override | string | null | Human-supplied override of the extracted value, set during verification. It is null when no override exists. To pick the most-trusted value, test explicitly for null, as the reading pattern below does. Never use an or or ?? truthy fallback: a legitimate override of "" is falsy and would be discarded. |
verification_status | string | null | Review state for this datapoint: not_verified by default, human_verified once a reviewer confirmed it, or human_edited once a reviewer corrected it. It is null before review. |
confidence | number | null | Model confidence on a 0–100 scale. Higher means more certain. It is null when no model produced the value, as with a manual entry. |
evidence | array | Source-text snippets the model used to derive this value. May be empty. |
value_source | string | Smart-lookup fields only: document or lookup, where the value came from. Omitted for other fields. |
lookup_check | string | Smart-lookup fields only: confirmed when the lookup agreed with the document value, conflict when it disagreed and the document value was kept. Omitted when no lookup compared the two. |
consolidation | object | Present only when a long document’s parts gave answers that could not be combined. value is then null. See below. |
evidence entries
| Field | Type | Description |
|---|---|---|
text | string | The exact source-text snippet that supports the extracted value. |
page_number | integer | 1-indexed page number where the snippet was found. |
consolidation
A long document is extracted in parts. When the parts give answers for a field that cannot be combined, the field gets no value, and consolidation lists each answer so you can check the document and enter the right one.
| Field | Type | Description |
|---|---|---|
status | string | Always unresolved. |
candidates | array | One entry per answer: value, value_unit (or null), and evidence (the snippets that part cited, possibly empty). |
Filled forms (edits[])
A workflow with an Edit node fills the blank form it was given and returns edits[] alongside the other sections. edits[] holds one entry per file the node processed. Each entry lists every form field detected in the document, the value written into it, and a link to the filled PDF. The key is always present, and is [] when the workflow has no edit node.
| Field | Meaning |
|---|---|
download_url | Presigned link to the filled PDF, valid for 15 minutes from the moment the API built the response. Every read mints a fresh link, so re-request the run rather than storing the URL. It is null when the run stored no filled PDF. |
fields[].value | The value written into the field, or the literal string true or false for a checkbox. It is null when no instruction addressed the field. Every state: "prefilled" field is null, because the node never overwrites one. |
fields[].confidence | A raw, uncalibrated 0-100 match score for pairing an instruction with the field. It grades how surely the instruction addresses the field, not whether the written value is correct, and it is not a probability. |
unmatched_instructions | Instruction fragments, quoted verbatim, that matched no field in this document. |
curl -X GET 'https://api.anyformat.ai/v3/runs/069dcc2c-e14c-7606-8000-2ee4fb17b4f9/' \
-H 'Authorization: Bearer YOUR_API_KEY'
import requests
import time
run_id = "069dcc2c-e14c-7606-8000-2ee4fb17b4f9"
url = f"https://api.anyformat.ai/v3/runs/{run_id}/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
for _ in range(100):
run = requests.get(url, headers=headers).json()
if run["status"] == "processed":
print(run["results"])
break
if run["status"] in ("error", "cancelled"):
print(f"Terminal: {run['status']}")
break
time.sleep(3)
interface RunDetail {
id: string;
workflow_id: string;
document_packet_id: string;
status: 'queued' | 'in_progress' | 'processed' | 'error' | 'cancelled';
created_at: string | null;
updated_at: string | null;
results: Record<string, unknown> | null;
}
const runId = '069dcc2c-e14c-7606-8000-2ee4fb17b4f9';
const response = await fetch(`https://api.anyformat.ai/v3/runs/${runId}/`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
const run: RunDetail = await response.json();
if (run.status === 'processed') {
console.log(run.results);
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "processed",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:02:30.000Z",
"results": {
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/0686bb97-8c30-70f0-8000-97669e000eb8/files/069dcc2c-e14c-7606-8000-2ee4fb17b4e3?versionId=FGaV4I2JAA",
"parse": {
"markdown": "<a id=\"p1_b0\"></a>\n\n# INVOICE\n\n<a id=\"p1_b1\"></a>\n\nInvoice #: INV-001 \nIssue date: 2026-02-20\n\n<a id=\"p1_b5\"></a>\n\n<table>...</table>",
"text": "# INVOICE\n\nInvoice #: INV-001 ...",
"parse_confidence": 90.6,
"layout_confidence": 0.7,
"blocks": [
{
"id": "p1_b1",
"type": "text",
"page": 1,
"bbox": { "x0": 0.114, "y0": 0.132, "x1": 0.322, "y1": 0.210 },
"parse_confidence": 96.5,
"layout_confidence": 0.96,
"content": "Invoice #: INV-001 \nIssue date: 2026-02-20",
"hyperlinks": [],
"rows": null,
"image_base64": null
}
]
},
"classifications": [],
"splits": [],
"extractions": [
{
"split_name": null,
"partition": null,
"fields": {
"invoice_number": {
"value": "INV-001",
"value_override": null,
"verification_status": "not_verified",
"confidence": 95.0,
"evidence": [{ "text": "Invoice #INV-001", "page_number": 1 }]
}
}
}
],
"edits": []
}
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "processed",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:02:30.000Z",
"results": {
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/0686bb97-8c30-70f0-8000-97669e000eb8/files/069dcc2c-e14c-7606-8000-2ee4fb17b4e3?versionId=FGaV4I2JAA",
"parse": {
"markdown": "<a id=\"p1_b0\"></a>\n\n# INVOICE\n\n<a id=\"p1_b1\"></a>\n\nInvoice #: ONB-001 \nIssue date: 2026-02-20\n\n<a id=\"p1_b5\"></a>\n\n<table>...</table>",
"text": "# INVOICE\n\nInvoice #: ONB-001 ...",
"parse_confidence": 90.6,
"layout_confidence": 0.7,
"blocks": [
{
"id": "p1_b1",
"type": "text",
"page": 1,
"bbox": { "x0": 0.114, "y0": 0.132, "x1": 0.322, "y1": 0.210 },
"parse_confidence": 96.5,
"layout_confidence": 0.96,
"content": "Invoice #: ONB-001 \nIssue date: 2026-02-20",
"hyperlinks": [],
"rows": null,
"image_base64": null
}
]
},
"classifications": [],
"splits": [],
"extractions": [],
"edits": [
{
"file_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e3",
"file_name": "onboarding-form.pdf",
"fields": [
{
"form_field_id": "p1_f0",
"label": "Full name",
"kind": "text",
"state": "empty",
"page": 1,
"bbox": { "x0": 0.1, "y0": 0.1, "x1": 0.5, "y1": 0.16 },
"value": "ACME SL",
"confidence": 95
},
{
"form_field_id": "p1_f1",
"label": "Form reference",
"kind": "text",
"state": "prefilled",
"page": 1,
"bbox": { "x0": 0.6, "y0": 0.1, "x1": 0.9, "y1": 0.16 },
"value": null,
"confidence": null
}
],
"unmatched_instructions": [],
"download_url": "https://storage.anyformat.ai/filled/onboarding-form.pdf?X-Amz-Signature=..."
}
]
}
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "in_progress",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:00:15.000Z",
"results": null
}
{
"id": "069dcc2c-e14c-7606-8000-2ee4fb17b4f9",
"workflow_id": "0686bb97-8c30-70f0-8000-97669e000eb8",
"document_packet_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"status": "error",
"created_at": "2026-07-01T12:00:00.000Z",
"updated_at": "2026-07-01T12:02:30.000Z",
"results": null
}
Authorizations
API key issued from app.anyformat.ai/api-key. Send as Authorization: Bearer <key>.
Path Parameters
Response
Successful Response
Flat single-run read: lifecycle status plus results inline.
results is null until the run reaches processed, then carries the
results envelope — no separate results endpoint, no 412 while in flight.
Unique identifier of the run (hyphenated UUID).
"069dcc2c-e14c-7606-8000-2ee4fb17b4f9"
The workflow this run executed (hyphenated UUID).
"0686bb97-8c30-70f0-8000-97669e000eb8"
The document packet the run executed on (hyphenated UUID).
"069dcc2c-e14c-7606-8000-2ee4fb17b4e1"
Execution status. Non-terminal: queued, in_progress. Terminal: processed (success), error, cancelled.
queued, in_progress, processed, error, cancelled "processed"
Timestamp when the run was triggered (ISO 8601).
Timestamp of the run's last status change (ISO 8601).
Extraction results envelope; null until status is processed.
Show child attributes
Show child attributes

