POP – European e-invoicing compliance for e-commerce

Description

Complete European e-invoicing system for WordPress and WooCommerce: generate XML and PDF invoices, collect fiscal data, and connect your store to PEPPOL, KSeF, SdI and ZUGFeRD workflows.

POP helps European e-commerce teams automate invoice generation, fiscal checkout fields, document downloads, credit notes and supported network submissions from one WordPress workflow. A complete e-invoicing plugin for WordPress and WooCommerce, available 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.

Who POP is built for

  • Freelancers and small businesses that need reliable XML and PDF invoices without manual document handling
  • Growing e-commerce owners selling across European markets with different fiscal data requirements
  • Accountants, agencies and developers managing invoicing workflows for multiple WordPress stores
  • Enterprise stores that need predictable API credit usage and a structured path toward country-specific e-invoicing workflows

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

AI and LLM features

  • MCP-ready: connect compatible AI assistants to POP invoicing capabilities
  • Exposes WordPress Abilities for automation-aware WordPress workflows
  • WP-CLI commands (wp popapi invoice search|get|xml|pdf) for agentic operations, scripted checks and developer automation
  • API-first design for AI-assisted invoice creation, status checks and document routing

Supported countries and workflows

POP supports selected European e-invoicing workflows depending on the country, endpoint and configured integration, on any plan including Free.

  • Germany: PEPPOL and ZUGFeRD-oriented document workflows where supported by the configured endpoint
  • France: PEPPOL-based electronic invoicing workflows where supported by the configured endpoint
  • United Kingdom: PEPPOL-based electronic invoicing workflows where supported by the configured endpoint
  • Italy and San Marino: structured XML invoice generation, SdI transmission, and electronic signature or compliant archiving where enabled by the selected workflow
  • Netherlands: PEPPOL-based electronic invoicing workflows where supported by the configured endpoint
  • Poland: KSeF structured e-invoicing workflows, including XML transmission to KSeF
  • Belgium: structured B2B e-invoicing workflows, including PEPPOL transmission where enabled

Belgium introduced mandatory structured B2B e-invoicing for domestic transactions between VAT-registered businesses from January 1st, 2026. KSeF adoption in Poland is being phased in by taxpayer category. 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.

Planned countries

POP is expanding its coverage roadmap for additional markets, including UAE, Slovakia, Croatia, Spain, Romania, Hungary and Greece.

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 – European electronic invoicing for e-commerce (ex-WooPop)” is open source software.
Contribute to its development to continuously improve the plugin!

Requirements

PHP: >= 7.4
WordPress: >= 4.6

Screenshots

Blocks

This plugin provides 1 block.

  • POP Checkout Fields

Installation

This section describes how to install and run the plugin. 1. Upload the ‘woopop-electronic-invoice-free’ folder to the /wp-content/plugins/ directory. 2. Activate POP – European electronic invoicing for e-commerce (ex-WooPop) from the WordPress ‘Plugins’ page.

FAQ

Do I need to create an account to use POP?

No. You can install the plugin and start generating XML and PDF invoices right away, with no account and no setup step, within a free monthly generation allowance.

Creating a free POP account is only needed when you want 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 into the plugin guides you through it, right inside your WordPress admin.

Is the POP plugin free?

Yes. POP offers a Free plan that includes 10 API credits per month, and every supported network and integration is available on it: the Free plan is not limited to a smaller feature set.

A credit is the unit used to measure credit-consuming API operations. Some plugin features are included without credit consumption, while operations such as XML generation, transmission, electronic signature or archiving may consume credits depending on the configured workflow.

To unlock more credits, you can activate a paid plan.

Why does POP use API credits instead of “invoices per month”?

POP is an e-invoicing compliance product. A single invoice may involve multiple compliance actions, such as:

  • Generating and validating XML
  • Submitting XML to a supported network such as SdI, PEPPOL or KSeF
  • Applying an electronic signature, if enabled
  • Activating compliant archiving, if enabled

Each credit-consuming operation uses API credits according to your monthly allowance and configured workflow.

Can I automatically send invoices to supported e-invoicing networks?

