Skip to main content

Rate Limiting

The Arsel API enforces per-organization rate limits to ensure fair usage and platform stability. Limits are applied per second across all API keys belonging to the same organization.

Default Limits

The API allows 2 requests per second per organization. The limit is shared across every API key in the organization — adding more keys does not raise the ceiling. There is no separate burst allowance; requests above the limit are rejected immediately with 429.

If you need a higher rate limit, contact support@arsel.sa to discuss your requirements.

Rate limit vs. monthly quota

This page covers per-second request limits. Your plan also has a monthly send quota for email and SMS. Exhausting the monthly quota returns 429 monthly_quota_exceeded — a separate error that retrying won't resolve. See Common Send Errors.

Rate Limit Headers

Every API response includes standard rate limit headers:

HeaderDescription
ratelimit-limitMaximum requests allowed in the current window
ratelimit-remainingRequests remaining in the current window
ratelimit-resetUnix timestamp when the window resets

When a rate limit is exceeded, an additional header is included:

HeaderDescription
retry-afterSeconds to wait before retrying

Rate Limit Exceeded

If you exceed the limit, the API returns HTTP 429:

{
"status_code": 429,
"name": "rate_limit_exceeded",
"message": "Too many requests. Please retry after the period indicated in the retry-after header."
}

Handling Rate Limits

Read the headers. Check ratelimit-remaining before sending additional requests.

Implement exponential backoff. When you receive a 429, wait for the duration specified in retry-after before retrying. Avoid tight retry loops.

Spread requests over time. If you need to send a batch of messages, space them out rather than sending them all at once.