FlowKit

Connecter GoCardless à n8n : automatiser le suivi des prélèvements SEPA et des impayés

Publié le 30 août 2026 · 7 min de lecture

Un prélèvement SEPA échoue, et la première alerte visible arrive parfois trois semaines plus tard, au rapprochement comptable mensuel — trop tard pour relancer le client avant que l'abonnement bascule en impayé chronique. Contrairement à un paiement par carte, un défaut de prélèvement SEPA se règle rarement en resoumettant simplement la transaction : encore faut-il savoir s'il s'agit d'un défaut de provision (le prélèvement suivant a des chances de passer) ou d'un mandat annulé (aucune nouvelle tentative n'aboutira). L'API GoCardless expose ces distinctions via des webhooks en temps réel — de quoi construire avec n8n un pipeline qui réagit à la vraie nature de l'incident, plutôt qu'une relance générique envoyée à l'aveugle.

Pourquoi automatiser plutôt que consulter le tableau de bord

Le tableau de bord GoCardless liste bien chaque paiement et son statut, mais il faut l'ouvrir pour le savoir — aucune alerte ne remonte spontanément vers l'équipe qui gère la relation client ou la comptabilité. Un abonnement dont le prélèvement échoue silencieusement continue souvent de fournir le service pendant plusieurs semaines, jusqu'à ce que quelqu'un remarque l'écart. C'est exactement le type de délai que corrige un workflow déclenché par événement plutôt que par consultation manuelle — le même principe que celui détaillé dans notre guide sur les relances de paiement Stripe par webhook, à ceci près que la mécanique des impayés SEPA (défaut de provision, mandat annulé, rejet bancaire) diffère suffisamment d'un refus de carte bancaire pour mériter son propre pipeline.

Générer un token d'accès

Aucune démarche partenaire n'est nécessaire pour un usage interne. Depuis le tableau de bord GoCardless : Paramètres du compte → Développeurs → Créer un token d'accès. Un environnement sandbox (api-sandbox.gocardless.com) existe en parallèle du live (api.gocardless.com) : commencez systématiquement en sandbox pour tester le pipeline avec de faux prélèvements avant de brancher le compte réel — GoCardless fournit des scénarios de test qui déclenchent volontairement chaque type d'échec.

Authentifier n8n auprès de l'API

Aucun node natif GoCardless n'existe dans n8n pour l'API de paiement — attention à ne pas confondre avec le package n8n-nodes-gocardless-bad trouvable en Community Nodes, qui cible en réalité l'API « GoCardless Bank Account Data » (l'ex-Nordigen, service d'open banking distinct racheté par GoCardless, mais avec sa propre API et son propre cas d'usage d'agrégation de comptes). Pour piloter des prélèvements, mandats et remboursements, le node HTTP Request consomme directement l'API REST :

  • Créez un credential Generic Credential Type → Header Auth avec l'en-tête Authorization et la valeur Bearer <votre_token>.
  • Chaque requête doit également porter l'en-tête GoCardless-Version avec une version d'API publiée (par exemple 2015-07-06, la version de référence documentée par GoCardless) — son absence renvoie une erreur, contrairement à beaucoup d'API REST où la version est optionnelle.

Écouter les événements en temps réel plutôt qu'interroger l'API en boucle

GoCardless livre les événements par webhooks : une requête POST unique peut regrouper jusqu'à 250 événements, chacun porteur d'un resource_type (payments, mandates, subscriptions…), d'une action (failed, cancelled, confirmed…) et de détails sur la cause. Trois événements couvrent l'essentiel d'un pipeline de suivi des impayés :

  • payments.failed — un prélèvement isolé a échoué (défaut de provision le plus souvent). GoCardless retente généralement selon son propre calendrier ; le mandat, lui, reste valide.
  • payments.charged_back — le client a contesté le prélèvement auprès de sa banque après l'avoir laissé passer, un signal plus grave qu'un simple échec puisqu'il implique une réclamation active.
  • mandates.cancelled ou mandates.failed — l'autorisation de prélèvement elle-même n'existe plus (annulation par le client, compte fermé, IBAN invalide). Aucune nouvelle tentative de prélèvement n'aboutira tant qu'un nouveau mandat n'a pas été signé : relancer sur l'ancien mandat est une perte de temps.