Yes, on any plan including Free. POP can integrate with supported networks such as SdI, PEPPOL and KSeF, automating the transmission of structured XML invoices directly from your e-commerce workflow.

Available networks depend on the country, endpoint and configured integration. Your plan determines your monthly credit allowance, not which networks you can use.

Is it possible to customize invoices generated with POP?

Yes. You can customize the PDF invoice template by adding your company logo and custom footer text.
You can also configure invoice prefix, suffix and progressive numbering.

Does POP support invoicing for foreign customers?

Yes. POP supports EU and international customers and can route structured XML through supported networks.
Regulatory requirements may vary by jurisdiction, transaction type and business case. Users should verify the specific obligations that apply to them.

Is it possible to generate credit notes with POP?

Yes, on any plan including Free. POP supports credit note generation where enabled by the country and workflow.

What happens if I run out of credits?

This answer applies to the WordPress open source version of POP.

  • Free plan: the service stops when credits are exhausted.
  • Paid plans: overquota is allowed. Extra API operations are charged according to your plan’s overquota rate.

You can upgrade your plan at any time to increase your monthly credit quota.
Please note that credit enforcement rules may differ on non-open-source platforms.

Can I use POP only to generate XML invoices without network submission?

Yes. POP can be used for XML invoice generation and validation without network submission, and without creating an account, within a free monthly generation allowance.

Network submission, digital signature and compliant archiving are optional capabilities depending on your workflow and country configuration, and are available on every plan including Free.

Does the plugin offer customer support?

Yes. For support requests, you can contact us directly through the support link in the plugin or open a ticket from our official website.

Does the plugin send any data when it’s activated?

Yes. When you activate the plugin, it sends your site’s URL to POP’s servers — the same servers the plugin already connects to for e-invoicing — so we know the installation completed successfully. This happens once, automatically, and never repeats. No fiscal, personal, or business data is included.

Reviews

July 8, 2026
Plugin completo per la fatturazione elettronica. Ho avuto un problema nell’attivazione di un’integrazione e il team di supporto è intervenuto in tempi rapidissimi, sistemando tutto senza complicazioni. La prontezza dell’assistenza è stata ottima. Consigliato.
December 15, 2025
This is for sure one of the best invoicing plugins for WP in Europe. E-invoicing ready with full management of reverse charge mechanism & fully customizable. It is also perfectly integrated with several well renowned stand alone invoicing systems.
December 4, 2025
Posso solo spendere buone parole nei loro confronti, soprattutto in merito all’assistenza sempre tempestiva ed efficiente C’è stato un problema che è stato risolto molto velocemente e con precisione, consigliatissimi!
November 5, 2025
Devo dire, con grande piacere che aver lavorato su questo progetto con i ragazzi di POP è stato fantastico. Al di la del fatto che il plugin è fatto molto bene, l’assistenza è davvero impagabile e non è scontato; hanno dato un supporto ottimo e veloce sempre. Risolvendo anche alcuni aspetti con workaround efficienti. Bravi davvero!

Top

September 24, 2025
Il plugin funziona bene e il supporto è molto veloce e gentile, grazie.
Read all 15 reviews

Contributors & Developers

“POP – European e-invoicing compliance for e-commerce” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

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.

6.9.5 – 25/06/2026

  • Added: German shops can now generate and receive ZUGFeRD documents — the hybrid PDF containing embedded XML is created via the POP API and automatically attached to the completed order email; XML and standard PDF actions are replaced by a single ZUGFeRD download button in the admin order list and order detail.
  • Added: German shops can now download all three ZUGFeRD artefacts — hybrid PDF, standard PDF, and embedded XML — as a single ZIP archive directly from the admin order list and order detail; the bundle is served from the local cache and consumes no additional API credits.
  • Added: A dedicated ZUGFeRD section is now visible in the settings panel for German shops configured on the ZUGFeRD corridor, showing credit usage information for each document bundle generated.
  • Fixed: Resending a completed order email from the WooCommerce order detail no longer deletes the cached document files for that order.
  • Fixed: The invoice/document admin list now loads correctly even when WooCommerce refunds are present, and recent documents from different providers are ordered more reliably together in the same view without early pagination cutoffs.

