v1 integration contract is shared across countries, but the fiscal regime, merchant identity shape, and signed receipt fields differ. Pick your country to follow the correct flow.
🇩🇪 Germany
KassenSichV: Sign transactions and get a QR code with the signature.
🇦🇹 Austria
RKSV: Sign transactions and get a QR code with the signature.
🇮🇹 Italy
Registratore Telematico: Transmit transactions to AdE and get DCW numbers.
All three guides use
https://sandbox.api.openfiskal.com/v1. Replace with https://api.openfiskal.com/v1 when you go live.Generate API keys at console.openfiskal.com. Each key is tenant- and country-scoped — see Authentication for details.
Live OpenAPI spec
The current production spec is served at
https://api.openfiskal.com/openapi-json (sandbox: https://sandbox.api.openfiskal.com/openapi-json). Import it into Postman, Insomnia, or an OpenAPI code generator to scaffold a client in minutes.The OpenAPI spec always matches the live API implementation.Scope
OpenFiskal is a server-to-server fiscalization API. Your backend calls the API on behalf of your POS devices. There’s no direct device-to-API path today. The current public scope covers Germany, Austria, and Italy.What’s the same across countries
These mechanics are identical regardless of the country guide you follow:- API key format —
of_{env}_{country}_{random}, one key per country + environment. - Request shape — bearer auth on every request,
X-OpenFiskal-Merchanton every merchant-scoped request, ETag +If-Matchon mutating calls. - Resource ordering — merchant → location → register → fiscalize → session → operation → complete.
- POS sessions — every
sale,return, andexchangeon a POS register must bind to an open session. See Sessions. - Idempotency —
Idempotency-KeyonPOST /operationsandPOST /operations/{id}/complete|void. - Money fields — decimal strings, not integers.
pretax_amount + tax_amount + tip_amount = total_amount.
What’s different per country
| 🇩🇪 Germany | 🇦🇹 Austria | 🇮🇹 Italy | |
|---|---|---|---|
| Regime | KassenSichV | RKSV | RT |
country_code | DEU | AUT | ITA |
| Fiscal identity required fields | tax_number (Steuernummer), vat_id (USt-IdNr) | legal_entity_id_type (VAT_ID | TAX_ID | GLN); gln (13 digits) when the type is GLN. vat_id and tax_number are optional. | legal_entity_type (COMPANY | INDIVIDUAL), tax_number (Codice Fiscale: 11 digits or 16 alphanumeric), vat_number (Partita IVA: 11 digits), fisconline_user (16 alphanumeric), fisconline_password, fisconline_pin |
| Receipt obligation | Render all fiscal fields exactly | Preserve fiscal values + local format | Render the DCW number |
Next steps
- Authentication — bearer key + merchant header reference
- Integration topology — backend-to-backend architecture