Kod QR KSeF na fakturze: KOD I, KOD II i najczęstsze błędy

Zespół NaprawKSeF·8 min czytania

Faktura wystawiona w KSeF istnieje jako plik XML w systemie Ministerstwa Finansów. Wielu odbiorców nadal dostaje ją jednak inaczej: jako PDF w e-mailu, wydruk przy odbiorze towaru albo plik dla kontrahenta z zagranicy. Dla takich sytuacji wprowadzono kody weryfikujące QR. Dzięki nim każdy odbiorca może sprawdzić, czy dokument naprawdę jest w KSeF i czy nikt go nie zmienił.

Wizualizacja faktury KSeF z kodem QR i numerem KSeF oraz faktury offline z kodami OFFLINE i CERTYFIKAT
Faktura online ma jeden kod QR z numerem KSeF. Faktura offline ma dwa kody: OFFLINE i CERTYFIKAT.

Kiedy faktura musi mieć kod QR

Kod QR umieszczasz na fakturze, która trafia do odbiorcy poza KSeF, czyli w formie wizualizacji: PDF, wydruku albo załącznika do wiadomości. Typowe przypadki to:

  • konsument, który nie korzysta z KSeF i dostaje wydruk lub PDF,
  • nabywca zagraniczny bez dostępu do polskiego systemu,
  • kontrahent, z którym uzgodniłeś przekazywanie faktur e-mailem obok KSeF,
  • każda faktura wystawiona w trybie offline, zanim zostanie dosłana do KSeF.

Jeśli nabywca pobiera fakturę bezpośrednio z KSeF, kod QR nie jest mu potrzebny, bo ma dostęp do oryginalnego XML. Kody generuje lokalnie program do fakturowania, a nie KSeF. Ministerstwo opisuje to w materiałach o kodach weryfikujących i w dokumentacji technicznej KSeF 2.0. Kod musi spełniać normę ISO/IEC 18004. Jeśli nie da się go umieścić na samym dokumencie, przekazujesz go odbiorcy jako osobny obraz albo link.

KOD I: weryfikacja i pobranie faktury

KOD I jest na każdej wizualizacji faktury, zarówno online, jak i offline. To zakodowany link złożony z czterech części:

  • adresu środowiska, na produkcji https://qr.ksef.mf.gov.pl/invoice,
  • NIP-u sprzedawcy,
  • daty wystawienia z pola P_1 w formacie DD-MM-RRRR,
  • skrótu SHA-256 pliku faktury zapisanego w formacie Base64URL.

Przykład z dokumentacji MF dla środowiska testowego:

https://qr-test.ksef.mf.gov.pl/invoice/1111111111/01-02-2026/UtQp9Gpc51y-u3xApZjIjgkpZ01js-J8KflSPW8WzIE

Po zeskanowaniu odbiorca widzi uproszczone dane faktury i informację, czy dokument jest w KSeF. Żeby pobrać pełny XML, musi podać dodatkowe dane z faktury. Nie musi logować się do KSeF ani kontaktować z wystawcą.

Co jest pod kodem: numer KSeF czy OFFLINE

Pod KODEM I drukujesz numer KSeF, jeśli faktura już go ma. Tak jest przy fakturach online i przy fakturach offline, które zostały już dosłane do systemu. Jeśli numeru jeszcze nie ma, pod kodem jest napis OFFLINE. Dotyczy to faktur offline przed wysyłką i rzadkich sytuacji, gdy faktura online czeka na nadanie numeru.

KOD II: potwierdzenie wystawcy przy fakturach offline

KOD II pojawia się wyłącznie na fakturach wystawionych w trybach offline24, offline z powodu niedostępności systemu i trybie awaryjnym. Pod nim jest napis CERTYFIKAT. Link w tym kodzie jest podpisany kluczem prywatnym certyfikatu, więc bez dostępu do certyfikatu nie da się go podrobić.

Po zeskanowaniu KSeF sprawdza:

  • czy certyfikat wystawcy jest ważny, nieodwołany i niezablokowany,
  • czy podpis w linku jest poprawny,
  • czy osoba lub firma z certyfikatu ma uprawnienie do wystawiania faktur w imieniu sprzedawcy,
  • czy kontekst zgadza się z NIP-em sprzedawcy z faktury.

KOD II wymaga certyfikatu KSeF typu Offline. Certyfikat typu Authentication służy tylko do logowania w API i nie nadaje się do podpisu KODU II. Certyfikat warto przygotować przed pierwszą awarią, a nie w jej trakcie. Jak to zrobić, opisujemy w artykule o Module Certyfikatów i Uprawnień.

Faktury wystawione w czasie ogłoszonej awarii całkowitej KSeF powstają poza systemem i nie mają kodów QR. To osobna procedura, inna niż tryb offline.

Dlaczego kod QR przestaje pasować do faktury

Skrót SHA-256 liczy się z dokładnie tego pliku, który wysyłasz do KSeF. Każda zmiana po jego policzeniu, nawet inne kodowanie znaków, dodatkowa spacja albo ponowne sformatowanie XML, daje inny skrót. Wtedy link z kodu nie wskaże faktury w systemie, choć dane na wydruku wyglądają dobrze.

Najczęstsze przyczyny, które widzimy w praktyce:

1

Skrót z innej wersji pliku

