Skip to main content

Rate Limits

Rate limits protect the API and ensure fair usage.

Limits by Plan

PlanRequests/minute
Free60
Starter300
Pro1000
EnterpriseUnlimited

Rate Limit Headers

Every response includes rate limit information:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1640000000
HeaderDescription
X-RateLimit-LimitRequests allowed per window
X-RateLimit-RemainingRequests remaining
X-RateLimit-ResetUnix timestamp when limit resets

Rate Limit Exceeded

When you exceed the limit:
HTTP/1.1 429 Too Many Requests
Retry-After: 30

{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Rate limit exceeded. Retry in 30 seconds.",
    "retry_after": 30
  }
}

Handling Rate Limits

Retry with Backoff

def api_request_with_retry(url)
  retries = 0
  begin
    response = HTTP.get(url)
    return response if response.status != 429

    retry_after = response.headers["Retry-After"].to_i
    sleep(retry_after)
    retries += 1
    retry if retries < 3
  rescue => e
    raise if retries >= 3
  end
end

Check Remaining Quota

response = HTTP.get(url)
remaining = response.headers["X-RateLimit-Remaining"].to_i

if remaining < 10
  Rails.logger.warn("API quota running low: #{remaining} remaining")
end

Burst Limits

In addition to per-minute limits, there are burst limits:
PlanBurst (per second)
Free10
Starter50
Pro100
Enterprise500

Endpoint-Specific Limits

Some endpoints have lower limits:
EndpointLimit
/api/v1/logs (write)Standard
/api/v1/logs (query)Standard
/api/v1/bulk10/minute
/api/v1/export5/minute

Increasing Limits

Need higher limits?
  1. Upgrade your plan - Higher plans have higher limits
  2. Contact sales - For custom enterprise limits
  3. Optimize usage - Batch requests where possible

Best Practices

  1. Use batch endpoints - Send multiple logs in one request
  2. Cache responses - Don’t re-fetch unchanged data
  3. Use webhooks - Instead of polling for updates
  4. Implement backoff - Respect retry-after headers