API-Schlüssel und Authentifizierung
So funktionieren API-Schlüssel bei StickyPrompts: Format, Lebenszyklus, der genaue Bearer-Header, mögliche Fehlerantworten und der sichere Umgang mit Schlüsseln.
Jeder REST-Aufruf und jede MCP-Sitzung authentifiziert sich mit einem API-Schlüssel, den Sie in der App erstellen. Ein Schlüssel handelt als Sie, beschränkt auf die Berechtigungen, die Sie ihm geben. Es gibt nur eine Art von Schlüssel und nur einen Header, für die REST-API wie für den MCP-Server.
Schlüssel erstellen
- Settings > API keys öffnen
Öffnen Sie Settings und wählen Sie API keys.
- Schlüssel erzeugen
Wählen Sie Generate key. Geben Sie dem Schlüssel einen Namen, der verrät, wo er eingesetzt wird (zum Beispiel Northwind CRM-Sync), und haken Sie die Berechtigungen an, die er braucht. Details dazu finden Sie in der Berechtigungsreferenz.
- Schlüssel kopieren
Der vollständige Schlüssel wird genau einmal angezeigt, direkt nach dem Erstellen. Später lässt er sich nicht mehr abrufen, weder von Ihnen noch von StickyPrompts. Legen Sie ihn sofort in Ihrem Secret Manager ab.
Schlüssel kann nur ein angemeldeter Benutzer in der App erstellen. Die Endpunkte zur Schlüsselverwaltung lassen sich nicht mit einem API-Schlüssel aufrufen. Ein Schlüssel kann also niemals Schlüssel erstellen, auflisten oder ändern.
Schlüsselformat
STICKY-API-<64 characters>
- Das Präfix lautet immer
STICKY-API-, gefolgt von 64 zufälligen Zeichen. Der vollständige Schlüssel ist 75 Zeichen lang. - Der Zufallsteil besteht aus Ziffern, Konsonanten (keine Vokale),
-und_. - StickyPrompts speichert nur einen Hash des Geheimnisses und dazu die ersten 16 Zeichen, um den Schlüssel wiederzufinden. Deshalb kann ein verlorener Schlüssel nicht erneut angezeigt werden.
Lebenszyklus
| Ihr Ziel | So gehen Sie vor |
|---|---|
| Ablauf | Schlüssel laufen nicht ab. Sie bleiben gültig, bis Sie sie löschen. |
| Schlüssel widerrufen | Löschen Sie ihn. Das Löschen ist endgültig und wirkt sofort. |
| Schlüssel umbenennen oder seine Berechtigungen ändern | Bearbeiten Sie ihn. Das Geheimnis bleibt gleich, es muss also nichts neu ausgerollt werden. |
| Schlüssel rotieren | Erstellen Sie einen neuen Schlüssel mit denselben Berechtigungen, stellen Sie Ihre Integration darauf um und löschen Sie dann den alten. |
| Prüfen, ob ein Schlüssel genutzt wird | Jeder Schlüssel speichert, wann er zuletzt verwendet wurde (höchstens einmal pro Minute aktualisiert). |
Schlüssel senden
Senden Sie den Schlüssel bei jedem Request als Bearer-Token im Header Authorization:
Authorization: Bearer STICKY-API-...
Das Präfix Bearer STICKY-API- unterscheidet Groß- und Kleinschreibung und muss exakt stimmen. Eine Alternative per Query-String oder Cookie gibt es nicht.
curl https://api.stickyprompts.com/api/v1/workspace \
-H "Authorization: Bearer $STICKY_API_KEY"import os
import requests
r = requests.get(
"https://api.stickyprompts.com/api/v1/workspace",
headers={"Authorization": f"Bearer {os.environ['STICKY_API_KEY']}"},
)
print(r.status_code, r.json())const res = await fetch("https://api.stickyprompts.com/api/v1/workspace", {
headers: { Authorization: `Bearer ${process.env.STICKY_API_KEY}` },
});
console.log(res.status, await res.json());(GET /workspace erfordert die Berechtigung organization_get.)
Was ein Schlüssel sieht
Ein Schlüssel handelt als der Benutzer, der ihn erstellt hat. Er sieht genau das, was dieser Benutzer sieht: dessen Workspace, dessen Projekte und alles, was mit ihm geteilt wurde. Seine Berechtigungen schränken das weiter ein. Einen Schlüssel auf einen bestimmten Workspace oder ein bestimmtes Projekt zu begrenzen, ist nicht möglich.
Ist Ihr Konto nicht mehr aktiv, funktionieren auch Ihre Schlüssel nicht mehr. Verlassen Sie einen Workspace oder verlieren Sie den Zugriff auf ein Projekt, verlieren Ihre Schlüssel diesen Zugriff ebenfalls.
So wird ein Request geprüft
Jeder Request durchläuft diese Prüfungen in genau dieser Reihenfolge. Die erste Prüfung, die fehlschlägt, bestimmt die Antwort.
| Schritt | Prüfung | Antwort bei Fehlschlag |
|---|---|---|
| 1 | Der Header beginnt mit Bearer STICKY-API- | Der Request wird gar nicht als API-Schlüssel-Request behandelt und deshalb als nicht authentifiziert abgelehnt: 401, manchmal mit leerem Body (über MCP: 401 {"error":"unauthorized"}) |
| 2 | Der Schlüssel existiert, das Geheimnis stimmt und sein Inhaber existiert noch | 401 {"error":"Invalid API key"} |
| 3 | Das Konto des Inhabers ist aktiv | 403 {"error":"user is not verified"} |
| 4 | Der Schlüssel hat mindestens eine der Berechtigungen, die die Route akzeptiert | 403 {"error":"This api key does not have any of the required permissions. You need at least one of: <permission>"} |
| 5 | Die Route ist überhaupt für API-Schlüssel freigegeben | 403, entweder mit der Meldung oben und einer leeren Liste oder mit {"error":"This endpoint cannot be accessed with an api key"} |
Unabhängig davon werden Requests aus einer Region, die der Dienst nicht bedient, mit 403 {"error":"access from your region is not supported"} abgelehnt, bei REST wie bei MCP.
Die Berechtigungsfehlermeldung nennt die fehlende Berechtigung. Meist genügt es daher, den Schlüssel zu bearbeiten und diese Berechtigung anzuhaken:
{"error": "This api key does not have any of the required permissions. You need at least one of: prompts_get"}
Über MCP funktioniert Schritt 4 anders: Jeder gültige, aktive Schlüssel kann sich verbinden, und Tools, für die der Schlüssel keine Berechtigung hat, werden einfach ausgeblendet. Siehe MCP im Überblick.
Routen, die Schlüssel nie nutzen können
Manche Teile der API sind einer angemeldeten Person in der App vorbehalten. Ein API-Schlüssel erhält dort 403, ganz gleich, welche Berechtigungen er hat:
- Routen für Konto, Anmeldung und Authentifizierung.
- Routen für Abrechnung und Abonnement.
- Die Verwaltung von API-Schlüsseln (Schlüssel erstellen, auflisten, bearbeiten und löschen).
- Administrationsrouten für StickyPrompts-Mitarbeiter.
- Einige Routen, die ohne API-Schlüssel-Berechtigung registriert sind, zum Beispiel das Lesen eines einzelnen Prompts mit
GET /prompt/:idund das Teilen von Agenten (GET /agents/:id/sharesund die RoutenPATCH /agents/:id/share_with_*). Agenten teilen Sie in der App.
Schlüssel sicher aufbewahren
- Nur serverseitig. Bewahren Sie Schlüssel in Umgebungsvariablen oder einem Secret Manager auf. Committen oder loggen Sie sie nie, und fügen Sie sie nie in Tickets oder Chats ein.
- Minimale Rechte. Haken Sie nur die Berechtigungen an, die die Integration tatsächlich nutzt. Ein Reporting-Bot braucht kein
integration_email_manage. Starten Sie mit den empfohlenen Berechtigungssätzen. - Ein Schlüssel pro Integration. Benennen Sie jeden Schlüssel nach dem System, das ihn nutzt. So können Sie eine Integration widerrufen, ohne die anderen anzufassen, und am Zeitpunkt der letzten Nutzung erkennen, ob sie noch aktiv ist.
- Rotieren. Ersetzen Sie Schlüssel in einem Rhythmus, der zu Ihnen passt, und sofort, wenn jemand mit Zugriff das Unternehmen verlässt oder ein Schlüssel möglicherweise kompromittiert ist. Erstellen Sie zuerst den neuen Schlüssel, stellen Sie um und löschen Sie dann den alten.
- Denken Sie daran, wer der Schlüssel ist. Ein Schlüssel handelt als Sie. Für eine gemeinsam genutzte Integration kann es sinnvoll sein, den Schlüssel mit einem Konto zu erstellen, dessen Zugriff genau dem entspricht, was die Integration sehen soll.