PDF/UA-1 PDF/A-3b HTTP API
HTML in.
A PDF that passes.
Most generators emit a page of glyphs with nothing underneath — a screen reader finds no document at all. Wellform emits a tagged PDF, and can have veraPDF — the reference implementation the standards bodies maintain — issue the verdict, so the proof does not come from us marking our own work.
100 documents a month, free · no credit card
/StructTreeRoot/Document /Lang (en-US)/H1 "Quarterly report"/P "Figures cover the…"/Figure /Alt "Uptake by region"/Table/TR/TH /Scope /Column/TH /Scope /Column/TR/TH /Scope /Row/TD "18,402"
2
verdicts: our preflight on every render, and veraPDF — the reference implementation — on request
~100ms
typical render, measured server-side and returned in a header
0
AI in the render path — deterministic, same input, same output
2
output families: PDF/UA for accessibility, PDF/A-3b for e-invoicing
Why now
Accessible documents stopped being optional.
Three deadlines turned a best practice into a procurement requirement. Teams generating invoices, statements or reports at volume now answer for every file they produce.
-
in force
European Accessibility Act
Digital products and services sold into the EU, including the documents they generate.
-
upcoming
ADA Title II — larger entities
US state and local government serving populations of 50,000 or more.
-
upcoming
ADA Title II — everyone else
Remaining public entities, including special district governments.
We probed 52 documents on one New Jersey township's site to see what is behind those dates today: 13% carry a structure tree, none declare PDF/UA. The measurement, and what it says about who this does and does not help.
Healthcare organisations funded by HHS answer to a fourth set of dates under Section 504, which moved to May 2027 and May 2028 and are not the same as the ADA ones above. Whether any given document satisfies any of these depends on your content and your circumstances, and that is a question for your counsel. What a tool can do is check the part of the standard a machine can check — the PDF Association puts that at 87 of the Matterhorn Protocol's 136 failure conditions, with 47 more needing human judgement and 2 having no defined test at all. Wellform reports the first set and says so plainly. How we draw that line.
The difference
Tagged is not the same as conformant.
Plenty of tools emit tags. Far fewer get the details that decide whether a
reader can navigate the file. Table headers are the clearest case: without
/Scope,
a reader knows a cell is a header but not what it heads.
The whole gap, in
detail.
If your pipeline prints through headless Chrome, this is the part that cannot be configured away — the print path has no document model to tag. Why Chrome cannot do it.
/TH "Region" (no /Scope) /TH "Northern" (no /Scope)
/TH /Scope /Column "Region" /TH /Scope /Row "Northern"
Scopes are recovered from the rendered document rather than the source markup, so a header hidden by CSS or a header row repeating across a page break is still labelled correctly. Where the two can't be reconciled, Wellform reports it instead of guessing — a mislabelled header is worse than an unlabelled one.
What gets checked
Every render, before it reaches you.
Tagged structure
A real structure tree with /Marked set and no suspects, not a flat page of glyphs.
Heading order
Levels that descend without skipping, so the outline assistive tech builds is the one you meant.
Table headers
/TH with a correct /Scope, recovered from the rendered document.
Figure alt text
Every figure carries a description — and if yours doesn't, we report the gap instead of inventing one.
Language & title
/Lang, a document title, and the viewer preference that makes readers announce it.
Embedded fonts
No standard-14 substitutions — every glyph the document uses travels inside it.
The API
One endpoint. No SDK required.
Post HTML, get a PDF. The verdict rides back in the response headers, so a failing document can fail your build instead of reaching a customer.
curl https://api.wellform.dev/v1/render.pdf \ -H "Authorization: Bearer wf_live_…" \ -H "Content-Type: application/json" \ -d '{ "html": "<h1>Report</h1>…", "variant": "pdf/ua-1" }' \ --output report.pdf
X-Wellform-Conformant: true X-Wellform-Failures: 0 X-Wellform-Warnings: 1 X-Wellform-Render-Ms: 104 X-Wellform-Remaining: 4873 # Ask for JSON instead and you get # the full checkpoint report, each # finding named by its Matterhorn # Protocol number.
Also emits PDF/A-3b, the container behind Factur-X and ZUGFeRD electronic invoices — same pipeline, different variant string.
Pricing
Priced by document, billed by month.
No per-seat pricing, no annual commitment, no call with anyone. Start free and upgrade from the dashboard when you outgrow it.
Platform
For invoicing, billing and school platforms rendering on behalf of their own customers. Volume pricing past 100,000 documents a month, invoiced on your terms rather than charged to a card, with the DPA signed and a named contact who is the person who wrote the renderer.
Documents are counted only when one is produced. A request that fails validation is never billed. Quotas are monthly on every plan; yearly billing changes the invoice, not the allowance.
Render one and see the report.
A hundred documents every month, free — no credit card at signup, and the free tier does not expire. If the verdict says conformant, every machine-checkable rule in the PDF/UA-1 profile passed — 106 of them — and you have a dated report saying which. The checks a machine cannot make are still yours to make.
- Enter your email and clear the challenge. No password, no company name, no sales call.
- Copy the key on the next screen. It is shown once — we store a hash, so nobody here can read it back to you.
-
POST your HTML to
/v1/renderand read the conformance report that comes back. Takes about a minute from here.
Your API key
Copy it now. Only a hash is stored, so this cannot be shown again.