Public API
This page is Catalog. Glance / Catalog is in Design.
JSON endpoints over HTTPS. No API keys or accounts required. CORS supports GET, HEAD, POST, and OPTIONS. Standard rate limits apply at 120 requests per minute per IP address, no more than 20 of those in any 10 seconds, and 120 distinct titles per hour. Past 20 in 10 seconds, further requests are refused for 10 seconds. JSON responses are cached for 30 seconds; the CSV export is updated as a 5-minute snapshot. Operated by Musical Pig LLC.
Over the rate limit the API returns HTTP 429. Title search q is at most 80 characters. Errors use JSON { "error": "…" } with the matching HTTP status. Use is subject to the Terms of Service. What we count, and what we do not store, is in the Privacy Policy.
Want a chart or a title card on another site? Build an iframe on embed.ludodb.com. That host is for widgets, not JSON.
Host
https://api.ludodb.comSend JSON here
www.ludodb.com is the catalog site, not the API. A browser can open either. Scripts should call the API host.
curl https://api.ludodb.com/api/v1/health
Catalog10Health, lists, search, CSV
GET /api/v1/healthService healthhttps://api.ludodb.com/api/v1/health{ "ok": true, "name": "ludodb", "operator": "Musical Pig LLC", "operatorUrl": "https://musical-pig.com", "steam": { "exhausted": false }, "slow": false, "catalog": { "titles": 2864, "limit": 15000, "priced": 2654 }, "notices": [] }Public health has no volume or CPU numbers. steam.exhausted pauses live Steam polls.
GET /api/v1/pulseHomepage railshttps://api.ludodb.com/api/v1/pulse{ "comingSoon": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "updated": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "mostPlayed": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "topRated": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "deals": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "gems": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "moving": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "week": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ] }Homepage rails as slim AppCard arrays. comingSoon is New on the store. Live lists are longer.
GET /api/v1/catalogFull sampled cataloghttps://api.ludodb.com/api/v1/catalog?cc=us[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]AppCard[]. Optional cc selects the display price region (us, eu, gb, …).
GET /api/v1/catalog/liteSlim catalog cards for list pageshttps://api.ludodb.com/api/v1/catalog/lite?cc=us[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false, "dlc": [], "editions": [] } ]Same titles as /catalog without descriptions, DLC, or editions. spark24 stays so list cards can draw the 24h sparkline.
GET /api/v1/catalog/ccuSummed in-game count over timehttps://api.ludodb.com/api/v1/catalog/ccu{ "current": 4147266, "sampledAt": "2026-09-08T23:31:38Z", "series": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }Sum of sampled in-game counts. series is { t, v }[] with t in unix seconds. Default is all-time downsampled plus the last 7 days raw.
GET /api/v1/studio?name=Titles for one developer or publisherhttps://api.ludodb.com/api/v1/studio?name=Valve&cc=us[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]AppCard[] for one developer or publisher name. A name matches a whole studio token, not a substring. Ordered by in-game count, at most 120.
GET /api/v1/catalog/ccu?from=&to=Catalog in-game series, raw window (unix seconds, max 7 days)https://api.ludodb.com/api/v1/catalog/ccu?from=1788660090&to=1789264890{ "current": 4147266, "sampledAt": "2026-09-08T23:31:38Z", "series": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }from and to are unix seconds. Window is at most 7 days. series is raw samples in that window. Omit both for the default series. current is still the latest catalog total.
GET /api/v1/policyNo-edit statementhttps://api.ludodb.com/api/v1/policy{ "statement": "LudoDB does not hide, edit, or omit player counts or prices after ingest. Corrections are append-only.", "chartsEdited": false, "publisherOptOut": false, "operator": "Musical Pig LLC", "operatorUrl": "https://musical-pig.com", "recentIngests": [ { "kind": "ingest", "count": 100, "fingerprint": "abc123", "note": "730", "at": "2026-09-08T00:00:00Z" } ] }GET /api/v1/apps?q=Title search (max 80 characters)https://api.ludodb.com/api/v1/apps?q=counter[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]AppCard[]. q is at most 80 characters. Add local=1 to skip the Steam store fallback.
GET /api/v1/export/apps.csvCSV dumphttps://api.ludodb.com/api/v1/export/apps.csvappid,name,currentPlayers,usCents 730,Counter-Strike 2,499779,0
text/csv snapshot, refreshed about every five minutes. Not JSON.
Charts12Most played, gems, movers, sales
GET /api/v1/charts/playersMost played (top 100)https://api.ludodb.com/api/v1/charts/players[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]AppCard[] — top 100 by current players.
GET /api/v1/charts/gemsHidden gems filterhttps://api.ludodb.com/api/v1/charts/gems[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]AppCard[] after the hidden-gems filter.
GET /api/v1/charts/lookupsMost opened titles (hashed unique-ish views)https://api.ludodb.com/api/v1/charts/lookups[ { "appid": 730, "name": "Counter-Strike 2", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "hits": 16, "firstAt": "2026-09-06T21:00:00Z", "lastAt": "2026-09-08T23:00:00Z", "hours": 11, "peakHourHits": 3 } ]Unique-ish game-page opens. Query text and IPs are not stored.
GET /api/v1/charts/searchesTitles that appeared in search (query text is not stored)https://api.ludodb.com/api/v1/charts/searches[ { "appid": 730, "name": "Counter-Strike 2", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "hits": 4, "firstAt": "2026-09-07T18:00:00Z", "lastAt": "2026-09-08T22:00:00Z", "hours": 3, "peakHourHits": 2 } ]Titles that appeared in search. The search string is not stored.
GET /api/v1/charts/moversUnusual in-game counts versus that title's typical hour of weekhttps://api.ludodb.com/api/v1/charts/movers[ { "appid": 730, "name": "Counter-Strike 2", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "currentPlayers": 900000, "expected": 620000, "residualPct": 45, "delta24h": 12000, "steamDeck": "playable", "mature": false, "reviewPositive": 8452479, "reviewNegative": 1387191, "reviewDelta": 420 } ]Ranked by residual after that title's typical hour of week, not raw percent. Titles below about 150 in-game stay out. No extra Steam calls.
GET /api/v1/charts/new?days=90Released titles in a lookback (7, 30, 90, 182, or 365 days)https://api.ludodb.com/api/v1/charts/new?days=90[ { "appid": 730, "name": "Counter-Strike 2", "releaseDate": "Aug 21, 2012", "currentPlayers": 499779 } ]Released titles whose store date falls in the lookback. Coming soon stays out. Days are 7, 30, 90, 182, or 365.
GET /api/v1/charts/deals?cc=usOn-sale titles for a region (top 200)https://api.ludodb.com/api/v1/charts/deals?cc=us[ { "appid": 730, "name": "Counter-Strike 2", "priceCents": 0, "priceInitialCents": 0 } ]Current sampled discounts for the region, highest percent first. Not the full catalog.
GET /api/v1/charts/upcomingComing-soon titleshttps://api.ludodb.com/api/v1/charts/upcoming[ { "appid": 730, "name": "Counter-Strike 2", "comingSoon": true, "releaseDate": "Dec 1, 2026" } ]Sampled titles marked coming soon. Dates can be placeholders.
GET /api/v1/charts/trackedPlayer-poll bands and the tracked in-game ladderhttps://api.ludodb.com/api/v1/charts/tracked{ "counts": [ 150, 1850, 3000, 10000 ], "titles": [ { "appid": 730, "name": "Counter-Strike 2", "currentPlayers": 499779 } ] }Poll-band counts for the tracked ladder, plus every title on that ladder by people in-game.
GET /api/v1/salesSale calendarhttps://api.ludodb.com/api/v1/sales[ { "name": "Steam Autumn Sale 2026", "kind": "seasonal", "starts": "2026-10-01T00:00:00Z", "ends": "2026-10-08T00:00:00Z", "source": "https://partner.steamgames.com/doc/marketing/upcoming_events" } ]GET /api/v1/deals?cc=usCurrent discounts for a regionhttps://api.ludodb.com/api/v1/deals?cc=us[ { "appid": 570, "name": "Dota 2", "cc": "us", "currency": "USD", "cents": 0, "initialCents": 0, "discount": 0 } ]cc is a store region. cents are the current price in the smallest currency unit.
GET /api/v1/updatesRecent depot build IDshttps://api.ludodb.com/api/v1/updates[ { "appid": 730, "name": "Counter-Strike 2", "buildId": 20458890, "branch": "public", "at": "2026-08-24T23:39:20Z" } ]Recent depot build IDs LudoDB has sampled.
One title13Card, players, prices, news
GET /api/v1/apps/{id}App cardhttps://api.ludodb.com/api/v1/apps/730{ "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false }Optional ?cc=us for regional price fields. Live objects may also include dlc, editions, and spark24.
GET /api/v1/apps/{id}/similarSame tags, similar review volumehttps://api.ludodb.com/api/v1/apps/730/similar[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]Slim AppCard[]. Shares at least one of this title's first three store tags and the same review-count band. A mechanical overlap, not a recommendation.
GET /api/v1/apps/{id}/playersPlayer serieshttps://api.ludodb.com/api/v1/apps/730/players{ "appid": 730, "current": 492943, "peak24h": 1337437, "peakAll": 1337437, "intervalMs": 60000, "sampledAt": "2026-09-08T23:31:00Z", "steam": { "exhausted": false }, "gapFill": { "active": false, "since": null, "series": [] }, "onLadder": true, "rank": 1, "ladderMs": 300000, "series": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }series is { t, v }[] (t unix seconds, v in-game count). Default is all-time downsampled to about 2000 min/max points plus the last 7 days at full poll cadence. gapFill.active is true only when catalog-wide Steam samples are stale; the fill series is an hour-of-week guess, not a live count and not a maintenance zero. intervalMs is the open-page sample, often 60s. rank and ladderMs match /rank and are the chart timer.
GET /api/v1/apps/{id}/rankCCU rank and the chart update timer (5m, 15m, 1h, 4h)https://api.ludodb.com/api/v1/apps/960910/rank{ "appid": 960910, "rank": 1842, "onLadder": true, "ladderMs": 900000, "band": "15m" }Chart update timer. rank is the 1-based in-game place. ladderMs is the rank poll: 300000 (ranks 1–150), 900000 (151–2000), 3600000 (2001–5000), 14400000 (5001–15000). Off the ladder: rank 0, onLadder false, ladderMs 0, band out. This route does not watch the title and does not take a Steam sample. The 60s interval on /players is the open-page sample, not this timer.
GET /api/v1/apps/{id}/players?from=&to=Player series, raw window (unix seconds, max 7 days)https://api.ludodb.com/api/v1/apps/730/players?from=1788660090&to=1789264890{ "appid": 730, "current": 492943, "peak24h": 1337437, "peakAll": 1337437, "intervalMs": 60000, "sampledAt": "2026-09-08T23:31:00Z", "steam": { "exhausted": false }, "series": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }from and to are unix seconds. Window is at most 7 days. series is raw samples in that window. Omit both for the default series. Same JSON shape as /players.
GET /api/v1/apps/{id}/forecast?horizon=7dPlayer estimates (24h, 7d, 14d, 21d, 30d)https://api.ludodb.com/api/v1/apps/730/forecast?horizon=24h{ "ok": true, "horizonHours": 24, "lines": { "fit": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ], "low": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ], "likely": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ], "high": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ], "tags": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }, "mapePct": 14, "missPct": 18, "trajectory": "steady", "peak": { "t": 1788746490, "v": 512000 }, "model": { "now": 499779, "daily": 0.012, "sigma": 0.14, "mapePct": 14, "season": "title", "trajectory": "steady", "kind": "steady" } }horizon is 24h, 7d, 14d, 21d, or 30d. ok is false with reason short_history when too few samples exist (horizonHours is still set). tags is omitted without a tag cohort. fit is the same model drawn on hours already sampled. trajectory is launch, sale, growth, or steady. model.kind is fade (launch and post-discount: also floor and halfLifeHours), growth (climbing weeks: also ceiling), or steady. mapePct is the hour-of-week residual as a percent, used for the low/high band. missPct is a 48-hour walk-forward miss on titles with enough history, not an accuracy badge. peak is the highest likely point in the chosen window. These lines are guesses, not Valve forecasts.
GET /api/v1/apps/{id}/pricesRegional priceshttps://api.ludodb.com/api/v1/apps/730/prices[ { "cc": "us", "currency": "USD", "cents": 0, "initialCents": 0, "discount": 0, "sampledAt": "2026-09-06T02:03:08Z" } ]One row per sampled store region. cents are in the smallest currency unit.
GET /api/v1/apps/{id}/prices/history?cc=usPrice history + historical lowhttps://api.ludodb.com/api/v1/apps/730/prices/history?cc=us{ "appid": 730, "cc": "us", "lowCents": 0, "lowAt": "2026-09-05T22:01:00Z", "series": [ { "t": 1788660090, "v": 0 }, { "t": 1788746490, "v": 0 } ] }cc is required. series v is cents. lowCents is the lowest sampled price in that region. Default series is all-time downsampled plus the last 7 days raw.
GET /api/v1/apps/{id}/prices/history?cc=us&from=&to=Price history, raw window (unix seconds, max 7 days)https://api.ludodb.com/api/v1/apps/730/prices/history?cc=us&from=1788660090&to=1789264890{ "appid": 730, "cc": "us", "lowCents": 0, "lowAt": "2026-09-05T22:01:00Z", "series": [ { "t": 1788660090, "v": 0 }, { "t": 1788746490, "v": 0 } ] }from and to are unix seconds. Window is at most 7 days. series is raw samples in that window. Omit both for the default series. cc is still required. lowCents stays the all-time sampled low.
GET /api/v1/apps/{id}/buildsDepot build historyhttps://api.ludodb.com/api/v1/apps/730/builds[ { "buildId": 20458890, "branch": "public", "description": "", "timeUpdated": "2026-08-24T23:39:20Z" } ]GET /api/v1/apps/{id}/newsPublic Steam newshttps://api.ludodb.com/api/v1/apps/730/news[ { "gid": "1841579228676851", "title": "Counter-Strike 2 Update", "url": "https://steamcommunity.com/games/730/announcements", "at": "2026-08-24T23:39:20Z", "feed": "Community Announcements" } ]GET /api/v1/apps/{id}/reviews?lang=englishReview summaryhttps://api.ludodb.com/api/v1/apps/730/reviews?lang=english{ "recent": { "desc": "Very Positive", "total": 9845359, "positive": 8456710, "negative": 1388649 }, "language": { "desc": "Very Positive", "total": 2610407, "positive": 2245824, "negative": 364583 }, "languageCode": "english", "languageLabel": "English reviews" }lang is a Steam review language code, default english.
GET /api/v1/apps/{id}/regionsRegion-locked SKUshttps://api.ludodb.com/api/v1/apps/730/regions[ { "cc": "us", "available": true, "reason": "" } ]Region-locked SKU flags LudoDB has sampled.