Skip to content

KSeF integration

KSeF integration: invoices from your orders go straight to KSeF

OpenLinker builds the FA(3) invoice from the order itself, numbers it from your own series and sends it to KSeF, Poland’s national e-invoicing system. The KSeF number, the status and the UPO sit on the order, whether it came from your shop or a marketplace. You do not need a separate invoicing tool to issue them.

To get started you need:a KSeF token with permission to issue invoicesyour company’s NIP (Polish tax ID), name and address

  • 0 zł licence
  • No fee per order
  • You install it yourself, or we do it for you
Order
paid or shipped
marketplacesyour shop
invoice details →↓
OpenLinker
builds the FA(3) invoice
FA(3) invoice →↓
←↑ KSeF number, UPO
KSeF
assigns the number and UPO

In short. OpenLinker is open-source order management software with a free licence that builds FA(3) invoices for orders from shops and marketplaces and sends them straight to KSeF, Poland’s national e-invoicing system. The KSeF number and UPO appear on the order once KSeF accepts the invoice, and you issue corrections against the invoice exactly as it went to KSeF.

Sound familiar?

The invoice lives in another program

The order in one window, the invoicing tool in another. You copy the NIP, the lines and the delivery across, then check whether the invoice made it to KSeF.

“Is this invoice in KSeF yet?”

A customer or your accountant asks for the KSeF number, and you log in to yet another system to find it.

A correction against an invoice that no longer matches the order

The order changed after the invoice went out, yet the correction has to start from what actually went to KSeF. You hunt down the original lines by hand.

Monday: 60 invoices in KSeF and one correction, without opening a second program

  1. 08:10A café pays on a marketplace for an espresso machine and gives its NIP. You have issuing on payment switched on, so OpenLinker builds the FA(3) invoice itself, numbers it from your series and sends it to KSeF.
  2. 08:40KSeF has accepted the invoice. The KSeF number is already on the order, with a button next to it to download the UPO (KSeF’s official confirmation of receipt).
  3. 11:30A customer returns one of two mugs. You issue a correction against the invoice as it went to KSeF, and the correction gets its own KSeF number.
  4. 17:00End of the day: 60 invoices in KSeF. You find each one on its order and on the invoice list.
KSeF invoices, Monday 2 November 60 Example
ChannelBuyerInvoiceKSeF
AllegroKawiarnia Pod Lipą sp. z o.o.FV/2026/11/0001accepted
ShopAnna K.FV/2026/11/0014accepted
ERLIPiotr N.FV/2026/11/0027accepted
AllegroEwa L.FV/2026/11/0060sent, waiting for number
59 accepted, 1 waiting for its KSeF number. Plus 1 correction.
FV/2026/11/0001 Accepted in KSeF
BuyerKawiarnia Pod Lipą sp. z o.o., NIP 111-111-11-11
Amount1,299.00 zł gross
KSeF number1234563218-20261102-4A7C2E91B05D-11
UPOready to download on the invoice

60 invoices in KSeF with nothing retyped. Your part: one correction.

What OpenLinker does for you

  • Order paid or shippedOnce you switch on automatic issuing, the invoice is created on its own at the moment you chose. If the buyer gave a NIP, the invoice is made out to the company.
  • Invoice sentKSeF assigns the number in the background. OpenLinker checks for it itself and adds it to the invoice on the order, together with the UPO.
  • Invoice rejectedYou see the status on the invoice before the customer asks. You fix the details and issue it again.
  • Return or price changeThe correction starts from the invoice as it went to KSeF and gets its own KSeF number.
Technical details
When the invoice is created
by hand from the order, or automatically on payment or on shipping; manual to start with
Documents
VAT invoice and corrective invoice in the FA(3) schema
Numbering
assigned by OpenLinker from the series you set on the connection
KSeF number and UPO
checked automatically, every 30 minutes by default
Currencies
PLN, EUR, USD, GBP and CZK; in a foreign currency the VAT is also shown in zł at the NBP rate
Payment on the invoice
payment method, due date, bank account and early-payment discount from the connection settings
Verification code
a QR code linking to the invoice in KSeF on the invoice preview
When KSeF does not respond
the invoice is saved as waiting to be sent and is not lost
One order
one sales document, even after a retry or a dropped connection

Your rules run on their own

The document is created on its own after the order is paid or shipped, and rules decide which one and where. For example:

How automations work in OpenLinker
Example rule
When
An order is paid
Only if
the buyer gave a tax ID
Then
  1. Issue an e-invoice in KSeF

The KSeF number you see on the order

OpenLinker builds the invoice, and KSeF assigns the number once it accepts it: 35 characters in four parts. It appears on the order by itself, so you can answer a buyer without logging in to the KSeF Taxpayer Application.

The KSeF number, part by partExample
1234563218-20261102-4A7C2E91B05D-11
1234563218The seller’s NIP (Polish tax ID), so yours. 10 digits, not the buyer’s.
20261102The day KSeF accepted the invoice (YYYYMMDD).
4A7C2E91B05D12 characters assigned by KSeF.
11A checksum. It catches a typo when someone copies the number by hand.
  1. 1 February 2026
    KSeF becomes mandatory for businesses whose 2024 sales exceeded 200 mln zł.
  2. 1 April 2026
    KSeF becomes mandatory for everyone else.
  3. until 31 December 2026
    Invoices outside KSeF are still allowed while their gross total stays at or below 10 000 zł a month.
  4. 1 January 2027
    The act provides for penalties from this day. On 20 October 2026 the government adopted a bill that moves them to 31 December 2027. It is a bill, not law in force, and a later start for penalties does not lift the duty to issue invoices in KSeF.

