Usage Limits

Understand rate limits and quotas for the Reloop API.

Reloop enforces rate limits on API requests to ensure stability and fair usage across all organizations. Limits are applied per organization and tracked using a sliding window counter backed by Redis.

If a limit is exceeded, the API returns a 429 Too Many Requests response with a Retry-After header indicating how many seconds to wait.

Management Endpoint Limits

Management endpoints cover everything outside of email sending — domains, contacts, channels, groups, properties, API keys, and templates. Each endpoint category has its own independent limit.

Domain Service

OperationLimitWindow
Create Domain10 requests60s
Update Domain10 requests60s
Delete Domain10 requests60s
Verify DNS10 requests60s

Contacts Service

OperationLimitWindow
List Contacts60 requests60s
Get Contact60 requests60s
Create Contact200 requests60s
Update Contact30 requests60s
Delete Contact30 requests60s

Channels Service

OperationLimitWindow
List Channels60 requests60s
Get Channel60 requests60s
Create Channel30 requests60s
Update Channel30 requests60s
Delete Channel30 requests60s

Groups Service

OperationLimitWindow
List Groups60 requests60s
Get Group60 requests60s
Create Group30 requests60s
Update Group30 requests60s
Delete Group30 requests60s
Add Contact to Group30 requests60s
Remove Contact from Group30 requests60s

Contact Properties Service

OperationLimitWindow
List Properties60 requests60s
Create Property30 requests60s
Update Property30 requests60s
Delete Property30 requests60s

API Keys Service

OperationLimitWindow
Create API Key10 requests60s
Update API Key30 requests60s
Delete API Key20 requests60s
Rotate API Key20 requests60s
Enable / Disable API Key30 requests60s

Preferences Service

OperationLimitWindow
Generate Token30 requests60s
Update Preference30 requests60s

Email Sending Limits

The email sending endpoint (/api/mail/v1/send) uses a multi-layer rate limiting strategy. All five layers are checked in parallel — if any single layer is exceeded, the request is rejected.

LayerLimitWindowWhat It Protects
IP20 requests60sPrevents brute-force from a single source.
User50 requests60sStops abuse from a single user within an organization.
Organization100 requests60sPrevents runaway integrations per tenant.
Organization Daily5,000 requests24hHard daily cap per organization.
Global500 requests60sProtects infrastructure from DDoS.

When a sending request is rate limited, the error response tells you which layer was exceeded:

{
  "message": "Too Many Requests",
  "why": "Rate limit exceeded on the organization layer. You have sent too many requests in the current time window.",
  "fix": "Please wait 42 seconds before retrying, or contact support to increase your limits."
}

Rate Limit Headers

Every API response includes headers indicating your current rate limit status. The specific headers vary slightly between management and sending endpoints.

Management Endpoints

HeaderDescriptionExample
X-RateLimit-LimitMaximum requests allowed in the window.60
X-RateLimit-RemainingRequests remaining in the current window.48
X-RateLimit-WindowWindow size in seconds.60
Retry-AfterSeconds to wait before retrying (only on 429).12

Email Sending Endpoints

HeaderDescriptionExample
X-RateLimit-LimitMaximum requests for the tightest active layer.100
X-RateLimit-RemainingRequests remaining for the tightest active layer.73
X-RateLimit-ResetUnix epoch timestamp (seconds) when the window resets.1718284800
Retry-AfterSeconds to wait before retrying (only on 429).42

Best Practices

  • Monitor headers proactively. Check X-RateLimit-Remaining before it reaches zero to avoid disruptions.
  • Implement exponential backoff. When you receive a 429, wait for the duration specified in Retry-After, then retry with increasing delays if the limit is still exceeded.
  • Batch where possible. Use list endpoints with pagination instead of fetching resources one at a time.
  • Separate read and write traffic. Read operations (list, get) generally have higher limits than write operations (create, update, delete).

Was this page helpful?

Edit this page