Referencia de la API de Sesiones y Resultados

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

Recupere listas de sesiones y resultados completos de accesibilidad de forma programada utilizando la API REST

Not for use with personal data

La API de Sesiones y Resultados le brinda acceso programático a sus sesiones del Axe Developer Hub y sus resultados de accesibilidad. Use el endpoint de Sesiones para descubrir sesiones de un proyecto, luego use el endpoint de Resultados para recuperar los resultados detallados de cualquier sesión específica.

Ambos endpoints requieren un ID de proyecto. Encuéntrelo en Axe Developer Hub, o búsquelo por nombre de proyecto con la API de Proyectos.

Autenticación

Todas las solicitudes requieren una clave API. Proporciónela usando 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 del Axe Developer Hub para proyectos web o CI/CD, o una clave API de Axe DevTools Mobile para proyectos móviles.

Control de Acceso

Las siguientes reglas de acceso se aplican a ambos endpoints:

  • Miembros del proyecto pueden acceder a sesiones y resultados de cualquier proyecto al que pertenezcan.
  • Administradores de la organización con una suscripción activa al Axe Developer Hub o Axe DevTools Mobile pueden acceder a sesiones y resultados de cualquier proyecto en su organización, independientemente de la pertenencia al proyecto. El acceso está limitado al producto de la clave API: una clave API del Axe Developer Hub devuelve solo datos del Axe Developer Hub, y una clave API de Axe DevTools Mobile devuelve solo datos de Axe DevTools Mobile. Un administrador de la organización no puede usar una clave API de Axe DevTools Mobile para recuperar datos del Axe Developer Hub, ni una clave API del Axe Developer Hub para recuperar datos de Axe DevTools Mobile.
  • Usuarios no miembros, no administradores reciben una respuesta de acceso denegado.
  • Una suscripción inactiva devuelve 401 Unauthorized.

Endpoint de Sesiones

Devuelve una lista paginada y filtrable de sesiones para un proyecto dado.

Solicitud

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

Reemplace {project_id} con el ID del proyecto cuyas sesiones desea recuperar. Encuentre su ID de proyecto en Axe Developer Hub.

Parámetros de Consulta

Todos los parámetros de consulta son opcionales.

Parámetro Descripción
page_size Número de sesiones a devolver por página. Por defecto: 30. Máximo: 100. Los valores por encima del máximo son limitados a 100.
after Valor del cursor de la respuesta anterior, utilizado para recuperar la página siguiente. Ver Paginación con Cursor.
created_after Devuelve solo sesiones creadas después de este sello de tiempo (ISO 8601 UTC, semiabierto; excluye el límite exacto). Ejemplo: 2025-01-01T00:00:00Z
created_before Devuelve solo sesiones creadas antes de este sello de tiempo (ISO 8601 UTC, semiabierto; excluye el límite exacto). Ejemplo: 2026-01-01T00:00:00Z
is_canonical_source Cuando true, devuelve solo sesiones marcadas como fuente canónica. Debe ser true o false.
git_branch Devuelve solo sesiones asociadas con el nombre de rama Git especificado. Las sesiones sin Git no coincidirán.
commit_sha Devuelve solo sesiones asociadas con el SHA de commit Git especificado. Las sesiones sin Git no coincidirán.
git_url Devuelve solo sesiones asociadas con la URL del repositorio Git especificada. Las sesiones sin Git no coincidirán.
created_by_user_email Devuelve solo sesiones creadas por el usuario con esta dirección de correo electrónico. Ver Limitación del Filtro de Correo Electrónico.

Cuerpo de la Respuesta

Una respuesta exitosa devuelve un objeto JSON con un arreglo sessions. Cada objeto de sesión contiene los siguientes campos:

Campo Tipo Descripción
session_id Cadena Identificador único para la sesión.
name Cadena Nombre legible por humanos para la sesión, si se estableció uno. Se omite cuando no está establecido; no se proporciona una alternativa sintética.
created_at Cadena Marca de tiempo UTC ISO 8601 para cuando se creó la sesión.
is_canonical_source Booleano Indica si esta sesión está marcada como fuente canónica.
git_branch Cadena Rama de Git asociada con la sesión. null para sesiones sin git.
git_url Cadena URL del repositorio de Git asociado con la sesión. null para sesiones sin git.
commit_sha Cadena SHA del commit de Git asociado con la sesión. null para sesiones sin git.
created_by_user_name Cadena Nombre para mostrar del usuario que creó la sesión. Se omite si la clave API del usuario ha sido eliminada.
created_by_user_email Cadena Dirección de correo electrónico del usuario que creó la sesión. Se omite si la clave API del usuario ha sido eliminada.
created_by_user_api_key_name Cadena Nombre de la clave API utilizada para crear la sesión. Devuelve "Unknown Member" si la clave API ha sido eliminada.

