Clés d’API
Générez des tokens Bearer à scopes pour un accès sans navigateur — scripts, pipelines de CI et agents IA.
Les clés d’API sont des tokens Bearer de longue durée pour accéder à l’API Spunto par programme — pour des scripts, des pipelines de CI ou des agents IA qui doivent piloter la plateforme sans session de navigateur. Chacune est limitée à une seule organisation et à un ensemble précis de permissions, et se révoque indépendamment de la session de connexion de quiconque.
Ouvrir les réglages de l’organisation
Une clé appartient toujours à une organisation. Dans le dashboard de l’organisation sur laquelle la clé doit agir, ouvrez Settings → API keys.
Choisir le type de propriétaire
Une clé Personal agit en votre nom — elle cesse de fonctionner si vous n’êtes plus membre de l’org. Une clé Org (service account) appartient à l’organisation elle-même et continue de fonctionner même si son créateur s’en va ; en créer une demande le rôle admin ou owner.
Sélectionner les scopes
Choisissez l’ensemble de scopes le plus étroit dont le script ou l’agent a réellement besoin (voir Scopes plus bas).
Copier le token
Le token complet (spk_...) n’est affiché qu’une fois, juste après la création. Rangez-le en lieu sûr — Spunto n’en garde qu’un hash, il ne peut donc plus être affiché. Si vous le perdez, révoquez la clé et créez-en une autre.
Personnelle (ownerType: "user") | Service account de l’org (ownerType: "org") | |
|---|---|---|
| Agit en tant que | Vous | L’organisation |
| Qui peut la créer | Tout membre de l’org, pour lui-même | admin / owner seulement |
| Survit au départ de son créateur | Non — liée à votre appartenance | Oui |
| Usage typique | Scripts personnels, votre propre outillage CLI | CI au long cours, agent autonome déployé en prod |
Les scopes sont larges et organisés par ressource, sous la forme resource:action. Une requête doit porter au moins un scope correspondant (ou le joker *) pour passer — les sessions ouvertes par la connexion au dashboard (JWT/cookie) ne sont pas concernées et ont toujours un accès complet ; les scopes ne s’appliquent qu’aux clés d’API.
| Scope | Donne accès à |
|---|---|
* | Tous les scopes ci-dessous — accès complet |
projects:read | Lister/lire les projets, historique des versions |
projects:write | Créer/modifier/supprimer des projets, restaurer des versions |
workers:read | Lister/lire les sandboxes, leurs ports, leurs snapshots |
workers:write | Créer/démarrer/arrêter/reconstruire/supprimer des sandboxes |
workers:exec | Lancer des commandes (POST .../exec) et des sessions de terminal — un accès shell dans une sandbox |
tasks:read | Lister/lire les tâches, leurs événements et leurs diffs |
tasks:write | Déléguer, répondre, accepter et abandonner des tâches — cela lance une session d’agent, c’est donc aussi un accès de niveau shell |
Une requête est rapprochée ainsi : GET → :read, toute autre méthode HTTP → :write, sauf les endpoints de commandes et de terminal sous /sandboxes/..., qui exigent toujours :exec, quelle que soit la méthode.
Envoyez-la comme un token Bearer standard — exactement comme un JWT de session :
curl -H "Authorization: Bearer spk_..." \
https://spunto.net/api/orgs/{orgId}/projectscurl -X POST \
-H "Authorization: Bearer spk_..." \
-H "Content-Type: application/json" \
-d '{ "projectId": "{projectId}", "appId": "spunto-cloud", "name": "ci" }' \
https://spunto.net/api/orgs/{orgId}/sandboxesUne requête dont la clé est absente, malformée, révoquée ou expirée reçoit 401 Unauthorized. Une requête avec une clé valide mais sans le scope nécessaire reçoit 403 Forbidden.
GET /api/orgs/:orgId/api-keys List keys (token values are never returned, only a `tokenPrefix`)
POST /api/orgs/:orgId/api-keys Create a key — { name, ownerType, scopes } → { ...key, token }
DELETE /api/orgs/:orgId/api-keys/:keyId Revoke a keyLes schémas complets des requêtes et des réponses (dont les formes ApiKey/ApiKeyCreated) sont dans la référence interactive — cherchez le tag ApiKeys sur /api/docs, ou parcourez le spec brut sur /openapi.json.
curl -X DELETE \
-H "Authorization: Bearer <session token, not an API key>" \
https://spunto.net/api/orgs/{orgId}/api-keys/{keyId}La révocation est immédiate — la toute prochaine requête faite avec ce token reçoit 401. La ligne de la clé n’est pas supprimée, seulement marquée révoquée : elle reste visible (et auditable) dans la liste.
- Pas encore d’expiration. Une clé est valable jusqu’à sa révocation — il n’y a aujourd’hui aucune option « expire dans 90 jours », ni dans le dashboard ni dans l’API.
- Pas de restriction par projet. Un scope comme
workers:writes’applique à tous les projets de l’org, pas à un seul. - Pas de limitation de débit. Un script ou une boucle d’agent qui s’emballe avec une clé d’API n’est borné que par les mêmes limites que tout le reste — c’est-à-dire aucune pour l’instant.