Magento 2 → Xero. Hands-off.
Invoices, credit notes, customers, products, payments — synced from Magento into Xero within minutes. Bank-transaction explanations attached against the matching invoice automatically. Full audit trail per sync run. We host the connector — you install a thin Magento module and forget about it.
Five Magento entity events flow into Xero automatically — with full idempotency, retry, and audit on every step.
Invoices + payments
Magento invoices land in Xero as Open AR the moment they're raised. invoice.paid attaches a bank_transaction_explanation against the matching Xero invoice automatically. B2B net-terms flows leave invoices Open for manual reconciliation.
Credit notes
Magento credit memos sync as Xero credit notes with original-invoice linkage. Offline-payment refunds (no parent invoice) handled. Same per-line discount + per-line tax invariants as invoices.
Income categories
Set a default Xero income category URL on the binding — every invoice line that doesn't carry its own routing books to it. Live-validated against your account's category list, so typos surface form-time, not as a 422 dead-letter.
See sync status without leaving the Magento admin you already live in.
Xero Status chip on grids
Sortable + filterable Xero Status column on Sales → Invoices and Sales → Credit Memos. Pending / Synced / Skipped / Failed chips with hover tooltips for the underlying Xero reference, skip-reason, or error code.
Detail-page info block
Every Invoice and Credit Memo detail page gets a Xero info block beside Order Information — chip, Xero entity reference, last sync timestamp, skip / error context.
Dead-letter banner
Failed deliveries surface as a banner on the admin config page — operator-visible without log diving. Per-row retry from the ledger dashboard re-enters the queue cleanly.
The Magento module is thin by design. The heavy lifting lives in the hosted ledger — so you never patch your connector.
No OAuth in PHP
Xero OAuth lives entirely in our hosted ledger SaaS. Magento never talks to api.xero.com directly — no client secret on disk, no token rotation logic on your server, no breaking-API patches to ship.
Pairing-code Connect
Generate a 30-min pairing code in your Magento admin, paste it into ledger.byte8.io, and the chassis handshakes back in. No callback URL wrangling, no app secret on disk.
Centrally-patched
Xero API breaks? We patch the chassis and every connected merchant gets the fix. The two known Xero v2 quirks (payment_terms_in_days required on every POST, stringified numbers on responses) already catalogued and worked around — your invoice flow stays green through API drift.
60 seconds to live sync.
composer require byte8/magento-xero-accounting · run setup:upgrade · pair with ledger.byte8.io.