Create a new block in a workflow.
This creates a block in the live workflow_blocks collection.
Add a new block to a workflow’s draft graph. You provide the block ID — it must be unique within the workflow. Pick something descriptive (e.g.Documentation Index
Fetch the complete documentation index at: https://docs.retab.com/llms.txt
Use this file to discover all available pages before exploring further.
extract-invoice, classifier-language) so edges and assertions stay readable.
The config shape depends on type. See Workflow Blocks for the per-type config reference.
A few invariants the API enforces:
start, start_json) cannot be placed inside containers — parent_id must be null for them.parent_id is reserved for placing blocks inside container blocks (while_loop, for_each).Request to create a new block.
Client-provided block ID
Block type
start, start_json, note, parse, edit, extract, split, classifier, conditional, hil, api_call, function, while_loop, for_each, merge_dicts, while_loop_sentinel_start, while_loop_sentinel_end, for_each_sentinel_start, for_each_sentinel_end Display label
X position
Y position
Block width
Block height
Block configuration
ID of parent container block (while_loop, for_each)
Successful Response
Individual block document for live editing.
Stored in workflow_blocks collection. Each block is independently updatable, enabling targeted position and config updates without loading the entire workflow.
Foreign key to workflow
Organization ID for data isolation
Block type (extract, parse, classifier, etc.)
start, start_json, note, parse, edit, extract, split, classifier, conditional, hil, api_call, function, while_loop, for_each, merge_dicts, while_loop_sentinel_start, while_loop_sentinel_end, for_each_sentinel_start, for_each_sentinel_end Draft version for live entities
Display label for the block
X position on canvas
Y position on canvas
Block width for resizable blocks
Block height for resizable blocks
Block-specific configuration
Merkle subtree hashes for authored field references; refreshed by schema propagation. Block metadata, not authored config.
Transient sidecar of graph-derived schemas (input_schemas, output_schemas, field_ref_drift). Attached on transport responses; never persisted. Exclude from all DB writes via .model_dump(exclude={'resolved_schemas'}).
ID of parent container (while_loop, for_each)