Rate Limits

Learn how Sail's per-minute and per-second request limits work, and how to handle a 429 response.

Sail limits how many requests you can send so that no single integration can affect service for others. This page explains how the limits are applied, how to read your current standing from the response headers, and what to do when you exceed a limit.

How limits are applied

Limits apply per API key and per endpoint. Each endpoint has its own budget, so paging through expenses never uses up the capacity you need for pushing transactions.

Each endpoint has two windows running at the same time:

  • A sustained per-minute budget, which covers your normal traffic.
  • A per-second burst ceiling, which stops a full minute of requests from arriving at once.

A request must fit within both windows. If either one is full, the request is rejected.

Endpoint limits

Write-heavy endpoints have lower budgets than the rest of the API. The following limits apply to each of your API keys.

EndpointPer minutePer second
Create Users in Bulk1005
Push Transactions1005
Create User30015
All other endpoints60025
📘

Create Users in Bulk accepts up to 500 users per request, so a backfill costs far fewer requests than calling Create User in a loop.

Rate limit headers

Every response tells you where you stand, so you can pace your requests instead of guessing. The headers describe the sustained per-minute window.

RateLimit-Limit: 600
RateLimit-Remaining: 594
RateLimit-Reset: 37
RateLimit-Policy: 25;w=1, 600;w=60
HeaderDescription
RateLimit-LimitYour total budget for the sustained window.
RateLimit-RemainingRequests left in the current sustained window.
RateLimit-ResetSeconds until the sustained window rolls over.
RateLimit-PolicyEvery window in force, as limit;w=seconds. In the example above, 25 requests per 1 second and 600 per 60 seconds.

When you exceed a limit

Going over either window returns 429 rate_limited with a Retry-After header, given in seconds. Retry-After refers to the window that actually blocked the request, so a burst rejection asks you to wait a second rather than a minute.

Wait for the period given in Retry-After, then retry with exponential backoff. Polling through a 429 without waiting keeps you throttled.

Abuse protection limits

Two more limits apply before Sail reads your API key. They exist to contain abuse, not to shape normal traffic, and a correctly configured integration won't reach either one:

  • A ceiling on requests from a single source address.
  • A lockout after repeated authentication failures from one address.
📘

Deploy the new key before you revoke the old one. Retries that present a revoked credential count as authentication failures and can trigger the lockout.

Requesting a higher budget

If a migration or a backfill needs more capacity than these limits allow, contact Sail to discuss a higher budget. Splitting the work across parallel API keys to work around the limits is not supported.

Next steps

  • To handle rejected requests, see Errors for the full status and error code catalog.
  • To understand which key scope each endpoint needs, see Authentication.