Cuerpo de respuesta de ejemplo

{
  "sessions": [
    {
      "session_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name": "Main CI run for PR 451",
      "created_at": "2026-06-01T14:23:00.000Z",
      "is_canonical_source": true,
      "git_branch": "feature/new-nav",
      "git_url": "https://github.com/example/webapp",
      "commit_sha": "9eabf5b536662000f79978c4d1b6e4eff5c8d785",
      "created_by_user_name": "Jane Smith",
      "created_by_user_email": "jane.smith@example.com",
      "created_by_user_api_key_name": "CI Pipeline Key"
    },
    {
      "session_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef",
      "created_at": "2026-05-30T09:00:00.000Z",
      "is_canonical_source": false,
      "git_branch": null,
      "git_url": null,
      "commit_sha": null,
      "created_by_user_api_key_name": "Unknown Member"
    }
  ]
}

Paginación con Cursor

El punto final de Sesiones utiliza paginación basada en cursores. Cuando hay más resultados más allá de la página actual, se devuelve un valor de cursor opaco en el encabezado de respuesta 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 el encabezado x-pagination-cursor está ausente de la respuesta, ha llegado a la última página.

Limitación del Filtro de Correo Electrónico

important

El filtro created_by_user_email solo coincide con sesiones creadas después de una fecha específica cuando se introdujo la persistencia del lado del servidor de los correos electrónicos del creador. Las sesiones creadas antes de esa fecha no tienen un correo electrónico del creador almacenado y no aparecerán en resultados filtrados por correo electrónico. A medida que se acumulan más sesiones nuevas, el filtro se vuelve progresivamente más completo.

Respuestas de Error del Punto Final de Sesiones

Estado Causa
400 Bad Request El valor de un parámetro de consulta es inválido (por ejemplo, una marca de tiempo ISO 8601 mal formada o un page_size por encima del máximo).
401 Unauthorized La clave API es inválida, falta o la suscripción asociada está inactiva.
403 Forbidden La clave API no tiene acceso al proyecto especificado.
404 Not Found El ID de proyecto especificado no existe.

Punto Final de Resultados

Devuelve los resultados de accesibilidad para una sesión específica. Los resultados se devuelven de manera asíncrona: si los resultados aún no están listos, el punto final devuelve 204 No Content y usted vuelve a consultar hasta que lo estén.

Solicitud

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

Reemplace {session_id} con el valor session_id devuelto por el punto final de Sesiones. Debe ser un UUID válido.

Parámetros de Consulta

Parámetro Requerido Descripción
format No Formato de respuesta. summary (predeterminado) devuelve la misma estructura JSON que punto final de legacy downloadable-report. full devuelve el JSON Universal (Formato de Exportación Común) completo.

Estado de la Sesión y el Patrón de Consulta Recurrente

Cuando los resultados de una sesión aún no han sido procesados, el punto final de Resultados inicia el procesamiento automáticamente y responde con 204 No Content (sin cuerpo de respuesta). Su cliente debe consultar el mismo punto final hasta que reciba una respuesta 200 OK.

Estado Respuesta HTTP Qué hacer
done 200 OK con la carga útil de resultados Los resultados están listos. Consuma el cuerpo de la respuesta.
processing 204 No Content Los resultados aún se están generando. Espere un momento y vuelva a intentar.
error 204 No Content El procesamiento encontró un error. Puede volver a intentar la solicitud.

Manejo de 429 Too Many Requests

Durante períodos de alta carga, el punto final de Resultados puede responder con 429 Too Many Requests en lugar de iniciar el procesamiento de inmediato. Esto no significa que su solicitud se haya perdido: el trabajo subyacente permanece en cola y volver a intentar no crea procesamiento duplicado para la misma sesión.

Una respuesta 429 incluye un encabezado Retry-After, en segundos. Espere al menos tanto tiempo antes de volver a intentar: el ejemplo a continuación maneja esto junto con el caso normal de encuesta 204.

Cuerpo de respuesta

{
  "error": "Too many requests. Retry after the Retry-After interval."
}

Ejemplo: Consulta Recurrente para Resultados

#!/bin/bash

SESSION_ID="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
URL="https://axe.deque.com/api-pub/v1/results/sessions/$SESSION_ID/results"
MAX_ATTEMPTS=20
DELAY=5
TEMP_FILE=$(mktemp)

