e-Invoice REST API

For developers · Service on invoicePress.de

Validate e-invoices without running anything yourself.

The invoicePress e-Invoice REST API is an interface that your own program calls over the internet. It validates e-invoices, checks identifiers such as VAT numbers, LEI or Peppol IDs against the responsible registers and serves the code lists of EN 16931 for lookup. You call it from your script, your ERP system or any other program, and you do not need to install anything. To try it out, you do not even need a key: validation also answers without a key within a free quota, and the reference data is always free.

In short: An e-invoice is an invoice as a structured XML file. EN 16931 is the European standard that defines which data an e-invoice contains. A code list is a defined list of allowed values, for example the currency codes. The API runs on invoicePress.de under the namespace einvoice-api/v1.

The routes

Four tasks, one service.

A route is an address of the API that handles one specific task.

POST /validate — This route validates an e-invoice. It accepts XRechnung, Peppol BIS, and ZUGFeRD and Factur-X as XML or PDF. It returns the result (accepted or rejected), the detected validation scenario, that is, the matching rule package, the findings with explanations and the validation report in the format of the KoSIT validator.

POST /validate/multi — This route validates an invoice against every version of the rule set that may apply. For XRechnung, this is the version that was valid on the invoice date. For ZUGFeRD and Factur-X, the check starts with the newest version and then moves to the older ones. This helps when you do not know which version an invoice was created for.

POST /check and /check/batch — These routes check identifiers against their registers: VAT numbers (through VIES, the EU’s lookup system), SIREN and SIRET, LEI, ABN, NIP, Peppol IDs and EORI numbers. In a batch, they check up to 1,000 identifiers at once.

GET /codelists, /fields, /rules, /identifiers — These routes serve the reference data of EN 16931 for reading, that is, code lists, fields, rules and identifiers. They are free and need no key.

All routes live under https://invoicepress.de/wp-json/einvoice-api/v1/. You find the full description in OpenAPI format, the common standard for describing such interfaces, at /openapi.json. In the section “Every route, right in your browser” further down this page, you can try out every route.

Key and quota

The routes /validate and /validate/multi also answer without a key. In that case, both share one free quota of 5 calls per network address and day. The read routes for code lists, fields, rules and identifiers are always free. With a key, the two validation routes count against the quota of your account or your plan. For identifier checks and the other services, you send your API key in the header Authorization: Bearer ….

Without a key With a key
Read code lists, fields, rules and identifiers ✓ free ✓ free
Validate e-invoices (/validate, /validate/multi) 5 calls per network address and day with a free account: monthly quota; with a subscription: quota of your plan
Check identifiers (/check, /check/batch) – ✓ with a subscription
What is free without a key and what a key with a subscription adds.

You get the key through your customer account on invoicePress.de. The account is free and gives you a higher monthly quota for validating e-invoices. To check identifiers, or to validate beyond that, there are subscriptions. You see the key in your customer account under API keys, and you can regenerate it there at any time. The headers of every response tell you how much of your daily quota is left.

Your data

Invoices and reports are processed in memory only and are not stored. The usage log records only a fingerprint of the request, never its content.

Reference data

The code lists of EN 16931, free and without a key.

The European standard EN 16931-1 defines which code lists are allowed for every field with the data type “Code”. These tables are called UN/EDIFACT UNTDID, ISO 3166-1, ISO 4217, UN/ECE Rec. 20 and 21, ICD, EAS, MIME and VATEX. Through the API you get every table as a whole or a single entry from it, without a key. Every response names the data version of the list, so you know how current it is.

Each list also has its own page on invoicePress.de with a searchable table and the matching routes to try out.

Getting started

Validate an invoice with a single command.

You send the invoice file itself as the body of the request. If you leave out the Authorization line, the call counts against the free quota of your network address. That way you can start right away, even without an account.

curl -X POST https://invoicepress.de/wp-json/einvoice-api/v1/validate \
     -H "Authorization: Bearer <key>" \
     --data-binary @invoice.xml

The response comes as JSON. The field accepted tells you whether the invoice is accepted. It also contains the detected validation scenario, the findings with explanations and the full validation report.

1 · Send the invoice
POST /validate, XML or PDF
2 · Validation
in memory, nothing stored
3 · Read the response
JSON with accepted, findings and report
How a call works: you send the invoice, the API validates it, and you receive the result as JSON.

Try it

Every route, right in your browser.

Expand a route, choose “Try it out” and send the request. For routes that need a key, enter the key first through “Authorize”. It stays in this browser window only.

Look first, then automate.

Try the validation right in your browser above, without any key. The quickest way to get a feel for the validation and its findings is to have one of your own invoices checked in the section “All routes, right in your browser” further up on this page. To read an e-invoice, use the free eInvoice Viewer.