Referencia de API de Proyectos

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard

Cree, recupere, actualice, elimine y gestione la membresía de sus proyectos del Axe Developer Hub programáticamente utilizando la API REST

Not for use with personal data

La API de Proyectos le permite gestionar proyectos y la membresía de Axe Developer Hub programáticamente, utilizando la misma clave API de Axe Account que ya usa para el resto de las API REST de Axe Developer Hub. No hay credenciales separadas para la gestión de proyectos. Para una introducción paso a paso, consulte Comience con la Automatización de Gestión de Proyectos.

Si solo necesita descubrir el ID de un proyecto a partir de su nombre para poder llamar a la API de Sesiones y Resultados, consulte Listar Proyectos a continuación. Si ya conoce su ID de proyecto, puede encontrarlo en Axe Developer Hub y llamar directamente a la API de Sesiones y Resultados.

Autenticación

Todas las solicitudes requieren una clave API. Proporciónela utilizando el encabezado X-API-Key:

X-API-Key: <DEQUE_API_KEY>

Encuentre su clave API en el Portal de Cuentas Axe. Elija una clave API de Axe Developer Hub para proyectos web o CI/CD. Elija una clave API de Axe DevTools Mobile para proyectos móviles.

Trate su clave API como un secreto: almacénela en una variable de entorno o en el almacén de secretos de su plataforma CI/CD en lugar de codificarla en sus solicitudes.

Control de Acceso y Permisos

  • Crear un proyecto requiere una suscripción activa (licencia) para el tipo de ese proyecto. Quien crea un proyecto se convierte automáticamente en su administrador de proyecto.
  • Roles de proyecto son administrador y miembro. Un administrador de proyectos puede actualizar o eliminar el proyecto y gestionar su membresía. Un miembro del proyecto puede acceder al proyecto pero no gestionarlo ni a su membresía.
  • Admins de Organización pueden ver y gestionar cada proyecto de los tipos con licencia de su organización, independientemente de su propia membresía de proyecto. No necesitan una licencia personal para ver, actualizar, eliminar o gestionar los miembros de un proyecto existente. Crear un proyecto es la única excepción: siempre requiere una licencia activa, ya sea que el solicitante sea un administrador de organización o no.
  • Agregar un miembro a un proyecto no requiere que ese miembro tenga una licencia. La API los registra como miembros del proyecto de inmediato, pero no pueden acceder al proyecto hasta que tengan una licencia. El usuario objetivo ya debe pertenecer a la organización. No puede agregar a alguien que no sea ya miembro de la organización.
  • Eliminar un proyecto es definitivo. No hay una opción de restauración automática para un proyecto eliminado.
  • En todos los casos, la respuesta está limitada al producto de la clave API. Una clave API de Axe Developer Hub devuelve y gestiona solo proyectos de Axe Developer Hub (web). Una clave API de Axe DevTools Mobile devuelve y gestiona solo proyectos de Axe DevTools Mobile.

Una suscripción inactiva devuelve 401 Unauthorized.

Valores de Configuración del Tipo de Proyecto

Cada proyecto tiene un selected_project_type, y cada tipo acepta solo un conjunto específico y fijo de valores test_language / test_platform:

selected_project_type Familia de productos Válido test_language Válido test_platform
axe-devtools-watcher Web javascript, typescript Cypress, Cypress Component, WebDriverJS, Playwright, Playwright Test, Puppeteer, WebdriverIO, WebdriverIO Testrunner
axe-devtools-watcher Web java Selenium WebDriver, Playwright
axe-devtools-html Web null (requerido) null (requerido)
axe-devtools-mobile Móvil null (requerido) Appium, Espresso, UI Automator, XCUITest

El selected_project_type de un proyecto se fija cuando se crea el proyecto. Para utilizar un tipo diferente, cree un nuevo proyecto.

Listar Proyectos

Devuelve la lista de proyectos a los que la clave API autenticada puede acceder.

Solicitud

  • Punto final: GET https://axe.deque.com/api-pub/v1/results/projects
  • Encabezados (requeridos):
    • X-API-Key: <DEQUE_API_KEY>
    • Accept: application/json

