Free Accessibility API
Check any public URL for WCAG 2.1 AA violations — no API key required. Returns a JSON score and list of issues in seconds.
Overview
The Accessalyze public API scans any publicly accessible web page using our headless accessibility engine (axe-core) and returns a structured JSON report. No authentication or API key is required for the free tier.
Use it to integrate accessibility checks into CI/CD pipelines, browser extensions, dev tools, or any application that needs a quick compliance score.
Quick Start
# Scan a URL — no key required
curl "https://accessalyze.com/api/v1/scan?url=https://example.com"
Sample response:
{
"url": "https://example.com/",
"score": 74,
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"description": "Elements must have sufficient color contrast",
"count": 8
},
{
"id": "image-alt",
"impact": "critical",
"description": "Images must have alternate text",
"count": 3
}
],
"scannedAt": "2026-04-29T12:00:00.000Z"
}
Endpoints
Synchronous accessibility scan. Supply a URL, get JSON back with a score and violation list.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Full URL or bare domain to scan (e.g. example.com or https://example.com/page) |
Example
curl "https://accessalyze.com/api/v1/scan?url=https://example.com"
Async scan — returns a scanId immediately. Poll GET /api/v1/scan/:scanId until status is "done" for the full report. Useful for long-running scans or when you need to avoid timeout limits.
Request Body (JSON)
{ "url": "https://example.com" }
Example
# Start scan
SCAN=$(curl -s -X POST "https://accessalyze.com/api/v1/scan" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}')
SCAN_ID=$(echo $SCAN | grep -o '"scanId":"[^"]*"' | cut -d'"' -f4)
# Poll until done
curl "https://accessalyze.com/api/v1/scan/$SCAN_ID"
Poll for an async scan result. Returns the full report when status is "done".
Example
curl "https://accessalyze.com/api/v1/scan/550e8400-e29b-41d4-a716-446655440000"
Response Format
| Field | Type | Description |
|---|---|---|
url | string | The canonical URL that was scanned |
score | number | Accessibility score from 0–100 (higher is better) |
violations | array | List of accessibility issues found (top 10) |
violations[].id | string | axe-core rule identifier (e.g. color-contrast) |
violations[].impact | string | Severity: critical, serious, moderate, or minor |
violations[].description | string | Human-readable description of the violation |
violations[].count | number | Number of elements affected |
scannedAt | string | ISO 8601 timestamp of when the scan completed |
Rate Limits
| Endpoint | Limit | Window |
|---|---|---|
| GET /api/v1/scan | 10 requests | Per IP, per hour |
| POST /api/v1/scan | 100 requests | Per IP, per day |
CORS headers are included on all /api/v1/* responses so you can call the API directly from any browser or domain.
Need higher limits? Pro API starts at $99/mo — dedicated rate limits, usage dashboards, and priority support.
Examples
JavaScript (fetch)
// Works from any domain — CORS enabled
const res = await fetch(
'https://accessalyze.com/api/v1/scan?url=' + encodeURIComponent('https://example.com')
);
const { url, score, violations, scannedAt } = await res.json();
console.log(`Score: ${score}/100, Violations: ${violations.length}`);
Python
import urllib.request, json, urllib.parse
url = urllib.parse.quote('https://example.com', safe='')
with urllib.request.urlopen(f'https://accessalyze.com/api/v1/scan?url={url}') as r:
data = json.loads(r.read())
print(f"Score: {data['score']}/100")
for v in data['violations']:
print(f" [{v['impact']}] {v['id']}: {v['description']} ({v['count']} elements)")
cURL
curl "https://accessalyze.com/api/v1/scan?url=https://example.com"
GitHub Actions
- name: Check accessibility
run: |
RESULT=$(curl -sf "https://accessalyze.com/api/v1/scan?url=${{ vars.SITE_URL }}")
SCORE=$(echo $RESULT | grep -o '"score":[0-9]*' | cut -d: -f2)
echo "Accessibility score: $SCORE"
[ "$SCORE" -ge 90 ] || (echo "Score below 90 — failing build" && exit 1)
npm Package
A zero-dependency Node.js wrapper and CLI are available on npm:
npm install accessalyze
const { scan } = require('accessalyze');
scan('https://example.com').then(result => {
console.log(`Score: ${result.score}/100`);
result.violations.forEach(v =>
console.log(`[${v.impact}] ${v.id}: ${v.description} (${v.count} elements)`)
);
});
CLI usage:
npx accessalyze scan https://example.com
Need more? Pro API starts at $99/mo
Higher rate limits, dedicated API keys, usage dashboards, AI remediation guidance, and priority support.