Documentación REST API
Acceda a sus datos de visibilidad AI de forma programática a través de la API REST. Úsela con cualquier herramienta que soporte solicitudes HTTP.
Resumen
Genere una clave API personal en la configuración de su cuenta. Luego use solicitudes HTTP GET estándar con su clave API para obtener puntuaciones de visibilidad, recuentos de menciones y datos de sentimiento de ChatGPT, Gemini, Perplexity y Claude. Funciona con Excel, Google Sheets, Power BI, Tableau, Python y cualquier otro cliente HTTP.
URL base
Todos los endpoints de la API están disponibles bajo la siguiente URL base:
https://your-domain.com/api/v1/looker/
Reemplace your-domain.com con el dominio real de su instancia del AI Visibility Tool.
Autenticación
Todas las solicitudes API requieren autenticación mediante una clave API personal. Puede crear claves API en la configuración de su cuenta en "Claves API".
Cómo autenticarse
Incluya su clave API en cada solicitud utilizando uno de estos métodos:
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/data
curl "https://your-domain.com/api/v1/looker/data?api_key=avt_your_key_here"
avt_ seguido de 48 caracteres. Mantenga su clave API en secreto — proporciona acceso completo de lectura a sus datos de visibilidad.
Gestión de claves API
- Crear claves: Menú de cuenta → Claves API → Crear clave API
- Máximo 3 claves activas al mismo tiempo
- Las claves se muestran solo una vez en la creación — guárdelas de forma segura
- Elimine las claves no utilizadas en cualquier momento desde la página de Claves API
Límites de velocidad
| Límite | Valor |
|---|---|
| Solicitudes por minuto | 100 por clave API |
| Registros máximos por solicitud | 10,000 |
Cuando se excede el límite de velocidad, la API devuelve HTTP 429. Espere 60 segundos antes de reintentar.
Endpoints
Devuelve el esquema de datos con nombres de campos, tipos e información semántica. Útil para comprender la estructura de datos antes de consultar.
Parámetros: Ninguno
Solicitud de ejemplo:
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/schema
Respuesta de ejemplo:
{
"schema": [
{
"name": "date",
"label": "Date",
"dataType": "STRING",
"semantics": {
"conceptType": "DIMENSION",
"semanticType": "YEAR_MONTH_DAY"
}
},
{
"name": "visibility_score",
"label": "Visibility Score",
"dataType": "NUMBER",
"semantics": {
"conceptType": "METRIC"
}
}
]
}
Devuelve los resultados de su análisis de visibilidad AI. Soporta filtrado por fecha, área temática y sistema AI. Incluye paginación para grandes conjuntos de datos.
Parámetros de consulta:
| Parámetro | Escriba | Requerido | Descripción |
|---|---|---|---|
date_from |
String | No | Filtro de fecha de inicio (AAAA-MM-DD) |
date_to |
String | No | Filtro de fecha de fin (AAAA-MM-DD) |
selection_id |
Entero | No | Filtrar por ID de área temática (obtener IDs del endpoint /selections) |
ai_system |
String | No | Filtrar por sistema AI: chatgpt, gemini, perplexity o claude |
limit |
Entero | No | Número de registros a devolver (predeterminado: 1000, máx: 10000) |
offset |
Entero | No | Número de registros a omitir para paginación (predeterminado: 0) |
Solicitud de ejemplo:
curl -H "Authorization: Bearer avt_your_key_here" \
"https://your-domain.com/api/v1/looker/data?date_from=2025-01-01&date_to=2025-01-31&ai_system=chatgpt&limit=500"
Respuesta de ejemplo:
{
"data": [
{
"date": "20250115",
"topic_area": "Brand Monitoring",
"prompt": "What is the best project management tool?",
"category": "Product Comparison",
"funnel_stage": "Consideration",
"ai_system": "chatgpt",
"brand": "Asana",
"visibility_score": 75,
"mention_count": 3,
"position_score": 85,
"sentiment_score": 0.8,
"web_search_used": false
}
],
"pagination": {
"total": 1250,
"limit": 500,
"offset": 0,
"has_more": true
}
}
Devuelve una lista de sus áreas temáticas (selecciones) con sus IDs. Use estos IDs para filtrar datos en el endpoint /data.
Parámetros: Ninguno
Solicitud de ejemplo:
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/selections
Respuesta de ejemplo:
{
"selections": [
{
"id": 42,
"name": "Brand Monitoring",
"description": "Track brand mentions across AI platforms",
"prompt_count": 25,
"is_active": true,
"created_at": "2025-01-10T14:30:00"
}
]
}
Referencia de campos de datos
Cada registro en la respuesta de /data contiene los siguientes campos:
Dimensiones
| Campo | Escriba | Descripción |
|---|---|---|
date |
String | Fecha de análisis en formato AAAAMMDD |
topic_area |
String | Nombre del área temática (selección) que se está monitoreando |
prompt |
String | El texto del prompt enviado al sistema de AI |
category |
String | Categoría asignada al prompt |
funnel_stage |
String | Etapa del embudo de marketing (p. ej. Conciencia, Consideración, Decisión) |
ai_system |
String | La plataforma AI consultada (chatgpt, gemini, perplexity, claude) |
brand |
String | La marca que se rastrea en busca de menciones |
Métricas
| Campo | Escriba | Rango | Descripción |
|---|---|---|---|
visibility_score |
Número | 0–100 | Puntuación general de visibilidad de la marca en la respuesta AI |
mention_count |
Número | 0+ | Número de veces que la marca fue mencionada en la respuesta de AI |
position_score |
Número | 0–100 | Puntuación de clasificación de posición — valores más altos indican menciones más tempranas |
sentiment_score |
Número | -1 a +1 | Puntuación de sentimiento de -1 (negativo) a +1 (positivo) |
web_search_used |
Booleano | true/false | Si el sistema de AI utilizó búsqueda web para generar la respuesta |
Formato de respuesta
Todas las respuestas se devuelven como JSON con codificación UTF-8. El encabezado HTTP Content-Type está configurado como application/json.
Códigos de estado HTTP
| Código de estado | Significado |
|---|---|
| 200 OK | Solicitud exitosa |
| 401 Unauthorized | Clave API faltante, inválida o desactivada |
| 429 Too Many Requests | Límite de velocidad excedido — espere 60 segundos |
Manejo de errores
Las respuestas de error siempre incluyen un cuerpo JSON con un mensaje de error:
{
"error": "API key required. Use Authorization: Bearer <key> header or ?api_key=<key> query parameter."
}
| Error | Causa | Solución |
|---|---|---|
API key required |
No hay clave API en la solicitud | Agregue el encabezado Authorization o el parámetro api_key |
Invalid or inactive API key |
La clave es incorrecta, eliminada o desactivada | Verifique la clave en su página de Claves API; cree una nueva si es necesario |
Rate limit exceeded |
Más de 100 solicitudes en 60 segundos | Espere 60 segundos, luego reintente; considere almacenar los resultados en caché |
Ejemplos de código
import requests
API_KEY = "avt_your_key_here"
BASE_URL = "https://your-domain.com/api/v1/looker"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Obtener todas las áreas temáticas
selections = requests.get(f"{BASE_URL}/selections", headers=headers).json()
print(selections)
# Obtener datos de visibilidad para enero 2025
params = {
"date_from": "2025-01-01",
"date_to": "2025-01-31",
"limit": 1000
}
data = requests.get(f"{BASE_URL}/data", headers=headers, params=params).json()
print(f"Total records: {data['pagination']['total']}")
# Paginar a través de todos los resultados
all_records = []
offset = 0
while True:
params["offset"] = offset
response = requests.get(f"{BASE_URL}/data", headers=headers, params=params).json()
all_records.extend(response["data"])
if not response["pagination"]["has_more"]:
break
offset += params["limit"]
print(f"Fetched {len(all_records)} records total")
const API_KEY = "avt_your_key_here";
const BASE_URL = "https://your-domain.com/api/v1/looker";
const headers = { "Authorization": `Bearer ${API_KEY}` };
// Obtener datos de visibilidad
const response = await fetch(`${BASE_URL}/data?date_from=2025-01-01&limit=500`, { headers });
const result = await response.json();
console.log(`Total: ${result.pagination.total} records`);
# Obtener esquema
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/schema
# Obtener datos con filtros
curl -H "Authorization: Bearer avt_your_key_here" \
"https://your-domain.com/api/v1/looker/data?date_from=2025-01-01&ai_system=chatgpt&limit=100"
# Obtener áreas temáticas
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/selections
function getVisibilityData() {
const API_KEY = "avt_your_key_here";
const url = "https://your-domain.com/api/v1/looker/data?limit=500";
const options = {
headers: { "Authorization": "Bearer " + API_KEY },
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
// Escribir datos en la hoja activa
const sheet = SpreadsheetApp.getActiveSheet();
const headers = Object.keys(json.data[0]);
sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
const rows = json.data.map(row => headers.map(h => row[h]));
sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
}