Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://clerk.trysonar.app
Authorization not required, issuer https://clerk.trysonar.app
Changed the definition of "sonar_app_search"
SearchFind apps in the App Store or Google Play bykeyword.keyword,Returnse.g.rankedtolistgetofan app's store ID before calling other tools. Returns matching apps with metadata (resultsname,aredeveloper,returnedicon, rating). This is for finding apps, NOT for checking rankings: never report an app's position instorethisrankinglist as its rank. On iOS the list follows the iTunes Search API's text-match order, which is not the App Store's real ranking — below the top 10 the two can be dozens of places apart. For rank positions, track the keyword (sonar_track_keywords
Authorization not required, issuer https://clerk.trysonar.app
Changed the definition of "sonar_keyword_search" and "sonar_scan_competitor"
⟨117 unchanged words⟩ related term that couldn't be computed in time is re-checked while the call's time budget allows (through the metrics endpoint, 1 credit per keyword served); one still not ready comes back marked `pending` (queued, not charged) ⟨6 unchanged words⟩
⟨52 unchanged words⟩ the following hours — read results with sonar_competitor_keywords. Each account can scan a limited number of different competitors per UTC day (50 on trial and Indie, 250 on Agency); re-scanning one already scanned today is free, and past the limit the tool reports when it resets. Requires an Indie plan (trial counts) and ⟨12 unchanged words⟩
Added "sonar_cancel_review_reply", "sonar_dismiss_review_reply", "sonar_draft_review_reply" and 5 more; changed the definition of "sonar_set_alert" (54 tools before, 62 now)
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"cadence":{"anyOf":[{"enum":["instant","hourly","daily"],"type":"string"},{"type":"null"}],"description":"new_review only: email cadence. instant = within ~5 minutes of the review syncing, hourly = at most one email an hour, daily = the 08:30 UTC digest. Omit to keep the stored value (daily on create)."},"countries":{"anyOf":[{"items":{" ⟨135 unchanged words⟩ : rank cutoff, 1-200 (default 200). new_review: highest star rating that alerts, 1-5 (default 5 = every review; 3 = only 1-3★). Ignored by entered_top10, left_top10, new_ranking, competitor_change."} ⟨21 unchanged words⟩ chart (overall + its category, free/paid/grossing). new_review = a new App Store review arrived for an own iOS app (needs App Store Connect connected and the review responder switched on for the app).","enum":["rank_drop","rank_gain"," ⟨3 unchanged words⟩ ","rating_drop","review_spike","competitor_change","top_chart","new_review"],"type":"string"}},"required" ⟨3 unchanged words⟩
Authorization not required, issuer https://clerk.trysonar.app
Authorization not required, issuer https://clerk.trysonar.app
Changed the definition of "sonar_keyword_metrics" and "sonar_keyword_search"
⟨93 unchanged words⟩ call again after `retry_after_seconds` for just those keywords. Each row carries `measured_at` (when difficulty was measured) and `popularity_measured_at` (when the popularity value was measured — can be older), both ISO 8601 UTC. `stale: false` means both are under 7 days old; `stale: true` rows are real but older data (refreshed in the background) — check the timestamps when freshness matters.
⟨81 unchanged words⟩ the free tier. Answers within about 30 seconds.AEach rowwithcarries
Changed the definition of "sonar_add_screenshot", "sonar_app_aso_score", "sonar_app_changes" and 31 more
⟨8 unchanged words⟩ the end; reorder with sonar_update_screenshot_set). Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
⟨68 unchanged words⟩ :{"description":"Store-specific app identifier. iOS: bundle ID or numeric trackID.ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.","minLength":1," ⟨7 unchanged words⟩
Authorization not required, issuer https://clerk.trysonar.app
Changed the definition of "sonar_app_aso_score", "sonar_app_extract_keywords", "sonar_app_lookup" and 7 more
⟨5 unchanged words⟩ ":{"default":"us","description":"Market as an ISO 3166-1 alpha-2countrycode (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\".","maxLength": ⟨46 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"us","description":"Market as an ISO 3166-1 alpha-2country
Added "sonar_app_engagement" and "sonar_app_sales" (52 tools before, 54 now)
App Engagement (App Store Connect) — App Store Connect App Analytics for one of your own iOS apps: the impressions → product page views → downloads funnel with conversion rates (`page_view_rate`, `download_rate`) and App Store search share, impressions by source (App Store search, browse, app referrer, web referrer…), plus daily installs, deletions and sessions. Impressions follow App Store Connect's definition and INCLUDE product page views, so totals reconcile with ASC. Downloads come from the Sales report. Same numbers as the Engagement page. iOS only. Requires the Agency plan (403 on other plans) AND an App Store Connect con…
App Sales (App Store Connect) — App Store Connect sales for one of your own iOS apps: daily first-time downloads, redownloads, in-app purchase units and approximate USD proceeds (`proceeds_usd_approx`, converted with a static FX table — present it as approximate), window totals, and a per-country breakdown sorted by downloads. Same numbers as the Performance page. iOS only. Requires the Agency plan (403 on other plans) AND an App Store Connect connection at /settings/connections. Always check `status`: anything other than `ready` (not_connected, not_ios, app_not_in_account, pending, key_lacks_analytics) means there's no dat…
Authorization not required, issuer https://clerk.trysonar.app
Authorization not required, issuer https://clerk.trysonar.app
Changed the definition of "sonar_alert_events" and "sonar_set_alert"
⟨86 unchanged words⟩ ,"new_ranking","rating_drop","review_spike","competitor_change","top_chart"],"type":"string"}},"type":"object"}
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"countries":{"anyOf":[{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":10,"type":"array"},{"type":"null"}],"description":"top_chart only: storefronts to watch (ISO 3166-1 alpha-2, e.g. [\"us\", \"de\"]), max 10. Omit to keep the stored list; null or [] = the countries you track keywords in."},"enabled":{"description":"Whether the rule is ⟨45 unchanged words⟩ "description":"Sensitivity threshold (meaning depends ontype
Authorization not required, issuer https://clerk.trysonar.app
Authorization not required, issuer https://clerk.trysonar.app
Certificate changed, valid to 2026-12-18
Authorization not required, issuer https://clerk.trysonar.app
Authorization not required, issuer https://clerk.trysonar.app
Changed the definition of "sonar_app_rankings"
⟨12 unchanged words⟩ requested window, one history array per keyword. Prefer observations for daily status: ranked has a numeric rank; not_found means a completed search did not return the app (results_count is the returned search size); not_observed means no confirmed check, including legacy gaps. Never interpret an absent rank as a collection failure or assign a numeric rank to it. The legacy history array contains positive ranks only. Use this to check how rankings moved after ⟨26 unchanged words⟩
Authorization not required, issuer https://clerk.trysonar.app
Authorization not required, issuer https://clerk.trysonar.app
Changed the definition of "sonar_app_reviews"
⟨27 unchanged words⟩ "minLength":2,"type":"string"},"lang":{"description":"Android only: fetch one language feed (e.g. ar, fr). Omit to merge the market language plus en, es, fr, ar; coverage is not exhaustive.","pattern":"^[a-z]{2}$","type":"string"},"limit":{"description":"Maximum number of reviews ⟨112 unchanged words⟩
Certificate recorded, valid to 2026-10-20
Authorization not required, issuer https://clerk.trysonar.app
First tool surface recorded: 52 tools (server version 0.8.1)
Showing the latest 28 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
Cancel Scheduled Review Reply — WRITE tool — cancel a scheduled reply (manual or auto mode) before it posts; it goes back to draft. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
Dismiss Review — WRITE tool — mark a review as not needing a reply (also cancels a scheduled post). Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
Draft Review Reply (AI) — WRITE tool — write a fresh AI reply draft for a review using the app's instructions (and an optional hint), with English translations. Counts against the monthly AI-draft allowance, then 1 credit per draft. Never posts. Tip: agents can skip this and write the reply themselves with sonar_update_review_reply (not metered). Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
Post Review Reply — WRITE tool — PUBLIC ACTION: publishes the reply on the App Store under the developer's name (now, or after delay_minutes). Overwrites an existing response (Apple keeps one per review and marks it edited). Apple shows it within ~24h: status pending_publish, then published. Needs an Admin-role App Store Connect key. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
Review Inbox — An own iOS app's App Store reviews (synced from App Store Connect every 5 minutes) with their reply state: the AI draft or your text, English translations of non-English reviews and drafts, hold reasons (needs_human, quota, daily_cap), schedule time, and any live App Store response. Newest first, with per-status counts. Use the review `id` with sonar_update_review_reply / sonar_post_review_reply. Requires an Indie plan (trial counts), App Store Connect connected in Sonar, and the app to be one of your own iOS apps.
Review Responder Settings — The review responder's configuration for an own iOS app: whether it is switched on, manual vs auto mode (auto posts AI replies after a delay, only for reviews written after auto was enabled and within the star range), the reply instructions, sign-off, reply language, last sync, plus whether App Store Connect is connected and this month's AI-draft usage (included allowance, then 1 credit per extra draft). settings is null until the responder is switched on. Requires an Indie plan (trial counts), App Store Connect connected in Sonar, and the app to be one of your own iOS apps.
Configure Review Responder — WRITE tool — switch the review responder on/off for an own iOS app and update its instructions or auto-mode policy (partial update; omitted fields keep their value). Turning auto mode on only affects reviews written afterwards; anything the AI flags as needing a human is held. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
Update Review Reply — WRITE tool — replace a review's reply text (not metered, doesn't post). Use sonar_post_review_reply to publish. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
⟨9 unchanged words⟩ metadata edits, screenshot swaps, price changes,andcategory moves, iOS product page header swaps (`header`: data.action added/changed/removed + header artwork) and newly listed iOS In-App Events (`in_app_event`: title, kind, dates), newest first. Useful for correlating rank movements ⟨15 unchanged words⟩
⟨54 unchanged words⟩ ,"metadata","screenshots","price","category","header","in_app_event"],"type":"string"}},"required": ⟨3 unchanged words⟩
⟨88 unchanged words⟩ :{"description":"Store-specific app identifier. iOS: bundle ID or numeric trackID.ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.","minLength":1," ⟨7 unchanged words⟩
⟨68 unchanged words⟩ :{"description":"Store-specific app identifier. iOS: bundle ID (e.g. \"com.spotify.client\") or numeric track ID (e.g. \"123456789\324684580\").— the `storeId` returned by sonar_app_search works as-is. Android: package name (e.g. \"com.spotify.music\") ⟨10 unchanged words⟩
⟨48 unchanged words⟩ list (near_page_one / top_three_push / easy_target).Read thisUseFIRSTit when asked how an app is doing:—theseit'sare the same numbers the dashboard renders,so you don't need to recomputealreadyanythingcomputed fromrawrank history. Requires an Indie plan (trial counts).
⟨23 unchanged words⟩ the factors behind it, and the methodologyusedused.—Thealwaysfigurecommunicateis a model estimate, not reported revenue; the confidencealongsidegrade is thenumber.part that says how far to trust it. Needs a Sonar API key or connected account (1 credit per call on prepaid API credits); not part of the free tier.
⟨68 unchanged words⟩ :{"description":"Store-specific app identifier. iOS: bundle ID or numeric trackID.ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.","minLength":1," ⟨7 unchanged words⟩
Fetch user reviews forananyapp.app,Supportslivefilteringfrombythestarstorerating(uprangetoand~500sortingofbythe most recent orhelpful.most helpful for the country). The star-rating filters and `limit` apply to that fetched window, so a narrow filter on a small app can return few or no reviews. Useful for sentiment analysis, feature-request mining, and competitiveresearch.research; for an already-summarized view of a tracked app, sonar_review_insights returns themed AI analysis instead. Needs a Sonar API key or connected account (1 credit per call on prepaid API credits); not part of the free tier. If the store is throttling, the result ⟨30 unchanged words⟩
⟨179 unchanged words⟩ :{"description":"Store-specific app identifier. iOS: bundle ID or numeric trackID.ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.","minLength":1," ⟨7 unchanged words⟩
⟨55 unchanged words⟩ clusters, threat narratives, strengths, posture).ReadUsethisitbeforewhendecidingchoosing which keywords to target next. Requires an Indie ⟨4 unchanged words⟩
⟨43 unchanged words⟩ Sonar app ids needed by sonar_track_keywords and sonar_track_competitor. Own apps count against the plan cap (Indie 10, Agency 50; competitors are not capped) — at the cap the call fails with a 403 plan_limit error. Requires an Indie plan (trial counts) and ⟨12 unchanged words⟩
⟨74 unchanged words⟩ :{"description":"Store-specific app identifier. iOS: bundle ID or numeric trackID.ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.","minLength":1," ⟨35 unchanged words⟩
Create an app-store screenshot set for aproduct.product,Readfromsonar_screenshot_layout_guideyourfirst,ownthen`screens`authorlayoutstheorscreensaarray.built-in template. The layout JSON format and template ids are documented by sonar_screenshot_layout_guide. The set is immediately visible/editable for humans in the Screenshot Studio (studio_url in the response). Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
WRITE tool — delete a product in the caller's Sonar workspace and untrackitseveryappsappinlinkedthetocaller'sit,Sonarwithworkspace.their tracked keywords, discovered keywords, and competitor links. The product's screenshot sets are deleted too. Shared store data (app metadata, snapshots, rank history) is not deleted. Returns { id, deleted, untracked_apps }. Requires an Indie plan (trial counts) and ⟨12 unchanged words⟩
⟨15 unchanged words⟩ deleting the last one is rejected. Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
⟨18 unchanged words⟩ before deleting work they may want. Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
⟨16 unchanged words⟩ by its tracked-keyword id (from sonar_app_keywords). Equivalent to sonar_untrack_keywords with a single id; that tool removes several (or all) of an app's keywords in one call. Requires an Indie plan (trial counts) and ⟨12 unchanged words⟩
⟨45 unchanged words⟩ is Sonar's "what should I track next"answer: read it, pick theanswer;winners,rowsthencantrackbethemtracked with sonar_track_keywords. Requires an Indie plan (trial counts).
⟨23 unchanged words⟩ replaced with placeholders to keep the response readable. Requires an Indie plan (trial counts).
Research a keyword and related terms. Returns up to 10 rows — the seed keyword plus the store's top autocomplete suggestions — each with difficulty (0-100), popularity score, and resultscountcount. Use this to find keywords worth targeting; forthemetricsseedonkeywordtermsplusyourelatedalreadyautocompleteknow,suggestions.sonar_keyword_metricsUseisthischeaper.toOnfindprepaidkeywordsAPIworthcreditstargeting.it costs 10 credits per call (rows that could not be computed are refunded); it needs a Sonar API key or connected account and is not part of the free tier. Answers within about 30seconds;seconds. A row with `stale: true` is a stored value older than 7 days; a related term that couldn't be computed in ⟨14 unchanged words⟩
⟨5 unchanged words⟩ seed keyword from the App Store or GooglePlay.Play,Returnsintermsthewithorderatheprioritystorescoreshows(higherthem.=Listmorepositionsearched).is the only demand signal: the `priority` field is 0 on Google Play and currently 0 on the App Store as well. Lighter and faster than sonar_keyword_search — use when ⟨58 unchanged words⟩
List every product in yourproductsworkspacewith(unpaginated):theireach product's id, name, country, competitor count, and its linked store versions (Sonar app id, store, store_id, name). Product ids are what sonar_track_app, sonar_track_competitor, sonar_remove_competitor, sonar_delete_product, andcompetitorthecounts.screenshot-setUsetoolsittake;tofordiscoverper-appproduct/appsnapshotsUUIDs.and competitor apps use sonar_list_apps. Requires an Indie plan (trial counts).
⟨11 unchanged words⟩ locales, studio_url). Use sonar_get_screenshot_set for full layouts. Requires an Indie plan (trial counts).
⟨6 unchanged words⟩ from a product in the caller's Sonar workspace. Drops the competitor link under every own app of the product; if no other own app in the workspace still references the competitor, the competitor app is untracked as well. 404 when the product has no such competitor. Requires an Indie plan (trial counts) and ⟨12 unchanged words⟩
⟨18 unchanged words⟩ layouts use) and which store each belongsto.to — including the landscape App Store creative-asset canvases (category "creative": product page header and search results asset). Pick a device here before sonar_create_screenshot_set. Requires an Indie plan (trial counts).
The layout-format reference for Sonar screenshotsets. Callsets:thisstaticONCEtext,beforesocreatingoneorcalleditingperscreenshotsessionlayoutsis—enough.itIt documents the layout JSON schema, coordinate system, ⟨14 unchanged words⟩
⟨99 unchanged words⟩ {"type":"null"}],"description":"SensitivityTriggerthresholdthreshold; omit or null for the default. rank_drop / rank_gain: positions moved (meaningdefaultdepends5).onrating_drop:type;tenthsforoftop_chartait'sstar (default 2 = a 0.2-star drop). review_spike: new reviews since the previous daily snapshot (default 25). top_chart: rank cutoff, 1-200,(default 200).Omit or nullIgnoredtobyuseentered_top10,theleft_top10,per-typenew_ranking,default.competitor_change."},"type":{"description":"The alert ⟨40 unchanged words⟩
⟨33 unchanged words⟩ locale is auto-enabled on the set. Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
⟨5 unchanged words⟩ {"default":"overall","description":"Categorykey,key; keys differ by store (e.g. iOS \"HEALTH_AND_FITNESS\SOCIAL_NETWORKING\"(iOS)/or\"GAMES\", Android \"HEALTH_AND_FITNESS\SOCIAL\" / \"GAME\";(Android\"HEALTH_AND_FITNESS\" exists on both). An unknown key is rejected with an error. Use \"overall\" (default) for the ⟨126 unchanged words⟩
⟨65 unchanged words⟩ identifier of the version to link. iOS: bundle ID or numeric trackID.ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.","minLength":1," ⟨8 unchanged words⟩
⟨66 unchanged words⟩ of the COMPETITOR app to track. iOS: bundle ID or numeric trackID.ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.","minLength":1," ⟨8 unchanged words⟩
⟨35 unchanged words⟩ outcomes (created / already_tracked / failed). Tracked keywords count against the workspace's plan cap (Indie 2,500, Agency 10,000 per workspace); terms beyond the remaining headroom come back as failed with the plan-limit message while the rest are still tracked. Requires an Indie plan (trial counts) and ⟨12 unchanged words⟩
WRITE tool — untrack an app in the caller's Sonar workspace. Deletes the workspace's tracked keywords for it (with their notes and stars), itsassociateddiscoveredtrackingkeywords,dataandinits competitor links, and detaches it from its product — deleting thecaller'sproduct,Sonarandworkspace.that product's screenshot sets, if no other app is left. Shared store data (app metadata, snapshots, rank history) is not deleted. To drop a competitor from one product use sonar_remove_competitor instead. Requires an Indie plan (trial counts) and ⟨12 unchanged words⟩
⟨28 unchanged words⟩ ones (exactly one of the two). For a single keyword, sonar_delete_tracked_keyword is equivalent. Requires an Indie plan (trial counts) and ⟨12 unchanged words⟩
⟨26 unchanged words⟩ the Screenshot Studio for human review. Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
⟨16 unchanged words⟩ (with image data stripped). Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
⟨27 unchanged words⟩ free tier, limited daily use per IP). If the store is throttling, the result may be Sonar's stored copy: it then comes back as `{ data, meta }` with `meta.stale: true`, its date in `meta.stale_as_of`, and a `meta.note` to pass on to the user.
⟨5 unchanged words⟩ ":{"default":"us","description":"Market as an ISO 3166-1 alpha-2countrycode (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\".","maxLength": ⟨54 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"us","description":"Market as an ISO 3166-1 alpha-2countrycode (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\".","maxLength": ⟨46 unchanged words⟩
⟨20 unchanged words⟩ sentiment analysis, feature-request mining, and competitive research. If the store is throttling, the result may be Sonar's stored copy: it then comes back as `{ data, meta }` with `meta.stale: true`, its date in `meta.stale_as_of`, and a `meta.note` to pass on to the user.
⟨5 unchanged words⟩ ":{"default":"us","description":"Market as an ISO 3166-1 alpha-2countrycode (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\".","maxLength": ⟨157 unchanged words⟩
⟨31 unchanged words⟩ free tier, limited daily use per IP). If the store is throttling, the result may be Sonar's stored copy: it then comes back as `{ data, meta }` with `meta.stale: true`, its date in `meta.stale_as_of`, and a `meta.note` to pass on to the user.
⟨5 unchanged words⟩ ":{"default":"us","description":"Market as an ISO 3166-1 alpha-2countrycode (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\".","maxLength": ⟨64 unchanged words⟩
⟨55 unchanged words⟩ when you want related keyword ideas alongside metrics.AAnswers within about 30 seconds: a keywordthethatAPIcan'tcannotbecomputecomputedrightinawaythat time comes back as `pending` (queued ontheSonar's scrape fleet, not charged) — this tool already,waitsresultsandarere-checksbeingbriefly;cached)if—itcallisagainstillafterpending,`retry_after_seconds`callforagainjustafterthose`retry_after_seconds`.keywords.
⟨5 unchanged words⟩ ":{"default":"us","description":"One of Sonar's 72 keyword-research markets, as an ISO 3166-1 alpha-2countrycode (e.g. \"us\", \"gb\", \"de\", \"jp\", \"br\"). Keyword data isn't available for other storefronts. Default \"us\".","maxLength":2, ⟨80 unchanged words⟩
⟨21 unchanged words⟩ suggestions. Use this to find keywords worth targeting. Answers within about 30 seconds; a related term that couldn't be computed in time comes back marked `pending` (queued, not charged) — get it later with sonar_keyword_metrics.
⟨5 unchanged words⟩ ":{"default":"us","description":"One of Sonar's 72 keyword-research markets, as an ISO 3166-1 alpha-2countrycode (e.g. \"us\", \"gb\", \"de\", \"jp\", \"br\"). Keyword data isn't available for other storefronts. Default \"us\".","maxLength":2, ⟨46 unchanged words⟩
⟨46 unchanged words⟩ free tier, limited daily use per IP). If the store is throttling, the result may be Sonar's stored copy: it then comes back as `{ data, meta }` with `meta.stale: true`, its date in `meta.stale_as_of`, and a `meta.note` to pass on to the user.
⟨5 unchanged words⟩ ":{"default":"us","description":"Market as an ISO 3166-1 alpha-2countrycode (e.g. \"us\", \"gb\", \"de\", \"mt\"). Nearly every App Store storefront and Google Play market works; the few small storefronts that are not supported return an error naming them. Default \"us\".","maxLength":2, ⟨47 unchanged words⟩
⟨69 unchanged words⟩ is requested (no previous snapshot yet). Answers within about 30 seconds: when a live refresh can't finish in time the newest stored chart is returned with `stale: true` and its `measuredAt` date. Works without an API key (free tier, ⟨6 unchanged words⟩
⟨57 unchanged words⟩ ":{"default":"us","description":"Market as an ISO 3166-1 alpha-2countrycode (e.g. \"us\", \"gb\", \"de\", \"mt\"). Nearly every App Store storefront and Google Play market works; the few small storefronts that are not supported return an error naming them. Default \"us\".","maxLength":2, ⟨48 unchanged words⟩