Documentação para desenvolvedores

Referência da API

Uma URL base, uma chave, JSON na ida e na volta. Cada endpoint abaixo também é uma ferramenta MCP com o mesmo nome.

openapi.json · Códigos de erro · Servidor MCP

URL base

https://storelift.net/v1

Todos os caminhos abaixo são relativos a ela. Envie GET para leituras e POST só em /actions.

Autenticação

Envie a chave em Authorization: Bearer <key> ou em x-api-key. Crie as chaves em Configurações › API; cada chave tem escopos, uma lista opcional de IPs permitidos, uma lista opcional de apps e um orçamento mensal opcional de créditos. Uma chave que atinge o orçamento responde 402 key_budget_reached até a virada do mês; as outras chaves continuam funcionando.

As chaves de produção (sl_live_) da API REST estão no Pro e acima, ou em qualquer plano com um pacote de créditos. O Free inclui uma chave de produção que funciona só no servidor MCP. As chaves de teste (sl_test_) devolvem os dados do sandbox em todos os planos. Os assistentes fazem login por OAuth pelo servidor MCP em todos os planos.

Créditos e limites

Cada chamada custa os créditos indicados nela; /account e /usage custam 0, e a prévia de uma escrita custa 0. Toda resposta traz x-credits-used, x-credits-limit, x-credits-remaining e x-credits-reset.

As requisições por segundo são definidas por plano; acima disso você recebe 429 rate_limited com retry-after. Os endpoints do Hive abrem com créditos de API comprados ou com o Hive Explorer e também contam para uma cota diária: 500 chamadas com créditos de pacote, 10.000 com o Hive Explorer. Créditos por chamada

Sandbox

https://storelift.net/v1/sandbox responde a todas as leituras abaixo que têm resposta de exemplo, sem chave e sem créditos. Os dados são fixos e datados, então os testes ficam estáveis.

As chaves de teste (sl_test_) devolvem os mesmos dados na URL base de produção e nunca escrevem.

Como ler uma posição

Uma posição tem três estados, e eles ficam separados: measured: false significa que a consulta não foi medida naquele dia, rank: null significa que ela foi medida e o app está fora dos resultados lidos, e um número é a posição.

Erros

Todo erro tem o mesmo corpo: { "error": "<code>", "message": "…", "docs": "…" }. error é estável; faça a ramificação por ele, não por message. Alguns códigos acrescentam campos como scope, field ou limit. Todos os códigos de erro

Exemplos passo a passo

Três trabalhos, da primeira chamada ao resultado que você guarda. Todos os comandos rodam no sandbox, então não gastam créditos nem mudam nada, e cada resposta é a que o sandbox devolve para o comando.

Com a sua própria chave, os caminhos são os mesmos sem /sandbox e cada chamada custa os créditos indicados nela. Uma chave de teste (sl_test_) também responde ali com os dados do sandbox, por 0 créditos.

Leve as posições das palavras-chave da semana para um relatório

Leia as palavras-chave de um app em uma loja e guarde uma única linha. Rode toda semana e as linhas formam uma tendência.

Escopo
apps:read
Créditos
2 · 0 no sandbox ou com uma chave de teste
Plano
Sandbox e chave de teste: todos os planos · chave de produção: Pro e acima
Funciona com
API 1.5.0
  1. Encontre o id do app.

    curl "https://storelift.net/v1/sandbox/apps"
    Resposta
  2. Leia todas as palavras-chave acompanhadas desse app na loja.

    curl "https://storelift.net/v1/sandbox/apps/sbx-lumen/keywords?country=us"
    Resposta (keywords: 2 de 8 linhas)

Resuma a resposta na linha que você guarda. Uma palavra-chave com measured: true e rank: null foi medida e o app não está nos resultados; ela é contada à parte de uma palavra-chave que não foi medida.

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 },
  };
}

Resultado

{
  "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
  }
}

Um id de app que o workspace não tem responde 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"
}

Pergunte quem está acima de você

