Format output_schema strict false: no loose JSON mode on Sume
Sending strict: false with a Sume Format output_schema is accepted but relaxes nothing, and there is no json_object mode. Bind a schema or use the built-in.

There is no way to turn off schema checking on a Sume Format run. "strict": false is accepted and stored, but the docs say it changes nothing about the supported subset, so a schema outside it is rejected whether strict is true or false. There is also no equivalent of the loose {"type": "json_object"} mode: you bind a schema, or you take the built-in one by sending none.
Both facts come from the Structured output page. They matter most to teams moving a call from another provider, where strict: false or a plain JSON mode was the way to get "valid JSON, any shape".
What does strict: false do on a Format run?
It is part of the { name, strict, schema } envelope, and the receipt echoes it back under output_schema, next to name and source. After that it has no effect on validation. The page states it plainly: do not reach for it as an escape hatch, because there is not one.
The practical consequence is that a failing create stays failing. If you flip strict to false to get past 400 output_schema_invalid, you will get the same 400 and the same details.violations[].
What about JSON mode?
Sume has no json_object setting. A request carries output_schema, or its OpenAI-shaped alias response_format, and sending both is 400 invalid_request. The Create a run page describes response_format as the OpenAI-shaped alias for the same field.
OpenAI's Structured model outputs page, read 2026-10-03, describes schema adherence as the point of the feature, which is the shape Sume mirrors here. What Sume adds on top is a check after the run, because the output is built from generated media and checked against it.
What are my two options?
Pick one of these per run.
| Option | How | What you get |
|---|---|---|
| Bind your own schema | output_schema (or response_format) inside the supported subset | output in your shape, or output: null plus output_error |
| Send no schema | Omit both fields | output projected onto sume/action-run-output/v1: text, images, videos, audio, files |
| Loose JSON of any shape | Not available | Use the built-in shape and parse text yourself |
When is the built-in shape the better answer?
The built-in schema is filled deterministically from the run's generated media and its final text. The docs say no model is involved, so it cannot fail the way a custom schema can. If your goal is just the media, it is already enough to ship on.
Reach for a custom schema when downstream code needs typed fields, such as a per-scene ledger with a status. In that case start strict and small, make optional fields null unions, and leave minItems off arrays you want to receive partially.
What does a failed projection look like at run time?
Passing the shape rules at create is only the first gate. After the run, Sume checks every URL in output against media the run produced and validates the object against your schema. If either fails, output is null and output_error explains why, with code output_schema_unsatisfied.
The docs add that over the API a projection failure is a run failure: those runs are unattended, so a completed receipt with output: null would read as success when it is not, and the status is failed. artifacts[] is still populated, so the media is yours either way.
Sources
Related posts
More in Formats
- Format output rejects an uploaded file's URL: generated media only
The Sume output URL gate admits only media the run generated. An uploaded file's URL in your schema fails the projection and takes all of output.
- Format run 400 on an empty body: what a create request must include
A Format run create must name instruction, input, previous_run_id or attachments. An empty object or an empty input object is a 400 invalid_request.
- Four places a Format run fails, and a message for each
Format runs fail at submit, during the run, as a non-failure terminal state, or at webhook delivery. Each needs its own retry rule and its own UI message.
- Format run Idempotency-Key: header or body, and four replay outcomes
Send Idempotency-Key as a header or idempotency_key in the body; the header wins. Same key and body gives 200 idempotency_hit true; a new body is a 409.
Written by Sume