How to Add Accessibility Scanning to Your CI/CD Pipeline in 5 Minutes

Every deploy is a chance to break accessibility. A new modal without focus management, a form without labels, an image without alt text - these slip through code review constantly.
Here's how to catch them automatically.
Prerequisites
- - A Lumi account (free tier works)
- - An API key (Settings > API Access > Generate Key)
- - A CI/CD pipeline (GitHub Actions, GitLab CI, or any system that can run curl)
Step 1: Generate an API key
In your Lumi dashboard, go to Settings > API Access and generate a new key. Add it as a secret in your CI environment (e.g. `LUMI_API_KEY` in GitHub Secrets).
Step 2: Add the scan step
# .github/workflows/accessibility.yml
name: Accessibility Check
on: [pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Scan for accessibility issues
run: |
RESULT=$(curl -s -X POST 'https://lumi.livana.io/api/v1/scans' \
-H 'Authorization: Bearer ${{ secrets.LUMI_API_KEY }}' \
-H 'Content-Type: application/json' \
-d '{"url":"${{ env.PREVIEW_URL }}","failBelow":80,"waitForResult":true}')
SCORE=$(echo $RESULT | jq '.score')
PASS=$(echo $RESULT | jq '.pass')
echo "Accessibility score: $SCORE"
if [ "$PASS" = "false" ]; then
echo "Score below threshold"
exit 1
fiStep 3: Configure the threshold
The `failBelow` parameter sets your minimum acceptable score. Start at 70 and raise it as you fix issues. The pipeline will fail if the score drops below this threshold.
What gets checked
Every scan runs five engines: axe-core, HTML_CodeSniffer, keyboard interaction tests, 53 Lumi custom checks, and AI visual analysis. Over 350 rules checked per scan, including WCAG 2.2 criteria.
Next steps
- - Set up the [GitHub Action](/compare) for nicer PR comments (coming soon)
- - Enable Slack notifications for scan results
- - Add webhook integration for custom workflows

