Grundlagen
Anmeldung, Antwortformat, Limits und Fehler. Gilt für alle Endpunkte.
Anmeldung
API-Key im Header X-API-Key (oder Authorization: Bearer <key>). Keys entstehen in der App unter Einstellungen → Integrationen → API Keys. Live-Keys beginnen mit kv_live_, Test-Keys mit kv_test_. Den Key nie in der URL übergeben und nie im Browser einsetzen.
Jeder Key gehört zu einem Konto und handelt mit den Rechten der Person, die ihn angelegt hat. Was ein Key zusätzlich darf, legen seine Berechtigungen fest (siehe unten).
Test-Modus
Mit einem Test-Key liefern lesende Aufrufe echte Daten. Schreibende, löschende und nach außen wirkende Aufrufe werden vollständig geprüft, aber nur simuliert (meta.test_mode: true).
Antwortformat
Immer { ok, data, meta } bzw. bei Fehlern { ok: false, error: { code, message, details } }. meta.request_id bitte bei Support-Anfragen nennen.
{
"ok": true,
"data": [
{
"id": "5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
"first_name": "Anna"
}
],
"meta": {
"request_id": "req_2b81d0aa",
"next_cursor": "eyJvIjoyNX0"
}
}{
"ok": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Die Anfrage enthält ungültige Felder. Details stehen in error.details.",
"details": [
{
"field": "email",
"message": "muss eine E-Mail-Adresse sein"
}
]
},
"meta": {
"request_id": "req_7f3a9c1e"
}
}Seitenweise Abruf
Listen liefern höchstens limit Einträge (Standard 25, max. 100). Gibt es mehr, steht in meta.next_cursor der Wert für ?cursor=.
Limits
120 Anfragen pro Minute und 3000 pro Stunde je Key, Body höchstens 1 MB. Bei Überschreitung 429 mit Header Retry-After.
Die API ist ab dem Growth-Tarif mit aktivem Abo enthalten.
Fehlercodes
Der HTTP-Status zeigt die Art des Fehlers, error.code den genauen Grund. error.details nennt bei Prüffehlern jedes betroffene Feld.
| HTTP | Code | Bedeutung |
|---|---|---|
| 400 | VALIDATION_ERROR | Die Anfrage enthält ungültige Felder. Details stehen in error.details. |
| 401 | AUTH_REQUIRED | Kein API-Key übergeben. Header X-API-Key oder Authorization: Bearer setzen. |
| 401 | INVALID_API_KEY | Der API-Key ist ungültig, abgelaufen oder deaktiviert. |
| 403 | FORBIDDEN | Für diese Aktion fehlt die Berechtigung. |
| 403 | SCOPE_MISSING | Dem API-Key fehlt die nötige Berechtigung (Scope). |
| 402 | PLAN_REQUIRED | Die API ist in diesem Tarif nicht enthalten. |
| 404 | NOT_FOUND | Nicht gefunden. |
| 405 | METHOD_NOT_ALLOWED | Diese HTTP-Methode ist für den Endpunkt nicht erlaubt. |
| 409 | CONFLICT | Der Datensatz existiert bereits oder steht im Konflikt mit einem anderen. |
| 422 | BUSINESS_ERROR | Die Aktion ist im aktuellen Zustand nicht möglich. |
| 429 | RATE_LIMITED | Zu viele Anfragen. Bitte kurz warten und erneut versuchen. |
| 502 | PROVIDER_ERROR | Ein angebundener Dienst hat einen Fehler gemeldet. |
| 503 | PROVIDER_DISABLED | Ein angebundener Dienst ist gerade nicht verfügbar. |
| 504 | PROVIDER_TIMEOUT | Ein angebundener Dienst hat nicht rechtzeitig geantwortet. |
| 500 | INTERNAL_ERROR | Ein unerwarteter Fehler ist aufgetreten. |
| 503 | MAINTENANCE_MODE | Wartungsarbeiten. Bitte später erneut versuchen. |
Berechtigungen
Jeder API-Key hat eine Liste von Berechtigungen (Scopes). Ein Endpunkt nennt bei sich, welchen Scope er braucht und welches Recht die Person in der App haben muss, die den Key angelegt hat. Sensible Scopes werden nie automatisch vergeben.
| Scope | Erlaubt | |
|---|---|---|
read:leads | Leads, Listen und Lead-Scout-Suchen lesen | |
write:leads | Leads und Listen anlegen und ändern | |
delete:leads | Leads endgültig löschen | sensibel |
read:exclusions | Ausschlüsse lesen | |
write:exclusions | Ausschlüsse anlegen und entfernen | |
read:campaigns | Kampagnen, Schritte, Statistiken und LinkedIn-Dauerläufe lesen | |
write:campaigns | Kampagnen anlegen, ändern und Leads zuordnen | |
run:campaigns | Kampagnen starten, stoppen und fortsetzen, Leads einschreiben (Außenwirkung) | sensibel |
read:crm | CRM lesen: Kontakte, Firmen, Deals, Notizen, Aufgaben, Termine | |
write:crm | CRM anlegen und ändern | |
delete:crm | CRM-Einträge endgültig löschen, z. B. Notizen | |
read:inbox | LinkedIn-Postfach lesen | |
write:inbox | Postfach pflegen: Status, Schlagwörter, Termin markieren (ohne Senden) | |
send:messages | LinkedIn-Nachrichten senden (Außenwirkung) | sensibel |
read:linkedin | Verbundene LinkedIn-Konten und Limits lesen | |
read:analytics | Auswertungen und Kennzahlen lesen | |
read:assets | Landingpages, Videos, Medien und Vorlagen lesen | |
write:assets | Medien hochladen, Landingpage-Vorlagen anlegen und ändern (ohne Credits) | |
generate:assets | Videos, Briefe und Landingpages erzeugen (verbraucht Credits) | sensibel |
read:webhooks | Webhook-Abos lesen | |
write:webhooks | Webhook-Abos anlegen und löschen | |
read:team | Team-Mitglieder lesen | |
read:account | Mandant, Tarif und Credits lesen |