# Rate limits

> How many requests and jobs you can run at once, and how to tell when you are near the limit.

Source: https://developers.mnml.ai/docs/rate-limits

> [!TIP]
> **In short:** if you get a `429`, wait the seconds in its `Retry-After` header and try again. Topping up raises your limits.

| Account | Counted per | Requests per minute | Reads per minute | Jobs running at once, per account | Spend per day |
| --- | --- | --- | --- | --- | --- |
| Free (never topped up the API wallet) | Account (all keys share) | 10 | 60 | 2 | $0.99 |
| Paid | Key | 60 | 300 | 8 | You set it; unlimited by default |
| Enterprise | By agreement | By agreement | By agreement | By agreement | By agreement |

Reads are `GET` requests: polling a job, the account, the engines. They have their own allowance, so a poll loop never uses up the requests you need to start work. On the free tier every key on the account and the console playground share one allowance.

You can also set a daily spend limit on each key in the console; the tighter of the two applies, and [GET /v2/account](https://developers.mnml.ai/docs/account) shows the one in force. A refunded job is given back to the day it was charged on.

Each response carries `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset`. Every `429` carries `Retry-After` with the seconds to wait, and `error.details.reason` says which limit it was: `RATE_LIMITED` for requests per minute or the daily spend limit (`daily_credit_limit`, until midnight UTC), `CONCURRENCY_LIMIT` for jobs still running. Renders are also held to 1,200 an hour per account, a ceiling an ordinary integration never meets.

Two more limits keep one integration from crowding out the rest. An account can hold 20 `?wait` calls and job streams open at once, counted together: a `?wait` past that answers at once with the job as it stands, as the same call without `wait` would (a `202` from `POST /v2/renders`, a `200` from `GET /v2/jobs/{id}`), and a stream past it is a `429` with `Retry-After`. And an account can send 6 requests carrying images at once: one more is a `429` (`RATE_LIMITED`) with `Retry-After`, and when we are busy receiving images from everyone, a `503` with `Retry-After`. A render with an empty API wallet, or past `CONCURRENCY_LIMIT`, is refused before its images are fetched. An address that sends more than 30 requests with an invalid key in a minute gets a `429` (`details.reason: invalid_keys`) until the minute ends, whatever key it sends.

Need more? [Talk to sales](https://developers.mnml.ai/contact#sales) about higher limits for production traffic.
