Build agents
Structured JSON
Not an artifact — a data contract. Use it when a result has to feed an API workflow, a database, a review queue, or another system.
Step 1
It is a schema, not an output type
The picker sets the artifact. The schema underneath it sets the fields the API returns.
Structured JSON is not one of the twelve artifacts in the OUTPUT TYPE picker. It lives directly below the picker, on the same step, as DEFAULT OUTPUT SCHEMA — an optional JSON Schema the API uses for structured output when this agent is called.
That means it sits alongside a human-readable artifact rather than replacing one. An agent can hand a person a research report and hand a system a stable set of fields from the same run.
Checked against the product on October 15, 2026
Step 2
Define the fields
Build the schema field by field, or paste one in.
- Open the agent builder and go to step 4, OUTPUT.
- Choose the artifact a person should read first, if anyone reads it at all.
- Under DEFAULT OUTPUT SCHEMA, use ADD FIELD to build the contract a field at a time, or switch to RAW and paste a JSON Schema.
- Add the fields a downstream system needs — recommendation, confidence, rationale, source URLs.
Checked against the product on October 15, 2026
Step 3
Schema design rules
What keeps a contract usable across many runs.
- Use stable field names that downstream systems can rely on.
- Prefer enums for status, severity, recommendation, and confidence bands.
- Separate the short answer from the supporting rationale.
- Include source fields for evidence-heavy workflows.
- Mark fields required only when every run can realistically provide them.
- Keep deeply nested structures for genuinely nested data, not for decoration.
Step 4
A schema that works
A decision, a confidence band, the reasoning, and where it came from.
| Field | Type | Why it is there |
|---|---|---|
| recommendation | approve | review | escalate | The decision, as a fixed set of values a system can branch on. |
| confidence | low | medium | high | How much weight to put on it, without free text. |
| rationale | string | The short explanation, kept out of the decision field. |
| evidence | array of {source, url, finding} | Where each claim came from. |
| missing_information | array of string | Blocking gaps, so a caller can tell 'no' from 'not yet'. |