Docs Autonomy
API HTTP v1

Opérations

Routes, portées, exigences d’idempotence et objectifs des 18 opérations de l’API HTTP.

Appelez chaque opération avec POST /api/v1/<operation> et un corps objet JSON. Dans les tableaux, le nom de l’opération est le suffixe exact après /api/v1/.

Cas de test

OpérationPortéeIdempotenceObjectif
test_case.listautonomy:readAucuneLister les cas de test de l’organisation, les plus récents d’abord. Filtrer par plateforme ou par recherche sur le nom. À utiliser avant de créer un cas afin de réutiliser la couverture existante.
test_case.getautonomy:readAucuneRécupérer un cas de test avec sa liste complète d’étapes.
test_case.createautonomy:test_cases:writeRequiseCréer un cas de test à partir d’étapes explicites. Les valeurs de saisie sont literal, agent (choisie par l’Agent à l’exécution) ou environment (valeur d’exécution nommée d’un environnement) ; les littéraux ayant la forme d’un identifiant sont refusés sauf s’ils sont explicitement déplacés vers un secret d’environnement.
test_case.update_stepsautonomy:test_cases:writeRequiseRemplacer toute la liste d’étapes d’un cas de test. Exige confirm: true ; sans cela, la réponse décrit ce qui changerait et rien n’est écrit.

Plans de test

OpérationPortéeIdempotenceObjectif
test_plan.listautonomy:readAucuneLister les plans de test de l’organisation, c’est-à-dire des sélections nommées de cas de test.
test_plan.getautonomy:readAucuneRécupérer un plan de test avec ses cas de test membres ordonnés.
test_plan.createautonomy:test_plans:writeRequiseCréer un plan de test et, éventuellement, ses premiers cas de test membres ordonnés.
test_plan.set_membersautonomy:test_plans:writeRequiseRemplacer la composition ordonnée d’un plan de test. Retirer des cas exige confirm: true ; sans cela, la réponse liste les cas qui seraient retirés et rien n’est écrit.

Exécutions

OpérationPortéeIdempotenceObjectif
run.triggerautonomy:runs:writeRequiseMettre des exécutions en file. Fournir exactement l’un de testCaseId ou testPlanId (un plan crée une exécution par cas membre). Cibler un environnement enregistré par slug ou fournir des cibles explicites pour un nouveau déploiement ou artefact. Renvoie immédiatement ; poursuivre avec run.get.
run.listautonomy:readAucuneLister les exécutions récentes, les plus récentes d’abord. Filtrer par statut, cas de test, environnement ou branche. Vérifier ici avant de déclencher un doublon.
run.getautonomy:readAucuneRécupérer l’état d’une exécution. Fournir le cursor précédent et waitMs (≤ 25000) pour bloquer jusqu’à un changement ; timedOut: true signifie que rien n’a changé et n’est pas une erreur. next est un conseil, jamais une autorité.
run.evidenceautonomy:readAucuneObtenir les preuves externes d’une exécution : ce que le produit a montré et ce qui était attendu à chaque étape, le verdict et le diagnostic, les actions neutralisées et les liens média de courte durée. Les détails de modèle, prompt, token et runner ne sont jamais inclus. Filtrer avec step.

Environnements

OpérationPortéeIdempotenceObjectif
environment.listautonomy:readAucuneLister les environnements, cibles de déploiement nommées, avec leurs cibles par plateforme. Les noms des valeurs d’exécution sont affichés, jamais les valeurs.
environment.getautonomy:readAucuneRécupérer un environnement par son slug.
environment.upsertautonomy:environments:writeRequiseCréer un environnement ou le mettre à jour par slug. La mise à jour d’un slug existant écrase les cibles données et exige confirm: true ; sans cela, la réponse décrit le changement et rien n’est écrit.

Notes

Les Notes sont réservées à HTTP et n’apparaissent pas dans le catalogue d’outils MCP.

