# Référence de l'API > https://storelift.net/fr/docs/api/ Une URL de base, une clé, du JSON en entrée comme en sortie. Chaque endpoint ci-dessous est aussi un outil MCP du même nom. OpenAPI 3.1: https://storelift.net/openapi.json ## URL de base `https://storelift.net/v1` Tous les chemins ci-dessous sont relatifs à cette URL. Envoyez `GET` pour les lectures et `POST` uniquement sur `/actions`. ## Authentification Envoyez la clé dans `Authorization: Bearer ` ou dans `x-api-key`. Créez les clés sous Réglages › API ; chaque clé porte des scopes, une liste facultative d'adresses IP autorisées, une liste facultative d'apps et un budget mensuel de crédits facultatif. Une clé qui atteint son budget répond `402 key_budget_reached` jusqu'au changement de mois ; les autres clés continuent de fonctionner. Les clés live (`sl_live_`) pour l'API REST sont disponibles à partir de Pro, ou sur n'importe quel plan avec un pack de crédits. Free inclut une clé live qui ne fonctionne qu'avec le serveur MCP. Les clés de test (`sl_test_`) renvoient les données de la sandbox sur tous les plans. Les assistants se connectent via OAuth par le [serveur MCP](https://storelift.net/fr/mcp-server/) sur tous les plans. ## Crédits et limites Chaque appel coûte le nombre de crédits indiqué pour lui ; `/account` et `/usage` coûtent 0, et l'aperçu d'une écriture coûte 0. Chaque réponse porte `x-credits-used`, `x-credits-limit`, `x-credits-remaining` et `x-credits-reset`. Le nombre de requêtes par seconde est fixé par plan ; au-delà, vous recevez `429 rate_limited` avec `retry-after`. Les endpoints Hive s'ouvrent avec des crédits API achetés ou avec Hive Explorer et sont aussi décomptés d'un quota quotidien : 500 appels avec les crédits d'un pack, 10 000 avec Hive Explorer. [Crédits par appel](https://storelift.net/fr/hive/api/) ## Sandbox `https://storelift.net/v1/sandbox` répond à toutes les lectures ci-dessous qui ont un exemple de réponse, sans clé et sans crédits. Les données sont fixes et datées, ce qui garde les tests stables. Les clés de test (`sl_test_`) renvoient les mêmes données sur l'URL de base live et n'écrivent jamais. ## Lire un rang Un rang a trois états, et ils restent distincts : `measured: false` signifie que la requête n'a pas été mesurée ce jour-là, `rank: null` qu'elle a été mesurée et que l'app est en dehors des résultats lus, et un nombre est le rang. ## Erreurs Toutes les erreurs ont le même corps : `{ "error": "", "message": "…", "docs": "…" }`. `error` est stable ; branchez votre logique sur ce champ, pas sur `message`. Certains codes ajoutent des champs tels que `scope`, `field` ou `limit`. [Tous les codes d'erreur](https://storelift.net/fr/docs/api/errors/) ## Exemples commentés Trois tâches, du premier appel au résultat que vous conservez. Chaque commande s'exécute sur la sandbox : elle ne dépense donc aucun crédit et ne change rien, et chaque réponse est celle que la sandbox renvoie pour cette commande. Avec votre propre clé, les chemins sont les mêmes sans `/sandbox` et chaque appel coûte le nombre de crédits indiqué pour lui. Une clé de test (`sl_test_`) y répond aussi avec les données de la sandbox, pour 0 crédit. ### Ajouter à un rapport les rangs par mot-clé de la semaine Lisez les mots-clés d'une app dans un pays et gardez-en une seule ligne. Refaites-le chaque semaine : les lignes s'alignent et forment une tendance. Scope: `apps:read` · Crédits: 2 · 0 dans la sandbox ou avec une clé de test · Plan: Sandbox et clé de test: tous les plans · clé live: Pro et plans supérieurs · Fonctionne depuis: API 1.5.0 1. Trouvez l'identifiant de l'app. ```sh curl "https://storelift.net/v1/sandbox/apps" ``` Réponse: ```json { "apps": [ { "id": "sbx-lumen", "name": "Lumen — Sleep Sounds", "icon": null, "iosId": "1000000001", "androidPkg": "net.storelift.sandbox.lumen", "bundleId": "net.storelift.sandbox.lumen", "countries": [ "us", "gb", "de" ], "keywords": [ "sleep sounds", "white noise", "rain sounds" ], "keywordsByCountry": { "us": [ "sleep sounds", "white noise", "rain sounds" ], "gb": [ "sleep sounds", "white noise", "rain sounds" ], "de": [ "sleep sounds", "white noise", "rain sounds" ] }, "manualRivals": null, "keywordTags": null, "buriedKeywords": null, "goal": null, "tasksDone": null }, { "id": "sbx-quill", "name": "Quill Notes", "icon": null, "iosId": "1000000002", "androidPkg": null, "bundleId": "net.storelift.sandbox.quill", "countries": [ "us", "jp" ], "keywords": [ "notes", "markdown notes", "journal" ], "keywordsByCountry": { "us": [ "notes", "markdown notes", "journal" ], "jp": [ "notes", "markdown notes", "journal" ] }, "manualRivals": null, "keywordTags": null, "buriedKeywords": null, "goal": null, "tasksDone": null } ] } ``` 2. Lisez tous les mots-clés suivis de cette app dans ce pays. ```sh curl "https://storelift.net/v1/sandbox/apps/sbx-lumen/keywords?country=us" ``` Réponse (keywords: 2 lignes sur 8): ```json { "country": "us", "platform": "ios", "live": true, "measuredAt": "2026-09-27T02:10:00.000Z", "keywords": [ { "term": "sleep sounds", "measured": true, "rank": null, "demand": 73, "hintCount": 6, "popularity": 73, "popularitySource": "p2", "popularityWeek": null, "popularityNone": false, "difficulty": 70, "difficultyBand": "brutal", "difficultyNone": false, "popularityMeasuring": false, "difficultyMeasuring": false, "measuring": false, "searchDepth": 200 }, { "term": "white noise", "measured": true, "rank": 57, "demand": 37, "hintCount": 4, "popularity": 37, "popularitySource": "p2", "popularityWeek": null, "popularityNone": false, "difficulty": 70, "difficultyBand": "brutal", "difficultyNone": false, "popularityMeasuring": false, "difficultyMeasuring": false, "measuring": false, "searchDepth": 200 } ] } ``` Ramenez la réponse à la ligne que vous stockez. Un mot-clé avec `measured: true` et `rank: null` a été mesuré et l'app est absente des résultats ; il est compté à part d'un mot-clé qui n'a pas été mesuré. ```js function weeklyRow(body) { const ranked = body.keywords.filter((k) => k.measured && k.rank !== null); const best = ranked.reduce((a, b) => (a && a.rank <= b.rank ? a : b), null); return { measuredAt: body.measuredAt, country: body.country, platform: body.platform, keywords: body.keywords.length, ranked: ranked.length, absent: body.keywords.filter((k) => k.measured && k.rank === null).length, notMeasured: body.keywords.filter((k) => !k.measured).length, best: best && { term: best.term, rank: best.rank }, }; } ``` Résultat: ```json { "measuredAt": "2026-09-27T02:10:00.000Z", "country": "us", "platform": "ios", "keywords": 8, "ranked": 6, "absent": 2, "notMeasured": 0, "best": { "term": "nature sounds", "rank": 29 } } ``` Un identifiant d'app que l'espace de travail ne possède pas répond `404` : ```sh curl "https://storelift.net/v1/sandbox/apps/sbx-unknown/keywords?country=us" ``` ```json { "error": "not_found", "message": "No such app in this workspace.", "docs": "https://storelift.net/docs/api/errors#not_found" } ``` ### Demander qui est classé au-dessus de vous Les mêmes données par le [serveur MCP](https://storelift.net/fr/mcp-server/) : l'assistant fait deux appels d'outil. Pour les envoyer à la main, placez une clé de test dans `STORELIFT_TEST_KEY`. Scope: `apps:read` · Crédits: 2 · 0 avec une clé de test · Plan: Clé de test et OAuth: tous les plans · clé live: tous les plans · Fonctionne depuis: API 1.5.0 · outils dans storelift-mcp 1.1.1 1. `list_apps` renvoie l'identifiant de l'app. ```sh curl "https://storelift.net/mcp" \ -H "Authorization: Bearer $STORELIFT_TEST_KEY" \ -H "content-type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_apps","arguments":{}}}' ``` Réponse: ```json { "apps": [ { "id": "sbx-lumen", "name": "Lumen — Sleep Sounds", "icon": null, "iosId": "1000000001", "androidPkg": "net.storelift.sandbox.lumen", "bundleId": "net.storelift.sandbox.lumen", "countries": [ "us", "gb", "de" ], "keywords": [ "sleep sounds", "white noise", "rain sounds" ], "keywordsByCountry": { "us": [ "sleep sounds", "white noise", "rain sounds" ], "gb": [ "sleep sounds", "white noise", "rain sounds" ], "de": [ "sleep sounds", "white noise", "rain sounds" ] }, "manualRivals": null, "keywordTags": null, "buriedKeywords": null, "goal": null, "tasksDone": null }, { "id": "sbx-quill", "name": "Quill Notes", "icon": null, "iosId": "1000000002", "androidPkg": null, "bundleId": "net.storelift.sandbox.quill", "countries": [ "us", "jp" ], "keywords": [ "notes", "markdown notes", "journal" ], "keywordsByCountry": { "us": [ "notes", "markdown notes", "journal" ], "jp": [ "notes", "markdown notes", "journal" ] }, "manualRivals": null, "keywordTags": null, "buriedKeywords": null, "goal": null, "tasksDone": null } ] } ``` 2. `get_rivals` renvoie les apps classées au-dessus d'elle, mot-clé par mot-clé. ```sh curl "https://storelift.net/mcp" \ -H "Authorization: Bearer $STORELIFT_TEST_KEY" \ -H "content-type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_rivals","arguments":{"appId":"sbx-lumen","country":"us"}}}' ``` Réponse (rivals: 2 lignes sur 3): ```json { "country": "us", "platform": "ios", "rivals": [ { "id": "1000000101", "name": "Calm Rain", "ratings": 57046, "terms": [ { "term": "sleep sounds", "theirRank": 1, "ourRank": null }, { "term": "white noise", "theirRank": 1, "ourRank": 57 } ] }, { "id": "1000000102", "name": "Noisli", "ratings": 16114, "terms": [ { "term": "sleep sounds", "theirRank": 2, "ourRank": null }, { "term": "white noise", "theirRank": 2, "ourRank": 57 } ] } ] } ``` Ce que dit la réponse, concurrent par concurrent. `ourRank: null` désigne un mot-clé dont l'app est absente. ```js function rivalsAhead(body) { return body.rivals.map((r) => ({ name: r.name, ratings: r.ratings, aheadOn: r.terms.length, absentOn: r.terms.filter((t) => t.ourRank === null).length, })); } ``` Résultat: ```json [ { "name": "Calm Rain", "ratings": 57046, "aheadOn": 8, "absentOn": 2 }, { "name": "Noisli", "ratings": 16114, "aheadOn": 8, "absentOn": 2 }, { "name": "Deep Sleep Tones", "ratings": 64683, "aheadOn": 8, "absentOn": 2 } ] ``` Un identifiant d'app que l'espace de travail ne possède pas revient sous forme d'erreur d'outil que l'assistant peut lire, et non comme une requête en échec : ```sh curl "https://storelift.net/mcp" \ -H "Authorization: Bearer $STORELIFT_TEST_KEY" \ -H "content-type: application/json" \ -d '{"jsonrpc":"2.0","id":9,"method":"tools/call","params":{"name":"get_rivals","arguments":{"appId":"sbx-unknown","country":"us"}}}' ``` ```text ERROR: No such app in this workspace. ``` ### Voir ce que des identifiants d'accès peuvent lire, en HTTP ou par MCP Le premier appel de toute intégration : quel plan, quels scopes, quelles apps et combien de crédits il reste. `GET /account` et l'outil `whoami` renvoient le même corps, et aucun des deux ne coûte de crédits. Scope: aucun · Crédits: 0 · Plan: Sandbox, clé de test et OAuth: tous les plans · clé live: Pro et plans supérieurs · Fonctionne depuis: API 1.5.0 · outils dans storelift-mcp 1.5.0 1. En HTTP. ```sh curl "https://storelift.net/v1/sandbox/account" ``` Réponse: ```json { "plan": "studio", "auth": "test_key", "scopes": [ "apps:read", "reviews:read", "ai:read", "revenue:read", "hive:read", "hive:spy", "hive:estimate", "ads:read" ], "apps": [ { "id": "sbx-lumen", "name": "Lumen — Sleep Sounds", "countries": [ "us", "gb", "de" ] }, { "id": "sbx-quill", "name": "Quill Notes", "countries": [ "us", "jp" ] } ], "appRestriction": false, "credits": { "used": 0, "limit": 50000, "resetsAt": null }, "hive": { "perDay": 10000 }, "ratePerSecond": 10, "docs": "https://storelift.net/guide/storelift-api/" } ``` 2. La même réponse sous forme d'appel d'outil. ```sh curl "https://storelift.net/mcp" \ -H "Authorization: Bearer $STORELIFT_TEST_KEY" \ -H "content-type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"whoami","arguments":{}}}' ``` Réponse: ```json { "plan": "studio", "auth": "test_key", "scopes": [ "apps:read", "reviews:read", "ai:read", "revenue:read", "hive:read", "hive:spy", "hive:estimate", "ads:read" ], "apps": [ { "id": "sbx-lumen", "name": "Lumen — Sleep Sounds", "countries": [ "us", "gb", "de" ] }, { "id": "sbx-quill", "name": "Quill Notes", "countries": [ "us", "jp" ] } ], "appRestriction": false, "credits": { "used": 0, "limit": 50000, "resetsAt": null }, "hive": { "perDay": 10000 }, "ratePerSecond": 10, "docs": "https://storelift.net/guide/storelift-api/" } ``` Vérifiez le scope dont un appel a besoin avant de le faire, et lisez le solde avant un traitement par lot. ```js function allowance(body) { return { plan: body.plan, auth: body.auth, scopes: body.scopes, apps: body.apps.map((a) => a.id), creditsLeft: body.credits.limit - body.credits.used, ratePerSecond: body.ratePerSecond, }; } ``` Résultat: ```json { "plan": "studio", "auth": "test_key", "scopes": [ "apps:read", "reviews:read", "ai:read", "revenue:read", "hive:read", "hive:spy", "hive:estimate", "ads:read" ], "apps": [ "sbx-lumen", "sbx-quill" ], "creditsLeft": 50000, "ratePerSecond": 10 } ``` Sans identifiants d'accès, l'endpoint MCP répond `401` avec une erreur JSON-RPC, et un client qui prend en charge l'autorisation MCP lance la connexion OAuth à partir de cette réponse : ```sh curl "https://storelift.net/mcp" \ -H "content-type: application/json" \ -d '{"jsonrpc":"2.0","id":9,"method":"tools/call","params":{"name":"whoami","arguments":{}}}' ``` ```json { "jsonrpc": "2.0", "id": 9, "error": { "code": -32001, "message": "No credentials were sent. Sign in with OAuth on any plan, or add Authorization: Bearer . Live keys require Pro, Studio, Enterprise, or an eligible Free account with purchased API credits or active Explorer. Tool access still depends on plan, scopes and credits. Generate a key at Storelift → Settings → API keys." } } ``` ## Paramètres communs Ils se lisent de la même façon sur tous les endpoints qui les acceptent ; chaque endpoint indique ceux qu'il accepte. - `appId` (path, string) — app id from list_apps - `country` (query, string) — country code, e.g. tr, us (defaults to the app's first country) - `platform` (query, ios | android) — defaults to ios - `country` (query, string) — storefront code, e.g. us (defaults to us) ## [Compte](https://storelift.net/fr/docs/api/account/) Le plan, les scopes et l'usage de la clé elle-même, la recherche dans le compte et le flux d'alertes. Lire le plan et l'usage coûte 0 crédit. - [`GET /alerts`](https://storelift.net/fr/docs/api/account/#list_alerts) — The alert feed of this workspace — rank drops and rises, keywords entering or leaving the results, rivals… (1) - [`GET /portfolio`](https://storelift.net/fr/docs/api/account/#get_portfolio_overview) — Today across every app in the workspace, one row per app: live users, users and new users, ad revenue,… (2) - [`GET /account`](https://storelift.net/fr/docs/api/account/#whoami) — Who this key or session belongs to: plan, how it authenticated, the scopes it carries, the apps it may… (0) - [`GET /usage`](https://storelift.net/fr/docs/api/account/#get_usage) — Every quota of the workspace with what is used and the reset time: tracked keywords, apps, discovery, AI… (0) - [`GET /search`](https://storelift.net/fr/docs/api/account/#search) — Search this account's own records — app names and store ids, tracked keywords, and the rival apps that… (1) - [`GET /fetch`](https://storelift.net/fr/docs/api/account/#fetch) — The full record behind one id from search: an app card, one tracked keyword with its current state and… (1) ## [Vos apps](https://storelift.net/fr/docs/api/apps/) Les apps que suit cet espace de travail : rangs, concurrents, avis, page du store, chronologie de la fiche, mises en avant, top charts et contrôles de la fiche. - [`GET /apps`](https://storelift.net/fr/docs/api/apps/#list_apps) — List the apps tracked in this Storelift account (id, name, countries, keywords) (1) - [`GET /apps/{appId}/keywords`](https://storelift.net/fr/docs/api/apps/#get_keywords) — Keyword ranks for one app in one App Store / Google Play country (1) - [`GET /apps/{appId}/rivals`](https://storelift.net/fr/docs/api/apps/#get_rivals) — Apps that rank ABOVE this app in search (1) - [`GET /apps/{appId}/ai`](https://storelift.net/fr/docs/api/apps/#get_ai_visibility) — App mentions in a dated sample of AI engine answers; this does not reproduce what ChatGPT, Claude or… (1) - [`GET /apps/{appId}/ai-check`](https://storelift.net/fr/docs/api/apps/#run_ai_visibility_check) — Start an AI visibility sample for one app in one country, with the engines available for the run (1) - [`GET /apps/{appId}/history`](https://storelift.net/fr/docs/api/apps/#get_history) — Keyword rank history for one country (1) - [`GET /apps/{appId}/page`](https://storelift.net/fr/docs/api/apps/#get_store_page) — The app's own store listing signals for one country (name and subtitle are not included): version, in-app… (1) - [`GET /apps/{appId}/reviews`](https://storelift.net/fr/docs/api/apps/#get_reviews) — Recent reviews for one country: `list` holds the App Store reviews, `android` the Google Play reviews (a… (1) - [`GET /apps/{appId}/charts`](https://storelift.net/fr/docs/api/apps/#get_charts) — App Store chart position for one country: current ranks per list (free / paid / grossing, overall and in… (1) - [`GET /apps/{appId}/reviews/search`](https://storelift.net/fr/docs/api/apps/#search_reviews) — Search one app's reviews in one storefront by text, star rating, app version and date range, newest first… (1) - [`GET /apps/{appId}/reviews/stats`](https://storelift.net/fr/docs/api/apps/#get_review_stats) — Star-rating distribution, average and share of 1–2 star reviews for one app in one storefront, plus a… (1) - [`GET /apps/{appId}/reviews/summary`](https://storelift.net/fr/docs/api/apps/#summarize_reviews) — Review AI for one app in one storefront: a summary of the recent reviews and the themes in them —… (1) - [`GET /apps/{appId}/reviews/reply-draft`](https://storelift.net/fr/docs/api/apps/#draft_review_reply) — A developer reply draft for one review, in the storefront's language (1) - [`GET /apps/{appId}/timeline`](https://storelift.net/fr/docs/api/apps/#get_listing_timeline) — Dated changes to one app's listing — new version, screenshots, in-app events, featuring from the store… (1) - [`GET /apps/{appId}/today`](https://storelift.net/fr/docs/api/apps/#get_today) — One app's day in one answer — the Today screen: purchases, trials and renewals from the connected sources,… (1) - [`GET /apps/{appId}/competition`](https://storelift.net/fr/docs/api/apps/#get_keyword_competition) — How many apps compete on each keyword in one storefront, returned for terms seen on two or more apps (1) - [`GET /apps/{appId}/rivals/{rivalId}`](https://storelift.net/fr/docs/api/apps/#get_rival_detail) — One rival of your app in one storefront: its name, rating and rating count with a 90-day history of them… (1) - [`GET /apps/{appId}/rivals/{rivalId}/adnetworks`](https://storelift.net/fr/docs/api/apps/#get_rival_ad_networks) — How a rival monetises with ads: the ad networks it works with, each marked DIRECT or RESELLER (1) - [`GET /apps/{appId}/rivals/{rivalId}/market`](https://storelift.net/fr/docs/api/apps/#get_rival_market) — A rival's market in one storefront: on Google Play the exact install count and in-app purchase price… (1) - [`GET /apps/{appId}/storefront-audit`](https://storelift.net/fr/docs/api/apps/#get_storefront_audit) — Your iOS listing in every App Store storefront: where the app is sold, which storefronts serve the… (1) - [`GET /apps/{appId}/suggest`](https://storelift.net/fr/docs/api/apps/#suggest_keywords) — New keyword ideas for one app in one storefront, written in that storefront's search language: terms of… (1) - [`POST /apps/{appId}/validate-listing`](https://storelift.net/fr/docs/api/apps/#validate_listing) — Check a draft App Store listing before it goes to App Store Connect (1) - [`GET /apps/{appId}/draft`](https://storelift.net/fr/docs/api/apps/#draft_listing) — A listing draft — title, subtitle, promotional text and description — built from the keywords measured for… (1) - [`GET /apps/{appId}/localize`](https://storelift.net/fr/docs/api/apps/#localize_listing) — Write the full App Store listing for a new locale — name, subtitle, keyword field and description — from… (1) - [`GET /apps/{appId}/shot-text`](https://storelift.net/fr/docs/api/apps/#get_screenshot_text) — The caption text on your first four App Store screenshots in one storefront (1) - [`GET /apps/{appId}/chart-movers`](https://storelift.net/fr/docs/api/apps/#get_chart_movers) — Who moved in the app's own category chart: risers and fallers (3+ places), new entrants and drop-outs,… (1) - [`GET /apps/{appId}/featuring`](https://storelift.net/fr/docs/api/apps/#get_featuring) — Where Apple shows the app today, per country: editorial cards (dedicated: true when the story is about… (1) - [`GET /apps/{appId}`](https://storelift.net/fr/docs/api/apps/#get_app) — One tracked app with its platform ids, countries, tracked keywords per country and the latest measurement… (1) - [`GET /apps/{appId}/weekly-plan`](https://storelift.net/fr/docs/api/apps/#get_weekly_plan) — This week's listing suggestions for the app — the same list as the dashboard's "This week" card, best first (1) ## [Revenus et Apple Ads](https://storelift.net/fr/docs/api/growth/) Les sources connectées par app : revenus, événements d'abonnement, entonnoir de l'App Store, prix et codes d'offre, l'avant/après d'un changement, ainsi que les campagnes, mots-clés, termes de recherche et commandes Apple Ads. Scopes revenue:read et ads:read. - [`GET /apps/{appId}/revenue`](https://storelift.net/fr/docs/api/growth/#get_revenue) — Revenue and downloads for one app from the sources the user connected: App Store Connect daily units per… (1) - [`GET /apps/{appId}/subscriptions`](https://storelift.net/fr/docs/api/growth/#get_subscription_events) — Subscription event counts for one app from the RevenueCat / Adapty webhook: per day and per country —… (1) - [`GET /apps/{appId}/funnel`](https://storelift.net/fr/docs/api/growth/#get_store_funnel) — The App Store conversion funnel for one app from App Store Connect analytics: impressions → product page… (1) - [`GET /apps/{appId}/campaigns`](https://storelift.net/fr/docs/api/growth/#get_ads_campaigns) — Apple Ads campaigns that promote one app (matched by the app's App Store id, not by name): spend,… (1) - [`GET /apps/{appId}/ads-keywords`](https://storelift.net/fr/docs/api/growth/#get_ads_keywords) — Every Apple Ads keyword bought for one app across its campaigns (last 28 days), by spend: bid, match type,… (1) - [`GET /apps/{appId}/ads-search-terms`](https://storelift.net/fr/docs/api/growth/#get_ads_search_terms) — The searches people actually typed that triggered the app's Apple Ads (last 28 days), by spend: the search… (1) - [`GET /apps/{appId}/ads-commands`](https://storelift.net/fr/docs/api/growth/#get_ads_command_status) — Apple Ads commands for one app's campaigns — from the dashboard, from automation rules and from… (1) - [`GET /apps/{appId}/search-popularity`](https://storelift.net/fr/docs/api/growth/#get_search_popularity) — Apple's own search popularity, from the Apple Ads account connected to this workspace: the most searched… (1) - [`GET /apps/{appId}/pricing`](https://storelift.net/fr/docs/api/growth/#get_pricing_offers) — Product prices and offer codes for one app from the RevenueCat or Adapty webhook, over the last 365 days:… (1) - [`GET /apps/{appId}/country-prices`](https://storelift.net/fr/docs/api/growth/#get_country_prices) — Country prices for one of the app's products, read from App Store Connect / Google Play (Pro): per country… (1) - [`GET /apps/{appId}/change-impact`](https://storelift.net/fr/docs/api/growth/#get_change_impact) — What a change did: for one change day (a new version, screenshots, subtitle, keyword field, a campaign… (1) ## [Hive](https://storelift.net/fr/docs/api/hive/) N'importe quelle app ou n'importe quel marché que mesure le réseau Storelift, que vous les suiviez ou non. Fait partie de Hive Explorer. - [`GET /rank-check`](https://storelift.net/fr/docs/api/hive/#check_rank) — The live rank of one of your apps for any search term in one storefront, as the store shows it right now —… (10) - [`GET /keyword-difficulty`](https://storelift.net/fr/docs/api/hive/#get_keyword_metrics) — Demand and difficulty inputs for one App Store search term in one storefront: its demand (`demand`) and… (10) - [`GET /hive/find`](https://storelift.net/fr/docs/api/hive/#find_apps) — Find apps across the top charts we measure: filter by category, storefront, chart (Top Grossing, Top Free,… (20) - [`GET /hive/charts`](https://storelift.net/fr/docs/api/hive/#market_charts) — One top chart as we last measured it: the ranked app ids for a storefront, list kind and optional… (10) - [`GET /hive/movers`](https://storelift.net/fr/docs/api/hive/#market_movers) — Who climbed, who fell, who entered and who left one top chart, against the same chart N days ago (10) - [`GET /hive/new`](https://storelift.net/fr/docs/api/hive/#market_new_apps) — Apps seen on a top chart for the first time, newest first, with the publisher behind each one (10) - [`GET /hive/publisher/{publisherId}`](https://storelift.net/fr/docs/api/hive/#market_publisher) — Every app of one publisher that we have seen on a chart, with the day each was first seen (10) - [`GET /hive/resolve`](https://storelift.net/fr/docs/api/hive/#hive_search_apps) — Find any app's id: by name or developer (the top matches in that storefront, with publisher, category,… (10) - [`GET /hive/similar/{appId}`](https://storelift.net/fr/docs/api/hive/#hive_similar_apps) — The store's own similar-apps shelf for any app (Apple's You Might Also Like, Google's Similar apps), in… (10) - [`GET /hive/reviews/{appId}`](https://storelift.net/fr/docs/api/hive/#hive_app_reviews) — Any app's recent reviews in one storefront, newest first: stars, title, text, version and date, plus the… (10) - [`POST /hive/keywords/{term}/metrics/measure`](https://storelift.net/fr/docs/api/hive/#hive_measure_keyword_metrics) — Start a measurement of one keyword's popularity and/or difficulty in one storefront when the stored value… (50) - [`GET /hive/apps/{id}`](https://storelift.net/fr/docs/api/hive/#hive_app_details) — Any app's latest daily measurement (10) - [`GET /hive/keywords/{term}/ranks`](https://storelift.net/fr/docs/api/hive/#hive_keyword_ranks) — Who ranks for a keyword, day by day (10) - [`GET /hive/keywords/{term}/metrics`](https://storelift.net/fr/docs/api/hive/#hive_keyword_metrics) — Read a keyword's current popularity and difficulty (10) - [`GET /hive/keywords/{term}/metrics/history`](https://storelift.net/fr/docs/api/hive/#hive_keyword_metrics_history) — Read stored keyword metric observations over time (20) - [`GET /hive/spy/{id}`](https://storelift.net/fr/docs/api/hive/#hive_keyword_spy) — The keywords any app ranks for (200) - [`GET /hive/estimate/{id}`](https://storelift.net/fr/docs/api/hive/#hive_estimate) — Revenue and downloads for any app (500) - [`GET /hive/gap`](https://storelift.net/fr/docs/api/hive/#get_keyword_gap) — Keyword gap across several apps (400) - [`GET /hive/research`](https://storelift.net/fr/docs/api/hive/#hive_keyword_research) — Keyword research from a seed term (50) - [`GET /hive/landscape`](https://storelift.net/fr/docs/api/hive/#hive_category_landscape) — What it takes to rank in a category (10) ## [Écritures](https://storelift.net/fr/docs/api/actions/) Chaque écriture se déroule en deux étapes : un aperçu qui ne change rien, puis une confirmation avec le jeton qu'il a renvoyé. - [`GET /jobs/{jobId}`](https://storelift.net/fr/docs/api/actions/#get_job) — Status of a long-running job started by a confirmed action (Apple Ads command, review reply, listing… (0) - [`POST /actions`](https://storelift.net/fr/docs/api/actions/#preview_action) — Preview a write (0) - [`POST /actions/confirm`](https://storelift.net/fr/docs/api/actions/#confirm_action) — Apply a previewed write (par action)