Description
This is a free plugin that connects WooCommerce to the invoice-api.xhub.io e-invoicing service. The plugin itself is fully open source under GPLv2-or-later. To generate invoices you need an active subscription with invoice-api.xhub.io — service plans start at modest monthly tiers, see console.invoice-api.xhub.io for current pricing.
This is the same model used by Stripe, PayPal, Mollie, Mailchimp, and Zapier WordPress plugins: free open-source connector + paid third-party service.
It targets the EU e-invoicing mandates rolling out between 2025 and 2028 — Germany (XRechnung/ZUGFeRD, mandatory B2B receive 2025, send 2027/28), France (Factur-X, mandatory 2026/27), Italy (FatturaPA, mandatory since 2019), and 11 more countries.
Supported formats (live now)
- PDF (all 14 countries)
- XRechnung (DE)
- ZUGFeRD (DE, AT)
Coming Q3 2026
The invoice-api.xhub.io API roadmap adds these formats from Q3 2026 onwards. The plugin will surface them in the format dropdown automatically once the backend supports generation:
- Factur-X (FR)
- FatturaPA (IT)
- Facturae (ES)
- ebInterface (AT)
- UBL (BE, NL, BG, RO)
- ISDOC (CZ)
- NAV (HU)
In the meantime PDF works for all 14 countries — that’s the universal fallback while the country-specific formats roll out.
How it works
- You install the plugin and add your invoice-api.xhub.io API key.
- You configure the default country, format, and seller details.
- When an order reaches the configured trigger (default: completed), the plugin POSTs the order to the API and stores the returned invoice file on the order.
- The customer-facing email gets the invoice file attached automatically (configurable).
- The order edit screen has a meta box to manually generate, re-generate, and download the invoice.
What this plugin does NOT do
- It does not host an OCR or template engine — generation is delegated to the API.
- It does not bypass WooCommerce taxes — tax rates are derived from line totals as WooCommerce computes them.
- It does not submit invoices to government portals (Peppol, FatturaPA SDI, KSeF). The XML/PDF is produced on the server and stored on the order; submission is your responsibility.
- It does not work without an API key — sign up at https://invoice-api.xhub.io to obtain one.
External services
This plugin relies on the third-party service invoice-api.xhub.io to generate the invoice files (XRechnung XML, ZUGFeRD PDF, Factur-X PDF, etc.). It is required for the plugin to function — invoice generation cannot happen locally because the service produces standards-compliant e-invoices using server-side libraries that are not bundled with this plugin.
Endpoint: https://service.invoice-api.xhub.io/api/v1/invoice/{country}/{format}/generate
What is sent: for every order processed (auto on a status transition you configure, or manually via the meta box):
- Seller information from your plugin settings: company name, VAT ID, street, postal code, city, country, email, IBAN, BIC (if configured)
- Buyer information from the order’s billing address: name (or company), street, city, postal code, country code, email
- Order line items: description, quantity, unit price, tax rate, tax category, net/tax/gross amounts
- Order metadata: invoice number, dates, currency, payment terms, country-specific fields (e.g. Leitweg-ID for DE)
What is NOT sent: WordPress user accounts, password hashes, payment-gateway credentials, server logs, plugin/theme lists.
When data is sent: only after you have configured an API key (no calls happen on activation or before configuration), and only at one of: (a) the configured order status transition, (b) when you click “Generate” / “Re-generate invoice” in the order meta box.
Service provider: xhub.io — see the Privacy / GDPR section below for the full data-flow description.
By configuring your API key and saving the plugin settings, you consent to this data being transmitted to invoice-api.xhub.io for the sole purpose of generating compliant e-invoices.
Privacy / GDPR
The plugin stores the generated invoice file (base64-encoded) and metadata on the WooCommerce order itself, using order custom fields prefixed with _invoice_api_xhub_. This includes the buyer’s billing details that are part of the invoice payload and will appear in the generated XML/PDF.
When a WordPress administrator processes a personal-data export request (Tools Export Personal Data), the plugin contributes the invoice number, generation timestamp, format, and filename for each order belonging to the requested email address.
When a personal-data erasure request is processed, the plugin deletes the stored invoice payload and all associated metadata for orders belonging to the requested email address.
Screenshots

