Turn your WooCommerce orders into compliant electronic invoices: generate XML and PDF for free, then send them to SdI (Italy), PEPPOL (Belgium and the EU), KSeF (Poland) or ZUGFeRD (Germany).
POP collects the fiscal data at checkout, generates the invoice from each order, handles numbering, VAT treatment and credit notes, and transmits the structured XML to the official network, all from one WordPress workflow, with free and paid plans.
Get started without an account
Install the plugin and start generating compliant XML and PDF invoices right away, at no cost, with no account and no setup step required. A free monthly generation allowance is included out of the box.
When you're ready to send documents through a supported network like SdI, PEPPOL or KSeF, or connect a provider such as Fatture in Cloud, Aruba, Zoho or PEC, a short setup wizard built directly into the plugin guides you through connecting your free POP account, right inside your WordPress admin.
Every plan, including Free, can use every supported network and integration. Your plan sets your monthly credit allowance, not which features you can use.
After you install
- Generate XML and PDF invoices from your orders straight away, without an account, within the free monthly allowance.
- When you want to send to a network, a 4-step wizard connects a free POP account: email, one-time code, company details, pick a channel.
- Your first invoice reaches SdI (or PEPPOL / KSeF) from the same screen.
Who POP is built for
- Italian WooCommerce stores that need every order to become an SdI invoice automatically
- Sole traders and flat-rate ("forfettario") businesses covered by Italy's 2024 e-invoicing obligation
- Stores selling B2B cross-border that need VAT treatment, reverse charge and PEPPOL handled
- Agencies and developers running invoicing for multiple WooCommerce stores
Core features
- Automatic electronic invoice generation in XML format for completed orders
- Branded PDF invoice generation with custom logo and footer text
- Manual PDF and XML download from the order and document management screens
- Credit note generation in XML and PDF format, where supported by the selected workflow, on any plan including Free
- Fiscal receipt support, where supported by the configured country and integration
- Custom invoice numbering with prefix, suffix, digit length and yearly reset
- Progressive numbering for invoices, credit notes and receipts
- Checkout fields for VAT number, tax ID, destination code, PEPPOL ID and other workflow-specific fiscal data
- VAT number and tax ID validation at checkout, where supported
- Tax regime, VAT treatment, exemption and reverse-charge configuration
- Automatic blocking of zero-total invoices
- Option to exclude zero-value line items from invoices
- Invoice search and filters by date, type, order status, invoice number and order ID
- Automatic PDF invoice email delivery
- HTML invoice display for customer-facing workflows
- HPOS-ready WooCommerce invoice and document management
- No limit on the number of WordPress installations and supported integrations
Supported transmission networks
- PEPPOL for supported European B2B interoperability workflows, where enabled
- KSeF for structured Polish e-invoicing workflows, where enabled
- SdI for direct transmission of structured XML invoices, where enabled
- ZUGFeRD / Factur-X for supported German hybrid PDF/XML document workflows, where enabled
POP supports B2B e-invoicing use cases. B2G use cases are not currently supported.
Integrations
POP connects WordPress invoicing workflows with supported e-commerce platforms, membership systems, automation tools, national networks and document providers.
POP supports WooCommerce, WooCommerce Subscriptions, Paid Memberships Pro and other WordPress invoicing workflows. It is also available for Shopify:
https://apps.shopify.com/pop-european-invoicing
Supported countries and workflows
POP works at two levels depending on the country, endpoint and configured integration, on any plan including Free.
Full compliance solution:
- Italy and San Marino: structured XML invoice generation, SdI transmission, and electronic signature or compliant archiving where enabled by the selected workflow
- Belgium: structured B2B e-invoicing and PEPPOL transmission (mandatory for domestic B2B between VAT-registered businesses since January 1st, 2026)
Format generation and network submission where your endpoint supports it:
- Germany: ZUGFeRD / Factur-X and PEPPOL documents
- France, Netherlands, United Kingdom: PEPPOL-based workflows
- Poland: KSeF structured XML transmission
Regulatory obligations, timelines and accepted channels vary by jurisdiction, business type and transaction type; users remain responsible for verifying the requirements that apply to their specific case. Coverage is expanding; more markets are on the roadmap.
For developers
POP also exposes a REST API, WP-CLI commands (
wp popapi invoice search|get|xml|pdf) and an
MCP endpoint for AI-assisted and scripted invoicing, plus WordPress Abilities for automation-aware workflows. The API powers the plugin itself; most stores never need to touch it.
Supported document formats
- Structured XML e-invoices, including UBL where applicable
- PDF invoice copies as human-readable representations
- XML and PDF credit notes, where supported by the selected workflow, on any plan including Free
- Fiscal receipts, where supported by the configured workflow
- ZUGFeRD document bundles for supported German workflows
API credits and plans
POP is available in five plans: Free, Basic, Growth, Pro and Enterprise. The Free plan includes 10 API credits per month.
Every plan, including Free, can use every supported network and integration: SdI, PEPPOL, KSeF, ZUGFeRD, Zoho, Aruba, Fatture in Cloud and PEC are all available regardless of plan. Your plan sets your monthly credit allowance and overquota rate, not which features you can use.
A credit is the unit used to measure credit-consuming API operations, such as generating or validating XML, submitting a document to a supported network, applying an electronic signature or activating compliant archiving when enabled. Credit consumption depends on the operation performed, country and workflow.
For paid features, visit:
https://popapi.io/pricing/.
Supported payment methods
- Cash
- Bank Transfer
- Check
- Payment Cards
- SEPA Direct Debit
Compatibility
POP is compatible with the latest versions of WordPress and WooCommerce:
- WooCommerce: 9.x.x or higher, with HPOS support
- PHP: 7.4 or higher
- WordPress: 4.6 or higher
For HPOS and optimal performance, we recommend using WordPress 6.x.x and WooCommerce 9.x.x and up.
Why POP
E-commerce invoicing is becoming more structured, more local and more connected to national systems. A WooCommerce store may need to collect the right fiscal data at checkout, generate XML invoices, submit documents through SdI, PEPPOL or KSeF, manage credit notes and keep invoice files available for accounting or customer support.
POP was created to make European e-invoicing easier for e-commerce teams: less manual work, fewer disconnected tools and a clearer path from order data to structured invoice documents.
We can’t make compliance sexy, only easier.
Contributions
"POP – e-invoicing for WooCommerce (ex-WooPop)" is open source software.
Contribute to its development to continuously improve the plugin!
This section describes how to install and run the plugin.
- Upload the 'woopop-electronic-invoice-free' folder to the /wp-content/plugins/ directory.
- Activate POP – e-invoicing for WooCommerce (ex-WooPop) from the WordPress 'Plugins' page.
7.1.1 - 29/09/2026
- Fixed: the "Contact us" link on the settings page is now shown as the intended green button in the corner of the screen; a missing closing bracket in the admin stylesheet had silently dropped that style (and the "share anonymous usage data" notice spacing next to it) since it was introduced.
- Removed: the third-party chat widget on the settings page is gone; "Contact us" is now a simple, styled link to the support ticket page on every package, with nothing loaded from outside WordPress.org.
7.1.0 - 29/09/2026
- Fixed: the POP orders list no longer stops with a fatal error when a refund contains an item whose product has been deleted; the list loads and the item simply has no SKU.
- Fixed: a credit note that refunds a line whose product was deleted from the shop now keeps that line in the generated document; before, the line was left out and the document total did not match its lines.
- Fixed: "Download CSV orders" no longer stops with a fatal error when the list includes a credit note with a line whose product was deleted from the shop.
- Fixed: the PEPPOL panel of a WooCommerce credit note now shows the create and status buttons when the customer of the original order is a business with a VAT number; before, it always showed the "business customers only" notice.
- Fixed: the KSeF panel of a WooCommerce credit note now correctly shows the "business customers only" notice when the customer of the original order is private; before, the notice never appeared for a credit note and a KSeF document could be attempted for a private customer.
- Fixed: orders from customers outside the EU now use the exemption code and normative reference you set for non-EU customers, instead of a default code. This includes non-EU companies with a VAT number, and non-EU private customers on Paid Memberships Pro and Cozmos.
- Fixed: saving or importing the POP settings can now only change POP's own options. Other WordPress options contained in an imported file or in a tampered form are ignored, and imported values are cleaned like the ones typed in the form.
- Improved: the folders where generated documents are saved (XML, PDF, UBL, KSeF, ZUGFeRD) are now created only when a document of that type is generated, instead of all of them for every document.
- Improved: generated XML and PDF documents, and the diagnostic logs of the integrations, are now stored and read through the WordPress uploads folder wherever it is located, instead of assuming it sits inside wp-content. Documents already generated keep working.
- Fixed: the deactivation feedback pop-up, the list of required Italian fields in the settings, the SdI error details and the Cozmos tax label were always shown in Italian, whatever the site language. They now follow your language, with the Italian, Spanish, French and Dutch (Belgium) translations kept.
- Improved: POP's admin styles and scripts now load only on POP's own screens (the POP settings, WooCommerce orders and products, user profiles, the plugins list and the supported membership plugins) instead of on every admin page, so other screens such as the dashboard are no longer touched.
- Changed: sharing anonymous usage data with POP (site address and plugin, WordPress, WooCommerce and PHP versions) is now optional and off by default. You can turn it on at the end of the account setup wizard or in the General tab, and off again at any time; nothing is sent until you do.
- Changed: POP no longer checks for or deactivates other plugins on its own; the leftover handling of old standalone add-ons is removed.
- Added: a "Contact us" link to the support ticket page on the POP settings screen.
- Added: the plugin is now available in Belgian French and Belgian Dutch, using the local invoicing terms ("note de crédit", "creditnota", "btw-nummer") for Belgian shops.
- Fixed: PDF documents for Belgian customers are now generated in Dutch or French, following your store's language, instead of always in English.
- Fixed: Slack notifications sent by the SdI/PEC, Aruba and Fatture in Cloud integrations now use a verified secure connection and a short timeout, so a slow or unreachable Slack can no longer hold up your invoicing.
- Fixed: WooCommerce shops in Belgium now send their Peppol invoices through the Belgian network instead of the international one, so the delivery status can be checked again.
- Fixed: the confirmation shown after saving the settings, the warning about a next invoice number that is too low and the "License info updated" message were hidden on the POP settings page and are visible again.
- Fixed: the text of the account setup wizard no longer shows apostrophes as "'" in languages such as Italian (for example in the final consent step).
- Fixed: when the account setup wizard was left before its last step, reconnecting no longer skips the step with the required terms; they are asked until they have been accepted once, and not again after that.
- Fixed: the newsletter and disclaimer consents ticked at the end of the account setup wizard are now saved with the account, also when the delivery channels step is skipped.
- Fixed: the free-plan credit banner, the connect-your-account nudge and the API-limit notice were hidden on the POP settings page and are visible again.
7.0.3 - 17/09/2026
- Fixed: the "Update license info" action in the General settings tab now requires a valid request from the page itself, instead of accepting any request that named it.
- Changed: renamed 6 developer-facing hooks to carry the plugin's own prefix, avoiding collisions with hooks from other plugins or themes:
billing_invoice_fields_priority -> wc_el_inv-billing_invoice_fields_priority, billing_invoice_field_args -> wc_el_inv-billing_invoice_field_args, popapi_cli_init -> wc_el_inv-popapi_cli_init, pop_use_local_cache -> wc_el_inv-use_local_cache, pop_is_nginx_server -> wc_el_inv-is_nginx_server, pop_is_store_api_request -> wc_el_inv-is_store_api_request. If a custom integration on your site hooks into any of these by their old name, update it to the new one.
- Fixed: on a channel-vertical package (e.g. the Belgium/PEPPOL edition), the account setup wizard's own country field could still be changed and would register your POP account under that different country, bypassing the shop's fixed country; it is now locked there too, both in the wizard and when the account is actually created.
- Fixed: the account setup wizard no longer tells a PEPPOL-eligible shop (e.g. Belgium) that "no official electronic invoicing channel is required for your country" while filling in company details; it now correctly shows the PEPPOL guidance right away, instead of only after the first save.
- Fixed: KSeF (Poland) shops no longer show or require the Tax Code and SdI/PEC fields at checkout, in the order edit screen and in the invoice list; those fields are specific to Italian e-invoicing and were already correctly hidden for PEPPOL, but not for KSeF.
- Fixed: the account settings notice, the "generate without an account" tip and the disconnect confirmation no longer name specific delivery channels (SDI, PEPPOL, KSeF...) that may not even be available on your setup; they now describe your active channel generically, so the message is always accurate.
- Fixed: shops registered in a country other than Italy or Spain can now generate documents again; a required field that only applies to Italy/Spain was blocking generation for every other country.
- Fixed: generated XML, PDF and ZIP documents are no longer stored in a location that could be reached directly without logging in; they now live in a protected folder like the rest of your invoicing data.
- Added: German shops can now choose between PEPPOL and ZUGFeRD/Factur-X from the plugin settings, without needing to connect a POP account first.
- Changed: the plugin now lists WordPress 6.0 as its minimum version, matching what it has actually required for years (block checkout and other features); sites able to run the plugin are unaffected.
- Fixed: shops configured with a country other than Italy no longer incorrectly apply reverse-charge zero VAT to domestic sales; reverse charge now correctly applies only when the customer is in a different country than the shop, matching the behaviour Italian shops already had.
- Fixed: San Marino shops set up through the account setup wizard are now correctly recognized as San Marino throughout the plugin; previously they could see the wrong invoicing fields, such as PEPPOL or KSeF ones instead of the correct SdI ones.
- Fixed: the year used in the invoice number (year suffix, and the yearly numbering reset) now follows your store's timezone; shops far from UTC could previously get the wrong year in invoices created in the first hours of January.
- Fixed: the date filter on the XML/CSV order list, and the timing of store notices, now use your store's timezone; admins far from UTC could previously see the filter land on the wrong day.
- Fixed: on Paid Memberships Pro sites, the order list's status filter now safely passes its value to the database instead of building the database query from it directly.
- Fixed: on Paid Memberships Pro and Paid Member Subscriptions (CozmosLabs) sites, order and refund dates used on invoices now follow your store's timezone instead of always being UTC; stores far from UTC could previously see the wrong day, or the wrong year on documents generated right after midnight.
- Fixed: the permission check on the SDI, PEPPOL, KSeF, Zoho and webhook native-sending actions no longer has a background-job exception that could be triggered from a regular request; only genuine scheduled jobs can skip it now, closing a gap that could let a logged-in user act on invoices for other orders.
- Fixed: the bulk "mark as sent"/"not sent" action on the invoice list now requires a valid request from the page itself, instead of accepting any request that named it.
- Fixed: the "Mark as Sent"/"Undo" invoice actions in the order screen and invoice list now correctly require the plugin's admin permission; previously any logged-in user could trigger them.
- Fixed: cleaning up temporary XML/ZIP generation files now correctly requires the plugin's admin permission, instead of being triggerable by any site visitor.
- Fixed: the bulk XML/CSV invoice download and its background processing step now correctly require the plugin's admin permission; previously any logged-in user could trigger them and receive data belonging to orders that weren't theirs.
- Fixed: some bulk-download and integration-toggle status messages are now shown in your site's language instead of always in Italian or English.
- Fixed: disconnecting your POP account now requires a valid request from the settings page itself and the plugin's admin permission; previously it could be triggered by any logged-in user.
- Fixed: downloading an invoice/receipt PDF or its underlying XML now requires being the order's own customer or having the plugin's admin permission; previously the link's validity was not tied to a specific order, and any logged-in user could view another customer's invoice by changing the order number in the URL.
- Fixed: downloading a single order's invoice/receipt XML or PDF from the admin order screen no longer fails with a fatal error for some orders.
- Fixed: on Paid Member Subscriptions (CozmosLabs) sites, saving a payment's billing details now requires a valid request from the payment edit screen itself; previously the same data could be silently changed via a crafted link.
- Fixed: bulk-editing the reverse charge setting from the product list now correctly checks your permission on every selected product; previously a user with edit rights on just one product could also change the setting on products they weren't allowed to edit.
- Fixed: on Paid Memberships Pro sites, saving the VAT tax calculation setting now requires a valid request from the settings page itself; previously it could be triggered by a crafted request from another site.
- Fixed: an unexpected error while generating an XML/PDF invoice now shows a clean, readable message instead of raw technical details; this also fixes the bulk download progress bar getting stuck with no error shown when this rare failure occurred.
7.0.2 - 09/09/2026
- Fixed: bulk XML download is now available on every plan, including Free and Basic; previously the button worked in the interface but the download itself was still silently blocked below the Growth plan.
- Added: after you generate a few invoices without connecting a POP account, the plugin now points out once that connecting one lets you send them to SdI, PEPPOL or KSeF and keep them together. Generating without an account is unchanged.
7.0.1 - 04/09/2026
- Changed: the plugin display name is now "POP – e-invoicing for WooCommerce (ex-WooPop)", and the WordPress.org listing text was updated to describe the WooCommerce e-invoicing workflow more clearly. The plugin slug, your settings and your data are unchanged.
- Fixed: orders that start out in "Processing" status (instead of transitioning into it from another status, e.g. with some payment methods) now correctly get their processing date recorded, so Fatture in Cloud invoice creation no longer relies solely on the fallback date for these orders.
7.0.0 - 31/08/2026
- Added: Fatture in Cloud invoices are now generated in the customer's billing-country language when possible (Italian, English, German, French, Spanish, Portuguese, Greek, Polish, or Slovenian), instead of always in Italian.
- Fixed: on the WooCommerce block checkout, choosing "Receipt" or switching between "Private" and "Company" now correctly shows and hides the related fiscal fields (VAT number, tax code, PEC/SDI code); previously the fields never reacted to the selection.
- Added: You can now generate invoices, credit notes, and PDFs right away, without completing the account setup wizard first; connecting your POP account is only needed when you're ready to send documents through SDI, PEPPOL, KSeF, or another channel.
- Added: Credit note generation (XML and PDF) is now available on the free plan; it previously required a paid plan.
- Added: If your company's fiscal data is incomplete, the plugin now shows a clear notice on the order and in the invoice list, and can notify the site admin by email, instead of silently failing to generate the document.
- Improved: The country field in the General settings is now a dropdown of supported countries, and the VAT number field shows a format hint for the selected country.
- Added: Bulk XML/CSV download from the invoice list is now available on every plan; it previously required the Growth plan.
- Added: The reverse charge column and quick-edit toggle on the products list are now available on every plan; they previously required a paid plan.
- Added: SdI, PEPPOL, KSeF, and Zoho (via POP), plus Fatture in Cloud, Aruba, and SdI via PEC, are now available to activate on every plan; sending still uses your available credits, but no plan upgrade is required to turn them on.
- Security: sandbox mode for Fatture in Cloud, Aruba, and SdI via PEC no longer sends or creates a real document; previously, despite being in sandbox, invoices and credit notes were actually sent or created for free.
- Fixed: sending invoices through Fatture in Cloud, Aruba, or SdI via PEC now correctly uses one of your available credits, instead of not being tracked at all; a free-plan account that has used all its monthly credits now sees a clear message pointing to plan upgrade options instead of the send silently continuing to work.
- Improved: crediting a Fatture in Cloud, Aruba, or SdI via PEC send is now more reliable, with automatic retry if a temporary connection issue prevents it on the first try.
- Added: A dismissible notice on the Invoices tab lets free-plan accounts know their plan includes 10 API credits per month before they run out, so hitting the limit isn't a surprise.
- Improved: Connecting your POP account is now a simple step-by-step form right on the Wizard setup page: enter your email, confirm the code we send you, fill in your company details, choose which delivery channels to activate, and you're done. It replaces the previous popup window, which could be blocked by browser popup blockers, and it pre-fills any fiscal data you already entered so you do not have to retype it.
- Improved: the setup wizard now shows a live summary of your details as you fill them in, channel-specific guidance for your country, and navigation back to a previous step to fix a mistake before finishing.
- Fixed: activating SdI, PEPPOL, or KSeF from the setup wizard now correctly shows as active on the Integrations tab right away, instead of requiring you to also toggle it on manually afterward.
- Fixed: the setup wizard now activates delivery channels in the sandbox or live environment you already have configured, instead of always using live.
- Security: disconnecting your POP account now asks for confirmation first, instead of disconnecting immediately on click; this prevents an accidental disconnection from a stray click.
- Improved: the Activate/Deactivate button on integration cards now shows its label to screen readers, instead of relying on decorative styling alone.
- Improved: the active step label and the "resend code" link in the setup wizard now use readable dark text instead of low-contrast orange, making them easier to read.
- Improved: text fields, dropdowns, and text areas across the settings tabs now have rounded corners and a visible highlighted border when focused, matching the setup wizard's style.
- Improved: status badges, action buttons, document type icons, and the settings tab menu now use clearer, more specific icons and consistent brand colors across the invoice list, integration cards, and settings pages, instead of a mix of generic icons and colors.
- Fixed: credit note actions (Mark as Sent/Undo, download XML/PDF) now show on the order screen for accounts on the free plan; previously they only appeared for paid-plan accounts.
- Fixed: the invoice/credit note actions in the WooCommerce orders list now also appear when High-Performance Order Storage (HPOS) is enabled; previously they were missing on that screen.
- Improved: the SdI, PEPPOL, KSeF, and Zoho connection status section in General settings now shows one clear status badge per channel and environment plus a compact summary of the connection details, instead of a long list of fields with a red/green icon each.
- Improved: the icon and the SANDBOX/LIVE status in the admin bar are now easier to tell apart, with a clearer environment label and, on development installs, a separate DEV marker.
- Improved: tapping a disabled integration card on a phone or tablet now shows why it's disabled, instead of only showing that explanation when hovering with a mouse.
- Improved: disabled fields in the General, Numeration, and Advanced tabs now show a small help icon explaining why they're locked, instead of just appearing grayed out with no explanation.
- Improved: notices, confirmation dialogs, and the deactivation feedback popup now share the same look and colors across the whole plugin, instead of each having its own style.
- Improved: the Customer type list field on the Checkout tab no longer shows an Italian-only screenshot, and its text box is now tall enough to show all saved entries at once.
- Improved: the reverse charge status icon on the products list and the reverse charge box in Quick Edit now match the rest of the plugin's design, instead of using a plain blue bar and generic on/off images.
- Improved: the "Reverse charge" tab icon on the product edit screen now reflects what it does, instead of an unrelated globe icon.
- Fixed: the fiscal fields (document type, VAT number, tax code, etc.) added to the WooCommerce block checkout now look like they belong to the same form, instead of showing up with no border or spacing and a mismatched dropdown style.
- Improved: notices and error indicators on the frontend (account pages, checkout) now use the same rounded card style and brand color as the rest of the plugin.
- Fixed: on the WooCommerce block checkout, choosing "Receipt" now correctly hides the customer type/VAT/tax code fields, and choosing "Private" now correctly hides the PEC/SDI code and VAT number fields, matching the classic checkout's behavior.
- Fixed: checking a document's delivery status for Fatture in Cloud, Aruba, or SdI via PEC no longer shows a blank, unexplained error when something unexpected goes wrong on our side; you now get a clear message instead.
- Fixed: checkout error messages from POP's own fiscal field checks (e.g. an invalid Tax ID) no longer appear twice in the same error list.
- Fixed: creating a Fatture in Cloud invoice for an order that doesn't have a completion or processing date yet no longer crashes with a fatal error; today's date is used instead.
6.9.15 - 19/08/2026
- Fixed: invoices and PDFs no longer fail to generate with a generic error when your server has a temporary issue saving the local copy of the document; the document you already received from POP is now used regardless.
- Fixed: invoices sent to Fatture in Cloud for freelancers (persona fisica titolare di Partita IVA) now include the VAT number again, alongside the tax code; previously only the tax code was sent.
6.9.12 - 6.9.13 - 03/08/2026
- Fixed: Aruba connection status is now updated only after a successful login; the plugin no longer appears connected when authentication fails or an error occurs.
- Added: the plugin now reports a one-time activation signal to POP so we can measure real installation reliability; only the site URL is sent, no fiscal or personal data.
6.9.11 - 29/07/2026
- Added: POP invoice documents are now exposed as WordPress abilities, so AI agents and assistants can search invoices by customer or address and retrieve cached invoice XML, PDF, and structured invoice data (including the active fiscal channel) by provider and document id.
- Added: POP invoice abilities are now available through WP-CLI via
wp popapi invoice search|get|xml|pdf, giving integration tools and agents a scriptable command-line surface for the same cached invoice data exposed through WordPress Abilities.
- Fixed: The PEPPOL country list used for electronic invoicing no longer includes Spain, Northern Ireland, or Liechtenstein, which are not currently eligible for this channel; the list now matches the countries actually supported across the POP platform.
6.9.10 - 23/07/2026
- Fixed: The invoice generation link no longer appears in the Invoice Fields panel and the orders list for stores in a country with no supported official invoicing channel, where it previously showed but could not produce a valid document.
6.9.9 - 20/07/2026
- Fixed: SdI credit notes sent via POP are now correctly marked as sent after a successful submission; previously the status button did not appear after sending because the document UUID was stored on the parent order but read from the refund order.
6.9.8 - 16/07/2026
- Security: All admin AJAX actions now require a valid nonce and the
manage_woocommerce capability; background cron calls continue to work without a nonce as before.
- Fixed: SDI invoice sending no longer remains blocked after the first create/send attempt; the internal concurrency lock is now always released so later manual or scheduled sends can run normally.
- Fixed: KSeF invoice status check no longer crashes with a PHP notice when the API response does not include a reference number; the variable is now always initialised before use.
- Fixed: Credit notes that reuse the invoice numbering series now pick the first free invoice number correctly; previously, when separate credit-note numbering was disabled, a credit note could reuse an already assigned invoice number instead of continuing the sequence.
- Fixed: The edit button for next credit-note numbers now correctly unlocks the field for manual input; previously the field stayed read-only even after clicking the pencil icon.
- Improved: PMPro and Cozmos admin order/payment screens now show cached generated XML/PDF files in a dedicated read-only panel and clear them automatically when billing data changes, so regenerated documents stay aligned with the latest saved data.
- Improved: On Cozmos PMS forms and account pages, store admins now see an explicit POP warning when the Paid Member Subscriptions module "Tax & EU VAT" is not active, clarifying why POP fiscal billing fields are unavailable.
6.9.7 - 06/07/2026
- Fixed: Bulk CSV order download no longer crashes with a date parse error; previously the export failed with a fatal error when order dates were stored as Unix timestamps instead of formatted strings.
- Fixed: Bulk XML download now generates invoices with complete customer data and order lines; previously documents created through the batch downloader were missing customer name, address, VAT number, and product lines because the admin list index does not store the full order payload.
- Fixed: Batch XML generation no longer fails with a server-side API error for customers without an SDI code; the SDI field is now always sent as a string, preventing a null type error on the POP API.
- Fixed: A crash in the XML payment summary calculation is resolved; line item totals coming from the API response are now cast to numbers before arithmetic, preventing a PHP 8 TypeError when the values arrive as strings.
6.9.6 - 06/07/2026
- Added: Shops can now activate Zoho (via POP) as their exclusive invoice channel from the Integrations page, with readiness checks from the POP account and dedicated manual/automatic document sending for invoices and credit notes.
- Fixed: Zoho credit notes are now correctly marked as sent after a successful sync; previously the document was created in Zoho but the order status was not updated.
- Fixed: Zoho document sync now respects the sandbox/live environment setting; previously Zoho always sent to the live Zoho account even when the POP sandbox mode was active, and sandbox dry runs now return a clear confirmation instead of an error.
For the full version history, see https://pub.popapi.io/wordpress/changelog.txt