eliDocs
Welcome

Welcome to Beliq

The platform for European e-invoicing: one API to generate, validate, and soon deliver EN 16931 e-invoices (and Italy FatturaPA FPR12 XML) across XRechnung, ZUGFeRD, Factur-X, Peppol BIS 3.0, and FatturaPA. Generate, validate, parse and convert are live today; managed delivery is coming next.

What Beliq does

What Beliq does

POST/v1/generateConvert structured JSON invoice data into compliant XML (UBL/CII, or Italy FatturaPA FPR12), or hybrid PDF (ZUGFeRD/Factur-X).
POST/v1/validateValidate an existing e-invoice: UBL/CII against XSD and Schematron (EN 16931 + CIUS); FatturaPA against authority XSD.
POST/v1/parseParse an XML or hybrid PDF e-invoice into a normalised JSON representation.
POST/v1/convertConvert an existing e-invoice between EN 16931-family formats: CII ↔ UBL, ZUGFeRD ↔ Factur-X, XRechnung CII ↔ UBL, and Peppol BIS to plain EN 16931 UBL.
Quickstart

Quickstart

Generate a German XRechnung from a JSON payload with a single POST:

generate-invoice.sh
curl -X POST https://api.beliq.eu/v1/generate \
  -H "Authorization: Bearer $BELIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "standard": "xrechnung",
    "output": "xml",
    "invoice": {
      "number": "INV-2026-0421",
      "issueDate": "2026-05-19",
      "currencyCode": "EUR",
      "buyerReference": "04011000-12345-03",
      "seller": {
        "name": "Beliq Demo GmbH",
        "vatId": "DE123456789",
        "email": "billing@demo.example",
        "contactName": "Anna Beispiel",
        "phone": "+49 30 1234567",
        "address": { "street": "Musterstraße 1", "city": "Berlin", "postalCode": "10115", "countryCode": "DE" }
      },
      "buyer": {
        "name": "Acme AG",
        "vatId": "DE987654321",
        "address": { "street": "Beispielweg 42", "city": "Bonn", "postalCode": "53113", "countryCode": "DE" }
      },
      "lines": [
        { "description": "Compliance API — May 2026",
          "quantity": 1, "unitCode": "MON", "unitPrice": 199.00, "lineTotal": 199.00,
          "vatRate": 19, "vatCategoryCode": "S" }
      ],
      "taxSummary": [
        { "vatCategoryCode": "S", "vatRate": 19, "taxableAmount": 199.00, "taxAmount": 37.81 }
      ],
      "paymentMeans": { "typeCode": "58", "iban": "DE89370400440532013000" },
      "totalNetAmount": 199.00,
      "totalTaxAmount": 37.81,
      "totalGrossAmount": 236.81
    }
  }'
import { Beliq } from '@beliq/sdk';

const beliq = new Beliq({ apiKey: process.env.BELIQ_KEY! });

const generated = await beliq.generate({
  standard: 'xrechnung',
  output: 'xml',
  invoice: {
    number: 'INV-2026-0421',
    issueDate: '2026-05-19',
    currencyCode: 'EUR',
    buyerReference: '04011000-12345-03',
    seller: {
      name: 'Beliq Demo GmbH',
      vatId: 'DE123456789',
      email: 'billing@demo.example',
      contactName: 'Anna Beispiel',
      phone: '+49 30 1234567',
      address: { street: 'Musterstraße 1', city: 'Berlin', postalCode: '10115', countryCode: 'DE' },
    },
    buyer: {
      name: 'Acme AG',
      vatId: 'DE987654321',
      address: { street: 'Beispielweg 42', city: 'Bonn', postalCode: '53113', countryCode: 'DE' },
    },
    lines: [
      {
        description: 'Compliance API — May 2026',
        quantity: 1,
        unitCode: 'MON',
        unitPrice: 199.00,
        lineTotal: 199.00,
        vatRate: 19,
        vatCategoryCode: 'S',
      },
    ],
    taxSummary: [{ vatCategoryCode: 'S', vatRate: 19, taxableAmount: 199.00, taxAmount: 37.81 }],
    paymentMeans: { typeCode: '58', iban: 'DE89370400440532013000' },
    totalNetAmount: 199.00,
    totalTaxAmount: 37.81,
    totalGrossAmount: 236.81,
  },
});

console.log(generated.xml, generated.meta.schematronVersion);
import os

from beliq import Beliq

beliq = Beliq(api_key=os.environ["BELIQ_KEY"])

