All 28 Countries Covered
May 17, 2026Country coverage doubles from 14 to 28. New format slots qr-bill (CH) and peppol-ubl (PL/PT/RO), Peppol-BIS UBL on AT/CZ/ES/FR, and several request fields relaxed to optional.
14 → 28 countries
CY, DK, EE, FI, GB, GR, IE, LT, LU, LV, MT, NO, SE, SI added — each with its own adapter.
qr-bill (CH)
32-line SPC payload as plain text — render the Swiss QR yourself.
peppol-ubl
Pure Peppol BIS 3.0 UBL for PL/PT/RO, alongside the national CIUS.
Schema relaxation
Fields the generator already defaults at runtime are now explicitly optional in the request schema.
New Country Coverage
Previously: AT, BE, BG, CH, CZ, DE, ES, FR, HU, IT, NL, PL, PT, RO (14). The 14 new countries all support pdf and ubl (Peppol BIS 3.0 UBL for cross-border B2B):
| Country | EAS | Notes |
|---|---|---|
| SE | 0007 | Org-Nr (Luhn), F-skatt-Notice, SEK |
| NO | 0192 | Mod-11 Org-Nr, NOK |
| DK | 0184 | CVR, FIK/Giro Payment-Slips |
| FI | 0213 | Y-tunnus, EUR |
| IE | 9925 | VAT IE1234567X, EUR |
| GB | 0096 | UK-VAT, GBP |
| LU | 9938 | Matricule, EUR |
| MT | 0235 | C-Number, EUR |
| CY | 0096 | HE-Number, EUR |
| SI | 9952 | EUR, SI-UBL-2.0-CIUS unter ubl |
| EE | 0208 | Reg-Code, EUR |
| LV | 0233 | Reg-Number, EUR |
| LT | 0200 | Imones-Kodas, EUR |
| GR | 0196 | AFM, EUR, mydata als nationaler Slot |
Per-country /api/v1/invoice/formats now returns 28 entries.
Example: Sweden UBL generation
1POST /api/v1/invoice/SE/ubl/generate2 3{4 "invoice": {5 "invoiceNumber": "SE-2026-0001",6 "type": "invoice",7 "issueDate": "2026-05-17",8 "currency": "SEK",9 "seller": {10 "name": "Helvetia AB",11 "street": "Storgatan 1",12 "city": "Stockholm",13 "postalCode": "11122",14 "countryCode": "SE",15 "vatId": "SE556677889901",16 "countrySpecific": { "orgnr": "5566778899" }17 },18 "buyer": { "name": "Kunde GmbH", "countryCode": "DE", "vatId": "DE123456789" },19 "items": [ { "description": "Beratung Mai 2026", "quantity": 8, "unitPrice": 1200, "taxRate": 25 } ],20 "subtotal": 9600.00,21 "total": 12000.0022 }23}New Format Slots
/api/v1/invoice/CH/qr-bill/generate
Emits the structured 32-line SPC payload (UTF-8 text/plain) — the content that encodes into the Swiss QR-Code receipt section. Not XML, not PDF. Render externally.
/api/v1/invoice/{PL|PT|RO}/peppol-ubl/generate
Pure Peppol BIS 3.0 UBL for cross-border B2B from the three countries whose ubl slot is occupied by the national CIUS (KSeF, CIUS-PT, eFactura). Previously unreachable.
/api/v1/invoice/{AT|CZ|ES|FR}/ubl/generate
Peppol-BIS UBL on four additional countries — previously these endpoints returned „Unsupported format“ even though the generators existed. Now wired through.
Example: Swiss QR-Bill payload
1POST /api/v1/invoice/CH/qr-bill/generate2 3# Returns UTF-8 text/plain — the 32-line SPC payload that4# encodes into the Swiss QR code. Use this to render the5# QR code yourself (custom PDF layout, mobile preview, etc.).6 7Content-Type: text/plain; charset=utf-88 9SPC10020011112CH443199912300088901213S14Helvetia Solutions AG15...16SCOR17RF1853900754703418Rechnung CH-2026-101019EPDFormat Profiles
POST /api/v1/invoice/DE/zugferd/generate accepts formatOptions.profile; the same applies to FR/facturx with EN16931 | BASIC.
| Profile | URN | Use Case |
|---|---|---|
| EN16931 | urn:cen.eu:en16931:2017 | Comfort profile, full EN 16931 |
| BASIC | urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic | Minimal set for simple invoices |
| EXTENDED | urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended | Sub-lines, construction-phase invoices, third-party payers |
Schema Relaxation in the Request Body
Fields the generator already defaults at runtime are now explicitly optional in the Zod schema. Purely additive — old clients keep sending them, new clients no longer need to.
Now optional
party.street/city/postalCodeitems[].positionitems[].grossAmountpaymentTerms(whole block, falls back to dueDays: 30)
paymentMethods[].type aliases
credit_transfer— alias for bank_transfer (UNTDID 4461 code 30)danish_fik— UNTDID 93giro— UNTDID 50