Documentation

Information about usage

This service can be used by (small) companies to directly check and generate e-invoices in the browser. But the main target group are developers who want to integrate validation and generation into their own systems. Find the relevant information for your target group in the following sections.

Web Validator: check e-invoices in the browser

The web validator is intended for direct single checks. It supports XRechnung files in XML format and ZUGFeRD documents as PDF. For XRechnung, a successful validation can also show the invoice content directly in the browser.

Which services does this app provide here?

  • Validation of XRechnung XML in the browser.
  • Validation of ZUGFeRD PDF in the browser for signed-in users.
  • Readable HTML view of successful XRechnung files in the browser for signed-in users.

Which standards and criteria are used for validation?

  • XRechnung is validated against UBL/XSD, EN 16931, and XRechnung CIUS.
  • ZUGFeRD is validated against CII/XSD and EN 16931 rules.
  • For ZUGFeRD, the PDF/A path is additionally checked with veraPDF.

Which invoice formats can this app generate?

  • XRechnung as UBL according to EN 16931 and XRechnung CIUS.
  • ZUGFeRD / Factur-X as CII plus hybrid PDF according to EN 16931.

How browser-based testing works

  1. 1. Open the »Validator« page and upload an XML or PDF file. XML can also be pasted directly into the text field.
  2. 2. Click »Validate e-invoice« and wait for the result below the button.
  3. 3. After a successful XRechnung validation, »Show invoice contents« opens a structured HTML view.

Where is the result shown?

  • The result is shown directly below the form on the same page.
  • Guests only see the status valid or invalid.
  • Signed-in users see the individual findings and, for successful XRechnung checks, also the invoice contents.

Limitations

  • Guests can only upload XML and TXT files. ZUGFeRD PDFs in the web validator are available only to signed-in users.
  • Guests are limited to three checks per hour. Signed-in users get a higher quota.
  • The invoice content view is available only for successfully validated XRechnung files, not for ZUGFeRD PDFs.

API: quick start for developers

The API is intended for integrators who want to validate, generate, store, and retrieve invoices. The detailed reference will be hosted separately. This page only provides the compact technical entry point with the most important endpoints and the payload structure for generate.

Which services does this app provide through the API?

  • Validation of invoice payloads as JSON, XML, or ZUGFeRD PDF.
  • Generation of XRechnung and ZUGFeRD from structured invoice data.
  • Retrieval, listing, and download of generated artifacts per API key.

Which standards and criteria are used for validation?

  • XRechnung: UBL/XSD, EN 16931, and XRechnung CIUS.
  • ZUGFeRD: CII/XSD, EN 16931 rules, and PDF/A checks with veraPDF.
  • Validation results are returned in a structured form with source, code, severity, and location.

Which invoice formats can the API generate?

  • XRechnung as UBL XML.
  • ZUGFeRD / Factur-X as CII XML and hybrid PDF.
  • For ZUGFeRD, a logo can additionally be included.

Quick start

  1. 1. Register an account, choose a suitable plan, and create an API key in the dashboard.
  2. 2. Use »POST /v1/invoices/validate« first to test sample data against the validation rules.
  3. 3. Use »POST /v1/invoices/generate« for actual invoice creation, either synchronously or asynchronously.
  4. 4. Poll status through »GET /v1/invoices/{id}« and download artifacts if needed.

Detailed API documentation

Open external API docs

The full reference with all fields, response models, and examples will be published separately. Until then, the following overview serves as the compact technical starting point.

Important endpoints with examples

POST /v1/invoices/validate

Validates invoice payloads as JSON, XML, or ZUGFeRD PDF without storing them.

curl -X POST https://api.xinvoice.net/v1/invoices/validate \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d @payload.json

POST /v1/invoices/generate

Generates an invoice and in sync mode returns XML or PDF directly.

curl -X POST https://api.xinvoice.net/v1/invoices/generate \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Prefer: respond-sync' \
  -d @payload.json

GET /v1/invoices/{id}

Returns status, validation, and artifacts for an invoice generated earlier.

curl -X GET https://api.xinvoice.net/v1/invoices/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY'

GET /v1/invoices/{id}/download-pdf

Downloads the hybrid PDF for a ZUGFeRD invoice.

curl -X GET https://api.xinvoice.net/v1/invoices/{id}/download-pdf \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -o invoice.pdf

Invoice payload structure for generation

For »generate« and »validate« with JSON, structured invoice data is expected. The following example shows the most important blocks for seller, buyer, and line items.

{
  "document_format": "zugferd",
  "invoice_number": "RE-2026-001",
  "issue_date": "2026-04-15",
  "currency": "EUR",
  "seller": {
    "name": "Example GmbH",
    "vat_id": "DE123456789",
    "street": "Example Street 1",
    "postal_code": "12345",
    "city": "Berlin",
    "country_code": "DE",
    "email": "seller@example.com"
  },
  "buyer": {
    "name": "Customer AG",
    "street": "Customer Road 5",
    "postal_code": "54321",
    "city": "Hamburg",
    "country_code": "DE",
    "email": "buyer@example.com"
  },
  "items": [
    {
      "name": "Consulting",
      "quantity": 1,
      "unit_code": "H87",
      "price": 100.00,
      "tax_rate": 19
    }
  ]
}

FAQ

Frequently asked questions about the web validator, accounts, API access, and downloads are collected on a dedicated FAQ page.

Open FAQ

Support

If the documentation is not enough or a concrete problem needs clarification, the support form can be used directly in the browser.

Open support