Skip to main content
The main limit is concurrency: how many generations an account may have queued or running at once. There is no charge for a refused request.

Generations in flight

An account may have 20 generations in flight at once, counting the API and the app together. A submit past that cap is refused with 429 too_many_requests and nothing is charged. The cap can be changed for an account; write to mage@mage.space with your use case.
The check reads the count at submit time. A burst of simultaneous submits can therefore slightly exceed the cap; every admitted generation is still paid for as usual.

Other limits

Requests may also be rate limited at the edge during bursts. Treat any 429 as a signal to wait, whatever its body.

Designing around the limits

  • Keep a worker pool no larger than your cap and submit from it, rather than submitting everything at once and handling the refusals.
  • Poll on a separate schedule from submission, with backoff, so status reads do not compete with submits.
  • Store request_id as soon as a submit returns; the status link is how you recover from anything that happens afterwards.
  • Send an Idempotency-Key with every submit so a retry never pays twice.
Last modified on September 17, 2026