Docs de Autonomy
API HTTP v1

Operaciones

Rutas, permisos, idempotencia y finalidad de las 23 operaciones de la API HTTP, con ejemplos de solicitud.

Llama a cada operación con POST /api/v1/<operation> y un cuerpo que sea un objeto JSON. El nombre de operación de las tablas es el sufijo exacto después de /api/v1/. En MCP, la misma operación es la herramienta autonomy_<operation> con los puntos sustituidos por guiones bajos.

En las tablas, Obligatoria significa que la solicitud debe incluir un idempotencyKey (consulta Mutaciones idempotentes).

Proyectos

OperaciónPermisoIdempotenciaPara qué sirve
project.listautonomy:readNingunaLista por nombre los proyectos a los que tienes acceso. Empieza por aquí para obtener el projectId que usan las demás operaciones.
project.getautonomy:readNingunaObtiene un proyecto por projectId, con su conocimiento del producto.

Casos de prueba

OperaciónPermisoIdempotenciaPara qué sirve
test_case.listautonomy:readNingunaLista los casos de prueba, del más reciente al más antiguo. Filtra por projectId, platform o una búsqueda por nombre (query). Consúltala antes de crear un caso para reutilizar la cobertura existente.
test_case.getautonomy:readNingunaObtiene un caso de prueba por testCaseId, con sus pasos y sus adjuntos. Nunca devuelve los valores secretos.
test_case.createautonomy:test_cases:writeObligatoriaCrea un caso de prueba en un proyecto a partir de pasos escritos como resultados esperados. Recibe projectId, name, platforms, steps y, de forma opcional, description y tags.
test_case.update_stepsautonomy:test_cases:writeObligatoriaSustituye la lista completa de pasos de un caso de prueba. Siempre necesita confirm: true.
test_case.archiveautonomy:test_cases:writeObligatoriaArchiva un caso de prueba: desaparece de las listas y no se puede ejecutar. Se conservan sus ejecuciones y sus resultados. Archivarlo otra vez no cambia nada.

Planes de pruebas

OperaciónPermisoIdempotenciaPara qué sirve
test_plan.listautonomy:readNingunaLista los planes de pruebas. Filtra por projectId o una búsqueda por nombre (query).
test_plan.getautonomy:readNingunaObtiene un plan de pruebas con sus casos de prueba en orden.
test_plan.createautonomy:test_plans:writeObligatoriaCrea un plan de pruebas en un proyecto, opcionalmente con sus primeros casos de prueba (testCaseIds, todos de ese proyecto).
test_plan.set_membersautonomy:test_plans:writeObligatoriaSustituye los casos de prueba de un plan de pruebas, en orden. Solo necesita confirm: true cuando se quitarían casos.

Ejecuciones

OperaciónPermisoIdempotenciaPara qué sirve
run.triggerautonomy:runs:writeObligatoriaPone ejecuciones en cola. Indica exactamente uno de testCaseId o testPlanId (un plan pone en cola una ejecución por caso de prueba). Apunta a un entorno guardado del mismo proyecto con environmentSlug, o pasa targets para un despliegue o una compilación nuevos. Responde al momento.
run.listautonomy:readNingunaLista las ejecuciones recientes, de la más nueva a la más antigua. Filtra por projectId, testCaseId, status, environmentSlug o branch. Consúltala antes de lanzar trabajo duplicado.
run.getautonomy:readNingunaObtiene el resultado de una ejecución, el resultado de cada paso y lo que creó la ejecución. Admite espera larga con cursor y waitMs.
run.step_actionsautonomy:readNingunaLista las Step Actions de la ejecución: todo lo que hizo el agente para alcanzar cada resultado esperado, incluido el Final check. Los valores que guardaste como secretos se enmascaran. Filtra con stepIndex.
run.evidenceautonomy:readNingunaObtiene la evidencia de cada paso que se ejecutó: el resultado esperado, el resultado, la explicación, el Final check y enlaces a medios de corta duración. Filtra con step.

Consulta Ejecuciones y evidencia para saber cómo seguir una ejecución y leer estos resultados.

Entornos

OperaciónPermisoIdempotenciaPara qué sirve
environment.listautonomy:readNingunaLista los entornos con sus objetivos de plataforma. Filtra por projectId. Se muestran los nombres de los valores, nunca los valores.
environment.getautonomy:readNingunaObtiene un entorno por environmentSlug.
environment.upsertautonomy:environments:writeObligatoriaCrea un entorno (para crearlo hace falta projectId) o actualiza uno por slug. Actualizar un entorno existente necesita confirm: true. Los runtimeValues se combinan por nombre y se usan como {{env.NAME}} en cualquier paso. Los valores secretos son de solo escritura.

