Back to Documentation

Rate Limits & Quotas

Understanding API rate limits and usage quotas for SEER

Rate Limits by Plan
API request limits based on your subscription tier

Free Plan

Free
API Requests86,400/day
Pipelines5 active
Data Retention7 days
Rate Limit100 req/min

Pro Plan

Recommended
API Requests86,400/day
PipelinesUnlimited
Data RetentionUnlimited
Rate Limit100 req/min
Rate Limit Headers
Every API response includes rate limit information
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1705334400

{
  "status": "success",
  "message": "Job status updated"
}
X-RateLimit-Limit

Maximum requests per minute

X-RateLimit-Remaining

Requests remaining in current window

X-RateLimit-Reset

Unix timestamp when limit resets

Handling Rate Limits
Best practices for staying within rate limits

1. Automatic Retry with Backoff

The seerpy SDK automatically handles rate limits with exponential backoff:

from seerpy import Seer

seer = Seer(apiKey='YOUR_API_KEY')

# SDK automatically retries on 429 (Too Many Requests)
with seer.monitor("my-job"):
    # Your code here
    pass

# Retry schedule:
# - 1st retry: 1 second
# - 2nd retry: 2 seconds  
# - 3rd retry: 4 seconds

2. Batch Operations

Group multiple operations into a single monitored block:

# ❌ Bad: Multiple API calls
for item in items:
    with seer.monitor(f"process-{item}"):
        process(item)

# ✅ Good: Single API call for batch
with seer.monitor("process-batch", 
                  metadata={"count": len(items)}):
    for item in items:
        process(item)

3. Use Heartbeats Sparingly

Send heartbeats at reasonable intervals:

import time

# ❌ Bad: Too frequent
for i in range(1000):
    seer.heartbeat("my-job")  # 1000 API calls!
    process_item(i)

# ✅ Good: Reasonable intervals
for i in range(1000):
    if i % 100 == 0:  # Every 100 items
        seer.heartbeat("my-job", 
                      metadata={"progress": f"{i}/1000"})
    process_item(i)
429 Too Many Requests
What happens when you exceed rate limits
HTTP/1.1 429 Too Many Requests
Retry-After: 60
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1705334460

{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Please retry after 60 seconds.",
  "retry_after": 60
}

SDK Behavior

  • Automatically waits for the Retry-After duration
  • Retries the request up to 3 times
  • If all retries fail, saves payload locally for manual recovery
  • Your pipeline continues running
Monitoring Your Usage
Track your API usage in the dashboard

Dashboard → Usage

View real-time API usage and remaining quota

Usage Alerts

Get notified at 80% and 95% of your quota

Historical Data

View usage trends over time

Best Practices Summary

Batch operations when possible

Reduce API calls by grouping work

Use heartbeats strategically

Send at reasonable intervals (every 5-10 minutes)

Monitor your usage

Check dashboard regularly to avoid surprises

Let the SDK handle retries

Built-in exponential backoff handles rate limits