Wszystkie artykuły

    Poradnik8 min czytania

    Błąd 440 w KSeF: duplikat faktury i anulowana sesja. Co zrobić

    Zespół FakturaFlow

    Praktycy automatyzacji KSeF dla biur rachunkowych w Polsce.

    Wysyłasz fakturę do Krajowego Systemu e-Faktur (KSeF), a program pokazuje kod 440 i komunikat „Duplikat faktury”. W szczegółach odrzucenia KSeF podaje, gdzie jest oryginał. Przykład z dokumentacji MF: „Duplikat faktury. Faktura o numerze KSeF: 5265877635-20250626-010080DD2B5E-26 została już prawidłowo przesłana do systemu w sesji: 20250626-SO-2F14610000-242991F8C9-B4”.

    Ten tekst pokazuje, jak odróżnić niegroźne powtórzenie od prawdziwego konfliktu numerów i co zrobić w każdym z tych przypadków. Opisujemy też drugie znaczenie kodu 440, czyli status sesji „Sesja anulowana”. Inne kody znajdziesz na pełnej liście kodów błędów KSeF.

    Co oznacza kod 440

    Numer 440 występuje w KSeF w dwóch miejscach i znaczy w nich co innego:

    • Status faktury: „Duplikat faktury”. Dotyczy jednej faktury w sesji. Tej sytuacji poświęcona jest większość tekstu.
    • Status sesji: „Sesja anulowana”. Dotyczy całej sesji, a nie konkretnej faktury. Opisujemy go w osobnej części niżej.

    Jak KSeF rozpoznaje duplikat

    Dokumentacja MF mówi wprost: „KSeF wykrywa duplikaty faktur globalnie” (weryfikacja faktury, sekcja „Unikalność faktury”). O tym, czy faktura jest duplikatem, decydują trzy pola:

    1. NIP sprzedawcy (Podmiot1/NIP),
    2. rodzaj faktury (RodzajFaktury),
    3. numer faktury (P_2).

    Jeżeli w KSeF jest już faktura z tymi samymi trzema wartościami, nowa dostaje kod 440. Unikalność obowiązuje przez 10 pełnych lat, licząc od końca roku wystawienia.

    Z tej reguły wynikają trzy rzeczy:

    • Ten sam numer przy innym rodzaju faktury to nie duplikat. Faktura VAT i korekta KOR z tym samym P_2 nie blokują się nawzajem.
    • Ten sam numer u innego sprzedawcy to nie duplikat. Jeżeli dwóch klientów Twojego biura wystawi fakturę FV/1/10/2026, KSeF przyjmie obie, bo NIP-y sprzedawców są różne.
    • KSeF nie porównuje treści. Kwoty, nabywca i data nie mają tu znaczenia. Faktura z poprawioną kwotą, ale ze starym numerem, też dostanie 440. Zmianę w fakturze, która już jest w KSeF, wprowadzasz wyłącznie korektą. Opisujemy to w tekście o korekcie faktury w KSeF.

    Co KSeF podaje w odrzuceniu

    Odrzucenie z kodem 440 zawiera numer KSeF oryginalnej faktury i numer sesji, w której KSeF ją przyjął, jak w przykładzie na początku. Dzięki temu od razu znajdziesz oryginał.

    Dla programistów. Status faktury z GET /sessions/{referenceNumber}/invoices/{invoiceReferenceNumber} ma code 440. W extensions są pola originalKsefNumber i originalSessionReferenceNumber. Gdy dało się odczytać numer faktury, odpowiedź zawiera też invoiceNumber. Biblioteka open source ksef-client-ts udostępnia te pola od wersji 0.14.0 (październik 2026 r.). Traktuj 440 jako stan końcowy tego pliku i nie ponawiaj wysyłki automatycznie. Numer z originalKsefNumber zapisz przy fakturze dopiero wtedy, gdy potwierdzisz, że oryginał ma tę samą treść.

    Najczęstsze przyczyny

    Przyczyny dzielą się na dwie grupy o odwrotnych skutkach. W pierwszej ta sama faktura już jest w KSeF i nic złego się nie stało. W drugiej inna faktura zajęła numer i trzeba go zmienić.

    Grupa A: ta sama faktura już jest w KSeF

    1. Zgubiona odpowiedź. Program wysłał fakturę, ale połączenie zerwało się, zanim przyszła odpowiedź KSeF. KSeF fakturę przyjął, a program uznał wysyłkę za nieudaną i wysłał ją ponownie. Rozpoznasz to w historii wysyłek: pierwsza próba kończy się błędem połączenia lub brakiem odpowiedzi, druga kodem 440.
    2. Podwójna wysyłka. Ktoś kliknął przycisk wysyłki dwa razy albo dwie osoby w biurze wysłały tę samą paczkę. Sesja z odrzucenia jest wtedy w Twojej historii wysyłek, zwykle tuż przed odrzuconą.
    3. Faktura wysłana z dwóch miejsc. Klient wysłał fakturę ze swojego programu albo z Aplikacji Podatnika KSeF, a biuro wysłało ją jeszcze raz. Rozpoznasz to po sesji z odrzucenia: nie ma jej w Twojej historii wysyłek.
    4. Ponowiona cała paczka. Po przerwie lub błędzie ktoś wysłał jeszcze raz całą paczkę, która za pierwszym razem przeszła. Każda faktura dostaje wtedy 440. Jeżeli w nowej sesji nie przeszła żadna faktura, cała sesja może skończyć się kodem 445, opisanym w tekście o błędzie 445 w KSeF.

    Grupa B: inna faktura ma już ten numer

    1. Numeracja zaczyna się od nowa. Seria jest liczona od 1 co rok lub co miesiąc, ale numer nie zawiera roku. Numer z zeszłego roku nadal blokuje ten sam numer w tym roku, bo unikalność trwa 10 lat. Rozpoznasz to po dacie wystawienia oryginału: jest z innego roku.
    2. Dwa programy, jeden NIP. Na przykład program księgowy i system sklepu wystawiają faktury w imieniu tej samej firmy według tego samego wzoru. Prędzej czy później oba nadadzą ten sam numer. Oryginał ma wtedy innego nabywcę i inne kwoty.
    3. Licznik cofnięty po zmianie programu. Po migracji lub ponownej instalacji numeracja rusza od numeru, który był już użyty. Oryginał pochodzi wtedy sprzed zmiany.

    Co zrobić krok po kroku

    1. Skopiuj numer KSeF i numer sesji ze szczegółów odrzucenia. Na razie nie zmieniaj niczego w fakturze.
    2. Znajdź oryginał. Zaloguj się do Aplikacji Podatnika KSeF i odszukaj tę fakturę wśród faktur wystawionych. Numer KSeF z odrzucenia potwierdzi, że patrzysz na właściwy dokument.
    3. Porównaj treść. Sprawdź nabywcę, datę wystawienia, pozycje i kwoty z fakturą w Twoim programie.
    4. Treść jest ta sama: faktura już jest w KSeF. Nie wysyłaj jej ponownie. Zapisz numer KSeF z odrzucenia przy fakturze w programie lub w ewidencji. UPO dla oryginału szukaj w sesji, której numer podaje odrzucenie, a nie w nowej sesji. Na tym koniec.
    5. Treść jest inna: to konflikt numerów. Nadaj fakturze nowy, wolny numer z serii i wyślij ją jeszcze raz. Potem usuń przyczynę w numeracji, opisaną niżej.
    6. Treść prawie ta sama, ale przed ponowną wysyłką coś poprawiałeś. W KSeF obowiązuje oryginał, a Twoja poprawka do systemu nie trafiła. Wystaw do oryginału korektę.

    Najważniejsze ostrzeżenie: w sytuacji z punktu 4 nie zmieniaj numeru. Przy innym P_2 KSeF nie widzi duplikatu. Przyjmie fakturę jako nowy, osobny dokument z własnym numerem KSeF. Masz wtedy w KSeF dwie faktury na jedną sprzedaż. Drugiej nie usuniesz, trzeba ją skorygować do zera. Opisujemy to w tekście o anulowaniu faktury w KSeF. W tej sytuacji kod 440 to dobra wiadomość: faktura już jest w systemie, a jej numer KSeF masz w odrzuceniu.

    Jeżeli 440 dotyczy wielu faktur z jednej paczki, przejdź te kroki dla każdej z nich. Pozostałe faktury z paczki mają własne kody i własne przyczyny.

    Jak temu zapobiec

    • Jedna seria na jeden program. Jeżeli dla jednego NIP-u faktury wystawiają dwa systemy, każdy powinien mieć własny prefiks, na przykład FV/ i SKL/.
    • Rok w numerze. Seria liczona od 1 co rok musi zawierać rok. Seria miesięczna musi zawierać miesiąc i rok. Inaczej numer powtórzy się w ciągu 10 lat.
    • Jedno miejsce wysyłki. Ustal z klientem, kto wysyła jego faktury do KSeF: jego program czy Twoje biuro. Nigdy oba naraz.
    • Brak odpowiedzi to jeszcze nie błąd. Po przerwanym połączeniu najpierw sprawdź status sesji i listę faktur przyjętych w tej sesji. Dopiero potem decyduj o ponownej wysyłce.

    Kod 440 jako status sesji: „Sesja anulowana”

    Ten sam numer pojawia się też jako status całej sesji. Komunikat brzmi „Sesja anulowana”, a szczegóły podają jedną z dwóch przyczyn. MF doprecyzowało je w historii zmian API KSeF:

    • „Przekroczono czas wysyłki”: w sesji wsadowej,
    • „Nie przesłano faktur”: w sesji wsadowej i interaktywnej.

    Ten status nie ma nic wspólnego z duplikatami. Mówi, że sesja została anulowana. Faktury, które miały w niej pójść, wysyłasz od nowa w nowej sesji. Przedtem sprawdź tylko, czy program nie wysłał ich w międzyczasie w innej sesji.

    „Nie przesłano faktur”

    Program otworzył sesję, ale nie wysłał do niej żadnej faktury. Dokumentacja nie wyjaśnia przyczyn. Możliwe sytuacje: program przerwał pracę zaraz po otwarciu sesji albo pierwsza wysyłka została odrzucona już na wejściu, kodem z grupy 21xxx. Przykładem jest błąd 21405 w KSeF, czyli błąd walidacji samego żądania. Sprawdź log programu z chwili otwarcia sesji, usuń przyczynę i wyślij faktury w nowej sesji. KSeF tych faktur w ogóle nie sprawdzał, więc ten kod nic o nich nie mówi.

    „Przekroczono czas wysyłki”

    W sesji wsadowej KSeF czeka na przesłanie części paczki i zamknięcie sesji tylko przez ograniczony czas. Jeżeli program nie zdąży, sesja zostaje anulowana. Możliwe przyczyny to przerwane przesyłanie, wolne łącze przy dużej paczce albo program zatrzymany przed zamknięciem sesji. W logu możesz wtedy zobaczyć także HTTP 403 przy przesyłaniu części, z opisem „brak uprawnień do zapisu (np. upłynął czas na zapis)”, albo błąd 21208. Wyślij paczkę ponownie w nowej sesji. Jeżeli problem wraca przy dużych paczkach, wysyłaj mniejsze.

    Z naszej praktyki

    W FakturaFlow wysłaliśmy do produkcyjnego KSeF ponad 1 700 faktur, większość w sesjach wsadowych. Przy duplikatach przyjęliśmy jedną twardą zasadę. Nasza kolejka nigdy nie wysyła faktury drugi raz automatycznie, jeżeli nie wie na pewno, że pierwsza wysyłka się nie udała.

    Przykład: program wysłał fakturę, a potem stracił połączenie, zanim przyszła odpowiedź KSeF. KSeF mógł ją już przyjąć. Ślepe ponowienie skończyłoby się kodem 440. Gorzej, gdyby numer faktury w międzyczasie się zmienił: wtedy powstałby prawdziwy duplikat. Dlatego taka faktura po 60 minutach trafia do sprawdzenia przez człowieka i nigdy nie jest wysyłana ponownie sama.

    Przed każdą ponowną wysyłką po przerwie sprawdzamy status sesji i listę faktur już w niej przyjętych.

    FakturaFlow sprawdza każdą fakturę pod kątem reguł FA(3), zanim trafi do KSeF. Wysyła pojedyncze faktury i duże paczki w sesjach wsadowych, a UPO (Urzędowe Poświadczenie Odbioru) pobiera sam. Każdy błąd KSeF pokazuje po polsku, z informacją, co poprawić. W oknie „Szczegóły KSeF” widzisz historię statusów faktury, jej numer KSeF i link do strony weryfikacji MF. Działa obok Twojego programu księgowego. Zobacz, jak działa FakturaFlow.

    Podsumowanie

    Kod 440 przy fakturze to „Duplikat faktury”: KSeF ma już fakturę z tym samym NIP-em sprzedawcy, rodzajem i numerem. Porównaj ją z oryginałem: przy tej samej treści faktura już jest w KSeF i nie zmieniasz numeru, przy innej treści nadajesz nowy numer. Kod 440 przy sesji to „Sesja anulowana” i dotyczy wysyłki, a nie treści faktur. Pozostałe kody opisuje pełna lista 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.