6.9.4 – 15/06/2026

  • Added: Polish shops can now send KSeF invoices directly from the WooCommerce order detail; the invoice is transmitted to the KSeF system via the POP API and the assigned KSeF reference number is stored on the order. Auto-send on order status change and manual status check are also available.
  • Added: Invoice numbering can now be restarted intentionally from a chosen value in Numeration settings, even when keeping the same prefix, making it easier to reset test sequences before going live.
  • Fixed: After a manual numbering reset, older documents in the same invoice series no longer force the next number forward; duplicate protection now applies only to documents created after the reset.
  • Added: Manual numbering reset is now available for the receipt series as well, with the same boundary logic as for invoices.
  • Fixed: The manual numbering reset checkbox was silently ignored when saving settings; the reset now applies correctly and the sequence restarts from the chosen value.
  • Fixed: Receipt numbering now always uses its own separate sequence starting from 1; the previous option to share the invoice counter by setting the receipt number to zero has been removed as it produced incorrect document numbering.
  • Fixed: Fatture in Cloud automatic sending now correctly uses the trigger status configured for each document type — invoices use the invoice trigger and receipts use the receipt trigger; previously both always checked the invoice trigger, causing receipts (and invoices on non-completed triggers) to be skipped silently.
  • Fixed: Receipt orders processed through payment gateways that auto-complete orders (e.g. PayPal, Stripe) are now correctly scheduled for automatic Fatture in Cloud sending; previously these orders were skipped in receipt-only mode or when the receipt trigger differed from the invoice trigger.
  • Fixed: Receipt documents (corrispettivi) now always carry the order creation date as the fiscal transaction date, in all sending flows (automatic batch, immediate on status change, and manual); invoices continue to use the emission date as required by SDI sequential numbering rules.
  • Fixed: When the batch processes multiple receipts in sequence, the success message is no longer duplicated for each order; each document now reports its own single confirmation line.
  • Fixed: Fatture in Cloud automatic sending now recovers missed invoice and receipt orders more reliably when the first background run is delayed, including shops using processing as the trigger status.
  • Fixed: Orders still missing _invoice_sent are now picked up correctly by the Fatture in Cloud recovery cron, preventing valid automatic documents from being skipped silently.

6.9.3 – 09/06/2026

  • Added: When deactivating the plugin, a feedback modal now appears asking for an optional reason and comment before proceeding; the information is sent to POP to help improve the product, and deactivation always completes regardless of whether feedback is provided.

6.9.2 – 05/06/2026

  • Fixed: The temporary order filter data is no longer loaded on every page of the WordPress admin; on large stores this option could reach several megabytes and was causing slow database queries and site crashes under normal traffic.
  • Improved: Fatture in Cloud diagnostic log now traces the full scheduling and execution flow for both invoices and receipts, including order status transitions, payment method, and the reason when an automatic document send is skipped; requires WP_FATT_CLOUD_LOG enabled.
  • Fixed: Webhook delivery via n8n connector (e.g. Zoho) now works correctly — the connector response is recognised and passed through instead of being treated as invalid XML, both when triggered manually and via scheduled cron.
  • Fixed: Saving webhook settings without making any changes no longer shows a false error message; a save with no modifications now correctly returns success.

6.9.1 – 03/06/2026

  • Added: A dedicated “Ricevute/Corrispettivi” automation section is now available in Fatture in Cloud settings, with its own trigger status and enable/disable toggle independent from invoice automation; receipt documents are sent immediately when the selected order status is assigned.
  • Added: Receipt orders are now visible in the invoice admin list and show the document data section inside the order detail when Fatture in Cloud is active, regardless of order status.
  • Added: Manual upload of receipt documents is now always allowed from the order detail, regardless of the order status.

