Logo
POST /api/pdf/einvoice/validate

ZUGFeRD & XRechnung Validator API

Send the URL of a ZUGFeRD, Factur-X or XRechnung PDF and get every rule it breaks — PDF/A-3 and the EN 16931 and XRechnung rules, each with its code.

  • Free plan
  • No credit card

Request

curl -X POST https://apdf.io/api/pdf/einvoice/validate \
  -H "Authorization: Bearer TOKEN" \
  -d file="FILE_URL"

Every rule.
Before it counts.

An e-invoice has to be a valid archive PDF and a valid invoice. Both are checked, and each finding names the rule it breaks.

invoice-RE-2026-0042.pdf EN 16931 · example
PDF/A-3
Schema
EN 16931
Factur-X
Net964.95
VAT 19 %183.34
Total1,148.29
Amount due1,418.29 EUR
source xml
rule BR-CO-16
message Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).
Each rule is the code of the standard, so the fix is one search away.
What every e-invoice is checked for
PDF/A-3
The archive format every e-invoice uses
Schema
The XML against the schema of its profile
EN 16931
The business rules of the European standard
Factur-X
The rules of the ZUGFeRD / Factur-X profile
XRechnung
The German rules, for XRECHNUNG invoices

Catch it before they do.

A rejected e-invoice comes back when payment is already late. Check it the moment it is made or arrives.

Check before sending

Validate every invoice your billing makes before it goes out, so no customer has to send one back.

Check what arrives

Validate the e-invoices suppliers send before you book them, and reply with the exact rule broken.

Test your own generator

Run the files your own e-invoice code makes through the same checks, with rule codes to look up.

Archive with confidence

Know that what you store is a valid archive PDF with a valid invoice inside, not just any PDF.

Validate from anywhere.

Check every e-invoice where it is made or where it arrives. One account and one monthly allowance behind every route.

Your code

One authenticated POST from any language. Copy-paste samples in cURL, Node.js, Python and more.

POST /api/pdf/einvoice/validate
Open the endpoint docs
Zapier

Pick the action in any Zap and map files from earlier steps. No code and no servers to run.

Validate E-Invoice
Use it in Zapier
n8n

Add the Apdf node to any workflow, on n8n Cloud or self-hosted, and chain it with your automation.

Validate electronic invoice
Use it in n8n
AI agents

Let Claude, ChatGPT, Gemini or your own agent run it through the MCP server, on any paid plan.

validate-e-invoice
See what agents can do

1,000 validations
a month. Free.

Start on the free plan and move up only when your volume does — up to 1,000,000 operations a month on Business.

  • One call is one operation, however many pages.
  • Only calls that do the work are counted.
  • Hard limits, so no surprise overage charges.
Plan PDF operations / month
Hobby Free
$0 / month
1,000
Pro
$39–$99 / month
20,000 – 60,000
Business
$149–$899 / month
100,000 – 1,000,000

Validating e-invoices, answered

Errors break a rule, and a single error makes valid false. Warnings point at things worth a look, but the e-invoice stays valid with them.
The ones of the profile the invoice XML declares. Every e-invoice is checked against EN 16931 and ZUGFeRD / Factur-X, and an XRECHNUNG invoice also against the German XRechnung rules.
It comes back with valid false and an error saying what is missing. A regular PDF invoice can become an e-invoice with the create API.
No, it only reports. When you make e-invoices with the create API, the totals are calculated for you, and the result is checked the same way before you get it.
A validation always runs in the background. Check the job on the job status endpoint, or pass a webhook_url and the report is posted to you when it is ready.
After the API call

Your code made the PDF.
Then it went dark.

Opened, read, signed or ignored — you never see any of it. Send the PDFs you generate as personal links, and every open, page read, comment and signature comes back to your software as a webhook. Need it signed? Same link. Same account, same API key, one more call.

Your PDF, after sending Live
document:loaded CFO
page:read p4 · 38s
signature:signed 11:48

API · Webhook · MCP

Know it’s valid
before it’s sent.