API-Referenz für Sitzungen und Ergebnisse
Rufen Sie Sitzungslisten und vollständige Barrierefreiheitsergebnisse programmatisch über die REST-API ab
Die API für Sitzungen und Ergebnisse gibt Ihnen programmatischen Zugriff auf Ihre Axe Developer Hub-Sitzungen und deren Barrierefreiheitsergebnisse. Verwenden Sie den Sitzungen-Endpunkt, um Sitzungen für ein Projekt zu entdecken, und nutzen Sie dann den Ergebnisse-Endpunkt, um die detaillierten Ergebnisse einer bestimmten Sitzung abzurufen.
Beide Endpunkte erfordern eine Projekt-ID. Finden Sie sie im Axe Developer Hub oder recherchieren Sie sie nach Projektname mit der Projects API.
Authentifizierung
Alle Anfragen erfordern einen API-Schlüssel. Stellen Sie ihn mit dem X-API-Key Header bereit:
X-API-Key: <DEQUE_API_KEY>Finden Sie Ihren API-Schlüssel im Axe Account Portal. Wählen Sie einen Axe Developer Hub API-Schlüssel für Web- oder CI/CD-Projekte oder einen Axe DevTools Mobile API-Schlüssel für mobile Projekte.
Zugangskontrolle
Die folgenden Zugriffsregeln gelten für beide Endpunkte:
- Projektmitglieder können auf Sitzungen und Ergebnisse für jedes Projekt zugreifen, dem sie angehören.
- Organisationsadministratoren mit einem aktiven Axe Developer Hub- oder Axe DevTools Mobile-Abonnement können auf Sitzungen und Ergebnisse für jedes Projekt in ihrer Organisation zugreifen, unabhängig von der Projektmitgliedschaft. Der Zugriff ist auf das Produkt des API-Schlüssels beschränkt: Ein API-Schlüssel vom Axe Developer Hub liefert nur Daten des Axe Developer Hubs, und ein API-Schlüssel von Axe DevTools Mobile liefert nur Daten von Axe DevTools Mobile. Ein Organisationsadministrator kann keinen Axe DevTools Mobile API-Schlüssel verwenden, um Axe Developer Hub-Daten abzurufen, oder umgekehrt.
- Nicht-Mitglieder, Nicht-Administratoren erhalten eine Antwort mit Zugriffsverweigerung.
- Ein inaktives Abonnement liefert
401 Unauthorized.
Sitzungen-Endpunkt
Gibt eine paginierte, filterbare Liste von Sitzungen für ein bestimmtes Projekt zurück.
Anfrage
- Endpunkt:
GET https://axe.deque.com/api-pub/v1/results/projects/{project_id}/sessions - Header (erforderlich):
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Ersetzen Sie {project_id} durch die ID des Projekts, dessen Sitzungen Sie abrufen möchten. Finden Sie Ihre Projekt-ID in Axe Developer Hub.
Abfrageparameter
Alle Abfrageparameter sind optional.
| Parameter | Beschreibung |
|---|---|
page_size |
Anzahl der Sitzungen, die pro Seite zurückgegeben werden sollen. Standard: 30. Maximum: 100. Werte über dem Maximum werden auf 100 gekürzt. |
after |
Cursor-Wert aus der vorherigen Antwort, um die nächste Seite abzurufen. Siehe Cursor-Paginierung. |
created_after |
Gibt nur Sitzungen zurück, die nach diesem Zeitstempel erstellt wurden (ISO 8601 UTC, halb-offen; schließt die genaue Grenze aus). Beispiel: 2025-01-01T00:00:00Z |
created_before |
Gibt nur Sitzungen zurück, die vor diesem Zeitstempel erstellt wurden (ISO 8601 UTC, halb-offen; schließt die genaue Grenze aus). Beispiel: 2026-01-01T00:00:00Z |
is_canonical_source |
Wenn true, werden nur Sitzungen zurückgegeben, die als kanonische Quelle markiert sind. Muss true oder false sein. |
git_branch |
Gibt nur Sitzungen zurück, die mit dem angegebenen Git-Branch-Namen verknüpft sind. Sitzungen ohne Git-Branch werden nicht übereinstimmen. |
commit_sha |
Gibt nur Sitzungen zurück, die mit dem angegebenen Git-Commit-SHA verknüpft sind. Sitzungen ohne Git-Commit werden nicht übereinstimmen. |
git_url |
Gibt nur Sitzungen zurück, die mit der angegebenen Git-Repository-URL verknüpft sind. Sitzungen ohne Git-Repository werden nicht übereinstimmen. |
created_by_user_email |
Gibt nur Sitzungen zurück, die von dem Benutzer mit dieser E-Mail-Adresse erstellt wurden. Siehe E-Mail-Filterbegrenzung. |
Antwortkörper
Eine erfolgreiche Antwort gibt ein JSON-Objekt mit einem sessions-Array zurück. Jedes Sitzungsobjekt enthält die folgenden Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
session_id |
String | Eindeutiger Bezeichner für die Sitzung. |
name |
String | Für Menschen lesbarer Name für die Sitzung, falls gesetzt. Wird ausgelassen, wenn nicht gesetzt; es wird kein synthetischer Ersatz angeboten. |
created_at |
String | ISO 8601 UTC-Zeitstempel für den Zeitpunkt, zu dem die Sitzung erstellt wurde. |
is_canonical_source |
Boolean | Ob diese Sitzung als kanonische Quelle markiert ist. |
git_branch |
String | Git-Branch, der mit der Sitzung verknüpft ist. null für gitlose Sitzungen. |
git_url |
String | URL des Git-Repositories, das mit der Sitzung verknüpft ist. null für gitlose Sitzungen. |
commit_sha |
String | Git-Commit-SHA, das mit der Sitzung verknüpft ist. null für gitlose Sitzungen. |
created_by_user_name |
String | Anzeigename des Benutzers, der die Sitzung erstellt hat. Weggelassen, wenn der API-Schlüssel des Benutzers gelöscht wurde. |
created_by_user_email |
String | E-Mail-Adresse des Benutzers, der die Sitzung erstellt hat. Weggelassen, wenn der API-Schlüssel des Benutzers gelöscht wurde. |
created_by_user_api_key_name |
String | Name des API-Schlüssels, der zur Erstellung der Sitzung verwendet wurde. Gibt "Unknown Member" zurück, wenn der API-Schlüssel gelöscht wurde. |
Beispielantwortkörper
{
"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"
}
]
}Cursor-Paginierung
Der Sessions-Endpunkt verwendet eine cursor-basierte Paginierung. Wenn es mehr Ergebnisse gibt als auf der aktuellen Seite angezeigt werden, wird ein intransparenter Cursorwert im x-pagination-cursor-Antwortheader zurückgegeben. Übergeben Sie diesen Wert als after-Abfrageparameter in Ihrer nächsten Anfrage, um die nächste Seite abzurufen.
Wenn der x-pagination-cursor-Header nicht in der Antwort enthalten ist, haben Sie die letzte Seite erreicht.
E-Mail-Filterbegrenzung
Der created_by_user_email-Filter stimmt nur mit Sitzungen überein, die nach einem bestimmten Datum erstellt wurden, an dem die serverseitige Speicherung von Erstellungsverantwortlichen-E-Mails eingeführt wurde. Sitzungen, die vor diesem Datum erstellt wurden, haben keine gespeicherte Erstellungsverantwortlichen-E-Mail und erscheinen nicht in nach E-Mails gefilterten Ergebnissen. Wenn mehr neue Sitzungen hinzukommen, wird der Filter schrittweise vollständiger.
Fehlerantworten des Sessions-Endpunkts
| Status | Grund |
|---|---|
400 Bad Request |
Ein Abfrageparameterwert ist ungültig (zum Beispiel ein fehlerhafter ISO 8601-Zeitstempel oder ein page_size über dem Maximum). |
401 Unauthorized |
Der API-Schlüssel ist ungültig, fehlt oder das zugehörige Abonnement ist inaktiv. |
403 Forbidden |
Der API-Schlüssel hat keinen Zugriff auf das angegebene Projekt. |
404 Not Found |
Die angegebene Projekt-ID existiert nicht. |
Ergebnisse-Endpunkt
Gibt die Barrierefreiheitsergebnisse für eine bestimmte Sitzung zurück. Die Ergebnisse werden asynchron zurückgegeben: Wenn die Ergebnisse noch nicht bereit sind, gibt der Endpunkt 204 No Content zurück und Sie müssen warten, bis sie bereit sind.
Anfrage
- Endpunkt:
GET https://axe.deque.com/api-pub/v1/results/sessions/{session_id}/results - Header (erforderlich):
X-API-Key: <DEQUE_API_KEY>Accept: application/json
Ersetzen Sie {session_id} durch den von dem Sessions-Endpunkt zurückgegebenen session_id-Wert. Es muss eine gültige UUID sein.
Abfrageparameter
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
format |
Nein | Antwortformat. summary (Standard) gibt dieselbe JSON-Struktur wie die legacy downloadable-report endpoint zurück. full gibt die vollständige Universelles JSON (gemeinsames Exportformat) zurück. |
Sitzungsstatus und das Polling-Muster
Wenn die Ergebnisse einer Sitzung noch nicht verarbeitet wurden, löst der Ergebnisse-Endpunkt die Verarbeitung automatisch aus und antwortet mit 204 No Content (kein Antwortkörper). Ihr Client muss den gleichen Endpunkt abfragen, bis eine 200 OK-Antwort erhalten wird.
| Status | HTTP-Antwort | Was zu tun ist |
|---|---|---|
done |
200 OK mit dem Ergebnispayload |
Ergebnisse sind bereit. Verarbeiten Sie den Antwortkörper. |
processing |
204 No Content |
Ergebnisse werden noch generiert. Warten Sie kurz und versuchen Sie es erneut. |
error |
204 No Content |
Bei der Verarbeitung trat ein Fehler auf. Sie können die Anfrage erneut senden. |
Umgang mit 429 Too Many Requests
Während Zeiten hoher Auslastung kann der Ergebnisse-Endpunkt mit 429 Too Many Requests antworten, anstatt die Verarbeitung sofort auszulösen. Dies bedeutet nicht, dass Ihre Anfrage verloren ging: Die zugrunde liegende Arbeit bleibt in der Warteschlange, und ein erneuter Versuch führt nicht zu einer doppelten Verarbeitung für die gleiche Sitzung.
Eine 429-Antwort enthält einen Retry-After-Header in Sekunden. Warten Sie mindestens so lange, bevor Sie es erneut versuchen — das untenstehende Beispiel behandelt dies zusammen mit dem normalen 204-Polling-Fall.
Antwortkörper
{
"error": "Too many requests. Retry after the Retry-After interval."
}Beispiel: Polling für Ergebnisse
#!/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 1Antwortformate
format=summary (Standard)
Gibt dieselbe JSON-Struktur wie die legacy downloadable-report endpoint zurück. Verwenden Sie dieses Format, wenn Sie bereits vorhandene Tools haben, die gegen den downloadable-report endpoint entwickelt wurden und Sie einen Ersatz benötigen.
format=full
Gibt die vollständigen ergebnisbezogenen Ergebnisse in Universelles JSON (gemeinsames Exportformat) zurück. Dieses Format enthält jedes während der Sitzung gefundene Barrierefreiheitsproblem, einschließlich Detailinformationen auf Seiten- und Regel-Ebene.
Die Antwort wird mit Content-Encoding ausgeliefert, das aus dem Accept-Encoding-Header des Clients ausgehandelt wurde.
Fehlerantworten des Ergebnisse-Endpunkts
| Status | Grund |
|---|---|
400 Bad Request |
Der format-Parameterwert ist weder summary noch full, oder die session_id ist keine gültige UUID. |
401 Unauthorized |
Der API-Schlüssel ist ungültig, fehlt oder das zugehörige Abonnement ist inaktiv. |
403 Forbidden |
Der API-Schlüssel hat keinen Zugriff auf das Projekt, dem diese Sitzung gehört. |
404 Not Found |
Die angegebene Sitzungs-ID existiert nicht. |
429 Too Many Requests |
Das System ist stark ausgelastet. Siehe Umgang mit 429 Zu viele Anfragen. |
Häufige Arbeitsabläufe
Alle Sitzungen für ein Projekt abrufen und vollständige Ergebnisse herunterladen
Dieses Beispiel verwendet curl und jq, um alle Sitzungen für ein Projekt durchzugehen und die vollständigen universalen JSON-Ergebnisse für jede herunterzuladen.
#!/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