API Reference

The REST endpoints, their parameters and their response schemas.

Base URL: https://appatlas.dev/api/v1

Android SDK version

The newest dev.appatlas:atlas-links release on Maven Central. The response body is a single JSON string. The Android artifacts release together, so this is the version of atlas-core, atlas-crash and atlas-crash-ndk too.

Apple SDK version

The newest AppAtlasSDK release on the CocoaPods trunk. The response body is a single JSON string. Swift Package Manager resolves the same tag, so this is the SPM version as well.

.NET SDK version

The newest AppAtlas.Sdk release on NuGet. The response body is a single JSON string.

Track ID lookup

Turns an App Store bundle_id into its numeric track_id. The response body is a single JSON string. Unknown identifiers answer 404.

Bundle ID lookup

Turns an App Store track_id into its bundle_id. The response body is a single JSON string. Unknown identifiers answer 404.

Product ID lookup

Turns a Microsoft Store package_family_name into its product_id. The response body is a single JSON string. Unknown identifiers answer 404.

Package Family Name lookup

Turns a Microsoft Store product_id into its package_family_name. The response body is a single JSON string. Unknown identifiers answer 404. Win32 products (XP… ids) have no package family name and also answer 404.

Access token

Exchanges an API key (issued on the account page) for a one-hour Bearer access token. Send it as an Authorization: Bearer header on every call. There is no refresh token: when it expires, exchange the key again. Revoking the key ends the exchange and kills its live tokens.

Current permissions

What a call would actually be allowed to do right now: the key's policy met with what the stores allow. Each connected store is re-checked when its last verification has gone stale, so a key revoked at the store drops out of grants here rather than failing your next call. global lists the account-level actions; grants carries one line per store and action set, apps merged, actions the meet of what was granted and what the store permits. readOnly is true only when the caller holds no grants and no account-level actions at all; anonymous first-party reads answer readOnly true with empty lists.

App info

The full listing for one app: name, description, developer, pricing, rating, screenshots, videos and categories. Daily history comes from the analytics endpoint.

App builds

The builds the store took for an app you manage, newest first, each with what its delivery mail would warn about. App Store only; other stores return an empty list. Gated like official analytics: a session, an API key with data:read, or an embed grant reaches it, and anyone else gets an empty list rather than a 404, so it never reveals that builds exist.

App analytics

Daily snapshots and, for a managing caller, the store's own analytics. No listing scrape runs behind it. How much history comes back is one parameter, <code>span</code>.

Categories

The store's category list for the chosen listing. Each entry carries a display name, the store's own id, and a link to that category's page. Localized to lang. This endpoint reads no app identifier.

Category lookup

Resolves one category id to its localized display name, store link and embed address. It is the same row the categories endpoint lists. This endpoint reads no app identifier.

Top charts

The store's top chart (free, paid or grossing), for the whole store or for one category. Returns the same lightweight card as search. This endpoint reads no app identifier.

Reviews

A page of user reviews, including the developer's reply when one exists. Paginate by feeding the returned token back in.

Reply to a review

Posts the developer reply to one review. Posting again replaces the existing reply, which is how a reply is edited. Only for an app the caller manages through a connected store key; the review id must come from the official list (official=1 on reviews).

Delete a reply

Deletes the developer reply to one review. App Store only. Google Play's API can replace a reply but never remove one, so play-store returns <b>400 unsupported_store</b>. Deleting a review that has no reply is a no-op success.

Translate a review

Translates one review into the requested language and detects the language it was written in. Works for any review the reviews endpoint served: scraped or official, your own app or not. Each review in that response carries a signed reviewKey; send it back with the review's exact title and content, and the signature proves the text is what was served. Translations are cached per review and language; an edited review is translated afresh.

Draft a reply

Drafts a developer reply to one review and returns it as text. Nothing is sent to any store: posting stays with the reply endpoint and the person behind it. The draft is written in the review's own language; the response also carries the same reply rendered in your lang for checking, null when the two match. Send back the reviewKey from the reviews response with the review's exact title and content, like translation. The same review and options answer from storage for free; set regenerate to get a new take (the previous ones are kept).

Search

Search the store by keyword. Returns a lightweight card per app rather than the full listing.

Similar apps

Apps the store itself recommends alongside the given app. Same card shape as search.

News

Recent articles about the app, filtered for relevance and recency. Resolves the app name first, then runs a widening query ladder so a niche app still gets results without a common-noun app returning noise.

News thumbnails

Resolves Google News redirect URLs to their publisher URL and extracts an og:image for each. Store-agnostic: it takes any list of article URLs.

List deep links

Every deep link on the account, newest first, each with the visits counted for it. Needs the deeplink:read permission on the key.

Create a deep link

Creates a link and returns it with its short URL. The short id is assigned by us and cannot be chosen. Refused with 403 plan_limit when the plan's link allowance is already used up. Needs the deeplink:create permission.

Read a deep link

One link and its full routing config. Needs the deeplink:read permission.

Update a deep link

Replaces the link's name and routing config. The whole config is written, so send it complete: fields left out are dropped, not kept. The short URL never changes, so a link already in the wild keeps working. Needs the deeplink:update permission.

Delete a deep link

Deletes the link and every visit recorded for it. The short URL stops resolving at once, and the id is never reissued. Needs the deeplink:delete permission.

Deep-link analytics

What happened to the visits: totals, unique visitors, the route each launch settled on, and breakdowns by OS and country. A repeat visit seconds after one that counted is kept as a row but left out of every number here. The options block always describes the whole period, so a picker keeps entries the current filter excludes. Needs the deeplink:stats permission.

Start observing

Registers the app for daily snapshot collection at 00:00 UTC. Once registered, the app info response starts carrying a snapshots history of rating, review count, totalInstalls and version over time.

Stop observing

Removes the registration. Collected history is not deleted, but no new snapshots are taken.

App Atlas · Embed Reference · SDK Reference · Terms of Service · Privacy Policy · Sign up

ko · zh