{"id":310871,"date":"2026-05-19T12:47:52","date_gmt":"2026-05-19T12:47:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/invoice-api-xhub-for-woocommerce\/"},"modified":"2026-05-19T12:47:37","modified_gmt":"2026-05-19T12:47:37","slug":"invoice-api-xhub-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/fon.wordpress.org\/plugins\/invoice-api-xhub-for-woocommerce\/","author":23496699,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"6.9.4","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Invoice-api.xhub for WooCommerce","header_author":"xhub.io","header_description":"Generate compliant e-invoices from WooCommerce orders via the invoice-api.xhub.io API. LIVE NOW: PDF (all 14 countries), XRechnung (DE), ZUGFeRD (DE\/AT). COMING Q3 2026: Factur-X (FR), FatturaPA (IT), Facturae (ES), ebInterface (AT), UBL (BE\/NL\/BG\/RO), ISDOC (CZ), NAV (HU). Built for the EU e-invoicing mandates rolling out 2025-2028.","assets_banners_color":"a9bfd5","last_updated":"2026-05-19 12:47:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/invoice-api.xhub.io\/en\/docs\/integrations\/woocommerce","header_author_uri":"https:\/\/invoice-api.xhub.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":53,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"devxhubio","date":"2026-05-19 12:47:37"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3537345,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3537345,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3537345,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3537345,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3537345,"resolution":"1","location":"assets","locale":"","width":1600,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3537345,"resolution":"2","location":"assets","locale":"","width":1600,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3537345,"resolution":"3","location":"assets","locale":"","width":1600,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3537345,"resolution":"4","location":"assets","locale":"","width":1600,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3537345,"resolution":"5","location":"assets","locale":"","width":1600,"height":900},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3537345,"resolution":"6","location":"assets","locale":"","width":1600,"height":900}},"screenshots":{"1":"Fully automatic workflow \u2014 every order becomes a compliant e-invoice without manual steps.","2":"Three e-invoice formats live today: PDF (all 14 countries), XRechnung 3.0 (DE), and ZUGFeRD 2.3 (DE\/AT).","3":"Your customers receive their invoice automatically \u2014 auto-download link in every order confirmation email.","4":"Built for the EU e-invoicing mandate timeline: B2B receive 2025, B2B send 2027 (large enterprises), full coverage 2028.","5":"WooCommerce \u2192 Settings \u2192 Integration \u2192 Invoice-api.xhub \u2014 pick country, format, trigger, attach-to-email behaviour, and seller details in one panel.","6":"Order detail with the Invoice-api.xhub meta box \u2014 generated filename, timestamp, plus Re-generate and Download buttons on every order."}},"plugin_section":[],"plugin_tags":[247307,12480,286,263529,263530],"plugin_category":[45],"plugin_contributors":[263531],"plugin_business_model":[],"class_list":["post-310871","plugin","type-plugin","status-publish","hentry","plugin_tags-e-invoice","plugin_tags-invoice","plugin_tags-woocommerce","plugin_tags-xrechnung","plugin_tags-zugferd","plugin_category-ecommerce","plugin_contributors-devxhubio","plugin_committers-devxhubio"],"banners":{"banner":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/banner-772x250.png?rev=3537345","banner_2x":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/banner-1544x500.png?rev=3537345","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/icon-128x128.png?rev=3537345","icon_2x":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/icon-256x256.png?rev=3537345","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/screenshot-1.png?rev=3537345","caption":"Fully automatic workflow \u2014 every order becomes a compliant e-invoice without manual steps."},{"src":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/screenshot-2.png?rev=3537345","caption":"Three e-invoice formats live today: PDF (all 14 countries), XRechnung 3.0 (DE), and ZUGFeRD 2.3 (DE\/AT)."},{"src":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/screenshot-3.png?rev=3537345","caption":"Your customers receive their invoice automatically \u2014 auto-download link in every order confirmation email."},{"src":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/screenshot-4.png?rev=3537345","caption":"Built for the EU e-invoicing mandate timeline: B2B receive 2025, B2B send 2027 (large enterprises), full coverage 2028."},{"src":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/screenshot-5.png?rev=3537345","caption":"WooCommerce \u2192 Settings \u2192 Integration \u2192 Invoice-api.xhub \u2014 pick country, format, trigger, attach-to-email behaviour, and seller details in one panel."},{"src":"https:\/\/ps.w.org\/invoice-api-xhub-for-woocommerce\/assets\/screenshot-6.png?rev=3537345","caption":"Order detail with the Invoice-api.xhub meta box \u2014 generated filename, timestamp, plus Re-generate and Download buttons on every order."}],"raw_content":"<!--section=description-->\n<p>This is a <strong>free<\/strong> plugin that connects WooCommerce to the <a href=\"https:\/\/invoice-api.xhub.io\">invoice-api.xhub.io<\/a> 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 \u2014 service plans start at modest monthly tiers, see <a href=\"https:\/\/console.invoice-api.xhub.io\">console.invoice-api.xhub.io<\/a> for current pricing.<\/p>\n\n<p>This is the same model used by Stripe, PayPal, Mollie, Mailchimp, and Zapier WordPress plugins: free open-source connector + paid third-party service.<\/p>\n\n<p>It targets the EU e-invoicing mandates rolling out between 2025 and 2028 \u2014 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.<\/p>\n\n<h4>Supported formats (live now)<\/h4>\n\n<ul>\n<li>PDF (all 14 countries)<\/li>\n<li>XRechnung (DE)<\/li>\n<li>ZUGFeRD (DE, AT)<\/li>\n<\/ul>\n\n<h4>Coming Q3 2026<\/h4>\n\n<p>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:<\/p>\n\n<ul>\n<li>Factur-X (FR)<\/li>\n<li>FatturaPA (IT)<\/li>\n<li>Facturae (ES)<\/li>\n<li>ebInterface (AT)<\/li>\n<li>UBL (BE, NL, BG, RO)<\/li>\n<li>ISDOC (CZ)<\/li>\n<li>NAV (HU)<\/li>\n<\/ul>\n\n<p>In the meantime PDF works for all 14 countries \u2014 that's the universal fallback while the country-specific formats roll out.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>You install the plugin and add your invoice-api.xhub.io API key.<\/li>\n<li>You configure the default country, format, and seller details.<\/li>\n<li>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.<\/li>\n<li>The customer-facing email gets the invoice file attached automatically (configurable).<\/li>\n<li>The order edit screen has a meta box to manually generate, re-generate, and download the invoice.<\/li>\n<\/ol>\n\n<h4>What this plugin does NOT do<\/h4>\n\n<ul>\n<li>It does not host an OCR or template engine \u2014 generation is delegated to the API.<\/li>\n<li>It does not bypass WooCommerce taxes \u2014 tax rates are derived from line totals as WooCommerce computes them.<\/li>\n<li>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.<\/li>\n<li>It does not work without an API key \u2014 sign up at https:\/\/invoice-api.xhub.io to obtain one.<\/li>\n<\/ul>\n\n<h4>External services<\/h4>\n\n<p>This plugin relies on the third-party service <strong>invoice-api.xhub.io<\/strong> to generate the invoice files (XRechnung XML, ZUGFeRD PDF, Factur-X PDF, etc.). It is required for the plugin to function \u2014 invoice generation cannot happen locally because the service produces standards-compliant e-invoices using server-side libraries that are not bundled with this plugin.<\/p>\n\n<p><strong>Endpoint:<\/strong> <code>https:\/\/service.invoice-api.xhub.io\/api\/v1\/invoice\/{country}\/{format}\/generate<\/code><\/p>\n\n<p><strong>What is sent:<\/strong> for every order processed (auto on a status transition you configure, or manually via the meta box):<\/p>\n\n<ul>\n<li>Seller information from your plugin settings: company name, VAT ID, street, postal code, city, country, email, IBAN, BIC (if configured)<\/li>\n<li>Buyer information from the order's billing address: name (or company), street, city, postal code, country code, email<\/li>\n<li>Order line items: description, quantity, unit price, tax rate, tax category, net\/tax\/gross amounts<\/li>\n<li>Order metadata: invoice number, dates, currency, payment terms, country-specific fields (e.g. Leitweg-ID for DE)<\/li>\n<\/ul>\n\n<p><strong>What is NOT sent:<\/strong> WordPress user accounts, password hashes, payment-gateway credentials, server logs, plugin\/theme lists.<\/p>\n\n<p><strong>When data is sent:<\/strong> 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.<\/p>\n\n<p><strong>Service provider:<\/strong> xhub.io \u2014 see the Privacy \/ GDPR section below for the full data-flow description.<\/p>\n\n<p>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.<\/p>\n\n<h4>Privacy \/ GDPR<\/h4>\n\n<p>The plugin stores the generated invoice file (base64-encoded) and metadata on the WooCommerce order itself, using order custom fields prefixed with <code>_invoice_api_xhub_<\/code>. This includes the buyer's billing details that are part of the invoice payload and will appear in the generated XML\/PDF.<\/p>\n\n<p>When a WordPress administrator processes a personal-data export request (Tools \u2192 Export Personal Data), the plugin contributes the invoice number, generation timestamp, format, and filename for each order belonging to the requested email address.<\/p>\n\n<p>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.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder <code>invoice-api-xhub-for-woocommerce<\/code> to <code>\/wp-content\/plugins\/<\/code>, or install through the Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open WooCommerce -&gt; Settings -&gt; Integrations -&gt; Invoice-api.xhub.<\/li>\n<li>Paste your API key, set country\/format and seller details, save.<\/li>\n<li>Place a test order and move it to the trigger status (Completed, by default).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20without%20woocommerce%3F\"><h3>Does it work without WooCommerce?<\/h3><\/dt>\n<dd><p>No. WooCommerce 8.0 or later is required. The plugin fails closed and shows an admin notice when WooCommerce is missing.<\/p><\/dd>\n<dt id=\"does%20it%20support%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>Does it support High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes. The plugin declares <code>custom_order_tables<\/code> compatibility. Order data is read through the WC_Order API, not directly from <code>wp_posts<\/code>.<\/p><\/dd>\n<dt id=\"where%20is%20the%20invoice%20file%20stored%3F\"><h3>Where is the invoice file stored?<\/h3><\/dt>\n<dd><p>In <code>\/wp-content\/uploads\/invoice-api-xhub\/&lt;order-id&gt;\/&lt;filename&gt;<\/code>. The plugin writes a <code>.htaccess<\/code> file with <code>Deny from all<\/code> to block direct URL access (Apache). On Nginx, add <code>location ~ \/uploads\/invoice-api-xhub\/ { deny all; }<\/code> to your server config \u2014 invoices contain buyer addresses and must not be web-accessible. Order meta stores only the relative path. Older installs of the plugin (\u2264 v0.x) stored the base64 payload directly on the order; the read path supports both for backward compatibility.<\/p><\/dd>\n<dt id=\"can%20i%20re-generate%20an%20invoice%20after%20editing%20the%20order%3F\"><h3>Can I re-generate an invoice after editing the order?<\/h3><\/dt>\n<dd><p>Yes. Open the order, find the Invoice-api.xhub meta box on the right, click \"Re-generate invoice\".<\/p><\/dd>\n<dt id=\"does%20it%20submit%20to%20the%20german%20xrechnung%20b2g%20portal%3F\"><h3>Does it submit to the German XRechnung B2G portal?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"where%20does%20the%20buyer%20reference%20%2F%20leitweg-id%20come%20from%3F\"><h3>Where does the buyer reference \/ Leitweg-ID come from?<\/h3><\/dt>\n<dd><p>Order meta <code>_invoice_api_xhub_leitweg_id<\/code> or <code>_invoice_api_xhub_buyer_reference<\/code> if set, then the global Leitweg-ID from settings, finally the WooCommerce order number as buyer reference.<\/p><\/dd>\n<dt id=\"why%20does%20the%20plugin%20call%20base64_decode%3F\"><h3>Why does the plugin call base64_decode?<\/h3><\/dt>\n<dd><p>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 <code>base64_decode()<\/code> 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 \u2014 only to decode HTTP-response payload. The decoded content is treated as opaque file bytes and never passed to <code>eval<\/code>, <code>assert<\/code>, <code>create_function<\/code>, or similar.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20%C2%A714%20ustg%20%28de%29%20compliant%20for%20invoice%20numbering%3F\"><h3>Is the plugin \u00a714 UStG (DE) compliant for invoice numbering?<\/h3><\/dt>\n<dd><p>Out of the box, the default format <code>INV-{order_number}<\/code> reuses the WooCommerce order number, which is <strong>not<\/strong> guaranteed to be gap-free across the entire system (deleted orders, other plugins reserving IDs). For German tax compliance use a format with the <code>{seq}<\/code> token, e.g. <code>2026-{seq:0000}<\/code>. The plugin maintains a separate sequential counter that is uniquely incremented for every generated invoice, with optional yearly or monthly reset.<\/p><\/dd>\n<dt id=\"can%20i%20use%20a%20custom%20invoice%20template%3F\"><h3>Can I use a custom invoice template?<\/h3><\/dt>\n<dd><p>Yes. By default the plugin uses the standard template provided by invoice-api.xhub.io. To use your own:<\/p>\n\n<ol>\n<li>Log in to https:\/\/console.invoice-api.xhub.io\/pdf\/templates<\/li>\n<li>Create a new template (or copy one of the starter templates) \u2014 adjust layout, logo, colors, header\/footer blocks<\/li>\n<li>Save and copy the Template-ID (UUID format, e.g. <code>550e8400-e29b-41d4-a716-446655440000<\/code>)<\/li>\n<li>In WordPress: WooCommerce \u2192 Settings \u2192 Integration \u2192 Invoice-api.xhub \u2192 \"Default Template-ID\" \u2014 paste it, save<\/li>\n<\/ol>\n\n<p>From now on every generated invoice uses your template. Templates are format-specific \u2014 a template designed for XRechnung will not work for ZUGFeRD or PDF.<\/p>\n\n<p>To use a different template for a specific order (e.g. B2C vs. B2B layouts), set the order's custom field <code>_invoice_api_xhub_template_id<\/code> before the generate fires. Per-order override beats the global default.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Renamed internal constants to brand-anchored prefix (<code>INVOICEAPIXHUB_*<\/code>) to comply with WordPress.org prefix guidelines (avoid <code>WC_<\/code> namespace collisions).<\/li>\n<li>Removed broken external Terms \/ Privacy URLs from readme \u2014 full data-flow description remains in the Privacy \/ GDPR section.<\/li>\n<li>Corrected <code>Contributors<\/code> to the WordPress.org owner account.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Generate, store, attach, and download invoices for 14 EU countries<\/li>\n<li>HPOS compatibility<\/li>\n<li>Per-order manual generate + re-generate<\/li>\n<li>Auto-attach to customer Completed\/Processing\/Invoice emails<\/li>\n<\/ul>","raw_excerpt":"Free plugin connecting WooCommerce to invoice-api.xhub.io for compliant e-invoices (XRechnung, ZUGFeRD, PDF) per EU mandates.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/310871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=310871"}],"author":[{"embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/devxhubio"}],"wp:attachment":[{"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=310871"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=310871"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=310871"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=310871"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=310871"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=310871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}