S’exécute surWrit Cloud
Sur cette page
Authentification.
Cinq familles d’identifiants, chacune ouvrant exactement une surface. Cette page en dresse la carte, puis approfondit les deux que vous émettrez le plus : les clés API wt_ avec leurs scopes, et OAuth pour les applications tierces.
tokens ▸ la carte
Cinq identifiants, cinq surfaces.
Chaque identifiant ouvre exactement une tranche de Writ. Le moyen le plus rapide de déboguer un 401 est de vérifier la paire : quel token, sur quelle surface.
| Identifiant | Préfixe | Où il fonctionne |
|---|---|---|
| Clé API | wt_ | Vos propres serveurs, sur toute la surface /api/* + /api/v1/* et sur POST /mcp. |
| Token d’accès OAuth | wto_ | Les applications tierces, sur /api/* et sur les serveurs publiés /mcp/{slug}. Les tokens hérités pso_ sont encore acceptés. |
| Clé consommateur | csk_ | Vos clients, uniquement sur la passerelle /v1/{slug}/{path} — jamais sur /api. |
| Token SCIM | — | Votre fournisseur d’identité, uniquement sur /scim/v2/* — un token par organisation. |
| Session (JWT) | — | L’application web après connexion — tokens d’accès de 15 minutes, révoqués côté serveur à la déconnexion. |
wt ▸ clés + scopes
Clés API : un en-tête, une portée serrée.
Une clé est wt_ suivi de 43 caractères URL-safe. Le secret est affiché une seule fois à la création et stocké haché — les listes et journaux ne montrent qu’un court préfixe non secret. Envoyez-la comme token Bearer :
curl https://api.usewrit.app/api/v1/workflows \
-H "Authorization: Bearer $WRIT_API_KEY" headers = {"Authorization": f"Bearer {os.environ['WRIT_API_KEY']}"} const headers = { Authorization: `Bearer ${process.env.WRIT_API_KEY}` }; req.Header.Set("Authorization", "Bearer "+os.Getenv("WRIT_API_KEY")) let req = client.get(url).bearer_auth(std::env::var("WRIT_API_KEY")?); Scopes : resource:action
Les actions sont read, write, execute et delete, sur dix-sept ressources. Une clé ne porte que les scopes que vous lui accordez — et les ressources épinglables peuvent être restreintes davantage, à des ids précis.
| Ressource | Actions | Note |
|---|---|---|
workflows | read · write · execute · delete | Épinglable à des workflows précis. |
runs | read | |
monitors | read · write · execute · delete | Épinglable. |
datasets | read · delete | Épinglable. |
transfer | read · write | Export et import en masse de tout le compte — jamais inclus dans un preset. |
crawl | read · execute · delete | |
scrape | execute | Séparé de crawl : une clé d’extraction de page unique ne peut pas lancer un crawl de site. |
files | read · write · delete | |
personas | read · write · delete | |
secrets | read · write · delete | Les valeurs ne sont jamais renvoyées — noms et métadonnées uniquement. |
agents | read · write · execute | |
triggers | read · write · execute · delete | |
recorder | read · execute | |
streaming | read · execute · delete | |
mcp | read · write · execute · delete | |
marketplace | read · write | |
account | read |
Trois presets couvrent la plupart des clés : read_only (chaque :read), run (:read + :execute) et full (tout, suppression comprise). transfer est exclu de chaque preset et doit être accordé à la main. Les jokers se développent en scopes concrets au moment de l’octroi, si bien qu’une clé ne peut jamais s’élargir en silence — et l’application est en refus par défaut : une route qui n’est pas explicitement ouverte aux clés API les refuse.
Rotation. Les clés sont indépendantes : émettez une nouvelle clé avec les mêmes scopes, déployez-la, puis révoquez l’ancienne — aucune interruption. Stockez les clés dans votre gestionnaire de secrets ; elles ne peuvent pas être réaffichées.
oauth ▸ applications tierces
OAuth : PKCE, sans client secret.
La surface OAuth est faite pour les clients publics : PKCE est obligatoire, il n’y a pas de client secret, et les clients peuvent s’enregistrer eux-mêmes via l’enregistrement dynamique RFC 7591. Les tokens d’accès portent le préfixe wto_ (l’héritage pso_ reste accepté) et fonctionnent sur /api/* et les serveurs publiés /mcp/{slug}.
| Endpoint | Rôle |
|---|---|
GET /api/oauth/.well-known/oauth-authorization-server | Métadonnées du serveur d’autorisation — endpoints, scopes, méthodes PKCE. |
POST /api/oauth/register | Enregistrement dynamique de clients RFC 7591, pour les clients publics PKCE. |
Les scopes OAuth forment un ensemble séparé, plus petit — treize — et un octroi plafonne au rôle operator, jamais admin :
| Scope | Accorde |
|---|---|
targets:read | Voir les cibles surveillées et leur statut. |
targets:write | Créer, modifier et supprimer des cibles. |
changes:read | Voir les changements détectés et les diffs. |
workflows:read | Voir les workflows. |
workflows:write | Créer et modifier des workflows. |
workflows:execute | Déclencher l’exécution de workflows. |
triggers:read | Voir les règles de déclenchement et les configurations de webhook. |
triggers:write | Créer et modifier des déclencheurs. |
reports:read | Voir les résultats de runs et les rapports. |
notifications:read | Voir les réglages de notification. |
notifications:write | Gérer les réglages de notification. |
org:read | Voir les informations de l’organisation et les membres de l’équipe. |
profile:read | Voir les informations du profil utilisateur. |
compte ▸ sécurité de connexion
Verrouiller le compte lui-même.
Indépendamment des identifiants d’API, le compte porte ses propres protections :
Enregistrez une application d’authentification, confirmez un code pour l’activer, désactivez avec un code valide — avec des codes de récupération à usage unique en secours. La vérification est limitée en débit contre la force brute.
Connexion sans mot de passe, ou second facteur à côté du mot de passe.
Configuré par connexion — assertions signées côté SAML, PKCE + nonce côté OIDC.
Prouvez un domaine avec un enregistrement DNS TXT sur _writ-sso-verify.{domain} ; activez en option sso_enforced pour que les membres passent obligatoirement par le SSO.
Votre fournisseur d’identité crée et déprovisionne les comptes sur /scim/v2/* ; le déprovisionnement révoque immédiatement les sessions et tokens actifs de l’utilisateur.
secrets ▸ deux syntaxes
Références vault vs placeholders IA.
Deux syntaxes de placeholder, deux canaux — ne les mélangez pas. {{vault:key}} est la syntaxe des champs de workflow : elle accepte des sous-champs comme {{vault:name.username}}, et une référence d’identifiants nue se résout en mot de passe. {{secret:key}} est le placeholder du canal IA, quand une session IA a besoin d’un secret. Un champ de workflow attend vault: ; une instruction IA attend secret:.
faq
Questions d’authentification, répondues.
Quel token ouvre quelle surface ?
Comment les clés sont-elles stockées — puis-je en récupérer une ?
Que peut-il manquer à un preset, toujours ?
Une application OAuth peut-elle devenir admin ?
référence ▸ suite