Dashboard

Rate Limiting

Understanding request limits and managing API usage

1,000 req/hour
4 min read

Current Rate Limits

All API keys have the same generous limits

1,000
Requests per Hour
Per API Key
Concurrent Requests
No limit
IP Restrictions
Any IP allowed

Current Usage Example

347 / 1000 requests
34.7% used this hour653 requests remaining

How Rate Limiting Works

Understanding the sliding window approach

Per API Key

Each API key gets its own 1,000 requests per hour limit, regardless of how many keys you have.

Sliding Window

The limit resets continuously, not at fixed hours. It tracks requests made in the last 60 minutes.

No IP Limits

Your API key can be used from any IP address without additional restrictions.

Example Timeline

10:00 AM500 requests made
10:30 AM300 more requests
11:00 AM200 more requests
Total (last hour)1,000 / 1,000
At 11:01 AM: 500 from 10:00 AM are no longer counted

Rate Limit Headers

Every API response includes rate limit information

Response Headers

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 653
X-RateLimit-Reset: 1640995200
X-RateLimit-Used: 347
X-RateLimit-Limit

Maximum requests allowed per hour (always 1000)

X-RateLimit-Remaining

Number of requests remaining in current window

X-RateLimit-Reset

Unix timestamp when the oldest request expires

X-RateLimit-Used

Number of requests used in current window

JavaScript Example

const response = await fetch('https://your-domain.com/api/v1/leads', {
  headers: {
    'Authorization': 'Bearer sk-workspace_your_key',
    'Content-Type': 'application/json'
  }
});

// Check rate limit headers
const limit = response.headers.get('X-RateLimit-Limit');
const remaining = response.headers.get('X-RateLimit-Remaining');
const reset = response.headers.get('X-RateLimit-Reset');
console.log(`Resets at: ${new Date(reset * 1000)}`);

When Limits Are Exceeded

How to handle 429 responses gracefully

429 Too Many Requests Response

HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1640995800
Retry-After: 600

{
  "success": false,
  "error": "Rate limit exceeded",
  "code": "RATE_LIMIT_EXCEEDED",
  "details": {
    "limit": 1000,
    "remaining": 0,
    "resetTime": 1640995800,
    "retryAfter": 600
  }
}

✓ Best Practices

Monitor headers:

Always check X-RateLimit-Remaining

Implement backoff:

Wait and retry when hitting limits

Batch requests:

Combine multiple operations when possible

✗ What Not To Do

Ignore 429 responses:

This can lead to temporary blocks

Immediate retries:

Wait for the reset time

Multiple API keys:

Don't use multiple keys to bypass limits

Retry Logic Example

async function makeRequestWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const response = await fetch(url, options);
    
    if (response.status === 429) {
      const retryAfter = response.headers.get('Retry-After');
      const waitTime = retryAfter ? parseInt(retryAfter) * 1000 : 60000;
      
      if (attempt < maxRetries) {
        await new Promise(resolve => setTimeout(resolve, waitTime));
        continue;
      }
    }
    
    return response;
  }
  
  throw new Error('Max retries exceeded');
}

Monitoring Your Usage

Track your API usage and optimize requests

Workspace Dashboard

View detailed usage statistics for all your API keys in the workspace dashboard.

View Dashboard

Usage Metrics

Requests per hourReal-time tracking
Peak usage timesHistorical data
Error ratesIncluding 429 responses
Rate Limits Understood!

Now you know how to work within rate limits. Ready to explore the API endpoints and start building?

    PollyBot.ai - Smart Conversations, Seamless Automation