Parámetros de consulta

Todos los parámetros de consulta son opcionales.

Parámetro Descripción
project_types Lista separada por comas de tipos de proyectos a devolver, por ejemplo axe-devtools-watcher,axe-devtools-html. También acepta los alias web y mobile, que cada uno se expande a los tipos concretos para ese producto: web devuelve proyectos axe-devtools-watcher y axe-devtools-html, y mobile devuelve proyectos axe-devtools-mobile (proyectos de Axe DevTools Mobile SDK y Appium). Si omite este parámetro, la respuesta devuelve todos los tipos de proyectos a los que su clave API puede acceder.
member_only true o false. Predeterminado: false. Si eres administrador de la organización, true devuelve solo los proyectos de los que eres miembro en lugar de todos los proyectos de tu organización. Para otros usuarios, el parámetro no tiene efecto, porque la respuesta ya contiene solo los proyectos de los que son miembros.
page_size Número de proyectos a devolver por página. Predeterminado: 30. Máximo: 100. Los valores por encima del máximo se ajustan a 100. Vea Paginación por cursor.
after Valor del cursor de la respuesta anterior, usado para recuperar la siguiente página. Vea Paginación por cursor.

Cuerpo de la respuesta

Una respuesta exitosa devuelve un array JSON de objetos de proyecto. Cada objeto de proyecto incluye los siguientes campos:

Campo Tipo Descripción
project_id Cadena Identificador único para el proyecto. Cuando llame a esta API o al Punto final de sesiones, use este valor como {project_id}.
name Cadena El nombre de visualización del proyecto.
selected_project_type Cadena El tipo de proyecto, por ejemplo axe-devtools-watcher o axe-devtools-html. Vea Valores de Configuración del Tipo de Proyecto.
test_language Cadena El idioma de prueba del proyecto. Para tipos de proyectos que no usan un idioma de prueba, esto es null. Vea Valores de Configuración del Tipo de Proyecto.
test_platform Cadena La plataforma de prueba del proyecto. Para tipos de proyectos que no usan una plataforma de prueba, esto es null. Vea Valores de Configuración del Tipo de Proyecto. Lea test_language y test_platform antes de actualizar un proyecto: la actualización valida el par después de fusionar sus cambios con estos valores almacenados.
role Cadena Su rol en el proyecto: admin, o contributor para un miembro del proyecto. Si es un administrador de la organización que no es miembro del proyecto, esto es null.
user_id Cadena Su ID de usuario, cuando role está configurado. Si role es null, esto es null.
enterprise_id Cadena ID de la organización que posee el proyecto. Si el proyecto no pertenece a una organización, esto es null.
is_enterprise_project Booleano Si el proyecto pertenece a una organización, es decir, si enterprise_id está configurado.
created_at Cadena Marca de tiempo UTC ISO 8601 para el tiempo de creación del proyecto.
updated_at Cadena Marca de tiempo UTC ISO 8601 para la última actualización del proyecto. Si el proyecto nunca ha sido actualizado, esto es null.
run_by Cadena Nombre del usuario cuya clave API ejecutó la sesión más reciente del proyecto. Si el proyecto no tiene sesiones, o no se puede resolver el usuario (por ejemplo, se eliminó la clave API), esto es null.
last_session_created_at Cadena Marca de tiempo UTC ISO 8601 de la sesión más reciente del proyecto. Si el proyecto no tiene sesiones, esto es null.
has_git_information Booleano Si el proyecto tiene metadatos Git adjuntos.
git_url Cadena URL del repositorio Git asociado con el proyecto. Si el proyecto no tiene información de Git, esto es null.
latest_session Objeto Detalles de la sesión más reciente del proyecto, incluyendo su ID (id), tiempo de creación (created_at), y rama de Git (git_branch). Si el proyecto no tiene sesiones, esto es null. Este campo contiene solo una sesión. Para listar cada sesión, use el Punto final de sesiones en su lugar.

