List an app's user reviews, newest first, with filters (rating, version, date, text).
Up to 100 reviews per page (1 credit per page). Combine rating=1-2 with since to find recent
complaints, q for full-text search, version to see what users say about a release. The latest US
reviews are refreshed when older than max_age (default 1 day). AI tags (sentiment, intent,
severity, topic) are filled for tagged reviews (popular apps first) and null otherwise; filtering by
them excludes untagged reviews. intent=bug,crash&since=… is the "what broke in the last release" query.
Request
curl "https://api.appgoat.ai/v1/apps/com.spotify.music/reviews?rating=1-2&since=2026-10-01" \
-H "x-api-key: $APPGOAT_API_KEY"const res = await fetch("https://api.appgoat.ai/v1/apps/com.spotify.music/reviews?rating=1-2&since=2026-10-01", {
headers: {
"x-api-key": process.env.APPGOAT_API_KEY,
},
});
const { data, meta } = await res.json();import os, requests
res = requests.get(
"https://api.appgoat.ai/v1/apps/com.spotify.music/reviews?rating=1-2&since=2026-10-01",
headers={"x-api-key": os.environ["APPGOAT_API_KEY"]}
)
body = res.json()Path parameters
appstringrequiredAny app identifier: App Store id (
284882215, id284882215), Play package (com.spotify.music), Apple bundle id (com.spotify.client), store URL (URL-encoded), apple:<id> / play:<id>, or a name (spotify).Query parameters
store"apple" | "play"Disambiguates
{app} (a bundle id vs a Play package, or a name).countrystringISO country code(s):
us (default), a comma list (paid plans), or all (Studio).Default "us"
ratingstringStar rating filter,
1, 1,2 or a range 1-3.versionstringOnly reviews written for this app version.
sincestringOnly items at or after this ISO date / datetime.
untilstringOnly reviews created before this ISO date / datetime.
qstringCase-insensitive text search in the title and body.
sentimentstringAI sentiment filter (comma list): positive, neutral, negative.
intentstringAI intent filter (comma list): bug, crash, feature_request, pricing, ux, praise, spam, other.
topicstringAI topic filter (comma list of topic labels, case-insensitive, or topic ids).
max_ageintegerRefresh the latest US reviews when older than this many seconds. Default 86400 (1 day).
Default 86400
waitbooleanBlock up to ~25 s for a refresh (default). false = answer immediately from cache with a job id.
Default true
limitintegerDefault 50
cursorstringmeta.next_cursor from the previous page.fieldsstringComma list of top-level fields to return (identifiers are always kept), e.g.
title,rating,version.Response
200 with data: Review[]. See the envelope for meta.
review_idstringcountrystringratingintegertitlestring | nullbodystring | nullauthorstring | nullversionstring | nullthumbs_upinteger | nullreplystring | nullThe developer's reply.
replied_atstring | nullcreated_atstring | nullsentiment"positive" | "neutral" | "negative" | nullAI tag; null = not tagged yet.
intent"bug" | "crash" | "feature_request" | "pricing" | "ux" | "praise" | "spam" | "other" | nullAI tag.
severityinteger | null0 none, 1 minor, 2 major, 3 critical.
topicstring | nullAI topic label (one per review, per-app taxonomy).
topic_idinteger | nullconfidencenumber | nullProbability of the chosen intent (0–1).
Example
{
"data": [
{
"review_id": "string",
"country": "us",
"rating": 1,
"title": "Spotify: Music and Podcasts",
"body": "string",
"author": "string",
"version": "string",
"thumbs_up": 1,
"reply": "string",
"replied_at": "2026-10-22T10:00:00Z",
"created_at": "2026-10-22T10:00:00Z",
"sentiment": "positive",
"intent": "bug",
"severity": 0,
"topic": "string",
"topic_id": 1,
"confidence": 4.5
}
],
"meta": {
"credits_used": 1,
"credits_remaining": 9981,
"request_id": "req_123"
}
}Status codes
200
A page of reviews.
A parameter is missing or invalid (
error.param names it).Missing or invalid API key.
insufficient_credits (the call costs more than you have left; nothing was done) or plan_limit (a feature of a higher plan).Nothing matches
{app}, or the store does not have it.429
rate_limitedToo many requests per second for your plan.