for ((i=1; i<=MAX_ATTEMPTS; i++)); do
    echo "Attempt $i..."

    HEADERS_FILE=$(mktemp)
    STATUS=$(curl -s -w '%{http_code}' -L \
      -H "Accept: application/json" \
      -H "X-API-Key: $API_KEY" \
      -D "$HEADERS_FILE" \
      -o "$TEMP_FILE" \
      "$URL?format=full")

    case $STATUS in
        200)
            echo "Results ready!"
            cat "$TEMP_FILE"
            rm "$TEMP_FILE" "$HEADERS_FILE"
            exit 0
            ;;
        204)
            echo "Still processing, waiting ${DELAY}s..."
            sleep $DELAY
            ;;
        429)
            RETRY_AFTER=$(grep -i '^retry-after:' "$HEADERS_FILE" | tr -d '\r' | awk '{print $2}')
            RETRY_AFTER=${RETRY_AFTER:-$DELAY}
            echo "Too many requests, waiting ${RETRY_AFTER}s per Retry-After..."
            sleep "$RETRY_AFTER"
            ;;
        *)
            echo "Error: HTTP $STATUS"
            cat "$TEMP_FILE"
            rm "$TEMP_FILE" "$HEADERS_FILE"
            exit 1
            ;;
    esac
    rm -f "$HEADERS_FILE"
done

echo "Timeout after $MAX_ATTEMPTS attempts"
rm "$TEMP_FILE"
exit 1

Formatos de Respuesta

format=summary (predeterminado)

Devuelve la misma estructura JSON que punto final de legacy downloadable-report. Use este formato si tiene herramientas existentes construidas contra el punto final de downloadable-report y desea un reemplazo directo.

format=full

Devuelve los resultados completos a nivel de problema en JSON Universal (Formato de Exportación Común). Este formato incluye todos los problemas de accesibilidad encontrados durante la sesión, incluyendo detalles a nivel de página y de regla.

La respuesta se entrega con Content-Encoding negociado desde el encabezado Accept-Encoding del cliente.

Respuestas de Error del Punto Final de Resultados

Estado Causa
400 Bad Request El valor del parámetro format no es summary o full, o el session_id no es un UUID válido.
401 Unauthorized La clave API es inválida, falta o la suscripción asociada está inactiva.
403 Forbidden La clave API no tiene acceso al proyecto que posee esta sesión.
404 Not Found El ID de sesión especificado no existe.
429 Too Many Requests El sistema está bajo una carga pesada. Vea Manejo de 429 Demasiadas Solicitudes.

Flujos de Trabajo Comunes

Recuperar Todas las Sesiones para un Proyecto y Descargar Resultados Completos

Este ejemplo utiliza curl y jq para recorrer todas las sesiones de un proyecto y descargar los resultados completos en Universal JSON para cada una.

#!/bin/bash

# Set these environment variables before running:
# API_KEY: your Axe Developer Hub API key
# PROJECT_ID: your project ID

BASE_URL="https://axe.deque.com/api-pub/v1/results"
CURSOR=""

while true; do
    QUERY="page_size=100"
    if [ -n "$CURSOR" ]; then
        QUERY="$QUERY&after=$CURSOR"
    fi

    RESPONSE=$(curl -s -D - -H "Accept: application/json" -H "X-API-Key: $API_KEY" \
      "$BASE_URL/projects/$PROJECT_ID/sessions?$QUERY")

    NEXT_CURSOR=$(echo "$RESPONSE" | grep -i "x-pagination-cursor:" | tr -d '\r' | awk '{print $2}')
    BODY=$(echo "$RESPONSE" | sed -n '/^\r\{0,1\}$/,$p' | tail -n +2)

    SESSION_IDS=$(echo "$BODY" | jq -r '.sessions[].session_id')

    for SESSION_ID in $SESSION_IDS; do
        echo "Fetching results for session $SESSION_ID..."

        while true; do
            STATUS=$(curl -s -w '%{http_code}' -L \
              -H "Accept: application/json" \
              -H "X-API-Key: $API_KEY" \
              -o "${SESSION_ID}.json" \
              "$BASE_URL/sessions/$SESSION_ID/results?format=full")

            if [ "$STATUS" = "200" ]; then
                echo "Saved ${SESSION_ID}.json"
                break
            elif [ "$STATUS" = "204" ]; then
                echo "  Still processing, waiting..."
                sleep 5
            else
                echo "  Error: HTTP $STATUS"
                break
            fi
        done
    done

    if [ -z "$NEXT_CURSOR" ]; then
        break
    fi
    CURSOR="$NEXT_CURSOR"
done