How to Check If an Invoice Reached KSeF

You clicked "send," the software showed "sent," and you moved on. The catch: "sent" and "accepted" are two different states. A file can reach the Ministry of Finance gateway and be rejected there, or sit in processing, while you assume the invoice is safely in the system. KSeF (Poland's national e-invoicing system) became mandatory on 1 February 2026 for large taxpayers and 1 April 2026 for everyone else, so this distinction is no longer a technical footnote. An invoice without a KSeF number has not, in formal terms, been issued in the system. Below is how to tell that an invoice truly went through: where to find the KSeF number, what the UPO is, how to read the status, and what to do when the confirmation is missing.

6 min read 23 views
How to Check If an Invoice Reached KSeF

"Sent" is not "accepted": three states of an invoice

In the paper world, the process ended when you generated a PDF. In KSeF you need to separate three states:

  1. Prepared — you have a valid XML file, but it has not left your system yet.

  2. Sent — the file reached the KSeF gateway and is waiting for validation. Nothing is settled yet.

  3. Accepted — the invoice passed validation, received a KSeF number, and the UPO can be downloaded. Only this state means the document was issued in the system.

The riskiest assumption is "the file went out, so the invoice is there." The third state has to be confirmed, not presumed.

The KSeF number: the strongest signal that an invoice is in the system

The system assigns the KSeF number automatically once the file passes validation. Its presence is the simplest proof that the invoice was accepted. It looks roughly like this:

0123456789-20260507-1A2B3C4D5E6F-FF

That is the issuer's NIP (Polish tax ID), a date, a technical identifier, and a checksum. This number binds the document to KSeF permanently, and corrections and advance invoices reference it directly.

Watch out for the most common mix-up: the session reference number is not the KSeF number. The session reference describes the technical send operation (for batch sends it is called the batch reference number). The KSeF number identifies a specific invoice. If your confirmation shows only a session number, the document does not have a KSeF number yet, which means it has not been accepted.

It is also worth matching the invoice's own number from field P_2 against your internal numbering. The KSeF number and the P_2 number are two different values that must point to the same document.

UPO: the official proof of acceptance

The UPO (Urzędowe Poświadczenie Odbioru, the official acceptance receipt) is a document KSeF generates once an invoice is accepted. It is not a generic "success" message. The UPO carries specific data: the KSeF number, the invoice number from field P_2, the reference number of the submitted set, and the exact date and time the system accepted the document.

That date has legal weight. Under Article 106na(1) of the VAT Act, the issue date of a structured invoice is the date it was submitted to KSeF (KSeF 2.0 Handbook, Part II). The UPO is therefore your proof that the invoice was sent on time. The Ministry of Finance publishes the full field-by-field breakdown in its UPO KSeF document.

Downloading the UPO for every invoice is not a daily obligation. The Ministry keeps documents in KSeF for 10 years, so the receipt can be regenerated as long as the invoice has a KSeF number. It matters most when you need to prove the date or the fact of issuance, for example during a tax authority query.

Where to check the status, step by step

The method depends on how you send invoices.

In your invoicing software. Most tools show a status next to the document, usually a colour-coded marker: pending, accepted, rejected. Good tools poll KSeF in the background every few seconds and pull the KSeF number and UPO automatically as soon as they appear. If an invoice is stuck as "pending," use the re-check status function rather than sending it a second time.

Through the government Taxpayer Application (Aplikacja Podatnika KSeF 2.0). Log in at ksef.podatki.gov.pl with a Profil Zaufany (Poland's Trusted Profile) or a qualified electronic signature, find the invoice, and check whether it has a KSeF number. Button labels change from time to time, so compare the path against the current screen.

The status itself is a three-digit code from the gateway:

  • 200 — invoice accepted, KSeF number assigned.

  • 100–150 — the document is still processing. Wait and check again.

  • 400 and above — rejection. The invoice will not receive a KSeF number or a UPO.

What to do when there is no UPO

A missing UPO has no single cause. The document may still be processing, the session may not be closed, the receipt may not have been fetched yet, or the invoice may have been rejected. The first move is always to check the status, not to resend.

Automatically sending the same file a second time without checking the status risks creating a duplicate and makes it harder to tell which operation was the original.

The order is simple:

  1. Refresh the status of the invoice or session.

  2. If there is a KSeF number but no receipt, download the UPO again.

  3. If the status is an error (a code in the 400 group), read the code, fix the root cause, and only then send a corrected XML.

  4. If the document is still processing, monitor that same submission. Do not create a new one.

Quick checklist

  • The invoice has a KSeF number (not to be confused with the session reference number).

  • The send status is 200, not 100–150 or 4xx.

  • The UPO is downloaded or available to download.

  • The P_2 number on the invoice matches the number in your system.

  • The acceptance date is recorded (proof of timeliness).

  • Documents without a UPO go to a separate review list, not into a blind resend.

Conclusion

An invoice is in KSeF only once it has a KSeF number and a UPO. Everything before that is a transitional state, and relying on "sent" alone eventually ends in hunting for a document that was never accepted.

In Biurko the whole cycle runs in the background: after sending, the system polls KSeF for the status, retrieves the UPO, and verifies its signature against the Ministry of Finance certificate. If the receipt never arrives or the signature does not match, the invoice moves to a "needs review" status instead of falsely showing green. Create a free account at biurko.io and stop guessing whether an invoice went through.

FAQ

How do I know for sure that an invoice reached KSeF? By the assigned KSeF number and an available UPO. A "sent" message only means the file reached the gateway. Until there is a KSeF number, the invoice has not been accepted and is not yet issued in the system.

What is the difference between the KSeF number and the session reference number? The session (or batch) reference number describes the send operation. The KSeF number identifies a specific invoice and appears only after acceptance. Corrections and settlements use the KSeF number, not the session number.

I sent an invoice but there is no UPO. Should I resend? Not right away. Check the status first. If the document is processing (code 100–150), wait. If it is an error (4xx), fix the XML. Resending without checking the status risks a duplicate.

Do I have to download the UPO for every invoice? Not daily. The Ministry keeps invoices in KSeF for 10 years, so a UPO can be regenerated as long as the invoice has a KSeF number. Keep it, though, whenever you may need to prove the date or fact of issuance.

Where can I check the status without invoicing software? In the government Taxpayer Application (Aplikacja Podatnika KSeF 2.0) at ksef.podatki.gov.pl, after logging in with a Profil Zaufany or a qualified signature. You search for the invoice and check whether it has a KSeF number.

Tags

#KSeF
Share

Previous article

Automatic KSeF Resubmission After an Outage: How Biurko Handles It

Stay in the Loop

Get notified when we publish new articles. No spam, unsubscribe anytime.

We respect your privacy. Unsubscribe at any time.

Cookies

We use cookies to keep the service running and — with your consent — to improve it. You can accept all, reject the optional ones, or customize your choices. Cookie Policy