Las respuestas pueden incluir campos adicionales que no están listados aquí, y se pueden agregar nuevos campos con el tiempo. Ignore cualquier campo que no reconozca, y no dependa de campos no documentados.

Cuerpo de respuesta de ejemplo

[
  {
    "project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "webapp-ci",
    "selected_project_type": "axe-devtools-watcher",
    "test_language": "typescript",
    "test_platform": "Playwright",
    "role": "admin",
    "user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "enterprise_id": "3f2b8e1a-6c4d-4f7e-9a0b-1d2c3e4f5a6b",
    "is_enterprise_project": true,
    "created_at": "2026-06-01T14:23:00.000Z",
    "updated_at": "2026-06-10T16:45:00.000Z",
    "run_by": "Jane Developer",
    "last_session_created_at": "2026-06-14T09:12:00.000Z",
    "has_git_information": true,
    "git_url": "https://github.com/example/webapp",
    "latest_session": {
      "id": "0d4a85a2-9e6f-44ef-b814-fee8412abeb0",
      "created_at": "2026-06-14T09:12:00.000Z",
      "git_branch": "main"
    }
  },
  {
    "project_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef",
    "name": "design-system",
    "selected_project_type": "axe-devtools-html",
    "test_language": null,
    "test_platform": null,
    "role": "admin",
    "user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "enterprise_id": "3f2b8e1a-6c4d-4f7e-9a0b-1d2c3e4f5a6b",
    "is_enterprise_project": true,
    "created_at": "2026-05-20T08:00:00.000Z",
    "updated_at": null,
    "run_by": null,
    "last_session_created_at": null,
    "has_git_information": false,
    "git_url": null,
    "latest_session": null
  },
  {
    "project_id": "c4d5e6f7-a8b9-4c0d-9e1f-2a3b4c5d6e7f",
    "name": "ios-app-ci",
    "selected_project_type": "axe-devtools-mobile",
    "test_language": null,
    "test_platform": "XCUITest",
    "role": "admin",
    "user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "enterprise_id": "3f2b8e1a-6c4d-4f7e-9a0b-1d2c3e4f5a6b",
    "is_enterprise_project": true,
    "created_at": "2026-06-03T10:15:00.000Z",
    "updated_at": null,
    "run_by": "Jane Developer",
    "last_session_created_at": "2026-06-15T11:05:00.000Z",
    "has_git_information": false,
    "git_url": null,
    "latest_session": {
      "id": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
      "created_at": "2026-06-15T11:05:00.000Z",
      "git_branch": null
    }
  }
]

Para mantener el ejemplo corto, cada objeto de latest_session muestra solo tres de sus campos. La API devuelve más.

Paginación por cursor

La paginación es opcional. No envíe page_size ni after, y la respuesta devolverá su lista completa de proyectos en una sola respuesta, sin un encabezado de cursor.

Para paginar a través de los resultados, la API de Proyectos usa la misma paginación basada en cursores que la Punto final de sesiones. Cuando hay más resultados más allá de la página actual, la respuesta devuelve un valor de cursor opaco en el encabezado x-pagination-cursor. Pase este valor como el parámetro de consulta after en su próxima solicitud para recuperar la siguiente página.

Cuando la respuesta no tiene el encabezado x-pagination-cursor, está en la última página.

Buscar un ID de proyecto por nombre

Este ejemplo utiliza curl y jq para encontrar el ID de un proyecto a partir de su nombre:

curl -s \
  -H "Accept: application/json" \
  -H "X-API-Key: $API_KEY" \
  "https://axe.deque.com/api-pub/v1/results/projects" \
  | jq -r '.[] | select(.name == "webapp-ci") | .project_id'

Pase el ID devuelto al Punto final de sesiones para listar las sesiones de ese proyecto.

Listar respuestas de error de proyectos

Estado Causa
400 Bad Request El valor project_types contiene un tipo de proyecto no válido, el cursor after está mal formado, page_size/after se repitió en la cadena de consulta, o member_only no es true o false.
401 Unauthorized La clave API es inválida o falta, o la suscripción asociada está inactiva.

Recuperar un proyecto

Devuelve un solo proyecto por su ID, con el mismo formato que Listar Proyectos.

