Skip to main content

API Documentation

Integrate Access Report Card accessibility testing into your applications.

Authentication

All API requests require authentication using a Bearer token. Include your API key in the Authorization header.

Authorization: Bearer YOUR_API_KEY

Endpoints

GET /api/v1/scans

List all scans for the authenticated user.

Query Parameters

Parameter Type Description
page integer Page number (default: 1)
per_page integer Items per page (default: 20)

Response

{
  "success": true,
  "data": [
    {
      "id": 1,
      "url": "https://example.com",
      "status": "completed",
      "score": 85,
      "grade": "B",
      "completed_at": "2026-02-09T12:00:00Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 5,
    "per_page": 20,
    "total": 100
  }
}
POST /api/v1/scans

Initiate a new accessibility scan.

Request Body

{
  "url": "https://example.com",
  "pages": 10  // optional, max 100
}

Response

{
  "success": true,
  "data": {
    "id": 123,
    "url": "https://example.com",
    "status": "pending",
    "status_url": "/api/v1/scans/123/status"
  }
}
GET /api/v1/scans/{id}

Get detailed scan results including all issues.

Response (Completed Scan)

{
  "success": true,
  "data": {
    "id": 123,
    "url": "https://example.com",
    "status": "completed",
    "score": 85,
    "grade": "B",
    "issues_found": 15,
    "errors_count": 3,
    "warnings_count": 8,
    "notices_count": 4,
    "pages_scanned": 5,
    "completed_at": "2026-02-09T12:30:00Z",
    "issues": [
      {
        "id": 1,
        "type": "error",
        "wcag_reference": "WCAG 1.1.1",
        "message": "Image missing alt text",
        "code": "ImgAltIsMissing",
        "impact": "critical",
        "recommendation": "Add descriptive alt attribute"
      }
    ]
  }
}
GET /api/v1/scans/{id}/status

Poll this endpoint to check scan progress.

Rate Limits

API requests are limited based on your subscription tier.

Plan Scans/Month Requests/Hour
Free 5 60
Pro ($29/mo) 50 300
Lifetime Unlimited 1,000

Error Responses

All errors return a JSON response with an error code.

401 Unauthorized

Invalid or missing API key.

403 Forbidden

Rate limit exceeded or plan upgrade required.

422 Unprocessable Entity

Invalid request parameters (e.g., invalid URL).

429 Too Many Requests

Rate limit exceeded. Retry after the specified time.

Code Examples

cURL

curl -X POST https://api.accessreportcard.com/v1/scans \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'

JavaScript (Node.js)

const response = await fetch('https://api.accessreportcard.com/v1/scans', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ url: 'https://example.com' })
});

const data = await response.json();
console.log(data);

Python

import requests

response = requests.post(
    'https://api.accessreportcard.com/v1/scans',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={'url': 'https://example.com'}
)

print(response.json())

Official SDKs

Official client libraries for popular languages.