Clés d’administration
Une clé d’administration gère un espace de travail depuis votre code. Elle crée et plafonne les clés d’inférence qu’utilisent vos clients ou vos appareils, et lit l’usage, les journaux et les paramètres. Elle ne peut pas appeler de modèle.
Une clé d’administration peut faire tout ce que ses portées autorisent, dans tout l’espace de travail. Gardez-la sur vos serveurs, ne lui donnez que les portées dont elle a besoin et limitez-la aux adresses IP de vos serveurs.
Créer une clé d’administration
- Dans la console, ouvrez Clés API › Clés d’administration, puis cliquez sur Créer une clé d’administration. Seuls les admins et le propriétaire de l’espace de travail y ont accès.
- Choisissez à qui la clé appartient et quelles portées elle reçoit.
- Copiez la clé. Elle commence par
sk-syn-admin-et ne s’affiche qu’une fois.
Portées
Chaque portée ouvre une partie de l’API de gestion. Une portée d’écriture inclut la portée de lecture correspondante. Si la clé n’a pas la portée requise, la requête renvoie 403 insufficient_scope.
| Portée | Ce qu’elle ouvre | Endpoints |
|---|---|---|
keys.readkeys.write | Les clés d’inférence et leurs limites | /api/v1/keys |
billing.read | L’usage, le coût et le solde de l’espace de travail | /api/v1/billing/* |
logs.read | Les requêtes, les traces et les sessions. Jamais les prompts ni les réponses. | /api/v1/requests/api/v1/traces/api/v1/sessions |
usage.read | Les totaux d’usage par libellé | /api/v1/usage/labels |
prompts.readprompts.write | La bibliothèque de prompts : prompts, versions et étiquettes | /api/v1/prompts |
evals.readevals.write | Les jeux de tests et les exécutions d’évaluation | /api/v1/prompts/{id}/test-sets/api/v1/prompts/{id}/eval-runs |
audit.read | Le journal d’audit | /api/v1/audit-logs |
members.read | Les membres et les invitations | /api/v1/members/api/v1/invites |
byok.read | Les paramètres BYOK. Jamais les clés fournisseur. | /api/v1/byok |
exports.read | Les destinations d’export, sans leurs identifiants | /api/v1/export-destinations |
À qui appartient une clé
- Vous. La clé est désactivée si vous quittez l’espace de travail. Si vous y restez sans être admin, les requêtes renvoient
403 key_creator_not_authorized. - L’espace de travail. La clé continue de fonctionner si la personne qui l’a créée part ou change de rôle. À utiliser pour la CI et les intégrations. Si cette personne part, la clé passe au propriétaire de l’espace de travail avec les clés d’inférence créées grâce à elle, et toutes continuent de fonctionner.
Ce choix se fait à la création de la clé et ne peut plus être modifié ensuite.
Authentification
Envoyez la clé comme jeton Bearer. Une clé d’administration ne fonctionne que sur l’API de gestion : les endpoints de modèles sous /v1/ la refusent, et l’API de gestion refuse une clé d’inférence (sk-syn-) avec 401 wrong_key_kind.
Authorization: Bearer sk-syn-admin-... Créer une clé d’inférence
POST /api/v1/keys
| Paramètre | Type | Description |
|---|---|---|
name* | string | Affiché dans la console et dans l’usage. Obligatoire. |
limit_usd | number | Plafond de dépense en dollars US. Sans ce champ, aucun plafond, sauf si le membre pour lequel agit votre clé d’administration a une limite quotidienne dans cet espace de travail : le plafond devient alors obligatoire, sans dépasser cette limite, avec limit_reset à daily. |
limit_reset | string | Quand la dépense repart de zéro : jamais, chaque jour, chaque semaine ou chaque mois. |
allowed_models | string[] | Les modèles que la clé peut appeler. Vide : tous, ou, si le membre pour lequel agit votre clé d’administration n’a accès qu’à certains modèles, ceux-là. Un modèle absent de sa liste est refusé. |
ip_allowlist | string[] | Les adresses IP ou plages CIDR depuis lesquelles la clé peut être utilisée. Vide : toutes. |
expires_at | string | Le moment où la clé cesse de fonctionner, au format RFC 3339. |
include_byok_in_limit | boolean | Indique si les requêtes passant par vos propres clés fournisseur comptent dans le plafond. Activé par défaut. |
rate_limit | object | Les plafonds par minute propres à la clé : requêtes (rpm) et tokens (tpm). 0 : aucun. |
metadata | object | Vos propres libellés pour la clé, par exemple un identifiant de tenant ou d’appareil. Ils servent à filtrer la liste. |
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 onceLa réponse contient la clé complète dans key, une seule fois. Enregistrez-la tout de suite : les lectures suivantes ne renvoient que 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..." }
} Pour relancer une création sans risque de doublon, envoyez un en-tête Idempotency-Key. Une nouvelle requête avec la même valeur renvoie la première réponse, sans le secret. La clé renvoie cette réponse pendant 24 heures, même si la ressource a été supprimée entre-temps : pour la recréer, utilisez une nouvelle clé.
Lister et filtrer les clés
GET /api/v1/keys
Filtrez sur n’importe quel champ de métadonnées avec ?metadata.<name>=<value>. Les résultats sont paginés : passez meta.next_cursor dans cursor pour obtenir la page suivante.
# 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-..." Lire, modifier, renouveler et supprimer
- GET
/api/v1/keys/{id}renvoie une clé. - PATCH
/api/v1/keys/{id}ne modifie que les champs envoyés."enabled": falsearrête la clé sans la supprimer. - POST
/api/v1/keys/{id}/rotatedonne un nouveau secret à la clé. L’ancien cesse aussitôt de fonctionner. - DELETE
/api/v1/keys/{id}supprime la clé. Les requêtes qui l’utilisent renvoient aussitôt401.
# 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-..." Une clé d’administration agit pour un seul membre : la personne qui l’a créée, ou le propriétaire si la clé appartient à l’espace de travail et que cette personne est partie. Elle ne peut modifier, renouveler et supprimer que les clés de ce membre, y compris celles qu’elle a créées ; pour la clé d’un autre membre, la requête renvoie 403 not_key_creator, même avec la clé d’administration du propriétaire. Sur une instance dédiée, toute clé d’administration de l’espace de travail peut gérer les clés de tous les membres, comme les admins dans la console. Une clé désactivée par un admin ne peut être réactivée que par un admin : pour toute autre personne, la requête renvoie 403 disabled_by_admin.
Plafonds et dépenses
limit_usd est ce que la clé peut dépenser, used_usd ce qu’elle a déjà dépensé. Une fois le plafond atteint, status passe à limit_reached et les requêtes sont refusées jusqu’à ce que vous releviez le plafond ou que la période reparte de zéro.
Placez votre identifiant de client ou d’appareil dans metadata, puis filtrez la liste sur cette valeur pour voir les clés de ce client et ce que chacune a dépensé.
Vous cherchez quel plafond de dépense fixer par clé ? Le calculateur de coûts d’API LLM convertit le volume de tokens attendu d’un client en un montant mensuel, à reprendre dans limit_usd.
Erreurs
Les erreurs suivent le format de l’API de gestion : error.code donne la cause et error.message ce qu’il faut faire. Sur /api/provisioning/keys, le même code arrive dans error.type. Voici les codes propres aux clés d’administration et aux endpoints des clés :
| Code | Statut HTTP | Signification |
|---|---|---|
key_creator_not_authorized | 403 | La personne qui a créé la clé d’administration n’est plus admin ni propriétaire. |
key_owner_not_member | 403 | Le membre pour lequel agit la clé ne fait plus partie de l’espace de travail. |
not_key_creator | 403 | La clé que vous modifiez, renouvelez ou supprimez appartient à un autre membre. |
disabled_by_admin | 403 | Un admin a désactivé la clé. Seul un admin peut la réactiver. |
key_policy_refused | 400 | La clé dépasserait les limites du membre auquel elle est destinée : sa limite quotidienne, ses modèles ou les plages d’IP autorisées par l’espace de travail. Le message précise laquelle. |
key_policy_unavailable | 503 | Ces limites n’ont pas pu être lues. Réessayez dans un instant. |
Clés de provisioning et /api/provisioning
Les clés émises avant les clés d’administration (sk-syn-prov-) continuent de fonctionner, avec les portées keys.read et keys.write. L’ancienne adresse /api/provisioning/keys reste servie, avec ses propres noms de champs (quota, status). Pour une nouvelle intégration, utilisez /api/v1/keys.
L’API de gestion couvre aussi la facturation, le journal des requêtes, les prompts et les paramètres de l’espace de travail. Consultez la présentation de l’API et le document OpenAPI.