API

Read reviews, ratings and keyword positions, and post replies and labels, from scripts, BI tools or automation platforms. Workspace owners create keys in Settings → API. A key can do anything a member of its workspace can, so keep it secret.

Authentication

Send the key as a bearer token. Each key can make 120 requests a minute; past that you get HTTP 429 with a Retry-After header.

curl https://apprate.io/api/v1/apps \
  -H "Authorization: Bearer ar_…"

Endpoints

MethodPathWhat it does
GET/api/v1/appsApps the workspace tracks.
GET/api/v1/reviewsReviews, newest first. Filters: app_id, since, until, rating (e.g. 1,2), replied (true|false), label. Paging: limit (max 200), cursor.
POST/api/v1/reviews/:id/replyPost or update the developer reply. Body: {"text": "…"}. Needs a connected developer account.
POST/api/v1/reviews/:id/labelsAdd a label. Body: {"label": "bug"}.
DELETE/api/v1/reviews/:id/labels?label=bugRemove a label.
GET/api/v1/apps/:id/ratings?days=90Daily store rating and rating count, up to 365 days.
GET/api/v1/apps/:id/keywords?days=30Tracked keywords with popularity, difficulty and daily positions, up to 90 days.

Paging through reviews

Responses look like {"data": [...], "next_cursor": "…"}. Pass next_cursor back as cursor until it is null. Pages stay stable while new reviews arrive.

curl "https://apprate.io/api/v1/reviews?rating=1,2&replied=false&limit=100" \
  -H "Authorization: Bearer ar_…"

Each review has id, app_id, store, country, rating, title, body, author, version, language, reviewed_at, sentiment, topics, flag, labels, reply, replied_at and can_reply. flag is spam, offensive, off_topic or personal_info when AI thinks the store would remove the review, else null.

Replying

curl -X POST https://apprate.io/api/v1/reviews/REVIEW_ID/reply \
  -H "Authorization: Bearer ar_…" \
  -H "Content-Type: application/json" \
  -d '{"text": "Thanks! This is fixed in 4.2."}'

Replies go out through the App Store Connect or Google Play account linked to the app. can_reply is false when the store doesn't accept a reply yet (Google Play only takes replies to reviews from the last 7 days).

Errors

Errors return {"error": {"status": 400, "message": "…"}}: 400 for a bad parameter, 401 for a missing or wrong key, 404 for something outside your workspace, 422 when a reply or label can't be saved, 429 for the rate limit and 502 when the store rejects a reply.

API · AppRate