Rate Limits

Guidelines for Blue API rate limiting


The Blue API enforces rate limits on all API and personal access token (PAT) requests to ensure fair usage and platform stability. Limits are applied per second using a sliding window and vary by tier. Adding the Pro add-on doubles your tier’s limits.

Rate Limits by Tier

All limits are requests per second, across three layers. Each layer is checked independently — every request must pass all three to succeed.

TierPer API keyPer userPer org
Starter20 req/s40 req/s60 req/s
Starter+30 req/s60 req/s90 req/s
Growth50 req/s100 req/s150 req/s
Growth+100 req/s200 req/s300 req/s
Scale200 req/s400 req/s600 req/s
With Pro2× tier2× tier2× tier
Enterprise1,000 req/s2,000 req/s3,000 req/s

How It Works

Rate limits are checked in three layers for each request:

  1. Per API key — limits individual token usage, preventing a single integration from consuming all capacity
  2. Per user — limits total usage across all of a user’s tokens, preventing key rotation bypass
  3. Per org — a hard ceiling on all API activity within an organization

All three layers must pass for a request to succeed. If any layer is exceeded, the request is rejected with a 429 status code.

Response Headers

Every API response includes rate limit headers based on the tightest (closest to limit) layer:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp (seconds) when the window resets
Retry-AfterSeconds to wait before retrying (only on 429 responses)

Error Response

When a rate limit is exceeded, you’ll receive a 429 Too Many Requests response:

{
  "error": "RATE_LIMITED",
  "message": "Too many requests. Limit: 20 per second.",
  "retryAfter": 12
}

Operation-Specific Limits

Certain sensitive operations have additional per-operation limits, independent of the global limits above:

OperationRate LimitWindow
signIn5 requests60 seconds
signInRequest3 requests120 seconds
createDocument5 requests60 seconds
sendTestEmail5 requests60 seconds
submitForm5 requests60 seconds
exportTodos1 request50 seconds
deleteCompany3 requests60 seconds
updateEmail3 requests60 seconds
verifyAcceptInvitation3 requests60 seconds
verifySecurityCode3 requests60 seconds

Best Practices

  1. Check response headers — monitor X-RateLimit-Remaining to anticipate limits before hitting them
  2. Respect Retry-After — when you receive a 429, wait the specified number of seconds before retrying
  3. Use a single API key per integration — avoid spreading requests across multiple keys to work around per-key limits, as user and org limits still apply
  4. Batch where possible — use Blue’s GraphQL API to fetch multiple resources in a single request
  5. Add Pro for 2× headroom — the Pro add-on doubles all three rate limit layers on any tier

For questions about rate limits or to discuss Enterprise limits, please contact our support team.