Un objetivo web o de API necesita una url, y un objetivo Android, un artifactUrl para su compilación (los objetivos iOS no se pueden guardar hasta que las pruebas en iOS estén disponibles). packageName, bundleId y versionLabel son opcionales: si no los indicas, se leen de la compilación, y un valor que envíes tiene prioridad. Puedes guardar mientras la compilación todavía se está leyendo; si no se puede leer su ID de app, las ejecuciones en ese objetivo no pueden empezar.

Incidencias

OperaciónPermisoIdempotenciaPara qué sirve
issue.listautonomy:readNingunaLista las incidencias, de la más reciente a la más antigua. Filtra por projectId, environmentSlug, status, kind o runId para ver las incidencias que encontró o mostró una ejecución.
issue.createautonomy:issues:writeObligatoriaRegistra una incidencia en el entorno donde se detectó. kind es bug o risk. Recibe title, un body en texto plano, expected y actual opcionales, y runIds para citar ejecuciones.
issue.commentautonomy:issues:writeObligatoriaAñade un comentario en texto plano a una incidencia.
issue.set_statusautonomy:issues:writeObligatoriaCambia una incidencia a open, resolved o ignored. Resuélvela cuando una ejecución del mismo caso de prueba muestre la corrección.

Una incidencia nunca cambia el resultado de una ejecución ni de un paso. Las incidencias registradas antes de v0.5 pueden tener el tipo note; las nuevas son bug o risk. Consulta Incidencias.

Pasos como resultados esperados

Un caso de prueba es una lista de pasos. Cada paso es un resultado esperado en palabras sencillas, con adjuntos opcionales:

Un pasojson
1{2  "id": "sign-up",3  "text": "A new account exists for a fresh email address",4  "attachments": [5    {6      "id": "inbox",7      "kind": "inbox",8      "exact": false9    }10  ]11}
  • id: estable dentro del caso de prueba. Letras, dígitos, _ y -, hasta 64 caracteres.
  • text: el resultado esperado, hasta 2000 caracteres. Puede usar {{env.NAME}}.
  • attachments: hasta 12. Cada uno tiene su propio id, un kind y exact.
kindCamposQué le da al agente
accountroleUn inicio de sesión guardado del entorno de la ejecución, por rol, como "Grower".
inboxlabel?, address?Una bandeja de entrada nueva para la ejecución, o una address existente.
phonelabel?, number?Un número de teléfono que recibe SMS, o un number existente.
filelabel?, fileUn archivo que subir. Copia el objeto file de un caso de prueba que ya use ese archivo.
screenshotlabel?Una captura del resultado esperado, que se conserva como evidencia.
datalabel, value?, intent?, secret?Un valor que usar (value), o un intent para que el agente elija uno, como «Una contraseña segura».

Los adjuntos son datos de prueba salvo que exact sea true. Si el producto rechaza un valor de prueba solo porque ya está en uso, el agente usa otro valor nuevo del mismo tipo y lo indica. Un valor Exact se usa tal como está escrito, y si el producto lo rechaza, el paso se evalúa según ese rechazo. Un adjunto data, inbox o phone marcado como Exact necesita su valor, su dirección o su número.

address, number y value pueden ser {{env.NAME}}, que se rellena desde el entorno de la ejecución. Un adjunto data con secret: true es de solo escritura: su valor se guarda oculto y nunca se devuelve. Si test_case.update_steps vuelve a enviar un adjunto secreto sin su valor, se conserva el valor guardado.

La API acepta hasta 50 pasos por caso de prueba. El editor del panel muestra hasta 12, así que mantén cortos los casos que también editas en el panel. Consulta Creación de casos de prueba para escribir buenos resultados esperados.

Crear un caso de prueba

Este caso de prueba se registra con una bandeja de entrada nueva y una contraseña generada, elige un país que debe ser exactamente «Kenya», confirma la cuenta desde el correo de bienvenida y conserva una captura del perfil.

test_case.createbash
curl --request POST "https://api.autonomyqa.com/api/v1/test_case.create" \
--header "Authorization: Bearer $AUTONOMY_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "idempotencyKey": "ci-create-grower-sign-up-v1",
  "projectId": "jd7exampleprojectid",
  "name": "Grower sign-up",
  "description": "A new grower can sign up, confirm their email and see their profile.",
  "platforms": ["web"],
  "tags": ["sign-up", "smoke"],
  "steps": [
    {
      "id": "sign-up",
      "text": "A new grower account exists for a fresh email address, with Kenya as the country",
      "attachments": [
        { "id": "inbox", "kind": "inbox", "label": "Sign-up inbox", "exact": false },
        {
          "id": "password",
          "kind": "data",
          "label": "Password",
          "intent": "A strong password the sign-up form accepts",
          "exact": false
        },
        { "id": "country", "kind": "data", "label": "Country", "value": "Kenya", "exact": true }
      ]
    },
    {
      "id": "confirm-email",
      "text": "The account is confirmed with the link in the welcome email",
      "attachments": []
    },
    {
      "id": "profile",
      "text": "The profile page shows Kenya as the country",
      "attachments": [
        { "id": "profile-shot", "kind": "screenshot", "label": "Profile", "exact": false }
      ]
    }
  ]
}'