Un node Webhook n8n reçoit ces POST bruts ; comme pour tout webhook exposé publiquement, référez-vous à notre guide de sécurisation des webhooks n8n pour l'exposition HTTPS et les bonnes pratiques générales avant d'aller plus loin.

Vérifier la signature avant de traiter quoi que ce soit

Chaque requête webhook GoCardless porte un en-tête Webhook-Signature, calculé en HMAC-SHA256 sur le corps brut de la requête avec le secret de votre endpoint (généré au moment de la configuration du webhook dans le tableau de bord). Un node Code recalcule ce HMAC côté n8n et le compare à l'en-tête reçu — sans base64, le secret s'utilise tel quel comme clé HMAC. Si la comparaison échoue, le workflow doit s'arrêter avant de lire le contenu du payload : c'est la seule garantie que l'événement provient bien de GoCardless et non d'un tiers qui aurait deviné l'URL de l'endpoint. Une requête peut porter plusieurs événements dans le même tableau events, d'où l'intérêt d'un node Split Out juste après la vérification, pour traiter chaque événement individuellement dans la suite du workflow.

Router selon la nature de l'incident

Une fois la signature vérifiée et les événements séparés, un node Switch aiguille selon resource_type et action :

  1. payments.failed → vérifier le nombre de tentatives déjà effectuées pour ce prélèvement (retry_if_possible dans la réponse GoCardless indique si une nouvelle tentative automatique est prévue) ; si oui, notifier sans urgence particulière ; si non (délai de relance épuisé côté GoCardless), déclencher une relance client avec lien de mise à jour des coordonnées bancaires.
  2. payments.charged_back → alerte prioritaire vers la comptabilité, ce cas nécessitant souvent une réponse manuelle documentée plutôt qu'une relance automatique.
  3. mandates.cancelled ou mandates.failed → suspendre l'accès au service concerné (si l'abonnement le justifie) et envoyer un lien de re-signature de mandat plutôt qu'une relance de paiement classique — les deux messages n'ont ni le même contenu ni la même urgence.

Ce pattern de routage par nature d'incident, avant de choisir l'action, rejoint celui déjà détaillé pour la gestion des erreurs avec l'Error Workflow n8n : mieux vaut une branche dédiée par type d'échec qu'un catch générique qui traite tout de la même façon.

Journaliser chaque événement

Une table Supabase dédiée — identifiant de paiement ou de mandat GoCardless, type d'événement, date, action déclenchée — permet de répondre en quelques secondes à la question « pourquoi ce client a-t-il été relancé ? » sans rouvrir le tableau de bord GoCardless. Notre guide de connexion n8n ↔ Supabase couvre la mise en place de ce type de table, sur le même principe que la piste d'audit RGPD déjà décrite pour d'autres flux sensibles : une ligne par événement, horodatée côté serveur, jamais réécrite après coup. Comme GoCardless retente la livraison d'un webhook si votre endpoint ne répond pas rapidement, ajoutez une contrainte d'unicité sur l'identifiant de l'événement pour éviter un double traitement — le même mécanisme d'idempotence des webhooks déjà nécessaire pour Stripe s'applique ici à l'identique.

Ce que dit la recherche sur la détection automatisée d'anomalies bancaires

