Sume MCP idempotency_key: retry a timed-out paid call safely
Reuse the same idempotency_key to retry a paid Sume MCP call that timed out. A new key makes a new job. A reused key with a different payload returns 409.

Retry a paid call that timed out with the exact same idempotency_key and the exact same payload. Sume treats that as a retry, not a new job. A different key creates another job and bills again. The same key with a different payload fails with 409 idempotency_conflict.
| You send | Result |
|---|---|
| Same key, same payload | Exact retry of the earlier call |
| New key, same payload | New job, new billing |
| Same key, different payload | 409 idempotency_conflict |
Where the key is required
Writes and paid tools need idempotency_key under OAuth with write and under API keys. The docs describe it as a stable key for transport and dedup, not human approval. Reads do not need one.
| Group | Examples | idempotency_key |
|---|---|---|
| Paid | generate_image, generate_video, tts_create | Required |
| Write | jobs_cancel, assets_create | Required |
| Read | jobs_wait, jobs_result, tools_list | Not needed |
Making keys retry-safe
Build the key from the work, not from the clock. A key made from a timestamp changes on retry and defeats the purpose.
- Derive it from stable inputs, for example
scene-12-take-1. - Store it with the job id as soon as the create returns.
- After a timeout, retry the create with the same key, or move to
jobs_waitif you already have the job id. - Change the key only when you mean to create new work.
Related limits
A 429 queue_full is retried with the same key once capacity frees up. A 503 provider_capacity_exceeded is retried later with the same key unless the error says not to. dry_run=true does not submit a job, so it needs no cleanup.
What the agent should record
Record three things per create: the key, the payload hash, and the job id once known. If the process dies after submit and before it saved the id, the key and payload let it retry safely. If it has the id, skip the retry and wait on the id instead.
A worked case
An agent submits generate_image with key hero-v1. The client times out. The agent retries with hero-v1 and the same payload: this is an exact retry. It then changes the prompt and reuses hero-v1: that is a different operation under the same key, and the server answers 409. The fix is to give the new prompt a new key, such as hero-v2.
Agents are good at forgetting what they did two turns ago, so write the rule where they will read it: before any paid call, look for an existing key and job id for this task; if one exists, wait on the id. If none exists, create the key, store it, and then submit. This three-step habit turns most timeout bugs into a harmless repeat of a read.
Keep in mind that Sume's hosted endpoint is the same for every client in this series: https://mcp.sume.com/mcp, with OAuth consent on the MCP host or an API key in a header. What differs is each client's config keys, its timeout defaults and its approval prompts. When a connection misbehaves, first separate those two layers: test the endpoint with curl and your credential, and only then look at the client's settings.
Sources
More in Integrations
- Image 1.0 and Video 1.0 are not on Sume's hosted MCP: what to call
images_create and videos_create are REST-only. On hosted MCP the router tools generate_image and generate_video cover stills and clips. Fallback and checks.
- Sume MCP insufficient_scope: why it happens and the two ways to fix it
A Sume MCP tool returns insufficient_scope when an OAuth session has mcp:read only. Fix it by re-consenting with Write on, or by using an API key.
- Sume MCP jobs_wait returns 524: it is not a failed job
A 524, 522, 523 or 525 on Sume jobs_wait is a transport failure, not a job result. Wait again on the same ids and never resubmit the paid create.
- Sume MCP jobs_wait with 20 job_ids: wait_for any versus all
jobs_wait takes up to 20 job_ids and wait_for any or all. All is the default. Any returns early, but the other jobs keep running and billing. Examples inside.
Written by Sume