{"id":391197,"date":"2026-10-26T10:24:52","date_gmt":"2026-10-26T10:24:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ksef-faktury-for-woocommerce\/"},"modified":"2026-10-26T22:17:47","modified_gmt":"2026-10-26T22:17:47","slug":"ksefshop-invoices","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ksefshop-invoices\/","author":23590628,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.1","stable_tag":"0.1.1","tested":"7.1.4","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Ksefshop Invoices for WooCommerce","header_author":"Lytvynov Production","header_description":"Sends paid B2B orders (with the buyer's NIP) to the Ksefshop invoicing service (ksefshop.pl), which issues FA(3) invoices in the Polish National e-Invoice System (KSeF), corrections for refunds and PDF copies. Adds a NIP field to checkout.","assets_banners_color":"39846a","last_updated":"2026-10-26 22:17:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ksefshop.pl\/","header_author_uri":"https:\/\/ksefshop.pl","rating":0,"author_block_rating":0,"active_installs":0,"downloads":71,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"ksefshop","date":"2026-10-26 10:24:22","revision":3766115},"0.1.1":{"tag":"0.1.1","author":"ksefshop","date":"2026-10-26 22:17:47","revision":3767415}},"upgrade_notice":{"0.1.1":"<p>Prevents duplicate KSeF invoices when an order changes status. Recommended for all stores.<\/p>","0.1.0":"<p>First version.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3766115,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3766115,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3766115,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3766115,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0","0.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Settings page (WooCommerce &gt; Ksefshop Invoices) with the result of \"Test connection\".","2":"KSeF invoice box on the order screen: status, invoice number, KSeF number and PDF link.","3":"\"I want a VAT invoice\" checkbox and NIP field in the block checkout.","4":"Invoice download link on the buyer's order page."}},"plugin_section":[],"plugin_tags":[271037,288669,12480,252347,26389],"plugin_category":[45],"plugin_contributors":[288670],"plugin_business_model":[],"class_list":["post-391197","plugin","type-plugin","status-publish","hentry","plugin_tags-e-faktura","plugin_tags-faktura-vat","plugin_tags-invoice","plugin_tags-ksef","plugin_tags-nip","plugin_category-ecommerce","plugin_contributors-ksefshop","plugin_committers-ksefshop"],"banners":{"banner":"https:\/\/ps.w.org\/ksefshop-invoices\/assets\/banner-772x250.png?rev=3766115","banner_2x":"https:\/\/ps.w.org\/ksefshop-invoices\/assets\/banner-1544x500.png?rev=3766115","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ksefshop-invoices\/assets\/icon-128x128.png?rev=3766115","icon_2x":"https:\/\/ps.w.org\/ksefshop-invoices\/assets\/icon-256x256.png?rev=3766115","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>From 2026 VAT invoices to Polish companies have to be issued in KSeF (Krajowy System e-Faktur), the National e-Invoice System of the Polish Ministry of Finance. Ksefshop Invoices for WooCommerce connects your shop to the Ksefshop invoicing service (ksefshop.pl), which builds the structured FA(3) invoice, sends it to KSeF with your own KSeF certificate or token and returns the KSeF number and a PDF.<\/p>\n\n<p>Not affiliated with the Polish Ministry of Finance or WooCommerce\/Automattic.<\/p>\n\n<p><strong>What the plugin does<\/strong><\/p>\n\n<ul>\n<li>Adds an \"I want a VAT invoice\" checkbox and a NIP field to checkout, with NIP checksum validation. Works with the classic checkout and the block checkout (WooCommerce 8.9+). Can also read a NIP collected by another plugin (enter its order meta key).<\/li>\n<li>When an order with a NIP is paid, sends it to the service in the background (Action Scheduler, bundled with WooCommerce). The service issues the FA(3) invoice in KSeF and returns the invoice number, KSeF number and PDF.<\/li>\n<li>Turns refunds into correction invoices (faktura korygujaca) that refer to the original KSeF number.<\/li>\n<li>Shows status, invoice number, KSeF number and a PDF link (with the KSeF verification QR code) in a box on the order screen, with \"Refresh status\" and \"Send again\" buttons.<\/li>\n<li>Shows the PDF link to the buyer on their order page.<\/li>\n<li>Retries automatically when your server or the service is briefly unavailable. A retry never creates a second invoice (idempotency keys).<\/li>\n<li>Compatible with HPOS (custom order tables). Works on small shared hosting: the KSeF work (FA(3) XML, KSeF sessions, encryption, status polling, PDF rendering) runs on the service, not on your server.<\/li>\n<\/ul>\n\n<p>Orders without a NIP are never sent: B2C receipts stay in your shop.<\/p>\n\n<p><strong>Free and paid plans<\/strong><\/p>\n\n<p>The plugin is free (GPLv2 or later) and every feature of the plugin works for every user; nothing in the plugin is locked, time-limited or unlocked by a licence key. The plugin has no upgrade prompts.<\/p>\n\n<p>Invoices are issued by the Ksefshop service, which needs an account on the service:<\/p>\n\n<ul>\n<li>Free plan: 5 invoices per month, no payment details needed.<\/li>\n<li>Paid plans: 29, 59 or 99 PLN per month (net) for more invoices per month. Paid plans are bought and billed on the service website (payments handled by Paddle), never inside WordPress.<\/li>\n<\/ul>\n\n<p>The monthly limit is applied by the service, not by the plugin: over the limit, orders wait and keep their place in the invoice numbering until the next month or a plan change. Current plans and prices: https:\/\/ksefshop.pl\/#cennik<\/p>\n\n<p><strong>Test mode<\/strong><\/p>\n\n<p>A test API key (sk_test_...) sends invoices to the official KSeF test environment only. They have no legal effect, so you can try the whole flow before going live with a live key (sk_live_...).<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin is a client of the <strong>Ksefshop<\/strong> invoicing service operated by LLC Lytvynov Production (https:\/\/ksefshop.pl). Ksefshop is an independent service, not affiliated with the Polish Ministry of Finance. The service is required: it is what issues the invoices in KSeF. The plugin cannot issue invoices without it.<\/p>\n\n<p>The plugin connects to the service only after an administrator has entered the API URL and the secret API key on the WooCommerce &gt; Ksefshop Invoices settings page. Nothing is sent before that. Requests go to the API URL you entered (normally https:\/\/app.ksefshop.pl).<\/p>\n\n<p>What is sent and when:<\/p>\n\n<ul>\n<li>When an order that has a buyer NIP is paid (payment complete, or the order is set to Processing or Completed), and when you press \"Send again\" on the order: order number and dates, status, currency, buyer NIP and company name, billing name, address and email, ordered items (name, SKU, quantity, prices, taxes), shipping and fee lines, tax rates and the payment method name. Orders without a NIP are not sent.<\/li>\n<li>When such an order is refunded: the refund (date, amount, reason, refunded items, shipping and fees) together with the order data above.<\/li>\n<li>When the invoice status is checked (automatically after sending, or with \"Refresh status\"): the invoice ID only.<\/li>\n<li>When you press \"Test connection\": no order data.<\/li>\n<\/ul>\n\n<p>Every request goes to the API URL you entered (https:\/\/app.ksefshop.pl, over HTTPS) with your secret API key (Authorization: Bearer) and a User-Agent header with the plugin version and your site address. The buyer's IP address, browser user agent, phone number and customer account ID are not sent.<\/p>\n\n<p>The service then sends the invoice to KSeF, the system of the Polish Ministry of Finance (https:\/\/ksef.podatki.gov.pl), using your KSeF certificate or token, stores the invoice for the period required by tax law and may email the PDF to the buyer. The PDF link shown to you and to the buyer points to the service.<\/p>\n\n<ul>\n<li>Terms of service: https:\/\/ksefshop.pl\/regulamin-sprzedaz\/ (English: https:\/\/ksefshop.pl\/en\/terms-direct\/)<\/li>\n<li>Privacy policy: https:\/\/ksefshop.pl\/polityka-prywatnosci\/ (English: https:\/\/ksefshop.pl\/en\/privacy\/)<\/li>\n<li>Refund policy: https:\/\/ksefshop.pl\/zwroty\/ (English: https:\/\/ksefshop.pl\/en\/refunds\/)<\/li>\n<li>Contact: kontakt@ksefshop.pl<\/li>\n<\/ul>\n\n<p>The plugin adds a suggested paragraph about this data transfer to Settings &gt; Privacy (privacy policy guide).<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin. WooCommerce must be installed and active.<\/li>\n<li>Get an API key for the Ksefshop service (see https:\/\/ksefshop.pl, or write to kontakt@ksefshop.pl). On the service, enter your company data and connect your KSeF certificate or token, or start with a test key.<\/li>\n<li>In WordPress go to WooCommerce &gt; Ksefshop Invoices, enter the API URL (https:\/\/app.ksefshop.pl) and the API key, save, and press \"Test connection\".<\/li>\n<li>Make sure your WooCommerce taxes use Polish VAT rates (23%, 8%, 5% or 0%).<\/li>\n<li>Place a test order with a NIP, mark it as paid and watch the KSeF invoice box on the order screen.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20the%20plugin%20free%3F\"><h3>Is the plugin free?<\/h3><\/dt>\n<dd><p>Yes. The plugin is free and has no locked features. The Ksefshop service has a free plan with 5 invoices per month and paid plans (29, 59 or 99 PLN per month) for more invoices, billed on the service website.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20account%20on%20an%20external%20service%3F\"><h3>Do I need an account on an external service?<\/h3><\/dt>\n<dd><p>Yes. The invoices are built and sent to KSeF by the Ksefshop service, so you need an account and an API key there. See the \"External services\" section for what is sent and when.<\/p><\/dd>\n<dt id=\"who%20operates%20the%20service%3F\"><h3>Who operates the service?<\/h3><\/dt>\n<dd><p>LLC Lytvynov Production. Contact: kontakt@ksefshop.pl.<\/p><\/dd>\n<dt id=\"does%20every%20buyer%20have%20to%20give%20a%20nip%3F\"><h3>Does every buyer have to give a NIP?<\/h3><\/dt>\n<dd><p>No. Only buyers who want a VAT invoice for their company tick the checkbox and enter a NIP. Orders without a NIP are not sent anywhere.<\/p><\/dd>\n<dt id=\"i%20already%20collect%20the%20nip%20with%20another%20plugin.\"><h3>I already collect the NIP with another plugin.<\/h3><\/dt>\n<dd><p>Turn off \"NIP at checkout\" in the settings and enter the order meta key that the other plugin uses (for example _billing_nip). The NIP will be read from there.<\/p><\/dd>\n<dt id=\"where%20is%20my%20ksef%20certificate%20or%20token%20stored%3F\"><h3>Where is my KSeF certificate or token stored?<\/h3><\/dt>\n<dd><p>On the service, encrypted (AES-256-GCM). It is never stored in WordPress.<\/p><\/dd>\n<dt id=\"which%20currencies%20are%20supported%3F\"><h3>Which currencies are supported?<\/h3><\/dt>\n<dd><p>PLN and the currencies of the NBP table A. For invoices in a foreign currency the VAT amount is converted to PLN at the NBP rate of the day before payment.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20service%20or%20my%20server%20is%20down%3F\"><h3>What happens when the service or my server is down?<\/h3><\/dt>\n<dd><p>The order waits in the Action Scheduler queue and is retried automatically (from 1 minute up to 12 hours). Idempotency keys make sure a retry never creates a second invoice.<\/p><\/dd>\n<dt id=\"what%20if%20ksef%20rejects%20an%20invoice%3F\"><h3>What if KSeF rejects an invoice?<\/h3><\/dt>\n<dd><p>The order box shows the error returned by KSeF. Fix the cause (for example a wrong VAT rate) and press \"Send again\".<\/p><\/dd>\n<dt id=\"can%20i%20test%20without%20issuing%20real%20invoices%3F\"><h3>Can I test without issuing real invoices?<\/h3><\/dt>\n<dd><p>Yes. Use a test key (sk_test_...): invoices go to the official KSeF test environment and have no legal effect.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translated%20into%20polish%3F\"><h3>Is the plugin translated into Polish?<\/h3><\/dt>\n<dd><p>The plugin is written in English and translated into Polish through translate.wordpress.org.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>An order that already has a KSeF invoice is never sent again when its status changes (for example on-hold to processing, or refunded back to completed). The plugin only refreshes the invoice status.<\/li>\n<li>\"Send again\" is hidden once the order has an invoice.<\/li>\n<li>Polish translation included in the plugin (used until the translate.wordpress.org language pack is ready).<\/li>\n<li>If an order is edited after its invoice was issued, the plugin links the existing invoice and adds an order note asking to record the difference as a refund (correction).<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First version: NIP field (classic and block checkout), sending paid orders and refunds, status, KSeF number and PDF on the order.<\/li>\n<\/ul>","raw_excerpt":"Issues Polish KSeF e-invoices (FA(3)) for paid WooCommerce orders with a NIP via the Ksefshop service: NIP at checkout, refund corrections, PDF.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/391197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=391197"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ksefshop"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=391197"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=391197"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=391197"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=391197"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=391197"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=391197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}