Riferimento API Sessioni e Risultati
Recupera elenchi di sessioni e risultati completi di accessibilità in modo programmato utilizzando l'API REST
L'API Sessioni e Risultati ti offre l'accesso programmato alle tue sessioni dell'Axe Developer Hub e ai loro risultati di accessibilità. Usa l'Endpoint delle Sessioni per scoprire le sessioni di un progetto, quindi usa l'Endpoint dei Risultati per recuperare i risultati dettagliati di una sessione specifica.
Entrambi gli endpoint richiedono un ID di progetto. Trovalo in Axe Developer Hub oppure cercalo per nome del progetto con la API Progetti.
Autenticazione
Tutte le richieste richiedono una chiave API. Forniscila utilizzando l'header X-API-Key:
X-API-Key: <DEQUE_API_KEY>Trova la tua chiave API nel Portale Account Axe. Scegli una chiave API Axe Developer Hub per progetti web o CI/CD, oppure una chiave API Axe DevTools Mobile per progetti mobili.
Controllo dell'accesso
Le seguenti regole di accesso si applicano ad entrambi gli endpoint:
- Membri del progetto possono accedere alle sessioni e ai risultati di qualsiasi progetto a cui appartengono.
- Amministratori dell'organizzazione con un abbonamento attivo a Axe Developer Hub o Axe DevTools Mobile possono accedere alle sessioni e ai risultati di qualsiasi progetto nella loro organizzazione, indipendentemente dall'appartenenza al progetto. L'accesso è limitato al prodotto della chiave API: una chiave API Axe Developer Hub restituisce solo dati Axe Developer Hub e una chiave API Axe DevTools Mobile restituisce solo dati Axe DevTools Mobile. Un amministratore dell'organizzazione non può utilizzare una chiave API Axe DevTools Mobile per recuperare dati Axe Developer Hub, né una chiave API Axe Developer Hub per recuperare dati Axe DevTools Mobile.
- Utenti non membri, non amministratori ricevono una risposta di accesso negato.
- Un abbonamento inattivo restituisce
401 Unauthorized.
Endpoint delle Sessioni
Restituisce un elenco di sessioni paginato e filtrabile per un determinato progetto.
Richiesta
- Endpoint:
GET https://axe.deque.com/api-pub/v1/results/projects/{project_id}/sessions - Intestazioni (richieste):
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Sostituisci {project_id} con l'ID del progetto di cui vuoi recuperare le sessioni. Trova il tuo ID di progetto in Axe Developer Hub.
Parametri di Query
Tutti i parametri di query sono opzionali.
| Parametro | Descrizione |
|---|---|
page_size |
Numero di sessioni da restituire per pagina. Predefinito: 30. Massimo: 100. I valori superiori al massimo vengono limitati a 100. |
after |
Valore cursore dalla risposta precedente, utilizzato per recuperare la pagina successiva. Vedi Paginazione con Cursore. |
created_after |
Restituisce solo sessioni create dopo questo timestamp (ISO 8601 UTC, semi-aperto; esclude il limite esatto). Esempio: 2025-01-01T00:00:00Z |
created_before |
Restituisce solo sessioni create prima di questo timestamp (ISO 8601 UTC, semi-aperto; esclude il limite esatto). Esempio: 2026-01-01T00:00:00Z |
is_canonical_source |
Quando true, restituisce solo sessioni contrassegnate come fonte canonica. Deve essere true o false. |
git_branch |
Restituisce solo sessioni associate al nome del ramo Git fornito. Le sessioni senza Git non corrisponderanno. |
commit_sha |
Restituisce solo sessioni associate al commit SHA Git fornito. Le sessioni senza Git non corrisponderanno. |
git_url |
Restituisce solo sessioni associate all'URL del repository Git fornito. Le sessioni senza Git non corrisponderanno. |
created_by_user_email |
Restituisce solo sessioni create dall'utente con questo indirizzo email. Vedi Limitazione Filtro Email. |
Corpo della Risposta
Una risposta di successo restituisce un oggetto JSON con un array sessions. Ogni oggetto sessione contiene i seguenti campi:
| Campo | Tipo | Descrizione |
|---|---|---|
session_id |
Stringa | Identificatore univoco per la sessione. |
name |
Stringa | Nome leggibile dall'uomo per la sessione, se impostato. Omissis se non impostato; non è fornito alcun surrogato sintetico. |
created_at |
Stringa | Timestamp UTC ISO 8601 per quando la sessione è stata creata. |
is_canonical_source |
Booleano | Se questa sessione è contrassegnata come fonte canonica. |
git_branch |
Stringa | Branch Git associato alla sessione. null per sessioni senza git. |
git_url |
Stringa | URL del repository Git associato alla sessione. null per sessioni senza git. |
commit_sha |
Stringa | SHA del commit Git associato alla sessione. null per sessioni senza git. |
created_by_user_name |
Stringa | Nome visualizzato dell'utente che ha creato la sessione. Omesso se la chiave API dell'utente è stata eliminata. |
created_by_user_email |
Stringa | Indirizzo email dell'utente che ha creato la sessione. Omesso se la chiave API dell'utente è stata eliminata. |
created_by_user_api_key_name |
Stringa | Nome della chiave API utilizzata per creare la sessione. Restituisce "Unknown Member" se la chiave API è stata eliminata. |
Esempio di corpo della risposta
{
"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"
}
]
}Paginazione con Cursore
L'endpoint delle sessioni utilizza la paginazione basata su cursore. Quando ci sono più risultati oltre alla pagina corrente, viene restituito un valore cursore opaco nell'intestazione della risposta x-pagination-cursor. Passa questo valore come parametro di query after nella tua prossima richiesta per recuperare la pagina successiva.
Quando l'intestazione x-pagination-cursor è assente dalla risposta, hai raggiunto l'ultima pagina.
Limitazione Filtro Email
Il filtro created_by_user_email corrisponde solo a sessioni create dopo una data specifica in cui è stata introdotta la persistenza lato server delle email dei creatori. Le sessioni create prima di quella data non hanno un'email del creatore memorizzata e non appariranno nei risultati filtrati per email. Mentre si accumulano più nuove sessioni, il filtro diventa progressivamente più completo.
Risposte di errore dell'endpoint delle sessioni
| Stato | Causa |
|---|---|
400 Bad Request |
Il valore di un parametro di query non è valido (ad esempio, un timestamp ISO 8601 malformato o un page_size sopra il massimo). |
401 Unauthorized |
La chiave API è non valida, mancante o l'abbonamento associato è inattivo. |
403 Forbidden |
La chiave API non ha accesso al progetto specificato. |
404 Not Found |
L'ID progetto specificato non esiste. |
Endpoint dei risultati
Restituisce i risultati di accessibilità per una sessione specifica. I risultati vengono restituiti in modo asincrono: se i risultati non sono ancora pronti, l'endpoint restituisce 204 No Content e si effettua un polling fino a quando non lo sono.
Richiesta
- Endpoint:
GET https://axe.deque.com/api-pub/v1/results/sessions/{session_id}/results - Intestazioni (richieste):
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Sostituisci {session_id} con il valore session_id restituito dall'endpoint delle sessioni. Deve essere un UUID valido.
Parametri di Query
| Parametro | Richiesto | Descrizione |
|---|---|---|
format |
No | Formato di risposta. summary (predefinito) restituisce la stessa struttura JSON di endpoint legacy per il rapporto scaricabile. full restituisce il completo JSON universale (Formato di Esportazione Comune). |
Stato della sessione e il modello di polling
Quando i risultati di una sessione non sono ancora stati elaborati, l'endpoint dei risultati attiva l'elaborazione automaticamente e risponde con 204 No Content (nessun corpo della risposta). Il tuo client deve effettuare il polling dello stesso endpoint fino a ricevere una risposta 200 OK.
| Stato | Risposta HTTP | Cosa fare |
|---|---|---|
done |
200 OK con il payload dei risultati |
I risultati sono pronti. Consuma il corpo della risposta. |
processing |
204 No Content |
I risultati sono ancora in fase di generazione. Attendi brevemente e riprova. |
error |
204 No Content |
Il processo ha incontrato un errore. Puoi riprovare la richiesta. |
Gestione di 429 Too Many Requests
Durante periodi di carico intenso, l'endpoint dei risultati potrebbe rispondere con 429 Too Many Requests invece di avviare immediatamente l'elaborazione. Questo non significa che la tua richiesta sia andata persa: il lavoro sottostante rimane in coda e riprovare non crea un'elaborazione duplicata per la stessa sessione.
Una risposta 429 include un'intestazione Retry-After, in secondi. Attendi almeno tanto tempo prima di riprovare — l'esempio sotto gestisce questo insieme al normale caso di polling 204.
Corpo della risposta
{
"error": "Too many requests. Retry after the Retry-After interval."
}Esempio: Polling per i risultati
#!/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 1Formati di risposta
format=summary (predefinito)
Restituisce la stessa struttura JSON di endpoint legacy per il rapporto scaricabile. Usa questo formato se hai strumenti esistenti costruiti per l'endpoint del rapporto scaricabile e desideri un rimpiazzo facile.
format=full
Restituisce i risultati completi a livello di problema in JSON universale (Formato di Esportazione Comune). Questo formato include ogni problema di accessibilità trovato durante la sessione, inclusi dettagli a livello di pagina e regola.
La risposta viene fornita con Content-Encoding negoziato dall'intestazione Accept-Encoding del client.
Risposte di errore dell'endpoint dei risultati
| Stato | Causa |
|---|---|
400 Bad Request |
Il valore del parametro format non è summary o full, o il session_id non è un UUID valido. |
401 Unauthorized |
La chiave API è non valida, mancante o l'abbonamento associato è inattivo. |
403 Forbidden |
La chiave API non ha accesso al progetto che possiede questa sessione. |
404 Not Found |
L'ID di sessione specificato non esiste. |
429 Too Many Requests |
Il sistema è sotto carico intenso. Vedi Gestione dell'errore 429 Troppe richieste. |
Flussi di lavoro comuni
Recupera tutte le sessioni per un progetto e scarica i risultati completi
Questo esempio utilizza curl e jq per scorrere tutte le sessioni di un progetto e scaricare i risultati completi in formato JSON universale per ciascuna.
#!/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