OpenRouter weight_exceeds_budget: never retry; Sume queue_full
OpenRouter's weight_exceeds_budget 402 will not clear on retry; in_flight_budget_exhausted will. Sume splits the same way: queue_full retries, 402 does not.

Do not retry weight_exceeds_budget. OpenRouter's limits page says this single request's estimated cost is larger than your whole budget, so retrying will not help: lower max_tokens or the prompt size, or add credits. Its sibling reason, in_flight_budget_exhausted, is transient and carries Retry-After. Sume draws the same line between 429 queue_full, which you retry, and 402 insufficient_credits, which you fix first.
Which OpenRouter 402 reasons are retryable?
Both come back as 402 with limit_source metadata, so the status code alone cannot decide. Facts below are from the page read 2026-10-01.
| reason | limit_source | Retry? |
|---|---|---|
in_flight_budget_exhausted | openrouter_in_flight_budget | Yes, after Retry-After |
weight_exceeds_budget | openrouter_credits | No; shrink the request or add credits |
Which Sume errors are retry-later?
429 queue_full means new paid generation submissions are refused because the workspace queue is full. Per Generation admission: wait for jobs to finish or cancel queued jobs, then retry with the same idempotency key. 429 rate_limited is request volume: back off using retry-after when present.
Which Sume errors are retry-never as-is?
402 insufficient_credits means the estimated cost cannot be reserved. The listed client behavior is to upgrade the plan, wait for included Gen$, or submit a cheaper request. 409 idempotency_conflict means a key was reused for a different payload: reuse keys only for exact retries.
How should a client sort them?
Keep one table keyed on the structured code, not the status. Retry with backoff on queue_full and rate_limited, always reusing the Idempotency-Key; the docs say not to retry unsafe submits without one. Surface 402 to a person or a cheaper-request path. For a 429 that carries no wait hint, see enforced spend limit 429 with no retry-after.
Sources
Related posts
More in Developers
- Pipedream 750-second timeout: poll loop or Sume webhook?
Pipedream paid plans allow 750 seconds per run. Submit the Sume video job, then finish in a second workflow triggered by the webhook not a long poll loop.
- Polly async needs an S3 bucket; Sume gives a status URL and webhook
Polly's StartSpeechSynthesisTask writes audio to your S3 bucket and can notify an SNS topic. Sume TTS returns a status URL, or a signed webhook on completion.
- Polly speech marks need a separate request; Sume returns timings
Polly returns speech marks instead of audio when you ask for them: sentence, word and viseme metadata. Sume TTS returns words[] timings on the same job result.
- Polly takes 3,000 billed characters; Sume TTS takes 20,000
Polly SynthesizeSpeech accepts 3,000 billed characters and cuts audio at 10 minutes. Sume TTS 1.0 accepts 20,000 characters and 1,200 seconds of audio per job.
Written by Sume