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
- 1Create a token under Dashboard → MCP server. The same token serves MCP and REST.
- 2Send it as
Authorization: Bearer …. Base URLhttps://aso.best/api/v1. - 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/… | Arguments | What it returns |
|---|---|---|
| read_competitor | app, country, language | Every phrase an app ranks for: popularity, difficulty, position, hidden-field phrases. Starts a two-minute run when no fresh report exists. |
| run_status | run_id | Where a run is, and the whole report once it is done. |
| compare_apps | competitor, app, country | Your position on every phrase the competitor ranks for; the gaps listed separately. |
| score_phrase | phrase, country | One keyword: popularity, difficulty, the first page, related queries, an autocomplete traffic estimate under Apple's floor, a verdict. |
| find_app | query, country | A name to App Store apps with ids, ratings and the public page. |
| follow_app | adam_id, is_mine | Follow an app as yours or as a rival to watch. |
| app_profile | app | Rating, version, what's new, chart positions everywhere, latest report. |
| visibility_score | app | One app's visibility 0–100 from charts, ratings, keywords and listing, with what to fix first. |
| my_apps | — | The apps you follow, with today's numbers and the last seven days. |
| unfollow_app | adam_id | Stop following an app; its tracked keywords go too. |
| track_keywords | phrases, adam_id, country, set | Track 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_keyword | phrase, adam_id, country | Stop tracking one phrase. |
| my_keywords | — | The keywords you track: today, yesterday, best in the history window, popularity, difficulty. |
| niche_analysis | phrase, country | A phrase and the queries beside it: who owns the first pages, dominance, median difficulty, demand, and an open / contested / locked verdict. |
| play_keyword | phrase, country, app | Google Play: the first page for a phrase, rating counts, difficulty on the same scale, and where a package sits. |
| competitor_finder | app, country | The ten apps that keep ranking beside an app, with every phrase each ranks for. |
| top_charts | country, chart, genre, limit | Apple's top 100 with movement, climbers, fallers and drop-outs. |
| algorithm_changes | country, days | Did 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_country | app | Ratings and average in each of the 22 storefronts. |
| get_listing | adam_id | Your App Store Connect listing: every locale with name, subtitle, keywords, promo, description, what's new, and whether the version is editable. |
| translate_listing | adam_id, from, to, fields | Translate one locale into others inside Apple's limits; returns the text, saves nothing. Pro and up. |
| update_listing | adam_id, locale, fields… | Save fields of one locale to App Store Connect; nothing is submitted for review. Pro and up. |
| tag_client | adam_id, client | Put a followed app under a client name (agencies); empty clears it. My apps, My keywords and the weekly email filter by it. |
| client_report | client, send, emails | The 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_report | client, emails, weekday, remove | Send the client report every week: weekday 0 (Sunday) to 6, after the morning reads. Pro and up. |
| share_report | run_id, password, revoke | A read-only link to a finished competitor report with your branding, optional password; also the PDF page URL. Pro and up. |
| alert_channels | — | Where alerts go: email and every Slack, Discord, Teams, Google Chat, Telegram or webhook channel set up. |
| add_alert_channel | kind, url, label | Send 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_channel | id | Remove one alert channel. |
| get_play_listing | package | Your Google Play listing: every language with title, short and full description. |
| translate_play_listing | package, from, to | Translate one Play language into others inside Google's limits; proposals only. Pro and up. |
| update_play_listing | package, language, fields… | Save one language of the Play listing; Google reviews it before it goes live. Pro and up. |