API rate limits
ModelsLab runs a shared GPU fleet, so every account has a cap on how many generations it can start in a given period. The caps exist so one very heavy account cannot absorb the whole fleet and leave everyone else queueing. There are four of them, and they are independent — this page shows all four, and your live usage against each.
Your limits right now
Sign in to see how much of each limit you have used in the current window, and when it resets.
Sign in1. Your plan’s request window
The main limit. Every plan gets an hourly allowance, enforced in 30 minutes slices so a burst cannot spend the whole hour in the first few minutes. Video and 3D draw on a second, smaller allowance of their own, because a single video costs 10–100× the GPU time of an image.
| Plan | Images & audio | Video & 3D | At the same time | Requests per month |
|---|---|---|---|---|
| Starter | 150 / hour75 per 30 minutes | 15 / hour8 per 30 minutes | — | — |
| Basic$21/mo | 400 / hour200 per 30 minutes | 50 / hour25 per 30 minutes | 5 generations | 3,250 |
| Standard$47/mo | 1,250 / hour625 per 30 minutes | 125 / hour63 per 30 minutes | 10 generations | 10,000 |
| Open Source Unlimited$149/mo | 350 / hour175 per 30 minutes | 35 / hour18 per 30 minutes | 15 generations | Unlimited |
| No subscription, empty wallet | 50 / hour25 per 30 minutes | 8 / hour4 per 30 minutes | 5 generations | — |
| Other / legacy plans | 150 / hour75 per 30 minutes | 15 / hour8 per 30 minutes | — | — |
Why does Open Source Unlimited allow fewer per hour than Standard?
Because the two plans are bounded by different things. Basic and Standard include a fixed number of requests per month, and that monthly total — not the hourly window — is what limits them; their windows are set wide enough that a whole month’s allowance can be spent in a single working day. Open Source Unlimited has no monthly total at all, so the hourly window is the only thing bounding it, and it has to be set at a level the shared fleet can sustain indefinitely. A higher number in the first column is not a bigger plan.
Requests to a dedicated Enterprise endpoint run on your own GPUs, not the shared fleet, and are not counted here.
2. Generations running at the same time
Separate from the window above, and the one most often mistaken for it. It caps how many of your generations may be in progress at once, not how many you may start. It is not a budget that refills on a clock — a slot frees the moment a generation finishes, so this limit clears itself. The number for each plan is in the last column of the table above.
3. Per-model caps
A few model pools are small enough that one account running flat out fills the queue for everybody else on them, while staying comfortably inside its plan window. Those pools carry their own cap, applied on top of your plan window, on every plan.
| Model pool | Per hour | Per 30 minutes |
|---|---|---|
interior | 45 | 23 |
ultra_upscale | 60 | 30 |
flux_kontext_dev | 45 | 23 |
4. What does and does not count
Only requests that actually start work on a GPU count. In particular, polling a generation you already started is free — a single generation is polled up to 25 times, and counting those would exhaust an allowance after a dozen real generations.
Counted against the video & 3D allowance
v6/video/v6/3d/video-fusion/v8/videosv8/3ds_to_3dv5/text2videovideo_swap
Matched anywhere in the request path. Everything else that generates draws on the images & audio allowance.
Never counted
fetchwebhookbase64_to_urlsystem_detailsbase64_cropload_modelimage_editing/captionclear_cachevoice_listvoice-call/voicesvoice-call/cancel-all/status/transcript/closev7/llm/
Matched anywhere in the request path. Fetching results, webhooks, captioning, listings and other requests that do no GPU work.
Reading your limits from the API
Every API response carries your current state, so a client can slow down before it is refused rather than after.
RateLimit-Limit | Requests permitted in the current window. |
RateLimit-Remaining | Requests still available. Throttle against this one. |
RateLimit-Reset | Seconds until the window resets. |
Retry-After | Seconds to wait. Sent once the limit is exhausted. |
The legacy X-RateLimit-Limit and X-RateLimit-Remaining headers are still sent alongside these.
What a refusal looks like
The generation API reports every failure as HTTP 200 with an error body, so check status and code rather than the HTTP status:
{
"status": "error",
"code": "rate_limited",
"message": "Rate limit exceeded: Try again in 12 minute(s), ..."
}Wait for Retry-After and retry. Retrying immediately does not help — a refused request still counts, so a tight retry loop keeps the window full and extends the lockout.
Other limits
These apply to account and billing endpoints rather than to generation, and are unrelated to the caps above.
| Endpoint | Limit | Counted per |
|---|---|---|
| Agent control plane | 120 / minute | Per API token |
| Billing and wallet changes | 15 / minute | Per API token |
| Sign in and auth | 20 / minute | Per IP and email |
| Sign up | 3 / minute, 10 / hour, 20 / day | Per client IP |
| Model and voice listings | 10 / minute | Per IP |
Need more
A higher plan raises the window. Compare plans. If your workload does not fit any of them, an Enterprise deployment runs on GPUs reserved for you, with no shared-fleet cap at all.