Solicitud

  • Punto final: GET https://axe.deque.com/api-pub/v1/results/projects/{project_id}
  • Encabezados (requeridos):
    • X-API-Key: <DEQUE_API_KEY>
    • Accept: application/json

Recuperar respuestas de error de proyecto

Estado Causa
400 Bad Request project_id no es un UUID válido.
401 Unauthorized La clave API es inválida o falta, o la suscripción asociada está inactiva.
403 Forbidden El proyecto existe pero está fuera de la organización o tipo de producto de su clave API, o no es miembro de él.
404 Not Found No existe ningún proyecto con ese ID, o el proyecto fue eliminado.

Crear un proyecto

important

Crear un proyecto requiere el conjunto completo de configuraciones., name, selected_project_type, test_language y test_platform son todos obligatorios. Un campo omitido se rechaza con un error 400.

Solicitud

  • Punto final: POST https://axe.deque.com/api-pub/v1/results/projects
  • Encabezados (requeridos):
    • X-API-Key: <DEQUE_API_KEY>
    • Content-Type: application/json
    • Accept: application/json

Cuerpo de la Solicitud

Campo Tipo Requerido Descripción
name Cadena Sí El nombre visible del proyecto. De 1 a 512 caracteres.
selected_project_type Cadena Sí El tipo del proyecto. Ver Valores de Configuración del Tipo de Proyecto.
test_language Cadena o null Sí Debe ser un valor válido para selected_project_type. Ver Valores de Configuración del Tipo de Proyecto.
test_platform Cadena o null Sí Debe ser un valor válido para selected_project_type y test_language. Ver Valores de Configuración del Tipo de Proyecto.

Ejemplo de Cuerpo de Solicitud

{
  "name": "webapp-ci",
  "selected_project_type": "axe-devtools-watcher",
  "test_language": "typescript",
  "test_platform": "Playwright"
}

Cuerpo de la respuesta

Devuelve el proyecto creado, con la misma estructura que Listar Proyectos. Quien crea un proyecto se convierte automáticamente en su administrador de proyecto, por lo que no se necesita una llamada de membresía por separado. Una creación exitosa devuelve 201 Created.

Crear un Proyecto Respuestas de Error

Estado Causa
400 Bad Request El cuerpo de la solicitud carece de un campo requerido, o selected_project_type no es un tipo de proyecto válido. También puede significar que test_language/test_platform no son una combinación válida para selected_project_type, o que name está vacío o excede los 512 caracteres.
401 Unauthorized La clave API es inválida o falta, o la suscripción asociada está inactiva.
403 Forbidden El producto de su clave de API no coincide con selected_project_type, o su suscripción no cubre este tipo de proyecto.

Actualizar un Proyecto

note

Un PATCH solo cambia los campos que envía. Aunque name, selected_project_type, test_language y test_platform son cada uno opcionales, la solicitud necesita al menos uno. Un campo omitido mantiene su valor almacenado. Después de la actualización, test_language y test_platform deben seguir siendo un par válido para el selected_project_type del proyecto, así que si solo envía uno de ellos, verifique primero el valor actual del otro.

Solicitud

  • Punto final: PATCH https://axe.deque.com/api-pub/v1/results/projects/{project_id}
  • Encabezados (requeridos):
    • X-API-Key: <DEQUE_API_KEY>
    • Content-Type: application/json
    • Accept: application/json

Cuerpo de la Solicitud

Campo Tipo Requerido Descripción
name Cadena No El nombre visible del proyecto. De 1 a 512 caracteres.
selected_project_type Cadena No El tipo del proyecto no puede cambiar después de la creación. Enviar el valor actual es aceptado, y cualquier otro valor devuelve un error 400.
test_language Cadena o null No Debe ser un valor válido para el selected_project_type del proyecto. Ver Valores de Configuración del Tipo de Proyecto.
test_platform Cadena o null No Debe ser un valor válido para el selected_project_type y test_language del proyecto. Ver Valores de Configuración del Tipo de Proyecto.

Ejemplo de Cuerpo de Solicitud

