xhubio / jtl-shop-invoice-api-xhub
Generate compliant e-invoices from JTL-Shop orders via invoice-api.xhub.io. Live now: PDF, XRechnung, ZUGFeRD. Coming Q3 2026: Factur-X, FatturaPA, Facturae, ebInterface, UBL, ISDOC, NAV.
Package info
github.com/xhubio/jtl-shop-invoice-api-xhub
Type:jtl-shop-plugin
pkg:composer/xhubio/jtl-shop-invoice-api-xhub
Requires
- php: ^8.1
This package is not auto-updated.
Last update: 2026-05-11 05:03:08 UTC
README
Free, MIT-licensed plugin that turns JTL-Shop orders into compliant e-invoices via the invoice-api.xhub.io service. Live formats: PDF, XRechnung 3.0 (German B2G/B2B, EN 16931 / Peppol BIS Billing 3.0) and ZUGFeRD 2.3/2.4 (hybrid PDF/A-3 with embedded XML, Germany/Austria).
π©πͺ Deutsche Anleitung im
README.de.md.
How it works
When an order's status changes the plugin sends the order to
invoice-api.xhub.io and stores the returned invoice file under
plugins/xhubio_invoice_api_xhub/files/<orderID>/. Trigger states
(off / on_pending / on_on_hold / on_processing / on_completed)
and target format are configurable per shop. Invoices can also be
generated manually for any order from the plugin's admin Settings tab.
Requirements
- JTL-Shop 5.2.0+ (the installer auto-checks this against
info.xml) - PHP 8.1+
- An invoice-api.xhub.io account (sign up free at console.invoice-api.xhub.io)
Install
- Download
jtl-shop-invoice-api-xhub-1.0.0.zip(public release pending β contact support@invoice-api.xhub.io for early access). - JTL-Shop admin β Plugins β Plugin-Manager β "VerfΓΌgbar" tab β Plugin-ZIP hochladen β upload the ZIP.
- Switch to the "Aktiviert" tab β toggle the plugin on.
- Plugins β Installierte Plugins β Invoice-api xhub for JTL-Shop.
- Tab "Configuration" β fill in:
- API key (from console.invoice-api.xhub.io/api-keys)
- Country (default
DE) and Format (PDF/XRechnung/ZUGFeRD) - Trigger (default: when order goes to "in Bearbeitung")
- Seller block β your company name, VAT-ID, address, email, phone
- Bank β IBAN + BIC (required for SEPA payment instructions in XRechnung/ZUGFeRD)
- Country-specific (DE) β Default Leitweg-ID for B2G XRechnung (optional)
- Template β UUID of a custom PDF template from console.invoice-api.xhub.io/pdf/templates (optional)
- Save.
Generate your first invoice
After install:
- Plugins β Installierte Plugins β Invoice-api xhub for JTL-Shop β tab "Settings" β "Generate invoice (manual trigger)" card.
- Pick an order from the dropdown β click "Generate now".
- The plugin posts to invoice-api.xhub.io, stores the result on disk, and shows a green confirmation card with a clickable filename.
- The "Generated invoices" history table on the same tab lists every invoice with format, byte size, timestamp and a download link.
For automatic generation: change an order's status in your JTL-Wawi-driven workflow (or directly in the JTL-Shop admin if your setup permits). The plugin's listener fires on order-status-change and generates the invoice when the new status matches the configured trigger.
Custom PDF templates β when the output looks the same
Configure the Template UUID in the Configuration tab. The plugin sends it to the API on every generation. The Settings tab shows for each generated invoice exactly which template UUID was sent (column "Template" in the History table) and the API's content hash.
A custom template inherits the system default until you actually edit its layout, logo and colors at console.invoice-api.xhub.io/pdf/templates. If your generated PDF still looks identical to the default, the UUID is reaching the API correctly (visible in the History table) β the template content itself has not yet been customised.
Country support (11 country profiles)
| Country | Code | XRechnung | ZUGFeRD | |
|---|---|---|---|---|
| Germany | DE | β | β | β |
| Austria | AT | β | β | β |
| France | FR | β | β | β |
| Italy | IT | β | β | β |
| Spain | ES | β | β | β |
| Belgium | BE | β | β | β |
| Netherlands | NL | β | β | β |
| Bulgaria | BG | β | β | β |
| Romania | RO | β | β | β |
| Czech Republic | CZ | β | β | β |
| Hungary | HU | β | β | β |
API roadmap (Q3 2026 onwards): Factur-X (FR), FatturaPA (IT), Facturae (ES), ebInterface (AT), UBL, ISDOC (CZ), NAV (HU). The plugin will surface these in the Format dropdown automatically as soon as the API supports them.
Compliance
- Β§14 UStG (Germany) β gap-free atomic invoice numbering when
using the
{seq:0000}token format. The counter lives in a dedicated DB table and is race-safe under concurrent generations. - EN 16931 + XRechnung 3.0 + Peppol BIS Billing 3.0 for German B2G XML invoices.
- GDPR β all invoice files live on your own server; nothing is
stored externally except the API call to invoice-api.xhub.io for the
document generation itself.
Bootstrap::uninstalled($deleteData=true)cleanly removes both DB tables and all generated files.
Where files and data go
- Generated invoices:
plugins/xhubio_invoice_api_xhub/files/<orderID>/<filename> - Sequence counter (for atomic numbering):
xplugin_xhubio_invoice_api_xhub_seqtable - Per-order metadata (filename, format, error history):
xplugin_xhubio_invoice_api_xhub_metatable
The Settings tab in the plugin admin shows the resolved storage path, total invoice count, and the most-recent generation timestamp.
Support
- API console: console.invoice-api.xhub.io
- Email: support@invoice-api.xhub.io
- Plugin source / issues: public release pending
License
MIT β see the "Lizenzvereinbarungen" tab for the full text.