Documentación para desarrolladores

Referencia de la API

Una URL base, una clave y JSON tanto en la petición como en la respuesta. Cada endpoint de esta página es también una herramienta MCP con el mismo nombre.

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

URL base

https://storelift.net/v1

Todas las rutas de esta página son relativas a ella. Envíe GET para las lecturas y POST solo en /actions.

Autenticación

Envíe la clave en Authorization: Bearer <key> o en x-api-key. Las claves se crean en Ajustes › API; cada clave lleva sus scopes y, de forma opcional, una lista de IP permitidas, una lista de apps y un presupuesto mensual de créditos. Una clave que alcanza su presupuesto responde 402 key_budget_reached hasta que cambia el mes; las demás claves siguen funcionando.

Las claves de producción (sl_live_) para la API REST están disponibles en Pro y en los planes superiores, o en cualquier plan con un pack de créditos. Free incluye una clave de producción que solo funciona en el servidor MCP. Las claves de prueba (sl_test_) devuelven los datos del sandbox en todos los planes. Los asistentes inician sesión con OAuth a través del servidor MCP en todos los planes.

Créditos y límites

Cada llamada cuesta los créditos que se indican en ella; /account y /usage cuestan 0, y la vista previa de una escritura cuesta 0. Todas las respuestas llevan x-credits-used, x-credits-limit, x-credits-remaining y x-credits-reset.

Las peticiones por segundo se fijan por plan; si las supera, recibe 429 rate_limited con retry-after. Los endpoints de Hive se abren con créditos de API comprados o con Hive Explorer y cuentan además para una cuota diaria: 500 llamadas con créditos de un pack y 10.000 con Hive Explorer. Créditos por llamada

Sandbox

https://storelift.net/v1/sandbox responde a todas las lecturas de esta página que tienen una respuesta de ejemplo, sin clave y sin créditos. Los datos son fijos y llevan fecha, así que las pruebas se mantienen estables.

Las claves de prueba (sl_test_) devuelven los mismos datos en la URL base de producción y nunca escriben.

Cómo leer una posición

Una posición tiene tres estados y no se mezclan: measured: false significa que la consulta no se midió ese día, rank: null significa que se midió y la app queda fuera de los resultados leídos, y un número es la posición.

Errores

Todos los errores tienen el mismo cuerpo: { "error": "<code>", "message": "…", "docs": "…" }. error es estable; base en él la lógica de su código, no en message. Algunos códigos añaden campos como scope, field o limit. Todos los códigos de error

Ejemplos paso a paso

Tres tareas, desde la primera llamada hasta el resultado que usted guarda. Todos los comandos se ejecutan contra el sandbox, así que no gastan créditos ni cambian nada, y cada respuesta es la que el sandbox devuelve para ese comando.

Con su propia clave, las rutas son las mismas sin /sandbox y cada llamada cuesta los créditos que se indican en ella. Una clave de prueba (sl_test_) responde también ahí con los datos del sandbox, por 0 créditos.

Añadir a un informe las posiciones por palabra clave de esta semana

Lea las palabras clave de una app en una tienda y quédese con una sola fila. Ejecútelo cada semana y las filas irán formando una tendencia.

Scope
apps:read
Créditos
2 · 0 en el sandbox o con una clave de prueba
Plan
Sandbox y clave de prueba: todos los planes · clave de producción: Pro y superiores
Funciona desde
API 1.5.0
  1. Busque el id de la app.

    curl "https://storelift.net/v1/sandbox/apps"
    Respuesta
  2. Lea todas las palabras clave que esa app tiene en seguimiento en la tienda.

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

Resuma la respuesta en la fila que usted guarda. Una palabra clave con measured: true y rank: null se midió y la app no aparece en los resultados; se cuenta aparte de una palabra clave que no se midió.

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

Un id de app que el espacio de trabajo no tiene 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"
}

Preguntar quién posiciona por encima de su app

