404 format_run_wrong_path: read a Sume run by its own id
A 404 on GET /v1/formats/{handle}/{slug}/runs/{run_id} is a wrong URL, not a lost run. The did_you_mean hint names GET /v1/format-runs/{run_id}.

If you call GET /v1/formats/acme/live-commerce/runs/arun_123 and get a 404, the run is not lost. Sume answers with the error code format_run_wrong_path, because a Format path only creates and lists runs. A run is read at GET /v1/format-runs/{run_id}, and the path takes no Format handle or slug.
The mistake is easy to make. The create call is POST /v1/formats/{handle}/{slug}/runs, so appending the run id looks natural. The API does not redirect, since a 307 would hide the bad path in your logs, and agents follow redirects badly. It returns a 404 that carries the correction.
What the 404 body tells you
The error has the code format_run_wrong_path and a message that names the right call. Under details you get three fields: did_you_mean, an array holding the canonical call such as GET /v1/format-runs/arun_123; run_id, the id Sume parsed from your URL; and next_steps, three plain sentences. One of them says this is a wrong URL, not a missing run, so do not report the run lost.
The hint works for both addressing shapes, /v1/formats/{format_id}/runs/{run_id} and /v1/formats/{handle}/{slug}/runs/{run_id}. It keeps four sub-resources, so a guessed .../runs/{run_id}/status maps to /v1/format-runs/{run_id}/status. Those four are status, events, result and cancel.
The fix in one command
Do not build run URLs by hand. The receipt that the create call returns holds status_url, result_url, events_url and cancel_url. Store the run id, then read the run directly.
curl -sS "https://api.sume.com/v1/format-runs/$RUN_ID" \
-H "Authorization: Bearer $SUME_API_KEY"
curl -sS "https://api.sume.com/v1/format-runs/$RUN_ID/status" \
-H "Authorization: Bearer $SUME_API_KEY"Branch on the code, not on the status
A plain 404 and this 404 need different handling. A bare not_found can mean the run id is unknown to your workspace. format_run_wrong_path never means that. Check error.code before you alert, retry or mark a run failed.
The same rule keeps agent loops honest. A model that sees only the status 404 may retry the identical path forever, or tell the user the job vanished. Feed it error.details.did_you_mean, and the next call is correct.
| Call | Path |
|---|---|
| Create a run | POST /v1/formats/{handle}/{slug}/runs |
| List runs for a Format | GET /v1/formats/{handle}/{slug}/runs |
| Read one run | GET /v1/format-runs/{run_id} |
| Small poll payload | GET /v1/format-runs/{run_id}/status |
| Cancel | POST /v1/format-runs/{run_id}/cancel |
Sources
Related posts
More in Developers
- Run stuck queued? queue.state waiting vs runtime_unavailable
queue.state waiting is normal pickup; runtime_unavailable means nothing claimed the run. Position is always null. Back off, then contact support.
- 'frame_images is only accepted on auto': use the flat frame fields
Video Router refuses frame_images and input_references on a pinned model. Send image_url, end_image_url or reference_*_urls there, or move to POST /v1/videos.
- frame_images beats input_references on Sume /v1/videos
If one /v1/videos request has both frame_images and input_references, Sume runs image-to-video and uses the frames. How to keep a style reference working.
- Free plan: 120 writes a minute but 6 accepted jobs, which hits first
Video batches on Sume hit queue_full long before the write rate limit. Per-plan arithmetic for 429 rate_limited versus queue_full, with a calculator.
Written by Sume