Claude structured outputs drop minimum and maxLength; Sume keeps them
Anthropic lists minimum, maxLength and recursion as unsupported in structured outputs. Sume's output_schema accepts the first two; here is what differs.

If you move a schema from Claude's structured outputs to a Sume output_schema, the constraints Anthropic lists as unsupported are accepted by Sume: minimum, maximum, multipleOf, minLength, maxLength, and minItems and maxItems at any value. What Sume rejects instead is a different set, mainly oneOf, allOf and recursion through $ref: "#".
Anthropic's page says structured outputs do not support numerical constraints such as minimum, maximum and multipleOf, string constraints minLength and maxLength, array constraints beyond minItems of 0 or 1, or recursive schemas (read 2026-10-02). Sume's Structured output page lists the keywords it accepts.
How do the two lists differ?
The table compares the keywords each page names.
| Keyword | Anthropic page | Sume docs |
|---|---|---|
minimum, maximum, multipleOf | Not supported | Accepted |
minLength, maxLength | Not supported | Accepted |
minItems, maxItems | Only minItems 0 or 1 | Both accepted |
| Recursive schemas | Not supported | Through #/$defs/* only; $ref: "#" rejected |
allOf | Supported with limits | Rejected; flatten the branches |
additionalProperties | Must be false | Must be false on every object |
Does an accepted constraint mean the output obeys it?
On Sume, the constraint applies to a finished run's receipt. The page says the receipt is validated against the keywords you wrote, so maxLength: 80 on a headline is checked after the run, not baked into generation. A value that breaks it produces an output_schema_unsatisfied failure rather than a truncated string.
That is a different mechanism from Anthropic's, where the page describes compiling the schema into a grammar that constrains the model's output. Keep your own validation either way.
What changes when I port the schema the other way?
Going from Sume to Claude, expect to strip the numeric and string constraints and move them into field descriptions; Anthropic's page describes SDK helpers that do this transform. Going from Claude to Sume, the main fixes are structural: every property in required, nullable unions for optional fields, a root of type: object.
Two Sume limits are worth knowing before you add constraints: nesting depth of 10 levels and 5000 properties across the document.
What should I do next?
Send the schema once. A 400 output_schema_invalid costs nothing and names every violation. Then run a real request and check output_error and filled_by on the receipt.
Sources
Related posts
More in Developers
- Cloudflare Stream 200 MB upload limit: when you must use tus
Cloudflare Stream accepts basic uploads up to 200 MB and requires tus above that. Read the size from a Sume probe and route the file before you upload.
- Compare AI image models on the same prompt: a 20-line API script
MAI-Image-2.6 and Muse Image both claim No. 2 on Arena. Skip the leaderboard: run one prompt through several Sume image models and compare the URLs and cost.
- Run one prompt on five image models via Sume: 200 vs 202 in Python
A Python script fires one prompt at Seedream, FLUX.2, Qwen, Ideogram and Recraft ids on Sume and handles both the 200 image reply and the 202 job envelope.
- Why concurrency_limit differs from the Sume plan table
In Sume generation_limits, concurrency_limit is the effective cap and limit_source says plan or admin_override. Size work from it, not plan_concurrency_limit.
Written by Sume