Retrying a sume/auto video submit: same key, same job, same price
Auto routing is a pure function of the normalized request and the catalog version, so an idempotent replay routes and prices identically. What changes it.

If you retry a model: "sume/auto" video submit with the same Idempotency-Key, Sume returns the original job, and the docs add a stronger guarantee: Auto's choice of family is a pure function of the normalized request and the catalog version, so a replay prices and routes identically. You do not risk the retry landing on a different, more expensive family.
That guarantee covers an identical request. It says nothing about a request where you changed the prompt, duration or resolution, or about a request sent after the catalog changes.
What stays fixed and what can move
The Video generation docs spell out the lifecycle: send Idempotency-Key to make retries safe, and a replay returns the original job. The routing statement sits under the sume/auto section. Put together:
| Situation | What to expect |
|---|---|
| Same key, same body | Original job returned; same family and price |
| Same key, different body | A conflict, not a new job (the API reference lists idempotency_conflict under 409) |
| New key, same body, same catalog version | Same routing decision by the docs' pure-function rule |
| New key, same body, after a catalog change | No guarantee; the catalog version is an input |
The family is still not disclosed
A replay returns model: "sume/auto" in the poll response, exactly like the first call. The docs say Sume does not disclose which family served the request and that you should not build on any observable trait of the output to infer it. Determinism of routing is not the same as disclosure of the result.
Errors follow the same opacity. Validation code reports the model you sent, so a rejected request still says sume/auto rather than naming the family that tripped the limit.
Reading the job back
Besides the polling URL, the Video generation docs note that the same job is visible at GET /v1/jobs/{id}/status and GET /v1/jobs/{id}/result. If your retry layer lost the response to the first submit, you can still recover by resending the identical request with the identical key, which returns the original job and its id, rather than hunting for an orphan.
Retries are different from rate limiting. A 429 can mean you ran out of the write budget, that a generation queue is full, or that the rate-limit store is degraded; the API reference says details.scope names which one. Back off on a 429 and keep the key unchanged, since the original submit may or may not have been accepted.
A retry loop that respects this
Generate one key per intent, for example one per SKU and campaign, and store it next to your own record before the first send. On a timeout or a 5xx, resend the identical body with the identical key. On a 409 conflict, stop: you changed the body, so decide whether you want the original job or a new one with a fresh key.
``bash
curl -X POST https://api.sume.com/v1/videos \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: sku-4471-hook-a" \
-d '{
"model": "sume/auto",
"prompt": "A vertical UGC-style product clip on a desk, natural light",
"aspect_ratio": "9:16",
"duration": 5
}'
``
Run that twice and the second call returns the first job. Change duration to 6 under the same key and you get the conflict, not a second job.
Sources
Related posts
More in Developers
- Client timeouts for Sume jobs: SDK defaults and the 30-second cap
Sume's sync wait caps at 30 seconds, waitForRun defaults to 10 minutes, subscribeFormatRun and waitForJob to 20. Pick a deadline per job type, keep the job id.
- Choosing a Sume Idempotency-Key: business key plus a payload version
A good Idempotency-Key is stable across retries and changes with the request. Build it from your order id and a payload hash, or hit 409 idempotency_conflict.
- Sume image API size vs resolution vs aspect_ratio: which to send
On POST /v1/images, size is only a shorthand for a resolution tier and exact pixels are not served. Send resolution and aspect_ratio from the model's list.
- Music 1.0 is retiring: switch to /v1/music-router/generate in one line
Sume's Music 1.0 routes keep working but now resolve through the Music Router. Which URL to change, what stays the same, and how to see which engine ran.
Written by Sume