OpérationPortéeIdempotenceObjectif
note.listautonomy:readAucuneLister les Notes d’un environnement, les plus récentes d’abord. Filtrer par statut.
note.createautonomy:notes:writeRequiseDéposer une Note sur un environnement. Le corps est en texte brut, chaque retour à la ligne démarrant un paragraphe. Citer les exécutions avec runIds.
note.commentautonomy:notes:writeRequiseAjouter un commentaire en texte brut à l’activité d’une Note.

Mutations idempotentes

Toute mutation marquée Requise doit inclure une chaîne idempotencyKey dans son corps JSON. Réutilisez la même clé pour réessayer la même mutation voulue ; utilisez une nouvelle clé pour une autre mutation. Les opérations de lecture n’utilisent pas de clé d’idempotence.

Créer un cas de test

Cette requête n’utilise que les champs acceptés par test_case.create. Les objets valueSpec distinguent une valeur littérale ordinaire d’une valeur d’environnement résolue à l’exécution.

test_case.createbash
curl --request POST "$AUTONOMY_API_BASE/api/v1/test_case.create" \
--header "Authorization: Bearer $AUTONOMY_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "idempotencyKey": "ci-test-case-checkout-smoke-v1",
  "name": "Checkout smoke",
  "description": "A customer can complete checkout.",
  "platforms": ["web"],
  "tags": ["checkout", "smoke"],
  "steps": [
    { "action": "navigate", "target": "/checkout" },
    {
      "action": "fill",
      "target": "Email",
      "valueSpec": { "kind": "literal", "text": "qa@example.com" }
    },
    {
      "action": "fill",
      "target": "Password",
      "valueSpec": { "kind": "environment", "variable": "LOGIN_PASSWORD" }
    },
    { "action": "click", "target": "Place order" }
  ]
}'

Définissez AUTONOMY_API_BASE avec NEXT_PUBLIC_CONVEX_SITE_URL et stockez la clé aut_ dans AUTONOMY_API_KEY.

Déclencher une exécution

Fournissez exactement l’un de testCaseId ou testPlanId. Cet exemple cible une prévisualisation web récente ; utilisez plutôt environmentSlug lorsque la cible est enregistrée.

run.triggerbash
curl --request POST "$AUTONOMY_API_BASE/api/v1/run.trigger" \
--header "Authorization: Bearer $AUTONOMY_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "idempotencyKey": "ci-run-pr-128-checkout-smoke-9f3a2c1",
  "testCaseId": "jh7exampletestcaseid",
  "platforms": ["web"],
  "targets": {
    "web": { "baseUrl": "https://preview-128.example.com" }
  },
  "branch": "feature/checkout-copy",
  "pr": "128",
  "deployment": { "commitSha": "9f3a2c1d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b" },
  "scope": "changed",
  "changedFiles": ["src/checkout/page.tsx"]
}'

La réponse contient runIds et, pour un plan de test, peut contenir planGroupRunId. Le déclenchement renvoie immédiatement ; suivez chaque identifiant avec run.get.

Confirmation avant remplacement

confirm: true n’est jamais requis pour une création ni pour run.trigger. Il l’est uniquement lorsqu’une opération remplacerait une configuration existante :

  • test_case.update_steps l’exige toujours, car toute la liste d’étapes est remplacée.
  • test_plan.set_members l’exige seulement si des cas seraient retirés.
  • environment.upsert l’exige lorsqu’un slug existant serait mis à jour avec les champs ou cibles fournis.

Sans confirmation, l’API renvoie INVALID_ARGUMENT avec details.confirmRequired: true et un aperçu details.wouldChange. Examinez-le avant de réessayer ; n’ajoutez pas confirm: true automatiquement.

Pagination par curseur

Chaque requête *.list accepte un limit et un cursor opaque facultatifs :

Codejson
1{2  "limit": 20,3  "cursor": "<nextCursor from the previous response>"4}

limit vaut 20 par défaut et doit être un entier de 1 à 100. Chaque réponse a la forme { items, nextCursor }. Transmettez nextCursor sans le modifier pour obtenir la page suivante ; null signifie qu’il n’y a plus de page. Les filtres restent dans le même corps et doivent rester inchangés entre les pages.

On this page