JTL-Shop Integration
Live for JTL-Shop 5.2+Generate compliant e-invoices straight from JTL-Shop — XRechnung, ZUGFeRD, and PDF live today, seven more formats coming Q3 2026. Free MIT-licensed plugin, paid e-invoice service.
Live today
- PDF (all 11 country profiles)
- XRechnung 3.0 for Germany — BIS 3.0 / EN 16931
- ZUGFeRD 2.3/2.4 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
JTL-Wawi sync ready
Hook 181 (HOOK_BESTELLUNGEN_XML_BESTELLSTATUS) fires when JTL-Wawi pushes an order-status change back to the shop — invoice generation runs automatically without extra wiring.
Three formats live, seven more in 2026
PDF, XRechnung 3.0, and ZUGFeRD 2.3/2.4 ship today. The remaining country-specific formats appear automatically in the dropdown once the backend supports them — no plugin update needed.
Free plugin, paid service
MIT-licensed, free on GitHub. Revenue lives in the invoice-api.xhub.io service subscription — the same model you already trust for Stripe, PayPal, and Mollie.
§14 UStG-compliant invoice numbering
Gap-free, race-safe sequential numbers via a dedicated DB table (xplugin_xhubio_invoice_api_xhub_seq). Token format `2026-{seq:0000}` for legally compliant production use.
Custom invoice templates
Design your layout in the console, copy the Template-ID, paste into plugin settings. Per-order override via the meta table is supported for special key-account designs.
GDPR-friendly storage
Invoice files live locally in the plugin's storage path. On uninstall with $deleteData=true both plugin tables (sequence + meta) are dropped cleanly — no orphaned customer data.
JTL-Wawi workflow integration
Trigger e-invoice generation directly from JTL-Wawi workflows. The plugin reacts to standard order-state events that Wawi pushes into the shop database — no custom JavaScript, no separate service.
Auftrag.StatusGeändertOrder status changed (default trigger)
E-Rechnung.ErstelltE-invoice created in JTL — replaceable through the API call
Zahlung.EingegangenPayment received — fits Stripe/PayPal/Mollie advance-payment workflows
Versand.AbgeschlossenShipment dispatched — uses on_completed trigger for shipment-driven generation
Screenshots
How it works
Install the plugin via ZIP-upload in the JTL-Shop admin (Plugins → Plugin-Manager → "Verfügbar"), sign up for an invoice-api.xhub.io account, paste the API key into the Configuration tab, pick country, format, and trigger. When an order reaches the configured status, Hook 181 fires, the plugin POSTs the order to the API, and the returned invoice file lands in the plugin storage directory — indexed in a per-order meta table.
Production-ready
JTL-Shop V5-native: PSR-4 autoload via composer.json, PHP 8.1+, Hook 181 plus the modern \JTL\Events\Dispatcher as a Bootstrap extension point. Atomic invoice numbering via INSERT...ON DUPLICATE KEY UPDATE keeps numbers gap-free even under Wawi-sync bursts. Diagnostic visibility (Template + API hash columns) is built into the admin Settings tab — no log digging required.
Who it's for
DACH B2B JTL shops facing the 2025 XRechnung receive mandate and the 2027/28 send mandate — you need ZUGFeRD or XRechnung, not "some PDF". Cross-border EU shops on JTL that need PDF today and country-specific formats as they roll out in 2026. JTL-Wawi users with an existing bookkeeping pipeline — the plugin produces standards-compliant XML/PDF; submission to government portals (Peppol, ZRE/OZG-RE, KSeF) stays in your existing flow.
Use cases
Multichannel merchant
E-invoices for Amazon, eBay, Otto, and your own JTL-Shop — central archiving for every channel.
- 1Order arrives from any channel into JTL-Wawi
- 2Wawi pushes status change to JTL-Shop
- 3Hook 181 fires, e-invoice is generated
- 4Central archive for all channels — one format set, one workflow
B2B wholesale with payment terms
XRechnung for business customers with VAT-ID and net-30 payment terms.
- 1B2B customer with VAT-ID detected on order
- 2E-invoice generated on shipment
- 3XRechnung XML with payment terms and IBAN block
- 4Peppol delivery via downstream accounting software
Accounting integration
Standards-compliant XML/PDF from JTL-Shop, further processing in DATEV, sevDesk, or Lexoffice.
- 1Plugin generates compliant XML or hybrid PDF
- 2GoBD-compliant local archiving in plugin storage
- 3Existing JTL-Wawi-to-DATEV/sevDesk export covers booking
- 4Automatic account assignment via your accounting software — no duplicate workflow
Diagnostic visibility
See exactly which template UUID reached the API for every generated invoice — no silent fallbacks, no surprises. Template and API hash columns in the history give you the tools to track layout changes immediately and compare production renderings run-to-run.
Template column in history
Every row in the history table shows the truncated template UUID that was sent to the API for that invoice.
API hash column
The content hash returned by the API enables run-to-run comparison — same inputs, same hash.
Diagnostic success card
After clicking Generate now, the green success card shows filename, byte size, the template UUID sent, and the API hash at a glance.
Template-aware cache invalidation
The idempotency cache also compares templateId. Changing the template UUID forces a fresh render instead of serving the previously cached file.
Configured a custom template but the PDF still looks identical?
The plugin correctly sent your template UUID to the API. If the rendered PDF still looks like the default layout, the template content itself has not been customised yet. Open console.invoice-api.xhub.io/pdf/templates and edit the layout, logo, and colors to make the difference visible.