OpenAI response_format json_schema on a Sume scheduled run
Sume accepts an OpenAI-shaped response_format as an alias for output_schema on schedule runs. Sending both returns 400, and the schema must be strict.

Yes. On POST /v1/actions/{action_id}/runs, response_format with type: "json_schema" is accepted and normalized into output_schema. Sending both is a 400 invalid_request, and the schema must sit inside Sume's strict subset.
Everything here is from Run a schedule via API, read 2026-09-30.
How do the two fields compare?
| Field | Shape | Note |
|---|---|---|
output_schema | { name, strict, schema } | Per-request override; receipt shows source: "request_override" |
response_format | { type: "json_schema", json_schema } | OpenAI-shaped alias, normalized into output_schema |
| Both | n/a | 400 invalid_request |
What does a valid request look like?
List every property in required and use a nullable type for optional values. A schema outside the strict subset is rejected with output_schema_invalid before any run starts, with details.violations[] naming each rule.
curl -sS -X POST "https://api.sume.com/v1/actions/$ACTION_ID/runs" \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: rf-001" \
-d '{
"input": { "product_name": "Aurora Headphones" },
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "caption_out",
"strict": true,
"schema": {
"type": "object",
"additionalProperties": false,
"required": ["caption"],
"properties": { "caption": { "type": ["string", "null"] } }
}
}
}
}'What happens on a replay?
output_schema is part of the idempotency payload, so replaying a key with a different schema is a 409 idempotency_conflict, not a silent replay of the old receipt.
Is this on Agent Completions too?
The Agent Completions docs list output_schema with the same contract as Action runs. The response_format alias is documented on the schedule run page, so use output_schema there.
Where does the request input go?
input is serialized into a fenced JSON block and handed to the agent as data, not instructions, with at most 64 properties and 2 MiB. Caller text is untrusted, so do not design a schedule where input can redirect what it does. Unknown top-level properties are silently dropped, not rejected, so check field names such as response_format.
Sources
Related posts
More in Developers
- Responses steering after a video job started: what Sume does
response.steer does not cancel started tools. A Sume video job past its start runs to completion; jobs_cancel returns 409 job_generation_already_started.
- Change caption style without transcribing again: source_caption_id
Pass source_caption_id instead of video_url to re-burn a clip under a new style. Sume reuses the stored word timings, so speech-to-text runs only once.
- Retool Workflow webhook needs X-Workflow-Api-Key: use a relay
Retool Workflows authenticate webhooks with an X-Workflow-Api-Key header or query parameter. Sume documents no custom delivery headers: relay after verifying.
- Retry a 503 overload on a paid generation without a double charge
A 503 overload is safe to retry on Sume if you reuse the same idempotency key. Credit is reserved at submit and released if the job fails.
Written by Sume