Format run failed primary_not_deliverable: audio under a video key
A Format that makes video fails with agent_reported_failure and primary_not_deliverable when the primary output is audio or a still. How to read and fix it.

A Format run that declares video output but whose primary_output_key points at an audio file or a still image ends failed with output_error.code: "agent_reported_failure" and details.reason: "primary_not_deliverable". The fix is in your schema or your key choice: make primary_output_key name the field that holds the deliverable of the Format's io.output_kind. The media that the run did make is still on output and in artifacts[] (Structured output).
What the receipt tells you
The same code also covers an explicit-fail payload (explicit_failed) and media slots that report failed or stand-in (slots_failed). Read details.reason first to know which one you have.
| Field | Value for this failure |
|---|---|
| status | failed |
| output_error.code | agent_reported_failure |
| output_error.details.reason | primary_not_deliverable |
| output_error.details.primary_media_type | The media type that sat under the primary key |
| output_error.details.harvested | A count by media type |
| primary_output_url | null |
Find the declared output kind
GET /v1/formats/{handle}/{slug} returns an io object. output_kind is video, image or text, and it is null on Formats saved before the field existed. Your primary key must resolve to a file of that kind, so a Format with output_kind: "video" should point at the assembled video, not at the voice track.
curl -sS "https://api.sume.com/v1/formats/acme/product-promo" \
-H "Authorization: Bearer $SUME_API_KEY" | jq '.data.io'Do not retry blindly
The clips on the receipt are real and a retry does not generate them again. If the key was wrong, fix the key and call again with a new Idempotency-Key. If the run really produced only audio, continue it with previous_run_id and a plain-words instruction asking for the missing video, so the finished work stays on the thread.
Sources
Related posts
More in Formats
- Format run scene status stand-in vs failed: which scenes to retry
Give each scene a status of succeeded, stand-in or failed, then retry only the bad ones with previous_run_id. The schema, the receipt rule and the call.
- Format run unattended_blocked: assembled_deliverable is false
unattended_blocked means the run stopped instead of claiming a deliverable it did not make. The harvested media are intermediates, not the cut.
- Does a Format run webhook fire per clip? No, once per turn
A Format run sends one format.run.terminal webhook per agent turn, however many clips it made. A continued run is new and sends its own.
- No queue webhook on Sume bulk runs: count item webhooks instead
Sume bulk queues have no queue-level webhook. Put a webhook_url on each item and count terminal events to know a season is finished.
Written by Sume