
Step 101
In Shopify, create a custom app for your store with write access to products and copy its Admin API token.
Shopify issues invoices its own way, but not the ones Royal Decree 1007/2023 requires: no chained hash, no QR code, no registration with the AEAT (the Spanish Tax Agency). Cofactu has no app in the App Store; it has a webhook that invoices whatever Shopify sends, and Shopify Flow or Make send it in four steps.
No App Store app · webhook live. Today there is no Cofactu app to install from the Shopify App Store, and no date for one. Orders are invoiced with Shopify Flow or Make against the universal webhook, and the direct catalogue connection pushes your products from Cofactu to the store.
Today there is no Cofactu app to install from the Shopify App Store, and no date for one. Orders are invoiced with Shopify Flow or Make against the universal webhook, and the direct catalogue connection pushes your products from Cofactu to the store.
| Route | Today | What it does |
|---|---|---|
| Cofactu plugin, module or app on the Shopify App Store | Not available | It does not exist and has no date. There is nothing from Cofactu to install in the store. |
| Universal webhook | Available | Invoices every order you send and files it with the AEAT using your certificate. It needs an API key: from the SME plan or during the 30-day trial. |
| Direct catalogue connection | Available | From the SME plan, Cofactu pushes your products to Shopify with an Admin API token. It only goes in that direction: Shopify orders are invoiced through the universal webhook, with Flow or Make. |
| Make or Zapier | Available | With their HTTP module against the webhook. Cofactu has no app of its own in Make or Zapier. |
Checked on 26 October 2026 · What is not available has no date
Shopify fires its payment event, as it already does today.
From the native hook or from Make. Normalised JSON, API key in the header.
Cofactu numbers it, computes the chained SHA-256 fingerprint and generates the PDF with a QR code.
With your certificate, the record goes to the AEAT (the Spanish Tax Agency) in the background and the response CSV is stored.


Flow is included in all Shopify plans. The “Order paid” trigger and the “Send HTTP request” action are enough; there is nothing to deploy on a server of your own.
// Shopify Flow "Send HTTP request" action
// Method: POST
// URL: https://api.cofactu.com/api/webhooks/ecommerce-orders
// Headers: Authorization: Bearer vf_live_… · Content-Type: application/json
// Body (Liquid):
{
"platform": "shopify",
"externalOrderId": "{{ order.name }}",
"client": {% if order.billingAddress.company or order.customer %}{
"nombre": "{{ order.billingAddress.company | default: order.customer.displayName }}",
"email": "{{ order.email }}",
"direccion": "{{ order.billingAddress.address1 }}",
"codigoPostal": "{{ order.billingAddress.zip }}",
"ciudad": "{{ order.billingAddress.city }}",
"pais": "{{ order.billingAddress.countryCodeV2 }}"
}{% else %}null{% endif %},
"lines": [
{% for line in order.lineItems %}
{
"descripcion": "{{ line.title }}",
"cantidad": {{ line.quantity }},
"precioUnitario": {{ line.originalUnitPriceSet.shopMoney.amount }},
"tipoIva": {{ line.taxLines.first.ratePercentage | default: 21 }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
} 
In Shopify, create a custom app for your store with write access to products and copy its Admin API token.

In Cofactu, go to Catalogue → Public catalogue → Ecommerce integrations → “Connect Shopify”: name, .myshopify.com domain and the token.

“Sync products” creates or updates in Shopify each product of your Cofactu catalogue. Stock is not synced from here.
Create an API key in Cofactu (Settings → API keys) with permission to create invoices. The API is included from the SME plan and during the 30-day trial.

In Make, use the “Shopify → Watch Orders” module filtering financial_status = paid; in Zapier, “Shopify → New Paid Order”.

HTTP module: POST to https://api.cofactu.com/api/webhooks/ecommerce-orders with the header Authorization: Bearer vf_live_….

Map order.name to externalOrderId and the line_items to lines. Shopify prices include VAT if that is how you set up taxes: send them without VAT (price / 1.21) or Cofactu will invoice too much.

POST https://api.cofactu.com/api/webhooks/ecommerce-orders with Authorization: Bearer vf_live_…. Prices exclude VAT and each line carries its tipoIva (VAT rate); client: null issues a simplified F2 invoice; externalOrderId makes the call idempotent. From Settings → Integrations → Ecommerce you can send a test order, which stays as a draft; real orders show up in Invoices with their AEAT status.
Settings → Integrations → Ecommerce ↗{
"platform": "shopify",
"externalOrderId": "2026-000123",
"client": {
"nif": "B12345678",
"nombre": "Tienda Ejemplo SL",
"email": "compras@ejemplo.com",
"direccion": "C/ Mayor 1",
"codigoPostal": "28001",
"ciudad": "Madrid",
"pais": "ES"
},
"lines": [
{
"descripcion": "Zapatillas running 42",
"cantidad": 1,
"precioUnitario": 79.34,
"tipoIva": 21
},
{
"descripcion": "Gastos de envío",
"cantidad": 1,
"precioUnitario": 4.13,
"tipoIva": 21
}
],
"autoSubmit": true
} No. Shopify issues receipts and invoices with no chained hash, no verification QR code and no registration with the AEAT, which are the three requirements of Royal Decree 1007/2023 from 2027. The shop can stay on Shopify; the invoice has to be issued by a VeriFactu system.
No. Shopify Flow, included in all plans, makes the webhook call without installing anything, and so do Make and Zapier. A Cofactu app for the App Store is not available and has no date.
You can add a NIF field with Shopify Checkout Extensibility or ask for it in the “Company” field of the address. If it does not arrive, send client: null and a simplified F2 invoice is issued, valid for sales to end consumers.
A refund in Shopify does not cancel the invoice already registered: VeriFactu requires a corrective invoice (rectificativa). It is issued from Cofactu on the original invoice, linked by its number.
Each line carries its own tipoIva, so the rate your Shopify tax settings apply is the one that reaches the invoice. The JSON is the same for all four stores: platform, externalOrderId, client (or null for a simplified F2 invoice) and lines with a price excluding VAT and a tipoIva (VAT rate) per line.
30 days with all of Cofactu, API included and no card, and a test order to see the first chained invoice. After that, the API starts at the SME plan.
We use our own cookies, Google's (which ads bring sign-ups) and PostHog's (how the site is used). If you decline, the site works exactly the same. Learn more .
Navegar en tu idioma siempre es mejor. Cámbiate para disfrutar de una experiencia 100% adaptada.