AlterLabAlterLab
Reference

Rate Limits & Quotas

Understand AlterLab's rate limits, concurrency caps, and payload restrictions to optimize your integration.

Rate Limits

Rate limits are applied per API key and scale with your account balance:

TierBalanceRequests/Minute
Starter$0 - $5030
Growth$50 - $200100
Scale$200 - $500300
High Volume$500+500
EnterpriseCustom1000+

Soft Limits

These are soft limits. Brief bursts above the limit are allowed, but sustained overages will result in 429 errors.

Concurrency Limits

Maximum number of requests that can be processed simultaneously. Add funds to instantly unlock higher limits:

Account BalanceTierConcurrent RequestsRequests/Minute
$0 - $50Starter330
$50 - $200Growth10100
$200 - $500Scale25300
$500+High Volume50500
EnterpriseEnterprise100+1000+

Instant Upgrades

Tier upgrades are instant. Add funds to your account and immediately get higher concurrency limits—no waiting period.

Payload Limits

Limit TypeValueNotes
Request Body Size1 MBMaximum size of JSON request
Response Size50 MBMaximum scraped content size
URL Length8,192 charsMaximum URL length
Headers Size32 KBTotal custom headers size
Extraction Schema64 KBMaximum JSON schema size
Extraction Prompt4,000 charsMaximum prompt length

Timeout Limits

OperationDefaultMaximum
Sync Request90 seconds300 seconds
Sync Polling (internal)60 seconds120 seconds
Async Job300 seconds600 seconds
Wait for Selector30 seconds60 seconds
PDF/OCR Processing120 seconds300 seconds

Long-Running Jobs

For operations that may exceed 60 seconds, use sync: false to get a job ID and poll for results.

Batch Limits

LimitValue
URLs per batch request1,000
Concurrent batches5
Batch result retention24 hours

Rate Limit Headers

Every response includes headers to help you track your rate limit status:

Response Headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1704067200
X-Concurrency-Limit: 5
X-Concurrency-Current: 2
Retry-After: 30  # Only on 429 responses
X-RateLimit-LimitMaximum requests per minute
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when limit resets
Retry-AfterSeconds to wait before retrying (429 only)

Handling Rate Limits

1. Check Headers

Monitor X-RateLimit-Remaining and slow down before hitting the limit.

2. Implement Exponential Backoff

On 429 errors, wait and retry with increasing delays: 1s, 2s, 4s, 8s...

import time

def scrape_with_retry(url, max_retries=5):
    for attempt in range(max_retries):
        response = requests.post(...)
        if response.status_code == 429:
            wait = 2 ** attempt  # Exponential backoff
            time.sleep(wait)
            continue
        return response
    raise Exception("Max retries exceeded")

3. Use Batching

Batch requests are processed more efficiently and don't count against per-minute limits the same way.

4. Queue Requests

Use a job queue (Redis, RabbitMQ) to throttle requests and handle retries gracefully.

Increasing Limits

Add Funds

Your limits automatically increase as your account balance grows. See the tier tables above.

Enterprise Plans

For custom limits, dedicated infrastructure, or SLA guarantees, contact our sales team.

Need Higher Limits?

Email [email protected] with your use case and we'll work with you on custom limits.