Scopes und Fehler
Vergeben Sie minimale Berechtigungen und behandeln Sie jeden stabilen öffentlichen API-Fehlercode.
Vergeben Sie minimale Berechtigungen und behandeln Sie jeden stabilen öffentlichen API-Fehlercode.
Jede Operation der öffentlichen API erfordert einen expliziten Scope. Ein gültiger Zugangsschlüssel ohne diesen Scope erhält 403 insufficient_scope; er wird nie stillschweigend auf einen umfassenderen Zugriff erweitert.
Scope-Referenz#
| Scope | Erlaubt |
|---|---|
account:read | Das authentifizierte Konto, den Tarif, die Berechtigungen und die Guthabenübersicht lesen |
tickets:read | Support-Tickets und deren Nachrichten lesen |
tickets:write | Tickets aktualisieren, Team-Mitglieder zuweisen und interne Notizen oder Antworten an Kunden hinzufügen |
team:read | Team-Mitglieder, ausstehende Einladungen und zulässige Audit-Ereignisse lesen |
team:write | Einladungen erstellen oder widerrufen und Rollen von Team-Mitgliedern (außer Owner) verwalten |
integrations:read | Autorisierte GitHub-App-Installationen und Repositories einsehen |
integrations:write | Integrationsänderungen vorbereiten und Entwurfs-Pull-Requests erstellen |
sites:read | Sites auflisten und abrufen |
sites:write | Sites erstellen, aktualisieren, veröffentlichen, depublizieren und löschen |
agents:read | Agent-Einstellungen lesen |
agents:write | Verhalten, Sprache, Stimme und Einbettungseinstellungen des Agents aktualisieren |
knowledge:read | Sources und FAQs auflisten |
knowledge:write | Sources und FAQs erstellen, aktualisieren und löschen |
conversations:read | Konversationen auflisten und deren Nachrichten abrufen |
conversations:write | Eine Konversation übernehmen: als Unternehmen auf einen Besucher antworten, den Agent in dieser Konversation pausieren und sie wieder zurückgeben |
leads:read | Erfasste Leads auflisten |
leads:write | Leads erstellen, aktualisieren, qualifizieren und in die Opportunity-Pipeline übernehmen |
pipeline:read | Phasen, Accounts, Opportunities, Aktivitäten, Attribution und den CRM-Synchronisierungsstatus lesen |
pipeline:write | Phasen konfigurieren; Opportunities und Accounts erstellen oder aktualisieren; CRM-Ergebnisse importieren oder erneut versuchen |
analytics:read | Analyseereignisse einer Site lesen |
connectors:read | Den Status von Connectors auflisten, ohne Geheimnisse zurückzugeben |
connectors:write | Connectors erstellen, aktualisieren, aktivieren, deaktivieren und entfernen |
domains:read | Entfernt. Nur aus Kompatibilitätsgründen beibehalten; jede /domains-Route gibt 409 zurück, da keine benutzerdefinierten Domains angeboten werden |
domains:write | Entfernt. Nur aus Kompatibilitätsgründen beibehalten; jede /domains-Route gibt 409 zurück |
broadcasts:read | Broadcasts und deren Zustellstatus auflisten |
broadcasts:write | Entwürfe erstellen und den Versand eines Broadcasts in die Warteschlange stellen |
notifications:read | Benachrichtigungen für Owner auflisten |
notifications:write | Benachrichtigungen als gelesen oder ungelesen markieren |
monetization:read | Monetarisierungsprodukte auflisten |
monetization:write | Produkte erstellen, aktualisieren, aktivieren, deaktivieren und löschen |
usage:read | Gemessene Nutzungsereignisse lesen |
webhooks:read | Webhook-Endpunkte und deren Zustellstatus auflisten |
webhooks:write | Webhook-Endpunkte erstellen und löschen |
Verwenden Sie für Reporting-Jobs Lese-Scopes. Fügen Sie einen Schreib-Scope nur hinzu, wenn die Integration diese Änderung tatsächlich durchführt. Ein Lead-Export benötigt beispielsweise normalerweise sites:read und leads:read, nicht jedoch sites:write oder agents:write.
Scope-Fehler#
{
"error": {
"code": "insufficient_scope",
"message": "The API key does not grant the required scope.",
"details": { "required": ["sites:write"] },
"request_id": "6c0b2f2e-..."
}
}Fügen Sie den fehlenden Scope dem Schlüssel unter Einstellungen → Entwickler → Bearbeiten hinzu, oder erstellen Sie einen Ersatzschlüssel und aktualisieren Sie das Server-Secret. Beim Bearbeiten werden Name und Scopes des Schlüssels direkt geändert; Ablaufdatum und Token bleiben gleich. Über OAuth ausgestellte Schlüssel können nicht bearbeitet werden; verbinden Sie die Anwendung erneut, um die erteilten Berechtigungen zu ändern.
Fehlerstruktur#
Alle API-Fehler verwenden dieselbe Struktur auf oberster Ebene:
type ApiError = {
error: {
code: string;
message: string;
details?: unknown;
request_id: string;
};
};Verzweigen Sie anhand von error.code, nicht anhand der englischen message. Meldungen können ohne Versionswechsel verbessert werden. Protokollieren Sie error.request_id und den Response-Header x-request-id zusammen mit Operationsname, Status und Wiederholungsversuch – protokollieren Sie jedoch niemals den Authorization-Header oder geheime Anfragedaten.
Referenz zu Status und Codes#
| HTTP | Stabiler Code | Bedeutung | Übliche Reaktion |
|---|---|---|---|
400 | invalid_request | Die Validierung ist fehlgeschlagen oder ein Feld wird nicht unterstützt | Korrigieren Sie die Felder in details; wiederholen Sie die Anfrage nicht mit unveränderten Eingaben |
400 | invalid_json | Der Body ist kein JSON-Objekt oder enthält ungültiges JSON | Serialisieren Sie genau ein gültiges JSON-Objekt |
401 | authentication_required | Der Bearer-Header fehlt | Hängen Sie einen serverseitigen Zugangsschlüssel an |
401 | invalid_api_key | Der Schlüssel ist ungültig, abgelaufen oder widerrufen, oder sein Owner existiert nicht mehr | Ersetzen oder rotieren Sie den Schlüssel |
403 | subscription_required | Der Owner hat keinen aktiven kostenpflichtigen Tarif | Stellen Sie das Abonnement wieder her, bevor Sie es erneut versuchen |
403 | insufficient_scope | Dem Zugangsschlüssel fehlt der Scope der Operation | Erstellen Sie einen Ersatzschlüssel mit minimalen Berechtigungen |
403 | account_paused | Der API-Zugriff für das Konto ist pausiert | Setzen Sie den API-Zugriff fort oder wenden Sie sich an den Kontoinhaber |
404 | not_found | Endpunkt oder eigene Ressource wurde nicht gefunden | Prüfen Sie den Pfad und die zum Mandanten gehörende ID |
409 | conflict | Der aktuelle Zustand der Ressource verhindert die Aktion | Lesen Sie den aktuellen Zustand, bevor Sie es erneut versuchen |
413 | payload_too_large | Der JSON-Body überschreitet das Anfragelimit von 256 KB | Senden Sie einen kleineren Body; teilen Sie große Inhalte auf mehrere Anfragen auf |
415 | invalid_request | Der Body der Mutation ist nicht application/json | Senden Sie Content-Type: application/json |
429 | rate_limit_exceeded | Das Ein-Minuten-Kontingent des Tarifs für den Schlüssel ist aufgebraucht | Warten Sie die Zeit aus Retry-After ab und wenden Sie Jitter an |
500 | internal_error | Die Anfrage konnte nicht abgeschlossen werden | Wiederholen Sie sichere oder idempotente Operationen und melden Sie die Request-ID |
503 | outcome_unknown | Eine Mutation wurde möglicherweise abgeschlossen, aber ihr Ergebnis konnte nicht erfasst werden; details.retryable ist false | Nicht wiederholen. Lesen Sie die Ressource, um zu prüfen, ob die Änderung erfolgt ist; derselbe Idempotency-Key liefert weiterhin dieses Ergebnis |
Ressourcen außerhalb des Kontos des Zugangsschlüssel-Owners können 404 zurückgeben, damit nicht offengelegt wird, ob die ID eines anderen Mandanten existiert.
Validierungsdetails#
Die Feldvalidierung gibt Pfade zurück, die Sie neben Ihren eigenen Formularfeldern anzeigen können:
{
"error": {
"code": "invalid_request",
"message": "Request validation failed.",
"details": [
{ "path": "content.headline", "message": "String must contain at least 1 character(s)" }
],
"request_id": "6c0b2f2e-..."
}
}Bodys von Mutationen müssen JSON-Objekte sein. Arrays, leere Bodys, Formulardaten und JSON, das mit einem Text-Content-Type gesendet wird, werden abgelehnt.
Entscheidungen zu Wiederholungen#
- Wiederholen Sie
429nach der inRetry-Afterangegebenen Anzahl von Sekunden. - Wiederholen Sie
500nur bei sicheren Lesevorgängen oder bei Schreibvorgängen, die mit demselbenIdempotency-Keygeschützt sind. - Wiederholen Sie das
409der laufenden Idempotenzprüfung nach dem HeaderRetry-After: 2. - Wiederholen Sie
503 outcome_unknownniemals blind. Prüfen Sie zuerst die Ressource; verwenden Sie einen neuen Idempotency-Key erst, nachdem Sie bestätigt haben, dass die Änderung nicht erfolgt ist. - Wiederholen Sie
400,401,403,404,413oder einen Zustandskonflikt nicht, bevor sich die Ursache geändert hat.
Informationen zum Backoff-Verhalten finden Sie unter Rate limits, den erforderlichen Scope für jede Operation unter API reference.