Sume has no JSON mode: strict false changes nothing, bind a schema
Coming from OpenAI json_object? Sume Format runs have no equivalent. strict false relaxes nothing. Bind a schema or take the built-in output shape.

The answer
A Sume Format run has no loose JSON mode. There is no equivalent of {"type": "json_object"}, the option that means valid JSON in any shape. You have two choices: bind your own output_schema, or take the built-in output shape. strict: false is accepted and stored, but it does not relax the schema rules at all.
That matters if you are moving an OpenAI structured-output integration to a Format run this week. The schema subset is the same family as OpenAI's strict mode, but the place where Sume applies it is different.
What maps and what does not
The table compares the OpenAI settings people carry over with what Sume does as of 2026-10-08.
| OpenAI setting | Sume | Note |
|---|---|---|
| response_format.json_schema | output_schema, or response_format verbatim | Chat Completions spelling only |
| json_schema.strict | output_schema.strict | Default true; Sume always enforces the subset |
| {"type": "json_object"} | No equivalent | Bind a schema or use the built-in one |
| Streamed partial JSON | Not applicable | output appears once, on the terminal receipt |
Why strict false does not help
If a schema sits outside the supported subset, Sume rejects it at submit with 400 output_schema_invalid, whether strict is true or false. The response lists details.violations[] with a path, a stable rule token and a message. Nothing runs and nothing is charged.
The subset is an allowlist. oneOf is rejected in favour of anyOf. allOf is rejected, so flatten the branches. Every node needs a type, $ref or anyOf. The root must be a single object type. Every object needs additionalProperties: false. Every declared property must appear in required, so optional fields become nullable unions such as ["string", "null"].
What you get instead of JSON mode
Leave output_schema off and the run returns the built-in shape, sume/action-run-output/v1: the closing text in output.text, plus output.images, output.videos, output.audio and output.files. Media URLs are durable media.sume.com HTTPS URLs.
Send both output_schema and response_format and you get 400 invalid_request. Pick one spelling.
{
"instruction": "Make one hero image for the linked product.",
"input": { "product_url": "https://example.com/p" },
"output_schema": {
"name": "acme/promo-hero/v1",
"schema": {
"type": "object",
"additionalProperties": false,
"required": ["headline", "hero_image"],
"properties": {
"headline": { "type": "string" },
"hero_image": { "$ref": "SumeMediaFile#" }
}
}
},
"primary_output_key": "hero_image"
}One mental change
With OpenAI you constrain what the model says. With a Format run you constrain how Sume reads back a completed run. The run either submits your object itself (filled_by: "agent") or a post-run pass builds one from its media and closing text (filled_by: "projection"). Your own input values do not reach the projection, so identifiers you sent, such as an order id, will not round-trip unless the run repeats them.
Migrating an existing call
Start from the schema you already send. Strip any keyword outside the subset, make every property required, turn optional fields into nullable unions, and set additionalProperties: false on each object. Then rename the wrapper: Sume reads the Chat Completions spelling, so response_format.json_schema with name and schema is accepted as an alias of output_schema.
Test the schema once with a cheap run and a low generation_spend_cap_usd. A rejection at submit costs nothing, and the violations[] list tells you the exact path and rule to change, so you can fix several problems in one pass instead of one per attempt.
- Keep names stable and versioned, such as
acme/promo-hero/v1, so receipts show which contract produced which output. - Use
$ref: "SumeMediaFile#"for a media field so Sume fills in the durable URL.
Sources
Related posts
More in Formats
- Sume webhook signature fails: check the secret fingerprint first
When a Sume webhook signature will not verify, compare the 12-character secret fingerprint header before you debug the HMAC. Includes a Python verifier.
- Which ready-made Sume Formats can I call today? 27 slugs
Sume's first-party Format catalog answers at the sume handle with 27 slugs, from UGC and product demos to try-on, product splashes and recreate. List and call.
- Which Sume Format for a UGC ad? Read io, then call by name
Sume's catalog lists UGC-style Formats such as sume-close-camera-ugc and sume-mobile-app-ugc. Read each Format's io profile, then run it with a spend cap.
- Which Sume Formats return images, not video? 9 of the 27 slugs
Of the 27 Formats by Sume, 18 declare video output and 9 declare image output. The slug lists, how to read the io profile, and why to check before you call.
Written by Sume