Overview
Moving to KSeF is a data-and-process change, not just an API swap: you need clean party identifiers, an invoice mapping that produces valid FA(3), an authentication method, and a TEST run before production. Working through that short checklist in the sandbox turns the eventual go-live into a configuration change rather than a first attempt.
Clean party data first
KSeF (Krajowy System e-Faktur) is Poland's national e-invoicing platform run by the Ministry of Finance (Ministerstwo Finansów). Before anything else, make sure your seller and buyer identifiers are correct: the seller NIP must match your authenticated KSeF identity, and every buyer NIP must be a valid Polish tax identifier. Bad party data is the most common cause of a rejected invoice, so clean it at the source.
Map your invoice fields
Your invoice data must map onto the FA(3) structure: the header fields such as the issue date and invoice number, the seller and buyer blocks, and the line items with unit, quantity and net price. The mapping is the one part that is genuinely project work, because your internal invoice model and the FA(3) schema are not the same shape. An API such as Notaly's does the mapping for you from a plain JSON payload, which removes the risk of hand-built XML.
Choose your authentication
You authenticate to KSeF in one of two ways: with a KSeF token, or with a qualified signature or seal over the XAdES challenge. The token is the simpler path for most teams, and it is what Notaly uses — you provide the token in Connect KSeF and the platform opens the session for you. Whichever you choose, keep the credential safe and track its expiry.
Prove it in TEST, then go live
Run the full flow in the KSeF TEST environment before touching production: submit a sample invoice, confirm you can read both an accepted status (with the KSeF number and UPO) and a rejection, and verify the PDF and QR code come back correctly. Once the test flow works end to end, connecting production is a matter of swapping credentials, not re-learning the process.
FAQ
Do I need to write FA(3) XML to migrate? No. With a KSeF API you send JSON and the provider generates and validates the FA(3) XML.
Should I test before going live? Yes. Run the full flow in the KSeF TEST environment first.
Disclaimer
Notaly is not a tax, accounting or legal advisor. This article is general information, not tax advice, and may be outdated. You are responsible for your own VAT compliance; confirm with a qualified accountant where required.
Sources
Source: www.podatki.gov.pl