Aller au contenu
A11ySignal

Documentation

L'API

Les mêmes points d'accès que ceux appelés par le tableau de bord. Récupérez les scores dans vos propres rapports, déclenchez une analyse depuis un hook de déploiement, ou faites échouer une build quand une mise en production casse quelque chose.

Disponible à partir de la formule Agency.

S'authentifier

Créez une clé dans les paramètres. Elle n'est affichée qu'une fois. Envoyez-la dans X-Api-Key à chaque requête.

curl https://api.a11ysignal.com/v1/sites \
  -H "X-Api-Key: a11y_xxxxxxxxxxxxxxxxxxxxxxxx"

Une clé est limitée à un espace de travail et y dispose des droits d'administration. La révoquer prend effet immédiatement.

Points d'accès

GET/v1/sitesTous les sites de l'espace de travail, avec leur dernier score et leur calendrier.liste
POST/v1/sitesAjouter un site. Le corps correspond au formulaire du tableau de bord.créer
POST/v1/sites/:id/scanMettre une analyse en file maintenant. Renvoie l'identifiant de l'analyse, ou celui de l'analyse en cours s'il y en a déjà une.déclencher
GET/v1/scansLes analyses de l'espace de travail, les plus récentes d'abord.  ?siteId= restreint la liste.historique
GET/v1/scans/:idScore, résultats page par page, règles en échec et écart avec l'analyse précédente.détail
GET/v1/scans/:id/issuesNon-conformités individuelles avec sélecteurs et balisage.  ?impact=critical&ruleId=color-contrastpaginé
GET/v1/organization/usageOù vous en êtes par rapport à votre formule.limites

Faire échouer une build sur une régression

Deux façons. La plus simple ne demande aucune clé d'API — exécutez l'analyseur directement en CI sur un déploiement de prévisualisation :

npx @a11ysignal/scan https://preview.example.com \
  --max-pages 25 --fail-on serious

L'autre déclenche une analyse hébergée après le déploiement et attend le verdict, pour que le résultat entre aussi dans l'historique de votre tableau de bord :

SCAN=$(curl -sX POST https://api.a11ysignal.com/v1/sites/$SITE_ID/scan \
  -H "X-Api-Key: $A11YSIGNAL_KEY" | jq -r .id)

# Interroger jusqu'à la fin, puis lire le verdict.
until [ "$(curl -s https://api.a11ysignal.com/v1/scans/$SCAN \
  -H "X-Api-Key: $A11YSIGNAL_KEY" | jq -r .status)" != "running" ]; do sleep 5; done

curl -s https://api.a11ysignal.com/v1/scans/$SCAN -H "X-Api-Key: $A11YSIGNAL_KEY" \
  | jq -e '.counts.critical == 0 and .counts.serious == 0'

Les formes que vous recevrez

Un détail d'analyse, réduit aux champs les plus utilisés :

{
  "id": "cm...",
  "status": "completed",
  "startUrl": "https://example.com/",
  "score": 87.4,
  "counts": { "critical": 0, "serious": 9, "moderate": 2, "minor": 0 },
  "pagesScanned": 24,
  "pagesFailed": 0,
  "axeVersion": "4.13.0",
  "diff": {
    "newIssues":   [{ "url": "…/checkout", "ruleId": "label", "impact": "critical", "count": 2 }],
    "fixedIssues": [{ "url": "…/",         "ruleId": "image-alt", "impact": "critical", "count": 5 }],
    "scoreDelta": -3.5
  },
  "ruleSummary": [
    { "ruleId": "color-contrast", "impact": "serious", "elements": 9, "pages": 4 }
  ]
}

score vaut null quand une exploration n'a lu aucune page — une URL de départ en 404, ou un robots.txt qui interdit tout. Traitez cela comme un échec, pas comme une réussite ; l'analyse elle-même est marquée failed avec un motif.

Limites et erreurs

429limite de débitPar clé. Les analyses à la demande sont en plus plafonnées par jour selon la formule.120/min
403formuleL'API demande Agency ou au-dessus ; le corps indique la fonction manquante.fonction
400validationLes échecs de validation du corps reviennent sous forme d'un dictionnaire champ → messages.fieldErrors
409conflitL'URL est déjà surveillée dans cet espace de travail.doublon