Skip to main content
POST
Rate limit tier: general (600 req/min) — see Rate limits.
We recommend creating workflows in the anyformat platform, where you can visually configure fields, test with sample documents, and iterate faster. Once your workflow is ready, copy its ID and use it with the API to run documents programmatically.
Creates a workflow from a strongly-typed graph, atomically. The body is the same {name, description, nodes, edges} shape POST /v2/workflows/ accepts — node types, field types, and validation rules are documented in depth on the v2 create page and in Field types; the graph model itself did not change in v3. A body that violates graph topology (e.g. no parse node, an orphaned extract node) is rejected with 400 TOPOLOGY_INVALID; detail.violations lists each broken rule with the offending node ids. Fetch the stored graph back — with server-assigned persistent_ids on every field — via GET /v3/workflows/{workflow_id}/.

Authorizations

Authorization
string
header
required

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

Body

application/json

Public-surface workflow create body — typed graph of parse / classify / splitter / extract / validate nodes.

A validate node carries rules; each rule is either AI-evaluated (kind="ai" + a natural-language description) or deterministic (kind="deterministic" + a structured check, evaluated in pure Python with no model call).

Uses PublicNode (public request models with only the fields callers may set); the domain AnyNode also carries filter (worker-only) and executor-injected / staff-only fields, so the public bodies pin a stricter node schema. Call :meth:to_domain before validating topology or forwarding to the backend.

name
string
required
Minimum string length: 1
Example:

"Invoice or receipt"

nodes
(PublicParseNode · object | ClassifyNode · object | SplitterNode · object | PublicExtractNode · object | PublicValidateNode · object | PublicIfElseNode · object)[]
required
Minimum array length: 1
description
string | null
default:""
edges
Edge · object[]

Response

Successful Response

Slim workflow projection returned by create and list.

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"

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).