Rate Limit Tiers
| Tier | Requests/Hour | Burst/Minute |
|---|
| Standard | 1,000 | 100 |
| Premium | 5,000 | 500 |
Contact your account manager to upgrade to Premium tier.
All responses include rate limit information:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1706634000
| Header | Description |
|---|
X-RateLimit-Limit | Maximum requests per hour |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when limit resets |
Rate Limit Response
When rate limited, you’ll receive a 429 response:
{
"success": false,
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded",
"details": {
"retry_after": 3600,
"limit": 1000,
"remaining": 0
}
}
}
Best Practices
Implement exponential backoff
async function requestWithBackoff(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options);
if (response.status !== 429) {
return response;
}
const retryAfter = response.headers.get('Retry-After') || 60;
await new Promise(r => setTimeout(r, retryAfter * 1000));
}
throw new Error('Max retries exceeded');
}
Persona profiles rarely change. Cache them for 1 hour:const CACHE_TTL = 60 * 60 * 1000; // 1 hour
const cache = new Map();
async function getPersonas() {
const cached = cache.get('personas');
if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
return cached.data;
}
const data = await fetchPersonas();
cache.set('personas', { data, timestamp: Date.now() });
return data;
}
Send topics to multiple personas in one request instead of multiple requests:// Good: One request
await createTopic(content, [persona1, persona2, persona3]);
// Bad: Three requests
await createTopic(content, [persona1]);
await createTopic(content, [persona2]);
await createTopic(content, [persona3]);
Track your rate limit usage:function trackRateLimit(response) {
const remaining = response.headers.get('X-RateLimit-Remaining');
const limit = response.headers.get('X-RateLimit-Limit');
if (remaining < limit * 0.1) {
console.warn(`Rate limit warning: ${remaining}/${limit} remaining`);
}
}
Endpoint-Specific Limits
Some endpoints have additional limits:
| Endpoint | Limit |
|---|
POST /topics | 100/hour |
GET /personas | 1000/hour |
GET /topics/{id} | 1000/hour |
Need Higher Limits?
Contact [email protected] to discuss:
- Premium tier upgrades
- Enterprise custom limits
- Dedicated infrastructure