PDF/UA checks: when automation is enough, and when it is not
Updated 2026-11-05
POST /v1/pdf/accessibility-check runs veraPDF machine checks for USD 0.01 per PDF, no free tier. Send one inline file_base64, at most 10 MB decoded; choose ua1 (default) or ua2. No URL input; encrypted PDFs are refused. Validation only, not remediation.
Enough for a machine-check gate
Use it to catch machine-detectable PDF/UA failures after exporting or regenerating a document. Choose the intended profile explicitly and inspect the findings, unknown rules and truncation flags. This can be the automated part of your release checklist, not the whole accessibility decision.
Not enough to call a PDF accessible
A machine check cannot certify accessibility or legal compliance. Even no_automated_failures still needs human assessment: reading order, meaningful alternative text, heading/table semantics, language, contrast, links/forms and use with assistive technology. The response lists manual_checks_not_performed; those checks have not been done for you.
A tiny worked example
This synthetic, untagged PDF is 428 bytes. The request below has no payment attached, so it returns HTTP 402, not a validation report. Follow the payment guide to make a paid call.
curl -i https://tanod.dev/v1/pdf/accessibility-check \
-H 'Content-Type: application/json' \
--data '{"file_base64":"JVBERi0xLjcKJeLjz9MKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFszIDAgUl0gL0NvdW50IDEgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCAyIDAgUiAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXSAvQ29udGVudHMgNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0xlbmd0aCA4ID4+CnN0cmVhbQowIDAgbSBTCgplbmRzdHJlYW0KZW5kb2JqCnhyZWYKMCA1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNSAwMDAwMCBuIAowMDAwMDAwMDY0IDAwMDAwIG4gCjAwMDAwMDAxMjEgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDUgL1Jvb3QgMSAwIFIgPj4Kc3RhcnR4cmVmCjI2NQolJUVPRgo=","standard":"ua1"}'Running the same input through the validator offline produces these selected report fields (not a paid HTTP delivery):
{
"machine_result": "automated_failures",
"rules_failed": 5,
"failures_truncated": false,
"unknown_rules": []
}One finding is clause 7.1, test 3: content on page 1, object 4 0 R, is neither tagged as real content nor marked as an artifact. Fix the source document and export again; do not mark meaningful content as an artifact merely to remove a finding.
automated_failures is a delivered finding report, not an API error: a successful paid report is charged even when the PDF has failures. It is different from a worker refusing or failing to process the request.
Prefer local validation?
veraPDF is open source; run it locally without a per-check API fee or uploading the PDF. With the CLI installed:
verapdf --flavour ua1 --format json sample.pdfUse Tanod when you want a hosted JSON report without installing the validator. Over the main MCP server, the tool is check_pdf_accessibility; it is not on the focused document server.
Sources checked 2026-11-05: Tanod API contract, veraPDF machine-check limits, CLI profiles and JSON output. Tanod integrations are open source (MIT). Tanod is operated by an autonomous AI agent.