Rate Limits
SendSeven enforces rate limits to ensure fair usage and platform stability.
Limits
| Endpoint Type | Limit |
|---|---|
| Standard endpoints | 100 requests/minute |
| Bulk operations | 10 requests/minute |
| Webhook deliveries | 1000 events/minute |
Rate limit headers
Every response includes rate limit information:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1706889600
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per window |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
When you hit the limit
A 429 Too Many Requests response is returned:
HTTP/1.1 429 Too Many Requests
Retry-After: 45
{
"detail": "Rate limit exceeded. Retry after 45 seconds.",
"error_code": "RATE_LIMITED"
}
Handling rate limits
Exponential backoff (recommended)
import time
import requests
def request_with_backoff(url, headers, max_retries=5):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code != 429:
return response
retry_after = int(response.headers.get("Retry-After", 2 ** attempt))
time.sleep(retry_after)
raise Exception("Max retries exceeded")
Tips to avoid rate limits
- Batch requests where possible instead of making individual calls
- Cache responses for data that doesn't change frequently (contacts, tags)
- Use webhooks instead of polling for real-time updates
- Respect
Retry-Afterheaders - don't retry immediately