Program liczy skrót z XML przed ostatnią poprawką, a wysyła już poprawiony plik. Albo moduł PDF generuje XML od nowa zamiast użyć pliku wysłanego do KSeF. Wizualizację twórz zawsze z tego samego, końcowego pliku.
2

Zły format daty

Pole P_1 ma w XML format RRRR-MM-DD, a w linku musi być DD-MM-RRRR. Przepisanie daty bez zmiany kolejności daje niedziałający link.
3

Base64 zamiast Base64URL

Zwykłe Base64 zawiera znaki +, / i dopełnienie =, które psują adres. Base64URL zamienia je na - i _ i nie ma dopełnienia. Przykład z dokumentacji ma 43 znaki.
4

NIP nabywcy zamiast sprzedawcy

W linku jest NIP z Podmiot1, czyli sprzedawcy. Przy samofakturowaniu lub wystawianiu przez biuro rachunkowe łatwo pomylić role.
5

Adres złego środowiska

Faktury produkcyjne muszą mieć adres qr.ksef.mf.gov.pl. Adres qr-test albo qr-demo skopiowany z testów nie znajdzie faktury z produkcji.
6

Nieczytelny wydruk

Za mały kod, kompresja PDF albo brak marginesu wokół kodu sprawiają, że telefon go nie odczyta. Sprawdź wydruk zwykłym aparatem w telefonie przed wdrożeniem nowego szablonu.

Kod QR nie naprawi błędnej faktury. Skoro skrót wiąże kod z konkretnym plikiem, poprawny XML musi być gotowy przed wysyłką. Sprawdź plik w walidatorze NaprawKSeF: pokaże błędy struktury FA(3), NIP-ów, dat i sum, zanim KSeF odrzuci fakturę. Typowe błędy formatu poprawisz w Autofix.

Co zrobić, gdy błąd wyszedł po wysyłce

Faktura przyjęta przez KSeF jest wystawiona. Nie podmieniasz jej pliku i nie generujesz nowego kodu do zmienionego XML. Są dwie sytuacje:

  • Błąd tylko w wizualizacji, na przykład zły format daty w linku albo nieczytelny kod. Faktura w KSeF jest poprawna, więc naprawiasz szablon wydruku i przekazujesz odbiorcy poprawną wizualizację tego samego pliku.
  • Błąd w danych faktury, na przykład kwota, stawka albo dane nabywcy. Wystawiasz fakturę korygującą. Dostaje ona własny numer KSeF i własny kod QR. Roboczy XML korekty przygotujesz w generatorze korekt.

Jak odbiorca sprawdza fakturę z kodem QR

Jeśli dostajesz fakturę jako PDF lub papier, zeskanuj kod telefonem. Porównaj numer faktury, kwotę i NIP sprzedawcy z tym, co pokazuje strona KSeF. Jeśli faktura była wystawiona offline, sprawdź też kod CERTYFIKAT. Gdy system nie znajduje faktury, zapytaj wystawcę, czy została już dosłana do KSeF. Faktura, której nie ma w systemie mimo upływu terminu na dosłanie, to sygnał, żeby wstrzymać płatność i wyjaśnić sprawę.

Najczęstsze pytania

Czy każda faktura z KSeF musi mieć kod QR?

Kod jest potrzebny, gdy faktura trafia do odbiorcy poza KSeF, na przykład jako PDF w e-mailu albo wydruk dla konsumenta lub kontrahenta zagranicznego. Jeśli nabywca odbiera fakturę bezpośrednio z KSeF, kod nie jest mu potrzebny.

Czym różni się KOD I od KODU II?

KOD I prowadzi do faktury w KSeF i pozwala sprawdzić, czy istnieje i nie została zmieniona. KOD II pojawia się tylko na fakturach offline i potwierdza wystawcę na podstawie certyfikatu KSeF typu Offline.

Dlaczego kod QR z faktury pokazuje, że faktury nie ma w KSeF?

Najczęściej skrót policzono z innej wersji pliku, data ma zły format albo w linku jest NIP nabywcy zamiast sprzedawcy. Przy fakturze offline przyczyną może być też to, że nie została jeszcze dosłana do KSeF.

Czy po wysłaniu faktury mogę poprawić XML i wygenerować nowy kod?

Nie. Błąd w danych poprawiasz fakturą korygującą, która ma własny numer KSeF i własny kod QR.

Podsumowanie

Kod QR łączy papierową lub PDF-ową wersję faktury z plikiem w KSeF. Faktura online ma jeden kod z numerem KSeF, faktura offline ma kody OFFLINE i CERTYFIKAT. Kod działa tylko wtedy, gdy powstał z dokładnie tego pliku, który trafił do systemu. Dlatego najważniejszy krok jest przed wysyłką: sprawdzony, poprawny XML. Jeśli prowadzisz małą firmę i przygotowujesz się do 2027 roku, zajrzyj też do przewodnika KSeF dla mikrofirm.

Z ruchu z bloga prosto do produktu

Sprawdź fakturę zanim KSeF ją odrzuci

Wgraj XML do walidatora, zobacz konkretne błędy i od razu sprawdź, które z nich naprawisz automatycznie. To najszybszy sposób, żeby przejść z teorii do realnej poprawki.

  • • darmowa walidacja bez wdrożenia
  • • konkretne wskazanie błędów i XPath
  • • plan Starter od 29 PLN/mies. dla regularnej pracy