Fully automatic workflow — every order becomes a compliant e-invoice without manual steps. 
Three e-invoice formats live today: PDF (all 14 countries), XRechnung 3.0 (DE), and ZUGFeRD 2.3 (DE/AT). 
Your customers receive their invoice automatically — auto-download link in every order confirmation email. 
Built for the EU e-invoicing mandate timeline: B2B receive 2025, B2B send 2027 (large enterprises), full coverage 2028. 
WooCommerce Settings Integration Invoice-api.xhub — pick country, format, trigger, attach-to-email behaviour, and seller details in one panel. 
Order detail with the Invoice-api.xhub meta box — generated filename, timestamp, plus Re-generate and Download buttons on every order.
Installation
- Upload the plugin folder
invoice-api-xhub-for-woocommerceto/wp-content/plugins/, or install through the Plugins screen. - Activate the plugin.
- Open WooCommerce -> Settings -> Integrations -> Invoice-api.xhub.
- Paste your API key, set country/format and seller details, save.
- Place a test order and move it to the trigger status (Completed, by default).
FAQ
-
Does it work without WooCommerce?
-
No. WooCommerce 8.0 or later is required. The plugin fails closed and shows an admin notice when WooCommerce is missing.
-
Does it support High-Performance Order Storage (HPOS)?
-
Yes. The plugin declares
custom_order_tablescompatibility. Order data is read through the WC_Order API, not directly fromwp_posts. -
Where is the invoice file stored?
-
In
/wp-content/uploads/invoice-api-xhub/<order-id>/<filename>. The plugin writes a.htaccessfile withDeny from allto block direct URL access (Apache). On Nginx, addlocation ~ /uploads/invoice-api-xhub/ { deny all; }to your server config — invoices contain buyer addresses and must not be web-accessible. Order meta stores only the relative path. Older installs of the plugin (≤ v0.x) stored the base64 payload directly on the order; the read path supports both for backward compatibility. -
Can I re-generate an invoice after editing the order?
-
Yes. Open the order, find the Invoice-api.xhub meta box on the right, click “Re-generate invoice”.
-
Does it submit to the German XRechnung B2G portal?
-
No. The plugin produces the XRechnung XML and stores it on the order. You upload it to the federal/state platform yourself, or pass it to your accounting software which does.
-
Where does the buyer reference / Leitweg-ID come from?
-
Order meta
_invoice_api_xhub_leitweg_idor_invoice_api_xhub_buyer_referenceif set, then the global Leitweg-ID from settings, finally the WooCommerce order number as buyer reference. -
Why does the plugin call base64_decode?
-
The invoice-api.xhub.io API returns the generated XML or PDF file as a base64-encoded string in the JSON response (this is the standard pattern for delivering binary data over JSON). The plugin decodes that string with
base64_decode()so it can be served to the merchant as a download or attached to the customer email. The function is not used to evaluate or execute any data — only to decode HTTP-response payload. The decoded content is treated as opaque file bytes and never passed toeval,assert,create_function, or similar. -
Is the plugin §14 UStG (DE) compliant for invoice numbering?
-
Out of the box, the default format
INV-{order_number}reuses the WooCommerce order number, which is not guaranteed to be gap-free across the entire system (deleted orders, other plugins reserving IDs). For German tax compliance use a format with the{seq}token, e.g.2026-{seq:0000}. The plugin maintains a separate sequential counter that is uniquely incremented for every generated invoice, with optional yearly or monthly reset. -
Can I use a custom invoice template?
-
Yes. By default the plugin uses the standard template provided by invoice-api.xhub.io. To use your own:
- Log in to https://console.invoice-api.xhub.io/pdf/templates
- Create a new template (or copy one of the starter templates) — adjust layout, logo, colors, header/footer blocks
- Save and copy the Template-ID (UUID format, e.g.
550e8400-e29b-41d4-a716-446655440000) - In WordPress: WooCommerce Settings Integration Invoice-api.xhub “Default Template-ID” — paste it, save
From now on every generated invoice uses your template. Templates are format-specific — a template designed for XRechnung will not work for ZUGFeRD or PDF.
To use a different template for a specific order (e.g. B2C vs. B2B layouts), set the order’s custom field
_invoice_api_xhub_template_idbefore the generate fires. Per-order override beats the global default.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Invoice-api.xhub for WooCommerce” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Invoice-api.xhub for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.2
- Removed wp.org directory assets (banner, icon) from the plugin ZIP per the directory-assets guideline; these files now live alongside the plugin and will be uploaded via SVN /assets/ after approval.
1.0.1
- Renamed internal constants to brand-anchored prefix (
INVOICEAPIXHUB_*) to comply with WordPress.org prefix guidelines (avoidWC_namespace collisions). - Removed broken external Terms / Privacy URLs from readme — full data-flow description remains in the Privacy / GDPR section.
- Corrected
Contributorsto the WordPress.org owner account.
1.0.0
- Initial release
- Generate, store, attach, and download invoices for 14 EU countries
- HPOS compatibility
- Per-order manual generate + re-generate
- Auto-attach to customer Completed/Processing/Invoice emails