Los mismos datos a través del servidor MCP: el asistente hace dos llamadas a herramientas. Para enviarlas a mano, ponga una clave de prueba en STORELIFT_TEST_KEY.

Scope
apps:read
Créditos
2 · 0 con una clave de prueba
Plan
Clave de prueba y OAuth: todos los planes · clave de producción: todos los planes
Funciona desde
API 1.5.0 · herramientas en storelift-mcp 1.1.1
  1. list_apps devuelve el id de la 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":{}}}'
    Respuesta
  2. get_rivals devuelve las apps que posicionan por encima de ella, palabra clave por palabra clave.

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

Lo que dice la respuesta, competidor por competidor. ourRank: null es una palabra clave en la que la app no 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
  }
]

Un id de app que el espacio de trabajo no tiene vuelve como un error de herramienta que el asistente puede leer, no como una petición fallida:

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.

Ver qué puede leer una credencial, por HTTP o por MCP

La primera llamada de cualquier integración: qué plan, qué scopes, qué apps y cuántos créditos quedan. GET /account y la herramienta whoami devuelven el mismo cuerpo, y ninguna de las dos cuesta créditos.

Scope
ninguno
Créditos
0
Plan
Sandbox, clave de prueba y OAuth: todos los planes · clave de producción: Pro y superiores
Funciona desde
API 1.5.0 · herramientas en storelift-mcp 1.5.0
  1. Por HTTP.

    curl "https://storelift.net/v1/sandbox/account"
    Respuesta
  2. La misma respuesta como llamada a una herramienta.

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

Compruebe el scope que necesita una llamada antes de hacerla y lea el saldo antes de lanzar un 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
}

Sin credenciales, el endpoint MCP responde 401 con un error JSON-RPC, y un cliente compatible con la autorización de MCP arranca a partir de esa respuesta el inicio de sesión con 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."
  }
}

Parámetros comunes

Se interpretan igual en todos los endpoints que los admiten; cada endpoint indica cuáles admite.

ParámetroUbicaciónTipoDescripción
appIdpathstringid de la app, de list_apps
countryquerystringcódigo de país, p. ej. tr, us (por defecto, el primer país de la app)
platformqueryios | androidios por defecto
countryquerystringcódigo de tienda, p. ej. us (us por defecto)

Cuenta

El plan, los scopes y el uso de la propia clave, la búsqueda en la cuenta y el feed de alertas. Leer el plan y el uso cuesta 0 créditos.

  • GET /alertsEl feed de alertas de este espacio de trabajo — caídas y subidas de posición, palabras clave que entran…
  • GET /portfolioEl día de hoy en todas las apps del espacio de trabajo, una fila por app: usuarios en directo, usuarios…
  • GET /accountA quién pertenece esta clave o sesión: plan, método de autenticación, ámbitos que lleva, apps que puede…
  • GET /usageTodas las cuotas del espacio de trabajo con lo usado y la hora de reinicio: palabras clave seguidas…
  • GET /searchBusca en los registros de esta cuenta — nombres de apps e ids de tienda, palabras clave seguidas y las…
  • GET /fetchEl registro completo de un id devuelto por search: la tarjeta de una app, una palabra clave seguida con…

Sus apps

Las apps que sigue este espacio de trabajo: posiciones, competidores, reseñas, página de la tienda, cronología de la ficha, apariciones destacadas, top charts y comprobaciones de la ficha.

Ingresos y Apple Ads

Las fuentes conectadas de cada app: ingresos, eventos de suscripción, el embudo del App Store, precios y códigos de oferta, el antes y el después de un cambio, y las campañas, palabras clave, términos de búsqueda y comandos de Apple Ads. Scopes revenue:read y ads:read.

Hive

Cualquier app o mercado que mida la red de Storelift, la siga usted o no. Forma parte de Hive Explorer.

Escrituras

Cada escritura se ejecuta en dos pasos: una vista previa que no cambia nada y, después, una confirmación con el token que esa vista previa devolvió.