API referansı
Tek temel adres, tek anahtar; giden de gelen de JSON. Aşağıdaki her uç, aynı adla bir MCP aracı olarak da var.
openapi.json · Hata kodları · MCP sunucusu
Temel adres
https://storelift.net/v1
Aşağıdaki her yol bu adrese görelidir. Okumalar için GET gönder; POST yalnız /actions içindir.
Kimlik doğrulama
Anahtarı Authorization: Bearer <key> ya da x-api-key başlığında gönder. Anahtarları Ayarlar › API altında üret; her anahtar kapsamlarını, isteğe bağlı olarak da izinli IP listesini, uygulama listesini ve aylık kredi bütçesini taşır. Bütçesine ulaşan anahtar, ay dönene kadar 402 key_budget_reached yanıtı verir; öbür anahtarlar çalışmaya devam eder.
REST API için canlı anahtarlar (sl_live_) Pro ve üstü planlardadır ya da kredi paketiyle her planda açılır. Free planda yalnız MCP sunucusunda çalışan tek canlı anahtar vardır. Test anahtarları (sl_test_) her planda kum havuzu verisini döndürür. Asistanlar her planda MCP sunucusu üzerinden OAuth ile giriş yapar.
Kredi ve sınırlar
Her çağrı, üzerinde yazan kadar kredi harcar; /account ve /usage 0 kredidir, bir yazmanın önizlemesi de 0 kredidir. Her yanıt x-credits-used, x-credits-limit, x-credits-remaining ve x-credits-reset başlıklarını taşır.
Saniyedeki istek sayısı plana göre belirlenir; aşınca retry-after ile birlikte 429 rate_limited alırsın. Hive uçları satın alınmış API kredisiyle ya da Hive Explorer ile açılır ve ayrıca günlük bir haktan düşer: paket kredisiyle 500 çağrı, Hive Explorer ile 10.000. Çağrı başına kredi
Kum havuzu
https://storelift.net/v1/sandbox, aşağıda örnek yanıtı olan her okumayı anahtarsız ve kredisiz yanıtlar. Veri sabit ve tarihlidir; bu sayede testler kararlı kalır.
Test anahtarları (sl_test_) aynı veriyi canlı temel adreste döndürür ve hiçbir zaman yazmaz.
Sıra nasıl okunur
Bir sıranın üç hâli vardır ve bunlar birbirine karışmaz: measured: false sorgunun o gün ölçülmediğini, rank: null ölçüldüğünü ama uygulamanın okunan sonuçların dışında kaldığını gösterir; sayı ise sıranın kendisidir.
Hatalar
Her hata aynı gövdeyle döner: { "error": "<code>", "message": "…", "docs": "…" }. error değişmez; kodunda message değerine değil ona göre karar ver. Bazı kodlar scope, field ya da limit gibi alanlar ekler. Bütün hata kodları
Örnek işler
Üç iş; ilk çağrıdan saklayacağın sonuca kadar. Her komut kum havuzunda çalışır; bu yüzden kredi harcamaz ve hiçbir şeyi değiştirmez, her yanıt da kum havuzunun o komuta verdiği yanıttır.
Kendi anahtarınla yollar /sandbox olmadan aynıdır ve her çağrı üzerinde yazan kadar kredi harcar. Test anahtarı (sl_test_) orada da kum havuzu verisiyle, 0 krediyle yanıt verir.
Bu haftanın kelime sıralarını bir rapora ekle
Bir uygulamanın bir vitrindeki kelimelerini oku ve tek bir satır sakla. Her hafta çalıştır; satırlar alt alta dizilip trendi gösterir.
Uygulama kimliğini bul.
curl "https://storelift.net/v1/sandbox/apps"Yanıt
O uygulamanın o vitrinde izlenen bütün kelimelerini oku.
curl "https://storelift.net/v1/sandbox/apps/sbx-lumen/keywords?country=us"Yanıt (keywords: 2 / 8 satır)
Yanıtı, sakladığın satıra indirge. measured: true ve rank: null taşıyan kelime ölçülmüştür, uygulama sonuçlarda yoktur; ölçülmemiş kelimeden ayrı sayılır.
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 },
};
}Sonuç
{
"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
}
}Çalışma alanında olmayan bir uygulama kimliği 404 yanıtı alır:
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"
}Üstünde kimin sıralandığını sor
Aynı veri, MCP sunucusu üzerinden: asistan iki araç çağrısı yapar. Çağrıları elle göndermek için STORELIFT_TEST_KEY değişkenine bir test anahtarı koy.
list_appsuygulama kimliğini döndürür.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":{}}}'Yanıt
get_rivalsonun üstünde sıralanan uygulamaları kelime kelime döndürür.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"}}}'Yanıt (rivals: 2 / 3 satır)
Yanıtın söylediği, rakip rakip. ourRank: null, uygulamanın sonuçlarında yer almadığı kelimedir.
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,
}));
}Sonuç
[
{
"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
}
]Çalışma alanında olmayan bir uygulama kimliği başarısız bir istek olarak değil, asistanın okuyabildiği bir araç hatası olarak döner:
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.Bir kimlik bilgisinin neleri okuyabildiğini HTTP ya da MCP ile gör
Her entegrasyonun ilk çağrısı: hangi plan, hangi kapsamlar, hangi uygulamalar ve kaç kredi kaldı. GET /account ile whoami aracı aynı gövdeyi döndürür; ikisi de kredi harcamaz.
HTTP ile.
curl "https://storelift.net/v1/sandbox/account"Yanıt
Aynı yanıt, araç çağrısı olarak.
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":{}}}'Yanıt
Bir çağrıyı yapmadan önce gerektirdiği kapsama bak; toplu bir işe başlamadan önce de bakiyeyi oku.
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,
};
}Sonuç
{
"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
}Kimlik bilgisi olmadan MCP ucu 401 ile birlikte bir JSON-RPC hatası döndürür; MCP yetkilendirmesini destekleyen istemci OAuth girişini bu yanıttan başlatır:
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."
}
}Ortak parametreler
Bunlar, kabul eden her uçta aynı anlama gelir; her uç kabul ettiklerini kendi listesinde gösterir.
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
appId | path | string | list_apps'ten gelen uygulama kimliği |
country | query | string | ülke kodu, ör. tr, us (varsayılan: uygulamanın ilk ülkesi) |
platform | query | ios | android | varsayılan ios |
country | query | string | vitrin kodu, ör. us (varsayılan us) |
Hesap
Anahtarın kendi planı, kapsamları ve kullanımı, hesap içi arama ve uyarı akışı. Planı ve kullanımı okumak 0 kredi.
- GET
/alertsBu çalışma alanının uyarı akışı — sıra düşüşleri ve yükselişleri, sonuçlara giren ya da sonuçlardan… - GET
/portfolioÇalışma alanındaki bütün uygulamalarda bugün, uygulama başına bir satır: canlı kullanıcılar… - GET
/accountBu anahtarın ya da oturumun kime ait olduğu: plan, nasıl kimlik doğruladığı, taşıdığı kapsamlar… - GET
/usageÇalışma alanının bütün kotaları, kullanılan miktar ve sıfırlanma zamanıyla: izlenen kelimeler… - GET
/searchBu hesabın kendi kayıtlarında ara — uygulama adları ve mağaza kimlikleri, izlenen kelimeler ve… - GET
/fetchsearch'ten gelen bir kimliğin arkasındaki tam kayıt: bir uygulama kartı, güncel durumu ve sıra…
Uygulamaların
Bu çalışma alanının izlediği uygulamalar: sıralar, rakipler, yorumlar, mağaza sayfası, künye zaman çizelgesi, öne çıkarılmalar, listeler ve künye denetimleri.
- GET
/appsBu Storelift hesabında izlenen uygulamaları listele (kimlik, ad, ülkeler, kelimeler) - GET
/apps/{appId}/keywordsBir uygulamanın tek bir App Store / Google Play ülkesindeki kelime sıraları - GET
/apps/{appId}/rivalsAramada bu uygulamanın ÜSTÜNDE sıralanan uygulamalar - GET
/apps/{appId}/aiYapay zekâ motorlarının cevaplarından alınmış tarihli bir örnekteki uygulama anmaları; ChatGPT, Claude… - GET
/apps/{appId}/ai-checkBir uygulama için tek bir ülkede, o turda kullanılabilen motorlarla bir AI görünürlük örneği başlat.… - GET
/apps/{appId}/historyTek bir ülke için kelime sıra geçmişi - GET
/apps/{appId}/pageUygulamanın tek bir ülkedeki kendi mağaza sayfası sinyalleri (ad ve alt başlık dahil değildir): sürüm… - GET
/apps/{appId}/reviewsTek bir ülkenin son yorumları: `list` App Store yorumlarını, `android` Google Play yorumlarını tutar… - GET
/apps/{appId}/chartsTek bir ülke için App Store liste konumu: liste başına güncel sıralar (ücretsiz / ücretli / en çok… - GET
/apps/{appId}/reviews/searchBir uygulamanın tek bir vitrindeki yorumlarında metne, yıldız puanına, uygulama sürümüne ve tarih… - GET
/apps/{appId}/reviews/statsBir uygulamanın tek bir vitrindeki yıldız dağılımı, ortalaması ve 1–2 yıldızlı yorum payı; ayrıca gün… - GET
/apps/{appId}/reviews/summaryBir uygulamanın tek bir vitrini için Yorum AI: son yorumların özeti ve içlerindeki temalar… - GET
/apps/{appId}/reviews/reply-draftTek bir yorum için vitrinin dilinde geliştirici cevabı taslağı - GET
/apps/{appId}/timelineBir uygulamanın mağaza sayfasındaki tarihli değişiklikler — yeni sürüm, ekran görüntüleri, uygulama içi… - GET
/apps/{appId}/todayBir uygulamanın günü tek cevapta — Bugün ekranı: bağlı kaynaklardan satın almalar, denemeler ve… - GET
/apps/{appId}/competitionTek bir vitrinde her kelimede kaç uygulamanın rekabet ettiği; iki ya da daha fazla uygulamada görülen terimler için döner - GET
/apps/{appId}/rivals/{rivalId}Uygulamanın tek bir vitrindeki bir rakibi: adı, puanı ve puan sayısı ile bunların 90 günlük geçmişi… - GET
/apps/{appId}/rivals/{rivalId}/adnetworksBir rakibin reklamla nasıl para kazandığı: çalıştığı reklam ağları, her biri DIRECT ya da RESELLER olarak işaretli - GET
/apps/{appId}/rivals/{rivalId}/marketBir rakibin tek bir vitrindeki pazarı: Google Play'de tam kurulum sayısı ve uygulama içi satın alma… - GET
/apps/{appId}/storefront-auditiOS mağaza sayfan bütün App Store vitrinlerinde: uygulamanın nerede satıldığı, hangi vitrinlerin kendi… - GET
/apps/{appId}/suggestBir uygulama için tek bir vitrinde, o vitrinin arama dilinde yazılmış yeni kelime fikirleri: insanların… - POST
/apps/{appId}/validate-listingBir App Store mağaza sayfası taslağını App Store Connect'e gitmeden önce denetle - GET
/apps/{appId}/draftBir mağaza sayfası taslağı — başlık, alt başlık, tanıtım metni ve açıklama — bu uygulama için tek bir… - GET
/apps/{appId}/localizeYeni bir dil için App Store mağaza sayfasının tamamını yaz — ad, alt başlık, kelime alanı ve açıklama… - GET
/apps/{appId}/shot-textTek bir vitrindeki ilk dört App Store ekran görüntünün üzerindeki yazılar - GET
/apps/{appId}/chart-moversUygulamanın kendi kategori listesinde kimler hareket etti: yükselenler ve düşenler (3+ basamak), yeni… - GET
/apps/{appId}/featuringApple'ın uygulamayı bugün nerede gösterdiği, ülke ülke: editoryal kartlar (dedicated: true hikâye bu… - GET
/apps/{appId}İzlenen tek bir uygulama; platform kimlikleri, ülkeleri, ülke başına izlenen kelimeleri ve en son ölçüm… - GET
/apps/{appId}/weekly-planUygulama için bu haftanın mağaza sayfası önerileri — paneldeki “Bu hafta” kartıyla aynı liste, en iyisi en üstte
Gelir ve Apple Ads
Uygulama başına bağlı kaynaklar: gelir, abonelik olayları, App Store hunisi, fiyatlar ve teklif kodları, bir değişikliğin öncesi ve sonrası; Apple Ads kampanyaları, kelimeleri, arama terimleri ve komutları. Kapsamlar: revenue:read ve ads:read.
- GET
/apps/{appId}/revenueBir uygulamanın, kullanıcının bağladığı kaynaklardan gelen geliri ve indirmeleri: App Store Connect'ten… - GET
/apps/{appId}/subscriptionsBir uygulama için RevenueCat / Adapty webhook'undan gelen abonelik olayı sayıları: gün ve ülke bazında… - GET
/apps/{appId}/funnelBir uygulamanın App Store Connect analitiğinden gelen App Store dönüşüm hunisi: gösterimler → ürün… - GET
/apps/{appId}/campaignsBir uygulamayı tanıtan Apple Ads kampanyaları (ada göre değil, uygulamanın App Store kimliğine göre… - GET
/apps/{appId}/ads-keywordsBir uygulama için kampanyalarının tamamında satın alınan bütün Apple Ads kelimeleri (son 28 gün)… - GET
/apps/{appId}/ads-search-termsİnsanların gerçekten yazdığı ve uygulamanın Apple Ads reklamlarını tetikleyen aramalar (son 28 gün)… - GET
/apps/{appId}/ads-commandsBir uygulamanın kampanyaları için Apple Ads komutları — panelden, otomasyon kurallarından ve… - GET
/apps/{appId}/search-popularityApple'ın kendi arama popülerliği, bu çalışma alanına bağlı Apple Ads hesabından: uygulamanın kategorisi… - GET
/apps/{appId}/pricingBir uygulamanın RevenueCat ya da Adapty webhook'undan gelen ürün fiyatları ve offer code'ları, son 365… - GET
/apps/{appId}/country-pricesUygulamanın bir ürünü için ülke fiyatları, App Store Connect / Google Play'den okunur (Pro): ülke… - GET
/apps/{appId}/change-impactBir değişikliğin ne yaptığı: tek bir değişiklik günü için (yeni sürüm, ekran görüntüleri, alt başlık…
Hive
Storelift ağının ölçtüğü herhangi bir uygulama ya da pazar; sen izlesen de izlemesen de. Hive Explorer'ın parçası.
- GET
/rank-checkUygulamalarından birinin tek bir vitrinde herhangi bir arama terimindeki canlı sırası, mağazanın şu… - GET
/keyword-difficultyTek bir vitrinde bir App Store arama terimi için talep ve zorluk girdileri: talebi (`demand`) ve ilgili… - GET
/hive/findÖlçtüğümüz üst listelerde uygulama bul: kategoriye, vitrine, listeye (Top Grossing, Top Free, Top Paid… - GET
/hive/chartsSon ölçtüğümüz hâliyle tek bir üst liste: bir vitrin, liste türü ve isteğe bağlı kategori için sıralı… - GET
/hive/moversTek bir üst listede kim yükseldi, kim düştü, kim girdi, kim çıktı; N gün önceki aynı listeye göre - GET
/hive/newBir üst listede ilk kez görülen uygulamalar, en yeni en üstte, her birinin arkasındaki yayıncıyla - GET
/hive/publisher/{publisherId}Bir yayıncının bir listede gördüğümüz bütün uygulamaları, her birinin ilk görüldüğü günle - GET
/hive/resolveHerhangi bir uygulamanın kimliğini bul: ada ya da geliştiriciye göre (o vitrindeki en iyi eşleşmeler… - GET
/hive/similar/{appId}Herhangi bir uygulama için mağazanın kendi benzer uygulamalar rafı (Apple'ın You Might Also Like… - GET
/hive/reviews/{appId}Herhangi bir uygulamanın tek bir vitrindeki son yorumları, en yeni en üstte: yıldız, başlık, metin… - POST
/hive/keywords/{term}/metrics/measureSaklanan değer eksik ya da eskiyse, tek bir vitrinde bir kelimenin popülerliği ve/veya zorluğu için… - GET
/hive/apps/{id}Herhangi bir uygulamanın en son günlük ölçümü - GET
/hive/keywords/{term}/ranksBir kelimede kimlerin sıralandığı, gün gün - GET
/hive/keywords/{term}/metricsBir kelimenin güncel popülerliğini ve zorluğunu oku - GET
/hive/keywords/{term}/metrics/historySaklanan kelime metriği gözlemlerini zaman içinde oku - GET
/hive/spy/{id}Herhangi bir uygulamanın sıralandığı kelimeler - GET
/hive/estimate/{id}Herhangi bir uygulamanın geliri ve indirmeleri - GET
/hive/gapBirkaç uygulama arasında kelime boşluğu - GET
/hive/researchBir tohum terimden kelime araştırması - GET
/hive/landscapeBir kategoride sıralanmak için ne gerekir
Yazma
Her yazma iki adımda çalışır: önce hiçbir şeyi değiştirmeyen bir önizleme, ardından önizlemenin döndürdüğü jetonla onay.
- GET
/jobs/{jobId}Onaylanmış bir eylemin başlattığı uzun süren işin durumu (Apple Ads komutu, yorum cevabı, mağaza… - POST
/actionsBir yazmayı önizle - POST
/actions/confirmÖnizlemesi yapılmış bir yazmayı uygula