Developer Docs
Rate Limits
Browse documentation
Introduction
API Reference
Account & Billing
Rate limiting is a separate concern from account balance. You can
have plenty of balance and still receive a 429
if you send too many requests to an endpoint too quickly — the two checks are independent.
Never assume a
429 means you're out
of money, and never assume a 402
means you're being throttled — check error.code
in the response body, not just the HTTP status family.How limits are applied
- Limits are enforced per API key, per endpoint — a burst on one key doesn't affect your other keys.
- Both
POST /v1/virtual-try-onandGET /v1/virtual-try-on/{request_id}are rate limited independently. - Exceeding the limit returns
429 rate_limit_exceeded— the request is rejected before processing, so it is never billed. - Specific limit values aren't fixed forever and may be tuned per endpoint or account over time — the reliable way to handle rate limiting is to code defensively against a 429, not to hardcode an assumed number.
The 429 response
429 Too Many Requests
{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests. Please slow down and try again shortly."
}
}
Handling it
- Treat
429as retryable — back off and try again rather than failing the user's request outright. - Use exponential backoff with jitter (e.g. wait 1s, then 2s, then 4s...) instead of retrying immediately in a tight loop.
- If your integration needs sustained high throughput, batch or queue requests on your side rather than firing them all at once.
- For asynchronous categories, poll the status endpoint at a reasonable interval (a few seconds) rather than continuously — or better, use a webhook and avoid polling entirely.
Related: Errors for the full error code reference, and Webhooks to avoid polling-driven rate limit pressure on async jobs.