Why a Sume output schema is rejected: the strict subset rules
Sume saves an output schema only in the strict subset: object root, additionalProperties false, all properties required, nullable unions, 10 levels.

You paste a JSON Schema into a schedule's Output schema section and Sume refuses it. The reason is that custom schemas must obey a strict subset, the same rules the docs say OpenAI Structured Outputs enforces. When you save, Sume rejects an outside schema and lists the rules it breaks. This post is the checklist.
The rules
- The root is an object.
- Each object sets
"additionalProperties": false. - Each property appears in
required. An optional property uses a nullable union such as"type": ["string", "null"]. - At most 10 nesting levels, 5000 properties and 1000 enum values.
$refmay point only at#/$defs/<name>or the registeredSumeMediaFile#.
Name and strict flag
Schema names accept A-Z a-z 0-9 . _ / - up to 64 characters. When Sume calls the structuring model it rewrites characters outside A-Z a-z 0-9 _ -, because the provider accepts only the narrower set; Sume stores and reports the name you typed, so sume/action-image-v1 stays that on the receipt. Sume accepts strict: false and returns it, but it does not relax the subset.
A schema that fails, and the fix
The first schema below fails twice: additionalProperties is missing and note is not in required. The second fixes both.
{"type":"object","properties":{"title":{"type":"string"},"note":{"type":"string"}},"required":["title"]}
{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string"},"note":{"type":["string","null"]}},"required":["title","note"]}Same contract on Agent Completions
The Agent Completions page says output_schema there is bound with the same contract as Action runs. Check a schema at design time, as in Create a schedule, before you wire it into a CI job.
Sources
Related posts
More in Developers
- Sume queue position and ETA: none exists, poll generation_limits
Sume shows queue counts and remaining capacity, not a per-job position or ETA. Read generation_limits and keep new work inside the headroom formula.
- Sume schedule invoke command: check the host before you paste it
The curl command on a Sume schedule's trigger card uses api.dev.sume.com when you copy it from a *.dev.sume.com dashboard. Check the host before production.
- Sume schedule run input limits: 64 properties and 2 MiB
The input object on a Sume schedule or Agent Completion run takes up to 64 properties and 2 MiB of UTF-8. Where it lands and how to keep large data out of it.
- Sume SDK error classes: HTTP status, class and action in TypeScript
Map 401, 402, 403, 404, 409, 429 and 5xx to the SumeApiError subclass and the right action, and read code, requestId, retryable and retryAfterSeconds.
Written by Sume