As of 28 October 2026. Sources: ksef.podatki.gov.pl, gov.pl/web/finanse. This is not legal or tax advice.

You don’t have to take our word for it

You can check each of these yourself before you connect anything.

  • No invoice is issued twiceOpenLinker issues one document per order, even if the connection to KSeF drops halfway. When it is unclear whether an invoice arrived, it looks for it in KSeF first instead of blindly sending it again.See the KSeF integration code
  • Try the demoSign up for the demo and look through orders, shipments and documents on sample data before you connect your shop.Try the demo
  • The code is openYou or your implementation team can review the KSeF integration before you run anything.See the integration code
  • Nobody can take the licence away from youApache 2.0 can’t be revoked, and no feature sits behind a subscription. Any developer can keep building on the code.Licence

What you’ll pay each month

You pay nothing for the OpenLinker licence, however much you sell. You pay for the server, and its price grows with your traffic, not with each order.

Orders a monthRoughly per dayServer, estimatedLicence
up to 1,000about 30about 150 zł / month0 zł
up to 5,000about 150about 300 zł / month0 zł
up to 10,000about 300about 1,000 zł / month0 zł
up to 25,000about 800about 2,000 zł / month0 zł

The server figures are estimates from OpenLinker’s pricing. Add backups on top.

Bills that stay as they are

  • KSeFfree, it is run by the Ministry of Finance
  • Your accountanton your current terms, unchanged
  • OpenLinker fee per invoice0 zł, however many invoices you issue

Who sets it up

Yourself

Who sets it up
You or your implementation team. One command and the setup wizard are all it takes.
Who looks after it day to day
You
What you pay
The server from the table above
Installation guide

With an implementation partner

Who sets it up
An implementation agency of your choice
Who looks after it day to day
The partner, backed by us under an SLA
What you pay
The server and the partner’s service, at the partner’s prices
Ask about a partner

With us

Who sets it up
Us
Who looks after it day to day
Us
What you pay
The server and maintenance, priced individually
Ask for a quote

No agency? We’ll set it up with you and help you move over from your current system.

All integrations run on the same server, so adding another one doesn’t mean another subscription.

Who helps you

From setup to API changes, at every stage you know who is looking after it.

  1. At the start

    Getting set up

    Who: You, a partner or us

    You get a setup wizard and a step-by-step guide. If you’d rather not do it yourself, an implementation partner or we will set it up. We’ll set it up for you

  2. When something stops working

    Support under an SLA

    Who: Us

    You can report an outage that stops your sales at any time, weekends included. We take technical questions on working days from 9:00 to 17:00 and reply on the next working day. SLA levels

  3. When KSeF changes something

    Updates

    Who: Us

    We adapt the integration to API changes, and the fix ships in the next OpenLinker release. You install it yourself, or a partner or we do it for you.

Who to call for what

When something isn’t working, you know straight away who will fix it.

KSeF itself, outages, tokens and permissions in the Taxpayer Application
Poland’s Ministry of Finance
What goes on the invoice: VAT rates, tax treatment, buyer details
You or your accountant
Building the FA(3) invoice, sending it to KSeF, the KSeF number and UPO on the order
OpenLinker

Your installation belongs to you: it runs on your server, your orders and customer data sit in your database, and the code is open under the Apache 2.0 licence.

How to get started

  1. In the KSeF Taxpayer Application (Aplikacja Podatnika), generate a token and tick only the permission to issue invoices.
  2. In OpenLinker, add a KSeF connection, enter your company’s NIP, name and address, paste the token and click Test connection.
  3. Set up your invoice numbering and choose when invoices are created: by hand, on payment or on shipping.

KSeF shows the token only once. Copy it straight away somewhere safe, such as a password manager.

Rather not do it yourself? We’ll set it up for you. Step-by-step guide.

Questions about the KSeF integration

Do I need an invoicing tool to issue invoices in KSeF?

No. OpenLinker builds the FA(3) invoice from the order and sends it to KSeF itself. If you already keep your invoices in inFakt, you can stay with it: the inFakt integration sends invoices to KSeF for you.

How does OpenLinker know the buyer wants a company invoice?

From the order. Allegro and ERLI pass on the NIP when the buyer asks for a VAT invoice, PrestaShop when it is entered in the address, and WooCommerce when the shop has a NIP plugin. An invoice issued automatically carries that NIP.

When will I see the KSeF number?

Once KSeF accepts the invoice. KSeF assigns the number in the background, and OpenLinker checks for it itself, every 30 minutes by default, then adds it to the invoice on the order together with the UPO.

Can I invoice in euros?

Yes, and in dollars, pounds and Czech koruna too. OpenLinker also shows the VAT amount in zł, at the NBP (National Bank of Poland) average rate.

I already issue invoices from another tool. How do I switch without two invoices in KSeF?

One channel at a time. Switch invoicing off for that channel in the old tool first, then switch it on here. OpenLinker issues only one document per order in any case.

OpenLinker at a glance

What it is
Open-source order management and e-commerce integration software
Licence
Apache 2.0, 0 zł
Fee per order
None
Where it runs
On your own server, or set up by us or an agency

See an invoice with its KSeF number on the order in the demo

Sign up for the demo and look round a connected KSeF account: invoices on orders, KSeF numbers, statuses and corrections, all on sample data.

No agency? Join our design partner programme and we’ll set it up together.

Code for this integration: libs/integrations/ksef on GitHub