Overview
When you enable structured output, your agent will:- Process the input normally
- Extract information according to your schema
- Return validated, typed data matching your specification
- Ensure type safety and consistency
Structured output uses runtime schema generation and validation to ensure your agents return properly formatted data.
When to Use Structured Output
Data Extraction
Extract structured information from unstructured text (resumes, invoices, documents)
API Integration
Generate responses that match your API schema requirements
Database Inserts
Create records with validated fields for database operations
Multi-Agent Pipelines
Pass typed data between agents in complex workflows
Basic Configuration
Add thestructured_output field to your agent configuration:
Type Notation
Define field types using our type notation syntax. The common types arestr, int, float, bool, list[T], dict[K, V], and their nullable forms T | None / Optional[T]:
Enum types are not currently supported. Use
str type with clear descriptions for fields that should have restricted values. Guide the LLM via your system prompt to output specific allowed values.Root Schemas
Normally a schema defines named fields and the agent returns a JSON object. Use the reserved field name__root__ when you want the agent to return a bare value instead — most usefully a bare array:
["billing", "refunds"] — not {"topics": [...]}.
Any type notation works as the root type, not just lists:
Referencing a root schema downstream
A root-schema output is stored as a bare list or value rather than a field map, so there is no field name to address. Reference the whole output:{{ topic_extractor.output }}, not {{ topic_extractor.output.field }}.
Quick Start Example
Extract contact information from text:Multi-Agent Data Passing
Use structured output to pass typed data between agents in workflows. Downstream agents can access structured outputs from previous agents using template variables in their system prompts.Accessing Structured Output in Prompts
Use the{{ agent_name.output.field }} syntax to inject structured output into agent prompts:
{{ agent_name.output.field }}— Access specific field from structured output{{ agent_name.output.nested.field }}— Access nested fields (dot-separated path){{ agent_name.output }}— Access entire structured output as JSON string{{ variables.name }}— Access custom variables (see Variables System){{ user_input }}— Latest user message{{ history[N] }}— Last N messages from conversation (structured output NOT included)
Multi-Agent Example
Pass structured data between agents:Best Practices
Configuration Reference
Schema Structure
Thestructured_output field has the following structure:
object
Configuration for structured output generation
enabled defaults to true, so providing a schema is enough to turn structured output on. Set enabled: false to keep a schema in the config while temporarily reverting the agent to free-form text.No other keys are accepted under structured_output — a typo fails validation rather than being ignored.Field Specification
Each field in the schema must have:string
required
Type notation for the field. Common types:
str, int, float, bool, list[T], dict[K, V], T | None, Optional[T], Any.See Type Notation for the full reference.string
Human-readable description of what this field represents (optional but strongly recommended).The agent uses this description to understand what data to extract. Be specific and clear. Fields without descriptions may produce less accurate results.
Agent Type Support
llm_agent: ✅ Fully supported - LLM agents can generate structured output for any schema
react_agent: ✅ Fully supported - ReAct agents generate structured output after completing their tool-calling iterations
Validation and Error Handling
The system automatically validates structured output:Type Checking: Values must match the declared type
Required Fields: All fields in the schema must be present in the output
Format Validation: Basic format checking for strings, numbers, etc.
Common Errors
Example Error Response
If validation fails, you’ll receive a detailed error:Variable Assignments
Structured output fields can be automatically mapped to system variables usingvariable_assignments. This creates a data pipeline: structured output → variables → downstream prompt substitution.
type. See Variables System for details.
Limitations
- Structured output is currently supported for
llm_agentandreact_agenttypes - Complex nested objects may require careful prompt engineering
- Very large schemas (>20 fields) may impact performance
- Every field is effectively optional — any field can return
nullregardless of its declared type - Output must be valid JSON
- Enum types are not supported
- A
__root__schema gives up per-field addressing in prompts, variable assignments and conditional edges
Next Steps
Conditional Edges
Learn how to route agents based on structured output values