Software products
SaaS and billing products can generate structured invoices in the backend without maintaining a separate XML serializer.
Generate XRechnung XML from structured invoice data and integrate creation directly into ERP, SaaS, and billing workflows.
QuoteCash validates the request, creates UBL XML, and sends the generated document through the configured validation service before returning it.
POST /api/v1/invoices/xrechnung checks required request fields, generates UBL XML, and validates the result before returning it.
POST /api/v1/validate checks existing XML with the same configured validation service and returns structured errors and warnings.
Business-scoped API keys, documented limits, and one access model support ERP, SaaS, and automation workflows.
The legacy generator first validates the JSON request and checks additional XRechnung fields such as issue date, VAT IDs, postal data, seller email and phone, and VAT rates. It then normalizes the data and generates UBL 2.1 XML.
The generator recalculates line, tax, and payable totals from quantity, net unit price, and VAT rate using two-decimal rounding; request totals are not copied into the XML. The generated XML is then passed to the same configured validation engine used by POST /api/v1/validate.
The XML identifies the XRechnung 3.0 CIUS through urn:xeinkauf.de:kosit:xrechnung_3.0. This repository does not pin a specific 3.0.x KoSIT bundle: the exact XSD and Schematron configuration belongs to the externally configured validator service, so QuoteCash does not claim a verified 3.0.2 bundle.
SaaS and billing products can generate structured invoices in the backend without maintaining a separate XML serializer.
Billing products need deterministic backend generation and validation, not a manual export screen. The route fits checkout, subscription, and ERP sync flows without adding a separate XML layer.
Agencies inheriting compliance deadlines need customer isolation and clear revocation paths. Business-scoped keys are easier to hand over cleanly than shared export credentials.
Integrators need explicit validation failures and predictable quota behavior. That is easier to operationalize than embedding a one-off XML library inside middleware.
Last reviewed: July 24, 2026
QuoteCash is a German B2B SaaS product from Luchianenco Labs. The product handles quotes, invoices, API keys, validation workflows, and structured e-invoicing output. This page is written from a software and finance operations perspective; it is not tax or legal advice.
XRechnung is a structured XML invoice format used in Germany. An additional PDF can help people view an invoice, but it does not replace the authoritative structured data. XRechnung describes the seller, buyer, invoice number, dates, line items, tax categories, totals, payment terms, and routing references in a way that accounting and procurement systems can process without OCR or manual retyping.
For developers, the important point is that XRechnung is not a PDF export with a different file extension. It is a data contract. If your upstream invoice data is incomplete, inconsistent, or too loosely modeled, the XML will fail even if the invoice looks reasonable in a user interface.
QuoteCash generates UBL 2.1 and sets the CustomizationID urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0. XRechnung CII output is not implemented. The profile identifier is fixed to the Peppol Billing business process; the request does not expose a configurable BT-23 value.
The API supports Buyer Reference and seller and buyer electronic addresses with schemeID. If explicit endpoint_id values are missing, the generator falls back to a VAT ID or email address. The configured external validator determines whether the output passes the current rules; this repository does not pin its exact 3.0.x bundle.
A PDF invoice is optimized for people. It can be opened, read, printed, and attached to an email, but software usually has to infer the invoice data from the visual representation. XRechnung is optimized for systems. The buyer name, VAT amount, payment due date, and invoice totals are explicit data fields.
That makes XRechnung powerful but unforgiving. A PDF can hide inconsistent source data behind a clean layout. XML cannot. If the buyer reference is missing, the VAT category does not match the line item, or totals do not reconcile after rounding, validation can fail before the customer ever sees the invoice.
Most validation problems start in customer and invoice master data, not in the final XML serializer. Typical failures include missing buyer references, incomplete postal addresses, invalid VAT IDs, wrong country or currency codes, tax categories that do not match line items, and totals that differ by a few cents because rounding rules are inconsistent.
QuoteCash checks required fields before generation and then submits the generated XML to the configured service. On a normative failure, the legacy endpoint returns HTTP 422 together with the XML and structured validation details for diagnosis.
The endpoint validates the request, generates UBL XML, and validates the result before returning it. This payload matches the published request schema.
POST /api/v1/invoices/xrechnung
Authorization: Bearer <api_key>
Content-Type: application/json
{
"schema_version": "1",
"invoice_number": "RE-2026-1042",
"issue_date": "2026-07-24",
"due_date": "2026-08-07",
"currency": "EUR",
"buyer_reference": "04011000-12345-03",
"seller": {
"name": "Muster GmbH",
"vat_id": "DE123456789",
"street": "Musterstraße 1",
"city": "Berlin",
"postal_code": "10115",
"country": "DE",
"email": "rechnung@muster.example",
"phone": "+49 30 123456",
"endpoint_id": "rechnung@muster.example",
"endpoint_scheme": "EM"
},
"buyer": {
"name": "Beispielkunde GmbH",
"vat_id": "DE987654321",
"street": "Kundenweg 2",
"city": "Hamburg",
"postal_code": "20095",
"country": "DE",
"endpoint_id": "buchhaltung@kunde.example",
"endpoint_scheme": "EM"
},
"line_items": [
{
"description": "Implementierung E-Rechnung",
"quantity": 1,
"price": 1200,
"total": 1200,
"vatRate": 19,
"unitCode": "C62"
}
],
"totals": {
"net": 1200,
"tax": 228,
"gross": 1428
},
"payment": {
"iban": "DE02120300000000202051",
"bic": "BYLADEM1001"
}
}