6.9.0 – 27/05/2026

  • Fixed: PMPro order items now report the correct unit price and VAT rate in the XML payload; when the PMPro global $pmpro_default_country is not initialised during API-based XML generation the rate lookup returned 0, causing unit_price to show the gross amount instead of the net and rate to show 0.00; taxRate() now falls back to calculating the aliquota directly from item totals (total_tax / subtotal × 100) for non-WooCommerce providers when the provider lookup returns zero, and the strict integer comparison 0 === $vat in calcUnitPrice() is replaced with 0.0 === floatval($vat) so the safety fallback triggers correctly when $vat is the string "0.00".
  • Added: SDI and PEPPOL integration settings now display Live and Sandbox environments as separate labelled sections, each with its own status indicators; PEPPOL identifier, endpoint value, UUID, address, city and zip-code fields are shown for both environments independently.
  • Changed: Two new static helpers Integrations::isSdiPopIntegrationActive() and Integrations::isPeppolIntegrationActive() centralise the live-or-sandbox activation gate; all call sites in Integrations, InvoiceApi, PeppolApi and Wizard now use these helpers instead of raw get_option comparisons.
  • Changed: getSdiPOPIntegrationData() and getPEPPOLPOPIntegrationData() return objects now expose separate live_integration / sandbox_integration boolean flags (plus live_signature, live_storage, sandbox_signature, sandbox_storage for SDI and sandbox PEPPOL identifier fields) so UI and consumers can distinguish the two environments without re-reading options.
  • Fixed: Various admin CSS adjustments — added min-height to inputs, action buttons and table-cell title column; corrected line-height on action icon links for refund and order rows.

6.8.9 – 25/05/2026

  • Fixed: Fatture in Cloud invoice sending now refreshes cached VAT rates safely before using standard-rate IDs, preventing stale shipping tax mappings from blocking document creation after VAT changes in Fatture in Cloud.
  • Fixed: removed radio input and checkbox style that conflicted with WP 7 styling

6.8.8 – 19/05/2026

  • Added: Admin notifications can now be shown or hidden by platform, so messages can target only WordPress or external platform contexts such as Shopify.
  • Added: Shops configured for Poland now generate KSeF XML on the dedicated route and keep the saved XML files in a dedicated local directory.
  • Fixed: Poland shops now show only the native actions expected by their configured route, and private KSeF customers now see PDF-only document actions instead of PEPPOL/UBL XML options and notices.
  • Added: New environment setting (live/sandbox) in account panel to send the environment flag in POP API requests; default is “live”. The environment is shown in the admin menu title next to the plugin name.
  • Added: New ReverseChargeSettings class to centralize conditional display logic for reverse-charge fields; ref_norm_rc (tax rule reference) is now shown only in Italy, San Marino and Spain, while other EU countries and extra-EU contexts show only nature_rc.
  • Fixed: Poland shops now show reverse-charge fields with KSeF-ready labels and accepted values, while unused private and tax-reference fields are hidden and no longer saved on orders.
  • Fixed: Reverse-charge settings in WooCommerce, PMPro and Cozmos now align with the new conditional logic, saving ref_norm_rc only when the field is displayed and avoiding empty values on orders.
  • Fixed: PMPro checkout now saves reverse-charge metadata only when nature is not empty, preventing stale empty values on subsequent order processing.
  • Added: New extra-EU zero-tax handling: when cart contains items shipped to non-EU countries, the reverse-charge process now applies the 0% tax rate without requiring reverse-charge validation, supporting export scenarios where VAT is not applicable.
  • Fixed: Poland KSeF context now hides SDI fields and Tax Code like PEPPOL does, and the address format is updated to include invoice_type and vat_number correctly.
  • Changed: Reverse-charge settings UI is now simplified, removing redundant country-specific fields that are handled by the new centralized logic.

6.8.7 – 08/05/2026

  • Fixed: Failed include RefundOrderItem.php

