429 with headers that tell you when to retry.
These limits are defaults and are subject to change. If your integration needs
a higher ceiling, contact support@samsa.ai.
Per-key request rate
Each API key may make up to 60 requests per minute, measured as a sliding 60-second window. Exceeding it returns429 with code: "rate_limited".
Successful responses and rate-limit 429s carry the current window state (the
Retry-After header is added on 429s only):
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed per window (default 60). |
X-RateLimit-Remaining | Requests left in the current window. |
X-RateLimit-Reset | Unix timestamp (seconds) when the window resets. |
Retry-After | Seconds to wait before retrying. Sent on 429 responses only. |
X-RateLimit-Remaining on successful responses to slow down before you hit
the limit.
Per-organization concurrency cap
Independently of request rate, an organization may have at most 5 concurrent in-flight jobs — generation, edit, video, and model-creation jobs that are stillpending or processing, counted across every key in the organization. Submitting
another job while at the cap returns 429 with code: "too_many_active_jobs" and a
Retry-After header:
429 Too Many Requests
GET
endpoint, or subscribe to a webhook — before submitting more.
An example 429
A429 from the per-key window includes both the Retry-After and X-RateLimit-*
headers:
Handling 429s
Honor Retry-After
When a
429 includes a Retry-After header, wait at least that many seconds
before retrying. It is the authoritative signal.Back off exponentially
For repeated
429s, increase the delay between attempts (for example
1s, 2s, 4s, 8s…), capped at a sensible maximum, with a little random jitter to
avoid thundering-herd retries.Retry-After and falls back to exponential
backoff.