Rate Limits
API usage quotas, context windows, and system constraints.
To ensure the reliability and stability of the Addis AI platform for all users, we enforce limits on the number of requests you can make over specific periods.
Tier Quotas
Limits are applied based on your organization's billing plan.
| Feature | Free / Sandbox | Pro / Team | Enterprise |
|---|---|---|---|
| RPM (Requests Per Minute) | 60 | 500 | Custom |
| RPD (Requests Per Day) | 1,000 | Unlimited | Unlimited |
| TPM (Tokens Per Minute) | 40,000 | 250,000 | Custom |
| Concurrency | 3 Requests | 50 Requests | Custom |
Hitting Limits?
If you consistently hit these limits, please contact Sales to discuss an Enterprise plan with dedicated throughput.
Model Constraints
Apart from rate limits, each model has technical constraints regarding input size and duration.
Text Generation
Audio (TTS & STT)
Vision
Documents
Response Headers
Every API response includes HTTP headers that tell you your current status.
| Header | Description |
|---|---|
x-ratelimit-limit-requests | The maximum number of requests allowed in the current window. |
x-ratelimit-remaining-requests | The number of requests remaining in the current window. |
x-ratelimit-reset-requests | The time (in seconds) until the window resets. |
Handling Rate Limits (429)
If you exceed a limit, the API will return a 429 Too Many Requests status. Your application should handle this gracefully using Exponential Backoff.
Do not retry immediately in a tight loop. Wait, then retry with increasing delays.
async function createWithBackoff(input, retries = 3, delay = 1000) {
try {
return await addis.chat.completions.create(input);
} catch (error) {
const status =
typeof error === "object" && error !== null && "status" in error
? error.status
: undefined;
if (status === 429 && retries > 0) {
await new Promise((resolve) => setTimeout(resolve, delay));
return createWithBackoff(input, retries - 1, delay * 2);
}
throw error;
}
}import time
def create_with_backoff(messages, retries=3, delay=1):
for i in range(retries + 1):
try:
return addis.chat.completions.create(messages=messages)
except Exception as error:
if getattr(error, "status", None) != 429:
raise
if i == retries:
raise
time.sleep(delay)
delay *= 2