Steam Web API rate limit exceeded: the fix.
Valve's Steam Web API Terms of Use limit each key to 100,000 calls per day. Past that, or when calls arrive too fast, Steam answers 429 Too Many Requests. Cache responses, batch IDs into one call, and stop polling for data that has not changed.
- 100,000 calls / day / key
- Then HTTP 429
- Cache + batch
{ "success": true, "data": [ { "id": "cs2-match-2398974", "eventName": "ROG JOURNEY Autumn 2026", "bestOf": 3, "team1Name": "Ninjas in Pyjamas", "team2Name": "Eternal Fire", "score": { "team1": 2, "team2": 0 } }, { "id": "cs2-match-2398896", "eventName": "FOX Legacy Season 1", "bestOf": 3, "team1Name": "SAW", "team2Name": "Lazer Cats", "score": { "team1": 2, "team2": 0 } } ... ]}The error
HTTP/1.1 429 Too Many Requests
(api.steampowered.com)What is the Steam Web API rate limit?
The Steam Web API Terms of Use set the limit at 100,000 calls to the Steam Web API per day, per key. Valve's list of response codes includes 429 Too Many Requests for rate-limited callers. Valve does not document a Retry-After header.
Why do apps hit it?
100,000 a day is about 69 calls a minute around the clock. Apps hit it by polling every user on a timer, by calling once per Steam ID instead of batching, and by retrying failures immediately, which multiplies the traffic exactly when Steam is already refusing it.
- Per-user polling: 2,000 users checked every 30 minutes is 96,000 calls a day on its own.
- One call per ID where the method accepts a comma-separated list (GetPlayerSummaries takes up to 100 Steam IDs).
- Immediate retries in a loop after a 429 or a 5xx.
- Calls that earn 403s: Valve applies stricter per-IP limits to traffic that keeps generating 403 responses.
How do I stay under the limit?
Count your calls, cache every response for as long as the data stays valid, batch IDs, and back off when Steam pushes back. The code below does all four.
import time, requests
from functools import lru_cache
KEY = "YOUR_STEAM_WEB_API_KEY"
DAILY_BUDGET = 90_000 # stay under Valve's 100,000 with headroom
calls_today, day = 0, time.strftime("%Y-%m-%d")
def steam_get(url, params, tries=5):
global calls_today, day
if time.strftime("%Y-%m-%d") != day:
calls_today, day = 0, time.strftime("%Y-%m-%d")
if calls_today >= DAILY_BUDGET:
raise RuntimeError("daily Steam budget used up")
for attempt in range(tries):
calls_today += 1
r = requests.get(url, params={**params, "key": KEY}, timeout=10)
if r.status_code != 429 and r.status_code < 500:
r.raise_for_status()
return r.json()
time.sleep(min(60, 2 ** attempt)) # 1, 2, 4, 8, 16 s
r.raise_for_status()
@lru_cache(maxsize=10_000)
def summaries(ids: tuple[str, ...]):
# one call for up to 100 Steam IDs instead of 100 calls
return steam_get("https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/",
{"steamids": ",".join(ids)})How does the CS2 API make this error impossible?
If the data you need is professional CS2 (matches, scores, player ratings, rankings), Steam does not have it at all, so no amount of budgeting helps. The CS2 API serves it from its own index, and its limits are published per plan with standard Retry-After and X-RateLimit headers on every 429.
| Plan | Requests / month | Requests / minute |
|---|---|---|
| Free | 500 | 10 |
| Starter ($15) | 10,000 | 30 |
| Pro ($59) | 250,000 | 100 |
| Scale ($100) | 1,000,000 | 400 |
Frequently asked questions
Something missing? Email support@citoapi.com.
What is the Steam Web API daily limit?
100,000 calls per day per API key, set by the Steam Web API Terms of Use.
Can I get a higher Steam Web API limit?
Valve does not publish a way to raise it for regular keys. Reduce calls with caching and batching instead.
Does the Steam Web API send Retry-After?
Valve does not document one. Use exponential backoff after a 429 rather than waiting for a header.
Does the CS2 API have rate limits?
Yes, published per plan: from 10 requests a minute on Free to 400 on Scale. A 429 from the CS2 API carries Retry-After and X-RateLimit-Reset so a client knows exactly how long to wait.
Related
- Steam API rate limitsThe Steam Web API's limits, what happens past them, and how to stay under.
- CS2 API pricingFree, Starter, Pro and Scale: requests, live delay and history per plan.
- Steam API 429 Too Many RequestsThrottled by Steam: backoff that works and how to stop triggering it.
- Steam Web API for CS2 tutorialStep by step through Steam's CS2 methods, and where they stop.
- Steam CS2 APIWhat Valve's Steam Web API covers for CS2, and the match-data gap.
- CS2 API documentationAuth, the response envelope, errors, rate limits and every endpoint.
Build CS2 live score apps
Free is for building and testing. Paid plans add commercial use, real-time live data and the full archive.