{
  "name": "webapp-ci-renamed"
}

Cuerpo de la respuesta

Devuelve el proyecto actualizado, con la misma estructura que Listar Proyectos. Una actualización exitosa devuelve 200 OK.

Actualizar un Proyecto Respuestas de Error

Estado Causa
400 Bad Request El cuerpo de la solicitud no tiene ninguno de los campos actualizables, o selected_project_type difiere del tipo actual del proyecto. También puede significar que test_language/test_platform no son válidos para el tipo de proyecto o que name está vacío o excede los 512 caracteres.
401 Unauthorized La clave API es inválida o falta, o la suscripción asociada está inactiva.
403 Forbidden El producto de su clave de API no coincide con el selected_project_type del proyecto, o su suscripción no cubre este tipo de proyecto. También cubre el caso en que usted no es administrador del proyecto.
404 Not Found No existe ningún proyecto con ese ID, o el proyecto fue eliminado.

Eliminar un Proyecto

important

Eliminar un proyecto es definitivo. No hay restauración autoservicio.

Solicitud

  • Punto final: DELETE https://axe.deque.com/api-pub/v1/results/projects/{project_id}
  • Encabezados (requeridos):
    • X-API-Key: <DEQUE_API_KEY>
    • Accept: application/json

Cuerpo de la respuesta

{ "deleted": true }

Eliminar un Proyecto Respuestas de Error

Estado Causa
400 Bad Request project_id no es un UUID válido.
401 Unauthorized La clave API es inválida o falta, o la suscripción asociada está inactiva.
403 Forbidden No eres administrador del proyecto ni administrador de la organización que posee el proyecto, o el tipo de proyecto está fuera de tu acceso.
404 Not Found No existe ningún proyecto con ese ID, o el proyecto ya fue eliminado.

Membresía del Proyecto

La membresía de un proyecto es un sub-recurso del proyecto. Un administrador de proyecto puede gestionar el proyecto y su membresía. Un miembro del proyecto (el rol de member en las operaciones de membresía a continuación) puede acceder al proyecto pero no gestionarlo. Las operaciones de membresía identifican a los usuarios por su dirección de correo electrónico. Agregar un miembro no requiere que posea una licencia. La API los registra inmediatamente, pero no pueden acceder al proyecto hasta que posean una licencia. El usuario objetivo debe pertenecer ya a su organización. No puedes agregar a alguien que no sea ya miembro de la organización.

Use las operaciones en lote a continuación siempre que sea posible. Las tres operaciones de escritura aceptan múltiples usuarios en una sola llamada. Esto reduce el número de solicitudes que necesita realizar. Si gestiona la membresía para una organización grande, aplique backoff y reintento cuando reciba una respuesta de 429. Consulte 429 Too Many Requests para el patrón general.

Listado de Miembros del Proyecto

  • Punto final: GET https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships
  • Encabezados (requeridos): X-API-Key: <DEQUE_API_KEY>, Accept: application/json

Cuerpo de la respuesta

{
  "members": [
    {
      "user_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "role": "admin",
      "email": "jane@example.com",
      "first_name": "Jane",
      "last_name": "Doe",
      "active_license": true,
      "created_at": "2026-06-01T14:23:00.000Z"
    }
  ]
}
Campo Tipo Descripción
user_id Cadena ID de usuario único del miembro.
role Cadena admin o member.
email, first_name, last_name Cadena o null La dirección de correo electrónico del miembro es el valor que usan las operaciones de agregar, cambiar rol y eliminar para identificarlos. Si el registro de la cuenta de Axe del miembro ya no existe, estos son null. La respuesta aún lista al miembro en lugar de eliminar la fila, por lo que una fila de membresía de administrador existente siempre muestra un administrador en el proyecto.
active_license Booleano Si el miembro actualmente posee una licencia activa para el tipo de producto de este proyecto.
created_at Cadena Marca de tiempo UTC ISO 8601 para el momento de creación de la membresía.

Agregar Miembros al Proyecto

  • Punto final: POST https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships
  • Encabezados (requeridos): X-API-Key: <DEQUE_API_KEY>, Content-Type: application/json, Accept: application/json

