Les anciennes routes de l’API de désabonnement seront désactivées à partir du 1er novembre 2026. Après cette date, les appels à ces routes ne fonctionneront plus. Pour éviter toute interruption, tous les processus qui les utilisent encore (votre propre code, Zapier, Make, n8n) doivent donc passer aux routes v2 de désabonnement multicanal. Cet article présente l’équivalent de chaque ancienne route, les changements dans les réponses qui peuvent empêcher votre code de fonctionner et les nouvelles routes de désabonnement par contact et en masse.
Pourquoi ce changement ?
La fonctionnalité de désabonnement a été conçue à une époque où l’email était le seul canal disponible sur lemlist. Avec l’arrivée de nouveaux canaux, le système de désabonnement a été revu pour les prendre en charge.
Cette refonte permet aussi de désabonner un contact, tous canaux confondus. Aucune communication ne lui sera alors envoyée, y compris sur les canaux qui seront ajoutés à la plateforme par la suite.
Avant de commencer
Les appels aux anciennes routes ne fonctionneront plus à partir du 1er novembre 2026.
Les anciennes routes acceptent uniquement les adresses email et les domaines. Pour désabonner des URL LinkedIn ou des numéros de téléphone, vous devez utiliser la v2.
Vous ne pouvez pas réabonner une variable dont la source est
leadouabuse. Ces sources sont protégées : la requête renvoie le code409.Sur la route qui renvoie la liste, le paramètre
limitaccepte une valeur maximale de 100.Une requête de désabonnement en masse peut contenir jusqu’à 10 000 valeurs.
Il vous faut :
Une clé API lemlist : consultez Accéder à l’API lemlist et l’utiliser.
La liste de tous les scripts, intégrations et automatisations qui appellent actuellement une route
/unsubscribes.
Notions clés
Variable : une donnée de contact que vous pouvez désabonner. Quatre types sont possibles : adresse email, domaine (commençant par @), URL LinkedIn et numéro de téléphone.
Contact : une personne identifiée par un
contactId(préfixecon_). Le désabonnement d’un contact active l’indicateurdoNotContact, qui bloque tous les canaux. La route de récupération d’un contact (GET) renvoie cet indicateur dans le champ booléenunsubscribed.Source : l’origine d’un désabonnement. Valeurs possibles :
api,bounced,lead,user,abuse.Idempotence : si vous désabonnez une variable qui l’est déjà, l’API renvoie l’enregistrement existant avec le code
200.
Partie 1 : remplacer chaque ancien appel par son équivalent v2
Ces cinq anciennes routes vont être désactivées. Remplacez chacune par son équivalent direct en v2 : l’action reste la même.
POST /unsubscribes/{email}→POST /v2/unsubscribes/variables/{value}(Désabonner une variable)GET /unsubscribes/{email}→GET /v2/unsubscribes/variables/{value}(Récupérer une variable désabonnée)GET /unsubscribes→GET /v2/unsubscribes/variables(Lister les variables désabonnées)DELETE /unsubscribes/{email}→DELETE /v2/unsubscribes/variables/{value}(Réabonner une variable)GET /unsubs/export→GET /v2/unsubscribes/exports/variables(Exporter les variables désabonnées)
✅ À vérifier : l’appel à la route v2 renvoie l’enregistrement avec le code 200, et l’ancienne route correspondante n’est plus appelée nulle part dans votre processus.
Partie 2 : adapter votre code aux nouvelles réponses
Ces changements peuvent empêcher votre code client de fonctionner. Vérifiez votre intégration actuelle point par point.
Désabonnement d’une variable (POST) : le champ
emaila été supprimé. Lisezvalueà la place. La réponse contient aussi les champsvariableetsource.Récupération d’une variable (GET) : la réponse ne contient plus
createdAt. Si la valeur est introuvable, vous obtenez404avec le message"Variable not found". Si la valeur est vide, vous obtenez400au lieu de500.Réabonnement d’une variable (DELETE) : la réponse est une simple chaîne de caractères,
"Variable subscribed", et non un objet JSON. Si la valeur n’existe pas, vous obtenez400au lieu de404. Si la source est protégée, vous obtenez409.Récupération de la liste (GET) : le format ne change pas. Le paramètre
limitaccepte désormais une valeur maximale de 100.Export CSV : la colonne
_idest ajoutée en première position. Les colonnes sont désormais_id, value, source, createdAt.
Une prochaine mise à jour modifiera les routes qui renvoient une simple chaîne de caractères, par exemple "Variable not found" ou "Variable subscribed". Ces routes renverront du JSON pour uniformiser l’API. Ne faites pas dépendre votre code du texte exact de la chaîne renvoyée.
✅ À vérifier : votre code ne lit pas le champ email dans une réponse POST, ne dépend pas du texte exact de la réponse DELETE et ne se base pas sur la position des colonnes de l’export.
Partie 3 : mettre à jour vos webhooks
Depuis le 30 mars 2026, le désabonnement d’un contact ne déclenche plus l’événement emailsUnsubscribed.
Abonnez-vous plutôt à entityUnsubscribed (contact, tous canaux confondus) ou à variableUnsubscribed (une seule variable).
Partie 4 : utiliser les nouveautés de la v2 (facultatif)
Vous pouvez désormais désabonner des variables en masse :
POST /v2/unsubscribes/variables→ Désabonner des variables en masse
Vous avez aussi accès à de nouvelles routes pour gérer les désabonnements au niveau du contact, plutôt que pour un canal précis :
GET /v2/unsubscribes/contacts/{contactId}→ Récupérer le statut d’abonnement d’un contactPOST /v2/unsubscribes/contacts/{contactId}→ Désabonner un contactDELETE /v2/unsubscribes/contacts/{contactId}→ Réabonner un contactGET /v2/unsubscribes/exports/contacts→ Exporter les contacts désabonnés
Exemple
Un formulaire sur votre site internet permet de se désabonner. Votre script récupère l’adresse email dans la réponse pour la journaliser.
Avant : vous appeliez POST /unsubscribes/{email}, puis lisiez le champ email dans la réponse.
Après : appelez POST /v2/unsubscribes/variables/{value}, puis lisez le champ value. La réponse contient aussi variable et source. Si cette valeur est déjà désabonnée, l’API renvoie l’enregistrement existant avec le code 200 : vous n’avez donc pas besoin de vérifier son statut au préalable.
Si vous souhaitez bloquer toute communication avec cette personne sur tous les canaux, et pas seulement pour une adresse email, appelez plutôt POST /v2/unsubscribes/contacts/{contactId}. Cet appel active l’indicateur doNotContact sur le contact.
Problèmes courants et solutions
Problème : une requête GET qui fonctionnait auparavant renvoie 404 avec "Variable not found".
Cause : la valeur n’est pas désabonnée. La v2 renvoie donc un code 404, alors que votre code attendait la réponse de l’ancienne API.
Solution : traitez 404 comme l’indication que cette valeur n’est pas désabonnée, et non comme une erreur. Ne lisez plus createdAt dans cette réponse.
Problème : vous obtenez 409 lors du réabonnement d’une variable.
Cause : la variable a été désabonnée par une source protégée : lead ou abuse.
Solution : lisez le champ source avant de tenter un réabonnement, excluez les variables dont la source est protégée et gérez le code 409 sans relancer la requête.
Problème : votre appel DELETE échoue au moment de traiter la réponse.
Cause : la réponse est actuellement une simple chaîne de caractères, "Variable subscribed", et non un objet JSON. Elle passera au format JSON lors d’une prochaine mise à jour.
Solution : adaptez le traitement de la réponse pour accepter aussi bien une simple chaîne de caractères qu’un objet JSON. Ne faites jamais dépendre la logique de votre code du texte exact de la réponse. Appuyez-vous plutôt sur le code de statut : si la valeur n’existe pas, vous recevrez 400 au lieu de 404.
Problème : l’adresse email n’apparaît plus dans la réponse après un désabonnement.
Cause : le champ email a été supprimé de la réponse à la requête POST sur une variable.
Solution : lisez value à la place.
Autres cas de figure
Si vous gérez les désabonnements directement dans lemlist, et non via l’API, consultez Utiliser la section « Désabonnements ».
Si vos désabonnements sont transmis à un CRM, consultez Synchroniser les désabonnements entre lemlist et votre CRM.
Si vous devez d’abord créer ou retrouver une clé API, consultez Accéder à l’API lemlist et l’utiliser.
Cette migration demande un peu de travail. Si vous avez besoin d’aide supplémentaire, contactez l’équipe support ou votre responsable de compte attitré.
