List your watches (apps, competitor sets, keyword sets) with usage against your plan's limits.
meta.usage has watched apps and keyword slots used vs your plan (null limit = unlimited).
Request
curl "https://api.appgoat.ai/v1/watches" \
-H "x-api-key: $APPGOAT_API_KEY"const res = await fetch("https://api.appgoat.ai/v1/watches", {
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/watches",
headers={"x-api-key": os.environ["APPGOAT_API_KEY"]}
)
body = res.json()Query parameters
kind"app" | "keyword" | "competitor_set"appstringOnly watches that include this app (any
{app} input).store"apple" | "play"Disambiguates
{app} (a bundle id vs a Play package, or a name).Response
200 with data: Watch[]. See the envelope for meta.
idintegerkindWatchKindnamestring | nullstore"apple" | "play" | "both" | nullappanycompetitorsWatchApp[]competitor_set only.
termsstring[]keyword only.
keywordsobject[]keyword only: one slot per store × country × term (id = the tracked-keyword id).
keywords[].idintegerkeywords[].termstringkeywords[].storeStorekeywords[].countrystringkeywords[].ranked_atstring | nullcountriesstring[]event_typesEventType[]settingsWatchSettingsactivebooleancreated_atstringupdated_atstringExample
{
"data": [
{
"id": 1,
"kind": "app",
"name": "string",
"store": "apple",
"app": null,
"competitors": [
{}
],
"terms": [
"string"
],
"keywords": [
{}
],
"countries": [
"string"
],
"event_types": [
"new_version"
],
"settings": {
"significance": 0.5,
"rank_move": 5,
"keyword_top_n": 10,
"chart_top_n": 100,
"rating_drop": 0.1,
"spike_factor": 3,
"email_digest": true,
"depth": 1,
"cadence_minutes": 1
},
"active": false,
"created_at": "2026-10-22T10:00:00Z",
"updated_at": "2026-10-22T10:00:00Z"
}
],
"meta": {
"credits_used": 0,
"credits_remaining": 9981,
"request_id": "req_123"
}
}Status codes
200
Watches, newest first.
A parameter is missing or invalid (
error.param names it).Missing or invalid API key.
429
rate_limitedToo many requests per second for your plan.