Référence de l'API Sessions et Résultats
Récupérez les listes de sessions et les résultats d'accessibilité complets de manière programmatique en utilisant l'API REST
L'API Sessions et Résultats vous donne un accès programmatique à vos sessions du Axe Developer Hub et à leurs résultats d'accessibilité. Utilisez le point de terminaison des sessions pour découvrir des sessions pour un projet, puis utilisez le point de terminaison des résultats pour récupérer les résultats détaillés pour toute session spécifique.
Les deux points de terminaison nécessitent un ID de projet. Trouvez-le dans Axe Developer Hub, ou recherchez-le par nom de projet avec l'API Projets.
Authentification
Toutes les requêtes nécessitent une clé API. Fournissez-la en utilisant l'en-tête X-API-Key :
X-API-Key: <DEQUE_API_KEY>Trouvez votre clé API dans le Portail de compte Axe. Choisissez une clé API Axe Developer Hub pour les projets web ou CI/CD, ou une clé API Axe DevTools Mobile pour les projets mobiles.
Contrôle d'accès
Les règles d'accès suivantes s'appliquent aux deux points de terminaison :
- Les Membres du projet peuvent accéder aux sessions et aux résultats de tout projet auquel ils appartiennent.
- Les Administrateurs de l'organisation avec un abonnement actif à Axe Developer Hub ou Axe DevTools Mobile peuvent accéder aux sessions et aux résultats de tout projet de leur organisation, indépendamment de leur appartenance au projet. L'accès est limité au produit de la clé API : une clé API Axe Developer Hub renvoie uniquement des données d'Axe Developer Hub, et une clé API Axe DevTools Mobile ne renvoie que des données de Axe DevTools Mobile. Un administrateur d'organisation ne peut pas utiliser une clé API Axe DevTools Mobile pour récupérer des données Axe Developer Hub, ni une clé API Axe Developer Hub pour récupérer des données Axe DevTools Mobile.
- Les Utilisateurs non-membres, non-administrateurs recevront une réponse d'accès refusé.
- Un abonnement inactif renvoie
401 Unauthorized.
Point de terminaison des sessions
Renvoie une liste paginée et filtrable de sessions pour un projet donné.
Requête
- Point de terminaison :
GET https://axe.deque.com/api-pub/v1/results/projects/{project_id}/sessions - En-têtes (obligatoires) :
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Remplacez {project_id} par l'ID du projet dont vous souhaitez récupérer les sessions. Trouvez votre ID de projet dans Axe Developer Hub.
Paramètres de requête
Tous les paramètres de requête sont facultatifs.
| Paramètre | Description |
|---|---|
page_size |
Nombre de sessions à renvoyer par page. Valeur par défaut : 30. Maximum : 100. Les valeurs supérieures au maximum sont limitées à 100. |
after |
Valeur du curseur de la réponse précédente, utilisée pour récupérer la page suivante. Voir Pagination par curseur. |
created_after |
Renvoie uniquement les sessions créées après ce timestamp (ISO 8601 UTC, semi-ouvert ; exclut la limite exacte). Exemple : 2025-01-01T00:00:00Z |
created_before |
Renvoie uniquement les sessions créées avant ce timestamp (ISO 8601 UTC, semi-ouvert ; exclut la limite exacte). Exemple : 2026-01-01T00:00:00Z |
is_canonical_source |
Lorsque true, renvoie uniquement les sessions marquées comme source canonique. Doit être true ou false. |
git_branch |
Renvoie uniquement les sessions associées au nom de branche Git donné. Les sessions sans Git ne correspondront pas. |
commit_sha |
Renvoie uniquement les sessions associées au commit SHA du Git donné. Les sessions sans Git ne correspondront pas. |
git_url |
Renvoie uniquement les sessions associées à l'URL du dépôt Git donné. Les sessions sans Git ne correspondront pas. |
created_by_user_email |
Renvoie uniquement les sessions créées par l'utilisateur avec cette adresse e-mail. Voir Limitation du filtre par e-mail. |
Corps de la réponse
Une réponse réussie renvoie un objet JSON avec un tableau sessions. Chaque objet session contient les champs suivants :
| Champ | Type | Description |
|---|---|---|
session_id |
Chaîne de caractères | Identifiant unique pour la session. |
name |
Chaîne de caractères | Nom lisible pour la session, s'il a été défini. Omission si non défini ; aucun substitut synthétique n'est fourni. |
created_at |
Chaîne de caractères | Horodatage UTC ISO 8601 de la création de la session. |
is_canonical_source |
Booléen | Indique si cette session est marquée comme source canonique. |
git_branch |
Chaîne de caractères | Branche Git associée à la session. null pour les sessions sans git. |
git_url |
Chaîne de caractères | URL du dépôt Git associé à la session. null pour les sessions sans git. |
commit_sha |
Chaîne de caractères | SHA du commit Git associé à la session. null pour les sessions sans git. |
created_by_user_name |
Chaîne de caractères | Nom d'affichage de l'utilisateur ayant créé la session. Omis si la clé API de l'utilisateur a été supprimée. |
created_by_user_email |
Chaîne de caractères | Adresse e-mail de l'utilisateur ayant créé la session. Omis si la clé API de l'utilisateur a été supprimée. |
created_by_user_api_key_name |
Chaîne de caractères | Nom de la clé API utilisée pour créer la session. Renvoie "Unknown Member" si la clé API a été supprimée. |
Exemple de corps de réponse
{
"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"
}
]
}Pagination par curseur
Le point de terminaison Sessions utilise une pagination basée sur le curseur. Lorsqu'il y a plus de résultats au-delà de la page actuelle, une valeur de curseur opaque est renvoyée dans l'en-tête de réponse x-pagination-cursor. Passez cette valeur en tant que paramètre de requête after dans votre prochaine requête pour récupérer la page suivante.
Lorsque l'en-tête x-pagination-cursor est absent de la réponse, vous avez atteint la dernière page.
Limitation du filtre par e-mail
Le filtre created_by_user_email ne correspond qu'aux sessions créées après une date spécifique où la persistance côté serveur des e-mails des créateurs a été introduite. Les sessions créées avant cette date n'ont pas d'e-mail de créateur stocké et n'apparaîtront pas dans les résultats filtrés par e-mail. Au fur et à mesure que de nouvelles sessions s'accumulent, le filtre devient progressivement plus complet.
Réponses d'erreur du point de terminaison Sessions
| Statut | Cause |
|---|---|
400 Bad Request |
La valeur d'un paramètre de requête est invalide (par exemple, un horodatage ISO 8601 mal formé ou un page_size supérieur au maximum). |
401 Unauthorized |
La clé API est invalide, manquante ou l'abonnement associé est inactif. |
403 Forbidden |
La clé API n'a pas accès au projet spécifié. |
404 Not Found |
L'ID de projet spécifié n'existe pas. |
Point de terminaison des résultats
Renvoie les résultats d'accessibilité pour une session spécifique. Les résultats sont renvoyés de manière asynchrone : si les résultats ne sont pas prêts, le point de terminaison renvoie 204 No Content et vous devez interroger jusqu'à ce qu'ils le soient.
Requête
- Point de terminaison :
GET https://axe.deque.com/api-pub/v1/results/sessions/{session_id}/results - En-têtes (obligatoires) :
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Remplacez {session_id} par la valeur session_id renvoyée par le point de terminaison Sessions. Elle doit être un UUID valide.
Paramètres de requête
| Paramètre | Requis | Description |
|---|---|---|
format |
Non | Format de réponse. summary (par défaut) renvoie la même forme JSON que le point de terminaison legacy downloadable-report. full renvoie le JSON universel (Format d'exportation commun) complet. |
État de la session et le schéma d'interrogation
Lorsque les résultats d'une session n'ont pas encore été traités, le point de terminaison des résultats déclenche automatiquement le traitement et répond avec 204 No Content (aucun corps de réponse). Votre client doit interroger le même point de terminaison jusqu'à ce qu'il reçoive une réponse 200 OK.
| État | Réponse HTTP | Que faire |
|---|---|---|
done |
200 OK avec les résultats du contenu |
Les résultats sont prêts. Consommez le corps de la réponse. |
processing |
204 No Content |
Les résultats sont encore en cours de génération. Attendez un peu et réessayez. |
error |
204 No Content |
Le traitement a rencontré une erreur. Vous pouvez réessayer la requête. |
Gestion de 429 Too Many Requests
Pendant les périodes de forte demande, le point de terminaison des résultats peut répondre avec 429 Too Many Requests au lieu de déclencher immédiatement le traitement. Cela ne signifie pas que votre requête a été perdue : le travail sous-jacent reste en file d'attente, et réessayer ne crée pas de traitement en double pour la même session.
Une réponse 429 inclut un en-tête Retry-After, en secondes. Attendez au moins aussi longtemps avant de réessayer — l'exemple ci-dessous gère cela parallèlement au cas normal de 204 d'interrogation.
Corps de réponse
{
"error": "Too many requests. Retry after the Retry-After interval."
}Exemple : Interrogation des résultats
#!/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 1Formats de réponse
format=summary (par défaut)
Renvoie la même forme JSON que le point de terminaison legacy downloadable-report. Utilisez ce format si vous avez des outils existants basés sur le point de terminaison downloadable-report et que vous souhaitez un remplacement direct.
format=full
Renvoie les résultats complets au niveau des incidents en JSON universel (Format d'exportation commun). Ce format inclut chaque problème d'accessibilité trouvé lors de la session, y compris les détails au niveau de la page et de la règle.
La réponse est livrée avec Content-Encoding négociée à partir de l'en-tête Accept-Encoding du client.
Réponses d'erreur du point de terminaison des résultats
| Statut | Cause |
|---|---|
400 Bad Request |
La valeur du paramètre format n'est pas summary ou full, ou le session_id n'est pas un UUID valide. |
401 Unauthorized |
La clé API est invalide, manquante ou l'abonnement associé est inactif. |
403 Forbidden |
La clé API n'a pas accès au projet propriétaire de cette session. |
404 Not Found |
L'ID de session spécifié n'existe pas. |
429 Too Many Requests |
Le système est fortement sollicité. Voir Gestion des 429 Trop de demandes. |
Flux de travail courants
Récupérer toutes les sessions pour un projet et télécharger les résultats complets
Cet exemple utilise curl et jq pour naviguer dans toutes les sessions d'un projet et télécharger les résultats JSON universels complets pour chacune.
#!/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