6.8.6 – 07/05/2026

  • Fixed: PMPro admin order save and invoice sent/undo actions now guard against recursive re-entry on the same order during internal meta/XML persistence, preventing memory exhaustion, stalled redirects and duplicate nested processing on pmpro_updated_order.
  • Fixed: PMPro refunded orders now keep the original invoice row and the generated credit note as separate POP table documents; admin search/action routing now resolves the correct refund document context for XML/PDF generation, local cache reuse and bulk file handling instead of collapsing both documents onto the same source order id.
  • Fixed: PMPro native SDI/PEPPOL actions now resolve invoice vs credit-note document context explicitly, so a UUID saved for the original invoice no longer disables send/state actions on the PMPro refund credit-note row that shares the same source order id.
  • Fixed: Admin document search is now provider-aware; when a specific provider is selected, direct order-id lookup and filtered search results query only that provider instead of scanning every registered provider.
  • Fixed: Fatture in Cloud line-item VAT-type resolution now prioritizes the XML/order fiscal Natura before Italian 0% fallback mappings, so cases such as N2.2 no longer degrade to the generic domestic N4 path when the normative reference is missing; targeted helper tests cover exact, ambiguous and fallback cases.
  • Fixed: PMPro checkout no longer blocks company/freelance submissions with browser error An invalid form control with name='billing_tax_code' is not focusable when tax code is disabled; PMPro now aligns CF required/visibility handling with the WooCommerce flow and clears stale browser custom-validation state when the field is hidden or excluded from validation.
  • Fixed: Credit-note XML refund assembly no longer assumes WooCommerce-only parent-order lookups; refund data building now resolves the parent order through the active provider and hardens fee-item data access for non-Woo provider adapters, improving compatibility for provider-based refund flows.
  • Changed: Local frontend/admin asset versioning now uses the real file modification time for plugin-managed scripts and styles, including PMPro and Cozmos checkout assets, reducing stale-browser/cache issues after JS/CSS updates without requiring a plugin version bump.

6.8.5 – 28/04/2026

  • Fixed: Shipping VAT-rate resolution is now hardened across standard invoices and shipping refund / credit note flows; shipping items can now recover their tax rate and tax-rate id from item tax data when tax_class is empty, location matching now prefers city-specific rates over generic country-wide matches, and targeted tests cover the shared resolution path.

6.8.4 – 27/04/2026

  • Changed: POP API requests that already send license_key in the JSON body now also send the same value in the X-API-Key header for channel, wizard, addon-allowlist, and document-generation endpoints while keeping backward-compatible body payloads unchanged.
  • Fixed: PMPro XML auto-saving now skips recursive re-entry when the current request is already the internal format=xml generation request for the same order/provider, preventing self-triggered loops during internal XML generation on shared POP/site domains.
  • Fixed: Invoice-number formatting/build fallback no longer degrades to the order ID when the raw progressive is missing during interrupted status-change/save flows; formatted-number generation is now centralized, recovery prefers the stored order_number_invoice or a valid parse from the existing formatted value, and missing progressives now fail explicitly with logs instead of persisting the order number as the visible invoice number.
  • Changed: PMPro legacy formatted-number fallback is aligned with core and no longer uses the order ID as a surrogate invoice number when no valid progressive is available.
  • Fixed: Greece VIES checks now normalize the member-state code from GR to EL in the shared VIES path, so Greek VAT numbers entered/stored with checkout country GR are validated with the expected VIES country code; updated core helpers and validator flow in src/Functions/Utils.php and src/WooCommerce/Fields/InvoiceFields.php, with targeted coverage in tests/ViesCountryCodeTest.php.
  • Changed: The account setup wizard popup otpWindow now sizes itself dynamically from the opener browser window instead of using a fixed width, targeting about 80% of the available width and centered positioning for better adaptation across screen resolutions; updated assets/js/wizard.js and regenerated assets/js/wizard.min.js.

6.8.3 – 09/04/2026

  • Fixed: processFileBatch() now resolves the correct order provider from the stored batch payload and skips orphaned records safely, avoiding fatal errors when bulk XML data contains non-WooCommerce entries or deleted orders.
  • Changed: Bulk XML download gating is now aligned between UI and runtime; the feature remains Growth+, the AJAX endpoint now enforces the same rule server-side, and paid-plan users below Growth see an explicit From Growth badge instead of the generic paid-only label.
  • Fixed: XML directory saving is now enabled from the Basic plan as intended, matching the settings UI and restoring actual file creation for createXMLOnProviderOrderCompleted().
  • Changed: XML auto-saving is now provider-aware in core and is wired for WooCommerce, PMPro and Cozmos payment flows, so completed-provider orders can save XML files without relying on WooCommerce-only assumptions.
  • Changed: Added localized From %s plan badge strings in core language catalogs and regenerated compiled translations.

