Steam Reviews API
Real user reviews with the author and playtime context, filtered the way the store filters them.
GET /v1/steam/apps/{appId}/reviews1 credit Failed requests are free A not-found answer is still charged
About this endpoint
GET /v1/steam/apps/{appId}/reviews returns data.summary for the filters and data.reviews for the page. Each review has id, url, language, text, recommended, createdAt, updatedAt, helpfulVotes, funnyVotes, helpfulScore, commentCount, steamPurchase, receivedForFree, earlyAccess, primarilySteamDeck, refunded, reactions, hardware, developerResponse and author. The author carries id, name, url, avatarUrl, gamesOwned, reviewCount, playtimeMinutes, playtimeAtReviewMinutes, playtimeLastTwoWeeksMinutes, deckPlaytimeAtReviewMinutes and lastPlayedAt.
Filters cover language (default all), sort (recent, updated or helpful), sentiment, purchase, minPlaytimeHours, maxPlaytimeHours, from, to and, with helpful sorting, days. Page with limit (1 to 100, default 20) and page.nextCursor. A cursor is tied to the filters it was minted for, so keep them identical across pages. data.summary is null when sentiment is positive or negative, because no totals are available for a filtered list; the review summary route has the overall totals.
Steam Reviews API FAQ
How do I read Steam reviews for an app?
Call GET /v1/steam/apps/{appId}/reviews with the app id. data.reviews holds the page and data.summary holds the totals for the same filters. For a first page of English reviews, add language=english&limit=20.
Can I filter by positive or negative reviews?
Yes. sentiment takes all, positive or negative. purchase takes all, steam for reviews by people who bought on Steam, or other for activated keys and free copies. The totals in data.summary follow the language, purchase, playtime and date filters. With sentiment=positive or sentiment=negative, data.summary is null because no totals are available for a filtered list; use the review summary route for an overall total.
What does sort=helpful do?
helpful uses Steam's helpfulness ranking over the last days days, which you can set from 1 to 365. recent is newest first and reaches the first review; updated sorts by the last edit. recent is the default.
How does paging work with filters?
Send page.nextCursor from the previous response with the same filters. A cursor issued for other filters is refused, because the underlying position would not match. Start again without a cursor if you change the filters.
Why is a page empty when the app has reviews?
A narrow combination, such as a language plus a short date range plus a playtime bound, can legitimately have no reviews. When data.summary is present, data.summary.totalReviews tells you whether it is a real zero. With sentiment=positive or sentiment=negative, data.summary is null; page on until page.hasMore is false. The default language is all.
How many credits does a reviews page cost?
Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.
Other Steam endpoints
- Review summaryGET /v1/steam/apps/{appId}/reviews/summary
- Review histogramGET /v1/steam/apps/{appId}/reviews/histogram
- AppGET /v1/steam/apps/{appId}
- Apps by idGET /v1/steam/apps
- Player countGET /v1/steam/apps/{appId}/players
- NewsGET /v1/steam/apps/{appId}/news
- AchievementsGET /v1/steam/apps/{appId}/achievements
- SearchGET /v1/steam/apps/search