---
title: "Analyze WCAG Accessibility"
method: GET
path: "/api/v1/wcag"
tags: ["Analysis"]
---

# Analyze WCAG Accessibility

`GET /api/v1/wcag`

## Request

- Base URL: `https://llmse.ai`
- URL: `https://llmse.ai/api/v1/wcag`
- Auth: one of:
  - none
  - HTTP bearer

Performs automated WCAG 2.1 Level A accessibility analysis with 15 static HTML checks covering images, forms, headings, page title, lang attribute, links, buttons, ARIA, duplicate IDs, skip navigation, tables, landmarks, viewport zoom, autoplay media, and tabindex. Returns score (0-100), A-F grade, categorized issues, metadata, and recommendations. Automated checks cover approximately 30-40% of WCAG 2.1 Level A criteria.

## Query parameters

- `url` string, uri, required

## Response `200`

WCAG accessibility analysis result

- WCAGResult: WCAG 2.1 Level A accessibility analysis. Automated static HTML checks cover approximately 30-40% of WCAG 2.1 Level A criteria. Grade thresholds: A>=90, B>=80, C>=70, D>=60, F<60.
  - `url` string
  - `cached` boolean
  - `score` integer, required: Accessibility score (0-100)
  - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required
  - `issues` CategorizedIssues, required: Issues grouped by severity level
    - `critical` Issue[], required
      - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
      - `message` string, required: Human-readable issue description
      - `impact` string, required: Impact level of the issue
    - `warnings` Issue[], required
      - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
      - `message` string, required: Human-readable issue description
      - `impact` string, required: Impact level of the issue
    - `info` Issue[], required
      - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
      - `message` string, required: Human-readable issue description
      - `impact` string, required: Impact level of the issue
  - `meta` object, required: Accessibility metadata
    - `images_total` integer
    - `images_missing_alt` integer
    - `inputs_total` integer
    - `inputs_missing_label` integer
    - `heading_count` integer
    - `heading_skips` integer
    - `has_page_title` boolean
    - `html_lang` string
    - `links_total` integer
    - `links_empty` integer
    - `buttons_total` integer
    - `buttons_empty` integer
    - `aria_role_elements` integer
    - `aria_missing_names` integer
    - `duplicate_ids` integer
    - `has_skip_nav` boolean
    - `tables_total` integer
    - `tables_missing_headers` integer
    - `has_landmarks` boolean
    - `landmarks` object
      - `main` boolean
      - `nav` boolean
      - `header` boolean
      - `footer` boolean
    - `viewport_blocks_zoom` boolean
    - `media_total` integer
    - `media_autoplay` integer
    - `positive_tabindex` integer
  - `recommendations` string[], required
  - `coverage_note` string, required: Disclaimer about automated coverage limitations

## Other responses

- `400`: Invalid request
- `429`: Rate limited

---

[API](https://skmtc.dev/llmse/apis/llmse-api.md) · [All operations](https://skmtc.dev/llmse/apis/llmse-api/llms.txt) · [OpenAPI document](https://skmtc.dev/llmse/apis/llmse-api/revisions/8aedf67208e4?raw)
