Developers · Free beta

An accessibility API that never cries wolf, with fixes we have tested.

One call checks a page on desktop and phone against WCAG 2.2 AA. Every definite failure is confirmed by a second, independent check, and each suggested fix is tried on a copy of your page before we call it verified.

What you get back

Confirmed failures

'definite' means two different methods agree. Anything we could not confirm is kept apart as 'needs review', so your build never fails on a false alarm.

Proven Fix code

For each problem we write the change, apply it to a copy of the page and run the checks again. If the problem is gone and nothing new broke, you get 'verified_after_fix: true' and the exact code.

Built for CI and agents

JSON with WCAG criteria, impact, CSS selector and counts. Webhooks, idempotency keys, rate-limit headers, a PDF for clients, and an MCP tool for Claude and other agents.

Words a site owner understands

Score out of 100, a short summary, who fixes each item and how long it takes - ready to paste into a client email.

One request
curl -X POST https://api.tradingcheckup.com/v1/wcag/scans \
  -H "Authorization: Bearer $TC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.example.com/", "pages": 2}'
Example result (from a scan of our own demo test page; the address is shown as example.com)
{
  "id": "scan_c1b9a6b19b2680b9ea03",
  "object": "wcag_scan",
  "status": "done",
  "url": "https://www.example.com/",
  "score": 52,
  "counts": {
    "definite": 5,
    "needs_review": 0,
    "fix_verified": 5,
    "confirmed_by_second_check": 5
  },
  "owner_summary": [
    "We checked 2 page(s) on desktop and phone. Accessibility score 52/100.",
    "5 definite problem type(s), every one confirmed by a second, independent check; 5 serious.",
    "Fix first: Button has no name. Some customers cannot use this control at all (blind or keyboard-only users), so enquiries, bookings or sign-ups can be lost here.",
    "5 fix(es) were applied to a copy of the page and re-checked: the problem was gone and nothing new broke (Proven Fix)."
  ],
  "pages": [
    {
      "url": "https://www.example.com/",
      "status": "checked",
      "title": "Home - Fixture Plumbing",
      "note": null
    },
    {
      "url": "https://www.example.com/about.html",
      "status": "checked",
      "title": "About us - Fixture Plumbing",
      "note": null
    }
  ],
  "issues": [
    {
      "id": "iss_1",
      "page": "https://www.example.com/",
      "level": "definite",
      "kind": "button-name",
      "wcag": [
        "4.1.2"
      ],
      "impact": "critical",
      "title": "Button has no name",
      "who_is_affected": "Screen-reader and voice users hear \"button\" and cannot say or know which one.",
      "explanation": "Button has no text, aria-label or title, so it is announced only as \"button\" (WCAG 4.1.2). It shows only an SVG icon (one rectangle).",
      "business_impact": "Some customers cannot use this control at all (blind or keyboard-only users), so enquiries, bookings or sign-ups can be lost here.",
      "who_fixes": "Your web developer (page template change)",
      "effort": "About 30-60 minutes",
      "selector": ".b1",
      "html_snippet": "<button class=\"b1\"><svg width=\"20\" height=\"20\"><rect width=\"20\" height=\"20\"></rect></svg></button>",
      "count": 1,
      "also_at": [],
      "second_check": {
        "confirmed": true,
        "method": "accessibility tree",
        "detail": "Chrome's accessibility tree gives this button no name (visible, 36 x 29 px)"
      },
      "fix": {
        "text": "Proven Fix (verified on a copy of this page): Add aria-label=\"Describe the action\" - (set `aria-label=\"Describe the action\"`) change `<button class=\"b1\">` to `<button class=\"b1\" aria-label=\"Describe the action\">`. We applied exactly this to a copy and re-ran the axe-core rules and our own page checks: the problem is gone on this element and no new problem appeared on the changed element(s). The words are a placeholder: this button shows only an SVG icon (one rectangle) and its code has no text, title or meaningful class/id, so the tool cannot tell its action. Click it (or find its click handler in the script) to see what it does, then write that action in 1-3 words, e.g. aria-label=\"Play video\" or aria-label=\"Close menu\"; better still, show that word on screen next to the icon.",
        "verified_after_fix": true,
        "status": "verified",
        "code_after": [
          "<button class=\"b1\" aria-label=\"Describe the action\"><svg width=\"20\" height=\"20\"><rect width=\"20\" height=\"20\"></rect></svg></button>"
        ],
        "why_not_verified": null
      }
    },
    "... more issues ..."
  ],
  "legal_risk": {
    "summary": "We found 5 definite accessibility problem type(s) (5 serious). Problems like these (missing labels, low contrast, keyboard traps, unnamed buttons) are the kind often listed in accessibility complaints and demand letters. Fixing them lowers that risk; it does not remove it.",
    "laws": [
      "... 4 regions with official sources ..."
    ],
    "not_legal_advice": "..."
  }
}

How it is different

What you getTrading Checkup APITypical accessibility APIs
Every definite failure re-checked by a second, independent method in a fresh page loadYes - unconfirmed items move to 'needs review'Rule results only; some add a 'needs review' list
Fix code applied to a copy of your page and re-checkedYes - 'verified_after_fix': trueGeneric advice or AI suggestions, not re-checked
Desktop and phone (320 px) in the same callYesUsually one view per call
Plain-English owner summary, who fixes it, rough effortYesNot seen
Legal-risk line with official sources (AU, US, EU, UK; not legal advice)YesNot seen
MCP tool for AI agents (stdio + HTTP)YesRare; mostly community wrappers
Ever says 'compliant'NeverSome do

Based on public product pages we read on 7 Nov 2026. Missing from a public page is not proof a product lacks it.

Price

Open now

Free beta

US$0

20 pages a month, up to 3 pages a scan, 30 requests a minute. No card.

Coming

Builder

US$29/month

500 pages a month, 10 pages a scan, webhooks, PDF reports.

Coming

Agency

US$99/month

3,000 pages a month, priority queue, white-label PDF.

Paid plans open after the free beta. Ask for early access and we will email you first. No payment is taken today.

Honest limits

  • Only check sites you own or have permission to test.
  • Automated checks find many problems, not all. Each result lists what a person must still check (alt text meaning, screen reader flow, captions and more).
  • We never say a site is "compliant", and the legal-risk line is general information, not legal advice.
  • Public pages only: private networks, logins and internal addresses are refused.

API status · Use it from Claude or another AI agent · Prefer a done-for-you report?