# Storelift API URL: https://storelift.net/ru/guide/storelift-api/ Language: ru Updated: 2026-09-20 Всё, что показывает дашборд, доступно и как JSON-эндпоинт. Их 9, все GET, все по вашим отслеживаемым приложениям — поэтому скрипт, задача в таблице или шаг CI могут читать те же числа без парсинга страницы. API входит в Pro и Studio; ассистенту, который читает те же данные, обычно лучше подходит MCP-сервер. ## Базовый адрес и аутентификация Базовый адрес — https://storelift.net/v1. Создайте ключ в Settings → API; он показывается один раз и хранится только в виде хеша, поэтому потерянный ключ заменяют, а не восстанавливают. Передавайте его как x-api-key или как bearer-токен, если клиент умеет только заголовки Authorization: curl -s https://storelift.net/v1/apps \ -H "x-api-key: sl_live_..." NOTE: Доступ к API есть на тарифах Pro и Studio — от $20 в месяц, $60 за Studio. При понижении тарифа ключ перестаёт работать, но не удаляется, поэтому повторное повышение возвращает ту же интеграцию. ## 9 эндпоинтов | Эндпоинт | Что возвращает | | --- | --- | | GET /v1/apps | Приложения, которые отслеживает этот аккаунт. Любой другой вызов начинается отсюда — id берётся из него. | | GET /v1/apps/{id} | Одно приложение плюс снимок последнего замера. | | GET /v1/apps/{id}/keywords | Текущая позиция по каждому отслеживаемому ключевому слову в одной витрине, с состоянием замера и глубиной поиска. | | GET /v1/apps/{id}/rivals | Приложения выше вас, каждое — с запросами, по которым оно вас обходит, и обеими позициями. | | GET /v1/apps/{id}/ai | Называет ли ассистент ваше приложение для вашей категории, с сохранённым рядом. Замер выполняется на Studio. | | GET /v1/apps/{id}/history | Ряд позиций по каждому ключевому слову, обрезанный до окна истории тарифа. | | GET /v1/apps/{id}/page | Ваша собственная страница в том виде, в каком её отдаёт стор, для обеих платформ, плюс обнаруженные на ней датированные изменения. | | GET /v1/apps/{id}/reviews | Свежие отзывы со сводкой звёзд, числом новых в этом замере и данными Play, если они измеряются. | | GET /v1/apps/{id}/charts | Позиция в топ-чарте для жанра и витрины приложения, с рядом. | Эндпоинты ниже /apps/{id} принимают country (код витрины, например us, по умолчанию — первая витрина приложения) и, если измеряются оба стора, platform=ios|android. ## Три состояния замера сохраняются при передаче Эту часть стоит прочитать до того, как писать интеграцию. Поле позиции может быть числом, но отсутствие числа означает две разные вещи, и API их разделяет: - measured: true, rank: 7 — приложение найдено на позиции 7. - measured: true, rank: null — поиск выполнен, но приложения не было в результатах на прочитанной нами глубине. - measured: false — в этот день поиск выполнить не удалось. О позиции ничего не известно. { "country": "de", "platform": "ios", "live": true, "measuredAt": "2026-09-19T02:14:08.921Z", "keywords": [ { "term": "traumdeutung", "measured": true, "rank": 7, "demand": 6, "searchDepth": 200 }, { "term": "traumsymbole", "measured": true, "rank": null, "demand": 3, "searchDepth": 200 }, { "term": "traumtagebuch", "measured": false, "rank": null, "demand": null, "searchDepth": null } ] } Если свести два последних случая к нулю, получится обвал, которого не было, и все средние, построенные поверх, будут неверны. Если вашему коду нужно одно число, считайте measured: false пропуском в ряду, а не значением. ## Чего он не делает - Он не записывает. Все эндпоинты — GET; всё остальное возвращает method_not_allowed. Из API нет пути к вашей странице, отслеживаемым ключевым словам или оплате. - Он не измеряет по запросу. Эндпоинты читают то, что собрал ночной замер. Повторный запрос не отправляет в сторы второй поиск. - Он не передаёт слой выручки. Подключённые аккаунты (App Store Connect, Apple Ads, RevenueCat, GA4) остаются в дашборде — это сознательная граница, а не упущение. - История обрезается по тарифу. history и charts обрезаются по окну тарифа, поэтому один и тот же ключ не может через один эндпоинт заглянуть дальше, чем через другой. ## Ошибки | Статус | error | Когда | | --- | --- | --- | | 401 | missing_api_key | В запросе нет ключа. | | 401 | invalid_api_key | Ключ неизвестен или отозван. | | 401 | account_deleted | Аккаунт, которому принадлежал ключ, удалён. | | 403 | plan_required | Тариф не включает доступ к API. В ответе указан текущий тариф. | | 405 | method_not_allowed | Все эндпоинты — GET. Ничего не записывается. | | 404 | not_found | Такого id приложения нет в этом аккаунте. | | 404 | unknown_endpoint | Такого пути под /v1 нет. | Каждая ошибка — это JSON с полем error. plan_required также возвращает plan, чтобы клиент мог сообщить, на каком тарифе ключ, а не гадать. ## FAQ Q: Есть ли ограничение частоты запросов? A: Квоты на ключ нет. У шлюза перед API есть общий потолок на аккаунт, а каждый вызов обновляет счётчик использования ключа, чтобы в Settings было видно, используется ли ещё старый ключ. Q: Можно ли пользоваться им на бесплатном тарифе? A: Нет — доступ к API начинается с Pro. Бесплатным инструментам на этом сайте аккаунт не нужен, а бесплатный тариф всё равно ежедневно измеряет одно приложение. Q: API или MCP-сервер? A: Скрипту нужен API: фиксированные структуры, один вызов, без модели в цепочке. Ассистенту нужен MCP-сервер, потому что у инструментов есть собственные описания и он может выбрать нужный вызов без того, чтобы вы писали интеграцию. Оба читают одни и те же замеры.