ADAGuard API Documentation

Programmatic access to ADAGuard's web accessibility scanner. Base URL: https://api.adaguard.io/v1

Interactive Swagger UI · OpenAPI Spec (JSON) · Full Docs

Authentication

Include your API key in every request:

X-API-Key: your_api_key_here

API keys are available in your dashboard settings. API access requires the Professional plan or higher.

Endpoints

POST /v1/scan

Start a new accessibility scan

Returns immediately with a scan_id. The scan runs in the background. Poll GET /v1/scan/{scan_id}/status until status is 'completed' or 'failed'.

Required scopes: scans:write

Request Body

{
  "url": "https://example.com",
  "scan_mode": "single",
  "max_pages": 1,
  "min_score": 80,
  "auth_session_id": null,
  "viewport": "desktop",
  "exclude_paths": []
}

Response

{
  "scan_id": "abc-123",
  "status": "queued",
  "url": "https://example.com",
  "created_at": "2025-01-01T00:00:00Z",
  "poll_url": "/v1/scan/abc-123/status"
}
GET /v1/scan/{scan_id}/status

Poll scan progress

Call repeatedly until status is 'completed' or 'failed'. Use poll_again_in (seconds) as the suggested retry interval.

Required scopes: scans:read, scans:write

Response

{
  "scan_id": "abc-123",
  "status": "completed",
  "url": "https://example.com",
  "score": 87,
  "passed": true,
  "pages_scanned": 1,
  "max_pages": 1,
  "issues_critical": 2,
  "issues_warning": 5,
  "issues_info": 3,
  "auth_status": "not_requested",
  "error": null,
  "poll_again_in": null
}
GET /v1/scan/{scan_id}

Get full scan results including all issues

Returns the complete scan document with all accessibility issues, WCAG criteria, severity levels, element selectors, and remediation suggestions.

Required scopes: scans:read, scans:write

GET /v1/scan/{scan_id}/report

Download a scan report

Generates and downloads a report for a completed scan. The scan must be in 'completed' status.

Required scopes: scans:read, scans:write

Query Parameters

ParameterDefaultDescription
format json json=structured data for CI/CD, html=self-contained report, csv=QA spreadsheet, pdf=compliance document Values: json | html | csv | pdf
GET /v1/scans

List scans

Returns scan history sorted newest first.

Required scopes: scans:read, scans:write

Query Parameters

ParameterDefaultDescription
limit 10 Max results (1–100)
offset 0 Pagination offset
url Filter by URL prefix, e.g. https://example.com

Response

{
  "scans": [
    {
      "id": "abc-123",
      "url": "https://example.com",
      "timestamp": "2025-01-01T00:00:00Z",
      "score": 87,
      "status": "completed",
      "pages_scanned": 1,
      "issues_critical": 2,
      "issues_warning": 5,
      "issues_info": 3,
      "passed": true,
      "auth_status": "not_requested"
    }
  ],
  "total": 42,
  "limit": 10,
  "offset": 0,
  "has_more": true
}
GET /v1/scans/stats

Get usage statistics

Returns scan counts, monthly quota usage, and aggregate issue totals.

Required scopes: stats:read

Response

{
  "user_id": "usr_abc",
  "total_scans": 42,
  "completed_scans": 40,
  "scans_used": 12,
  "scans_limit": 30,
  "average_score": 84.5,
  "total_issues": {
    "critical": 18,
    "warning": 67,
    "info": 120
  }
}
GET /v1/auth-sessions

List authenticated sessions

Lists stored browser auth sessions. Sessions are created in the dashboard (Settings → Authenticated Scans). Use session_id as auth_session_id in POST /v1/scan.

Required scopes: scans:read, scans:write

Response

{
  "auth_sessions": [
    {
      "session_id": "sess_abc",
      "domain": "example.com",
      "url": "https://example.com/login",
      "status": "active",
      "created_at": "2025-01-01T00:00:00Z",
      "expires_at": "2025-02-01T00:00:00Z",
      "last_used": "2025-01-15T00:00:00Z"
    }
  ],
  "total": 1
}
DELETE /v1/scan/{scan_id}

Delete a scan

Permanently deletes a scan and all its stored data. This action cannot be undone.

Required scopes: scans:delete

Response

{
  "success": true,
  "message": "Scan deleted successfully",
  "scan_id": "abc-123"
}

Error Responses

All errors follow this shape:

{
  "error": "Human-readable summary",
  "details": [
    {
      "field": "url",
      "message": "Only http and https URLs are allowed"
    }
  ]
}
StatusMeaning
422Validation error — invalid request body
429Rate limit or monthly scan quota exceeded
404Scan or session not found
409Operation not valid for current scan state (e.g. report on incomplete scan)
500Internal server error

Plan Limits

TierPriceScans/MonthPages/ScanAPI AccessRate Limit
Free $0/mo 1 5 No
Starter $49/mo 4 50 No
Professional $129/mo 30 200 Yes 100 req/hr
Business $249/mo 150 1,000 Yes 500 req/hr

Scan quota resets on the 1st of each calendar month.

Links