Документация для разработчиков
Справочник API
Один базовый URL, один ключ, JSON на входе и выходе. Каждый эндпоинт ниже — ещё и инструмент MCP с тем же именем.
openapi.json · Коды ошибок · MCP-сервер
Базовый URL
https://storelift.net/v1
Все пути ниже заданы относительно него. Читайте через GET; POST отправляйте только на /actions.
Аутентификация
Передавайте ключ в Authorization: Bearer <key> или в x-api-key. Ключи создаются в разделе «Настройки › API»; у ключа есть права доступа и, по желанию, список разрешённых IP, список приложений и месячный бюджет кредитов. Ключ, исчерпавший бюджет, отвечает 402 key_budget_reached до конца месяца; остальные ключи работают.
Рабочие ключи (sl_live_) для REST API доступны на Pro и выше, а также на любом тарифе с пакетом кредитов. В Free входит один рабочий ключ, который работает только на MCP-сервере. Тестовые ключи (sl_test_) возвращают данные песочницы на любом тарифе. Ассистенты входят через OAuth на MCP-сервере на любом тарифе.
Кредиты и лимиты
Вызов стоит столько кредитов, сколько у него указано; /account и /usage стоят 0, предпросмотр записи тоже 0. В каждом ответе есть x-credits-used, x-credits-limit, x-credits-remaining и x-credits-reset.
Число запросов в секунду зависит от тарифа; сверх него приходит 429 rate_limited с retry-after. Эндпоинты Hive открываются купленными кредитами API или Hive Explorer и ещё учитываются в дневной квоте: 500 вызовов на кредитах из пакета, 10 000 с Hive Explorer. Кредиты за вызов
Песочница
https://storelift.net/v1/sandbox отвечает на каждое чтение ниже, у которого есть пример ответа, без ключа и кредитов. Данные фиксированные и датированные, поэтому тесты стабильны.
Тестовые ключи (sl_test_) возвращают те же данные на рабочем базовом URL и ничего не записывают.
Как читать позицию
У позиции три состояния, и они не смешиваются: measured: false — запрос в тот день не измерялся, rank: null — он измерен, а приложения нет в прочитанных результатах, число — это позиция.
Ошибки
У каждой ошибки одно и то же тело: { "error": "<code>", "message": "…", "docs": "…" }. error стабилен: опирайтесь в коде на него, а не на message. Некоторые коды добавляют поля, например scope, field или limit. Все коды ошибок
Разобранные примеры
Три задачи: от первого вызова до результата, который вы сохраняете. Все команды идут в песочницу: кредиты не тратятся, ничего не меняется, а каждый ответ — то, что песочница на него возвращает.
Со своим ключом пути те же, но без /sandbox, и каждый вызов стоит указанное у него число кредитов. Тестовый ключ (sl_test_) и там отвечает данными песочницы за 0 кредитов.
Добавить в отчёт позиции по ключевым словам за неделю
Прочитайте ключевые слова одного приложения в одной витрине и сохраните одну строку. Запускайте раз в неделю, и строки сложатся в тренд.
Найдите id приложения.
curl "https://storelift.net/v1/sandbox/apps"Ответ
Прочитайте все отслеживаемые ключевые слова этого приложения в витрине.
curl "https://storelift.net/v1/sandbox/apps/sbx-lumen/keywords?country=us"Ответ (keywords: 2 из 8 строк)
Сведите ответ в строку, которую храните. Слово с measured: true и rank: null измерено, а приложения в результатах нет; оно считается отдельно от слова, которое не измерялось.
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 },
};
}Результат
{
"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
}
}На id приложения, которого нет в рабочем пространстве, приходит 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"
}Спросить, кто стоит выше вас
Те же данные через MCP-сервер: ассистент делает два вызова инструментов. Чтобы отправить их вручную, положите тестовый ключ в STORELIFT_TEST_KEY.
list_appsвозвращает 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":{}}}'Ответ
get_rivalsвозвращает приложения, которые стоят выше, по каждому ключевому слову.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"}}}'Ответ (rivals: 2 из 3 строк)
Что говорит ответ, конкурент за конкурентом. ourRank: null — слово, по которому приложения в результатах нет.
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,
}));
}Результат
[
{
"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
}
]id приложения, которого нет в рабочем пространстве, приходит как ошибка инструмента, которую ассистент может прочитать, а не как неудавшийся запрос:
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.Узнать, что могут читать учётные данные, по HTTP или MCP
Первый вызов любой интеграции: какой тариф, какие права доступа, какие приложения и сколько осталось кредитов. GET /account и инструмент whoami возвращают одно и то же тело и не стоят кредитов.
По HTTP.
curl "https://storelift.net/v1/sandbox/account"Ответ
Тот же ответ вызовом инструмента.
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":{}}}'Ответ
Проверяйте права, нужные вызову, до того как его делать, а перед пакетом вызовов читайте баланс.
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,
};
}Результат
{
"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
}Без учётных данных эндпоинт MCP отвечает 401 с ошибкой JSON-RPC, и клиент с поддержкой авторизации MCP начинает с неё вход через OAuth:
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."
}
}Общие параметры
Они читаются одинаково на всех эндпоинтах, которые их принимают; у каждого эндпоинта указаны свои.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
appId | path | string | id приложения из list_apps |
country | query | string | код страны, например tr, us (по умолчанию первая страна приложения) |
platform | query | ios | android | по умолчанию ios |
country | query | string | код витрины, например us (по умолчанию us) |
Аккаунт
Тариф, права доступа и расход самого ключа, поиск по аккаунту и лента оповещений. Чтение тарифа и расхода стоит 0 кредитов.
- GET
/alertsЛента оповещений этого рабочего пространства — падения и рост позиций, ключевые слова, вошедшие в… - GET
/portfolioСегодняшний день по всем приложениям рабочего пространства, по строке на приложение: пользователи… - GET
/accountКому принадлежит этот ключ или сессия: тариф, способ аутентификации, области доступа, приложения… - GET
/usageВсе лимиты рабочего пространства с расходом и временем сброса: отслеживаемые ключевые слова… - GET
/searchПоиск по собственным записям аккаунта — названиям приложений и id в магазине, отслеживаемым ключевым… - GET
/fetchПолная запись по одному id из search: карточка приложения, одно отслеживаемое ключевое слово с текущим…
Ваши приложения
Приложения этого рабочего пространства: позиции, конкуренты, отзывы, страница в сторе, её хронология, подборки, чарты и проверки страницы.
- GET
/appsСписок приложений, отслеживаемых в этом аккаунте Storelift (id, название, страны, ключевые слова) - GET
/apps/{appId}/keywordsПозиции одного приложения по ключевым словам в одной стране App Store / Google Play - GET
/apps/{appId}/rivalsПриложения, которые стоят ВЫШЕ этого приложения в поиске - GET
/apps/{appId}/aiУпоминания приложения в датированной выборке ответов ИИ-систем; это не воспроизводит то, что ChatGPT… - GET
/apps/{appId}/ai-checkЗапускает выборку видимости в ИИ для одного приложения в одной стране с системами, доступными для… - GET
/apps/{appId}/historyИстория позиций по ключевым словам в одной стране - GET
/apps/{appId}/pageСигналы страницы самого приложения в магазине для одной страны (без названия и подзаголовка): версия… - GET
/apps/{appId}/reviewsНедавние отзывы по одной стране: `list` — отзывы App Store, `android` — отзывы Google Play (окно… - GET
/apps/{appId}/chartsПозиция в чартах App Store для одной страны: текущие позиции по спискам (бесплатные / платные /… - GET
/apps/{appId}/reviews/searchПоиск по отзывам одного приложения в одной витрине: по тексту, оценке в звёздах, версии приложения и… - GET
/apps/{appId}/reviews/statsРаспределение оценок в звёздах, среднее и доля отзывов с 1–2 звёздами для одного приложения в одной… - GET
/apps/{appId}/reviews/summaryИИ для отзывов по одному приложению в одной витрине: сводка недавних отзывов и тем в них — жалобы… - GET
/apps/{appId}/reviews/reply-draftЧерновик ответа разработчика на один отзыв на языке витрины - GET
/apps/{appId}/timelineДатированные изменения страницы одного приложения в магазине — новая версия, скриншоты, события в… - GET
/apps/{appId}/todayДень одного приложения в одном ответе — экран «Сегодня»: покупки, пробные периоды и продления из… - GET
/apps/{appId}/competitionСколько приложений конкурирует по каждому ключевому слову в одной витрине; возвращается для запросов, замеченных у двух и более приложений - GET
/apps/{appId}/rivals/{rivalId}Один конкурент вашего приложения в одной витрине: название, рейтинг и число оценок с их историей за 90… - GET
/apps/{appId}/rivals/{rivalId}/adnetworksКак конкурент зарабатывает на рекламе: рекламные сети, с которыми он работает, каждая с пометкой DIRECT или RESELLER - GET
/apps/{appId}/rivals/{rivalId}/marketРынок конкурента в одной витрине: в Google Play — точное число установок и диапазон цен покупок в… - GET
/apps/{appId}/storefront-auditВаша страница iOS во всех витринах App Store: где продаётся приложение, какие витрины показывают… - GET
/apps/{appId}/suggestНовые идеи ключевых слов для одного приложения в одной витрине, написанные на языке поиска этой… - POST
/apps/{appId}/validate-listingПроверяет черновик страницы App Store до отправки в App Store Connect - GET
/apps/{appId}/draftЧерновик страницы в магазине — заголовок, подзаголовок, рекламный текст и описание — на основе ключевых… - GET
/apps/{appId}/localizeПишет полную страницу App Store для новой локали — название, подзаголовок, поле ключевых слов и… - GET
/apps/{appId}/shot-textТекст подписей на первых четырёх скриншотах вашего приложения в App Store в одной витрине - GET
/apps/{appId}/chart-moversКто сдвинулся в чарте категории приложения: выросшие и упавшие (на 3 и более мест), новички и выбывшие… - GET
/apps/{appId}/featuringГде Apple показывает приложение сегодня, по странам: редакционные карточки (dedicated: true, когда… - GET
/apps/{appId}Одно отслеживаемое приложение с id платформ, странами, отслеживаемыми ключевыми словами по странам и… - GET
/apps/{appId}/weekly-planПредложения этой недели по странице приложения — тот же список, что в карточке «На этой неделе» в панели, сначала лучшие
Выручка и Apple Ads
Подключённые источники по приложению: выручка, события подписок, воронка App Store, цены и коды предложений, «до и после» изменения, а также кампании, ключевые слова, поисковые запросы и команды Apple Ads. Права revenue:read и ads:read.
- GET
/apps/{appId}/revenueДоход и загрузки одного приложения из источников, которые подключил пользователь: ежедневные единицы по… - GET
/apps/{appId}/subscriptionsЧисло событий подписок одного приложения из вебхука RevenueCat / Adapty: по дням и по странам — начала… - GET
/apps/{appId}/funnelВоронка конверсии App Store для одного приложения по аналитике App Store Connect: показы → просмотры… - GET
/apps/{appId}/campaignsКампании Apple Ads, которые продвигают одно приложение (сопоставление по id приложения в App Store, а… - GET
/apps/{appId}/ads-keywordsВсе ключевые слова Apple Ads, купленные для одного приложения во всех его кампаниях (последние 28… - GET
/apps/{appId}/ads-search-termsЗапросы, которые люди действительно вводили и которые вызвали показ рекламы приложения в Apple Ads… - GET
/apps/{appId}/ads-commandsКоманды Apple Ads для кампаний одного приложения — из панели, из правил автоматизации и из… - GET
/apps/{appId}/search-popularityСобственная поисковая популярность Apple из аккаунта Apple Ads, подключённого к этому рабочему… - GET
/apps/{appId}/pricingЦены продуктов и коды предложений одного приложения из вебхука RevenueCat или Adapty за последние 365… - GET
/apps/{appId}/country-pricesЦены по странам для одного из продуктов приложения, прочитанные из App Store Connect / Google Play… - GET
/apps/{appId}/change-impactЧто дало изменение: для одного дня изменения (новая версия, скриншоты, подзаголовок, поле ключевых…
Hive
Любое приложение или рынок, которые измеряет сеть Storelift, отслеживаете вы их или нет. Часть Hive Explorer.
- GET
/rank-checkТекущая позиция одного из ваших приложений по любому поисковому запросу в одной витрине, в том виде… - GET
/keyword-difficultyДанные о спросе и сложности для одного поискового запроса App Store в одной витрине: спрос (`demand`) и… - GET
/hive/findПоиск приложений по топ-чартам, которые мы измеряем: фильтруйте по категории, витрине, чарту (Топ… - GET
/hive/chartsОдин топ-чарт в том виде, в каком мы измерили его последний раз: id приложений по порядку для витрины… - GET
/hive/moversКто поднялся, кто упал, кто вошёл и кто покинул один топ-чарт по сравнению с тем же чартом N дней назад - GET
/hive/newПриложения, впервые замеченные в топ-чарте, сначала новые, с издателем каждого - GET
/hive/publisher/{publisherId}Все приложения одного издателя, которые мы видели в чарте, с днём первого появления каждого - GET
/hive/resolveНаходит id любого приложения: по названию или разработчику (лучшие совпадения в этой витрине, с… - GET
/hive/similar/{appId}Блок похожих приложений самого магазина для любого приложения (You Might Also Like у Apple, Similar… - GET
/hive/reviews/{appId}Недавние отзывы любого приложения в одной витрине, сначала новые: звёзды, заголовок, текст, версия и… - POST
/hive/keywords/{term}/metrics/measureЗапускает измерение популярности и/или сложности одного ключевого слова в одной витрине, когда… - GET
/hive/apps/{id}Последнее ежедневное измерение любого приложения - GET
/hive/keywords/{term}/ranksКто ранжируется по ключевому слову, день за днём - GET
/hive/keywords/{term}/metricsЧитает текущую популярность и сложность ключевого слова - GET
/hive/keywords/{term}/metrics/historyЧитает сохранённые наблюдения метрик ключевого слова за период - GET
/hive/spy/{id}Ключевые слова, по которым ранжируется любое приложение - GET
/hive/estimate/{id}Доход и загрузки любого приложения - GET
/hive/gapПробелы по ключевым словам между несколькими приложениями - GET
/hive/researchИсследование ключевых слов от исходного запроса - GET
/hive/landscapeЧто нужно, чтобы ранжироваться в категории
Запись
Каждая запись идёт в два шага: предпросмотр, который ничего не меняет, затем подтверждение с токеном, который он вернул.
- GET
/jobs/{jobId}Статус длительного задания, запущенного подтверждённым действием (команда Apple Ads, ответ на отзыв… - POST
/actionsПредпросмотр записи - POST
/actions/confirmПрименение записи после предпросмотра