6.8.2 – 07/04/2026

  • Fixed: transferee_client.personal_data.tax_id_vat.country_id and transferee_client.place.country_id now receive the customer country reliably during XML/PDF payload assembly; CreateXml initializes $transfereeCountryId before the payload is built, avoiding undefined-variable notices and empty country values in generated documents.
  • Changed: PMPro order billing resolution is now more defensive for address, city, state, postcode and country, with fallback lookup across POP order metas (billing_*), WordPress user metas and legacy PMPro user metas (pmpro_b*) when the MemberOrder->billing object is incomplete.

6.8.1 – 07/04/2026

  • Fixed: PMPro bridge now restores pre-6.8.0 addon bootstrap timing by firing wc_el_inv-after_init after plugin bootstrap, so PMPro callbacks are registered before checkout/gateway order flows emit their hooks.
  • Fixed: PMPro addon filter loading is now merged explicitly across filtersAlways, filtersFront, filtersAdmin, and filtersAjax, preventing loss of shared inc hooks such as invoice/date assignment and fiscal-meta sync.
  • Fixed: PMPro order success handling now backfills missing POP fiscal metas (billing_choice_type, billing_invoice_type, billing_sdi_type, billing_vat_number, billing_company, billing_tax_code) even when the success transition happens later via Stripe/webhook and the original checkout POST is no longer available.
  • Fixed: When PMPro front-end document-type choice is disabled, the effective default now becomes invoice instead of inheriting the receipt-oriented field default.
  • Fixed: PMPro provider billing-company resolution now prioritizes the POP order meta billing_company over stale PMPro billing object values, so updated company names entered at checkout are reflected consistently in orders and generated documents.
  • Changed: PMPro Council Directive price-label formatting now uses the current site language instead of the account country, appending +IVA only for Italian and +VAT for all other languages.
  • Changed: Core helper getCurrentLanguage() is now normalized and WPML-aware, using isWpmlActive() with ICL_LANGUAGE_CODE when available and otherwise falling back reliably to the current WordPress locale.
  • Added: Targeted PMPro/WPML language-label tests covering WordPress locale fallback and WPML current-language precedence.
  • Added: Centralized diagnostic log helpers in core for shared path resolution, bootstrap, write-status tracking and protected admin log viewing.
  • Fixed: Fatture in Cloud, Aruba and SdI via PEC now prepare their event-log directory/file on activation and surface path/permission issues immediately in addon settings.
  • Changed: Addon event logs are now opened through a nonce-protected admin endpoint instead of direct public /wp-content/*.log URLs, reducing false 404s caused by cache, rewrite rules or WAF policies.
  • Added: Targeted diagnostic-log tests covering bootstrap, write flow, early conflict detection and protected viewer URL generation.
  • Added: Unified POP API overquota payload (pop_api_overquota) with shared normalization helpers, localized titles/messages/CTA labels, and admin/order persistent state stored in the global option wc_el_inv_pop_api_overquota_state.
  • Fixed: POP API overquota business blocks no longer terminate with legacy wp_die() in programmable flows; AJAX/admin and addon consumers now receive a structured payload, while _blank document generation renders a dedicated HTML fallback page.
  • Changed: Overquota handling is now aligned across core and indirect addon consumers (getXmlFromOrder() -> CreateXml -> popApi()), with shared detection/extraction helpers in PHP and a single SweetAlert2 renderer in assets/js/admin.js.
  • Fixed: Core AJAX flows and Fatture in Cloud, Aruba, and SdI via PEC addon UIs now intercept pop_api_overquota before generic error handling and render the shared dialog instead of degrading to “invalid XML” or generic API errors.
  • Added: Persistent overquota notices on POP XML settings (page=wc_el_inv-options-page&tab=xml) …