API-Referenz
Eine Basis-URL, ein Schlüssel, JSON rein und raus. Jeder Endpunkt unten ist auch ein MCP-Tool mit demselben Namen.
openapi.json · Fehlercodes · MCP-Server
Basis-URL
https://storelift.net/v1
Jeder Pfad unten ist relativ dazu. Senden Sie GET für Lesezugriffe und POST nur auf /actions.
Authentifizierung
Senden Sie den Schlüssel in Authorization: Bearer <key> oder in x-api-key. Schlüssel erstellen Sie unter Einstellungen › API; jeder Schlüssel trägt Scopes, eine optionale IP-Freigabeliste, eine optionale App-Liste und ein optionales monatliches Credit-Budget. Ein Schlüssel, der sein Budget erreicht, antwortet mit 402 key_budget_reached, bis der Monat wechselt; die anderen Schlüssel funktionieren weiter.
Live-Schlüssel (sl_live_) für die REST-API gibt es ab Pro oder in jedem Plan mit einem Credit-Paket. Free enthält einen Live-Schlüssel, der nur am MCP-Server funktioniert. Testschlüssel (sl_test_) liefern in jedem Plan die Sandbox-Daten. Assistenten melden sich in jedem Plan per OAuth über den MCP-Server an.
Credits und Limits
Jeder Aufruf kostet die Credits, die bei ihm angegeben sind; /account und /usage kosten 0, und die Vorschau eines Schreibvorgangs kostet 0. Jede Antwort enthält x-credits-used, x-credits-limit, x-credits-remaining und x-credits-reset.
Die Anfragen pro Sekunde sind je Plan festgelegt; darüber erhalten Sie 429 rate_limited mit retry-after. Hive-Endpunkte öffnen sich mit gekauften API-Credits oder mit Hive Explorer und zählen zusätzlich gegen eine Tagesgrenze: 500 Aufrufe mit Paket-Credits, 10.000 mit Hive Explorer. Credits pro Aufruf
Sandbox
https://storelift.net/v1/sandbox beantwortet jeden Lesezugriff unten, der eine Beispielantwort hat, ohne Schlüssel und ohne Credits. Die Daten sind fest und datiert, damit Tests stabil bleiben.
Testschlüssel (sl_test_) liefern dieselben Daten auf der Live-Basis-URL und schreiben nie.
Einen Rang lesen
Ein Rang hat drei Zustände, und sie bleiben getrennt: measured: false heißt, die Suchanfrage wurde an diesem Tag nicht gemessen; rank: null heißt, sie wurde gemessen und die App steht außerhalb der gelesenen Ergebnisse; eine Zahl ist der Rang.
Fehler
Jeder Fehler hat denselben Body: { "error": "<code>", "message": "…", "docs": "…" }. error ist stabil; verzweigen Sie danach, nicht nach message. Manche Codes ergänzen Felder wie scope, field oder limit. Alle Fehlercodes
Praxisbeispiele
Drei Aufgaben, vom ersten Aufruf bis zum Ergebnis, das Sie behalten. Jeder Befehl läuft gegen die Sandbox, verbraucht also keine Credits und ändert nichts, und jede Antwort ist die, die die Sandbox dafür zurückgibt.
Mit Ihrem eigenen Schlüssel sind die Pfade dieselben ohne /sandbox, und jeder Aufruf kostet die bei ihm angegebenen Credits. Ein Testschlüssel (sl_test_) antwortet auch dort mit den Sandbox-Daten, für 0 Credits.
Die Keyword-Rankings dieser Woche in einen Bericht aufnehmen
Lesen Sie die Keywords einer App in einer Storefront und behalten Sie eine einzige Zeile. Wenn Sie das wöchentlich ausführen, reihen sich die Zeilen zu einem Trend.
Die App-ID finden.
curl "https://storelift.net/v1/sandbox/apps"Antwort
Jedes getrackte Keyword dieser App in der Storefront lesen.
curl "https://storelift.net/v1/sandbox/apps/sbx-lumen/keywords?country=us"Antwort (keywords: 2 von 8 Zeilen)
Verdichten Sie die Antwort zu der Zeile, die Sie speichern. Ein Keyword mit measured: true und rank: null wurde gemessen, und die App fehlt in den Ergebnissen; es wird getrennt von einem Keyword gezählt, das nicht gemessen wurde.
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 },
};
}Ergebnis
{
"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
}
}Bei einer App-ID, die der Workspace nicht hat, lautet die Antwort 404:
curl "https://storelift.net/v1/sandbox/apps/sbx-unknown/keywords?country=us"{
"error": "not_found",
"message": "No such app in this workspace.",
"docs": "https://storelift.net/docs/api/errors#not_found"
}Fragen, wer über Ihnen rankt
Dieselben Daten über den MCP-Server: Der Assistent macht zwei Tool-Aufrufe. Um sie von Hand zu senden, legen Sie einen Testschlüssel in STORELIFT_TEST_KEY ab.
list_appsliefert die App-ID.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":{}}}'Antwort
get_rivalsliefert die Apps, die über ihr ranken, Keyword für Keyword.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"}}}'Antwort (rivals: 2 von 3 Zeilen)
Was die Antwort sagt, Konkurrent für Konkurrent. ourRank: null ist ein Keyword, bei dem die App fehlt.
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,
}));
}Ergebnis
[
{
"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
}
]Eine App-ID, die der Workspace nicht hat, kommt als Tool-Fehler zurück, den der Assistent lesen kann, nicht als fehlgeschlagene Anfrage:
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"}}}'ERROR: No such app in this workspace.Sehen, was Zugangsdaten lesen dürfen, über HTTP oder MCP
Der erste Aufruf jeder Integration: welcher Plan, welche Scopes, welche Apps und wie viele Credits übrig sind. GET /account und das Tool whoami liefern denselben Body, und keines von beiden kostet Credits.
Über HTTP.
curl "https://storelift.net/v1/sandbox/account"Antwort
Dieselbe Antwort als Tool-Aufruf.
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":{}}}'Antwort
Prüfen Sie den Scope, den ein Aufruf braucht, bevor Sie ihn ausführen, und lesen Sie das Guthaben vor einer Reihe von Aufrufen.
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,
};
}Ergebnis
{
"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
}Ohne Zugangsdaten antwortet der MCP-Endpunkt mit 401 und einem JSON-RPC-Fehler, und ein Client, der die MCP-Autorisierung unterstützt, startet von dort die OAuth-Anmeldung:
curl "https://storelift.net/mcp" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":9,"method":"tools/call","params":{"name":"whoami","arguments":{}}}'{
"jsonrpc": "2.0",
"id": 9,
"error": {
"code": -32001,
"message": "No credentials were sent. Sign in with OAuth on any plan, or add Authorization: Bearer <your Storelift API key>. 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."
}
}Gemeinsame Parameter
Diese bedeuten bei jedem Endpunkt, der sie annimmt, dasselbe; jeder Endpunkt führt auf, welche er annimmt.
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
appId | path | string | App-ID aus list_apps |
country | query | string | Ländercode, z. B. tr, us (Standard: erstes Land der App) |
platform | query | ios | android | Standard ios |
country | query | string | Storefront-Code, z. B. us (Standard us) |
Konto
Plan, Scopes und Nutzung des Schlüssels selbst, die Kontosuche und der Alarm-Feed. Plan und Nutzung zu lesen kostet 0 Credits.
- GET
/alertsDer Alarm-Feed dieses Workspace — Ranking-Verluste und -Gewinne, Keywords, die in die Ergebnisse kommen… - GET
/portfolioDer heutige Tag über alle Apps des Workspace, eine Zeile pro App: Live-Nutzer, Nutzer und neue Nutzer… - GET
/accountWem dieser Schlüssel oder diese Sitzung gehört: Tarif, Art der Authentifizierung, die enthaltenen… - GET
/usageAlle Kontingente des Workspace mit Verbrauch und Zeitpunkt der Zurücksetzung: verfolgte Keywords, Apps… - GET
/searchDurchsucht die eigenen Einträge dieses Kontos — App-Namen und Store-IDs, verfolgte Keywords und die… - GET
/fetchDer vollständige Eintrag hinter einer ID aus search: eine App-Karte, ein verfolgtes Keyword mit…
Ihre Apps
Die Apps, die dieser Workspace trackt: Rankings, Konkurrenten, Rezensionen, Store-Seite, Verlauf des Store-Eintrags, Featuring, Charts und Prüfungen des Store-Eintrags.
- GET
/appsListet die in diesem Storelift-Konto verfolgten Apps (ID, Name, Länder, Keywords) - GET
/apps/{appId}/keywordsKeyword-Platzierungen einer App in einem Land des App Store / von Google Play - GET
/apps/{appId}/rivalsApps, die in der Suche VOR dieser App ranken - GET
/apps/{appId}/aiApp-Nennungen in einer datierten Stichprobe von Antworten der KI-Engines; das gibt nicht wieder, was… - GET
/apps/{appId}/ai-checkStartet für eine App in einem Land eine KI-Sichtbarkeits-Stichprobe mit den für den Lauf verfügbaren… - GET
/apps/{appId}/historyRanking-Verlauf der Keywords für ein Land - GET
/apps/{appId}/pageDie Signale der eigenen Produktseite der App für ein Land (Name und Untertitel sind nicht enthalten)… - GET
/apps/{appId}/reviewsAktuelle Rezensionen für ein Land: `list` enthält die App-Store-Rezensionen, `android` die… - GET
/apps/{appId}/chartsChart-Position im App Store für ein Land: aktuelle Plätze je Liste (gratis / bezahlt / umsatzstärkste… - GET
/apps/{appId}/reviews/searchDurchsucht die Rezensionen einer App in einem Storefront nach Text, Sternebewertung, App-Version und… - GET
/apps/{appId}/reviews/statsSterneverteilung, Durchschnitt und Anteil der Rezensionen mit 1–2 Sternen für eine App in einem… - GET
/apps/{appId}/reviews/summaryRezensions-KI für eine App in einem Storefront: eine Zusammenfassung der aktuellen Rezensionen und… - GET
/apps/{appId}/reviews/reply-draftEin Entwurf für eine Entwicklerantwort auf eine Rezension, in der Sprache des Storefronts - GET
/apps/{appId}/timelineDatierte Änderungen an der Produktseite einer App — neue Version, Screenshots, In-App-Events… - GET
/apps/{appId}/todayDer Tag einer App in einer Antwort — die Ansicht „Heute“: Käufe, Testphasen und Verlängerungen aus den… - GET
/apps/{appId}/competitionWie viele Apps in einem Storefront um jedes Keyword konkurrieren, geliefert für Begriffe, die bei zwei oder mehr Apps gesehen wurden - GET
/apps/{appId}/rivals/{rivalId}Ein Wettbewerber Ihrer App in einem Storefront: Name, Bewertung und Anzahl der Bewertungen mit ihrem… - GET
/apps/{appId}/rivals/{rivalId}/adnetworksWie ein Wettbewerber mit Werbung Geld verdient: die Werbenetzwerke, mit denen er arbeitet, jeweils als DIRECT oder RESELLER gekennzeichnet - GET
/apps/{appId}/rivals/{rivalId}/marketDer Markt eines Wettbewerbers in einem Storefront: bei Google Play die genaue Installationszahl und die… - GET
/apps/{appId}/storefront-auditIhre iOS-Produktseite in jedem App-Store-Storefront: wo die App verkauft wird, welche Storefronts statt… - GET
/apps/{appId}/suggestNeue Keyword-Ideen für eine App in einem Storefront, geschrieben in der Suchsprache dieses Storefronts… - POST
/apps/{appId}/validate-listingPrüft den Entwurf einer App-Store-Produktseite, bevor er an App Store Connect geht - GET
/apps/{appId}/draftEin Entwurf für die Produktseite — Titel, Untertitel, Werbetext und Beschreibung — aufgebaut aus den… - GET
/apps/{appId}/localizeSchreibt die vollständige App-Store-Produktseite für eine neue Sprache — Name, Untertitel, Keyword-Feld… - GET
/apps/{appId}/shot-textDer Text auf Ihren ersten vier App-Store-Screenshots in einem Storefront - GET
/apps/{appId}/chart-moversWer sich im Kategorie-Chart der App bewegt hat: Aufsteiger und Absteiger (3+ Plätze), Neueinsteiger und… - GET
/apps/{appId}/featuringWo Apple die App heute zeigt, je Land: redaktionelle Karten (dedicated: true, wenn die Story von dieser… - GET
/apps/{appId}Eine verfolgte App mit ihren Plattform-IDs, Ländern, verfolgten Keywords je Land und dem neuesten… - GET
/apps/{appId}/weekly-planDie Produktseiten-Vorschläge dieser Woche für die App — dieselbe Liste wie die Karte „Diese Woche“ im Dashboard, die besten zuerst
Umsatz & Apple Ads
Die verbundenen Quellen je App: Umsatz, Abo-Ereignisse, der App-Store-Funnel, Preise und Angebotscodes, das Vorher und Nachher einer Änderung sowie Kampagnen, Keywords, Suchbegriffe und Befehle in Apple Ads. Scopes revenue:read und ads:read.
- GET
/apps/{appId}/revenueUmsatz und Downloads einer App aus den Quellen, die der Nutzer verbunden hat: tägliche Einheiten je… - GET
/apps/{appId}/subscriptionsZahl der Abo-Ereignisse einer App aus dem Webhook von RevenueCat / Adapty: je Tag und je Land… - GET
/apps/{appId}/funnelDer Conversion-Funnel des App Store für eine App aus den Analysedaten von App Store Connect… - GET
/apps/{appId}/campaignsApple-Ads-Kampagnen, die eine App bewerben (zugeordnet über die App-Store-ID der App, nicht über den… - GET
/apps/{appId}/ads-keywordsJedes für eine App gebuchte Apple-Ads-Keyword über alle ihre Kampagnen (letzte 28 Tage), nach Ausgaben… - GET
/apps/{appId}/ads-search-termsDie Suchanfragen, die Menschen tatsächlich eingegeben haben und die Apple-Ads-Anzeigen der App… - GET
/apps/{appId}/ads-commandsApple-Ads-Befehle für die Kampagnen einer App — aus dem Dashboard, aus Automatisierungsregeln und aus… - GET
/apps/{appId}/search-popularityApples eigene Suchpopularität, aus dem mit diesem Workspace verbundenen Apple-Ads-Konto: die… - GET
/apps/{appId}/pricingProduktpreise und Angebotscodes einer App aus dem Webhook von RevenueCat oder Adapty, über die letzten… - GET
/apps/{appId}/country-pricesLänderpreise für eines der Produkte der App, gelesen aus App Store Connect / Google Play (Pro): je Land… - GET
/apps/{appId}/change-impactWas eine Änderung bewirkt hat: Für einen Änderungstag (eine neue Version, Screenshots, Untertitel…
Hive
Alle Apps und Märkte, die das Storelift-Netzwerk misst, ob Sie sie tracken oder nicht. Teil von Hive Explorer.
- GET
/rank-checkDer Live-Platz einer Ihrer Apps für einen beliebigen Suchbegriff in einem Storefront, so, wie der Store… - GET
/keyword-difficultyEingangswerte für Nachfrage und Schwierigkeit eines App-Store-Suchbegriffs in einem Storefront: seine… - GET
/hive/findFindet Apps in den Top-Charts, die wir messen: Filter nach Kategorie, Storefront, Chart (Top Grossing… - GET
/hive/chartsEin Top-Chart, wie wir es zuletzt gemessen haben: die App-IDs in Rangfolge für ein Storefront, eine… - GET
/hive/moversWer in einem Top-Chart gestiegen, gefallen, eingestiegen und ausgestiegen ist, verglichen mit demselben Chart vor N Tagen - GET
/hive/newApps, die erstmals in einem Top-Chart gesehen wurden, das Neueste zuerst, jeweils mit dem Anbieter dahinter - GET
/hive/publisher/{publisherId}Jede App eines Anbieters, die wir in einem Chart gesehen haben, mit dem Tag der ersten Sichtung - GET
/hive/resolveFindet die ID einer beliebigen App: über Name oder Entwickler (die besten Treffer in diesem Storefront… - GET
/hive/similar/{appId}Das eigene Regal des Stores mit ähnlichen Apps für eine beliebige App (Apples You Might Also Like… - GET
/hive/reviews/{appId}Die aktuellen Rezensionen einer beliebigen App in einem Storefront, das Neueste zuerst: Sterne, Titel… - POST
/hive/keywords/{term}/metrics/measureStartet eine Messung der Popularität und/oder Schwierigkeit eines Keywords in einem Storefront, wenn… - GET
/hive/apps/{id}Die neueste Tagesmessung einer beliebigen App - GET
/hive/keywords/{term}/ranksWer für ein Keyword rankt, Tag für Tag - GET
/hive/keywords/{term}/metricsLiest die aktuelle Popularität und Schwierigkeit eines Keywords - GET
/hive/keywords/{term}/metrics/historyLiest gespeicherte Beobachtungen der Keyword-Metriken im Zeitverlauf - GET
/hive/spy/{id}Die Keywords, für die eine beliebige App rankt - GET
/hive/estimate/{id}Umsatz und Downloads einer beliebigen App - GET
/hive/gapKeyword-Gap über mehrere Apps - GET
/hive/researchKeyword-Recherche aus einem Seed-Begriff - GET
/hive/landscapeWas nötig ist, um in einer Kategorie zu ranken
Schreibvorgänge
Jeder Schreibvorgang läuft in zwei Schritten: eine Vorschau, die nichts ändert, dann die Bestätigung mit dem Token, das die Vorschau zurückgegeben hat.
- GET
/jobs/{jobId}Status eines länger laufenden Jobs, der durch eine bestätigte Aktion gestartet wurde (Apple-Ads-Befehl… - POST
/actionsVorschau eines Schreibvorgangs - POST
/actions/confirmWendet einen in der Vorschau gezeigten Schreibvorgang an