Skip to main content
KSeF 2.0 · invoice status

Technical invoice statuses in KSeF: 550, 500, 405, 430 and 435

Five invoice statuses point to a problem in processing, not in the data on the invoice. Odoo handles them differently: four end in Rejected and a new sending, while 550, which Odoo does not know, leaves the invoice in Sent.

FlexigoTech · Editor in charge: Víctor Gómez · Updated 5 November 2026

Key facts

Module
KSeF 2.0
Versions
Odoo 17, 18, 19 and 20
Checked
in the module's source code, version 20.0 · against the sources linked at the end
Reading time
2 min

What KSeF says

CodeKSeF textStatus in Odoo 18, 19 and 20
550“Operacja została anulowana przez system” (cancelled by the system), details “Przetwarzanie zostało przerwane z przyczyn wewnętrznych systemu. Spróbuj ponownie” (stopped for internal reasons; try again)Stays Sent (In Progress)
500“Nieznany błąd ({statusCode})” (unknown error)Rejected, with KSeF's description
405“Przetwarzanie anulowane z powodu błędu sesji” (processing cancelled because of a session error)Rejected
430“Błąd weryfikacji pliku faktury” (invoice file verification error)Rejected
435“Błąd odszyfrowania pliku” (file decryption error)Rejected
KSeF technical invoice statuses card
Status 550 with its API text and the other technical statuses: 500, 405, 430 and 435.

550: the invoice is stuck in Sent

Odoo only maps codes 100, 150, 200, 405, 410, 415, 430, 435, 440, 450 and 500 to its own statuses. Anything else, 550 included, ends in the message “Unknown status received from KSeF (Code: 550): …” and leaves “KSeF Status” unchanged. So the invoice stays in Sent (In Progress), and Odoo does not show the reset-to-draft button on it.

KSeF says “try again”, but Odoo cannot do that from the invoice: it only sends invoices without a KSeF status. The “Check Sending” button and the scheduled action only ask again for the status, which will still be 550.

Getting out of this state needs a change outside Odoo's interface, so report it to your partner or whoever maintains your Odoo. This follows from the code of Odoo 18, 19 and 20; we have not tried it against production KSeF.

500, 405, 430 and 435: rejected, ready to send again

For these four Odoo sets the status to Rejected. For 500 it appends KSeF's description; for the others it shows its own fixed text. The KSeF documentation gives no list of causes for them beyond what the name says:

  • 405: processing was cancelled because of an error in the session the invoice was sent in;
  • 430: KSeF could not verify the invoice file itself;
  • 435: KSeF could not decrypt the file, which the sending program encrypts with AES-256-CBC and the key passed when the session opens.

Odoo builds and encrypts the file itself, so a recurring 430 or 435 points to the sending program, not to the invoice data.

Diagram: what KSeF returns for status 550 and what Odoo 20 shows
Diagram based on the l10n_pl_edi code of Odoo 20 and the KSeF API 2.9.0 specification; struck-through items are what Odoo does not keep or do.

What to do

  1. For 500, 405, 430 and 435, reset the invoice to draft (Odoo then clears its KSeF status and number), confirm it and send it again.
  2. For 550, check the status again with “Check Sending”. If it is still 550, processing was stopped and the invoice has to be sent again.
  3. Then pass it to whoever maintains your Odoo so it can be sent again. If you send it through another channel, it will stay in Sent in Odoo.

Our module, Poland KSeF 2.0 Validator, only takes the status from l10n_pl_edi: with a 550 the invoice stays Submitted there as well.

Keep reading

KSeF code 450: “Błąd weryfikacji semantyki dokumentu faktury”KSeF code 450 means the FA(3) invoice was rejected after its content was checked. Where the real reason is, what Odoo 18, 19 and 20 do not show and how to send it again.KSeF exceptions when sending an invoice: 21405, 21180, 21184 and the restKSeF exceptions when sending an invoice: 21405, 21001, 21155, 21166, 21167, 21173, 21180, 21184, 21402 and 21403. What they mean and how Odoo 18-20 show them.KSeF HTTP 429, 403 and 401: request limits and access deniedKSeF 2.0 answers 429 Too Many Requests over the limit, 403 with a reasonCode when access is missing and 401 on an expired token. Limits and what Odoo does.
Checked in the module's source code (version 20.0) and the linked sources

Sources