Skip to main content
The Ark API has two types of limits to ensure fair usage and platform stability:
  • Rate Limits: Control how many API requests you can make per second
  • Send Limits: Control how many emails you can send per hour

Rate Limits

LimitValue
Requests per second10
Rate limits are applied per API key using a sliding window algorithm.

Rate Limit Headers

Every API response includes rate limit headers:
HeaderDescription
X-RateLimit-LimitMaximum requests per second
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when limit resets
Retry-AfterSeconds to wait (only on 429 responses)

Example Response Headers

HTTP/1.1 200 OK
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 9
X-RateLimit-Reset: 1705312800

Handling Rate Limits

When you exceed the rate limit, you’ll receive a 429 Too Many Requests response:
{
  "success": false,
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Rate limit exceeded",
    "suggestion": "Wait before retrying"
  },
  "meta": {
    "requestId": "req_abc123"
  }
}
All Ark SDKs automatically handle rate limits with exponential backoff.

Send Limits

Send limits control the maximum number of emails you can send per hour:
LimitDefault Value
Emails per hour100
Contact us if you need higher send limits for your use case.

What Happens When You Hit the Limit

  • New emails are held in a queue until capacity is available
  • Emails are not rejected, just delayed
  • The limit resets at the top of each hour

Send Limit Headers

Email-sending endpoints (POST /emails, POST /emails/batch, POST /emails/raw) include send limit headers:
HeaderDescription
X-SendLimit-LimitMaximum emails per hour (omitted if unlimited)
X-SendLimit-UsedEmails sent in current hour
X-SendLimit-RemainingEmails remaining in current hour (omitted if unlimited)
X-SendLimit-ResetUnix timestamp when limit resets (top of next hour)

Example Response Headers

HTTP/1.1 200 OK
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 9
X-RateLimit-Reset: 1705312260
X-SendLimit-Limit: 100
X-SendLimit-Used: 42
X-SendLimit-Remaining: 58
X-SendLimit-Reset: 1705312800
If you have unlimited sending, the X-SendLimit-Limit and X-SendLimit-Remaining headers are omitted.

Checking Your Limits Programmatically

Use the GET /usage endpoint to check your current usage status:
curl https://api.arkhq.io/v1/usage \
  -H "Authorization: Bearer YOUR_API_KEY"

SDK Automatic Retries

All Ark SDKs automatically handle rate limits with exponential backoff:
from ark import Ark

# SDKs automatically retry rate-limited requests
# Default: 2 retries with exponential backoff
client = Ark()

# Customize retry behavior
client = Ark(max_retries=5)  # More retries
client = Ark(max_retries=0)  # Disable retries

Best Practices

1. Use SDK Auto-Retries

The SDKs handle rate limits automatically. Just send your requests and they’ll retry with backoff:
# Just send emails - SDK handles rate limits automatically
for user in users:
    client.emails.send(
        from_="notifications@yourdomain.com",
        to=[user.email],
        subject="Update",
        html="<p>Hello!</p>"
    )

2. Use Batch Endpoints

Instead of making multiple individual requests, use the batch endpoint:
# Instead of this (100 requests)
for email in emails:
    client.emails.send(**email)

# Do this (1 request)
client.emails.send_batch(emails=emails)

3. Monitor Your Usage

Check your usage regularly with the usage endpoint or dashboard:
usage = client.usage.retrieve()

if usage.send_limit.limit:
    percent_used = (usage.send_limit.used / usage.send_limit.limit) * 100
    if percent_used > 80:
        print(f"Warning: {percent_used:.0f}% of hourly send limit used")

4. Use Exponential Backoff

The SDKs handle exponential backoff automatically. Configure the number of retries:
from ark import Ark

# Configure max retries - SDK uses exponential backoff automatically
client = Ark(max_retries=5)

# All requests will retry up to 5 times with exponential backoff
# for rate limits, timeouts, and server errors
email = client.emails.send(
    from_="hello@yourdomain.com",
    to=["user@example.com"],
    subject="Hello",
    html="<p>Hello!</p>"
)

Endpoint-Specific Limits

Email Sending

EndpointLimitValue
POST /emailsTo recipients50 per email
POST /emailsCC recipients50 per email
POST /emailsBCC recipients50 per email
POST /emailsSubject length998 characters
POST /emailsTag length1000 characters

Batch Emails

EndpointLimitValue
POST /emails/batchEmails per request100
POST /emails/batchRecipients per email50
POST /emails/batchTotal recipients1000 across all emails

Pagination

EndpointDefaultMaximum
GET /emails30 per page100 per page
GET /suppressions30 per page100 per page

Suppressions

EndpointLimitValue
POST /suppressions/bulkSuppressions per request1000

Need Higher Limits?

If you need higher rate limits or send limits for your use case, contact us:

Contact Support

Request higher limits for your needs