W historii wysyłki przy fakturze widzisz kod 435 i komunikat „Błąd odszyfrowania pliku”. Czasem ten sam numer stoi przy całej sesji wsadowej, z opisem „Błąd odszyfrowania zaszyfrowanych części archiwum”. Faktura wygląda dobrze, a mimo to Krajowy System e-Faktur (KSeF) jej nie przyjął.
Tu znajdziesz wyjaśnienie, dlaczego ten kod prawie nigdy nie dotyczy treści faktury, oraz konkretne kroki dla biura i dla programisty. Inne kody opisujemy na pełnej liście kodów błędów KSeF.
Co oznacza kod 435
Program, który wysyła fakturę, najpierw ją szyfruje. KSeF po odebraniu pliku go odszyfrowuje i dopiero wtedy sprawdza treść. Kod 435 mówi, że zawiódł ten pierwszy krok. KSeF dostał plik, ale nie umiał go odczytać. Do sprawdzania NIP-ów, dat czy stawek w ogóle nie doszło.
Numer 435 występuje w dokumentacji API KSeF 2.0 w dwóch miejscach. Oba omawiamy na tej stronie.
Status faktury 435: „Błąd odszyfrowania pliku”. Dotyczy jednej faktury w sesji. Pozostałe faktury z tej samej sesji mogą przejść bez problemu.
Status sesji wsadowej 435: „Błąd odszyfrowania zaszyfrowanych części archiwum”. W sesji wsadowej program pakuje faktury do archiwum ZIP, dzieli je na części i szyfruje każdą część. Ten status oznacza, że KSeF nie odszyfrował tych części. Problem dotyczy wtedy całej paczki, a nie jednej faktury. Jak działa wysyłka paczkami, opisujemy w tekście o hurtowej wysyłce faktur do KSeF.
Nie myl tego z kodem 415 w statusie sesji. Brzmi on „Błąd odszyfrowania dostarczonego klucza” i oznacza, że KSeF nie odczytał samego klucza sesji. Przy 435 klucz został odczytany, a zawiódł dopiero plik. Kodowi 415 poświęciliśmy osobny tekst: błąd 415 w KSeF.
Dokumentacja MF nie podaje przyczyn kodu 435 wprost. Opisuje za to, jak faktura ma być zaszyfrowana, w sekcji „Poprawne szyfrowanie” dokumentu o weryfikacji faktury. Przyczyny poniżej wynikają z tego opisu i z naszej własnej praktyki.
Najczęstsze przyczyny
1. Usterka szyfrowania w programie, która psuje tylko niektóre pliki
To najbardziej podstępny wariant. Program szyfruje większość faktur poprawnie, a tylko część źle. Usterka zależy wtedy od cechy pliku, a nie od jego treści. U nas była to długość: kłopot sprawiały tylko pliki, których rozmiar był dokładną wielokrotnością 16 bajtów. Szczegóły opisujemy niżej, w części „Z naszej praktyki”.
Jak rozpoznać: 435 dostają pojedyncze faktury, a inne z tej samej sesji przechodzą. Ta sama faktura wysłana ponownie znów dostaje 435, bo jej plik się nie zmienił. Nowa sesja niczego tu nie zmienia.
2. Klucz z innej sesji albo pomylony klucz
Klucz szyfrujący i wektor inicjujący (IV, dodatkowa losowa wartość potrzebna do szyfrowania) program tworzy osobno dla każdej sesji. Przy otwarciu sesji przekazuje je do KSeF, klucz w postaci zaszyfrowanej. Jeżeli zaszyfruje fakturę kluczem z wcześniejszej sesji albo pomyli klucze dwóch sesji, KSeF użyje innego klucza niż program. Odszyfrowanie się nie uda.
Jak rozpoznać: 435 dostają wszystkie faktury z danej sesji, bez względu na treść i rozmiar. Jeżeli pomyłka była jednorazowa, ponowna wysyłka w nowej sesji przechodzi.
3. Paczka zaszyfrowana inaczej, niż zgłoszono (sesja wsadowa)
W sesji wsadowej obowiązuje ta sama zasada, tylko na poziomie części archiwum. Jeżeli części zaszyfrowano innym kluczem niż zgłoszony przy otwarciu sesji albo z usterką w procedurze szyfrowania, KSeF nie odczyta paczki.
Jak rozpoznać: kod 435 widzisz w statusie całej sesji, a nie przy pojedynczych fakturach.
Czego kod 435 nie oznacza
- Błędu w treści faktury. Błędy treści FA(3) KSeF zgłasza innym kodem: 450, „Błąd weryfikacji semantyki dokumentu faktury”. Opisaliśmy go w tekście o błędzie 450 w KSeF.
- Wadliwego pliku XML. Plik, który KSeF odszyfrował, ale uznał za wadliwy, dostaje kod 430, „Błąd weryfikacji pliku faktury”. Więcej: błąd 430 w KSeF.
- Problemu z tokenem KSeF. Bez poprawnego logowania program nie otworzyłby nawet sesji.
Co zrobić krok po kroku
- Nie poprawiaj treści faktury. Kod 435 nie mówi nic o NIP-ie, kwotach ani stawkach. Uwaga na pułapkę: drobna zmiana treści może zmienić rozmiar pliku, więc faktura może nagle przejść. To jednak ukrywa usterkę programu, zamiast ją usunąć. Przy następnej fakturze o „pechowym” rozmiarze błąd wróci.
- Sprawdź, gdzie stoi kod. Przy jednej fakturze to status faktury. Przy całej sesji wsadowej to status sesji. Programy pokazują to zwykle w historii wysyłki albo w dzienniku zdarzeń.
- Wyślij fakturę jeszcze raz, najlepiej w nowej sesji. Faktura z kodem 435 nie została przyjęta i nie ma numeru KSeF. Ponowna wysyłka nie utworzy więc duplikatu. Jeżeli przejdzie, sprawa zamknięta.
- Jeżeli ta sama faktura znów dostaje 435, zgłoś to dostawcy programu. Błąd, który wraca tylko przy niektórych fakturach, to prawie na pewno usterka szyfrowania w programie. Ty jej nie naprawisz. Podaj w zgłoszeniu numer faktury, datę i godzinę wysyłki, numer referencyjny sesji i rozmiar pliku XML w bajtach.
- Porównaj rozmiary plików. Jeżeli program pozwala wyeksportować XML, sprawdź rozmiar odrzuconych plików we właściwościach pliku. Podziel go przez 16. Jeżeli przy odrzuconych fakturach zawsze wychodzi liczba całkowita, a przy przyjętych nie, masz mocną wskazówkę dla dostawcy. Przykład: 2 256 bajtów to dokładnie 141 razy 16. Eksport może się minimalnie różnić od pliku, który program zaszyfrował, więc traktuj to jako wskazówkę, nie dowód.
- Sprawdź, czy masz aktualną wersję programu. Usterki szyfrowania dostawcy usuwają poprawkami. Aktualizacja może rozwiązać problem od razu.
- Przy kodzie 435 w statusie sesji wsadowej sprawdź, które faktury z paczki mają numer KSeF. Faktury bez numeru wyślij ponownie w nowej sesji. Jeżeli kolejna paczka też kończy się kodem 435, przekaż sprawę dostawcy programu.
- Do MF pisz dopiero na końcu. Ma to sens wtedy, gdy dostawca potwierdzi, że szyfrowanie jest zgodne z dokumentacją, a błąd się powtarza. Użyj formularza MF albo adresu jpk.helpdesk@mf.gov.pl. Dołącz numer referencyjny sesji i godzinę wysyłki.
Jak temu zapobiec
Po każdej aktualizacji programu przejrzyj historię pierwszych wysyłek. Nie lekceważ pojedynczego kodu 435. Jeżeli przyczyną jest usterka szyfrowania, wróci przy kolejnych fakturach o tej samej cesze pliku, na przykład o rozmiarze będącym wielokrotnością 16 bajtów, i to bez ostrzeżenia. Zgłoś go dostawcy od razu, nawet gdy sprawa wygląda na jednorazową.
Dla programisty. Według dokumentacji MF faktura jest szyfrowana algorytmem AES-256-CBC: klucz 256-bitowy, wektor IV 128-bitowy, dopełnienie PKCS#7. Klucz i IV generujesz dla każdej sesji od nowa i nie używasz ich w innej sesji. Klucz symetryczny szyfrujesz algorytmem RSAES-OAEP (SHA-256, MGF1) aktualnym kluczem publicznym MF. Certyfikaty pobierasz z GET /security/public-key-certificates i wybierasz aktualny, o właściwym przeznaczeniu (usage), jak opisuje dokumentacja kluczy publicznych. Przy PKCS#7 plik o długości będącej dokładną wielokrotnością 16 bajtów dostaje cały dodatkowy blok: 16 bajtów o wartości 0x10. Ten przypadek musi być w testach. Sprawdź pliki o długości równej wielokrotności 16 bajtów oraz o jeden bajt krótsze i dłuższe. Szyfrogram odszyfruj niezależną implementacją, na przykład OpenSSL, bo test tą samą biblioteką w obie strony może nie wykryć jej własnej usterki. Na koniec wyślij takie pliki na środowisko DEMO lub TEST KSeF.
Z naszej praktyki
24 września 2026 r. KSeF odrzucił jedną z faktur, które wysłaliśmy w produkcji. Status 435, „Błąd odszyfrowania pliku”, a w szczegółach „Plik niepoprawnie zaszyfrowany”. Plik XML faktury miał 2 256 bajtów. Treść faktury była poprawna.
Przyczyna leżała po naszej stronie, w programie wysyłającym. Procedura szyfrowania AES-256-CBC z zewnętrznej biblioteki, uruchamiana w środowisku Deno, psuła ostatni blok szyfrogramu. Działo się to zawsze wtedy, gdy długość XML była dokładną wielokrotnością 16 bajtów. W takim przypadku dopełnienie PKCS#7 musi dodać cały dodatkowy blok. Statystycznie dotyczyło to mniej więcej co szesnastej faktury.
Tego samego dnia odtworzyliśmy błąd na środowisku DEMO KSeF. Faktura testowa zbudowana tak, by miała dokładnie 2 256 bajtów, dostała 435. Faktury o innych długościach przeszły. Jeszcze tego dnia przeszliśmy na standardowe szyfrowanie AES-CBC z Web Crypto. Pojedynczy kod 435 na naszym własnym koncie testowym w lipcu miał, jak się okazało, tę samą przyczynę.
Wnioski są trzy. Kod 435 prawie nigdy nie dotyczy treści faktury. Jeżeli błąd dotyczy tylko części faktur, porównaj rozmiary odrzuconych plików. A ta sama faktura wysłana ponownie przez poprawiony program przechodzi bez żadnej zmiany w treści.
FakturaFlow pokazuje każdy błąd KSeF po polsku, z informacją, co poprawić. W oknie „Szczegóły KSeF” widzisz historię statusów faktury, jej numer KSeF i wysłany plik XML. Faktury idą pojedynczo albo w sesjach wsadowych, a UPO (Urzędowe Poświadczenie Odbioru) pobiera automatycznie. FakturaFlow działa obok Twojego programu księgowego, nie zamiast niego. Załóż konto i sprawdź.
Podsumowanie
Kod 435 oznacza, że KSeF nie odszyfrował faktury („Błąd odszyfrowania pliku”) albo części paczki w sesji wsadowej („Błąd odszyfrowania zaszyfrowanych części archiwum”). To sprawa szyfrowania w programie wysyłającym, nie treści faktury. Wyślij fakturę ponownie, a jeśli błąd wraca przy tych samych plikach, zgłoś go dostawcy programu razem z rozmiarem pliku w bajtach. Pozostałe kody znajdziesz na pełnej liście kodów błędów KSeF.
Stan na październik 2026 r. Opis na podstawie dokumentacji API KSeF 2.0 (wersja 2.8). Kody i komunikaty mogą się zmienić wraz z nowymi wersjami API.