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.

# Try it now: curl "https://accessalyze.com/api/v1/scan?url=https://example.com"

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

GET /api/v1/scan Free

Synchronous accessibility scan. Supply a URL, get JSON back with a score and violation list.

Query Parameters

ParameterTypeRequiredDescription
urlstringYesFull 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"
POST /api/v1/scan Free

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"
GET /api/v1/scan/:scanId Free

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

FieldTypeDescription
urlstringThe canonical URL that was scanned
scorenumberAccessibility score from 0–100 (higher is better)
violationsarrayList of accessibility issues found (top 10)
violations[].idstringaxe-core rule identifier (e.g. color-contrast)
violations[].impactstringSeverity: critical, serious, moderate, or minor
violations[].descriptionstringHuman-readable description of the violation
violations[].countnumberNumber of elements affected
scannedAtstringISO 8601 timestamp of when the scan completed

Rate Limits

EndpointLimitWindow
GET /api/v1/scan10 requestsPer IP, per hour
POST /api/v1/scan100 requestsPer 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

View on npm →

Need more? Pro API starts at $99/mo

Higher rate limits, dedicated API keys, usage dashboards, AI remediation guidance, and priority support.

View Pro Plans →