{"id":379240,"date":"2026-10-08T08:57:18","date_gmt":"2026-10-08T08:57:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/factuhub-for-woocommerce\/"},"modified":"2026-10-08T08:56:47","modified_gmt":"2026-10-08T08:56:47","slug":"factuhub-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ps.wordpress.org\/plugins\/factuhub-for-woocommerce\/","author":23577858,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.9.0","stable_tag":"0.9.0","tested":"7.1.3","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"FactuHub for WooCommerce","header_author":"FactuHub","header_description":"Factura autom\u00e1ticamente los pedidos de WooCommerce en FactuHub (VERI*FACTU) y trae el cat\u00e1logo, los precios y el stock desde FactuHub.","assets_banners_color":"4d44df","last_updated":"2026-10-08 08:56:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/factuhub.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":98,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.9.0":{"tag":"0.9.0","author":"factuhub","date":"2026-10-08 08:56:47","revision":3734061}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3734061,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3734061,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3734061,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3734061,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.9.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[257667,16236,8637,247447,286],"plugin_category":[45],"plugin_contributors":[284961],"plugin_business_model":[],"class_list":["post-379240","plugin","type-plugin","status-publish","hentry","plugin_tags-aeat","plugin_tags-invoices","plugin_tags-spain","plugin_tags-verifactu","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-factuhub","plugin_committers-factuhub"],"banners":{"banner":"https:\/\/ps.w.org\/factuhub-for-woocommerce\/assets\/banner-772x250.png?rev=3734061","banner_2x":"https:\/\/ps.w.org\/factuhub-for-woocommerce\/assets\/banner-1544x500.png?rev=3734061","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/factuhub-for-woocommerce\/assets\/icon-128x128.png?rev=3734061","icon_2x":"https:\/\/ps.w.org\/factuhub-for-woocommerce\/assets\/icon-256x256.png?rev=3734061","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>FactuHub is a Spanish invoicing service (https:\/\/factuhub.com) that sends every invoice to the Spanish Tax Agency (AEAT) under the VERI*FACTU system. This plugin connects your WooCommerce store to your FactuHub account:<\/p>\n\n<ul>\n<li>When an order is paid (or completed, as you choose), FactuHub issues its invoice: a full invoice if the customer entered their tax ID (NIF), or a simplified invoice if not (up to 3,000 \u20ac).<\/li>\n<li>When you refund an order, FactuHub issues the corrective invoice and, optionally, returns the units to your warehouse.<\/li>\n<li>FactuHub emails the invoice to the customer, or the customer downloads it from \"My account\" and from the order page, together with any corrective invoices.<\/li>\n<li>VERI*FACTU status on every order: registered with the AEAT, pending, accepted with errors or rejected, with a link to check the invoice on the Spanish Tax Agency website (the same address as the QR code on the PDF).<\/li>\n<li>WooCommerce customer emails (processing, completed, refunded) include the link to the invoice and the AEAT check link. Can be turned off.<\/li>\n<li>Catalogue from FactuHub: the items marked \"Publish on the web\" (simple products and products with variants such as size or colour) are created in the store with their price, VAT, categories, brands, image and stock. Changes are pulled every 15 minutes. Three modes: stock only, stock and price, or everything.<\/li>\n<li>The plugin never unpublishes a product it did not publish: whatever the store already had stays as it was.<\/li>\n<li>Each sale can take stock out of a FactuHub warehouse (products are matched by SKU = item code).<\/li>\n<li>An invoice is never duplicated: each order carries a unique reference and retries return the same invoice.<\/li>\n<li>Checkout never waits for FactuHub: everything runs in the background and is retried automatically if FactuHub does not respond.<\/li>\n<li>If the site is copied to another address (staging), the plugin pauses itself so test orders are never invoiced.<\/li>\n<li>Optional \"sales order\" mode: each order appears in FactuHub as soon as it is placed (on hold or processing) and reserves the stock; it is invoiced from the order when paid, and cancelled in FactuHub if it is cancelled in the store. The store shows the available stock (stock minus what is reserved).<\/li>\n<li>Import history: brings the store's previous orders into FactuHub as historical orders (for reference only: no invoice, no stock, no tax effect).<\/li>\n<li>Payment gateway fees: when an order paid with Stripe or PayPal is invoiced, FactuHub records the fee the gateway kept (or estimates it for Redsys and Bizum with your own rate), so you can see what you pay in fees, reconcile the gateway payouts with your bank and see your real margin.<\/li>\n<li>Product galleries: the additional images of each item are uploaded as the product gallery.<\/li>\n<li>One-click connection: the \"Connect to FactuHub\" button links the store to your FactuHub account without copying any key.<\/li>\n<\/ul>\n\n<p>The plugin interface is in Spanish.<\/p>\n\n<h4>Pricing<\/h4>\n\n<p>The plugin is free. You need a FactuHub account with an active plan, and the connection of each store is activated in FactuHub with a one-time payment (no subscription). During FactuHub's free trial (30 days) it works without paying. While a store is not activated, its orders wait and are invoiced automatically as soon as you activate it.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the FactuHub API (https:\/\/app.factuhub.com\/api\/v1), a paid invoicing service you must have an account with. It is needed to issue the invoices and to sync the catalogue; nothing is sent until you connect the store to FactuHub (with the \"Conectar con FactuHub\" button or an API key) and enable the plugin.<\/p>\n\n<p>What is sent, and when:<\/p>\n\n<ul>\n<li>When an order is invoiced or refunded: the order lines (description, quantity, price and VAT), shipping and fees, the internal order number and, if the customer entered a tax ID (NIF), their name or company, tax ID, billing address, email and phone. Without a tax ID, only their email (to send them the invoice).<\/li>\n<li>When an order paid through a payment gateway is invoiced (and, if the gateway had not stored its fee yet, up to 7 days later): the payment method ID, the gateway's transaction ID (for example the Stripe PaymentIntent or the PayPal order ID), the amount charged, and the gateway fee and net amount as stored by the payment plugin. When a refund is made through the gateway: the refunded amount and the gateway refund ID. No customer data is sent with this information.<\/li>\n<li>On every request: the store address (URL), in the X-FactuHub-Tienda-Url header and in the User-Agent, to identify the store's connection.<\/li>\n<li>In sales order mode, when an order is placed: the same order data, plus the shipping address. If you use \"Import history\", the previous orders in the period you choose are sent once, with the same data.<\/li>\n<li>When you click \"Conectar con FactuHub\": your browser goes to FactuHub to approve the connection, and the store then exchanges a one-time code for its key.<\/li>\n<li>After an invoice is issued, the plugin asks FactuHub a few times for its VERI*FACTU status until the AEAT has registered it. No customer data is sent.<\/li>\n<li>In direct invoice mode with a warehouse selected: when WooCommerce reduces or restores the stock of an order, the store sends FactuHub the order reference (store ID and order number), the warehouse and, for each line, the FactuHub item ID and quantity. No customer data is sent. FactuHub may also call the store at \/wp-json\/factuhub\/v1\/aviso with a signed request (no personal data) when stock changes, and the store then downloads the available stock of the changed items.<\/li>\n<li>The \"Check with the Spanish Tax Agency\" links shown on the order, in \"My account\" and in the emails point to the AEAT website (https:\/\/www2.agenciatributaria.gob.es). Nothing is sent to the AEAT by the plugin: the customer's browser opens that page only if they click the link.<\/li>\n<li>If you use \"Link products\": when you click \"Enviar productos a FactuHub\", the store sends FactuHub, in batches, for each product and variation: its WooCommerce product ID, the ID and name of its parent product, its name, SKU, EAN, variation attributes (for example size or colour), price, VAT, stock, status and image URL. No customer data is sent. FactuHub then calls the store at \/wp-json\/factuhub\/v1\/aviso with a signed request (no personal data) to tell it that there are SKU changes to pick up; the store fetches them from FactuHub, applies them and reports back to FactuHub the result of each SKU change (with a readable error message when it could not be applied).<\/li>\n<li>If you enable the catalogue sync: every 15 minutes the plugin downloads from FactuHub the items, categories, brands, images and stock that changed. No customer data is sent. Product images are downloaded from the address FactuHub provides for each item (FactuHub's servers).<\/li>\n<\/ul>\n\n<p>FactuHub processes this data as a data processor on behalf of the store.<\/p>\n\n<ul>\n<li>Terms of service: https:\/\/app.factuhub.com\/terminos-servicio<\/li>\n<li>Privacy policy: https:\/\/app.factuhub.com\/politica-privacidad<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin, then go to WooCommerce \u203a Settings \u203a FactuHub.<\/li>\n<li>Click \"Conectar con FactuHub\", sign in to FactuHub and approve the connection. (Alternatively, create a key in FactuHub \u203a API with the \"Tienda online\" template and paste it.)<\/li>\n<li>Choose the warehouse, the invoice series and when to invoice, and tick \"Facturar pedidos\".<\/li>\n<li>In FactuHub \u203a Tienda online, activate the store.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20factuhub%20account%3F\"><h3>Do I need a FactuHub account?<\/h3><\/dt>\n<dd><p>Yes. The plugin connects your store to your own FactuHub account, where the invoices are issued and sent to the Spanish Tax Agency.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20store%20is%20not%20activated%20yet%3F\"><h3>What happens if the store is not activated yet?<\/h3><\/dt>\n<dd><p>Orders are not lost or marked as failed: they wait, an admin notice links to the activation page, and they are invoiced automatically once the store is activated.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20on%20a%20staging%20copy%20of%20my%20store%3F\"><h3>Can I use it on a staging copy of my store?<\/h3><\/dt>\n<dd><p>Yes. If the site address changes, the plugin pauses and invoices nothing until you confirm that the new address is the real store.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20block%20checkout%20and%20hpos%3F\"><h3>Does it work with the block checkout and HPOS?<\/h3><\/dt>\n<dd><p>Yes. The tax ID field works in both the classic and the block checkout, and the plugin is compatible with High-Performance Order Storage.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Arreglo: con WordPress 7.1 las categor\u00edas y marcas no se asignaban a los productos (get_terms ya no admite meta_key\/meta_value: ahora meta_query).<\/li>\n<li>Tiendas de demostraci\u00f3n de FactuHub: si wp-config.php define FACTUHUB_DEMO_SECRETO, FactuHub puede preparar la tienda para una cuenta demo (conexi\u00f3n, usuario gestor con contrase\u00f1a nueva, cat\u00e1logo desde cero, pago simulado) y reiniciarla al caducar. Una tienda normal no tiene estas rutas.<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Payment gateway fees: the invoice request now includes the gateway, its transaction ID and the fee and net amount stored by the payment plugin (Stripe, PayPal). If the fee is not available yet, a background task sends it within 15 minutes (for up to 7 days).<\/li>\n<li>Refunds made through the payment gateway are sent to FactuHub as a negative gateway payment, so payouts can be reconciled.<\/li>\n<li>Compatible with older FactuHub versions: if FactuHub does not accept the gateway data yet, the invoice is issued without it and the fee is sent later.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Products grouped in FactuHub (\"Agrupar en FactuHub\") keep using the variable product the store already had: its attributes, variations and SKUs are not changed and no duplicate product is created.<\/li>\n<li>Stock in real time: when stock moves in FactuHub (point of sale, delivery notes, invoices, purchases, adjustments), FactuHub notifies the store and the plugin updates only the changed products within seconds. The 15-minute sync remains as a fallback.<\/li>\n<li>In direct invoice mode, when WooCommerce reduces the stock of an order the plugin reserves those units in FactuHub (so the point of sale and other channels do not count them as available) and releases them if the order is cancelled, fails or its payment expires. The invoice consumes the reservation.<\/li>\n<li>If the warehouse chosen in the settings no longer exists in FactuHub, the order gets a note asking you to choose another one (no retries). A store parent product already linked to another FactuHub product is never taken over.<\/li>\n<li>Deactivating the plugin also cancels its pending real-time stock updates and reservations.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>\"Link products\": send the store's products to FactuHub and match them with FactuHub items by SKU, EAN or name, from FactuHub. Duplicates and products that exist only in the store are shown and can be resolved there.<\/li>\n<li>SKU changes made in FactuHub are applied to WooCommerce within seconds (FactuHub notifies the store with a signed request; the plugin also checks every few minutes). Errors are reported back to FactuHub in plain language.<\/li>\n<li>Products you mark \"Do not sync\" in FactuHub for this store stop receiving stock and price updates. Stock reaches every product FactuHub tracks, also those the store sells without FactuHub publishing them.<\/li>\n<li>With an old API key, the settings page asks you to press \"Conectar con FactuHub\" again instead of showing a raw error.<\/li>\n<li>The store status shown on the Plugins page waits at most 5 seconds for FactuHub and does not retry for 5 minutes if it does not answer.<\/li>\n<li>In price mode, a linked variation keeps its name, image and parent product and only receives the price.<\/li>\n<li>The settings page shows whether the store is activated and, during the trial, how many days are left.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>VERI*FACTU status on the order (registered, pending, accepted with errors, rejected, cancelled) and a link to check the invoice with the AEAT. Pending invoices are checked again automatically.<\/li>\n<li>Customers see the invoice and its corrective invoices in \"My account\" and on the order page, with the AEAT check link, and an \"Invoice\" button in the orders list.<\/li>\n<li>WooCommerce customer emails include the invoice link (or where it will be available) and the AEAT check link.<\/li>\n<li>A registered customer who opens the invoice link while logged out is sent to the login page and back.<\/li>\n<li>Changing the API URL deletes the stored key, so it is never sent to another server.<\/li>\n<li>\"FactuHub\" in the WooCommerce menu and a \"Settings\" link in the plugins list.<\/li>\n<li>Uninstalling also removes the sales order mode, history and email settings.<\/li>\n<li>If the store already asks for the tax ID with \"APG NIF\/CIF\/NIE\" (or another plugin, via the factuhub_nif_de_otro_plugin filter), the plugin uses that field instead of adding a second one.<\/li>\n<\/ul>\n\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>Las facturas cobran exactamente el total del pedido: se env\u00eda el precio con IVA de cada l\u00ednea (requiere FactuHub con pvp_unitario en la API).<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Text domain changed to \"factuhub-for-woocommerce\" to match the plugin slug.<\/li>\n<li>The \"WooCommerce required\" notice only shows to users who can manage plugins.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>\"Conectar con FactuHub\": connect the store without copying a key (one-time code exchanged server to server).<\/li>\n<li>Optional sales order mode: orders reserve stock in FactuHub when placed, are invoiced from the order when paid and cancelled with the store. The store shows the available stock.<\/li>\n<li>Import history: previous orders as historical orders in FactuHub.<\/li>\n<li>Product gallery from FactuHub's additional images.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Each store's connection is activated in FactuHub (one-time payment). Until then, orders wait without being marked as failed, an admin notice links to the activation page and, once activated, pending orders are invoiced.<\/li>\n<li>Requires WooCommerce (Requires Plugins header) and WordPress 6.5.<\/li>\n<li>SSL is always verified when connecting to FactuHub.<\/li>\n<li>Deactivating the plugin no longer cancels pending invoice retries.<\/li>\n<li>Admin notices only show on WooCommerce screens.<\/li>\n<li>Suggested privacy policy text (Settings \u203a Privacy).<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Catalogue sync from FactuHub (simple and variable products, global attributes, categories, brands, images, price with its VAT, and stock), incremental and in batches.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First version: invoice on payment, corrective invoice on refund, tax ID field in the checkout (classic and blocks), PDF on the order and in My account.<\/li>\n<\/ul>","raw_excerpt":"Automatically invoice your WooCommerce orders in FactuHub, compliant with Spain's VERI*FACTU, and sync your catalogue and stock from FactuHub.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/379240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=379240"}],"author":[{"embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/factuhub"}],"wp:attachment":[{"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=379240"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=379240"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=379240"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=379240"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=379240"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ps.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=379240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}