Au-delà du simple routage par type d'événement, un pipeline de suivi des impayés qui tourne depuis plusieurs mois accumule un historique exploitable pour repérer des motifs plus fins qu'un échec isolé — un mandat qui échoue puis se réactive de façon suspecte, une série de rejets groupés sur une courte période. Une étude de Preciado Martínez, Reier Forradellas, Garay Gallastegui et Náñez Alonso, publiée en 2025 dans Cogent Business & Management (« Comparative analysis of machine learning models for the detection of fraudulent banking transactions », voir sur Google Scholar), a comparé plusieurs modèles sur 565 000 transferts bancaires réels : un modèle Random Forest atteignait 95,79 % de précision sur la détection des transactions frauduleuses, contre une précision quasi parfaite sur les transactions légitimes. La même logique — un modèle entraîné sur l'historique journalisé plutôt qu'un seuil fixe arbitraire — s'applique à un pipeline GoCardless mature : une fois quelques centaines d'événements accumulés dans Supabase, un nœud IA nourri de cet historique peut proposer un score de risque par client plutôt qu'un simple compteur d'échecs.

Pièges fréquents

  • Traiter tout échec comme un défaut de provision. Un mandat annulé (mandates.cancelled) ne se résout jamais par une nouvelle tentative — seule une nouvelle autorisation signée par le client répare la situation.
  • Oublier l'en-tête GoCardless-Version. Une requête HTTP Request sans cet en-tête échoue immédiatement, contrairement à la plupart des API REST où la version est implicite.
  • Confondre les deux API GoCardless. Le node communautaire disponible sur npm cible l'open banking (agrégation de comptes), pas les prélèvements SEPA — vérifiez quelle API un package tiers couvre avant de l'installer.
  • Ne tester qu'en environnement live. Le sandbox GoCardless simule chaque type d'échec (provision insuffisante, mandat refusé, compte fermé) sans risque, sur le même principe que le test des webhooks n8n en local.

En résumé

Un impayé SEPA qui remonte trois semaines trop tard coûte plus cher qu'une relance envoyée dans l'heure — et surtout, une relance envoyée au mauvais moment (sur un mandat déjà annulé) ne sert à rien. En branchant n8n sur les webhooks GoCardless plutôt que sur une consultation manuelle du tableau de bord, chaque incident déclenche la réponse adaptée à sa vraie nature dès qu'il survient. Si votre priorité est justement de tracer ce type de flux financier avec une piste d'audit démontrable, le Pack Conformité & Audit (149 €) fournit déjà le schéma Supabase et les workflows de relance réutilisables pour la partie journalisation. Le Pack Inbox IA (79 €) complète le tableau côté tri des emails entrants liés aux réclamations de paiement, et le Bundle FlowKit Complet (269 € au lieu de 347 € pris séparément) réunit les trois packs pour couvrir l'ensemble du parcours financier.

FAQ

Questions fréquentes

Existe-t-il un node n8n natif pour GoCardless ?

Non, pas pour l'API de paiement GoCardless. Le seul package trouvable sur npm sous ce nom cible en réalité l'API « GoCardless Bank Account Data » (l'ex-Nordigen, un service d'open banking distinct, racheté par GoCardless mais avec sa propre API). Pour piloter des prélèvements SEPA, des mandats et des remboursements, il faut passer par le node HTTP Request de n8n, en s'appuyant sur l'API REST publique et documentée de GoCardless.

Faut-il un compte GoCardless payant pour utiliser l'API ?

Non : un compte standard suffit, avec un token d'accès généré depuis le tableau de bord (Paramètres du compte → Développeurs → Créer un token d'accès). Un environnement sandbox distinct (api-sandbox.gocardless.com) permet de tester les webhooks et les appels API sans manipuler de vrais prélèvements avant la mise en production.

Comment distinguer un impayé ponctuel d'un mandat définitivement perdu ?

Ce sont deux événements webhook différents : `payments.failed` signale un prélèvement isolé qui a échoué (souvent un défaut de provision), généralement suivi d'une nouvelle tentative automatique par GoCardless selon un calendrier de relance ; `mandates.cancelled` ou `mandates.failed` signale que l'autorisation de prélèvement elle-même n'existe plus (annulation côté client ou côté banque), ce qui rend toute nouvelle tentative de prélèvement inutile tant qu'un nouveau mandat n'a pas été signé.

Bundle FlowKit Complet

269 €