generated = beliq.generate(
    standard="xrechnung",
    output="xml",
    invoice={
        "number": "INV-2026-0421",
        "issueDate": "2026-05-19",
        "currencyCode": "EUR",
        "buyerReference": "04011000-12345-03",
        "seller": {
            "name": "Beliq Demo GmbH",
            "vatId": "DE123456789",
            "email": "billing@demo.example",
            "contactName": "Anna Beispiel",
            "phone": "+49 30 1234567",
            "address": {
                "street": "Musterstraße 1",
                "city": "Berlin",
                "postalCode": "10115",
                "countryCode": "DE",
            },
        },
        "buyer": {
            "name": "Acme AG",
            "vatId": "DE987654321",
            "address": {
                "street": "Beispielweg 42",
                "city": "Bonn",
                "postalCode": "53113",
                "countryCode": "DE",
            },
        },
        "lines": [
            {
                "description": "Compliance API — May 2026",
                "quantity": 1,
                "unitCode": "MON",
                "unitPrice": 199.00,
                "lineTotal": 199.00,
                "vatRate": 19,
                "vatCategoryCode": "S",
            },
        ],
        "taxSummary": [{"vatCategoryCode": "S", "vatRate": 19, "taxableAmount": 199.00, "taxAmount": 37.81}],
        "paymentMeans": {"typeCode": "58", "iban": "DE89370400440532013000"},
        "totalNetAmount": 199.00,
        "totalTaxAmount": 37.81,
        "totalGrossAmount": 236.81,
    },
)

print(generated.xml, generated.meta.schematron_version)
Response
HTTP/1.1 200 OK
Content-Type: application/xml; charset=utf-8
x-validation: pass · 0 err · 1 warn
x-schematron-version: 1.3.16

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:…">
  <cbc:CustomizationID>urn:cen.eu:en16931:2017#…xrechnung_3.0</cbc:CustomizationID>
  <cbc:ID>INV-2026-0421</cbc:ID>
  <cbc:IssueDate>2026-05-19</cbc:IssueDate>

</Invoice>
Validating existing invoices

Validating existing invoices

Send an existing XML invoice to /v1/validate to get a structured EN 16931 + CIUS verdict.

validate.sh
curl -X POST https://api.beliq.eu/v1/validate \
  -H "Authorization: Bearer $BELIQ_KEY" \
  -H "Content-Type: application/xml" \
  --data-binary @invoice.xml

# 200 OK
# {
#   "success": true,
#   "data": {
#     "valid": true,
#     "format": "ubl",
#     "profileDetected": "xrechnung",
#     "errors": [],
#     "warnings": [
#       { "ruleId": "BR-DE-26", "severity": "warning", "location": "/Invoice/cac:Delivery",
#         "message": "Recommended element missing" }
#     ]
#   }
# }
import { readFile } from 'node:fs/promises';
import { Beliq } from '@beliq/sdk';

const beliq = new Beliq({ apiKey: process.env.BELIQ_KEY! });

const result = await beliq.validate(await readFile('invoice.xml'));

console.log(result.valid, result.format, result.profileDetected);
for (const issue of result.warnings) console.log(issue.ruleId, issue.message);
import os
from pathlib import Path

from beliq import Beliq

beliq = Beliq(api_key=os.environ["BELIQ_KEY"])

result = beliq.validate(Path("invoice.xml").read_bytes())

print(result.valid, result.format, result.profile_detected)
for issue in result.warnings:
    print(issue.rule_id, issue.message)
Supported standards

Supported standards

Each badge names the strongest check Beliq can run against that format. Authority-checked runs the format authority's own rulebook, pinned by version and hash. Schema-checked means no rulebook is published, so the document is validated against the official XSD schema. See How verification works for what sits behind each badge.

  • XRechnung German B2G and B2B (UBL 2.1 or CII D16B).3.0.2Authority-checked
  • Factur-X French hybrid PDF; all five EN 16931 profiles + EXTENDED-CTC-FR.1.09.2Authority-checked
  • ZUGFeRD German hybrid PDF (CII D22B in PDF/A-3).ZF-2.xAuthority-checked
  • Peppol BIS Billing 3.0 Cross-border EU (UBL 2.1; CreditNote supported).BIS 3.0Authority-checked
  • NLCIUS Dutch national CIUS, SI-UBL 2.0 over Peppol BIS.NLCIUS 1.0Authority-checked
  • FatturaPA Domestic Italy XML (FPR12).1.2.3Schema-checked
  • Facturae Domestic Spain XML (MINECO national format).3.2.2Schema-checked
  • e-SLOG Domestic Slovenia XML (eRacun).2.0Schema-checked

All 8 formats above are live to generate and to validate. EN 16931 is the semantic core they profile, not a format you request. Beliq additionally runs the Romania RO_CIUS overlay on Peppol BIS 3.0, and XSD-only validation of SDI receipts and notifications (MessaggiTypes). See the Format Reference for the full standard and status matrix.

Where Beliq stops

Where Beliq stops