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
- Cloud Run concurrency target GA: a Sume webhook receiver sizing
Cloud Run's custom target concurrency and CPU scaling is GA. Size a Sume webhook receiver around the 10 second attempt timeout and 10 retries.
- Cloud Run job delay up to 12 hours: schedule Sume bulk runs
Cloud Run now lets a job start up to 12 hours late (Preview). When that beats a scheduler for Sume bulk runs, and what to keep out of a delayed container.
- Cloud Scheduler retries and a static Idempotency-Key: the replay trap
A fixed Idempotency-Key header on a Cloud Scheduler POST replays the first Sume run forever. Derive the key per tick, or use Sume Actions for schedules.
- Cloud Tasks batch create is GA: one Sume idempotency key per task
Cloud Tasks batch create went GA on Sep 30, 2026. Give every task its own Sume Idempotency-Key so a batch retry never doubles a paid generation.
Written by Sume