curl --request GET \
--url https://api.appgoat.ai/v1/apps/{app}/changes \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.appgoat.ai/v1/apps/{app}/changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.appgoat.ai/v1/apps/{app}/changes"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "<string>",
"country": "<string>",
"field": "version",
"old": "<unknown>",
"new": "<unknown>",
"detected_at": "2023-11-07T05:31:56Z"
}
],
"meta": {
"credits_used": 123,
"credits_remaining": 123,
"request_id": "<string>",
"freshness": {
"fetched_at": "2023-11-07T05:31:56Z",
"age_seconds": 123,
"stale": true,
"refreshing": true,
"job_id": "<string>"
},
"next_cursor": "<string>",
"store": "apple",
"warnings": [
"<string>"
]
}
}{
"error": {
"code": "invalid_param",
"message": "limit must be ≤ 100",
"hint": "Fix the parameter and retry.",
"docs": "https://appgoat.ai/docs/errors#invalid_param",
"param": "limit"
}
}{
"error": {
"code": "invalid_param",
"message": "<string>",
"hint": "<string>",
"docs": "<string>",
"param": "<string>"
}
}{
"error": {
"code": "invalid_param",
"message": "<string>",
"hint": "<string>",
"docs": "<string>",
"param": "<string>"
}
}List app changes
Typed change feed, newest first: one entry per changed field with old and new values. Fields include
version, release_notes, title, subtitle, description, screenshots, icon, price, iap, iap_range, privacy,
in_app_events, badges, featured, editors_choice, installs, content_rating, developer. Ideal for competitor
monitoring (“what did X change this month?”).
curl --request GET \
--url https://api.appgoat.ai/v1/apps/{app}/changes \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.appgoat.ai/v1/apps/{app}/changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.appgoat.ai/v1/apps/{app}/changes"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "<string>",
"country": "<string>",
"field": "version",
"old": "<unknown>",
"new": "<unknown>",
"detected_at": "2023-11-07T05:31:56Z"
}
],
"meta": {
"credits_used": 123,
"credits_remaining": 123,
"request_id": "<string>",
"freshness": {
"fetched_at": "2023-11-07T05:31:56Z",
"age_seconds": 123,
"stale": true,
"refreshing": true,
"job_id": "<string>"
},
"next_cursor": "<string>",
"store": "apple",
"warnings": [
"<string>"
]
}
}{
"error": {
"code": "invalid_param",
"message": "limit must be ≤ 100",
"hint": "Fix the parameter and retry.",
"docs": "https://appgoat.ai/docs/errors#invalid_param",
"param": "limit"
}
}{
"error": {
"code": "invalid_param",
"message": "<string>",
"hint": "<string>",
"docs": "<string>",
"param": "<string>"
}
}{
"error": {
"code": "invalid_param",
"message": "<string>",
"hint": "<string>",
"docs": "<string>",
"param": "<string>"
}
}Authorizations
Create a key at https://dash.appgoat.ai.
Path Parameters
Any 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).
"com.spotify.music"
Query Parameters
Disambiguates {app} (a bundle id vs a Play package, or a name).
apple, play Only changes seen in these storefronts (comma list). Default all storefronts.
Only these fields (comma list), e.g. version,title,subtitle.
Only items at or after this ISO date / datetime.
"2026-10-01"
Refresh from the store when our data is older than this many seconds (0 = always). Default 604800 (7 days).
x >= 0Block up to ~25 s for a refresh (default). false = answer immediately from cache with a job id.
1 <= x <= 200meta.next_cursor from the previous page.