ZUGFeRD & XRechnung Reader API
Send the URL of a ZUGFeRD, Factur-X or XRechnung PDF and get the invoice back as JSON — parties, lines, VAT breakdown and totals, plus the XML.
- Free plan
- No credit card
Request
curl -X POST https://apdf.io/api/pdf/einvoice/read \
-H "Authorization: Bearer TOKEN" \
-d file="FILE_URL"
const data = new FormData();
data.append('file', 'FILE_URL');
fetch('https://apdf.io/api/pdf/einvoice/read', {
headers: {'Authorization': 'Bearer TOKEN'},
method: 'POST',
body: data
})
.then(response => response.json())
.then(json => console.log(json));
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post(
'https://apdf.io/api/pdf/einvoice/read', [
'headers' => [
'Authorization' => 'Bearer TOKEN'
],
'form_params' => [
'file' => 'FILE_URL'
]
]);
$body = $response->getBody();
echo json_encode($body->getContents());
require 'rest-client'
response = RestClient.post(
'https://apdf.io/api/pdf/einvoice/read',
{
'file' => 'FILE_URL'
},
{
Authorization: "Bearer TOKEN"
}
)
puts response.body
import requests
response = requests.post(
'https://apdf.io/api/pdf/einvoice/read',
headers = {
'Authorization': 'Bearer TOKEN'
},
data = {
'file': 'FILE_URL'
}
)
print(response.text)
import (
"fmt"
"github.com/go-resty/resty/v2"
)
func main() {
client := resty.New()
data := map[string]string{
"file": "FILE_URL"
}
resp, _ := client.R().
SetFormData(data).
SetHeader("Authorization", "Bearer TOKEN").
Post("https://apdf.io/api/pdf/einvoice/read")
fmt.Println(resp.String())
}
import okhttp3.*;
class Pdf {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
FormBody formBody = new FormBody.Builder()
.add("file", "FILE_URL")
.build();
Request request = new Request.Builder()
.url("https://apdf.io/api/pdf/einvoice/read")
.addHeader("Authorization", "Bearer TOKEN")
.post(formBody)
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
}
}
The data inside.
Ready to book.
Every e-invoice carries its data as XML behind the pages.
You get it as JSON, with no line typed off the page.
- level
- The profile, from MINIMUM to XRECHNUNG
- invoice
- Number, dates, references and notes
- seller
- Name, VAT ID, address and contact
- lines
- Quantity, price, VAT and amount
- totals
- Net, VAT, gross and amount due
- xml
- The embedded XML as it is
No more typing invoices.
Incoming e-invoices already hold their data. Read it instead of copying it from the page.
Book incoming invoices
Read the invoices suppliers send by email or upload and post them to your accounting as they arrive.
Match purchase orders
Compare the order reference, lines and totals with your orders before an invoice gets approved.
Prepare payments
Take the IBAN, payment reference, due date and amount due straight into your next payment run.
Brief an AI agent
Give an agent clean invoice data instead of a PDF, so it can check, sort or answer questions about it.
Read e-invoices from anywhere.
Turn every incoming e-invoice into data your tools can use.
One account and one monthly allowance behind every route.
One authenticated POST from any language. Copy-paste samples in cURL, Node.js, Python and more.
POST /api/pdf/einvoice/read
Pick the action in any Zap and map files from earlier steps. No code and no servers to run.
Get E-Invoice Data
Add the Apdf node to any workflow, on n8n Cloud or self-hosted, and chain it with your automation.
Read electronic invoice
Let Claude, ChatGPT, Gemini or your own agent run it through the MCP server, on any paid plan.
read-e-invoice
1,000 e-invoice reads
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.
Reading e-invoices, answered
Invoice tutorials
Build an Automated Invoice Generator using HTML & Python
The tutorial explains how to build a Python invoice generator by using Jinja2 to merge data into standard HTML/CSS templates. Instead of manually coding complex PDF layouts, the script sends the rendered HTML to the Apdf API, which instantly converts it into a professional, downloadable PDF.
Extract Text from Scanned Invoices for Automated Data Entry
Automate data entry from scanned invoices and receipts using Node.js and the Apdf OCR Read API. Extract vendor names, invoice numbers, and totals from image-based PDFs and feed them directly into your accounting system.
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.
API · Webhook · MCP