veraPDF as an API: PDF/UA checks for 10 credits
veraPDF REST, hosted behind one API key. A PDF/UA or WTPDF check costs 10 credits, a PDF/A check 2. Your veraPDF REST client works by changing its base URL.
Last updated
| PDF/UA or WTPDF check | 10 credits |
|---|---|
| PDF/A check | 2 credits |
| Profiles | PDF/UA-1, PDF/UA-2; WTPDF 1.0 Accessibility and Reuse; PDF/A-1a, 1b, 2a, 2b, 2u, 3a, 3b, 3u, 4, 4e and 4f, or auto |
| Limits | One PDF of up to 25 MB per call; a check runs at most 50 seconds |
| Report | veraPDF's own report, as JSON, XML or HTML |
A PDF/UA check costs 10 credits. veraPDF checks the PDF against PDF/UA-1 or PDF/UA-2, the ISO standard for accessible PDF, and returns its full report: whether the file is compliant, and every rule it fails with the objects that fail it. A PDF/A check costs 2 credits, and a WTPDF check 10.
The API is veraPDF REST's own. A client written for veraPDF REST keeps its
paths and its report parser; it changes the base URL to
https://api.pagespool.com/v1/verapdf and sends an API key.
What veraPDF checks
veraPDF is the open-source PDF validator of a consortium led by the Open Preservation Foundation and the PDF Association. It checks:
- PDF/UA-1 and PDF/UA-2 (ISO 14289), for accessibility: tags and structure, alternative text on figures, fonts, language and metadata;
- WTPDF 1.0, Accessibility and Reuse;
- PDF/A, the ISO standard for archiving: parts 1, 2 and 3 at levels a, b
and u (part 1 has no u), and part 4 with e and f. The profile
autochecks against the part the file declares in its metadata, and against PDF/A-1b when it declares none.
veraPDF checks the rules a machine can check. A passed PDF/UA check does not mean the alternative text or the reading order make sense; that still needs a person.
Prices and limits
| Call | Credits |
|---|---|
POST /v1/verapdf/api/validate/ua1, ua2, wt1a, wt1r |
10 |
POST /v1/verapdf/api/validate/auto, 1a … 4f |
2 |
GET /v1/verapdf/api/profiles, profiles/{id}, info |
free |
A call that fails costs nothing. Each call takes one PDF of up to 25 MB, sent
as multipart field file. A check runs at most 50 seconds; a longer one is
stopped with a 504. Every account gets free credits each day and each month,
and the plans are on the pricing page.
Hosting veraPDF yourself, or calling it here
veraPDF REST is a Java server. Hosting it yourself means a JVM with about 1 GB of memory per instance, kept running and updated. It has no authentication of its own, so it needs a gateway with TLS and keys in front before anything outside your network may call it. A cold JVM also takes tens of seconds for its first checks after each start, so it needs warming up before it takes traffic.
Here, it is one API key and the same API. veraPDF runs warm, a check is billed only when it succeeds, and the same key and credit balance work for the other engines on this site.
Quickstart with curl
Check a PDF against PDF/UA-1 and print the verdict:
curl -sS -H "X-API-Key: $API_KEY" -H "Accept: application/json" \
-F file=@document.pdf \
https://api.pagespool.com/v1/verapdf/api/validate/ua1 \
| jq '.report.jobs[0].validationResult[0].compliant'
Accept picks the report's format: application/xml for XML, text/html
for HTML, JSON for anything else. The failed rules are in
.report.jobs[0].validationResult[0].details.ruleSummaries. A PDF/A check is
the same call with a PDF/A profile, such as validate/2b.
Your veraPDF REST client, unchanged
Point the client at https://api.pagespool.com/v1/verapdf where it had veraPDF REST's
root, such as http://localhost:8080. The paths stay the same:
POST /api/validate/{profile}with the PDF as multipart fieldfile;GET /api/profiles,GET /api/profiles/{id}(idslists the profile ids);GET /api/info.
A client that takes only a base URL carries the key in it:
https://x:YOUR_API_KEY@ followed by the API host and /v1/verapdf. Four
things differ from a server of your own: a request without Accept gets
JSON, where veraPDF REST answers HTML; /api/info leaves out the server's
own address and host name; POST /api/validate/url/{profile} and /api/sha1
are not offered; and a file that is not a PDF is refused with a 422 before it
is checked.
Your API key, three ways
Send the key in whichever form your client supports:
- the header
X-API-Key: YOUR_API_KEY; - the header
Authorization: Bearer YOUR_API_KEY; - HTTP Basic auth with the key as the password and any user name, which is
what an HTTP client sends for a URL with the key in it,
https://x:YOUR_API_KEY@….
Never put the key in a path or a query string: those end up in logs. A call without a valid key gets a 401.
Free tools and MCP
Try a check in the browser, without an account: the PDF accessibility checker (PDF/UA) and the PDF/A validator, for PDFs of up to 4 MB.
AI agents reach veraPDF through its MCP server at
https://api.pagespool.com/mcp/verapdf/. It has two tools: check_pdf_accessibility
(PDF/UA, 10 credits) and validate_pdfa (2 credits), each returning the
verdict and the failed rules. Connect has the setup for
each client.
Trademarks
veraPDF is a trademark of its owner; pagespool is not affiliated.
FAQ
- Can I keep my veraPDF REST client?
- Yes. Change its base URL to /v1/verapdf on the API host and send your API key. The paths, the profile ids, the multipart field file and the report stay as veraPDF REST has them.
- What does a check cost?
- A PDF/UA or WTPDF check costs 10 credits, a PDF/A check 2. Reading the profiles and the server info is free, and a call that fails costs nothing.
- Does a passed PDF/UA check mean the PDF is accessible?
- It means the PDF passes every rule veraPDF can check by machine. Whether the alternative text and the reading order make sense still needs a person.
- Is my PDF stored?
- No. The PDF is held only while veraPDF checks it, and is not kept afterwards.