Developer API
ScanAble API Documentation
Integrate WCAG 2.2 accessibility scanning into your applications. Scan any URL and get a structured JSON response with compliance score, violations, severity breakdown, and fix suggestions.
Quick start
Get an API key
curl -X POST https://scanable.dev/api/v1/keys \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com"}'Scan a URL
curl -X POST https://scanable.dev/api/v1/scan \
-H "Authorization: Bearer sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'Get structured results
{
"url": "https://example.com",
"scannedAt": "2026-04-12T10:30:00Z",
"score": 72,
"level": "AA",
"summary": {
"totalViolations": 23,
"critical": 2,
"serious": 5,
"moderate": 12,
"minor": 4,
"passCount": 87
},
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"description": "Elements must have sufficient color contrast",
"wcagCriteria": ["wcag143"],
"count": 5,
"nodes": [
{
"html": "<p class=\"text-gray-400\">...",
"target": ["#hero > p:nth-child(2)"],
"failureSummary": "Fix: Element has contrast ratio of 3.2:1 (need 4.5:1)"
}
]
}
],
"passes": 87,
"scanDurationMs": 8234
}Code examples
Node.js / TypeScript
const response = await fetch("https://scanable.dev/api/v1/scan", {
method: "POST",
headers: {
"Authorization": "Bearer sk_live_your_key_here",
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "https://example.com" }),
});
const data = await response.json();
console.log(data.score); // 72Python
import requests
response = requests.post(
"https://scanable.dev/api/v1/scan",
headers={"Authorization": "Bearer sk_live_your_key_here"},
json={"url": "https://example.com"},
)
data = response.json()
print(f"Score: {data['score']}/100")Endpoints
/api/v1/keysGenerate a new API key
{ "email": "you@example.com", "name": "My App" }/api/v1/scanAuth requiredScan a URL for WCAG violations
{ "url": "https://example.com", "level": "AA" }/api/v1/usageAuth requiredGet current period usage stats
/api/v1/keysAuth requiredList your active API keys
/api/v1/keysAuth requiredRevoke an API key
{ "keyId": "clx..." }Authentication
All API requests (except key generation) require a Bearer token in the Authorization header:
Authorization: Bearer sk_live_abc123def456...Keys start with sk_live_. Store them securely — they are shown only once at creation.
Rate limits
Rate limits are enforced per API key on a monthly basis. The following headers are included in every response:
X-RateLimit-LimitMonthly scan quotaX-RateLimit-RemainingScans remaining this monthX-RateLimit-ResetUnix timestamp when the quota resetsWhen quota is exceeded, you'll receive a 429 Too Many Requests response.
API pricing
| Plan | Price | Scans | Per scan |
|---|---|---|---|
| Free | $0 | 100/mo | — |
| Starter | $19/mo | 1,000/mo | $0.019 |
| Growth | $49/mo | 5,000/mo | $0.0098 |
| Scale | $149/mo | 25,000/mo | $0.006 |
Error codes
401UNAUTHORIZEDMissing or invalid API key400INVALID_INPUTMalformed request body or invalid URL429QUOTA_EXCEEDEDMonthly scan limit reached502SCAN_FAILEDTarget URL unreachable or blocked scanning400KEY_LIMITMaximum 5 active keys per emailStart scanning for free
Get 100 free scans per month. No credit card required.
curl -X POST https://scanable.dev/api/v1/keys -H "Content-Type: application/json" -d '{"email":"you@example.com"}'