curl -X GET 'https://api.anyformat.ai/v2/workflows/550e8400-e29b-41d4-a716-446655440000/files/b2c3d4e5-f6a7-8901-bcde-f12345678901/results/' \
-H 'Authorization: Bearer YOUR_API_KEY'
import requests
workflow_id = "550e8400-e29b-41d4-a716-446655440000"
collection_id = "b2c3d4e5-f6a7-8901-bcde-f12345678901"
url = f"https://api.anyformat.ai/v2/workflows/{workflow_id}/files/{collection_id}/results/"
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
print(response.json())
else:
body = response.json()
error_code = body.get("error_code")
if error_code == "PRECONDITION_FAILED":
print("Still processing. Retry later.")
elif error_code in ("EXTRACTION_FAILED", "EXTRACTION_CANCELLED"):
print(f"Terminal: {error_code}. Review the document, retry the upload, or check the AnyFormat dashboard.")
else:
print(f"Error: {body.get('detail')}")
const workflowId = '550e8400-e29b-41d4-a716-446655440000';
const collectionId = 'b2c3d4e5-f6a7-8901-bcde-f12345678901';
const response = await fetch(
`https://api.anyformat.ai/v2/workflows/${workflowId}/files/${collectionId}/results/`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
if (response.status === 200) {
const data = await response.json();
console.log(data);
} else {
const body = await response.json();
if (body.error_code === 'PRECONDITION_FAILED') {
console.log('Still processing. Retry later.');
} else if (body.error_code === 'EXTRACTION_FAILED' || body.error_code === 'EXTRACTION_CANCELLED') {
console.log(`Terminal: ${body.error_code}. Review the document, retry the upload, or check the AnyFormat dashboard.`);
}
}
interface Evidence {
text: string;
page_number: number;
}
interface ExtractedField {
value: string | number | boolean | null;
value_override: string | number | boolean | null;
verification_status: string | null;
confidence: number;
evidence: Evidence[];
}
interface ResultsResponse {
collection_id: string;
verification_url: string;
parse: { markdown: string | null } | null;
extraction: Record<string, ExtractedField> | null;
}
const workflowId = '0686bb97-8c30-70f0-8000-97669e000eb8';
const collectionId = '069dcc2c-e14c-7606-8000-2ee4fb17b4e1';
const response = await fetch(
`https://api.anyformat.ai/v2/workflows/${workflowId}/files/${collectionId}/results/`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
if (response.status === 200) {
const data: ResultsResponse = await response.json();
console.log(data);
} else {
const error = await response.json();
if (error.error_code === 'PRECONDITION_FAILED') {
console.log('Still processing. Retry later.');
} else if (error.error_code === 'EXTRACTION_FAILED' || error.error_code === 'EXTRACTION_CANCELLED') {
throw new Error(`Terminal: ${error.error_code}. Review the document, retry the upload, or check the AnyFormat dashboard.`);
} else {
throw new Error(`API error: ${error.error_code}`);
}
}
{
"collection_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/.../files/...",
"parse": {
"markdown": "<DOCUMENT id=\"1\" page=\"1\">..."
},
"extraction": {
"invoice_number": {
"value": "INV-001",
"value_override": null,
"verification_status": "not_verified",
"confidence": 95.0,
"evidence": [{"text": "Invoice #INV-001", "page_number": 1}]
},
"total_amount": {
"value": 1250.00,
"value_override": null,
"verification_status": "not_verified",
"confidence": 92.0,
"evidence": [{"text": "Total: $1,250.00", "page_number": 1}]
}
}
}
{
"collection_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/.../files/...",
"parse": {
"markdown": "<DOCUMENT id=\"1\" page=\"1\">..."
},
"extraction": null
}
{
"collection_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/.../files/...",
"parse": {
"markdown": "<DOCUMENT id=\"1\" page=\"1\">..."
},
"extraction": null,
"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": "VAT registered",
"kind": "checkbox",
"state": "empty",
"page": 1,
"bbox": {"x0": 0.1, "y0": 0.22, "x1": 0.13, "y1": 0.25},
"value": "true",
"confidence": 88
},
{
"form_field_id": "p1_f2",
"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=..."
}
]
}
{
"error": "Results not yet available",
"detail": "Processing status is 'in_progress'. Results are available when status is 'processed'.",
"error_code": "PRECONDITION_FAILED",
"retryable": true,
"request_id": "a1b2c3d4e5f67890abcdef1234567890"
}
{
"error": "Extraction failed",
"detail": "The extraction job did not complete successfully. Possible next steps: review the document, retry the upload, or open the collection in the AnyFormat dashboard for more context. If contacting support, please include the request_id from this response and the collection_id from the request URL.",
"error_code": "EXTRACTION_FAILED",
"retryable": false,
"request_id": "a1b2c3d4e5f67890abcdef1234567890"
}
{
"error": "Extraction cancelled",
"detail": "The extraction job was cancelled. Possible next steps: review the document, retry the upload, or open the collection in the AnyFormat dashboard. If contacting support, please include the request_id from this response and the collection_id from the request URL.",
"error_code": "EXTRACTION_CANCELLED",
"retryable": false,
"request_id": "a1b2c3d4e5f67890abcdef1234567890"
}
Get File Results
Retrieve processing results for a file, or poll for processing status
curl -X GET 'https://api.anyformat.ai/v2/workflows/550e8400-e29b-41d4-a716-446655440000/files/b2c3d4e5-f6a7-8901-bcde-f12345678901/results/' \
-H 'Authorization: Bearer YOUR_API_KEY'
import requests
workflow_id = "550e8400-e29b-41d4-a716-446655440000"
collection_id = "b2c3d4e5-f6a7-8901-bcde-f12345678901"
url = f"https://api.anyformat.ai/v2/workflows/{workflow_id}/files/{collection_id}/results/"
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
print(response.json())
else:
body = response.json()
error_code = body.get("error_code")
if error_code == "PRECONDITION_FAILED":
print("Still processing. Retry later.")
elif error_code in ("EXTRACTION_FAILED", "EXTRACTION_CANCELLED"):
print(f"Terminal: {error_code}. Review the document, retry the upload, or check the AnyFormat dashboard.")
else:
print(f"Error: {body.get('detail')}")
const workflowId = '550e8400-e29b-41d4-a716-446655440000';
const collectionId = 'b2c3d4e5-f6a7-8901-bcde-f12345678901';
const response = await fetch(
`https://api.anyformat.ai/v2/workflows/${workflowId}/files/${collectionId}/results/`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
if (response.status === 200) {
const data = await response.json();
console.log(data);
} else {
const body = await response.json();
if (body.error_code === 'PRECONDITION_FAILED') {
console.log('Still processing. Retry later.');
} else if (body.error_code === 'EXTRACTION_FAILED' || body.error_code === 'EXTRACTION_CANCELLED') {
console.log(`Terminal: ${body.error_code}. Review the document, retry the upload, or check the AnyFormat dashboard.`);
}
}
interface Evidence {
text: string;
page_number: number;
}
interface ExtractedField {
value: string | number | boolean | null;
value_override: string | number | boolean | null;
verification_status: string | null;
confidence: number;
evidence: Evidence[];
}
interface ResultsResponse {
collection_id: string;
verification_url: string;
parse: { markdown: string | null } | null;
extraction: Record<string, ExtractedField> | null;
}
const workflowId = '0686bb97-8c30-70f0-8000-97669e000eb8';
const collectionId = '069dcc2c-e14c-7606-8000-2ee4fb17b4e1';
const response = await fetch(
`https://api.anyformat.ai/v2/workflows/${workflowId}/files/${collectionId}/results/`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
if (response.status === 200) {
const data: ResultsResponse = await response.json();
console.log(data);
} else {
const error = await response.json();
if (error.error_code === 'PRECONDITION_FAILED') {
console.log('Still processing. Retry later.');
} else if (error.error_code === 'EXTRACTION_FAILED' || error.error_code === 'EXTRACTION_CANCELLED') {
throw new Error(`Terminal: ${error.error_code}. Review the document, retry the upload, or check the AnyFormat dashboard.`);
} else {
throw new Error(`API error: ${error.error_code}`);
}
}
{
"collection_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/.../files/...",
"parse": {
"markdown": "<DOCUMENT id=\"1\" page=\"1\">..."
},
"extraction": {
"invoice_number": {
"value": "INV-001",
"value_override": null,
"verification_status": "not_verified",
"confidence": 95.0,
"evidence": [{"text": "Invoice #INV-001", "page_number": 1}]
},
"total_amount": {
"value": 1250.00,
"value_override": null,
"verification_status": "not_verified",
"confidence": 92.0,
"evidence": [{"text": "Total: $1,250.00", "page_number": 1}]
}
}
}
{
"collection_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/.../files/...",
"parse": {
"markdown": "<DOCUMENT id=\"1\" page=\"1\">..."
},
"extraction": null
}
{
"collection_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/.../files/...",
"parse": {
"markdown": "<DOCUMENT id=\"1\" page=\"1\">..."
},
"extraction": null,
"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": "VAT registered",
"kind": "checkbox",
"state": "empty",
"page": 1,
"bbox": {"x0": 0.1, "y0": 0.22, "x1": 0.13, "y1": 0.25},
"value": "true",
"confidence": 88
},
{
"form_field_id": "p1_f2",
"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=..."
}
]
}
{
"error": "Results not yet available",
"detail": "Processing status is 'in_progress'. Results are available when status is 'processed'.",
"error_code": "PRECONDITION_FAILED",
"retryable": true,
"request_id": "a1b2c3d4e5f67890abcdef1234567890"
}
{
"error": "Extraction failed",
"detail": "The extraction job did not complete successfully. Possible next steps: review the document, retry the upload, or open the collection in the AnyFormat dashboard for more context. If contacting support, please include the request_id from this response and the collection_id from the request URL.",
"error_code": "EXTRACTION_FAILED",
"retryable": false,
"request_id": "a1b2c3d4e5f67890abcdef1234567890"
}
{
"error": "Extraction cancelled",
"detail": "The extraction job was cancelled. Possible next steps: review the document, retry the upload, or open the collection in the AnyFormat dashboard. If contacting support, please include the request_id from this response and the collection_id from the request URL.",
"error_code": "EXTRACTION_CANCELLED",
"retryable": false,
"request_id": "a1b2c3d4e5f67890abcdef1234567890"
}
collection_id in the URL is the id that POST /v2/workflows/{workflow_id}/files/ or POST /v2/workflows/{workflow_id}/run/ returned.
The endpoint returns:
- 200 OK with the results once processing succeeds.
- 412 Precondition Failed while processing is in progress. Retry it.
- 422 Unprocessable Entity once the extraction is terminal, failed or cancelled. Read
error_codeto tell them apart.
| HTTP | error_code | Meaning | Retry the GET? |
|---|---|---|---|
| 200 | none | Results available | No need |
| 412 | PRECONDITION_FAILED | Still processing: pending, queued or in_progress | Yes, with backoff |
| 422 | EXTRACTION_FAILED | The job did not complete successfully | No. Polling never changes the state. Review the document, retry the upload, or open the collection in the AnyFormat dashboard. |
| 422 | EXTRACTION_CANCELLED | The job was cancelled | No. Review the document, retry the upload, or open the collection in the AnyFormat dashboard. |
Polling Example with Backoff
import requests
import time
headers = {"Authorization": "Bearer YOUR_API_KEY"}
workflow_id = "550e8400-e29b-41d4-a716-446655440000"
collection_id = "b2c3d4e5-f6a7-8901-bcde-f12345678901"
max_attempts = 60 # 5 minutes at 5-second base intervals
base_delay = 5
for attempt in range(max_attempts):
response = requests.get(
f"https://api.anyformat.ai/v2/workflows/{workflow_id}/files/{collection_id}/results/",
headers=headers
)
if response.status_code == 200:
results = response.json()
print(results)
break
error_code = response.json().get("error_code") if response.content else None
if error_code == "PRECONDITION_FAILED":
# Still processing, which usually takes 10-60 seconds
delay = min(base_delay * (1.5 ** min(attempt, 5)), 30)
time.sleep(delay)
elif error_code in ("EXTRACTION_FAILED", "EXTRACTION_CANCELLED"):
# Terminal. Polling never changes this. Review the document, retry the upload, or check the AnyFormat dashboard.
print(f"Extraction terminal: {error_code}")
break
elif response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 10))
time.sleep(retry_after)
else:
print(f"Error: {response.json().get('detail')}")
break
else:
print("Polling timed out. Use webhooks in production.")
Validation Verdicts (extractions[].validations[])
A workflow with a Validate node returns its verdicts inside each extractions[] entry, beside the fields the rules judged. Each entry covers one rule and carries rule_id, severity, status, detail, and the compared_values the rule looked at. status is pass, fail or inconclusive. In a split workflow, every subdocument carries its own verdicts. The key is always present, and is [] when the workflow has no validate node. Response Formats documents it field by field.
Filled Forms (edits[])
A workflow with an Edit node also returns edits[], one entry per file the node processed. Each entry carries 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. Response Formats documents it field by field.
fields[].confidence is a raw, uncalibrated 0-100 match score for pairing a filling instruction with a field. It grades how surely the instruction addresses that field, not whether the written value is correct, and it is not a probability. A field with state: "prefilled" is never overwritten, so it always reads back with value: null and confidence: null.
download_url is a presigned link, valid for 15 minutes from the moment the API built the response. Every read of this endpoint mints a fresh one. Download the PDF on receipt, or re-read the endpoint for a new link. Never store the URL.curl -X GET 'https://api.anyformat.ai/v2/workflows/550e8400-e29b-41d4-a716-446655440000/files/b2c3d4e5-f6a7-8901-bcde-f12345678901/results/' \
-H 'Authorization: Bearer YOUR_API_KEY'
import requests
workflow_id = "550e8400-e29b-41d4-a716-446655440000"
collection_id = "b2c3d4e5-f6a7-8901-bcde-f12345678901"
url = f"https://api.anyformat.ai/v2/workflows/{workflow_id}/files/{collection_id}/results/"
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
print(response.json())
else:
body = response.json()
error_code = body.get("error_code")
if error_code == "PRECONDITION_FAILED":
print("Still processing. Retry later.")
elif error_code in ("EXTRACTION_FAILED", "EXTRACTION_CANCELLED"):
print(f"Terminal: {error_code}. Review the document, retry the upload, or check the AnyFormat dashboard.")
else:
print(f"Error: {body.get('detail')}")
const workflowId = '550e8400-e29b-41d4-a716-446655440000';
const collectionId = 'b2c3d4e5-f6a7-8901-bcde-f12345678901';
const response = await fetch(
`https://api.anyformat.ai/v2/workflows/${workflowId}/files/${collectionId}/results/`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
if (response.status === 200) {
const data = await response.json();
console.log(data);
} else {
const body = await response.json();
if (body.error_code === 'PRECONDITION_FAILED') {
console.log('Still processing. Retry later.');
} else if (body.error_code === 'EXTRACTION_FAILED' || body.error_code === 'EXTRACTION_CANCELLED') {
console.log(`Terminal: ${body.error_code}. Review the document, retry the upload, or check the AnyFormat dashboard.`);
}
}
interface Evidence {
text: string;
page_number: number;
}
interface ExtractedField {
value: string | number | boolean | null;
value_override: string | number | boolean | null;
verification_status: string | null;
confidence: number;
evidence: Evidence[];
}
interface ResultsResponse {
collection_id: string;
verification_url: string;
parse: { markdown: string | null } | null;
extraction: Record<string, ExtractedField> | null;
}
const workflowId = '0686bb97-8c30-70f0-8000-97669e000eb8';
const collectionId = '069dcc2c-e14c-7606-8000-2ee4fb17b4e1';
const response = await fetch(
`https://api.anyformat.ai/v2/workflows/${workflowId}/files/${collectionId}/results/`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
if (response.status === 200) {
const data: ResultsResponse = await response.json();
console.log(data);
} else {
const error = await response.json();
if (error.error_code === 'PRECONDITION_FAILED') {
console.log('Still processing. Retry later.');
} else if (error.error_code === 'EXTRACTION_FAILED' || error.error_code === 'EXTRACTION_CANCELLED') {
throw new Error(`Terminal: ${error.error_code}. Review the document, retry the upload, or check the AnyFormat dashboard.`);
} else {
throw new Error(`API error: ${error.error_code}`);
}
}
{
"collection_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/.../files/...",
"parse": {
"markdown": "<DOCUMENT id=\"1\" page=\"1\">..."
},
"extraction": {
"invoice_number": {
"value": "INV-001",
"value_override": null,
"verification_status": "not_verified",
"confidence": 95.0,
"evidence": [{"text": "Invoice #INV-001", "page_number": 1}]
},
"total_amount": {
"value": 1250.00,
"value_override": null,
"verification_status": "not_verified",
"confidence": 92.0,
"evidence": [{"text": "Total: $1,250.00", "page_number": 1}]
}
}
}
{
"collection_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/.../files/...",
"parse": {
"markdown": "<DOCUMENT id=\"1\" page=\"1\">..."
},
"extraction": null
}
{
"collection_id": "069dcc2c-e14c-7606-8000-2ee4fb17b4e1",
"verification_url": "https://app.anyformat.ai/workflows/.../files/...",
"parse": {
"markdown": "<DOCUMENT id=\"1\" page=\"1\">..."
},
"extraction": null,
"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": "VAT registered",
"kind": "checkbox",
"state": "empty",
"page": 1,
"bbox": {"x0": 0.1, "y0": 0.22, "x1": 0.13, "y1": 0.25},
"value": "true",
"confidence": 88
},
{
"form_field_id": "p1_f2",
"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=..."
}
]
}
{
"error": "Results not yet available",
"detail": "Processing status is 'in_progress'. Results are available when status is 'processed'.",
"error_code": "PRECONDITION_FAILED",
"retryable": true,
"request_id": "a1b2c3d4e5f67890abcdef1234567890"
}
{
"error": "Extraction failed",
"detail": "The extraction job did not complete successfully. Possible next steps: review the document, retry the upload, or open the collection in the AnyFormat dashboard for more context. If contacting support, please include the request_id from this response and the collection_id from the request URL.",
"error_code": "EXTRACTION_FAILED",
"retryable": false,
"request_id": "a1b2c3d4e5f67890abcdef1234567890"
}
{
"error": "Extraction cancelled",
"detail": "The extraction job was cancelled. Possible next steps: review the document, retry the upload, or open the collection in the AnyFormat dashboard. If contacting support, please include the request_id from this response and the collection_id from the request URL.",
"error_code": "EXTRACTION_CANCELLED",
"retryable": false,
"request_id": "a1b2c3d4e5f67890abcdef1234567890"
}
extraction and parse keys are always present in a success response. Each is explicitly null when its node did not run. See Response Formats for the canonical shape, documented field by field.Authorizations
API key issued from app.anyformat.ai/api-key. Send as Authorization: Bearer <key>.
Response
Successful Response
Canonical response shape for the file-collection results endpoint.
Returned with HTTP 200 once processing completes. Returns 412 while processing is in progress; poll until 200, or use webhooks.
The file collection's UUID. Same value as the id returned by POST /v2/workflows/{wid}/run/. Also emitted as document_packet_id — same value, v3 canonical name.
The document packet's UUID — v3 canonical name for collection_id. Same value; both fields are always present.
Link to the AnyFormat dashboard for human review of this collection's results. null if the dashboard URL cannot be constructed (e.g. no files in the collection, or the deployment has no frontend URL configured).
Parse-node output (rendered markdown). null when the workflow has no parse node. Always present in the response.
Show child attributes
Show child attributes
Per-classifier-node verdicts. Empty when the workflow has no classifier.
Show child attributes
Show child attributes
Splitter output: category-level geometry with optional partitions. Empty when the workflow has no splitter.
Show child attributes
Show child attributes
Flat list of extraction datapoints. Linear workflows produce one entry with split_name=null and partition=null. Split workflows produce one entry per (split, partition). Empty when no extraction has run yet.
Show child attributes
Show child attributes
Filled-form output, one entry per file an edit node processed. Empty when the workflow has no edit node.
Show child attributes
Show child attributes
Deprecated — use extractions instead. Extracted fields keyed by field name, populated only for linear workflows (single extract node, no splitter). null for split workflows; read extractions[] instead.
Show child attributes
Show child attributes

