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
Quickstart
Generate a German XRechnung from a JSON payload with a single POST:
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)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
Send an existing XML invoice to /v1/validate to get a structured EN 16931 + CIUS verdict.
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
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.