Documentation REST API
Accédez à vos données de visibilité AI par programmation via l'API REST. Utilisez-la avec tout outil supportant les requêtes HTTP.
TL;DR
Générez une clé API personnelle dans les paramètres de votre compte. Utilisez ensuite des requêtes HTTP GET standard avec votre clé API pour récupérer les scores de visibilité, le nombre de mentions et les données de sentiment de ChatGPT, Gemini, Perplexity et Claude. Fonctionne avec Excel, Google Sheets, Power BI, Tableau, Python et tout autre client HTTP.
URL de base
Tous les endpoints de l'API sont disponibles sous l'URL de base suivante :
https://your-domain.com/api/v1/looker/
Remplacez your-domain.com par le domaine réel de votre instance AI Visibility Tool.
Authentification
Toutes les requêtes API nécessitent une authentification via une clé API personnelle. Vous pouvez créer des clés API dans les paramètres de votre compte sous "Clés API".
Comment s'authentifier
Incluez votre clé API dans chaque requête en utilisant l'une de ces méthodes :
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_ suivi de 48 caractères. Gardez votre clé API secrète — elle donne un accès complet en lecture à vos données de visibilité.
Gestion des clés API
- Créer des clés : Menu du compte → Clés API → Créer une clé API
- Maximum 3 clés actives en même temps
- Les clés ne sont affichées qu'une seule fois à la création — conservez-les en lieu sûr
- Supprimez les clés inutilisées à tout moment depuis la page Clés API
Limites de débit
| Limite | Valeur |
|---|---|
| Requêtes par minute | 100 par clé API |
| Enregistrements maximum par requête | 10,000 |
Lorsque la limite de débit est dépassée, l'API renvoie HTTP 429. Attendez 60 secondes avant de réessayer.
Endpoints
Renvoie le schéma de données avec les noms de champs, les types et les informations sémantiques. Utile pour comprendre la structure des données avant d'interroger.
Paramètres : Aucun
Exemple de requête :
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/schema
Exemple de réponse :
{
"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"
}
}
]
}
Renvoie vos résultats d'analyse de visibilité AI. Supporte le filtrage par date, domaine thématique et système AI. Inclut la pagination pour les grands ensembles de données.
Paramètres de requête :
| Paramètre | Tapez | Requis | Description |
|---|---|---|---|
date_from |
String | Non | Filtre de date de début (AAAA-MM-JJ) |
date_to |
String | Non | Filtre de date de fin (AAAA-MM-JJ) |
selection_id |
Entier | Non | Filtrer par ID de domaine thématique (obtenir les IDs depuis l'endpoint /selections) |
ai_system |
String | Non | Filtrer par système AI : chatgpt, gemini, perplexity ou claude |
limit |
Entier | Non | Nombre d'enregistrements à renvoyer (par défaut : 1000, max : 10000) |
offset |
Entier | Non | Nombre d'enregistrements à sauter pour la pagination (par défaut : 0) |
Exemple de requête :
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"
Exemple de réponse :
{
"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
}
}
Renvoie une liste de vos domaines thématiques (sélections) avec leurs IDs. Utilisez ces IDs pour filtrer les données dans l'endpoint /data.
Paramètres : Aucun
Exemple de requête :
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/selections
Exemple de réponse :
{
"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"
}
]
}
Référence des champs de données
Chaque enregistrement dans la réponse /data contient les champs suivants :
Dimensions
| Champ | Tapez | Description |
|---|---|---|
date |
String | Date d'analyse au format AAAAMMJJ |
topic_area |
String | Nom du domaine thématique (sélection) surveillé |
prompt |
String | Le texte du prompt envoyé au système d'IA |
category |
String | Catégorie assignée au prompt |
funnel_stage |
String | Étape de l'entonnoir marketing (p. ex. Sensibilisation, Considération, Décision) |
ai_system |
String | La plateforme AI interrogée (chatgpt, gemini, perplexity, claude) |
brand |
String | La marque suivie pour les mentions |
Métriques
| Champ | Tapez | Plage | Description |
|---|---|---|---|
visibility_score |
Nombre | 0–100 | Score de visibilité global de la marque dans la réponse AI |
mention_count |
Nombre | 0+ | Nombre de fois que la marque a été mentionnée dans la réponse de l'IA |
position_score |
Nombre | 0–100 | Score de classement de position — des valeurs plus élevées indiquent des mentions plus précoces |
sentiment_score |
Nombre | -1 à +1 | Score de sentiment de -1 (négatif) à +1 (positif) |
web_search_used |
Booléen | true/false | Si le système d'IA a utilisé la recherche web pour générer la réponse |
Format de réponse
Toutes les réponses sont renvoyées en JSON avec encodage UTF-8. L'en-tête HTTP Content-Type est défini sur application/json.
Codes de statut HTTP
| Code de statut | Signification |
|---|---|
| 200 OK | Requête réussie |
| 401 Unauthorized | Clé API manquante, invalide ou désactivée |
| 429 Too Many Requests | Limite de débit dépassée — attendez 60 secondes |
Gestion des erreurs
Les réponses d'erreur incluent toujours un corps JSON avec un message d'erreur :
{
"error": "API key required. Use Authorization: Bearer <key> header or ?api_key=<key> query parameter."
}
| Erreur | Cause | Solution |
|---|---|---|
API key required |
Pas de clé API dans la requête | Ajoutez l'en-tête Authorization ou le paramètre api_key |
Invalid or inactive API key |
La clé est incorrecte, supprimée ou désactivée | Vérifiez la clé sur votre page Clés API ; créez-en une nouvelle si nécessaire |
Rate limit exceeded |
Plus de 100 requêtes en 60 secondes | Attendez 60 secondes, puis réessayez ; envisagez de mettre les résultats en cache |
Exemples de code
import requests
API_KEY = "avt_your_key_here"
BASE_URL = "https://your-domain.com/api/v1/looker"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Récupérer tous les domaines thématiques
selections = requests.get(f"{BASE_URL}/selections", headers=headers).json()
print(selections)
# Récupérer les données de visibilité pour janvier 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']}")
# Paginer à travers tous les résultats
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}` };
// Récupérer les données de visibilité
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`);
# Récupérer le schéma
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/schema
# Récupérer les données avec filtres
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"
# Récupérer les domaines thématiques
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());
// Écrire les données dans la feuille active
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);
}