Skip to main content

Rate Limits

The API enforces rate limits per minute and per hour to ensure fair usage.

Limits

WindowLimit
Per minute60 requests
Per hour1,000 requests

Limits are applied per API key.

Response Headers

Every response includes rate limit headers:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1711929600
HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets

Handling 429 Responses

When you exceed the limit, the API returns 429 Too Many Requests:

{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Retry after 32 seconds.",
"retryAfter": 32
}
}

The Retry-After header tells you how long to wait (in seconds).

Best Practices

  • Use bulk endpoints/posts/bulk-schedule handles up to 100 posts in one request
  • Cache account data/accounts rarely changes, cache for 5-10 minutes
  • Implement exponential backoff — on 429 or 5xx responses
  • Monitor headers — check X-RateLimit-Remaining before making requests
// Example: exponential backoff
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const res = await fetch(url, options);
if (res.status === 429) {
const retryAfter = res.headers.get('Retry-After') || Math.pow(2, i);
await new Promise(r => setTimeout(r, retryAfter * 1000));
continue;
}
return res;
}
throw new Error('Max retries exceeded');
}

Platform & Plan Limits

In addition to API rate limits, posting volume is capped per plan. X (Twitter) has the most restrictive per-day limits due to platform API restrictions. Other platforms have higher or unlimited daily caps.

PlanDaily Posts (X/Twitter)AI CreditsSocial Accounts
Trial10/day50/month10
Starter50/day50/month10
Growth150/day500/month25
Pro500/day2,000/month40

When a posting limit is exceeded, the API returns a 429 response with a specific error message:

{
"data": null,
"error": {
"message": "Rate limit exceeded. Check Retry-After header for wait time.",
"code": "rate_limit_exceeded",
"details": {
"retry_after": 60,
"limit": 50,
"window": "day"
}
}
}

For bulk uploads, plan limits are validated before scheduling. If the batch would exceed your X daily limit or subscription limit, the response includes batchErrors describing which limits were hit.

Next Steps