Listes de contacts
Gérez les listes d’abonnés utilisées par les campagnes et les formulaires d’inscription.
Créer une liste de contacts
Crée une liste de contacts vide.
/audiencesNécessite une clé API full. Ajoutez des personnes avec Ajouter un abonné, ou en transmettant l’ID de la liste dans audiences lorsque vous créez un contact. Déclenche l’événement audience.created. Consultez Listes de contacts.
Paramètres du corps
namestringobligatoireNewsletter. Doit être unique dans l’espace de travail.visibilitystringpar défaut : privatepublic affiche la liste sur la page de gestion des abonnements pour tout le monde ; private, uniquement pour les personnes qui y sont abonnées.public_namestring | nullnull affiche name.public_descriptionstring | nulldouble_opt_inboolean | objecttrue ou false, ou un objet contenant tout ou partie de enabled, redirect_url (une URL http(s) vers laquelle les personnes sont redirigées après confirmation, ou null) et email. email accepte from, reply_to, subject, design (default ou custom), heading, body, button_label et footer. Les champs omis conservent leur valeur enregistrée. L’activation nécessite une adresse from sur un domaine d’envoi vérifié. Consultez Double opt-in.
confirmation_emailboolean | objecttrue ou false, ou un objet avec enabled et email, qui accepte les mêmes champs que ci-dessus, plus button_url.unengagedobjectRéponse
Renvoie 201 avec la nouvelle liste, y compris ses paramètres, tels que décrits dans Récupérer une liste de contacts :
objectstringaudience.idstringnamestringtokenstringvisibilitystringpublic ou private.created_atstringupdated_atstring{
"object": "audience",
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"token": "4KXUJdXRVlVgbkWQm4GHLy8BleP",
"visibility": "private",
"public_name": null,
"public_description": null,
"double_opt_in": {
"enabled": false,
"redirect_url": null,
"email": {
"from": null,
"reply_to": null,
"subject": "Confirm your subscription to {{audience_name}}",
"design": "default",
"heading": "Please confirm your subscription",
"body": "Hi {{first_name|\"there\"}},\n\nYou asked to join {{audience_name}}. Confirm your email address to start getting our emails.",
"button_label": "Confirm subscription",
"footer": "Button not working? Open this link: <a href=\"{{confirm_url}}\">{{confirm_url}}</a>\n\nIf you did not ask to subscribe, ignore this email. You will not be added unless you confirm.",
"source": null
}
},
"confirmation_email": {
"enabled": false,
"email": {
"from": null,
"reply_to": null,
"subject": "You're subscribed to {{audience_name}}",
"design": "default",
"heading": "You're subscribed",
"body": "Hi {{first_name|\"there\"}},\n\nThanks for joining {{audience_name}}. You will hear from us soon.",
"button_label": "",
"button_url": "",
"footer": "You are getting this email because you subscribed to {{audience_name}}. <a href=\"{{manage_subscriptions_url}}\">Manage subscriptions</a>",
"source": null
}
},
"unengaged": { "exclude": false, "days": 365 },
"archived": false,
"archived_at": null,
"subscribers_count": 0,
"created_at": "2026-10-01T10:02:44.613207Z",
"updated_at": "2026-10-01T10:02:44.613207Z"
}{
"error": "Audience with this name already exists",
"existing": {
"object": "audience",
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"token": "4KXUJdXRVlVgbkWQm4GHLy8BleP",
"subscribers_count": 0,
"created_at": "2026-10-01T10:02:44.000000Z",
"updated_at": "2026-10-01T10:02:44.000000Z"
}
}Récupérer une liste de contacts
Récupère une liste de contacts avec ses paramètres, ses compteurs et son jeton public.
/audiences/{id}Nécessite une clé API full.
Paramètres de chemin
idstringobligatoireaud_…) ou son nom exact, encodé pour l’URL.Réponse
Renvoie l’objet liste.
objectstringaudience.idstringnamestringtokenstringvisibilitystringpublic ou private. Les listes publiques figurent sur la page de gestion des abonnements pour tout le monde ; les listes privées, uniquement pour les personnes qui y sont abonnées.public_namestring | nullnull pour afficher name.public_descriptionstring | nulldouble_opt_inobjectenabled, redirect_url (la page où arrivent les personnes après confirmation, ou null) et email, l’e-mail de double opt-in avec from, reply_to, subject, design (default ou custom), heading, body, button_label, footer et source (le MJML d’un design personnalisé, ou null ; absent dans les listes). Les champs que vous n’avez jamais définis contiennent les valeurs par défaut.
confirmation_emailobjectenabled et email, l’e-mail de confirmation, avec les mêmes champs que ci-dessus, plus button_url.
unengagedobjectexclude (indique si les campagnes ignorent les abonnés inactifs) et days (la période, 365 par défaut).archivedbooleanarchived_at contient la date d’archivage, ou null.subscribers_countintegerusageobjectused (le même nombre), limit (le nombre maximal d’abonnés qu’une liste peut compter sur votre forfait, ou null s’il n’y a pas de limite) et plan. Consultez Limites.
unengaged_countintegerpending_confirmations_countintegercreated_atstringupdated_atstring{
"object": "audience",
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"visibility": "public",
"public_name": "Monthly newsletter",
"public_description": "Product news and tips, once a month.",
"double_opt_in": {
"enabled": true,
"redirect_url": null,
"email": {
"from": "News <news@example.com>",
"reply_to": null,
"subject": "Confirm your subscription to {{audience_name}}",
"design": "default",
"heading": "Please confirm your subscription",
"body": "Hi {{first_name|\"there\"}},\n\nYou asked to join {{audience_name}}. Confirm your email address to start getting our emails.",
"button_label": "Confirm subscription",
"footer": "Button not working? Open this link: <a href=\"{{confirm_url}}\">{{confirm_url}}</a>\n\nIf you did not ask to subscribe, ignore this email. You will not be added unless you confirm.",
"source": null
}
},
"confirmation_email": {
"enabled": false,
"email": {
"from": null,
"reply_to": null,
"subject": "You're subscribed to {{audience_name}}",
"design": "default",
"heading": "You're subscribed",
"body": "Hi {{first_name|\"there\"}},\n\nThanks for joining {{audience_name}}. You will hear from us soon.",
"button_label": "",
"footer": "You are getting this email because you subscribed to {{audience_name}}. <a href=\"{{manage_subscriptions_url}}\">Manage subscriptions</a>",
"button_url": "",
"source": null
}
},
"unengaged": { "exclude": true, "days": 365 },
"archived": false,
"archived_at": null,
"token": "4KXUJdXRVlVgbkWQm4GHLy8BleP",
"subscribers_count": 1284,
"unengaged_count": 212,
"pending_confirmations_count": 3,
"usage": {
"used": 1284,
"limit": 50000,
"plan": "pro"
},
"created_at": "2026-10-01T10:02:44.000000Z",
"updated_at": "2026-10-01T10:02:44.000000Z"
}{
"error": "Audience not found"
}Mettre à jour une liste de contacts
Renomme une liste de contacts ou modifie ses paramètres.
/audiences/{id}Nécessite une clé API full. N’envoyez que les champs à modifier. L’ID, le jeton et les abonnés ne changent pas. Déclenche l’événement audience.updated.
Paramètres de chemin
idstringobligatoireParamètres du corps
namestringvisibilitystringpublic affiche la liste sur la page de gestion des abonnements pour tout le monde ; private, uniquement pour les personnes qui y sont abonnées.public_namestring | nullnull affiche name.public_descriptionstring | nulldouble_opt_inboolean | objecttrue ou false, ou un objet contenant tout ou partie de enabled, redirect_url (une URL http(s) vers laquelle les personnes sont redirigées après confirmation, ou null) et email. email accepte from, reply_to, subject, design (default ou custom), heading, body, button_label et footer. Les champs omis conservent leur valeur enregistrée. L’activation nécessite une adresse from sur un domaine d’envoi vérifié. Consultez Double opt-in.
confirmation_emailboolean | objecttrue ou false, ou un objet avec enabled et email, qui accepte les mêmes champs que ci-dessus, plus button_url.unengagedobjectarchivedbooleanDéfinir un design MJML personnalisé avec email.source fait partie de l’alpha MJML et renvoie 403 avec error: "mjml_alpha" pour les clés API.
Réponse
Renvoie la liste avec ses paramètres, comme Récupérer une liste de contacts. Dans cette réponse, subscribers_count vaut toujours 0 et les compteurs sont omis ; utilisez Récupérer une liste de contacts pour les obtenir. Des paramètres non valides renvoient 422 avec un objet errors indexé par champ, par exemple double_opt_in.email.from.
{
"object": "audience",
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Weekly newsletter",
"token": "4KXUJdXRVlVgbkWQm4GHLy8BleP",
"visibility": "public",
"public_name": "Weekly newsletter",
"public_description": null,
"double_opt_in": {
"enabled": true,
"redirect_url": null,
"email": {
"from": "News <news@example.com>",
"reply_to": null,
"subject": "Confirm your subscription to {{audience_name}}",
"design": "default",
"heading": "Please confirm your subscription",
"body": "Hi {{first_name|\"there\"}},\n\nYou asked to join {{audience_name}}. Confirm your email address to start getting our emails.",
"button_label": "Confirm subscription",
"footer": "Button not working? Open this link: <a href=\"{{confirm_url}}\">{{confirm_url}}</a>\n\nIf you did not ask to subscribe, ignore this email. You will not be added unless you confirm.",
"source": null
}
},
"confirmation_email": {
"enabled": false,
"email": {
"from": null,
"reply_to": null,
"subject": "You're subscribed to {{audience_name}}",
"design": "default",
"heading": "You're subscribed",
"body": "Hi {{first_name|\"there\"}},\n\nThanks for joining {{audience_name}}. You will hear from us soon.",
"button_label": "",
"button_url": "",
"footer": "You are getting this email because you subscribed to {{audience_name}}. <a href=\"{{manage_subscriptions_url}}\">Manage subscriptions</a>",
"source": null
}
},
"unengaged": {
"exclude": false,
"days": 365
},
"archived": false,
"archived_at": null,
"subscribers_count": 0,
"created_at": "2026-10-01T10:02:44.000000Z",
"updated_at": "2026-10-01T14:31:09.000000Z"
}{
"error": "No valid fields provided for update. Provide at least one of: name, visibility, public_name, public_description, double_opt_in, confirmation_email, unengaged, archived"
}{
"message": "Validation failed.",
"errors": {
"double_opt_in.email.from": ["Use an address on a verified sending domain of this workspace."]
}
}{
"error": "Audience not found"
}{
"error": "Another audience with this name already exists"
}Lister les listes de contacts
Renvoie une page de listes de contacts, de la plus récente à la plus ancienne. Les listes archivées sont exclues, sauf si vous les demandez.
/audiencesNécessite une clé API full. Les éléments de la liste n’incluent pas le token de la liste de contacts ; utilisez Récupérer une liste de contacts pour l’obtenir.
Paramètres de requête
pageintegerpar défaut : 1limitintegerpar défaut : 10searchstringarchivedstringpar défaut : falsefalse pour les listes actives, true pour les listes archivées uniquement, all pour les deux.visibilitystringpublic ou private pour ne lister que ces listes.matchstringpar défaut : allall ou or. Mode de combinaison des filtres ci-dessous.orderstringname, public_name, visibility, subscribers_count ou created_at.directionstringasc ou desc.Filtres
Ajoutez des filtres sous la forme key.condition=value, par exemple name.contains=news. Consultez Filtrage et tri.
| Clé | Type |
|---|---|
name |
chaîne |
public_name |
chaîne |
visibility |
enum : public, private |
subscribers_count |
nombre |
created_at |
date |
Réponse
dataobject[]object, id, name, les paramètres (visibility, public_name, public_description, double_opt_in, confirmation_email, unengaged, archived, archived_at), subscribers_count, usage, created_at et updated_at. Consultez Récupérer une liste de contacts. Dans les listes, les objets email omettent source.total_recordsintegerarchived.next_page_urlstring | nullnull. Consultez Pagination.previous_page_urlstring | nullnull.{
"data": [
{
"object": "audience",
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"visibility": "public",
"public_name": "Monthly newsletter",
"public_description": "Product news and tips, once a month.",
"double_opt_in": {
"enabled": true,
"redirect_url": null,
"email": {
"from": "News <news@example.com>",
"reply_to": null,
"subject": "Confirm your subscription to {{audience_name}}",
"design": "default",
"heading": "Please confirm your subscription",
"body": "Hi {{first_name|\"there\"}},\n\nYou asked to join {{audience_name}}. Confirm your email address to start getting our emails.",
"button_label": "Confirm subscription",
"footer": "Button not working? Open this link: <a href=\"{{confirm_url}}\">{{confirm_url}}</a>\n\nIf you did not ask to subscribe, ignore this email. You will not be added unless you confirm."
}
},
"confirmation_email": {
"enabled": false,
"email": {
"from": "News <news@example.com>",
"reply_to": null,
"subject": "You're subscribed to {{audience_name}}",
"design": "default",
"heading": "You're subscribed",
"body": "Hi {{first_name|\"there\"}},\n\nThanks for joining {{audience_name}}. You will hear from us soon.",
"button_label": "",
"footer": "You are getting this email because you subscribed to {{audience_name}}. <a href=\"{{manage_subscriptions_url}}\">Manage subscriptions</a>",
"button_url": ""
}
},
"unengaged": {
"exclude": false,
"days": 365
},
"archived": false,
"archived_at": null,
"subscribers_count": 1284,
"usage": {
"used": 1284,
"limit": 50000,
"plan": "pro"
},
"created_at": "2026-10-01T10:02:44.000000Z",
"updated_at": "2026-10-01T10:02:44.000000Z"
},
{
"object": "audience",
"id": "aud_4KOlh9t2uw5od4qypqCtyrZyDq2",
"name": "Customers",
"visibility": "private",
"public_name": null,
"public_description": null,
"double_opt_in": {
"enabled": false,
"redirect_url": null,
"email": {
"from": null,
"reply_to": null,
"subject": "Confirm your subscription to {{audience_name}}",
"design": "default",
"heading": "Please confirm your subscription",
"body": "Hi {{first_name|\"there\"}},\n\nYou asked to join {{audience_name}}. Confirm your email address to start getting our emails.",
"button_label": "Confirm subscription",
"footer": "Button not working? Open this link: <a href=\"{{confirm_url}}\">{{confirm_url}}</a>\n\nIf you did not ask to subscribe, ignore this email. You will not be added unless you confirm."
}
},
"confirmation_email": {
"enabled": false,
"email": {
"from": null,
"reply_to": null,
"subject": "You're subscribed to {{audience_name}}",
"design": "default",
"heading": "You're subscribed",
"body": "Hi {{first_name|\"there\"}},\n\nThanks for joining {{audience_name}}. You will hear from us soon.",
"button_label": "",
"footer": "You are getting this email because you subscribed to {{audience_name}}. <a href=\"{{manage_subscriptions_url}}\">Manage subscriptions</a>",
"button_url": ""
}
},
"unengaged": {
"exclude": false,
"days": 365
},
"archived": false,
"archived_at": null,
"subscribers_count": 312,
"usage": {
"used": 312,
"limit": 50000,
"plan": "pro"
},
"created_at": "2026-09-20T16:45:10.000000Z",
"updated_at": "2026-09-20T16:45:10.000000Z"
}
],
"total_records": 2,
"next_page_url": null,
"previous_page_url": null
}Fusionner des listes de contacts
Copie les abonnés d’autres listes dans celle-ci.
/audiences/{id}/mergeNécessite une clé API full. Les personnes qui figurent déjà dans la liste cible y conservent leur statut : aucune personne désinscrite n’est donc réinscrite. Une personne présente dans plusieurs des listes fusionnées rejoint la liste cible avec Subscribed activé si au moins l’une de ces listes la compte comme abonnée. Avec delete_sources, les listes fusionnées sont ensuite supprimées et les campagnes dont l’envoi n’est pas terminé (brouillons, campagnes programmées, en file d’attente ou en cours d’envoi, et tests A/B en attente de leur version gagnante) sont envoyées à la liste cible à la place. Si une telle campagne incluait une liste fusionnée et en excluait une autre, la liste cible reste incluse. Les segments qui puisent dans une liste supprimée ou qui ont une règle portant sur elle utilisent la liste cible à la place, tout comme les déclencheurs, étapes, conditions et conditions de sortie d’automatisation qui la désignent. C’est aussi le cas des formulaires qui y ajoutent des personnes ou la proposent comme choix, des liens de double opt-in qui n’ont pas encore été confirmés et des exécutions d’automatisation qui attendent une condition portant sur elle. Chaque suppression déclenche audience.deleted.
La fusion ne déclenche pas d’événements subscriber.*, ne démarre pas d’automatisations et n’envoie pas d’e-mails de double opt-in ni de confirmation. Si les nouveaux abonnés faisaient dépasser à la liste cible la limite d’abonnés de votre forfait, rien n’est fusionné et la requête renvoie 422 avec votre usage. Des données non valides, comme la fusion d’une liste avec elle-même, renvoient aussi 422. Consultez Fusionner des listes.
Paramètres de chemin
idstringobligatoireParamètres du corps
source_idsstring[]obligatoiredelete_sourcesbooleanpar défaut : falseRéponse
objectstringaudience_merge.audienceobjectobject, id, name et son nouveau subscribers_count.addedintegeralready_in_audienceintegerdeleted_source_idsstring[]{
"object": "audience_merge",
"audience": {
"object": "audience",
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"subscribers_count": 1503
},
"added": 219,
"already_in_audience": 93,
"deleted_source_ids": ["aud_4KOlh9t2uw5od4qypqCtyrZyDq2"]
}{
"error": "One or more audiences were not found",
"missing": ["aud_4KOlh9t2uw5od4qypqCtyrZyDq2"]
}{
"message": "Validation failed.",
"errors": {
"source_ids": ["An audience cannot be merged into itself."]
}
}Mettre à jour des listes de contacts en masse
Archive, désarchive ou supprime plusieurs listes de contacts à la fois.
/audiences/bulkNécessite une clé API full. Chaque ID doit correspondre à une liste de l’espace de travail ; sinon, rien n’est modifié et la requête renvoie 404 avec les ID manquants dans missing. L’archivage et le désarchivage déclenchent audience.updated ; la suppression déclenche audience.deleted et supprime les abonnés des listes, comme Supprimer une liste de contacts. Consultez Archiver une liste.
Paramètres du corps
actionstringobligatoirearchive, unarchive ou delete.idsstring[]obligatoireRéponse
objectstringaudience_bulk.actionstringprocessedintegerchangedintegeridsstring[]{
"object": "audience_bulk",
"action": "archive",
"processed": 2,
"changed": 2,
"ids": ["aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2", "aud_4KOlh9t2uw5od4qypqCtyrZyDq2"]
}{
"error": "One or more audiences were not found",
"missing": ["aud_4KOlh9t2uw5od4qypqCtyrZyDq2"]
}Supprimer une liste de contacts
Supprime définitivement une liste de contacts et en retire tout le monde.
/audiences/{id}Nécessite une clé API full. Les inscriptions d’abonnés de la liste sont supprimées avec elle, mais les contacts restent dans votre espace de travail et dans leurs autres listes. Son URL d’inscription hébergée cesse de fonctionner. Déclenche l’événement audience.deleted. Aucun événement subscriber.deleted n’est envoyé pour les inscriptions supprimées.
Paramètres de chemin
idstringobligatoireRéponse
objectstringaudience.idstringnamestringdeletedbooleantrue.{
"object": "audience",
"id": "aud_4KOlh9t2uw5od4qypqCtyrZyDq2",
"name": "Customers",
"deleted": true
}{
"error": "Audience not found"
}