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.
https://brainiac.software/api/v1/accessibility/html-accessibility-audit$0.05 USDCAudit 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
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
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>"
}
JSONhttps://brainiac.software/api/v1/accessibility/image-alt-text-audit$0.03 USDCAudit 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
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
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>"
}
JSONhttps://brainiac.software/api/v1/accessibility/heading-structure-audit$0.03 USDCAudit 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
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
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>"
}
JSONhttps://brainiac.software/api/v1/accessibility/form-accessibility-audit$0.04 USDCAudit 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
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
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>"
}
JSONhttps://brainiac.software/api/v1/accessibility/link-accessibility-audit$0.03 USDCAudit link accessibility
Flag links with no accessible name. Generic text such as click here is a potential issue because the surrounding sentence was not judged.
Body
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
Request exampleJSON
{
"html": "<html lang=\"en\"><body><a href=\"/next\">click here</a><a href=\"/empty\"></a></body></html>"
}Response exampleJSON
{
"checkedAt": "2026-11-02T19:00:00.000Z",
"wcagCompliance": false,
"status": "checked",
"source": "html",
"url": "",
"warnings": [],
"issues": [
{
"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": "confirmed",
"code": "link_unnamed",
"element": "a[href=\"/empty\"]",
"explanation": "This link has no accessible name.",
"remediation": "Add link text, an image alt, or an aria-label."
},
{
"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."
}
],
"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/link-accessibility-audit" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"html": "<html lang=\"en\"><body><a href=\"/next\">click here</a><a href=\"/empty\"></a></body></html>"
}
JSONhttps://brainiac.software/api/v1/accessibility/document-language-check$0.02 USDCCheck 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
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
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>"
}
JSONhttps://brainiac.software/api/v1/accessibility/keyboard-accessibility-signals$0.04 USDCCheck 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
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
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>"
}
JSONhttps://brainiac.software/api/v1/accessibility/aria-attribute-audit$0.04 USDCAudit ARIA attributes
Check roles, boolean ARIA values, and references to ids that exist in this HTML. Runtime ARIA state changes are not tested.
Body
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
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>"
}
JSONhttps://brainiac.software/api/v1/accessibility/color-contrast-check$0.04 USDCCheck 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
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
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>"
}
JSONhttps://brainiac.software/api/v1/accessibility/accessibility-remediation-report$0.12 USDCReport accessibility remediation
Combine the static checks and list confirmed issues before potential issues and manual checks. The report does not claim WCAG conformance.
Body
| Field | Required | Notes |
|---|---|---|
url | No | string |
html | No | string |
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