How to send an invoice to KSeF — step by step
This is a hands-on walkthrough — no theory, just the steps. It shows how to send an invoice to KSeF with Invoice.app: setting up the connection, creating and sending the invoice, checking its status and downloading the UPO. For background on KSeF itself — what it is, who it applies to, how to generate a token — start with our complete KSeF guide.
What you need to start
Before you begin, make sure you have:
- An Invoice.app account — available on iOS, Android and in the browser.
- An active company with a valid NIP — the Polish tax identification number. You enter the company details in the app settings.
- A KSeF token — generated in the KSeF Taxpayer Application. If you do not have one yet, read how to generate a token.
Step 1 — set up the KSeF connection
Open your company settings in Invoice.app and go to the KSeF section. Paste the token you generated in the Taxpayer Application and save.
The app verifies the connection automatically — it checks that the token is valid and carries the right permissions. If all is well, you see a confirmation.
After the first connection Invoice.app syncs the last 30 days of invoices, both issued and received, so you have the full set straight away.
Step 2 — create the invoice
Creating an invoice works as usual. Fill in the client details, line items, VAT rates and payment terms. A few things matter for KSeF:
- The client's NIP — required for business clients (B2B). For private individuals (B2C) it is not, and Invoice.app marks the invoice in KSeF as issued to a party without a tax identifier.
- Invoice type — pick the right one from the selector: VAT, corrective, advance and settlement invoices, plus corrections to advance and settlement invoices. When issuing a correction, choose the original invoice from the list and give the reason.
Step 3 — send the invoice to KSeF
After saving, open the invoice detail view and press "Send to KSeF". A confirmation dialog appears — check the details and confirm.
Before sending, Invoice.app validates the invoice against the KSeF FA(3) schema. If anything is missing or malformed you get a list of errors to fix. The usual causes:
- An invalid client NIP format
- Required fields left empty, such as an item name or a VAT rate
- A VAT rate that does not fit the transaction type
Once the errors are fixed, send again. When validation passes, the invoice goes to KSeF and its status changes to "Pending".
Step 4 — check the invoice status
After sending, Invoice.app polls KSeF for the status every few seconds. You do not have to do anything — just watch the status on the invoice detail screen.
Invoice statuses in KSeF:
- Not submitted — the invoice exists but has not been sent to KSeF yet.
- Pending — sent, waiting for KSeF to validate it.
- Accepted — KSeF accepted the invoice. It receives an official KSeF reference number and a QR code. From this point the client sees it in their own system.
- Rejected — KSeF found errors. Read the message, correct the data and send again.
- Error — something went wrong in transmission, such as a connection failure. You can retry without editing the document.
Step 5 — download the UPO
The UPO (Urzędowe Poświadczenie Odbioru) is the official confirmation that KSeF accepted your invoice. It matters for tax purposes: it is the proof that the invoice was properly filed.
The UPO becomes available once KSeF accepts the invoice. To get it, open the invoice details → the KSeF section → "Download UPO". You can choose the format:
- PDF — a readable rendering, good for archiving or sending to the client.
- XML — a structured file you can import into other accounting software.
You can share or save the downloaded document through the system share sheet — AirDrop, email, files.
To send the client a PDF with the QR code, use "Send to client". That is particularly useful for foreign counterparties and for consumers (B2C), who have no access to KSeF.
Common problems and how to solve them
- Validation errors (invalid NIP, missing fields) — correct the invoice and send again. Invoice.app points at exactly which fields need attention.
- The token expired or has the wrong permissions — generate a new one in the KSeF Taxpayer Application. Remember to tick both permissions: issuing and viewing.
- KSeF rejected the invoice — read the error message in the invoice details. The usual causes are a NIP that does not match the VAT register, a malformed XML structure, or exceeding API limits.
- Editing a sent invoice — invoices accepted by KSeF are immutable. The only way to correct one is to issue a corrective invoice.
Syncing purchase invoices
Invoice.app does not only send: it also downloads invoices from KSeF automatically. In the sync section pick a date range and start the import — the app fetches every purchase invoice issued to your NIP.
In summary
Sending an invoice to KSeF with Invoice.app is five steps:
- Set up the connection — paste the KSeF token into the company settings.
- Create the invoice — fill in the details and pick the invoice type.
- Send it to KSeF — confirm, then wait for validation.
- Check the status — watch the automatic updates.
- Download the UPO — keep the confirmation for tax purposes.
The whole thing takes a couple of minutes. For more on what KSeF is and who it applies to, read our complete KSeF guide for small businesses. For the integration details, see the KSeF feature page.