Authentifizierung

Sicherer API-Zugriff mit organisationsgebundenen API-Keys.

Sicherer API-Zugriff mit organisationsgebundenen API-Keys. Jedes Deployment bedient genau eine Organisation, daher ist ein Key an diese eine Organisation gebunden und nicht an einen von mehreren Mandanten.

Format des API-Keys

Owlat validiert Keys anhand eines Live-Präfix-Formats:

lm_live_...

Auth-Header senden

curl "https://<deployment>.convex.site/api/v1/contacts" \
  -H "Authorization: Bearer lm_live_your_key"

Authorization: <api_key> (ohne Bearer) wird ebenfalls akzeptiert, empfohlen ist jedoch Bearer.

Häufige Auth-Fehler

Fehlender Header (401)

{
  "error": {
    "message": "Missing or invalid Authorization header. Use: Authorization: Bearer <api_key>",
    "category": "unauthenticated"
  }
}

Ungültiges Format (401)

{
  "error": {
    "message": "Invalid API key format",
    "category": "unauthenticated"
  }
}

Ungültiger oder widerrufener Key (401)

{
  "error": {
    "message": "Invalid API key",
    "category": "unauthenticated"
  }
}

Unzureichender Scope (403)

{
  "error": {
    "message": "This API key is missing the required scope: contacts:write",
    "category": "forbidden"
  }
}

Rate-Limit überschritten (429)

{
  "error": {
    "message": "Rate limit exceeded. Maximum 10 requests per second.",
    "category": "rate_limited"
  }
}

Das Limit ist ein Token-Bucket, der dauerhaft 10 Anfragen pro Sekunde trägt, kurze Bursts von bis zu 15 Anfragen aber zulässt, bevor gedrosselt wird.

Authentifizierte Antworten (einschließlich der 429 selbst) enthalten Rate-Limit-Header, damit Clients präzise zurückregeln können. Eine 429 enthält zusätzlich Retry-After. Authentifizierungsfehler (401) enthalten diese Header nicht.

HeaderBedeutung
X-RateLimit-LimitDauerhaft zulässige Anfragen pro Sekunde
X-RateLimit-RemainingIm aktuellen Fenster verbleibende Anfragen
X-RateLimit-ResetUnix-Zeitstempel (Sekunden), zu dem das Fenster zurückgesetzt wird
Retry-AfterWartezeit in Sekunden vor einem erneuten Versuch (nur bei 429)

Scopes

Jeder Key trägt eine Menge von Scopes, die festlegen, welche v1-Endpunkte er aufrufen darf. Eine Anfrage mit einem Key, dem der erforderliche Scope fehlt, wird mit 403 forbidden abgelehnt (siehe oben).

ScopeErlaubt
contacts:readGET /api/v1/contacts, GET /api/v1/contacts/{id}
contacts:writeKontakte anlegen / aktualisieren / löschen
events:writePOST /api/v1/events
transactional:sendPOST /api/v1/transactional
topics:writeeinen Kontakt zu einem Thema hinzufügen / entfernen

Das Anlegen eines Keys erfordert eine explizite, nicht leere Scope-Liste — wird sie weggelassen, wird die Anfrage abgelehnt, und unbekannte Scope-Namen werden ebenfalls abgelehnt. Bereits vorhandene Keys ohne gespeicherte Scopes werden so behandelt, als hätten sie keine (Deny-all); vergeben Sie daher gezielt die Scopes, die jede Integration benötigt.

Best Practices

  • Keys ausschließlich serverseitig halten
  • Keys planmäßig rotieren und widerrufen
  • Pro Umgebung eigene Keys verwenden
  • Anfragemuster und Fehler überwachen