Skip to content

Rate Limits

Tier Requests/minute CVE searches/day SAGE queries/month
Free 10 50 5
Standard 60 500 50
Professional 300 Unlimited 500
API 1,000 Unlimited Unlimited
Enterprise Custom Unlimited Unlimited

Handling Rate Limits

When you hit a rate limit you receive HTTP 429 with error code RATE_LIMITED.

import time
import requests

def api_request(url, headers, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)
        if response.status_code == 429:
            retry_after = int(response.headers.get("Retry-After", 60))
            time.sleep(retry_after)
            continue
        return response
    raise Exception("Rate limit exceeded after retries")

Pagination for Large Datasets

Always paginate large requests rather than fetching all at once.

def fetch_all_cves(api_key, severity="CRITICAL"):
    headers = {"Authorization": f"Bearer {api_key}"}
    base_url = "https://breachspider.com/api/v1/cves"
    page = 1

    while True:
        response = requests.get(
            f"{base_url}?severity={severity}&page={page}&limit=100",
            headers=headers
        )
        data = response.json()
        yield from data["data"]

        if not data["pagination"]["has_next"]:
            break
        page += 1