Documentação

CLI & CI/CD

Detecte regressões de acessibilidade antes que cheguem à produção. Integre o Web para Todos ao seu pipeline com uma linha de configuração.

1. Obter chave de API

A API REST exige autenticação via header X-Api-Key. Gere sua chave na página de documentação da API.

bash
# Formato da chave
WPT_API_KEY=wpt_<sha256-hash>

# Verificar a chave
curl -X POST https://webparatodos.com.br/api/v1/analyze \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: $WPT_API_KEY" \
  -d '{"url":"https://example.com"}' | jq '.score.wcagLevel'

2. CLI — Node.js

O CLI wpt é um script Node.js sem dependências externas (usa apenas APIs nativas do Node 18+).

Instalação

bash
# Download direto
curl -O https://webparatodos.com.br/cli/wpt.mjs
chmod +x wpt.mjs

# Ou via npx (sem instalação)
npx wpt@latest <url>

Uso básico

bash
# Análise simples (usa WPT_API_KEY do ambiente)
node wpt.mjs https://meusite.gov.br

# Com nível mínimo AAA
node wpt.mjs https://meusite.gov.br --min-level AAA

# Saída JSON completa (para integração com outras ferramentas)
node wpt.mjs https://meusite.gov.br --json | jq '.score'

# Chave explícita
node wpt.mjs https://meusite.gov.br --key wpt_abc123

Exit codes

CódigoSignificado
0Site atingiu o nível mínimo exigido
1Site abaixo do nível mínimo exigido
2Erro de rede, API indisponível ou chave inválida

3. GitHub Actions

Adicione o workflow abaixo ao seu repositório em .github/workflows/accessibility.yml. A auditoria roda em cada PR que modifique HTML, CSS ou JS.

ℹ️Adicione o segredo WPT_API_KEY nas configurações do repositório em Settings → Secrets → Actions → New repository secret.
.github/workflows/accessibility.yml
name: Auditoria de Acessibilidade

on:
  pull_request:
    paths:
      - '**.html'
      - '**.tsx'
      - '**.jsx'
      - '**.css'

jobs:
  accessibility:
    name: WCAG 2.1 AA — Web para Todos
    runs-on: ubuntu-latest

    steps:
      - name: Checar código
        uses: actions/checkout@v4

      - name: Configurar Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Baixar CLI
        run: |
          curl -fsSL https://webparatodos.com.br/cli/wpt.mjs -o wpt.mjs
          chmod +x wpt.mjs

      - name: Analisar acessibilidade
        env:
          WPT_API_KEY: ${{ secrets.WPT_API_KEY }}
          SITE_URL: ${{ vars.SITE_URL || 'https://meusite.gov.br' }}
        run: node wpt.mjs "$SITE_URL" --min-level AA

4. GitLab CI

.gitlab-ci.yml (trecho)
accessibility:
  stage: test
  image: node:20-alpine
  script:
    - apk add --no-cache curl
    - curl -fsSL https://webparatodos.com.br/cli/wpt.mjs -o wpt.mjs
    - node wpt.mjs "$SITE_URL" --min-level AA
  variables:
    SITE_URL: https://meusite.gov.br
  only:
    - merge_requests

5. API REST direta (curl / qualquer linguagem)

Sem CLI, direto ao ponto:

bash
# Requisição
curl -s -X POST https://webparatodos.com.br/api/v1/analyze \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: $WPT_API_KEY" \
  -d '{"url":"https://meusite.gov.br"}' \
  | jq '{nivel: .score.wcagLevel, nota: .score.global}'

# Resposta
{
  "nivel": "AA",
  "nota": 87
}
python
import httpx, os, sys

r = httpx.post(
    "https://webparatodos.com.br/api/v1/analyze",
    headers={"X-Api-Key": os.environ["WPT_API_KEY"]},
    json={"url": "https://meusite.gov.br"},
    timeout=30,
)
data = r.json()
level = data["score"]["wcagLevel"]
print(f"Nível: {level}  Nota: {data['score']['global']}/100")
sys.exit(0 if level in ("AA", "AAA") else 1)

6. Estrutura da resposta

AnalysisResult (simplificado)
{
  "url": "https://meusite.gov.br",
  "analyzedAt": "2026-03-29T12:00:00.000Z",
  "score": {
    "global": 87,
    "wcagLevel": "AA",
    "wcagLevelLabel": "Conformidade AA",
    "breakdown": {
      "critical": 0,
      "serious": 1,
      "moderate": 3,
      "minor": 5
    },
    "levelBreakdown": {
      "A":   { "total": 30, "passed": 30 },
      "AA":  { "total": 20, "passed": 19 },
      "AAA": { "total": 28, "passed": 15 }
    }
  },
  "violations": [
    {
      "id": "color-contrast",
      "severity": "serious",
      "wcagCriteria": ["1.4.3"],
      "description": "Contraste insuficiente",
      "html": "<p class=\"text-gray-400\">...</p>",
      "howToFix": "Aumentar contraste para ≥ 4.5:1"
    }
  ],
  "passingChecks": [ /* critérios que passaram */ ]
}

Documentação completa da API

Todos os parâmetros, headers, rate limits e exemplos de resposta completa.

Ver referência da API