# Structured output with Claude XML and <format> tags

> How to coerce Claude into reliable JSON or other schemas without using tool use.
>
> Source: https://claudexml.com/patterns/structured-output/ · Last updated 2026-05-25

Home / Patterns / Structured output

# Structured output with Claude XML and <format> tags

    How to coerce Claude into reliable JSON or other schemas without using tool use.

    When you don't want to set up the API's tool-use or JSON-mode features, you can still get reliable structured output with XML scaffolding and a `<format>` block.


## How to apply the pattern


- Show the schema in `<format>`. Use a JSON skeleton with placeholder values that indicate type and allowed enum.
- Say "return only this object". Otherwise Claude often wraps it in markdown fences.
- Ask for the output inside a wrapper tag. `<result>...</result>` makes extraction bulletproof.
- Validate and retry on parse failure. JSON.parse failures should trigger a single retry with a stricter prompt.

## Worked example


```xml
<instructions>
Classify the support ticket. Return exactly one JSON object matching <format>.
Return only the JSON inside <result> tags. No prose, no markdown fences.
</instructions>

<format>
{
  "category": "billing | bug | feature_request | account | other",
  "priority": "low | medium | high | urgent",
  "needs_human": true,
  "summary": "string, max 140 chars"
}
</format>

<ticket>{{ user_ticket }}</ticket>

Return your output inside <result> tags.
```


## Tips


- For production reliability, the API's tool-use feature is stronger than XML coercion. Use XML when you can't or don't want to define a tool.
- Add `"summary": "string, max 140 chars"` directly in the schema — Claude often respects inline constraints.

Cite this page

`Structured output with Claude XML and <format> tags. claudexml.com. https://claudexml.com/patterns/structured-output/`
