Skip to content

Rate Limits

Standard Tier

  • 100 requests per minute per wallet address
  • Cached responses (within 30s) do NOT count toward rate limit
  • Free endpoints (/health, /) do NOT count

Premium Tier

  • 1000 requests per minute per wallet address
  • Contact sales@foursec.xyz to upgrade

Rate Limit Headers

Every response includes:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1688500000
HeaderDescription
X-RateLimit-LimitMax requests per minute
X-RateLimit-RemainingRemaining requests this minute
X-RateLimit-ResetUnix timestamp when limit resets

Exceeding the Limit

Returns 429 Too Many Requests:

{
  "error": "rate_limit_exceeded",
  "message": "Rate limit exceeded. Try again in 30 seconds.",
  "retry_after": 30
}

Best Practices

  1. Use caching — 30s cache means identical requests are free
  2. Implement retry logic with exponential backoff
  3. Batch related requests — fetch multiple symbols in parallel
  4. Monitor headers — check X-RateLimit-Remaining before bursting

Retry Example

import time

def request_with_retry(url, max_retries=3):
    for attempt in range(max_retries):
        response = client.get(url)
        if response.status_code != 429:
            return response.json()
        wait = 2 ** attempt
        print(f"Rate limited. Retrying in {wait}s...")
        time.sleep(wait)
    raise Exception("Max retries exceeded")

Released under the MIT License.