Connecter Xero à n8n : automatiser factures, contacts et rapprochement bancaire
Publié le 17 août 2026 · 6 min de lecture
Xero est l'un des logiciels de comptabilité les plus utilisés hors de France — Royaume-Uni, Australie, Nouvelle-Zélande, Canada — et son API est publique et bien documentée. n8n propose un node natif, mais il ne couvre que deux ressources : contacts et factures. Pour le reste, notamment les transactions bancaires nécessaires à un vrai rapprochement automatisé, il faut passer par le node HTTP Request en appelant l'API directement. Ce guide couvre l'authentification OAuth2, la particularité du tenant ID propre à Xero, ce que le node natif permet, et comment étendre l'automatisation au-delà avec HTTP Request — le même principe que celui détaillé dans notre guide de rapprochement bancaire avec Qonto, côté comptabilité plutôt que côté banque.
Créer l'application dans le portail développeur Xero
Contrairement à Qonto ou à d'autres API financières qui acceptent une clé statique, Xero n'authentifie qu'en OAuth2 — aucune alternative par jeton personnel. La création de l'app se fait sur developer.xero.com, section My Apps :
- Créer une nouvelle app de type Web app (pas Mobile ni Desktop).
- Renseigner l'URL de votre instance n8n (ou de votre reverse proxy, cf. notre guide n8n derrière Traefik ou Caddy) comme « Company or Application URL ».
- Récupérer le Client ID généré, puis créer un Client Secret (affiché une seule fois, à copier immédiatement).
Dans n8n, créez un credential Xero OAuth2 API, collez Client ID et Client Secret. n8n génère alors une Redirect URI à reporter dans la configuration de l'app Xero — sans cet aller-retour, l'autorisation échoue avec une redirection invalide.
Choisir les bons scopes
À la création du credential, deux scopes couvrent l'essentiel des opérations du node natif :
accounting.contacts— lecture/écriture des contacts (clients, fournisseurs).accounting.transactions— lecture/écriture des factures et, via HTTP Request, des transactions bancaires.
Un scope oublié ne fait pas planter le credential existant : l'autorisation reste valide pour ce qu'elle couvre, mais toute opération hors scope renvoie une erreur 403. Si vous ajoutez un usage plus tard (notes de crédit, éléments de facture détaillés), il faut reconnecter le credential avec les scopes étendus plutôt que de chercher l'erreur ailleurs.
Les tokens d'accès expirent au bout de 30 minutes, mais n8n gère le rafraîchissement automatiquement via le refresh token tant que le credential reste connecté — pas de node Wait ni de logique de renouvellement à ajouter côté workflow.
Le tenant ID : la particularité qui bloque le plus de monde
Xero est nativement multi-organisation : un même token OAuth2 peut donner accès à plusieurs organisations Xero (cas d'un cabinet comptable qui gère plusieurs clients, un peu comme décrit dans notre guide sur l'hébergement n8n en agence multi-clients). Conséquence directe : chaque appel à l'API Xero doit préciser l'organisation ciblée via l'en-tête Xero-tenant-id, sans quoi la requête échoue même avec un token parfaitement valide.
Pour le node natif, n8n gère cette étape automatiquement en arrière-plan. Pour un appel HTTP Request manuel, il faut le faire soi-même :
- Un appel
GET https://api.xero.com/connectionsavec le token OAuth2 en en-têteAuthorization: Bearer {token}renvoie la liste des organisations autorisées, chacune avec sontenantId. - Ce
tenantIdest ensuite injecté dans l'en-têteXero-tenant-idde chaque appel suivant.
Sur une instance à organisation unique, ce tenantId peut être récupéré une fois et stocké dans une variable d'environnement n8n (voir notre guide des variables d'environnement n8n) plutôt que rappelé à chaque exécution.
Ce que le node natif permet : contacts et factures
Le node Xero de n8n expose deux ressources, avec les opérations Create, Update, Get et Get Many pour chacune :
| Ressource | Opérations | Cas d'usage typique |
|---|---|---|
| Contact | Create, Update, Get, Get Many | Synchroniser vos clients/prospects (CRM, formulaire de commande) vers Xero sans ressaisie |
| Invoice | Create, Update, Get, Get Many | Générer une facture Xero automatiquement à la clôture d'une commande ou d'un abonnement |
Un cas d'usage concret : un webhook Stripe ou une commande e-commerce déclenche un workflow n8n qui vérifie (Get Many sur Contact) si le client existe déjà dans Xero, le crée sinon, puis génère la facture correspondante avec les bonnes lignes. C'est le même principe d'upsert idempotent que celui détaillé dans notre guide de connexion d'Attio à n8n — vérifier avant de créer, pour ne jamais dupliquer un contact à chaque exécution.
Aller au-delà : transactions bancaires par HTTP Request
Le node natif ne couvre pas les transactions bancaires (BankTransactions), pourtant indispensables à un vrai rapprochement automatisé — comparer les mouvements bancaires importés dans Xero aux factures émises, et signaler les écarts avant la clôture. Il faut passer par un node HTTP Request, en réutilisant le credential OAuth2 existant plutôt qu'en dupliquant l'authentification :
- URL :
https://api.xero.com/api.xro/2.0/BankTransactions - Authentification : Generic Credential Type → OAuth2, en pointant vers le credential Xero déjà créé.
- En-têtes obligatoires :
Xero-tenant-id(récupéré comme détaillé plus haut) etAccept: application/json. - Filtre utile : le paramètre
wherepermet de restreindre par date (Date >= DateTime(2026, 08, 01)) pour éviter de retélécharger tout l'historique à chaque exécution — le même principe de fenêtre incrémentale que celui décrit dans notre guide pour garder un index à jour sans tout retraiter.
Le rapprochement lui-même suit la logique détaillée dans notre guide du node Compare Datasets : les transactions bancaires côté Xero d'un côté, les factures émises de l'autre, un champ de rapprochement (montant et date à quelques jours près), et une sortie « sans correspondance » qui déclenche une alerte Slack plutôt que d'attendre la clôture mensuelle.
Rythmer les appels sans se faire limiter
Xero impose 60 appels par minute par organisation, avec un plafond quotidien en complément. Sur un traitement par lot (synchroniser 200 contacts, importer un mois de transactions), un node Wait d'une à deux secondes entre chaque appel HTTP Request évite un code 429 en cours d'exécution — plus simple à anticiper qu'à corriger après coup, comme le rappelle notre guide sur la gestion du rate limit des API dans n8n.
Pourquoi automatiser vaut le détour
Une revue de la littérature sur l'automatisation robotisée des processus (RPA) en cabinet comptable, publiée par Perdana, Lee et Chu dans International Journal of Accounting Information Systems en 2023 (« Prototyping and implementing Robotic Process Automation in accounting firms », voir sur Google Scholar), documente des gains de fiabilité mesurables sur les tâches répétitives de rapprochement et de saisie une fois automatisées, en cabinet comme en entreprise. Ce constat rejoint un problème plus ancien et bien documenté : la ressaisie manuelle de données financières reste une source d'erreurs difficile à éliminer par la seule vigilance humaine, comme le montrent les travaux de Raymond Panko sur les erreurs de saisie dans les tableurs (« What We Know About Spreadsheet Errors », Journal of Organizational and End User Computing, 1998, voir sur Google Scholar) — une justification de plus pour faire transiter les données de commande à facture, ou de banque à comptabilité, par une API plutôt que par une ressaisie manuelle à chaque étape.
Pour aller plus loin
Connecter Xero à n8n permet d'éliminer la double saisie entre votre CRM, votre outil de commande et votre comptabilité, et de construire un rapprochement bancaire qui alerte en continu plutôt qu'à la clôture. Si votre pile inclut déjà une piste d'audit ou des preuves de conformité à documenter (ISO 27001, SOC 2, RGPD), notre Pack Conformité & Audit (149 €) construit sur les mêmes principes de journalisation et d'alerte sur écart. Pour une boîte mail qui génère elle-même des factures et devis à intégrer dans Xero, le Pack Inbox IA (79 €) trie et priorise en amont ; le Bundle FlowKit Complet (269 €) réunit les trois packs pour une automatisation de bout en bout.
FAQ
Questions fréquentes
Le node Xero natif de n8n suffit-il pour tout automatiser ?
Non. Le node natif ne couvre que deux ressources : Contact et Invoice (créer, mettre à jour, récupérer un ou plusieurs enregistrements). Pour tout le reste — transactions bancaires, notes de crédit, éléments de facture détaillés, journaux comptables — il faut passer par le node HTTP Request en appelant directement l'API Xero, en réutilisant le même credential OAuth2.
Pourquoi mes appels à l'API Xero échouent-ils avec une erreur 400 malgré un token valide ?
La cause la plus fréquente est l'absence de l'en-tête Xero-tenant-id. L'API Xero est multi-organisation : un même token OAuth2 peut donner accès à plusieurs organisations Xero, donc chaque requête (sauf l'appel à /connections lui-même) doit préciser explicitement l'organisation ciblée via cet en-tête, récupéré une fois via GET https://api.xero.com/connections.
Faut-il renouveler manuellement le token Xero dans n8n ?
Non. Les tokens OAuth2 Xero expirent au bout de 30 minutes, mais n8n gère le renouvellement automatiquement via le refresh token tant que le credential reste valide. Le point d'attention concerne plutôt les scopes : accounting.contacts et accounting.transactions couvrent l'essentiel, mais un scope oublié à la création du credential impose de reconnecter le compte pour l'ajouter.
Quelle est la limite de requêtes de l'API Xero ?
Xero applique une limite de 60 appels par minute par organisation (tenant), avec un plafond quotidien également en place. Sur un workflow qui traite un lot de transactions ou de factures, un node Wait d'une à deux secondes entre les appels évite de déclencher un code 429 en cours d'exécution.
Bundle FlowKit Complet
269 €