PeekPanda docs
Update an ASO keyword
Save a private note on one tracked keyword.
Download Markdown ↓PATCH/v1/aso/apps/{appId}/keywords/{keywordId}Auth
Bearer API credential or OAuth access tokenScope content:writeMCP update_aso_keywordRequest
Updates the private note. Keyword text and notes are never sent to analytics.
curl --request PATCH 'https://api.peekpanda.com/v1/aso/apps/11111111-1111-4111-8111-111111111111/keywords/22222222-2222-4222-8222-222222222222' \
--header "Authorization: Bearer $PEEKPANDA_TOKEN" \
--header 'x-genviral-tenancy: personal' \
--header 'content-type: application/json' \
--data '{"note":"Test the subtitle."}'Response
The updated workstation.
{
"app": {
"storeId": "0000000000",
"name": "Example Calorie Tracker",
"iconUrl": null,
"developerName": "Example Labs",
"primaryGenre": "Health & Fitness",
"rating": 4.7,
"ratingCount": 12450,
"inCatalogue": true,
"id": "11111111-1111-4111-8111-111111111111",
"kind": "apple",
"folderId": null,
"role": "mine",
"createdAt": "2026-09-06T00:00:00.000Z",
"lastRefreshedAt": "2026-09-06T00:00:00.000Z",
"keywordCount": 1
},
"refresh": {
"state": "fresh",
"lastRefreshedAt": "2026-09-06T00:00:00.000Z",
"nextAllowedAt": "2026-09-06T01:00:00.000Z",
"staleQueryCount": 0,
"activeJobId": null,
"budget": {
"userRefreshesToday": 1,
"userDailyLimit": 40
}
},
"profile": {
"positionKind": "observed_search_api_position",
"storeId": "0000000000",
"coverage": {
"queriesCollected": 0,
"queriesMatched": 0,
"country": "us",
"language": "en_us",
"source": "itunes_search",
"latestObservedAt": null,
"observationCount": 0
},
"summary": {
"top3": 0,
"top10": 0,
"top50": 0,
"bestPosition": null,
"medianPosition": null
},
"keywords": [],
"rivals": [],
"keywordIdeas": [],
"insights": [
{
"kind": "coverage_gap",
"title": "Not in the collected query set yet",
"detail": "This app did not appear in any collected queries.",
"keywords": [],
"catalogueStoreId": null
}
]
},
"keywords": [
{
"query": "calorie tracker",
"position": 4,
"trackedKeywordId": "22222222-2222-4222-8222-222222222222",
"source": "manual",
"note": null,
"tags": [
{
"id": "55555555-5555-4555-8555-555555555555",
"name": "Potential",
"color": "#0f9d58",
"createdAt": "2026-09-06T00:00:00.000Z",
"updatedAt": "2026-09-06T00:00:00.000Z"
}
],
"observedAt": "2026-09-06T00:00:00.000Z",
"isStale": false,
"resultCount": 1,
"apps": [
{
"storeId": "0000000000",
"position": 4,
"name": "Example Calorie Tracker",
"isSubject": true,
"inCatalogue": true
}
],
"history": [
{
"observedAt": "2026-09-06T00:00:00.000Z",
"position": 4
}
],
"difficulty": {
"score": 40
},
"demand": {
"score": 90,
"observedAt": "2026-09-06T00:00:00.000Z"
}
}
],
"suggestions": [
{
"query": "calorie counter",
"source": "hint",
"reason": "Apple suggests it",
"position": null,
"appCount": null,
"isTracked": false
}
],
"tags": [
{
"id": "55555555-5555-4555-8555-555555555555",
"name": "Potential",
"color": "#0f9d58",
"createdAt": "2026-09-06T00:00:00.000Z",
"updatedAt": "2026-09-06T00:00:00.000Z"
}
],
"trackedCompetitors": []
}
Parameters
NameInTypeRequiredDescription
appIdpathuuidYesTracked ASO app id.keywordIdpathuuidYesTracked keyword id.notebodystring | nullYesPrivate note.Known errors
400invalid_request for an invalid filter, identity or limit.401authentication_required for a missing or invalid credential.402subscription_required when access is not entitled.403authorization_required for a missing scope or unavailable preview access.404not_found when the record is outside the accessible catalogue.429rate_limited; honor Retry-After when present.409conflict when the write would duplicate an exclusive row.Source
Dated public App Store search results and suggestion observations for the US English storefront. Positions are observed result order. Difficulty and demand are directional indicators, not search volume or advertising data.
Refresh
This read returns stored observations. Use the related refresh command when newer evidence is needed.