Poland Fiscalization Guide
What is Polish fiscalization?
Poland operates KSeF (Krajowy System e-Faktur — National e-Invoicing System), run by the Ministry of Finance. KSeF is mandatory for large taxpayers from 2026-02-01 and all VAT-registered taxpayers from 2026-04-01. Every B2B invoice (and B2C in opt-in mode) must be transmitted as FA(2) XML; KSeF returns a numerKSeF which becomes the canonical legal identifier.
In plain English: Poland is moving everyone onto a single national invoicing platform in 2026. KSeF accepts invoices, validates them, and assigns its own number. Zyntem keeps your issuer-side numbering intact (P_2) while also surfacing the KSeF number for legal references.
Zyntem builds the FA(2) XML, handles all four KSeF authentication modes (token, cloud QSCD, hardware key, qualified seal), submits to KSeF, polls the UPO (Urzędowe Poświadczenie Odbioru — official confirmation of receipt), and surfaces both the P_2 and numerKSeF on the transaction.
How it works
Poland's flow is asynchronous and dual-numbered:
- Your POS creates a transaction via
POST /v1/transactions. - Zyntem assembles the FA(2) XML (
http://crd.gov.pl/wzor/2023/06/29/12648/) including the issuer-sideP_2invoice number. - Zyntem authenticates per the location's
auth_method(see below) and submits to/api/online/Invoice/Send. - KSeF validates synchronously and queues the invoice; the transaction returns with
fiscal_id=P_2andfiscal_id_upstream=null. - The polling worker hits
/api/online/Invoice/Status/{id}until KSeF issues the UPO and assigns thenumerKSeF. Status flips tosuccessandfiscal_id_upstream=numerKSeF.
Submission window: KSeF mandates within-day submission for B2B (Article 106na of the Polish VAT Act). Zyntem queues immediately.
FA(2) → FA(3) cutover: FA(3) becomes effective 2026-10-01. Configurations using schema_version: FA3 reject prepare() until the FA(3) builder lands. Default to FA2 until the cutover date.
Authentication modes
KSeF supports four auth modes. Pick the one that matches your merchant's setup. The auth_method.kind discriminator selects the variant.
| Mode | Cloud-OK | Use when |
|---|---|---|
token | ✅ Recommended | KSeF-portal-issued bearer token. Simplest — generate the token from the merchant's KSeF portal session and Zyntem stores the KMS reference. |
xades_cloud_qscd | ✅ | Merchant has a cloud QSCD (SimplySign / mSzafir) and prefers XAdES-BES signing. |
xades_hardware_key | ❌ Embedded only | Hardware-bound qualified key (forces Embedded-Local mode — Cloud config is rejected). |
qualified_seal |