Authentification
Authentifiez les requêtes de l'API HTTP avec une clé d'API d'organisation ou un jeton d'accès OAuth.
Envoyez un identifiant Bearer dans chaque requête POST /api/v1/* :
Authorization: Bearer <credential>Un identifiant qui commence par aut_ est une clé d'API d'organisation. Tout autre identifiant est vérifié comme jeton d'accès OAuth.
Clés d'API d'organisation
Utilisez une clé d'API pour les tâches CI, les scripts et les autres systèmes qui n'agissent pas au nom d'une personne.
- Ouvrez Organization → API keys. Seuls les propriétaires et les administrateurs peuvent gérer les clés.
- Sous Create a key, saisissez un Key name, comme « GitHub Actions », puis cliquez sur Generate key.
- Copiez la clé immédiatement. Le tableau de bord ne l'affiche qu'une fois : « Copy this key now. You won't see it again. »
Authorization: Bearer aut_…Ce qu'une clé peut faire :
- Elle appartient à une organisation et atteint tous ses projets.
- Elle possède toutes les portées ci-dessous. Il n'y a ni choix des portées ni date d'expiration.
- Elle peut envoyer 1 000 requêtes par heure.
- Elle ne fonctionne que sur l'API HTTP. Les assistants IA se connectent à MCP avec OAuth.
Le tableau API keys liste chaque clé avec son nom, le début de la clé et sa date de création. Pour désactiver une clé, cliquez sur Revoke key : tout ce qui l'utilise cesse immédiatement de fonctionner. Conservez les clés dans le coffre de secrets de votre CI, jamais dans un corps de requête ni dans un dépôt.
Jetons d'accès OAuth
Un jeton d'accès OAuth agit au nom de la personne qui l'a autorisé, dans une organisation. C'est ce qu'utilisent les clients MCP, et l'API HTTP l'accepte aussi. La personne doit toujours être membre de cette organisation, et un membre n'atteint que les projets qu'il peut ouvrir. Les propriétaires et les administrateurs atteignent tous les projets.
Les jetons d'accès durent une heure. Un client qui a demandé offline_access peut renouveler son jeton sans vous le redemander.
Portées
Chaque opération nécessite une portée. Les clés d'API les possèdent toutes. Un jeton OAuth possède les portées approuvées sur l'écran de consentement.
| Portée | Libellé sur l'écran de consentement | Opérations |
|---|---|---|
autonomy:read | Read projects, test cases, runs and issues | Toutes les opérations list et get, run.step_actions et run.evidence |
autonomy:test_cases:write | Create and edit test cases | test_case.create, test_case.update_steps, test_case.archive |
autonomy:test_plans:write | Create and edit test plans | test_plan.create, test_plan.set_members |
autonomy:runs:write | Start runs | run.trigger |
autonomy:environments:write | Create and edit environments | environment.upsert |
autonomy:issues:write | File and update issues | issue.create, issue.comment, issue.set_status |
Un jeton qui n'a pas la portée requise par une opération reçoit 403 FORBIDDEN avec le message « This operation requires the <scope> scope. » et la portée dans details.scope. Le catalogue d'opérations indique la portée de chaque opération.
Échecs d'authentification
Un identifiant absent, mal formé, expiré ou invalide renvoie 401 avec l'erreur UNAUTHENTICATED :
1{2 "error": {3 "code": "UNAUTHENTICATED",4 "message": "Missing or invalid programmatic credentials."5 }6}La réponse contient aussi un défi Bearer, que les clients OAuth utilisent pour trouver le serveur d'autorisation :
WWW-Authenticate: Bearer resource_metadata="https://app.autonomyqa.com/.well-known/oauth-protected-resource/api/mcp"Vous n’avez pas trouvé ?