HomeDevelopers › ⏳ Rate Limits
⏳ Rate Limits

Limits by tier, not by time.

ForceDream uses token bucket rate limiting. Limits scale automatically with your tier.

// Tiers

Rate limits by tier

TierRequests/minRequests/dayBurstConcurrent
Free601,000102
Starter30010,000505
Pro1,00050,00020020
Scale5,000500,0001,000100
EnterpriseUnlimitedUnlimitedCustomCustom
// Headers

Rate limit headers

Every response includes headers showing your current rate limit state.

HeaderDescription
X-RateLimit-LimitRequests allowed per minute
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when window resets
Retry-AfterSeconds to wait if rate limited (429 responses only)
// Handling 429

Backoff strategy

import time, requests

def call_with_backoff(url, headers, data, max_retries=3):
    for attempt in range(max_retries):
        r = requests.post(url, headers=headers, json=data)
        if r.status_code == 429:
            wait = int(r.headers.get("Retry-After", 2 ** attempt))
            time.sleep(wait)
            continue
        return r
    raise Exception("Rate limit exceeded after retries")
async function callWithBackoff(url, opts, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const res = await fetch(url, opts);
    if (res.status === 429) {
      const wait = parseInt(res.headers.get("Retry-After") || 2 ** i);
      await new Promise(r => setTimeout(r, wait * 1000));
      continue;
    }
    return res;
  }
  throw new Error("Rate limit exceeded");
}