Skip to main content
All API endpoints are rate-limited to protect the service. Rate limits are enforced per IP address and backed by Redis.

Rate limit headers

Every response includes the following headers:
HeaderTypeDescription
X-RateLimit-LimitintegerMaximum requests allowed in the current window
X-RateLimit-RemainingintegerRequests remaining in the current window
X-RateLimit-ResetnumberUnix timestamp (seconds) when the window resets

Example headers

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1711234567

Rate limit windows

Different endpoint groups have different limits:
Endpoint groupLimitWindow
Conversations60 requests1 minute
Audit log30 requests1 minute
Audit log export10 requests1 minute
Community (public)30 requests1 minute
Stats (public)30 requests1 minute
Moderation120 requests15 minutes
Warnings120 requests15 minutes
Members120 requests15 minutes
OAuth initiation10 requests15 minutes
OAuth callback10 requests1 minute

When you are rate limited

When you exceed the rate limit, the API returns a 429 Too Many Requests response:
{
  "error": "Too many requests"
}
The response includes the standard rate limit headers. Use X-RateLimit-Reset to determine when you can retry.
# Example 429 response headers
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1711234600

Best practices

  • Check X-RateLimit-Remaining before making requests in a loop.
  • When you receive a 429, wait until X-RateLimit-Reset before retrying.
  • Use exponential backoff for retries to avoid hammering the server.
  • Cache responses where possible — public endpoints like /community and /stats already have server-side Redis caching.
Rate limiting is backed by Redis. If Redis is unavailable, rate limiting falls back to in-memory tracking per process.

Build docs developers (and LLMs) love