Cuerpo de la Solicitud

{
  "user_email_role_pairs": [
    { "user_email": "sam@example.com", "role": "member" },
    { "user_email": "alex@example.com", "role": "admin" }
  ]
}

user_email es la dirección de correo electrónico de la cuenta de Axe del usuario. La coincidencia ignora mayúsculas y minúsculas y espacios circundantes. role acepta admin o member (contributor también se acepta como sinónimo de member). Cada usuario puede aparecer solo una vez en una solicitud. Agregar un usuario que ya pertenece al proyecto no tiene efecto en esa entrada: no cambia su rol existente. Esta es una operación por lotes. Una entrada no válida rechaza toda la solicitud, y la API no escribe nada. El mensaje de error lista cada entrada que falló, para que pueda corregir un lote en un solo intento.

Una solicitud exitosa devuelve 201 Created con { "created": true }, haya o no agregado la solicitud nuevas membresías.

Cambiar Roles de Miembros

  • Punto final: PATCH https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships
  • Encabezados (requeridos): X-API-Key: <DEQUE_API_KEY>, Content-Type: application/json, Accept: application/json
  • Cuerpo de la solicitud: misma forma de user_email_role_pairs que Agregar Miembros al Proyecto

Cada user_email debe pertenecer a un miembro actual del proyecto. Un proyecto siempre debe conservar al menos un admin. La API rechaza una solicitud que deja al proyecto sin administrador. Un único miembro restante que sea el único administrador no puede cambiar su propio rol. Esto es una operación por lotes. Una entrada inválida rechaza toda la solicitud y la API no escribe nada.

Una solicitud exitosa devuelve 200 OK con { "ok": true }.

Eliminar Miembros del Proyecto

  • Punto final: DELETE https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships?user_emails={comma-separated,url-encoded,emails}
  • Encabezados (requeridos): X-API-Key: <DEQUE_API_KEY>, Accept: application/json

Pase las direcciones de correo electrónico de los usuarios a eliminar como una lista separada por comas en un único parámetro de consulta user_emails, y codifique el valor en URL. Por ejemplo, un literal + en una dirección que no está codificada llega como un espacio y se rechaza por estar malformada. No hay cuerpo de solicitud. Eliminar a un usuario que no es miembro tiene éxito y no elimina nada, por lo que una solicitud repetida no es un error. Un proyecto siempre debe conservar al menos un admin. La API rechaza una solicitud que elimina al último administrador del proyecto. Un único miembro restante que sea el único administrador no puede eliminarse a sí mismo.

Una solicitud exitosa devuelve 200 OK con las direcciones que eliminó y las que no coincidieron con ningún miembro, para que pueda distinguir un error tipográfico de una eliminación completada:

{
  "deleted": true,
  "removed": ["sam@example.com"],
  "unmatched": ["alx@example.com"]
}

Respuestas de Error de Membresía del Proyecto

Estado Causa
400 Bad Request project_id no es un UUID válido, user_email_role_pairs falta o está malformado, un user_email no es una dirección de correo electrónico válida, o el mismo usuario aparece más de una vez. También cubre un role que no es admin o member, o un valor user_emails que falta, se repite como parámetros separados o está malformado en la solicitud de eliminación. En la solicitud de adición, cubre una dirección de correo electrónico que no pertenece a su organización. En la solicitud de cambio de rol, cubre una dirección de correo electrónico que no pertenece a un miembro del proyecto. En cualquier solicitud de escritura, cubre una dirección de correo electrónico que coincide con más de un usuario; la API la rechaza en lugar de arriesgarse a realizar un cambio a la persona equivocada.
401 Unauthorized La clave API es inválida o falta, o la suscripción asociada está inactiva.
403 Forbidden No eres un administrador del proyecto o un administrador de la organización. También cubre un cambio que deja al proyecto sin administrador, o un único miembro restante intentando cambiar o eliminar su propia membresía.
404 Not Found No existe ningún proyecto con ese ID, o el proyecto fue eliminado.