Documentación de la API

Acceso programático a tus datos de visibilidad de IA.

Una API REST de solo lectura y un servidor MCP, ambos autenticados con la misma clave. Lleva marcas, consultas, ejecuciones, menciones, puntuaciones diarias de visibilidad y recomendaciones a tus propios paneles, almacenes de datos o agentes de IA.

Autenticación

Tokens Bearer

Genera una clave API desde Configuración → Claves API dentro de la aplicación. El texto en claro se muestra una sola vez al crearse; guárdalo en tu gestor de contraseñas. Pásalo como token Bearer en cada solicitud.

curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands \
  -H "Authorization: Bearer ik_…"

Las claves se pueden revocar en cualquier momento desde el mismo panel de Configuración. Cada clave está vinculada a tu cuenta y hereda los permisos de marca de tu cuenta; sin alcances por clave por ahora.

URL base

Adónde van las solicitudes

Todos los endpoints REST viven bajo una única URL base:

https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1

Añade la ruta de cualquier endpoint a continuación. GET es el único método soportado: la API es de solo lectura.

Obtener tu ID de marca

De dónde viene {id}

La mayoría de los endpoints toman un parámetro de ruta {id} que es el UUID de tu marca. Dos formas de obtenerlo:

  1. Desde la propia API: llama primero a GET /brands. Cada elemento de la respuesta tiene un campo id. Usa ese valor en las llamadas posteriores.
  2. Desde la URL del panel: cuando abres una marca en https://app.intendity.com/brands/<id> , el UUID después de /brands/ es el ID de marca que usarías en la API.
Endpoints

Referencia

Siete endpoints, todos GET, todos devuelven JSON, todos limitados al propietario de la clave API.

GET /brands

Listar marcas: descubre tus IDs

Devuelve cada marca que posees. Llama a esto primero para obtener el `id` que usarás en los otros endpoints. Este es el único endpoint que no toma un ID de marca como parámetro de ruta.

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "brands": [
    {
      "id": "0ae98f45-446c-4482-886f-9ce2fd6ba4ea",
      "name": "Acme",
      "industry": "B2B SaaS",
      "aliases": ["Acme Corp", "ACME"],
      "competitors": ["Beta", "Gamma"],
      "country": "US",
      "enabled_models": ["openai/gpt-5.2", "anthropic/claude-sonnet-4"],
      "run_frequency": "daily",
      "created_at": "2026-04-01T12:00:00Z"
    }
  ]
}
GET /brands/{id}

Obtener una marca

Marca única por ID. Misma forma que los elementos en `/brands`.

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/0ae98f45-446c-4482-886f-9ce2fd6ba4ea \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "brand": {
    "id": "0ae98f45-446c-4482-886f-9ce2fd6ba4ea",
    "name": "Acme",
    ...
  }
}
GET /brands/{id}/queries

Listar consultas de una marca

Cada prompt que has añadido para esta marca. Ordenado del más reciente.

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/queries?limit=100 \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "queries": [
    {
      "id": "…",
      "text": "best CRM for small B2B teams",
      "tags": ["evaluation"],
      "country": "US",
      "enabled": true,
      "last_run_at": "2026-04-30T04:00:00Z",
      "created_at": "2026-04-01T12:00:00Z"
    }
  ]
}
GET /brands/{id}/runs

Listar ejecuciones de una marca

Una fila por ejecución (consulta × modelo). Incluye el blob bruto `response` del modelo.

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/runs?limit=100 \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "runs": [
    {
      "id": "…",
      "query_id": "…",
      "model": "openai/gpt-5.2",
      "status": "completed",
      "response": "Acme is one of the leading…",
      "error": null,
      "created_at": "2026-04-30T04:01:23Z"
    }
  ]
}
GET /brands/{id}/mentions

Listar menciones de una marca

Análisis por ejecución: si la marca fue mencionada, dónde se clasificó, el sentimiento, qué competidores fueron nombrados y las URLs de fuentes citadas por el modelo.

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/mentions?limit=100 \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "mentions": [
    {
      "id": "…",
      "run_id": "…",
      "mentioned": true,
      "position": 3,
      "sentiment": "positive",
      "sentiment_score": 78,
      "context": "Acme stands out for its…",
      "competitors_found": ["Beta"],
      "sources": ["https://en.wikipedia.org/wiki/…"],
      "confidence": 0.92,
      "created_at": "2026-04-30T04:01:24Z"
    }
  ]
}
GET /brands/{id}/visibility

Puntuaciones diarias de visibilidad

Una fila por día. `score` es un porcentaje 0-100 de la tasa de mención en todas las consultas × modelos que se ejecutaron ese día.

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/visibility \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "visibility": [
    {
      "day": "2026-04-30",
      "score": 64,
      "total_runs": 48,
      "total_mentions": 31
    }
  ]
}
GET /brands/{id}/recommendations

