REST API

The same 32 tools, as JSON.

One bearer token, one endpoint per tool. Whatever the chat or the MCP server can do, a script can do: read a competitor every Monday, track the phrases a client picked, push a translated listing to App Store Connect and Google Play. Included in Pro and Studio; the MCP server stays free on every plan.

Setup

  1. 1Create a token under Dashboard → MCP server. The same token serves MCP and REST.
  2. 2Send it as Authorization: Bearer …. Base URL https://aso.best/api/v1.
  3. 3POST a tool's input as JSON. Errors come back as {"error": "…"} with 422; a missing plan answers 402.

60 requests a minute per token. Runs, tracked keywords and assistant credits count against your plan exactly as in the dashboard. Nothing is submitted for review by the listing tools; Apple and Google keep the release button.

curl https://aso.best/api/v1/me \
  -H "Authorization: Bearer aso_…"

curl -X POST https://aso.best/api/v1/tools/read_competitor \
  -H "Authorization: Bearer aso_…" -H "Content-Type: application/json" \
  -d '{"app": "https://apps.apple.com/us/app/id1569379048", "country": "US"}'

curl -X POST https://aso.best/api/v1/tools/update_listing \
  -H "Authorization: Bearer aso_…" -H "Content-Type: application/json" \
  -d '{"adam_id": 6775603640, "locale": "de-DE", "subtitle": "Große Dateien senden"}'

GET /api/v1/tools returns every tool with its JSON schema.

Endpoints

POST /api/v1/tools/…ArgumentsWhat it returns
read_competitorapp, country, languageEvery phrase an app ranks for: popularity, difficulty, position, hidden-field phrases. Starts a two-minute run when no fresh report exists.
run_statusrun_idWhere a run is, and the whole report once it is done.
compare_appscompetitor, app, countryYour position on every phrase the competitor ranks for; the gaps listed separately.
score_phrasephrase, countryOne keyword: popularity, difficulty, the first page, related queries, an autocomplete traffic estimate under Apple's floor, a verdict.
find_appquery, countryA name to App Store apps with ids, ratings and the public page.
follow_appadam_id, is_mineFollow an app as yours or as a rival to watch.
app_profileappRating, version, what's new, chart positions everywhere, latest report.
visibility_scoreappOne app's visibility 0–100 from charts, ratings, keywords and listing, with what to fix first.
my_appsThe apps you follow, with today's numbers and the last seven days.
unfollow_appadam_idStop following an app; its tracked keywords go too.
track_keywordsphrases, adam_id, country, setTrack phrases for a followed app in one store: a position every morning, within the plan's limit. With set (a name) and no adam_id, the phrases are watched without an app: popularity and difficulty only.
untrack_keywordphrase, adam_id, countryStop tracking one phrase.
my_keywordsThe keywords you track: today, yesterday, best in the history window, popularity, difficulty.
niche_analysisphrase, countryA phrase and the queries beside it: who owns the first pages, dominance, median difficulty, demand, and an open / contested / locked verdict.
play_keywordphrase, country, appGoogle Play: the first page for a phrase, rating counts, difficulty on the same scale, and where a package sits.
competitor_finderapp, countryThe ten apps that keep ranking beside an app, with every phrase each ranks for.
top_chartscountry, chart, genre, limitApple's top 100 with movement, climbers, fallers and drop-outs.
algorithm_changescountry, daysDid the store move today? Share of tracked positions and chart rows that moved ten places or more, per day and storefront, with the shaken days.
ratings_by_countryappRatings and average in each of the 22 storefronts.
get_listingadam_idYour App Store Connect listing: every locale with name, subtitle, keywords, promo, description, what's new, and whether the version is editable.
translate_listingadam_id, from, to, fieldsTranslate one locale into others inside Apple's limits; returns the text, saves nothing. Pro and up.
update_listingadam_id, locale, fields…Save fields of one locale to App Store Connect; nothing is submitted for review. Pro and up.
tag_clientadam_id, clientPut a followed app under a client name (agencies); empty clears it. My apps, My keywords and the weekly email filter by it.
client_reportclient, send, emailsThe weekly client report as data: each app's rating, ratings gained, chart position, every tracked keyword against a week ago, the week's reviews. With send and emails it is mailed under your agency name and logo. Pro and up.
schedule_client_reportclient, emails, weekday, removeSend the client report every week: weekday 0 (Sunday) to 6, after the morning reads. Pro and up.
share_reportrun_id, password, revokeA read-only link to a finished competitor report with your branding, optional password; also the PDF page URL. Pro and up.
alert_channelsWhere alerts go: email and every Slack, Discord, Teams, Google Chat, Telegram or webhook channel set up.
add_alert_channelkind, url, labelSend low-star reviews and keyword drops to Slack, Discord, Microsoft Teams, Google Chat, Telegram or any https URL that takes JSON. A test message goes out at once. Track and up.
remove_alert_channelidRemove one alert channel.
get_play_listingpackageYour Google Play listing: every language with title, short and full description.
translate_play_listingpackage, from, toTranslate one Play language into others inside Google's limits; proposals only. Pro and up.
update_play_listingpackage, language, fields…Save one language of the Play listing; Google reviews it before it goes live. Pro and up.
esc