Admin-Schlüssel
Mit einem Admin-Schlüssel verwalten Sie einen Workspace aus Ihrem eigenen Code. Er legt die Inferenzschlüssel für Ihre Kunden oder Geräte an, begrenzt sie und liest Nutzung, Logs und Einstellungen. Modelle aufrufen kann er nicht.
Ein Admin-Schlüssel darf im gesamten Workspace alles, was seine Scopes erlauben. Bewahren Sie ihn nur auf Ihren Servern auf, geben Sie ihm nur die Scopes, die er für seine Aufgabe braucht, und beschränken Sie ihn auf die IP-Adressen Ihrer Server.
Admin-Schlüssel erstellen
- Öffnen Sie in der Konsole API-Schlüssel › Admin-Schlüssel und wählen Sie Admin-Schlüssel erstellen. Das können Admins und der Eigentümer des Workspace.
- Legen Sie fest, wem der Schlüssel gehört und welche Scopes er hat.
- Kopieren Sie den Schlüssel. Er beginnt mit
sk-syn-admin-und wird nur einmal angezeigt.
Scopes
Jeder Scope öffnet einen Teil der Management-API. Ein Schreib-Scope schließt den zugehörigen Lese-Scope ein. Fehlt dem Schlüssel der Scope für eine Anfrage, lautet die Antwort 403 insufficient_scope.
| Scope | Was er öffnet | Endpunkte |
|---|---|---|
keys.readkeys.write | Inferenzschlüssel und ihre Limits | /api/v1/keys |
billing.read | Nutzung, Kosten und Guthaben des Workspace | /api/v1/billing/* |
logs.read | Anfragen, Traces und Sitzungen. Nie Prompts oder Antworten. | /api/v1/requests/api/v1/traces/api/v1/sessions |
usage.read | Nutzung, nach Label summiert | /api/v1/usage/labels |
prompts.readprompts.write | Die Prompt-Bibliothek: Prompts, Versionen und Labels | /api/v1/prompts |
evals.readevals.write | Testsets und Eval-Läufe | /api/v1/prompts/{id}/test-sets/api/v1/prompts/{id}/eval-runs |
audit.read | Das Audit-Log | /api/v1/audit-logs |
members.read | Mitglieder und Einladungen | /api/v1/members/api/v1/invites |
byok.read | BYOK-Einstellungen. Nie die Anbieterschlüssel. | /api/v1/byok |
exports.read | Exportziele, ohne deren Zugangsdaten | /api/v1/export-destinations |
Wem ein Schlüssel gehört
- Ihnen. Der Schlüssel wird deaktiviert, wenn Sie den Workspace verlassen. Bleiben Sie Mitglied, sind aber kein Admin mehr, erhalten Anfragen
403 key_creator_not_authorized. - Dem Workspace. Der Schlüssel funktioniert weiter, auch wenn die Person, die ihn erstellt hat, den Workspace verlässt oder eine andere Rolle bekommt. Das ist die richtige Wahl für CI und Integrationen. Verlässt diese Person den Workspace, gehen der Schlüssel und die damit erstellten Inferenzschlüssel an den Eigentümer über und funktionieren weiter.
Das legen Sie beim Erstellen fest. Später lässt es sich nicht mehr ändern.
Authentifizierung
Senden Sie den Schlüssel als Bearer-Token. Ein Admin-Schlüssel funktioniert nur an der Management-API: Die Modell-Endpunkte unter /v1/ lehnen ihn ab, und die Management-API lehnt einen Inferenzschlüssel (sk-syn-) mit 401 wrong_key_kind ab.
Authorization: Bearer sk-syn-admin-... Inferenzschlüssel erstellen
POST /api/v1/keys
| Parameter | Typ | Beschreibung |
|---|---|---|
name* | string | Erscheint in der Konsole und in der Nutzung. Pflichtfeld. |
limit_usd | number | Ausgabenlimit in US-Dollar. Ohne Angabe gilt kein Limit, es sei denn, das Mitglied, für das Ihr Admin-Schlüssel handelt, hat in diesem Workspace ein Tageslimit. Dann ist ein Limit Pflicht: höchstens so hoch wie dieses Tageslimit und mit limit_reset auf daily. |
limit_reset | string | Wann die Ausgaben wieder bei null beginnen: nie, täglich, wöchentlich oder monatlich. |
allowed_models | string[] | Die Modelle, die der Schlüssel aufrufen darf. Leer heißt: alle, oder, wenn das Mitglied, für das Ihr Admin-Schlüssel handelt, nur bestimmte Modelle nutzen darf, genau diese. Ein Modell außerhalb dieser Liste wird abgelehnt. |
ip_allowlist | string[] | IP-Adressen oder CIDR-Bereiche, von denen aus der Schlüssel verwendet werden darf. Leer heißt: beliebig. |
expires_at | string | Zeitpunkt im RFC-3339-Format, ab dem der Schlüssel nicht mehr funktioniert. |
include_byok_in_limit | boolean | Ob Anfragen, die über Ihre eigenen Anbieterschlüssel laufen, auf das Limit angerechnet werden. Standardmäßig ja. |
rate_limit | object | Eigene Minutenlimits des Schlüssels: Anfragen (rpm) und Tokens (tpm). 0 heißt: kein Limit. |
metadata | object | Ihre eigenen Kennzeichen für den Schlüssel, etwa eine Mandanten- oder Geräte-ID. Die Liste lässt sich danach filtern. |
curl https://synthorai.io/api/v1/keys \
-H "Authorization: Bearer sk-syn-admin-..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: device-abc-123" \
-d '{
"name": "Device abc-123",
"limit_usd": 5.0,
"limit_reset": "monthly",
"allowed_models": ["claude-haiku-4-5"],
"metadata": { "tenant_id": "acme", "device_id": "abc-123" }
}'import requests
resp = requests.post(
"https://synthorai.io/api/v1/keys",
headers={
"Authorization": "Bearer sk-syn-admin-...",
"Idempotency-Key": "device-abc-123",
},
json={
"name": "Device abc-123",
"limit_usd": 5.0,
"limit_reset": "monthly",
"allowed_models": ["claude-haiku-4-5"],
"metadata": {"tenant_id": "acme", "device_id": "abc-123"},
},
)
inference_key = resp.json()["data"]["key"] # full key - shown only onceDie Antwort enthält den vollständigen Schlüssel im Feld key, und zwar nur dieses eine Mal. Speichern Sie ihn sofort: Spätere Abfragen liefern nur noch key_prefix.
{
"data": {
"id": 42,
"key": "sk-syn-d4f0...e91b",
"key_prefix": "sk-syn-d4f0...",
"name": "Device abc-123",
"enabled": true,
"status": "enabled",
"limit_usd": 5.0,
"used_usd": 0,
"limit_reset": "monthly",
"allowed_models": ["claude-haiku-4-5"],
"ip_allowlist": [],
"expires_at": null,
"include_byok_in_limit": true,
"rate_limit": { "rpm": 0, "tpm": 0 },
"metadata": { "tenant_id": "acme", "device_id": "abc-123" },
"created_via": "provisioning_api",
"created_at": "2026-10-01T12:00:00Z"
},
"meta": { "request_id": "01a1..." }
} Damit Sie das Erstellen gefahrlos wiederholen können, senden Sie einen Idempotency-Key-Header mit. Eine Wiederholung mit demselben Wert liefert die erste Antwort, allerdings ohne das Secret. Der Schlüssel liefert diese Antwort 24 Stunden lang, auch wenn die Ressource inzwischen gelöscht wurde; um sie neu anzulegen, verwenden Sie einen neuen Schlüssel.
Schlüssel auflisten und filtern
GET /api/v1/keys
Mit ?metadata.<name>=<value> filtern Sie nach einem beliebigen Metadatenfeld. Die Ergebnisse kommen seitenweise: Für die nächste Seite übergeben Sie meta.next_cursor als cursor.
# all keys
curl https://synthorai.io/api/v1/keys \
-H "Authorization: Bearer sk-syn-admin-..."
# only keys tagged tenant_id=acme, 50 at a time
curl "https://synthorai.io/api/v1/keys?metadata.tenant_id=acme&limit=50" \
-H "Authorization: Bearer sk-syn-admin-..." Lesen, ändern, rotieren und löschen
- GET
/api/v1/keys/{id}gibt einen einzelnen Schlüssel zurück. - PATCH
/api/v1/keys/{id}ändert nur die Felder, die Sie senden."enabled": falsesperrt den Schlüssel, ohne ihn zu löschen. - POST
/api/v1/keys/{id}/rotategibt dem Schlüssel ein neues Secret. Das alte funktioniert sofort nicht mehr. - DELETE
/api/v1/keys/{id}löscht den Schlüssel. Anfragen mit ihm erhalten sofort401.
# stop a key without deleting it
curl -X PATCH https://synthorai.io/api/v1/keys/42 \
-H "Authorization: Bearer sk-syn-admin-..." \
-H "Content-Type: application/json" \
-d '{ "enabled": false }'
# give it a new secret
curl -X POST https://synthorai.io/api/v1/keys/42/rotate \
-H "Authorization: Bearer sk-syn-admin-..."
# delete it
curl -X DELETE https://synthorai.io/api/v1/keys/42 \
-H "Authorization: Bearer sk-syn-admin-..." Ein Admin-Schlüssel handelt für genau ein Mitglied: die Person, die ihn erstellt hat, oder den Eigentümer, wenn der Schlüssel dem Workspace gehört und diese Person gegangen ist. Er kann nur die Schlüssel dieses Mitglieds ändern, rotieren und löschen, auch die, die er selbst erstellt hat. Beim Schlüssel eines anderen Mitglieds lautet die Antwort 403 not_key_creator, selbst mit dem Admin-Schlüssel des Eigentümers. Auf einer dedizierten Instanz kann jeder Admin-Schlüssel des Workspace die Schlüssel aller Mitglieder verwalten, so wie Admins in der Konsole. Hat ein Admin einen Schlüssel gesperrt, kann nur ein Admin ihn wieder aktivieren; alle anderen erhalten 403 disabled_by_admin.
Limits und Ausgaben
limit_usd gibt an, wie viel der Schlüssel ausgeben darf, used_usd, wie viel er ausgegeben hat. Ist das Limit erreicht, wechselt status auf limit_reached, und Anfragen werden abgelehnt, bis Sie das Limit anheben oder der Zeitraum neu beginnt.
Tragen Sie Ihre eigene Kunden- oder Geräte-ID in metadata ein und filtern Sie die Liste danach. So sehen Sie die Schlüssel dieses Kunden und was jeder davon ausgegeben hat.
Sie planen Ausgabenlimits pro Schlüssel? Der LLM-API-Kostenrechner rechnet das erwartete Token-Volumen eines Kunden in einen Monatsbetrag um, den Sie als limit_usd setzen können.
Fehler
Fehler kommen im Format der Management-API: error.code nennt den Grund, error.message sagt, was zu tun ist. Unter /api/provisioning/keys steht derselbe Code in error.type. Diese Codes betreffen speziell Admin-Schlüssel und die Schlüssel-Endpunkte:
| Code | HTTP-Status | Bedeutung |
|---|---|---|
key_creator_not_authorized | 403 | Die Person, die den Admin-Schlüssel erstellt hat, ist weder Admin noch Eigentümer. |
key_owner_not_member | 403 | Das Mitglied, für das der Schlüssel handelt, gehört nicht mehr zum Workspace. |
not_key_creator | 403 | Der Schlüssel, den Sie ändern, rotieren oder löschen wollen, gehört einem anderen Mitglied. |
disabled_by_admin | 403 | Ein Admin hat den Schlüssel gesperrt. Nur ein Admin kann ihn wieder aktivieren. |
key_policy_refused | 400 | Der Schlüssel ginge über die Grenzen des Mitglieds hinaus, für das er bestimmt ist: sein Tageslimit, seine Modelle oder die IP-Bereiche, die der Workspace zulässt. Die Meldung nennt die Grenze. |
key_policy_unavailable | 503 | Diese Grenzen ließen sich gerade nicht lesen. Versuchen Sie es gleich noch einmal. |
Provisioning-Schlüssel und /api/provisioning
Schlüssel, die vor der Einführung der Admin-Schlüssel ausgestellt wurden (sk-syn-prov-), funktionieren weiter und haben die Scopes keys.read und keys.write. Die frühere Adresse /api/provisioning/keys bleibt mit ihren eigenen Feldnamen (quota, status) erreichbar. Für neue Integrationen nehmen Sie /api/v1/keys.
Die Management-API deckt außerdem die Abrechnung, das Anfrageprotokoll, Prompts und die Workspace-Einstellungen ab. Mehr dazu in der API-Übersicht und im OpenAPI-Dokument.