Guarda la clave aut_ en AUTONOMY_API_KEY. La respuesta es el nuevo caso de prueba, con su id.

Iniciar una ejecución

Indica exactamente uno de testCaseId o testPlanId, y environmentSlug o targets, pero no ambos. Este ejemplo apunta a una previsualización web nueva:

run.triggerbash
curl --request POST "https://api.autonomyqa.com/api/v1/run.trigger" \
--header "Authorization: Bearer $AUTONOMY_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "idempotencyKey": "ci-run-pr-128-grower-sign-up-9f3a2c1",
  "testCaseId": "jh7exampletestcaseid",
  "platforms": ["web"],
  "targets": {
    "web": { "baseUrl": "https://preview-128.example.com" }
  },
  "branch": "feature/sign-up-copy",
  "pr": "128",
  "deployment": { "commitSha": "9f3a2c1d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b" }
}'
ObjetivoCampos
webbaseUrl
apibaseUrl, runtimeValues opcional ([{ "name", "value", "isSecret" }])
androidpackageName, más artifactUrl o un storageId escaneado
iosPróximamente: las ejecuciones en iOS todavía no pueden empezar. bundleId, más artifactUrl o un storageId escaneado

platforms limita la ejecución a algunas de las plataformas del caso de prueba. branch, pr y deployment vinculan las ejecuciones a una rama, una pull request o un commit. En el plan Team y superiores, scope: "changed" con changedFiles centra la ejecución en los archivos modificados.

La respuesta contiene runIds, el environment usado y, para un plan de pruebas, planGroupRunId. Sigue cada ejecución con run.get.

run.trigger rechaza un caso de prueba importado que no se ha confirmado, un caso de prueba que todavía solo tiene pasos anteriores a v0.5 ("Rewrite them as outcome steps with test_case.update_steps, then run it.") y un plan de pruebas sin casos de prueba.

Mutaciones idempotentes

Cada mutación marcada como Obligatoria necesita una cadena idempotencyKey en su cuerpo JSON. Es un campo del cuerpo, no una cabecera. Sin ella, la API devuelve 400 INVALID_ARGUMENT con el mensaje "idempotencyKey is required for this operation."

  • Si reintentas con la misma clave y los mismos argumentos, recibes el resultado guardado en lugar de repetir el trabajo.
  • Si reutilizas una clave con argumentos distintos, recibes 409 CONFLICT: "idempotencyKey was already used with different arguments."
  • Los resultados se conservan 24 horas. Las claves son independientes para cada llamante.

Usa una clave por cada cambio que quieras hacer y reutilízala solo para reintentar ese cambio. Las operaciones de lectura no llevan clave.

Confirmación antes de sustituir

Las creaciones y run.trigger nunca necesitan confirmación. Tres operaciones necesitan confirm: true cuando sustituirían algo:

OperaciónCuándodetails.wouldChange
test_case.update_stepsSiempre: se sustituye toda la lista de pasos.stepCountBefore, stepCountAfter
test_plan.set_membersSolo cuando se quitarían casos de prueba.removed, added (cada uno [{ testCaseId, name }])
environment.upsertCuando el slug existe y se envían campos u objetivos.fields, platforms

Sin confirmación no se escribe nada. La API devuelve 400 INVALID_ARGUMENT con details.confirmRequired: true y la vista previa details.wouldChange. Lee la vista previa y vuelve a enviar la misma solicitud con confirm: true. No añadas confirm: true de forma automática. Consulta Errores para ver la respuesta completa.

Paginación por cursor

Todas las operaciones *.list, y también run.step_actions, aceptan un limit opcional y un cursor opaco:

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

limit vale 20 por defecto y debe ser un entero entre 1 y 100. Cada respuesta es { items, nextCursor }. Pasa nextCursor sin modificar para obtener la página siguiente; null significa que no hay más páginas. Mantén los mismos filtros en todas las páginas. Un null en el nivel superior, como "cursor": null, cuenta como no enviado.

run.list e issue.list aplican algunos filtros dentro de cada página, así que una página puede venir corta o vacía aunque queden más resultados. Sigue paginando mientras nextCursor tenga valor.

¿No lo encontraste?

On this page