Limits & Quotas

Rate Limit Tiers

Basic Tier (Free)

Activated automatically when you sign up. Includes $5 free credits.
EndpointRequests per MinuteDaily Limit
txt2img3100
img2img3100
txt2audio350
txt2video115
img2video115
aud2video115
txt2music115
transcribe350
vid2txt350
aud2txt350
videofile2txt350
audiofile2txt350
img2txt5100
txt2embedding10100
img-rmbg5100
img-upscale5100
videos/replace115
prompt/*10100

Premium Tier

Activated after making any payment. Unlocks higher limits across all endpoints.
MetricValue
Requests per Minute300 (all endpoints)
Daily LimitUnlimited

Rate Limit Headers

When rate limited (HTTP 429), the response includes these headers:
HeaderDescription
X-RateLimit-LimitMaximum requests per minute
X-RateLimit-RemainingRemaining requests in current window
X-RateLimit-Daily-LimitMaximum daily requests
X-RateLimit-Daily-RemainingRemaining daily requests
X-RateLimit-TypeWhich limit was hit: "minute" or "daily"
Retry-AfterSeconds until the limit resets
Response body:
{ "message": "Too Many Attempts." }

File Upload Limits

File TypeMax Size
Images10 MB
Audio files10 MB (20 MB for aud2video)
Video files10 MB
Audio/video duration600 minutes max

Retry Strategy

import requests
import time
import random

def request_with_retry(url, headers, payload=None, method="post",
                       max_retries=5, content_type="json"):
    for attempt in range(max_retries):
        if method == "post":
            if content_type == "json":
                resp = requests.post(url, headers=headers, json=payload)
            else:
                resp = requests.post(url, headers=headers, data=payload)
        else:
            resp = requests.get(url, headers=headers, params=payload)

        if resp.status_code != 429:
            resp.raise_for_status()
            return resp.json()

        limit_type = resp.headers.get("X-RateLimit-Type", "minute")
        retry_after = int(resp.headers.get("Retry-After", 5))

        if limit_type == "daily":
            raise Exception("Daily rate limit reached. Try again tomorrow.")

        wait = max(retry_after, (2 ** attempt) + random.uniform(0, 1))
        time.sleep(wait)

    raise Exception("Max retries exceeded")