Os mesmos dados pelo servidor MCP: o assistente faz duas chamadas de ferramenta. Para enviá-las à mão, coloque uma chave de teste em STORELIFT_TEST_KEY.

Escopo
apps:read
Créditos
2 · 0 com uma chave de teste
Plano
Chave de teste e OAuth: todos os planos · chave de produção: todos os planos
Funciona com
API 1.5.0 · ferramentas no storelift-mcp 1.1.1
  1. list_apps devolve o id do app.

    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":{}}}'
    Resposta
  2. get_rivals devolve os apps posicionados acima dele, palavra-chave por palavra-chave.

    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"}}}'
    Resposta (rivals: 2 de 3 linhas)

O que a resposta diz, concorrente por concorrente. ourRank: null é uma palavra-chave em que o app não aparece.

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,
  }));
}

Resultado

[
  {
    "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
  }
]

Um id de app que o workspace não tem volta como um erro de ferramenta que o assistente consegue ler, não como uma requisição que falhou:

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.

Veja o que uma credencial pode ler, por HTTP ou MCP

A primeira chamada de qualquer integração: qual plano, quais escopos, quais apps e quantos créditos restam. GET /account e a ferramenta whoami devolvem o mesmo corpo, e nenhuma das duas custa créditos.

Escopo
nenhum
Créditos
0
Plano
Sandbox, chave de teste e OAuth: todos os planos · chave de produção: Pro e acima
Funciona com
API 1.5.0 · ferramentas no storelift-mcp 1.5.0
  1. Por HTTP.

    curl "https://storelift.net/v1/sandbox/account"
    Resposta
  2. A mesma resposta como chamada de ferramenta.

    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":{}}}'
    Resposta

Confira o escopo que uma chamada exige antes de fazê-la e leia o saldo antes de um lote.

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,
  };
}

Resultado

{
  "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
}

Sem credenciais, o endpoint MCP responde 401 com um erro JSON-RPC, e um cliente compatível com a autorização MCP inicia o login OAuth a partir dele:

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."
  }
}

Parâmetros comuns

Eles funcionam do mesmo jeito em todos os endpoints que os aceitam; cada endpoint lista os que aceita.

ParâmetroLocalTipoDescrição
appIdpathstringid do app, de list_apps
countryquerystringcódigo do país, ex.: tr, us (padrão: o primeiro país do app)
platformqueryios | androidpadrão: ios
countryquerystringcódigo da loja, ex.: us (padrão us)

Conta

O plano, os escopos e o uso da própria chave, a busca na conta e o feed de alertas. Ler o plano e o uso custa 0 créditos.

  • GET /alertsO feed de alertas deste espaço de trabalho — quedas e subidas de posição, palavras-chave que entram nos…
  • GET /portfolioO dia de hoje em todos os apps do espaço de trabalho, uma linha por app: usuários ao vivo, usuários e…
  • GET /accountA quem pertence esta chave ou sessão: plano, como se autenticou, os escopos que carrega, os apps que…
  • GET /usageTodas as cotas do espaço de trabalho, com o que foi usado e o horário de renovação: palavras-chave…
  • GET /searchPesquisa nos registros desta conta — nomes de apps e ids de loja, palavras-chave acompanhadas e os apps…
  • GET /fetchO registro completo de um id retornado por search: o cartão de um app, uma palavra-chave acompanhada…

Seus apps

Os apps que este workspace acompanha: posições, concorrentes, avaliações, página na loja, linha do tempo da página, destaques, top charts e verificações da página.

Receita e Apple Ads

As fontes conectadas de cada app: receita, eventos de assinatura, o funil da App Store, preços e códigos de oferta, o antes e depois de uma mudança, e campanhas, palavras-chave, termos de busca e comandos do Apple Ads. Escopos revenue:read e ads:read.

Hive

Qualquer app ou mercado que a rede do Storelift mede, quer você o acompanhe ou não. Faz parte do Hive Explorer.

Escritas

Toda escrita roda em dois passos: uma prévia que não muda nada e, depois, uma confirmação com o token que ela devolveu.