Sume output_extraction_failed: the run stays completed, reread it
output_extraction_failed with reason harvest_unavailable is transient. The Sume run stays completed and fills in on your next read; retry only if it persists.

output_extraction_failed is a transport failure, not a verdict on your schema. The run stays completed, and when details.reason is harvest_unavailable the receipt fills in on the next read, so read it once more before doing anything else.
Sume's Structured output page puts it in the output_error.code table: the projection could not run, and a reason of harvest_unavailable means the run's media could not be read while it finalized. This post covers how that differs from the failures that do mark a run failed.
Why does this one stay completed?
On a run over the API, a projection failure is a run failure: status is failed and error carries the same reason. The page lists output_extraction_failed as the exception, because it records that the projection never got to look at the run. A failed status would tell you the run did something wrong when nothing is known either way.
So the receipt stays completed and re-projects by itself on your next read.
What should I do, in order?
The page gives a short ladder.
| Step | Action |
|---|---|
| 1 | Read the run once more; that alone clears a harvest_unavailable |
| 2 | If it persists, retry the run with a new idempotency key |
| 3 | In your UI, show artifacts[] and log the shape failure |
Why a new idempotency key?
The page says the old key is bound to the receipt you already have. Replaying the same key would return that original receipt, so a retry only starts new work under a new key.
Can I still show my customer something?
Yes. artifacts[] is populated either way with everything the run made. The page's advice is that showing the media and logging the failure beats showing an error to a customer whose video exists.
Treat the code set as open. New codes may appear, so branch on output_extraction_failed and the others you handle and fall through on the rest.
Sources
Related posts
More in Formats
- Pick a Format from the list: io profile and showcase before you run
GET /v1/formats returns each Format with an io profile (input_kind and output_kind) and a showcase output, so you can choose one without paying for a trial run.
- Q4 creative test matrix: 3 hooks by 3 Formats in one 9-item bulk run
Test creative style and hook together: nine Format runs for one SKU in a single Sume bulk queue, with a worst-case spend you can read before you submit.
- Renamed a Format handle? Old URLs work for 90 days: store invoke_url
A renamed Sume Format handle keeps resolving for 90 days. For stored integrations, persist the opaque skl_ invoke_url, which never changes across renames.
- Retry one scene of a Format run without paying for the whole run
Send previous_run_id to continue a Sume Format run as another turn: redo one scene, keep the rest. The refusals, 404, 400 and 409, and what each means.
Written by Sume