Integrations

KSeF for WooCommerce and Shopify: how to connect your store

How a WooCommerce or Shopify store can issue KSeF invoices: plugin vs API, and what a KSeF API does for order-to-invoice automation.

Published 2 min readBy Tomek

Overview

A WooCommerce or Shopify store can issue KSeF invoices through a plugin or through a KSeF API such as Notaly's, which turns each order into a FA(3) invoice and submits it automatically. You do not need to write FA(3) XML or run your own KSeF integration. For most stores the API route is the fastest way to add e-invoicing without a Poland-specific engineering project.

What the store needs to do

KSeF (Krajowy System e-Faktur) is Poland's national e-invoicing platform operated by the Ministry of Finance (Ministerstwo Finansów). To issue a KSeF invoice from a store, each order must be mapped onto the FA(3) schema — seller and buyer identifiers, line items with quantities and prices, and the totals — then authenticated, encrypted and sent to KSeF, with the status and UPO read back and stored against the order.

A plugin does this inside your store platform. An API moves the work out of the store: your checkout or order webhook hands the order to the API, and the API returns the KSeF status. That keeps your store code unchanged and the e-invoicing logic in one place you can monitor.

Plugin vs API

A plugin is convenient when one exists for your exact platform and you accept its update cadence, because the Ministry's FA(3) schema and the KSeF API change over time. An API such as Notaly's owns those changes for you: you send a JSON order to POST /invoices, and Notaly generates and validates the FA(3) XML, submits it to KSeF and reports the status and UPO by webhook. The trade-off is a subscription instead of a one-time plugin.

A minimal order-to-invoice flow

Capture the order with a valid buyer NIP and line items, send it to the API, store the returned KSeF number and UPO against the order, and surface the status to the customer. Start in the KSeF TEST environment with a test token to confirm the flow, then switch to production. Keep the buyer's identifier and address clean, since those are the most common source of a rejected invoice.

Disclaimer

Notaly is not a tax, accounting or legal advisor. This article is general information, not tax advice, and may be outdated. You are responsible for your own VAT compliance; confirm with a qualified accountant where required.

Sources

Source: www.podatki.gov.pl

Frequently asked questions

Do I need to write FA(3) XML in WooCommerce?

No, if you use a KSeF API. Your store sends order data as JSON and the API generates and submits the FA(3) invoice.

Does Shopify support KSeF natively?

Not out of the box for Polish e-invoicing. You typically connect through a plugin or an API integration like Notaly's.

Can I test before going live?

Yes. Start in the KSeF TEST environment (or Notaly's sandbox) to validate the order-to-invoice flow before production.

Issue your first KSeF test invoice today

Create a sandbox account: API key in seconds, 3 free test invoices on KSeF TEST, no credit card.