Docs
Open console
Core concepts

Rate limits

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

v2 preview2 min read
In short: if you get a 429, wait the seconds in its Retry-After header and try again. Topping up raises your limits.
AccountCounted perRequests per minuteReads per minuteJobs running at once, per accountSpend per day
Free (never topped up the API wallet)Account (all keys share)10602$0.99
PaidKey603008You set it; unlimited by default
EnterpriseBy agreementBy agreementBy agreementBy agreementBy 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 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 about higher limits for production traffic.