It validates and prepares; sending is l10n_pl_edi's job
The first thing to get straight is who does what. The module validates and prepares, and it has no HTTP client towards KSeF. The actual submission is done by l10n_pl_edi, the Odoo Community module that sends to KSeF and exists in Odoo 18, 19 and 20 (it does not exist in Odoo 17).
That shapes how it works on each version: on 18 to 20, the module validates the FA(3) that l10n_pl_edi generates or has already sent; on 17, the FA(3) is uploaded ready-made from outside Odoo. The module is published on Odoo Apps for 17.0, 18.0, 19.0 and 20.0.
FA(3) validation runs in FlexigoTech Cloud with the subscription. The Odoo Apps listing flags this in its own section, Before you buy: this app uses a paid external service. If you are still weighing up whether it suits you, we cover that separately in whether Poland KSeF 2.0 Validator fits your company.
The menus that appear under KSeF
Once installed, you get a KSeF root menu laid out like this:
KSeF › DashboardKSeF › MigrationKSeF › Operations, withKSeF › Operations › Submission QueueandKSeF › Operations › Inbound InvoicesKSeF › Configuration, withKSeF › Configuration › Compliance Profile,KSeF › Configuration › FA(3) Fields,KSeF › Configuration › Error CodesandKSeF › Configuration › API Sessions
The KSeF › Dashboard is a kanban view; the screenshot shows one company's card.

The module versus l10n_pl_edi, piece by piece
This table compares what each one does according to its documentation.
| Aspect | Odoo's l10n_pl_edi | Poland KSeF 2.0 Validator |
|---|---|---|
| Where it is | Odoo Community 18, 19 and 20; not in 17 | Odoo Apps for 17.0, 18.0, 19.0 and 20.0 |
| Actual submission to KSeF | Done by it | No HTTP client towards KSeF |
| FA(3) on Odoo 18 to 20 | Generates and sends it | Validates the one l10n_pl_edi generates or has already sent |
| FA(3) on Odoo 17 | The module does not exist | Uploaded ready-made from outside Odoo |
| FA(3) validation | - | In FlexigoTech Cloud, with a signed report |
| Credentials | On Odoo 19 stores a KSeF Certificate on the company and authenticates with it | Has a KSeF Credential (certificate / token) model |
| Scheduled actions | On Odoo 19, an action renews the access tokens of each company with a certificate | KSeF: session maintenance, every 5 minutes |
In practice they are not alternatives; they complement each other. On 18 to 20, sending is done by l10n_pl_edi, and the validator checks the FA(3) that module generates or has already sent. On 17 there is no l10n_pl_edi, and the validator works with the FA(3) uploaded ready-made from outside Odoo.
The module's credentials have their own list.

With the service active and without it
Because validation depends on FlexigoTech Cloud, the module behaves differently depending on the subscription status.
| Aspect | Active subscription | No subscription or service suspended |
|---|---|---|
| FA(3) validation | Runs in FlexigoTech Cloud and keeps a signed report | Stops; the invoice stays not validated |
| What the subscription provides | Available | Stops |
| Your data | In your Odoo | Stays in your Odoo |
The module also has a consent record, Consent to validate FA(3) files in FlexigoTech Cloud. With the subscription, the module for new Odoo versions is included if you bought it on flexigotech.com; on the Odoo App Store, each Odoo version is bought there. The local service costs €29/month or €290/year excluding VAT, and the Pro plan €58/month or €580/year excluding VAT.
What an invoice goes through inside the module
On Odoo 18 to 20, l10n_pl_edi generates the FA(3) and does the actual submission to KSeF; the validator validates in FlexigoTech Cloud the FA(3) that l10n_pl_edi has generated or already sent, and keeps the signed report. If the service is unavailable, the invoice stays not validated.
The module defines KSeF Submission Queue Item records, and the KSeF › Operations › Submission Queue menu gives you the queue list.

Offline pendiente, Accepted and Ready to upload to KSeF.In offline mode, the deadline runs to the next Polish working day, with a daily reminder. The module includes a wizard called KSeF Offline/Emergency Mark Wizard.
Around that path, the module defines other records with these names:
KSeF Inbound Invoice, alongside theKSeF › Operations › Inbound InvoicesmenuKSeF Immutable Audit LogKSeF API Error Code, alongside theKSeF › Configuration › Error CodesmenuFA(3) Mandatory Field ReferenceKSeF Compliance ProfileKSeF Authorization / DelegationKSeF Migration Validator Wizard,KSeF Migration Validation Run,KSeF Validation ResultandKSeF Validation IssueKSeF Compliance Export Wizard
The scheduled action that runs on its own
The module's documentation lists the KSeF: session maintenance action, active and set to run every 5 minutes. In the configuration you also have the KSeF › Configuration › API Sessions menu, and the module stores KSeF API Session records.
Do not mix it up with l10n_pl_edi's action on Odoo 19, which renews the access tokens of each company with a certificate: that one belongs to Odoo, not to the validator.
If you see both actions in your database, each belongs to a different module.
How FlexigoTech can help
At FlexigoTech we implement Odoo 17, 18, 19 and 20 and build bespoke connectors and integrations. If you want the validator to work alongside l10n_pl_edi on your version, or need to validate on Odoo 17 the FA(3) you produce outside Odoo, you will find the details and purchase options on the module page and its Odoo Apps listing.
Keep reading
Checked in the module's source code (version 20.0) and the linked sources
Sources
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/ksef_menus.xml
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): data/ksef_cron.xml
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): static/description/index.html
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_api_session.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_audit_log.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_authorization.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_cloud.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_compliance_profile.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_credential.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_error_code.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_fa3_field.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_inbound_invoice.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_queue_item.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_session.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_validation.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): wizard/ksef_cloud_consent.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): wizard/ksef_export_wizard.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): wizard/ksef_migration_wizard.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): wizard/ksef_offline_mark_wizard.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): wizards/ksef_migration_validator.py
- apps.odoo.com/apps/modules/20.0/flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati
- github.com/odoo/odoo/tree/18.0/addons/l10n_pl_edi
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati (cbca26e): models/account_move.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati (cbca26e): models/ksef_session.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati (cbca26e): models/ksef_tools.py
- Module source code: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati (cbca26e): models/ksef_cloud.py
- github.com/odoo/odoo/blob/19.0/addons/l10n_pl_edi/models/res_company.py
- flexigotech.com/en/services.html
- flexigotech.com/precios.html
