Overview
A register is a POS device in OpenFiskal — a terminal, kiosk, or logical endpoint that processes operations. A fiscal unit is the link between that register and a fiscal compliance capability (TSE in Germany, RKSV certificate in Austria, RT device in Italy). Creating a register is cheap — it’s just metadata. Provisioning a fiscal unit is what initializes the expensive fiscal device. This separation lets you:- Manage the fiscal device independently from the POS device
- Replace a fiscal device without creating a new register
- Track the full history of fiscal devices bound to a register
Register states
Registers have two states:- active: The register exists and can accept operations (when it has an active fiscal unit).
- archived: Permanently retired. Cannot be undone.
active state with no fiscal unit (active_fiscal_unit: null). It becomes fiscally operational once a fiscal unit is provisioned.
Fiscal unit lifecycle
A fiscal unit tracks the provisioning, operation, and retirement of a single fiscal device instance:- provisioning: The fiscal device is being initialized (TSE setup, RT activation, RKSV key registration). Automatic — transitions to
activeon success. - active: The fiscal device is initialized and ready to sign operations. This is the only state that accepts sales, refunds, closings, and other fiscal events.
- error: The fiscal device encountered a failure (e.g. TSE hardware fault, RT communication error). Recoverable via
POST /fiscal-units/:id/recover. - decommissioned: The fiscal unit has been permanently retired. Fiscal deregistration has been triggered with the relevant authority. Cannot be undone.
Commissioning
Create the register
A register belongs to a location. Provide a label and the jurisdiction it operates in.The register is
active but has no fiscal unit — it cannot process operations yet.Create a fiscal unit
Provisioning a fiscal unit initializes the jurisdiction-specific fiscal device:The fiscal unit is now
- Germany: Initializes the TSE, establishes the signature chain
- Italy: Activates the RT device with the Agenzia delle Entrate
- Austria: Establishes the RKSV signature chain, registers the AES key with FinanzOnline
active and the register is ready to accept operations.For device-direct integrations (EV chargers, unattended kiosks), pass
issue_register_credential: true to receive a register-scoped API key. For server-side integrations, the platform API key already covers all register operations.Start sending heartbeats
Once the fiscal unit is active, the register should send periodic heartbeats (every 30–60 seconds) so OpenFiskal can monitor its health.The
Use
status field in the heartbeat is self-reported by the register. OpenFiskal derives its own operational status from heartbeat frequency:| Status | Meaning |
|---|---|
operational | Heartbeat received within expected interval |
degraded | Register self-reported degraded status |
offline | No heartbeat for 2x expected interval |
stale | No heartbeat for an extended period |
GET /registers/:id/status to check a register’s operational status and list its currently open operations.Monitoring
Register status
The status endpoint provides liveness information and the authoritative list of open operations:Fleet status
To check all registers at a location in one call:Error recovery
If a fiscal device fails (TSE hardware fault, RT communication error), the fiscal unit transitions toerror. Operations on the register will be rejected until the fiscal unit is recovered.
To recover, call the recover endpoint:
active. If the device is still unreachable, the call will fail and the fiscal unit remains in error.
Replacing a fiscal unit
When a fiscal device reaches end-of-life, is replaced, or needs to be swapped — use the atomic replace endpoint. The register ID stays the same, so POS routing is unaffected.Viewing fiscal unit history
To see all fiscal units (past and present) for a register:Decommissioning
Decommissioning a fiscal unit
To permanently retire a fiscal unit without replacing it:active and can have a new fiscal unit provisioned later.
Archiving a register
When a register is permanently retired — hardware replaced, location closed, or no longer needed:archived state.
Credential management
For device-direct integrations, register API keys may need rotation:Backward compatibility
ThePOST /registers/:id/activate endpoint is deprecated but continues to work. Under the hood, it creates a fiscal unit. The register response includes deprecated fiscal_state and fiscal_registration fields derived from the active fiscal unit.
New integrations should use the fiscal units API directly.