
Factulit VeriFactu is the free plugin that connects WooCommerce to Factulit, a Spanish VeriFactu invoicing service. Keep managing orders and refunds in WooCommerce while Factulit generates the invoices, chained billing records and AEAT submissions.
What the plugin does
- Syncs orders, customers and the order-status catalog with your Factulit account.
- Lets you decide which WooCommerce statuses invoice, cancel or refund before explicitly activating invoicing.
- Generates hash-chained billing records in Factulit and submits them to the Spanish Tax Agency (AEAT).
- Tracks full and partial refunds against the corresponding invoice, with per-line detail.
- Keeps pending work in a local retry queue and shows connection health and exact progress.
- Gives eligible customers a protected “View invoices” action in WooCommerce My Account and order views.
- Declares compatibility with WooCommerce High-Performance Order Storage (HPOS / custom order tables).
Who it is for
Spanish WooCommerce stores that issue invoices for online sales and want Factulit to handle billing-record generation, hash chaining and AEAT submission.
An account with Factulit is required
This plugin is free, but it is a client for the Factulit SaaS. Without a Factulit account and a valid API key, it will not generate invoices or send anything to AEAT; it only prepares and queues data locally. Create your account and follow the guided connection, series and activation steps. The service has a Free plan for up to 50 invoices per month and paid plans for higher volume; see the current plans and limits.
External services
This plugin relies on the external Factulit SaaS (https://factulit.es) to generate invoices, billing records and AEAT submissions. It has a free tier and paid plans (https://factulit.es/precios). Configuring the plugin means accepting the Factulit Terms and Conditions and Privacy Policy.
The plugin communicates only with the two fixed Factulit API endpoints: https://api.sandbox-factulit.es/api for Demo and https://api.factulit.es/api for Production. The active endpoint is part of the server-issued, versioned connection binding; it changes atomically together with the binding generation and the environment-specific API credential. The settings screen never accepts an arbitrary API URL, and a queued row always keeps the endpoint and binding under which it was created. Moving from Demo to Production uses this same installed plugin and never redirects old Demo rows to Production. It sends:
- Customer data, when a customer record is synced: first name, last name, email, phone, tax ID (NIF/NIE/CIF), address, postal code and city.
- Order data, when an order is synced: the order and its line items, needed to generate the corresponding invoice.
- Invoice-link data, when a customer opens the WooCommerce order list or an order: up to 50 WooCommerce order IDs are sent through
invoice-availability. When the customer selects “View invoices”, that order ID is sent throughinvoice-accessand Factulit returns a short-lived viewer URL. The browser is redirected only to the HTTPS viewer for the active Factulit environment (vf.factulit.esin Production orsandbox-factulit.esin Demo); the plugin never exposes the API key to the browser. - Order-status catalog data: the list of WooCommerce order statuses used in your store, so their fiscal classification (which statuses trigger an invoice, a cancellation or a refund) can be configured on the Factulit side.
- Connection and version data, at most once every 12 hours: the installed plugin version, the WooCommerce/CMS version, the store’s site URL, the URL of this store’s sync (cron) endpoint and the bearer token that protects that endpoint. The version data is used to tell you when a newer plugin version is available. The endpoint URL and its token are what allow Factulit to call your store back to run a sync; without them the service cannot reach your store. That token is generated by the plugin, is specific to your store, and can be rotated at any time from the plugin’s settings screen, which invalidates the previous one.
This data exchange is required for the plugin to function: it is how your store’s orders become VeriFactu invoices and billing records. No data is sent to Factulit before you configure a valid API key.
Terms and Conditions: https://factulit.es/condiciones-de-contratacion
Privacy Policy: https://factulit.es/politica-de-privacidad
Screenshots

Settings screen: connection status, API key field, and the fiscal-classification notice pointing to the Factulit panel.

Sync screen: synchronisation health, exact order progress, the three sync channels, the "Sync now" action and recovery actions when needed.

Update notice: the inline admin notice shown when a newer plugin version is available, with release notes.

Cron block: the read-only cron endpoint URL and the "Rotate cron token" action.

Factulit dashboard with demo sales, invoicing and VeriFactu status.

AEAT registration and invoice status in Factulit, using demo data.