Skip to main content
Structured output enables your agents to return data in a predefined schema instead of free-form text. This is essential for integrating agents with databases, APIs, or any system that requires consistent data formats.

Overview

When you enable structured output, your agent will:
  1. Process the input normally
  2. Extract information according to your schema
  3. Return validated, typed data matching your specification
  4. Ensure type safety and consistency
Structured output uses runtime schema generation and validation to ensure your agents return properly formatted data.
Important: Structured output is NOT included in the conversation history array. This means structured output from previous agents is only accessible through template variables in prompts (e.g., {{ agent_name.output.field }}) and will not appear in the {{ history }} or {{ history[N] }} variables.

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 the structured_output field to your agent configuration:

Type Notation

Define field types using our type notation syntax:

Basic Types

type
Text data
type
Integer numbers
type
Decimal numbers
type
Boolean values (true/false)

Collection Types

type
List of items of type T
type
Dictionary mapping keys of type K to values of type V

Nullable Types

type
Optional/nullable value of type T
You can also use Optional[T] syntax:
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.

Quick Start Example

Extract contact information from text:
Input:
Output:

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:
Supported template variables:
  • {{ 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)
Critical: Structured output is excluded from history variables. Use the specific {{ agent_name.output.field }} template variables to access structured data from previous agents.
Complex data types (lists, dicts) are automatically serialized to JSON when injected into prompts.

Multi-Agent Example

Pass structured data between agents:
Template variables: Use {{ agent_name.output.field }} to access structured output from previous agents

Best Practices

Clear Descriptions: Always provide detailed descriptions for each field. The agent uses these to understand what to extract.
Appropriate Types: Choose the most specific type possible. For fields with restricted values, use str type and specify allowed values in the description and system prompt.
System Prompt Alignment: Ensure your system prompt explicitly mentions the structured output requirements.
Type Validation: All output is validated against your schema. Invalid data will cause errors. Test your schemas thoroughly.
Nested Structures: For complex nested objects, consider breaking them into multiple agents or using dict types with clear descriptions.

Configuration Reference

Schema Structure

The structured_output field has the following structure:
object
Configuration for structured output generation

Field Specification

Each field in the schema must have:
string
required
Type notation for the fieldSee Type Notation Reference for all supported types.Supported types: str, int, float, bool, list[T], dict[K, V], T | None, Optional[T], Any
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
supervisor: ❌ Not supported - Supervisor agents focus on coordination and do not produce structured output

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 using variable_assignments. This creates a data pipeline: structured output → variables → downstream prompt substitution.
Variable assignments also support static values and non-structured output. The system applies automatic type coercion during variable assignment, converting strings to types like integers, booleans, or JSON arrays to ensure they match the variable’s defined type. See Variables System for details.

Limitations

  • Structured output is currently supported for llm_agent and react_agent types
  • Complex nested objects may require careful prompt engineering
  • Very large schemas (>20 fields) may impact performance
  • Use str | None or Optional[str] for optional fields
  • Output must be valid JSON
  • Enum types are not supported

Next Steps

Conditional Edges

Learn how to route agents based on structured output values