REST API Dokumentation
Greifen Sie programmatisch über die REST-API auf Ihre AI-Sichtbarkeitsdaten zu. Verwenden Sie sie mit jedem Tool, das HTTP-Anfragen unterstützt.
TL;DR
Generieren Sie einen persönlichen API-Schlüssel in Ihren Kontoeinstellungen. Verwenden Sie dann Standard-HTTP-GET-Anfragen mit Ihrem API-Schlüssel, um Sichtbarkeitswerte, Erwähnungen und Sentimentdaten von ChatGPT, Gemini, Perplexity und Claude abzurufen. Funktioniert mit Excel, Google Sheets, Power BI, Tableau, Python und jedem anderen HTTP-Client.
Basis-URL
Alle API-Endpunkte sind unter folgender Basis-URL verfügbar:
https://your-domain.com/api/v1/looker/
Ersetzen Sie your-domain.com durch die tatsächliche Domain Ihrer AI Visibility Tool-Instanz.
Authentifizierung
Alle API-Anfragen erfordern eine Authentifizierung über einen persönlichen API-Schlüssel. Sie können API-Schlüssel in Ihren Kontoeinstellungen unter "API-Schlüssel" erstellen.
So authentifizieren Sie sich
Fügen Sie Ihren API-Schlüssel in jede Anfrage ein, indem Sie eine dieser Methoden verwenden:
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_ gefolgt von 48 Zeichen. Halten Sie Ihren API-Schlüssel geheim — er bietet vollen Lesezugriff auf Ihre Sichtbarkeitsdaten.
API-Schlüssel-Verwaltung
- Schlüssel erstellen: Kontomenü → API-Schlüssel → API-Schlüssel erstellen
- Maximal 3 aktive Schlüssel gleichzeitig
- Schlüssel werden nur einmal bei der Erstellung angezeigt — bewahren Sie sie sicher auf
- Löschen Sie unbenutzte Schlüssel jederzeit auf der API-Schlüssel-Seite
Rate Limits
| Limit | Wert |
|---|---|
| Anfragen pro Minute | 100 pro API-Schlüssel |
| Maximale Datensätze pro Anfrage | 10,000 |
Wenn das Rate Limit überschritten wird, gibt die API HTTP 429 zurück. Warten Sie 60 Sekunden, bevor Sie es erneut versuchen.
Endpunkte
Gibt das Datenschema mit Feldnamen, Typen und semantischen Informationen zurück. Nützlich, um die Datenstruktur vor der Abfrage zu verstehen.
Parameter: Keine
Beispielanfrage:
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/schema
Beispielantwort:
{
"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"
}
}
]
}
Gibt Ihre AI-Sichtbarkeits-Analyseergebnisse zurück. Unterstützt Filterung nach Datum, Themenfeld und AI-System. Enthält Paginierung für große Datensätze.
Query-Parameter:
| Parameter | Geben Sie | Erforderlich | Beschreibung |
|---|---|---|---|
date_from |
String | Nein | Startdatum-Filter (JJJJ-MM-TT) |
date_to |
String | Nein | Enddatum-Filter (JJJJ-MM-TT) |
selection_id |
Integer | Nein | Filtern nach Themenfeld-ID (IDs vom /selections-Endpunkt abrufen) |
ai_system |
String | Nein | Filtern nach AI-System: chatgpt, gemini, perplexity oder claude |
limit |
Integer | Nein | Anzahl der zurückzugebenden Datensätze (Standard: 1000, Max: 10000) |
offset |
Integer | Nein | Anzahl der zu überspringenden Datensätze für Paginierung (Standard: 0) |
Beispielanfrage:
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"
Beispielantwort:
{
"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
}
}
Gibt eine Liste Ihrer Themenfelder (Auswahlen) mit ihren IDs zurück. Verwenden Sie diese IDs, um Daten im /data-Endpunkt zu filtern.
Parameter: Keine
Beispielanfrage:
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/selections
Beispielantwort:
{
"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"
}
]
}
Datenfeld-Referenz
Jeder Datensatz in der /data-Antwort enthält folgende Felder:
Dimensionen
| Feld | Geben Sie | Beschreibung |
|---|---|---|
date |
String | Analysedatum im Format JJJJMMTT |
topic_area |
String | Name des überwachten Themenfelds (Auswahl) |
prompt |
String | Der an das AI-System gesendete Prompt-Text |
category |
String | Dem Prompt zugewiesene Kategorie |
funnel_stage |
String | Marketing-Funnel-Stufe (z.B. Bekanntheit, Überlegung, Entscheidung) |
ai_system |
String | Die abgefragte AI-Plattform (chatgpt, gemini, perplexity, claude) |
brand |
String | Die Marke, die auf Erwähnungen verfolgt wird |
Metriken
| Feld | Geben Sie | Bereich | Beschreibung |
|---|---|---|---|
visibility_score |
Zahl | 0–100 | Gesamter Sichtbarkeitswert der Marke in der AI-Antwort |
mention_count |
Zahl | 0+ | Anzahl der Erwähnungen der Marke in der AI-Antwort |
position_score |
Zahl | 0–100 | Positionsranking-Wert — höhere Werte bedeuten frühere Erwähnungen |
sentiment_score |
Zahl | -1 bis +1 | Sentimentwert von -1 (negativ) bis +1 (positiv) |
web_search_used |
Boolean | true/false | Ob das AI-System eine Websuche zur Generierung der Antwort verwendet hat |
Antwortformat
Alle Antworten werden als JSON mit UTF-8-Kodierung zurückgegeben. Der HTTP-Content-Type-Header ist gesetzt auf application/json.
HTTP-Statuscodes
| Statuscode | Bedeutung |
|---|---|
| 200 OK | Anfrage erfolgreich |
| 401 Unauthorized | API-Schlüssel fehlt, ungültig oder deaktiviert |
| 429 Too Many Requests | Rate Limit überschritten — 60 Sekunden warten |
Fehlerbehandlung
Fehlerantworten enthalten immer einen JSON-Body mit einer Fehlermeldung:
{
"error": "API key required. Use Authorization: Bearer <key> header or ?api_key=<key> query parameter."
}
| Fehler | Ursache | Lösung |
|---|---|---|
API key required |
Kein API-Schlüssel in der Anfrage | Authorization-Header oder api_key-Parameter hinzufügen |
Invalid or inactive API key |
Schlüssel ist falsch, gelöscht oder deaktiviert | Überprüfen Sie den Schlüssel auf Ihrer API-Schlüssel-Seite; erstellen Sie bei Bedarf einen neuen |
Rate limit exceeded |
Mehr als 100 Anfragen in 60 Sekunden | 60 Sekunden warten, dann erneut versuchen; Ergebnisse ggf. zwischenspeichern |
Codebeispiele
import requests
API_KEY = "avt_your_key_here"
BASE_URL = "https://your-domain.com/api/v1/looker"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Alle Themenfelder abrufen
selections = requests.get(f"{BASE_URL}/selections", headers=headers).json()
print(selections)
# Sichtbarkeitsdaten für Januar 2025 abrufen
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']}")
# Durch alle Ergebnisse paginieren
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}` };
// Sichtbarkeitsdaten abrufen
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`);
# Schema abrufen
curl -H "Authorization: Bearer avt_your_key_here" \
https://your-domain.com/api/v1/looker/schema
# Daten mit Filtern abrufen
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"
# Themenfelder abrufen
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());
// Daten in das aktive Tabellenblatt schreiben
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);
}