Listar recomendaciones de una marca

Próximos pasos generados por IA para mejorar la visibilidad, con estado del flujo de trabajo (pending → in_progress → done / dismissed).

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/recommendations \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "recommendations": [
    {
      "id": "…",
      "category": "wikipedia",
      "title": "Edit the 'CRM software' Wikipedia article",
      "body": "Three of four models cited Wikipedia…",
      "related_queries": ["…"],
      "status": "pending",
      "due_date": null,
      "completed_at": null,
      "created_at": "2026-04-30T04:05:00Z"
    }
  ]
}
GET /brands/{id}/suggested-prompts

Prompts sugeridos

Prompts que el sistema cree que deberías rastrear pero que aún no has añadido. `added: true` significa que el usuario aceptó la sugerencia (y el prompt está ahora en `/brands/{id}/queries`).

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/suggested-prompts \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "suggested_prompts": [
    {
      "id": "…",
      "text": "best CRM for small SaaS teams",
      "rationale": "competitor-comparison gap - competitors win 4/5 runs",
      "added": false,
      "created_at": "2026-05-01T04:00:00Z"
    }
  ]
}
GET /brands/{id}/competitor-sov

Cuota de voz de competidores

Recuentos diarios de menciones por (competidor, modelo). La propia marca se reporta bajo el centinela `__brand__`, por lo que la cuota de voz es `brand_count / SUM(count)` dentro de (modelo, día). Filtra el intervalo de tiempo con `?since=YYYY-MM-DD` (predeterminado: últimos 90 días).

Solicitud
curl "https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/competitor-sov?since=2026-04-01" \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "sov": [
    { "competitor": "__brand__", "model": "openai/gpt-5.2", "day": "2026-05-04", "mention_count": 4, "avg_position": 2.5 },
    { "competitor": "Beta",      "model": "openai/gpt-5.2", "day": "2026-05-04", "mention_count": 7, "avg_position": null }
  ]
}
GET /brands/{id}/page-audits

Auditorías de páginas: lista

Auditorías de preparación para IA ejecutadas en las páginas de la marca. Cada fila incluye la puntuación (0-100), la lista de problemas y las señales analizadas (tipos schema.org, presencia de llms.txt, reglas de robots para bots de IA, etc.).

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/page-audits \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "page_audits": [
    {
      "id": "…",
      "url": "https://acme.com/pricing",
      "fetched_at": "2026-05-04T10:12:00Z",
      "status_code": 200,
      "score": 72,
      "issues": [
        { "id": "no-faq-schema", "severity": "warning", "title": "No FAQPage schema", "fix": "Add JSON-LD FAQPage with the top buyer questions.", "score_impact": 8 }
      ],
      "signals": {
        "word_count": 824,
        "h1_count": 1,
        "has_canonical": true,
        "has_meta_description": true,
        "has_faq_schema": false,
        "schema_types": ["Organization", "WebSite"],
        "llms_txt_present": false,
        "robots_blocks_ai": [],
        "ai_bots_allowed": ["GPTBot", "ClaudeBot"]
      },
      "error": null
    }
  ]
}
GET /brands/{id}/page-audits/{auditId}

Auditoría de página: única

Auditoría única por ID. Misma forma que los elementos en `/brands/{id}/page-audits`.

Solicitud
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/page-audits/{auditId} \
  -H "Authorization: Bearer ik_…"
Respuesta (200 OK)
{
  "page_audit": {
    "id": "…",
    "url": "https://acme.com/pricing",
    "score": 72,
    ...
  }
}

Paginación

Pasa ?limit=N en los endpoints de colección. El valor predeterminado es 100, máx. 500. La paginación con cursor está en el roadmap para colecciones que superan una sola página.

Errores

Códigos de estado

Estado Cuándo
200 Éxito.
401 Token Bearer ausente o inválido.
404 La marca o la ruta no existe (o no te pertenece).
405 Se usó un método distinto de GET.
500 Error inesperado del servidor: reintenta con retroceso exponencial.

Los cuerpos de error incluyen una cadena error y a veces un hint.

Servidor MCP

Usa Intendity desde Claude / Cursor / cualquier cliente MCP

La misma clave API se autentica contra un endpoint compatible con MCP. Apunta cualquier cliente de Model Context Protocol a él y tus datos de visibilidad de marca estarán disponibles como herramientas dentro del asistente.

https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/mcp

Auth: Authorization: Bearer ik_… en el transporte SSE / HTTP. Consulta la documentación de tu cliente MCP para saber cómo registrar un servidor personalizado con un encabezado.

¿Necesitas un endpoint que no tenemos?

Capacidades de escritura, webhooks, paginación con cursor: todo está en el roadmap. Cuéntanos qué construirías y priorizaremos en consecuencia.

[email protected]