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 :

Option 1 : En-tête Authorization (Recommandé)
curl -H "Authorization: Bearer avt_your_key_here" \
  https://your-domain.com/api/v1/looker/data
Option 2 : Paramètre de requête
curl "https://your-domain.com/api/v1/looker/data?api_key=avt_your_key_here"
Votre clé API commence par 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

GET /api/v1/looker/schema

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"
      }
    }
  ]
}
GET /api/v1/looker/data

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
  }
}
Conseil : Utilisez les champs de pagination pour parcourir les grands ensembles de données. Augmentez l'offset de la valeur du limit pour récupérer la page suivante.
GET /api/v1/looker/selections

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."
}
Erreurs courantes et solutions
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

Python
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")
JavaScript (Node.js / Browser)
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`);
cURL
# 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
Google Sheets (Apps Script)
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);
}

FAQ

L'API REST est disponible sur tous les plans, y compris le plan gratuit. Tout utilisateur peut générer une clé API et accéder à ses données via l'API.

Non. Chaque clé API est liée à votre compte personnel. L'API ne renvoie que les données de vos propres domaines thématiques et analyses. Il n'est pas possible d'accéder aux données d'un autre utilisateur.

L'API renvoie toujours les données les plus récentes disponibles. Les nouveaux résultats apparaissent dès qu'une analyse est terminée dans l'AI Visibility Tool. Il n'y a pas de délai ni de cache côté API.

Tout outil capable d'envoyer des requêtes HTTP fonctionne avec l'API. Exemples courants : Python, JavaScript, Excel (Power Query), Google Sheets (Apps Script), Power BI, Tableau, Looker Studio, Postman, cURL et applications personnalisées.

Les clés API ne sont affichées qu'une seule fois à la création. Si vous avez perdu votre clé, allez dans Compte → Clés API, supprimez l'ancienne clé et créez-en une nouvelle. Mettez à jour la clé dans toutes vos intégrations.

Utilisez les paramètres limit et offset. Commencez avec offset=0, puis augmentez l'offset de la valeur du limit pour chaque requête suivante. Vérifiez le champ has_more dans l'objet de pagination pour savoir quand vous avez récupéré tous les enregistrements.