Sume API rate limits by plan: requests per minute for writes and reads
Sume gives every API key a per-minute budget set by plan: 120 writes on Free up to 1200 on Scale, with reads at forty times the write number. Table and headers.

The Sume API gives each key a request budget per minute across all of /v1, set by the plan of the workspace the key belongs to: 120 writes a minute on Free, 300 on Pro, 600 on Startup and 1200 on Scale. Reads have their own bucket at forty times the write number, so a tight status-poll loop cannot 429 your own submits.
The numbers
A read is any GET or HEAD, plus two POSTs that submit nothing. Everything else, including creating runs, cancelling and uploads, is a write. Enterprise is contract-based; until a number is provisioned an Enterprise key resolves to the Scale row.
| Plan | Writes per minute | Reads per minute |
|---|---|---|
| Free | 120 | 4800 |
| Pro | 300 | 12000 |
| Startup | 600 | 24000 |
| Scale | 1200 | 48000 |
| Enterprise | Contact sales | Contact sales |
Do not confuse it with generation capacity
Request rate is a different control from how many generations run at once. Concurrency and queue capacity come from your plan's generation_limits, and raising your request rate does not raise them. A 429 can mean either: rate_limited is the request budget, queue_full is the generation queue.
Read the headers instead of counting
Responses carry ratelimit-limit, ratelimit-remaining, ratelimit-reset and, on a 429, retry-after. They describe whichever bucket the current request spent from, and a 429 names it in error.details.scope as read or write. The read multiple is a deployment setting, so the headers on the response are the authority for the host you call, not this table.
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.
- Retry Sume 429s in TypeScript: a fetch wrapper that obeys retry-after
A small fetch wrapper for the Sume API: retry 429 only when the request is a GET or carries an Idempotency-Key, wait retry-after, and never loop on queue_full.
- Sume reserve, capture, refund: what your cost ledger should mirror
Sume reserves the estimate at submit, captures it on success and releases it on failure or cancel. Mirror the three states or cost reports will double count.
Written by Sume