Limits
Most endpoints share the default limit. A small set of write endpoints have tighter limits based on the downstream operations they trigger.- Production
- Sandbox
POST /cards
POST /cards/:id/freezePOST /cards/:id/unfreezeDELETE /cards/:idPOST /cards/:id/revealPUT /cards/:id/pin
POST /companiesPOST /companies/:id/applications
Response headers
Every response includes the following headers so you can track usage without making extra requests.
Legacy
X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers are also returned for compatibility with older HTTP clients.
Exceeding the limit
When a request exceeds your limit, the API responds with429 Too Many Requests:
- The error body uses
code: RATE_LIMIT_EXCEEDED. - A
Retry-Afterheader is set to the number of seconds to wait before retrying.
Retry-After before retrying. Earlier retries will simply receive another 429 until the window resets.
Best practices
- Read the headers. Track
RateLimit-Remainingto back off proactively before the limit hits zero. - Honor
Retry-After. When you receive a429, wait at least the indicated number of seconds before retrying. - Use exponential backoff with jitter. If you must retry beyond the first attempt, increase the wait between retries and add randomness to avoid thundering herds.
- Spread out bulk operations. When onboarding many users or issuing many cards, pace requests against the per-minute and per-day limits rather than firing them as fast as possible.
- Need higher limits? Contact the Reap team if your use case genuinely requires more headroom. We tune limits per project where it makes sense.