Accessibility Intelligence API Documentation

Check supplied HTML or one public page for images, headings, forms, links, language, keyboard signals, ARIA, and inline colour contrast. The result is not a WCAG conformance claim. Payment is the exact USDC price on Base with x402.

POSThttps://brainiac.software/api/v1/accessibility/html-accessibility-audit$0.05 USDC

Audit HTML accessibility

Run the static image, heading, form, link, language, keyboard, ARIA, and inline-contrast checks. The result is not a WCAG conformance claim.

Body

FieldRequiredNotes
urlNostring
htmlNostring

Request exampleJSON

{
  "html": "<html><body><img src=\"hero.png\"><h1>Welcome</h1><h3>Details</h3><form><input type=\"text\" name=\"email\" placeholder=\"Email\"></form><a href=\"/next\">click here</a><div role=\"button\"></div><p style=\"color:#ffffff;background-color:#ffffff\">White</p></body></html>"
}

Response exampleJSON

{
  "checkedAt": "2026-11-02T19:00:00.000Z",
  "wcagCompliance": false,
  "status": "checked",
  "source": "html",
  "url": "",
  "warnings": [],
  "counts": {
    "confirmed": 6,
    "potential": 1,
    "manual": 8
  },
  "issues": [
    {
      "kind": "confirmed",
      "code": "alt_missing",
      "element": "img[src=\"hero.png\"]",
      "explanation": "This element has no alt attribute.",
      "remediation": "Add an alt attribute. Use an empty alt only when the image is decorative."
    },
    {
      "kind": "manual",
      "code": "css_images_not_checked",
      "element": "document",
      "explanation": "Images painted by CSS backgrounds were not checked.",
      "remediation": "Check CSS background images in a browser when they convey information."
    },
    {
      "kind": "confirmed",
      "code": "heading_level_skipped",
      "element": "h3",
      "explanation": "This h3 follows h1, so a heading level was skipped.",
      "remediation": "Use the next heading level, or change the heading that came before it."
    },
    {
      "kind": "manual",
      "code": "visual_headings_not_checked",
      "element": "document",
      "explanation": "Text that only looks like a heading was not checked.",
      "remediation": "Use a heading element when text is a heading."
    },
    {
      "kind": "confirmed",
      "code": "control_unlabelled",
      "element": "input[name=\"email\"]",
      "explanation": "This control has a placeholder and no label. A placeholder disappears while typing.",
      "remediation": "Add a label element, an aria-label, or an aria-labelledby reference that exists in the HTML."
    },
    {
      "kind": "manual",
      "code": "form_errors_not_checked",
      "element": "document",
      "explanation": "Error messages and custom widgets were not tested in a browser.",
      "remediation": "Confirm that errors are named and announced when the form is submitted."
    },
    {
      "kind": "potential",
      "code": "link_generic",
      "element": "a[href=\"/next\"]",
      "explanation": "The link text \"click here\" does not name its destination.",
      "remediation": "Use text that says where the link goes."
    },
    {
      "kind": "manual",
      "code": "link_context_not_checked",
      "element": "document",
      "explanation": "Link purpose was judged from the link text only, not from the surrounding sentence.",
      "remediation": "Review a generic link in its sentence when the text is repeated."
    },
    {
      "kind": "confirmed",
      "code": "language_missing",
      "element": "html",
      "explanation": "The page has no lang attribute on the html element.",
      "remediation": "Add a lang attribute, such as lang=\"en\", that matches the page language."
    },
    {
      "kind": "manual",
      "code": "language_not_compared",
      "element": "document",
      "explanation": "The page text was not checked for its human language.",
      "remediation": "Confirm that the lang value matches the language people read on the page."
    },
    {
      "kind": "manual",
      "code": "keyboard_not_operated",
      "element": "document",
      "explanation": "No key was pressed. Focus order and keyboard operation were not tested in a browser.",
      "remediation": "Tab through the page and confirm every action works without a pointer."
    },
    {
      "kind": "confirmed",
      "code": "aria_widget_unnamed",
      "element": "div",
      "explanation": "This button has no accessible name.",
      "remediation": "Add text, an aria-label, or an aria-labelledby reference that exists."
    },
    {
      "kind": "manual",
      "code": "aria_runtime_not_checked",
      "element": "document",
      "explanation": "ARIA states that scripts change were not tested in a browser.",
      "remediation": "Operate the widget and confirm the announced name and state."
    },
    {
      "kind": "confirmed",
      "code": "contrast_below_threshold",
      "element": "p",
      "explanation": "The contrast ratio is 1:1 from the colours on this element. It is below 3:1, the AA threshold used for large text.",
      "remediation": "Change one of the colours so normal text reaches 4.5:1 and large text reaches 3:1."
    },
    {
      "kind": "manual",
      "code": "stylesheet_contrast_not_checked",
      "element": "document",
      "explanation": "Stylesheet, inherited, and user-agent colours were not calculated.",
      "remediation": "Check those pairs in a browser. A passing inline pair does not make the page conform."
    }
  ],
  "limitations": [
    "This is a static HTML check. It is not a WCAG conformance claim.",
    "JavaScript is not run, so states that appear only after interaction are not seen.",
    "Contrast is calculated only when both colours are written on the same element.",
    "Checks marked manual need a browser or a person. They are not failures."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/accessibility/html-accessibility-audit" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "html": "<html><body><img src=\"hero.png\"><h1>Welcome</h1><h3>Details</h3><form><input type=\"text\" name=\"email\" placeholder=\"Email\"></form><a href=\"/next\">click here</a><div role=\"button\"></div><p style=\"color:#ffffff;background-color:#ffffff\">White</p></body></html>"
}
JSON
POSThttps://brainiac.software/api/v1/accessibility/image-alt-text-audit$0.03 USDC

Audit image alt text

Flag images, image inputs, and areas with no alt attribute. An empty alt is reported as a manual check, not as a confirmed failure.

Body

FieldRequiredNotes
urlNostring
htmlNostring

Request exampleJSON

{
  "html": "<html lang=\"en\"><body><img src=\"hero.png\"><img src=\"icon.png\" alt=\"\"><img alt=\"photo.jpg\" src=\"a.jpg\"></body></html>"
}

Response exampleJSON

{
  "checkedAt": "2026-11-02T19:00:00.000Z",
  "wcagCompliance": false,
  "status": "checked",
  "source": "html",
  "url": "",
  "warnings": [],
  "issues": [
    {
      "kind": "confirmed",
      "code": "alt_missing",
      "element": "img[src=\"hero.png\"]",
      "explanation": "This element has no alt attribute.",
      "remediation": "Add an alt attribute. Use an empty alt only when the image is decorative."
    },
    {
      "kind": "manual",
      "code": "alt_empty",
      "element": "img[src=\"icon.png\"]",
      "explanation": "The empty alt marks this image as decorative. That intent was not confirmed.",
      "remediation": "Keep the empty alt only when the image adds no information."
    },
    {
      "kind": "potential",
      "code": "alt_generic",
      "element": "img[src=\"a.jpg\"]",
      "explanation": "The alt text \"photo.jpg\" looks like a filename or a placeholder.",
      "remediation": "Replace it with the information the image conveys."
    },
    {
      "kind": "manual",
      "code": "css_images_not_checked",
      "element": "document",
      "explanation": "Images painted by CSS backgrounds were not checked.",
      "remediation": "Check CSS background images in a browser when they convey information."
    }
  ],
  "limitations": [
    "This is a static HTML check. It is not a WCAG conformance claim.",
    "JavaScript is not run, so states that appear only after interaction are not seen.",
    "Contrast is calculated only when both colours are written on the same element.",
    "Checks marked manual need a browser or a person. They are not failures."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/accessibility/image-alt-text-audit" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "html": "<html lang=\"en\"><body><img src=\"hero.png\"><img src=\"icon.png\" alt=\"\"><img alt=\"photo.jpg\" src=\"a.jpg\"></body></html>"
}
JSON
POSThttps://brainiac.software/api/v1/accessibility/heading-structure-audit$0.03 USDC

Audit heading structure

Read heading elements in source order and flag empty headings and skipped levels. A missing h1 is a potential issue, not a confirmed failure.

Body

FieldRequiredNotes
urlNostring
htmlNostring

Request exampleJSON

{
  "html": "<html lang=\"en\"><body><h1>Welcome</h1><h3>Details</h3><h2></h2></body></html>"
}

Response exampleJSON

{
  "checkedAt": "2026-11-02T19:00:00.000Z",
  "wcagCompliance": false,
  "status": "checked",
  "source": "html",
  "url": "",
  "warnings": [],
  "headings": [
    {
      "level": 1,
      "text": "Welcome",
      "element": "h1"
    },
    {
      "level": 3,
      "text": "Details",
      "element": "h3"
    },
    {
      "level": 2,
      "text": "",
      "element": "h2"
    }
  ],
  "issues": [
    {
      "kind": "confirmed",
      "code": "heading_level_skipped",
      "element": "h3",
      "explanation": "This h3 follows h1, so a heading level was skipped.",
      "remediation": "Use the next heading level, or change the heading that came before it."
    },
    {
      "kind": "confirmed",
      "code": "heading_empty",
      "element": "h2",
      "explanation": "This heading has no text.",
      "remediation": "Add the heading text, or remove the heading element."
    },
    {
      "kind": "manual",
      "code": "visual_headings_not_checked",
      "element": "document",
      "explanation": "Text that only looks like a heading was not checked.",
      "remediation": "Use a heading element when text is a heading."
    }
  ],
  "limitations": [
    "This is a static HTML check. It is not a WCAG conformance claim.",
    "JavaScript is not run, so states that appear only after interaction are not seen.",
    "Contrast is calculated only when both colours are written on the same element.",
    "Checks marked manual need a browser or a person. They are not failures."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/accessibility/heading-structure-audit" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "html": "<html lang=\"en\"><body><h1>Welcome</h1><h3>Details</h3><h2></h2></body></html>"
}
JSON
POSThttps://brainiac.software/api/v1/accessibility/form-accessibility-audit$0.04 USDC

Audit form accessibility

Check that controls have a label, an aria-label, or a matching label element. A placeholder or title is not treated as a sufficient name.

Body

FieldRequiredNotes
urlNostring
htmlNostring

Request exampleJSON

{
  "html": "<html lang=\"en\"><body><form><label for=\"missing\">Email</label><input type=\"text\" name=\"email\" placeholder=\"Email\"><button></button></form></body></html>"
}

Response exampleJSON

{
  "checkedAt": "2026-11-02T19:00:00.000Z",
  "wcagCompliance": false,
  "status": "checked",
  "source": "html",
  "url": "",
  "warnings": [],
  "issues": [
    {
      "kind": "confirmed",
      "code": "label_for_missing",
      "element": "label",
      "explanation": "The label for \"missing\" does not match an id in this HTML.",
      "remediation": "Point the label at the control id, or wrap the control in the label."
    },
    {
      "kind": "confirmed",
      "code": "control_unlabelled",
      "element": "input[name=\"email\"]",
      "explanation": "This control has a placeholder and no label. A placeholder disappears while typing.",
      "remediation": "Add a label element, an aria-label, or an aria-labelledby reference that exists in the HTML."
    },
    {
      "kind": "confirmed",
      "code": "button_unnamed",
      "element": "button",
      "explanation": "This button has no accessible name.",
      "remediation": "Add button text or an aria-label."
    },
    {
      "kind": "manual",
      "code": "form_errors_not_checked",
      "element": "document",
      "explanation": "Error messages and custom widgets were not tested in a browser.",
      "remediation": "Confirm that errors are named and announced when the form is submitted."
    }
  ],
  "limitations": [
    "This is a static HTML check. It is not a WCAG conformance claim.",
    "JavaScript is not run, so states that appear only after interaction are not seen.",
    "Contrast is calculated only when both colours are written on the same element.",
    "Checks marked manual need a browser or a person. They are not failures."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/accessibility/form-accessibility-audit" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "html": "<html lang=\"en\"><body><form><label for=\"missing\">Email</label><input type=\"text\" name=\"email\" placeholder=\"Email\"><button></button></form></body></html>"
}
JSON
POSThttps://brainiac.software/api/v1/accessibility/document-language-check$0.02 USDC

Check document language

Read the lang attribute on the html element. The page text is not compared with that value, and a fragment without html is not marked as a failure.

Body

FieldRequiredNotes
urlNostring
htmlNostring

Request exampleJSON

{
  "html": "<html><body><p>Hello</p></body></html>"
}

Response exampleJSON

{
  "checkedAt": "2026-11-02T19:00:00.000Z",
  "wcagCompliance": false,
  "status": "checked",
  "source": "html",
  "url": "",
  "warnings": [],
  "language": "",
  "languageStatus": "missing",
  "issues": [
    {
      "kind": "confirmed",
      "code": "language_missing",
      "element": "html",
      "explanation": "The page has no lang attribute on the html element.",
      "remediation": "Add a lang attribute, such as lang=\"en\", that matches the page language."
    },
    {
      "kind": "manual",
      "code": "language_not_compared",
      "element": "document",
      "explanation": "The page text was not checked for its human language.",
      "remediation": "Confirm that the lang value matches the language people read on the page."
    }
  ],
  "limitations": [
    "This is a static HTML check. It is not a WCAG conformance claim.",
    "JavaScript is not run, so states that appear only after interaction are not seen.",
    "Contrast is calculated only when both colours are written on the same element.",
    "Checks marked manual need a browser or a person. They are not failures."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/accessibility/document-language-check" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "html": "<html><body><p>Hello</p></body></html>"
}
JSON
POSThttps://brainiac.software/api/v1/accessibility/keyboard-accessibility-signals$0.04 USDC

Check keyboard signals

Flag a positive tabindex and an onclick on a non-control. Keys are not pressed, so keyboard operation stays a manual check.

Body

FieldRequiredNotes
urlNostring
htmlNostring

Request exampleJSON

{
  "html": "<html lang=\"en\"><body><div onclick=\"go()\"></div><button tabindex=\"2\">Save</button></body></html>"
}

Response exampleJSON

{
  "checkedAt": "2026-11-02T19:00:00.000Z",
  "wcagCompliance": false,
  "status": "checked",
  "source": "html",
  "url": "",
  "warnings": [],
  "issues": [
    {
      "kind": "confirmed",
      "code": "click_without_keyboard",
      "element": "div",
      "explanation": "This element has an onclick attribute and is not a keyboard control.",
      "remediation": "Use a button or link, or add a keyboard handler and a suitable role and tabindex."
    },
    {
      "kind": "confirmed",
      "code": "tabindex_positive",
      "element": "button",
      "explanation": "tabindex=\"2\" puts this element in a custom tab order.",
      "remediation": "Use tabindex=\"0\" or remove tabindex so the element stays in source order."
    },
    {
      "kind": "manual",
      "code": "keyboard_not_operated",
      "element": "document",
      "explanation": "No key was pressed. Focus order and keyboard operation were not tested in a browser.",
      "remediation": "Tab through the page and confirm every action works without a pointer."
    }
  ],
  "limitations": [
    "This is a static HTML check. It is not a WCAG conformance claim.",
    "JavaScript is not run, so states that appear only after interaction are not seen.",
    "Contrast is calculated only when both colours are written on the same element.",
    "Checks marked manual need a browser or a person. They are not failures."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/accessibility/keyboard-accessibility-signals" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "html": "<html lang=\"en\"><body><div onclick=\"go()\"></div><button tabindex=\"2\">Save</button></body></html>"
}
JSON
POSThttps://brainiac.software/api/v1/accessibility/aria-attribute-audit$0.04 USDC

Audit ARIA attributes

Check roles, boolean ARIA values, and references to ids that exist in this HTML. Runtime ARIA state changes are not tested.

Body

FieldRequiredNotes
urlNostring
htmlNostring

Request exampleJSON

{
  "html": "<html lang=\"en\"><body><div role=\"button\"></div><input aria-labelledby=\"missing\"></body></html>"
}

Response exampleJSON

{
  "checkedAt": "2026-11-02T19:00:00.000Z",
  "wcagCompliance": false,
  "status": "checked",
  "source": "html",
  "url": "",
  "warnings": [],
  "issues": [
    {
      "kind": "confirmed",
      "code": "aria_widget_unnamed",
      "element": "div",
      "explanation": "This button has no accessible name.",
      "remediation": "Add text, an aria-label, or an aria-labelledby reference that exists."
    },
    {
      "kind": "confirmed",
      "code": "aria_reference_missing",
      "element": "input",
      "explanation": "aria-labelledby points at missing, and that id is not in this HTML.",
      "remediation": "Add the referenced element or correct the id."
    },
    {
      "kind": "manual",
      "code": "aria_runtime_not_checked",
      "element": "document",
      "explanation": "ARIA states that scripts change were not tested in a browser.",
      "remediation": "Operate the widget and confirm the announced name and state."
    }
  ],
  "limitations": [
    "This is a static HTML check. It is not a WCAG conformance claim.",
    "JavaScript is not run, so states that appear only after interaction are not seen.",
    "Contrast is calculated only when both colours are written on the same element.",
    "Checks marked manual need a browser or a person. They are not failures."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/accessibility/aria-attribute-audit" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "html": "<html lang=\"en\"><body><div role=\"button\"></div><input aria-labelledby=\"missing\"></body></html>"
}
JSON
POSThttps://brainiac.software/api/v1/accessibility/color-contrast-check$0.04 USDC

Check inline colour contrast

Calculate a contrast ratio only when both colours are opaque values on the same element. A single colour is not compared with an assumed background.

Body

FieldRequiredNotes
urlNostring
htmlNostring

Request exampleJSON

{
  "html": "<html lang=\"en\"><body><p style=\"color:#ffffff;background-color:#ffffff\">White</p><p style=\"color:#767676\">Grey</p></body></html>"
}

Response exampleJSON

{
  "checkedAt": "2026-11-02T19:00:00.000Z",
  "wcagCompliance": false,
  "status": "checked",
  "source": "html",
  "url": "",
  "warnings": [],
  "issues": [
    {
      "kind": "confirmed",
      "code": "contrast_below_threshold",
      "element": "p",
      "explanation": "The contrast ratio is 1:1 from the colours on this element. It is below 3:1, the AA threshold used for large text.",
      "remediation": "Change one of the colours so normal text reaches 4.5:1 and large text reaches 3:1."
    },
    {
      "kind": "manual",
      "code": "contrast_incomplete",
      "element": "p",
      "explanation": "Only one of the foreground and background colours is written on this element. The other colour was not guessed.",
      "remediation": "Set both color and background-color on the element, or check the pair in a browser."
    },
    {
      "kind": "manual",
      "code": "stylesheet_contrast_not_checked",
      "element": "document",
      "explanation": "Stylesheet, inherited, and user-agent colours were not calculated.",
      "remediation": "Check those pairs in a browser. A passing inline pair does not make the page conform."
    }
  ],
  "limitations": [
    "This is a static HTML check. It is not a WCAG conformance claim.",
    "JavaScript is not run, so states that appear only after interaction are not seen.",
    "Contrast is calculated only when both colours are written on the same element.",
    "Checks marked manual need a browser or a person. They are not failures."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/accessibility/color-contrast-check" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "html": "<html lang=\"en\"><body><p style=\"color:#ffffff;background-color:#ffffff\">White</p><p style=\"color:#767676\">Grey</p></body></html>"
}
JSON
POSThttps://brainiac.software/api/v1/accessibility/accessibility-remediation-report$0.12 USDC

Report accessibility remediation

Combine the static checks and list confirmed issues before potential issues and manual checks. The report does not claim WCAG conformance.

Body

FieldRequiredNotes
urlNostring
htmlNostring

Request exampleJSON

{
  "html": "<html><body><img src=\"hero.png\"><h1>Welcome</h1><h3>Details</h3><form><input type=\"text\" name=\"email\" placeholder=\"Email\"></form><a href=\"/next\">click here</a><div role=\"button\"></div><p style=\"color:#ffffff;background-color:#ffffff\">White</p></body></html>"
}

Response exampleJSON

{
  "checkedAt": "2026-11-02T19:00:00.000Z",
  "wcagCompliance": false,
  "status": "checked",
  "source": "html",
  "url": "",
  "warnings": [],
  "summary": "Static HTML checks found 6 confirmed issues, 1 potential issues, and 8 checks that need a browser or a person. This is not a WCAG conformance claim.",
  "counts": {
    "confirmed": 6,
    "potential": 1,
    "manual": 8
  },
  "issues": [
    {
      "kind": "confirmed",
      "code": "alt_missing",
      "element": "img[src=\"hero.png\"]",
      "explanation": "This element has no alt attribute.",
      "remediation": "Add an alt attribute. Use an empty alt only when the image is decorative."
    },
    {
      "kind": "confirmed",
      "code": "heading_level_skipped",
      "element": "h3",
      "explanation": "This h3 follows h1, so a heading level was skipped.",
      "remediation": "Use the next heading level, or change the heading that came before it."
    },
    {
      "kind": "confirmed",
      "code": "control_unlabelled",
      "element": "input[name=\"email\"]",
      "explanation": "This control has a placeholder and no label. A placeholder disappears while typing.",
      "remediation": "Add a label element, an aria-label, or an aria-labelledby reference that exists in the HTML."
    },
    {
      "kind": "confirmed",
      "code": "language_missing",
      "element": "html",
      "explanation": "The page has no lang attribute on the html element.",
      "remediation": "Add a lang attribute, such as lang=\"en\", that matches the page language."
    },
    {
      "kind": "confirmed",
      "code": "aria_widget_unnamed",
      "element": "div",
      "explanation": "This button has no accessible name.",
      "remediation": "Add text, an aria-label, or an aria-labelledby reference that exists."
    },
    {
      "kind": "confirmed",
      "code": "contrast_below_threshold",
      "element": "p",
      "explanation": "The contrast ratio is 1:1 from the colours on this element. It is below 3:1, the AA threshold used for large text.",
      "remediation": "Change one of the colours so normal text reaches 4.5:1 and large text reaches 3:1."
    },
    {
      "kind": "potential",
      "code": "link_generic",
      "element": "a[href=\"/next\"]",
      "explanation": "The link text \"click here\" does not name its destination.",
      "remediation": "Use text that says where the link goes."
    },
    {
      "kind": "manual",
      "code": "css_images_not_checked",
      "element": "document",
      "explanation": "Images painted by CSS backgrounds were not checked.",
      "remediation": "Check CSS background images in a browser when they convey information."
    },
    {
      "kind": "manual",
      "code": "visual_headings_not_checked",
      "element": "document",
      "explanation": "Text that only looks like a heading was not checked.",
      "remediation": "Use a heading element when text is a heading."
    },
    {
      "kind": "manual",
      "code": "form_errors_not_checked",
      "element": "document",
      "explanation": "Error messages and custom widgets were not tested in a browser.",
      "remediation": "Confirm that errors are named and announced when the form is submitted."
    },
    {
      "kind": "manual",
      "code": "link_context_not_checked",
      "element": "document",
      "explanation": "Link purpose was judged from the link text only, not from the surrounding sentence.",
      "remediation": "Review a generic link in its sentence when the text is repeated."
    },
    {
      "kind": "manual",
      "code": "language_not_compared",
      "element": "document",
      "explanation": "The page text was not checked for its human language.",
      "remediation": "Confirm that the lang value matches the language people read on the page."
    },
    {
      "kind": "manual",
      "code": "keyboard_not_operated",
      "element": "document",
      "explanation": "No key was pressed. Focus order and keyboard operation were not tested in a browser.",
      "remediation": "Tab through the page and confirm every action works without a pointer."
    },
    {
      "kind": "manual",
      "code": "aria_runtime_not_checked",
      "element": "document",
      "explanation": "ARIA states that scripts change were not tested in a browser.",
      "remediation": "Operate the widget and confirm the announced name and state."
    },
    {
      "kind": "manual",
      "code": "stylesheet_contrast_not_checked",
      "element": "document",
      "explanation": "Stylesheet, inherited, and user-agent colours were not calculated.",
      "remediation": "Check those pairs in a browser. A passing inline pair does not make the page conform."
    }
  ],
  "limitations": [
    "This is a static HTML check. It is not a WCAG conformance claim.",
    "JavaScript is not run, so states that appear only after interaction are not seen.",
    "Contrast is calculated only when both colours are written on the same element.",
    "Checks marked manual need a browser or a person. They are not failures."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/accessibility/accessibility-remediation-report" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "html": "<html><body><img src=\"hero.png\"><h1>Welcome</h1><h3>Details</h3><form><input type=\"text\" name=\"email\" placeholder=\"Email\"></form><a href=\"/next\">click here</a><div role=\"button\"></div><p style=\"color:#ffffff;background-color:#ffffff\">White</p></body></html>"
}
JSON