Skip to main content
GET
/
v3
/
workflows
/
{workflow_id}
/
curl -X GET 'https://api.anyformat.ai/v3/workflows/0686bb97-8c30-70f0-8000-97669e000eb8/' \
  -H 'Authorization: Bearer YOUR_API_KEY'
import requests

workflow_id = "0686bb97-8c30-70f0-8000-97669e000eb8"
url = f"https://api.anyformat.ai/v3/workflows/{workflow_id}/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}

workflow = requests.get(url, headers=headers).json()
for node in workflow["nodes"]:
    print(node["id"], node["type"])
{
  "id": "0686bb97-8c30-70f0-8000-97669e000eb8",
  "name": "Invoice Processing",
  "description": "Extract data from invoice documents",
  "created_at": "2026-07-01T12:00:00.000Z",
  "updated_at": "2026-07-01T12:00:00.000Z",
  "nodes": [
    {
      "id": "parse_1",
      "type": "parse",
      "mode": "standard",
      "prompt_hint": null,
      "figure_enhancement": false,
      "cache": true,
      "effort": "mid",
      "ocr_effort": "high",
      "region": "eu",
      "skip_routing_review": true,
      "figures": false,
      "text_formatting": false,
      "routing_effort": null
    },
    {
      "id": "extract_1",
      "type": "extract",
      "mode": "standard",
      "extraction_schema": {
        "fields": [
          {
            "name": "invoice_number",
            "description": "The unique invoice identifier",
            "data_type": "string",
            "persistent_id": "8f14e45f-ceea-467f-a34e-9b6e2f7d3c1a"
          },
          {
            "name": "total_amount",
            "description": "Total invoice amount including tax",
            "data_type": "float",
            "persistent_id": "45c48cce-2e2d-4fbd-aa47-1a8a5d8f6b2b"
          }
        ]
      },
      "lookup_files": [],
      "lookup_suggestion": null,
      "lookup_reasoning_effort": null,
      "lookup_file_uploads": [],
      "lookup_schema": [],
      "use_images": false,
      "row_extractor_enabled": false,
      "page_sum_verification_enabled": false
    }
  ],
  "edges": [
    { "source": "parse_1", "target": "extract_1" }
  ]
}
Rate limit tier: general (600 req/min) — see Rate limits. Retrieves a workflow with its complete typed graph inline. The {name, description, nodes, edges} subset is the exact shape POST /v3/workflows/ accepts — strip the read-only id, created_at, and updated_at (unknown fields are rejected with 422) and feed the remainder to PATCH /v3/workflows/{workflow_id}/; its Python example shows the one-liner. Every field in an extract node carries its server-assigned persistent_id — the stable identity that survives renames. Echo it unchanged when you PATCH to keep analytics, ground truth, and quality metrics attached to the field (see the migration guide).
There is no separate /definition/ endpoint in v3 — the workflow read is the round-trippable definition.
curl -X GET 'https://api.anyformat.ai/v3/workflows/0686bb97-8c30-70f0-8000-97669e000eb8/' \
  -H 'Authorization: Bearer YOUR_API_KEY'
import requests

workflow_id = "0686bb97-8c30-70f0-8000-97669e000eb8"
url = f"https://api.anyformat.ai/v3/workflows/{workflow_id}/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}

workflow = requests.get(url, headers=headers).json()
for node in workflow["nodes"]:
    print(node["id"], node["type"])
{
  "id": "0686bb97-8c30-70f0-8000-97669e000eb8",
  "name": "Invoice Processing",
  "description": "Extract data from invoice documents",
  "created_at": "2026-07-01T12:00:00.000Z",
  "updated_at": "2026-07-01T12:00:00.000Z",
  "nodes": [
    {
      "id": "parse_1",
      "type": "parse",
      "mode": "standard",
      "prompt_hint": null,
      "figure_enhancement": false,
      "cache": true,
      "effort": "mid",
      "ocr_effort": "high",
      "region": "eu",
      "skip_routing_review": true,
      "figures": false,
      "text_formatting": false,
      "routing_effort": null
    },
    {
      "id": "extract_1",
      "type": "extract",
      "mode": "standard",
      "extraction_schema": {
        "fields": [
          {
            "name": "invoice_number",
            "description": "The unique invoice identifier",
            "data_type": "string",
            "persistent_id": "8f14e45f-ceea-467f-a34e-9b6e2f7d3c1a"
          },
          {
            "name": "total_amount",
            "description": "Total invoice amount including tax",
            "data_type": "float",
            "persistent_id": "45c48cce-2e2d-4fbd-aa47-1a8a5d8f6b2b"
          }
        ]
      },
      "lookup_files": [],
      "lookup_suggestion": null,
      "lookup_reasoning_effort": null,
      "lookup_file_uploads": [],
      "lookup_schema": [],
      "use_images": false,
      "row_extractor_enabled": false,
      "page_sum_verification_enabled": false
    }
  ],
  "edges": [
    { "source": "parse_1", "target": "extract_1" }
  ]
}

Authorizations

Authorization
string
header
required

API key issued from app.anyformat.ai/api-key. Send as Authorization: Bearer <key>.

Path Parameters

workflow_id
string
required

Response

Successful Response

A workflow with its complete typed graph inline.

{name, description, nodes, edges} is the exact shape POST /v3/workflows/ accepts — mutate it and feed it back to edit.

id
string
required

Unique identifier of the workflow (hyphenated UUID).

Example:

"0686bb97-8c30-70f0-8000-97669e000eb8"

name
string
required

Human-readable name of the workflow.

Example:

"Invoice Processing"

nodes
(ParseNode · object | ClassifyNode · object | SplitterNode · object | ExtractNode · object | ValidateNode · object)[]
required

Typed graph nodes (parse / classify / splitter / extract / validate).

description
string | null

Optional description of what this workflow extracts.

Example:

"A workflow for processing invoices and retrieving invoice details."

created_at
string<date-time> | null

Timestamp when the workflow was created (ISO 8601).

updated_at
string<date-time> | null

Timestamp when the workflow was last modified (ISO 8601).

edges
Edge · object[]

Directed edges between the graph nodes.