Shopify Integration
Under App Store reviewEmbedded Shopify app that turns every order into a compliant e-invoice — XRechnung 3.0, ZUGFeRD 2.3, and PDF live today, seven more formats arriving Q3 2026. Free app install · separate invoice-api.xhub.io service (free tier + paid). v1.0.0 submitted to Shopify App Store review.

PDF · XRechnung 3.0 · ZUGFeRD 2.3 — straight from every order, EN 16931 compliant
Live demo
Silent demo · 1600×900Live today
- PDF (all 14 supported countries)
- XRechnung 3.0 for Germany — BIS 3.0 / EN 16931
- ZUGFeRD 2.3 for DE/AT — hybrid PDF/A-3 with embedded XML
Coming Q3 2026
- Factur-X (FR)
- FatturaPA (IT)
- Facturae (ES)
- ebInterface (AT)
- UBL (BE/NL/BG/RO)
- ISDOC (CZ)
- NAV (HU)
Features
Automatic e-invoice
PDF, XRechnung, or ZUGFeRD generated automatically on order paid or fulfilled — via Shopify webhook
Per-shop format choice
Switch between PDF, XRechnung 3.0, and ZUGFeRD 2.3 in the Settings tab — no code, applies to the next order
Admin order-detail block
Native order-detail block with Generate / Re-generate (force) and a download link for every generated file
Theme app block for download
Theme app block for the order-status page — buyers download their invoice directly from the Shopify storefront
Screenshots
Webhooks the app subscribes to
What the embedded app subscribes to
On install the app subscribes to exactly the seven webhooks listed below — two business triggers for auto-generation, three mandatory GDPR compliance webhooks, and two lifecycle webhooks. If you prefer an app-less integration, you can consume the same events directly in n8n / Make (see section below).
orders/paidAuto-generation trigger (default)
orders/fulfilledAlternative trigger — generation only after fulfillment
customers/data_request · customers/redact · shop/redactMandatory GDPR webhooks (data request, customer redact, shop redact)
app/uninstalled · app/scopes_updateLifecycle cleanup on uninstall and scope changes
1// Shopify Webhook → Invoice-api.xhub2// Configure in Shopify Admin → Settings → Notifications → Webhooks3 4// Webhook Payload from Shopify (orders/paid)5{6 "id": 820982911946154508,7 "email": "kunde@beispiel.de",8 "billing_address": {9 "company": "Musterfirma GmbH",10 "address1": "Musterstraße 123",11 "city": "Berlin",12 "zip": "10115",13 "country_code": "DE"14 },15 "line_items": [16 {17 "title": "Premium Widget",18 "quantity": 2,19 "price": "99.00"20 }21 ],22 "tax_lines": [23 { "rate": 0.19, "price": "37.62" }24 ]25}Integration with n8n/Make
Prefer a no-app integration? Connect Shopify with Invoice-api.xhub via an automation platform of your choice.
- 1
Create Shopify Webhook
Admin → Settings → Notifications → Webhooks
- 2
Create n8n/Make Workflow
Trigger: Webhook, Action: HTTP Request
- 3
Transform Data
Shopify format → Invoice-api.xhub format
- 4
Create E-Invoice
POST /api/v1/invoice/de/xrechnung/generate to Invoice-api.xhub API
1// n8n/Make Workflow: Shopify → Invoice-api.xhub2 3// 1. Trigger: Shopify Webhook (orders/paid)4// 2. Transform: Shopify → Invoice-api.xhub Format5// 3. Action: POST https://service.invoice-api.xhub.io/api/v1/invoice/de/xrechnung/generate6 7// Compute items with all required fields8const items = shopifyOrder.line_items.map((item, index) => {9 const unitPrice = parseFloat(item.price);10 const taxRate = 19;11 const netAmount = unitPrice * item.quantity;12 const taxAmount = Math.round(netAmount * taxRate) / 100;13 const grossAmount = netAmount + taxAmount;14 return {15 position: index + 1,16 description: item.title,17 quantity: item.quantity,18 unit: "piece",19 unitPrice,20 taxRate,21 netAmount,22 taxAmount,23 grossAmount,24 };25});26 27const subtotal = items.reduce((sum, i) => sum + i.netAmount, 0);28const totalTax = items.reduce((sum, i) => sum + i.taxAmount, 0);29 30const payload = {31 invoice: {32 invoiceNumber: `SHOP-${shopifyOrder.id}`,33 type: "invoice",34 issueDate: new Date().toISOString().slice(0, 10),35 dueDate: new Date(Date.now() + 30 * 86400000).toISOString().slice(0, 10),36 currency: "EUR",37 seller: {38 name: "Your Shop Name",39 vatId: "DE123456789",40 street: "Shopstraße 1",41 city: "Hamburg",42 postalCode: "20095",43 countryCode: "DE",44 },45 buyer: {46 name: shopifyOrder.billing_address.company,47 vatId: shopifyOrder.customer.tax_id,48 street: shopifyOrder.billing_address.address1,49 city: shopifyOrder.billing_address.city,50 postalCode: shopifyOrder.billing_address.zip,51 countryCode: shopifyOrder.billing_address.country_code,52 },53 countrySpecific: {54 buyerReference: "SHOP-LEITWEG-ID",55 },56 items,57 subtotal,58 total: subtotal + totalTax,59 taxSummary: [{ taxRate: 19, netAmount: subtotal, taxAmount: totalTax }],60 paymentTerms: "Payable within 30 days",61 },62};63 64const response = await fetch(65 "https://service.invoice-api.xhub.io/api/v1/invoice/de/xrechnung/generate",66 {67 method: "POST",68 headers: {69 "Content-Type": "application/json",70 "X-API-Key": "your-api-key",71 },72 body: JSON.stringify(payload),73 }74);Use Cases
B2B Orders
Automatic XRechnung for all B2B customers with VAT ID
- 1Customer provides VAT ID at checkout
- 2Shopify webhook on payment receipt
- 3Invoice-api.xhub creates XRechnung
- 4E-invoice sent via email
Government Orders
XRechnung with routing ID for public sector clients
- 1Capture routing ID as custom field
- 2Order is placed
- 3Create XRechnung with routing ID
- 4Download link in order-detail block · upload to procurement portal
Hybrid Invoices
ZUGFeRD PDF as default for all orders
- 1Every order triggers workflow
- 2Create ZUGFeRD 2.3 COMFORT
- 3Attach PDF to confirmation email
- 4Archiving in Invoice-api.xhub