Tag ASO keywords
Put one tag on a set of tracked keywords, or lift it from them.
Download Markdown ↓POSThttps://api.peekpanda.com/v1/aso/apps/{appId}/keywords/tags
Request
One command changes the whole set. Applying a tag a keyword already carries changes nothing, so a retry is safe. A keyword id belonging to another app or another owner is rejected outright rather than skipped.
Parameters
appIdpathuuidYesTracked ASO app id.tagIdbodyuuidYesKeyword tag to apply or lift.keywordIdsbodyuuid[]YesTracked keywords to change, all belonging to this app.actionbody'add' | 'remove'YesApply the tag or lift it.Response
The updated workstation.
Response fields
app.storeIdstringapp.namestringapp.iconUrlnullapp.developerNamestringapp.primaryGenrestringapp.ratingnumberapp.ratingCountnumberapp.inCataloguebooleanapp.idstringapp.kindstringapp.rolestringapp.createdAtstringapp.lastRefreshedAtstringapp.keywordCountnumberrefresh.statestringrefresh.lastRefreshedAtstringrefresh.nextAllowedAtstringrefresh.staleQueryCountnumberrefresh.activeJobIdnullrefresh.budgetobjectprofile.positionKindstringprofile.storeIdstringprofile.coverageobjectprofile.summaryobjectprofile.keywordsarrayprofile.rivalsarrayprofile.keywordIdeasarrayprofile.insights[].kindstringprofile.insights[].titlestringprofile.insights[].detailstringprofile.insights[].keywordsarrayprofile.insights[].catalogueStoreIdnullkeywords[].querystringkeywords[].positionnumberkeywords[].trackedKeywordIdstringkeywords[].sourcestringkeywords[].notenullkeywords[].tags[].idstringkeywords[].tags[].namestringkeywords[].tags[].colorstringkeywords[].tags[].createdAtstringkeywords[].tags[].updatedAtstringkeywords[].observedAtstringkeywords[].isStalebooleankeywords[].resultCountnumberkeywords[].apps[].storeIdstringkeywords[].apps[].positionnumberkeywords[].apps[].namestringkeywords[].apps[].isSubjectbooleankeywords[].apps[].inCataloguebooleankeywords[].history[].observedAtstringkeywords[].history[].positionnumberkeywords[].difficulty.scorenumberkeywords[].demand.scorenumberkeywords[].demand.tiernumberkeywords[].demand.countrystringkeywords[].demand.periodStartstringkeywords[].demand.periodEndstringkeywords[].demand.observedAtstringkeywords[].popularityEstimatenulltags[].idstringtags[].namestringtags[].colorstringtags[].createdAtstringtags[].updatedAtstringtrackedCompetitorsarrayAuthentication
Requires Bearer API credential or OAuth access token. Scope content:write. MCP calls manage_aso with action assign_tag.
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.403workspace_not_accessible when x-genviral-tenancy names a workspace the credential cannot reach.404not_found when the record is outside the accessible catalogue.429rate_limited; honor Retry-After when present.429daily_call_limit; the plan's daily API and MCP calls are used until 00:00 UTC.409conflict when the write would duplicate an exclusive row.MCP request
Call manage_aso with action assign_tag. Path fields go in params, filters in query, and a write body in body.
{
"name": "manage_aso",
"arguments": {
"request": {
"action": "assign_tag",
"params": {
"appId": "<appId>"
}
}
}
}
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.
AI agent or LLM? Read this page as markdown