Why your order_id comes back null in a Sume structured output
If a Sume run's filled_by is projection, the fallback never sees your input or instruction, so an order_id you sent comes back null. Keep ids on your side.

An order_id you sent in input can come back null in output when the receipt says filled_by: "projection". That fallback pass sees only the run's generated media and the first 8000 characters of its closing text, not your input and not your instruction.
The mechanism is documented on Sume's Structured output page. It differs from OpenAI's Structured Outputs, where the model that reads your prompt also writes the JSON; on Sume the schema constrains how a finished run is read back.
What is filled_by?
The receipt records which path produced output. filled_by: "agent" means the run submitted your object itself, through a tool built from your schema, and it could see input and instruction. filled_by: "projection" is the fallback when the run finished without a valid object.
| `filled_by` | Who writes `output` | Sees your `input`? |
|---|---|---|
agent | The run, before finishing | Yes |
projection | A separate constrained pass after the run | No |
What does a null look like?
The page says a schema whose titles, descriptions or ids come from the brief returns null in exactly those places on the projection path, while media fields are full. Prose that is null next to full media is described as the shape of a run that stopped early, not of a Format that forgot to write copy.
What should I do?
Do not round-trip your own identifiers through output. The page says to keep them on your side, keyed by run.id or by the Idempotency-Key you sent, and let output carry only what the run made.
If you score runs automatically, read filled_by before you count a run as delivered. Require only fields the Format actually makes, and use a nullable union for the rest.
Is the projected object trustworthy?
Both paths pass the same gate. Nothing in output is invented on either path, and URLs and media durations are checked, but other values are the run's own account of its work, not measurements.
Sources
Related posts
More in Formats
- output_schema_unsatisfied with rejected_urls: the Sume URL gate
A Format run that returns output_schema_unsatisfied and rejected_urls named a media URL it did not generate. How the URL gate works and how to fix the schema.
- Format reads inactive but still runs: the 409 codes
A never-run Format may read inactive until its first API run. The real refusal is a 409 format_inactive or format_api_trigger_disabled.
- Format run agent_reported_failure vs deliverable_missing: retry or not
agent_reported_failure means the run said it did not deliver; deliverable_missing means it made no media at all. Both leave a failed run, but the retry differs.
- Format run failed provider_unavailable or mcp_unavailable: retry rules
provider_unavailable and mcp_unavailable are Sume-side Format run failures: retry with a new Idempotency-Key. provider_credits_exhausted waits.
Written by Sume