API reference · Games
Search games
http://localhost:8000/gamesThe heart of the API: search, filter and sort the whole catalog in one request.
With no parameters, you get every game (16 per page), with just its id and name. From
there, add any filters below to narrow it down and use fieldset to choose what data comes
back for each game.
Examples
- Everything by Rockstar:
GET /games?developer=Rockstar - Same, with release date and price:
GET /games?developer=Rockstar&fieldset=release_date,final_price_us - Action/adventure games between US$5 and US$20, best rated first:
GET /games?genres=accion,aventura&min_price_us=5&max_price_us=20&sort=score:desc - Open world games without VR, in random order:
GET /games?tags=Mundo abierto&exclude_tags=VR&sort=shuffle
curl "http://localhost:8000/games" \
-H "Authorization: Bearer YOUR_TOKEN"Runs against the real API with a shared demo key. Results are fixed at 5 per page and identical requests are served from a cache for an hour.
Parameters
Results7
pageintegerDefault: 1Which page of results to return.
per_pageintegerDefault: 161–100How many games per page.
fieldsetstringExtra fields to include for each game, comma-separated.
idandnamealways come back.Basics:
developer,publisher,genres,categories,tags,minified_tags(tags as a simple list of names — usually what you want),short_description,isF2P,min_age,content_restrictions,origin_countryRelease:
release_date,releaseDateOrig(as shown on Steam, e.g. "18 MAY 2015"),coming_soonEarly access:
is_early_access,has_left_early_access,is_possibly_abandoned,ea_release_date_from,ea_release_date_to,ea_release_date_origMedia:
header_image,background,screenshots,videoId,steamImagesPrice:
price(all price data),final_price_ar,final_price_us,initial_price,us_initial_price,discount_percent,currency,regional_statusReviews:
historical_reviews,last_month,release_window(each window's full data), or single values likescore,total_reviews,total_positive,total_negative,last_month_score,last_month_reviews,release_window_score,release_window_reviewsPopularity & region lock:
wishlist_rank,wishlist_rank_max,wishlist_rank_current,is_limited,limitedStatussortstringOrder of the results, as
field:ascorfield:desc. Sortable fields includename,release_date,final_price_ar,final_price_us,initial_price_ar,initial_price_us,discount_ar,discount_us,score,total_reviews,last_month_score,last_month_reviews,release_window_scoreandrelease_window_reviews.Use
shufflefor random order.sort_wishliststringSort by position in Steam's most-wishlisted ranking, best first.
maxuses the best position the game ever reached,currentits latest one. Games that never entered the ranking are left out.One of:
max,currentfieldsstringAdvanced: raw stored field names to return, comma-separated (e.g.
prices.ar.finalPrice). Replacesfieldsetif you send both. You'll rarely need it.
Games3
idsstringOnly return these games (Steam app IDs, comma-separated).
include_appidsstringAlways include these games in the results, even if they don't match your other filters. Handy for keeping a user's favorites pinned in a filtered list.
exclude_appidsstringNever return these games. Handy for hiding games a user already owns.
Basics8
namestringSearch by name. Every word must appear as a whole word in the title, in any order and ignoring case:
witcher 3finds "The Witcher 3: Wild Hunt", butwitchdoesn't.developerstringGames made by this developer. Same whole-word matching as
name.publisherstringGames released by this publisher. Same whole-word matching as
name.genresstringGames in any of these genres, comma-separated. Case and accents don't matter. Available genres:
accion,aventura,casual,carreras,deportes,estrategia,indie,rol,simuladores,multijugador masivo,free to play,acceso anticipado, plus a few non-game ones likeutilidadesoreducacion.isF2Pbooleantruefor free-to-play games only,falseto leave them out.min_ageintegerGames whose minimum required age is at least this.
content_restrictionsstringGames with any of these mature content descriptors, comma-separated:
desnudos_contenido_sexual— some nudity or sexual contentviolencia_frecuente_gore— frequent violence or gorecontenido_sexual_adultos— adult-only sexual contentdesnudos_frecuentes— frequent nudity or sexual contentcontenido_adulto_general— general mature content
origin_countrystringCountry the developer is from (country code, e.g.
ar,us,jp).
Release2
release_datestringGames released in a year (
2020) or a range of years (2020-2023). For exact moments, pass two millisecond timestamps:1577836800000-1704067199000.coming_soonbooleantruefor games that haven't been released yet.
Early access5
is_early_accessbooleantruefor games that are or were in early access.has_left_early_accessbooleantruefor games that already got their full release after early access.is_possibly_abandonedbooleantruefor early access games flagged as possibly abandoned. Good to warn players before they buy.ea_release_date_fromstringGames that entered early access on or after this date (
YYYY-MM-DDor a millisecond timestamp).ea_release_date_tostringGames that entered early access on or before this date. Can't be earlier than
ea_release_date_from.
Media4
screenshotsbooleantruefor games that have screenshots.min_screenshotsintegerGames with at least this many screenshots.
videoIdbooleantruefor games that have a trailer.steamImagesbooleantruefor games that have Steam store artwork.
Price19
min_price_usnumberCurrent US store price (in US$, discount applied) of at least this.
max_price_usnumberCurrent US store price of at most this.
min_price_arnumberCurrent Argentine store price (discount applied) of at least this.
max_price_arnumberCurrent Argentine store price of at most this.
min_initial_price_usnumberUS price before discounts of at least this.
max_initial_price_usnumberUS price before discounts of at most this.
min_initial_price_arnumberArgentine price before discounts of at least this.
max_initial_price_arnumberArgentine price before discounts of at most this.
min_discount_usinteger0–100Games currently discounted at least this % in the US store.
max_discount_usinteger0–100Games currently discounted at most this % in the US store.
min_discount_arinteger0–100Games currently discounted at least this % in the Argentine store.
max_discount_arinteger0–100Games currently discounted at most this % in the Argentine store.
final_price_usnumberGames whose current US price is exactly this.
Also accepted as
us_price.final_price_arnumberGames whose current Argentine price is exactly this.
us_initial_pricenumberGames whose US price before discounts is exactly this.
initial_pricenumberGames whose Argentine price before discounts is exactly this.
discountnumber0–100Games discounted exactly this % in the Argentine store.
discount_percentdoes the same.Also accepted as
discount_percent.currencystringGames whose Argentine store price is in this currency (ISO code).
regional_statusstringHow the game's Argentine price compares to other regions:
increible(amazing),muy bueno(very good),bueno(good),elevado(high) orno tiene(no regional pricing).One of:
no tiene,bueno,elevado,muy bueno,increible
Tags & categories6
categoriesstringGames that have all of these Steam categories.
some_categoriesstringGames that have at least one of these categories.
exclude_categoriesstringGames that have none of these categories.
Reviews36
min_scoreinteger0–100Games with at least this % of positive reviews (all time). Combine it with
min_total_reviewsso a handful of reviews doesn't count as a great score.Also accepted as
historical_min_score.max_scoreinteger0–100Games with at most this % of positive reviews (all time).
Also accepted as
historical_max_score.scoreinteger0–100Games with exactly this % of positive reviews (all time). Scores have decimals, so this rarely matches — use
min_score/max_scoreinstead.Also accepted as
review_score,historical_score.min_total_reviewsintegerGames with at least this number of reviews (all time).
Also accepted as
min_reviews,historical_min_reviews.max_total_reviewsintegerGames with at most this number of reviews (all time).
Also accepted as
max_reviews,historical_max_reviews.total_reviewsintegerGames with exactly this number of reviews (all time).
Also accepted as
historical_reviews.min_total_positiveintegerGames with at least this number of positive reviews (all time).
Also accepted as
historical_min_positive_reviews.max_total_positiveintegerGames with at most this number of positive reviews (all time).
Also accepted as
historical_max_positive_reviews.total_positiveintegerGames with exactly this number of positive reviews (all time).
Also accepted as
historical_positive_reviews.min_total_negativeintegerGames with at least this number of negative reviews (all time).
Also accepted as
historical_min_negative_reviews.max_total_negativeintegerGames with at most this number of negative reviews (all time).
Also accepted as
historical_max_negative_reviews.total_negativeintegerGames with exactly this number of negative reviews (all time).
Also accepted as
historical_negative_reviews.last_month_min_scoreinteger0–100Games with at least this % of positive reviews in the last month.
last_month_max_scoreinteger0–100Games with at most this % of positive reviews in the last month.
last_month_scoreinteger0–100Games with exactly this % of positive reviews in the last month. Scores have decimals, so this rarely matches.
last_month_min_reviewsintegerGames with at least this number of reviews in the last month. A good signal of what people are playing right now.
last_month_max_reviewsintegerGames with at most this number of reviews in the last month.
last_month_reviewsintegerGames with exactly this number of reviews in the last month.
last_month_min_positive_reviewsintegerGames with at least this number of positive reviews in the last month.
last_month_max_positive_reviewsintegerGames with at most this number of positive reviews in the last month.
last_month_positive_reviewsintegerGames with exactly this number of positive reviews in the last month.
last_month_min_negative_reviewsintegerGames with at least this number of negative reviews in the last month.
last_month_max_negative_reviewsintegerGames with at most this number of negative reviews in the last month.
last_month_negative_reviewsintegerGames with exactly this number of negative reviews in the last month.
release_window_min_scoreinteger0–100Games with at least this % of positive reviews from around the game's launch.
release_window_max_scoreinteger0–100Games with at most this % of positive reviews from around the game's launch.
release_window_scoreinteger0–100Games with exactly this % of positive reviews from around the game's launch. Scores have decimals, so this rarely matches.
release_window_min_reviewsintegerGames with at least this number of reviews from around the game's launch.
release_window_max_reviewsintegerGames with at most this number of reviews from around the game's launch.
release_window_reviewsintegerGames with exactly this number of reviews from around the game's launch.
release_window_min_positive_reviewsintegerGames with at least this number of positive reviews from around the game's launch.
release_window_max_positive_reviewsintegerGames with at most this number of positive reviews from around the game's launch.
release_window_positive_reviewsintegerGames with exactly this number of positive reviews from around the game's launch.
release_window_min_negative_reviewsintegerGames with at least this number of negative reviews from around the game's launch.
release_window_max_negative_reviewsintegerGames with at most this number of negative reviews from around the game's launch.
release_window_negative_reviewsintegerGames with exactly this number of negative reviews from around the game's launch.
Region lock6
is_limitedbooleantruefor games that are (or were) region-locked.release_status_when_liftedstringWhether the region lock was lifted before or after the game's release.
One of:
before-release,after-releasetimestamp_when_lifted_minintegerLock lifted on or after this moment (millisecond timestamp).
timestamp_when_lifted_maxintegerLock lifted on or before this moment (millisecond timestamp).
price_when_lifted_minnumberPrice when the lock was lifted of at least this.
price_when_lifted_maxnumberPrice when the lock was lifted of at most this.
Responses
200A page of games
Body
dataobject[]idintegerSteam app ID
namestringdevelopersstring[]publishersstring[]releaseDateintegerRelease date as a millisecond timestamp
shortDescriptionstringmainImageUrlstringHeader image from the Steam store
genresobject[]idstringdescriptionstring
minified_tagsstring[]The game's tags, most representative first
pricesobjectPrices per store (
ar,us)historicalReviewsobjectReview stats for one time window
scorenumberPercentage of positive reviews (0–100)
reviewsQuantityintegerpositiveReviewsintegernegativeReviewsinteger
early_accessobject
current_pageintegerper_pageintegertotalintegerTotal games matching your filters
last_pageintegerfrominteger | nullPosition of the first game on this page (
nullif there are no results)tointeger | nullfirst_page_urlstringlast_page_urlstringnext_page_urlstring | nullLink to the next page, or
nullon the last pageprev_page_urlstring | nullpathstringlinksobject[]Ready-made links for rendering page buttons
urlstring | nulllabelstringactiveboolean
{
"data": [
{
"id": 292030,
"name": "The Witcher 3: Wild Hunt",
"developers": [
"CD PROJEKT RED"
],
"publishers": [
"CD PROJEKT RED"
],
"releaseDate": 1431918000000,
"shortDescription": "Eres Geralt de Rivia, cazador de monstruos...",
"mainImageUrl": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/292030/header.jpg",
"genres": [
{
"id": "3",
"description": "Rol"
}
],
"minified_tags": [
"Mundo abierto",
"Rol",
"Buena trama",
"Atmosféricos",
"Fantasía"
],
"prices": {
"ar": {
"finalPrice": 29.99,
"currentDiscount": 0
},
"us": {
"finalPrice": 39.99
}
},
"historicalReviews": {
"score": 96.8,
"reviewsQuantity": 807345,
"positiveReviews": 0,
"negativeReviews": 0
},
"early_access": {
"has_ea_data": false
}
}
],
"current_page": 1,
"per_page": 16,
"total": 752,
"last_page": 47,
"from": 1,
"to": 16,
"first_page_url": "http://localhost:8000/api/games?page=1",
"last_page_url": "http://localhost:8000/api/games?page=47",
"next_page_url": "http://localhost:8000/api/games?page=2",
"prev_page_url": null,
"path": "http://localhost:8000/api/games",
"links": [
{
"url": "string",
"label": "string",
"active": false
}
]
}400A filter value doesn't make sense
Body
errorstringShort name of the error
messagestringWhat went wrong, in more detail
{
"error": "Bad Request",
"message": "Invalid sort field. Allowed fields are: name, developer, publisher, release_date, ..."
}401Your token is missing or invalid
Body
errorstringShort name of the error
messagestringWhat went wrong, in more detail
{
"error": "Unauthorized"
}422An unknown parameter or an invalid value
Body
errorstringmessagestringerrorsobjectThe problems found, by parameter name
{
"error": "Validation Error",
"message": "Some parameters are invalid",
"errors": {
"develper": [
"The parameter 'develper' does not exist. Did you mean 'developer'?"
]
}
}429You've used all the requests in your plan for this billing cycle
Headers
Retry-AfterSeconds until your quota resets
Body
errorstringlimitinteger
{
"error": "Request limit reached for your plan in the current billing cycle",
"limit": 10000
}