Saltar al contenido principal
KSeF 2.0 · envío de la factura

Excepciones de KSeF al enviar una factura: 21405, 21180, 21184 y el resto

Estos códigos llegan al instante, como respuesta HTTP 400 al envío de la factura, antes de que KSeF mire su contenido. En eso se diferencian de estados como el 450, que llegan después. En Odoo los ves junto con la respuesta completa de KSeF.

FlexigoTech · Responsable: Víctor Gómez · Actualizado el 5 de noviembre de 2026

Lo esencial

Módulo
KSeF 2.0
Versiones
Odoo 17, 18, 19 y 20
Comprobado
en el código del módulo, versión 20.0 · en las fuentes enlazadas al final
Lectura
4 min

Cómo verlos en Odoo

Cuando KSeF rechaza la petición, l10n_pl_edi en Odoo 18, 19 y 20 enseña en la factura «Error when sending invoices to the KSeF» y, debajo, «KSeF API Error: » con la respuesta tal como llegó, exceptionCode incluido. En la 18 y la 19 en polaco: «Podczas wysyłania faktur do KSeF wystąpił błąd» y «Błąd API KSeF: …». Si KSeF se niega ya al abrir la sesión, el mensaje empieza por «Failed to open KSeF session: ». La factura no recibe estado KSeF, así que, una vez corregida, la envías igual que antes.

Tarjeta de la excepción 21405 de KSeF con los códigos del envío
El código 21405 con su descripción de la API y el resto de excepciones que devuelve el envío de una factura en sesión interactiva.

Códigos, textos y qué hacer

CódigoTexto de KSeFQué hacer
21405«Błąd walidacji danych wejściowych.» (error de validación de los datos de entrada), details del validadorLee los details; el ejemplo de la documentación es «Wskazany kod formularza nie jest wspierany.» (código de formulario no admitido).
21001«Nieczytelna treść.» (contenido ilegible), details con una descripciónKSeF no pudo leer la petición; documentado en la API 2.9.0 y devuelto también antes.
21155«Przekroczono dozwoloną liczbę faktur w sesji.» (demasiadas facturas en la sesión)Una sesión admite hasta 10 000 facturas; hace falta una sesión nueva.
21173«Brak sesji o wskazanym numerze referencyjnym.» (no hay sesión con esa referencia)KSeF no conoce la sesión guardada en la empresa; Odoo no la cambia por su cuenta (abajo).
21180«Status sesji nie pozwala na wykonanie operacji.» (el estado de la sesión no lo permite), p. ej. «Status sesji {code} uniemożliwia wysyłkę faktur.»La sesión se cerró o caducó entre la comprobación y el envío.
21184«Sesja tymczasowo niedostępna.» (sesión no disponible por ahora), con details de mantenimientoKSeF aconseja probar más tarde o abrir otra sesión.
21402«Nieprawidłowy rozmiar pliku.» (tamaño de fichero incorrecto)El tamaño de la petición no cuadra con el contenido.
21403«Nieprawidłowy skrót pliku.» (huella de fichero incorrecta)La huella SHA-256 no cuadra con el contenido.
21166«Korekta techniczna niedostępna.» (corrección técnica no disponible)Va de la corrección técnica de una factura offline.
21167«Status faktury nie pozwala na korektę techniczną.» (el estado de la factura no permite corrección técnica)Igual: no hay corrección técnica para una factura procesada bien.

La sesión en Odoo

Odoo guarda el número de la sesión interactiva en la empresa. Antes de enviar pregunta a KSeF por su estado: si es 100, sesión abierta, la sigue usando; si no, abre otra con el formulario FA (3) 1-0E. Por eso el 21180 suele desaparecer en el intento siguiente. Con el 21173 es distinto: en el envío siguiente Odoo pregunta por esa misma sesión, recibe el mismo error («Failed to check KSeF session: …») y no abre otra. La sesión guardada solo se borra quitando el certificado KSeF en los ajustes y guardando, y volviendo a añadir el certificado después. Esto sale del código de Odoo; no lo hemos probado contra KSeF. Ante un 21184, KSeF sugiere una sesión nueva, pero Odoo solo la abre cuando la guardada deja de tener el estado 100; si el error se repite, espera, como aconseja el mensaje.

Los códigos 21402 y 21403 van de cálculos que hace el propio programa que envía: Odoo calcula la huella y el tamaño de la factura antes y después de cifrarla. Con un Odoo estándar no salen de los datos de la factura. Odoo no envía correcciones técnicas de facturas offline, así que el 21166 y el 21167 vienen de otro programa.

Antes de avisar del problema

  • Copia el mensaje entero de Odoo, con el JSON que sigue a «KSeF API Error:».
  • Apunta el código y el texto de details.
  • Mira si el error afecta a una factura o a todas las que se están enviando.
  • Mira si pasa en producción o en el entorno de pruebas.
Esquema: qué devuelve KSeF con la excepción 21405 y qué enseña Odoo 20
Esquema hecho a partir del código de l10n_pl_edi de Odoo 20 y de la especificación de la API de KSeF 2.9.0; lo tachado es lo que Odoo no guarda o no hace.

Estados de la propia sesión: 440 y 445

La sesión interactiva también tiene estado. El 440 «Sesja anulowana» (sesión anulada) con details «Nie przesłano faktur» significa que en la sesión no se envió ninguna factura, y el 445 «Błąd weryfikacji, brak poprawnych faktur», que ninguna pasó la verificación. Odoo solo mira si la sesión tiene el estado 100, así que no los enseñará; busca la causa en los estados de las facturas, como el 450.

Nuestro módulo, Poland KSeF 2.0 Validator, no envía facturas ni ve estos códigos; con la suscripción a FlexigoTech Cloud, si pulsas «Validate FA(3) (FlexigoTech Cloud)» antes de enviar la factura, revisa el fichero FA(3) contra el esquema. Ese resultado no frena el envío de l10n_pl_edi: una factura «Not valid» sale igual si la envías.

Sigue leyendo

Código 450 de KSeF: «Błąd weryfikacji semantyki dokumentu faktury»El código 450 de KSeF rechaza una factura FA(3) tras revisar su contenido. Dónde está el motivo real, qué no enseña Odoo 18, 19 y 20 y cómo volver a enviarla.Estados técnicos de la factura en KSeF: 550, 500, 405, 430 y 435Estados de factura de KSeF ajenos a su contenido: 550 «Operacja została anulowana przez system», 500, 405, 430 y 435. Qué hace Odoo y por qué el 550 sigue en Sent.KSeF HTTP 429, 403 y 401: límites de peticiones y acceso denegadoKSeF 2.0 responde 429 Too Many Requests al pasar el límite, 403 con reasonCode sin acceso y 401 con el token caducado. Límites y qué hacen Odoo 18, 19 y 20.
Comprobado en el código del módulo (versión 20.0) y en las fuentes enlazadas

Fuentes