MailLandDocs
Marketing

Automatisations

Configurez des séquences d'e-mails automatiques basées sur des déclencheurs et le comportement des abonnés

Les automatisations vous permettent de créer des séquences d'e-mails en plusieurs étapes déclenchées par des événements d'abonnés. Définissez un déclencheur, construisez une séquence d'étapes, et MailLand exécute le flux automatiquement chaque fois que le déclencheur se déclenche.

Déclencheurs d'automatisation

Chaque automatisation commence par un seul déclencheur :

DéclencheurValeurDescription
SubscriberJoins0Un abonné est ajouté à une liste de diffusion
SubscriberUpdated1Le profil d'un abonné est mis à jour
CampaignOpened2Un abonné ouvre une campagne spécifique
CampaignClicked3Un abonné clique sur un lien dans une campagne
DateBased4Déclencheur uniquement basé sur l'anniversaire, évalue Subscriber.Birthday (voir l'encadré ci-dessous)

DateBased n'évalue que Subscriber.Birthday, pas un champ de date récurrent arbitraire. Birthday peut être défini via POST/PUT /v1/marketing/subscribers (voir la page Abonnés) ainsi que via l'import CSV, qui accepte une colonne birthday optionnelle, donc une automatisation DateBased inscrit tout abonné dont l'anniversaire a été défini par l'une ou l'autre de ces voies.

| Manual | 5 | Déclenché manuellement via l'API |

Statuts d'automatisation

StatutValeurDescription
Draft0Modifiable, non exécutée
Active1En cours d'exécution : les nouveaux abonnés sont inscrits au déclenchement
Paused2En pause : aucune nouvelle inscription, et les étapes suivantes s'arrêtent pour les abonnés déjà inscrits. La réactiver (Active) reprend chaque inscription exactement là où elle s'est arrêtée, et livre tout ce qui était dû pendant la pause
Archived3Archivée : masquée des vues par défaut. Comme Paused, cela arrête les nouvelles inscriptions ; les étapes suivantes s'arrêtent aussi pour les abonnés déjà inscrits. Il n'existe aucun point de terminaison pour désarchiver, donc cet arrêt est permanent pour ces inscriptions

Types d'étapes

Chaque automatisation contient une séquence ordonnée d'étapes :

Type d'étapeValeurDescription
SendEmail0Envoyer un e-mail à l'abonné
Wait1Attendre une durée avant de continuer
Condition2Évalue un champ de l'abonné ; une porte qui continue si vrai et termine l'inscription si faux (voir l'étape Condition ci-dessous)
AddToList3Ajouter l'abonné à une liste de diffusion
RemoveFromList4Retirer l'abonné d'une liste de diffusion
UpdateSubscriber5Mettre à jour les champs de l'abonné
Webhook6Envoyer un webhook à une URL externe

Personnalisation

Les étapes d'e-mail d'automatisation prennent en charge les balises de fusion {{variable}}, substituées par destinataire à partir du propre enregistrement de l'abonné inscrit.

BaliseValeur
{{firstName}}Prénom de l'abonné
{{lastName}}Nom de famille de l'abonné
{{fullName}}Prénom et nom réunis
{{email}}Adresse e-mail de l'abonné
{{subscriberId}}Identifiant opaque de l'abonné
{{custom_<field>}}Tout champ personnalisé de l'abonné : également disponible sous la forme {{<field>}}
Étape d'automatisation personnalisée
<p>Hi {{firstName}}, here's what's new this month.</p>

Une balise sans valeur est laissée exactement telle qu'écrite : {{firstName}} pour un abonné sans prénom reste {{firstName}} dans l'e-mail livré. Rédigez un contenu qui se lit correctement dans les deux cas. Utilisez une salutation de repli lorsque vous n'êtes pas sûr que chaque abonné possède le champ.

Les valeurs sont échappées selon l'endroit où elles atterrissent : le contenu HTML est échappé en HTML, tandis que la ligne d'objet et le corps en texte brut ne sont jamais échappés, Ben & Jerry's reste exactement tel quel.

Les anciennes orthographes en snake_case ({{first_name}}, {{last_name}}, {{full_name}}, {{subscriber_id}}) continuent de fonctionner comme alias.

Créer une automatisation

POST https://api.mail.land/v1/marketing/automations
Requête de création d'automatisation
{
  "name": "Welcome Series",
  "description": "3-email welcome sequence for new subscribers",
  "trigger": 0,
  "mailingListId": "7h3n5k8w2q9m1t",
  "campaignId": null,
  "steps": [
    {
      "type": 0,
      "order": 1,
      "templateId": "2p9x4k7m3q8n1z",
      "subject": "Welcome to our newsletter!"
    },
    {
      "type": 1,
      "order": 2,
      "delayMinutes": 1440
    },
    {
      "type": 0,
      "order": 3,
      "templateId": "9k4p2x7m1q3n8z"
    }
  ]
}
ChampTypeObligatoireDescription
namestringOuiNom de l'automatisation (unique par espace de travail)
descriptionstringNonDescription de l'automatisation
triggerintOuiType de déclencheur (voir le tableau des déclencheurs)
mailingListIdstringNonListe de diffusion cible pour le déclencheur
campaignIdstringNonOptionnel pour les déclencheurs CampaignOpened / CampaignClicked : si omis, le déclencheur se déclenche pour n'importe quelle campagne, pas seulement une seule
stepsarrayOuiSéquence ordonnée d'étapes

Il n'existe pas de champ segmentId sur une automatisation : ce champ n'existe pas ici (les segments sont utilisés ailleurs, par exemple dans les campagnes). Le contenu d'une étape SendEmail provient de templateId, et non d'un htmlContent/textContent/fromName/fromEmail en ligne.

campaignId est optionnel pour les déclencheurs d'ouverture/de clic, et non obligatoire comme l'indiquaient les versions précédentes de cette page. Il se déclenche aussi sur des ouvertures automatiques (préchargement Apple Mail Privacy Protection, scanners de sécurité de liens) que MailLand ne filtre pas aujourd'hui.

Champs des étapes

Chaque étape a en réalité la forme { order, type, delayMinutes, templateId, subject, settings: {} } : il n'existe pas de segmentId au niveau de l'automatisation, et les étapes n'ont pas les champs spécifiques à chaque type montrés dans les versions précédentes de cette page (conditionField, targetMailingListId, updateField, webhookUrl, fromName, fromEmail, replyTo ne sont pas des champs de premier niveau d'une étape). Les tableaux ci-dessous reflètent la forme réelle.

Étape SendEmail (type : 0) :

ChampTypeObligatoireDescription
typeintOui0
orderintOuiPosition de l'étape dans la séquence
delayMinutesintNonMinutes d'attente avant l'exécution de cette étape, y compris lorsqu'il s'agit de la première étape : le délai avant le tout premier envoi est désormais respecté à l'inscription (il était auparavant ignoré)
templateIdstringOuiModèle fournissant le contenu de l'e-mail : le contenu provient uniquement du modèle
subjectstringNonRemplace l'objet du modèle si défini

Il n'existe pas de htmlContent/textContent/fromName/fromEmail/replyTo en ligne sur une étape. L'expéditeur est fixé à noreply@<premier domaine entièrement vérifié>, affiché avec le nom de l'espace de travail, non configurable par étape.

templateId est obligatoire sur chaque étape SendEmail. Les requêtes de création/mise à jour sans ce champ sont refusées avec 400 VALIDATION_FAILED ; un templateId qui ne correspond à aucun modèle de votre tenant est refusé avec 400 TEMPLATE_NOT_FOUND : les deux avant que quoi que ce soit ne soit écrit. Si un modèle est supprimé après l'enregistrement de l'automatisation, l'inscription du prochain abonné qui atteint cette étape est marquée Failed au lieu que l'étape soit silencieusement ignorée, et elle compte dans le totalFailed de l'automatisation (voir Obtenir les détails d'une automatisation).

Étape Wait (type : 1) :

ChampTypeObligatoireDescription
typeintOui1
orderintOuiPosition de l'étape
delayMinutesintOuiMinutes d'attente avant l'étape suivante

Étape Condition (type : 2) :

Une étape Condition est une porte, pas un embranchement : une liste d'étapes linéaire n'a pas de second chemin. Quand elle évalue vrai, l'inscription continue vers l'étape suivante. Quand elle évalue faux, l'inscription se termine là (Completed) et aucune étape ultérieure ne s'exécute pour cet abonné.

ChampTypeObligatoireDescription
typeintOui2
orderintOuiPosition de l'étape
settings.conditionFieldstringOuiLe champ de l'abonné à évaluer : email, firstName, lastName, phone, company, source, ou custom_<name> pour un champ personnalisé
settings.conditionOperatorstringOuiequals, notEquals, contains, notContains, startsWith, endsWith, isEmpty, isNotEmpty (insensible à la casse)
settings.conditionValuestringObligatoire sauf avec isEmpty/isNotEmptyLa valeur à comparer

Les comparaisons sont des comparaisons de chaînes insensibles à la casse, les mêmes opérateurs déjà proposés par les segments. 400 VALIDATION_FAILED est renvoyé à la création/mise à jour lorsque conditionField est inconnu, que conditionOperator n'est pas l'une des valeurs ci-dessus, ou que conditionValue manque pour un opérateur qui en a besoin.

Une étape Condition enregistrée avant l'existence de cette validation (dont les settings ne sont donc pas évaluables) continue de passer sans changement, par continuité : seules les nouvelles requêtes de création/mise à jour sont validées.

Étapes AddToList / RemoveFromList (type : 3, 4) :

ChampTypeObligatoireDescription
typeintOui3 ou 4
orderintOuiPosition de l'étape
settings.mailingListIdstringOuiListe de diffusion pour ajouter/retirer l'abonné, lue depuis settings

Étape UpdateSubscriber (type : 5) :

ChampTypeObligatoireDescription
typeintOui5
orderintOuiPosition de l'étape
settingsobjectOuiChaque clé de settings est écrite comme un champ personnalisé sur l'abonné

Étape Webhook (type : 6) :

ChampTypeObligatoireDescription
typeintOui6
orderintOuiPosition de l'étape
settings.urlstringOuiURL à laquelle envoyer la requête POST, lue depuis settings

Les requêtes des étapes Webhook sont signées avec un secret du récepteur de l’étape (X-MLND-Signature, vérifié comme un webhook client) : chaque URL d’étape distincte a son propre secret, si bien qu’aucun récepteur ne peut signer pour un autre. Lisez-les avec GET /v1/marketing/automations/{id}/webhook-signing-secrets et renouvelez-les avec POST /v1/marketing/automations/{id}/webhook-signing-secrets/regenerate, voir Versionnage. Envoyez { "webhookUrl": "…" } pour ne renouveler qu’un seul récepteur.

Create an automation
curl -X POST https://api.mail.land/v1/marketing/automations \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome Series",
    "trigger": 0,
    "mailingListId": "7h3n5k8w2q9m1t",
    "steps": [
      {
        "type": 0, "order": 1,
        "subject": "Welcome!",
        "templateId": "2p9x4k7m3q8n1z"
      },
      { "type": 1, "order": 2, "delayMinutes": 1440 },
      {
        "type": 0, "order": 3,
        "subject": "Getting started",
        "templateId": "9k4p2x7m1q3n8z"
      }
    ]
  }'

Réponse

Réponse de l'automatisation
{
  "id": "4f8k2m9p1q6z3s",
  "name": "Welcome Series",
  "description": "3-email welcome sequence for new subscribers",
  "trigger": "subscriberJoins",
  "triggerName": "SubscriberJoins",
  "status": "draft",
  "statusName": "Draft",
  "mailingListId": "7h3n5k8w2q9m1t",
  "mailingListName": "Product Updates",
  "campaignId": null,
  "campaignName": null,
  "stepsCount": 3,
  "totalEnrolled": 0,
  "totalCompleted": 0,
  "activatedAt": null,
  "createdAt": "2026-02-17T12:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

Il n'existe pas de champ segmentId/segmentName sur une automatisation, et les compteurs d'inscription sont totalEnrolled/totalCompleted (et non totalEnrollments/activeEnrollments/completedEnrollments). La réponse détaillée ajoute aussi steps (la liste complète des étapes), completionRate et totalFailed : les inscriptions ayant atteint une étape SendEmail sans modèle dans le tenant (absent ou supprimé depuis).

Lister les automatisations

GET https://api.mail.land/v1/marketing/automations
ParamètreTypePar défautDescription
cursorstring-Curseur opaque issu du nextCursor de la page précédente. À omettre pour la première page.
limitint20Éléments par page
searchstring-Rechercher par nom
statusint-Filtrer par statut d'automatisation
triggerint-Filtrer par type de déclencheur
mailingListIdstring-Filtrer par liste de diffusion
sortBystring-Champ de tri
sortDescboolfalseTri décroissant
List automations
curl https://api.mail.land/v1/marketing/automations \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Détails d'une automatisation

GET https://api.mail.land/v1/marketing/automations/{id}

Retourne l'automatisation complète incluant toutes les étapes :

Get automation details
curl https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Réponse des détails de l'automatisation
{
  "id": "4f8k2m9p1q6z3s",
  "name": "Welcome Series",
  "description": "3-email welcome sequence for new subscribers",
  "trigger": "subscriberJoins",
  "triggerName": "SubscriberJoins",
  "status": "active",
  "statusName": "Active",
  "mailingListId": "7h3n5k8w2q9m1t",
  "mailingListName": "Product Updates",
  "campaignId": null,
  "campaignName": null,
  "stepsCount": 3,
  "totalEnrolled": 230,
  "totalCompleted": 200,
  "totalFailed": 4,
  "activatedAt": "2026-01-10T08:05:00Z",
  "steps": [
    {
      "order": 1,
      "type": "sendEmail",
      "typeName": "SendEmail",
      "delayMinutes": null,
      "templateId": "2p9x4k7m3q8n1z",
      "subject": "Welcome to our newsletter!",
      "settings": null
    },
    {
      "order": 2,
      "type": "wait",
      "typeName": "Wait",
      "delayMinutes": 1440,
      "templateId": null,
      "subject": null,
      "settings": null
    },
    {
      "order": 3,
      "type": "sendEmail",
      "typeName": "SendEmail",
      "delayMinutes": null,
      "templateId": "9k4p2x7m1q3n8z",
      "subject": "Getting started with MailLand",
      "settings": null
    }
  ],
  "completionRate": 86.96,
  "createdAt": "2026-01-10T08:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

Mettre à jour une automatisation

PUT https://api.mail.land/v1/marketing/automations/{id}

N'importe quel statut sauf Active peut être mis à jour (pas seulement Draft/Paused). Le corps de la requête est identique à celui de la création.

Update an automation
curl -X PUT https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome Series",
    "trigger": 0,
    "mailingListId": "7h3n5k8w2q9m1t",
    "steps": [
      {
        "type": 0, "order": 1,
        "subject": "Welcome!",
        "templateId": "2p9x4k7m3q8n1z"
      },
      { "type": 1, "order": 2, "delayMinutes": 1440 },
      {
        "type": 0, "order": 3,
        "subject": "Getting started",
        "templateId": "9k4p2x7m1q3n8z"
      }
    ]
  }'

Activer une automatisation

POST https://api.mail.land/v1/marketing/automations/{id}/activate

Fait passer l'automatisation de Draft ou Paused à Active. Une fois active, l'automatisation commence à inscrire les abonnés lorsque le déclencheur se déclenche.

L'activation elle-même n'est pas vérifiée par rapport à la vérification de domaine. Une étape SendEmail atteinte sans aucun domaine entièrement vérifié est retenue, pas ignorée : elle est revérifiée selon un intervalle croissant (15 minutes, puis jusqu'à toutes les 6 heures) et est envoyée dès qu'un domaine est vérifié. Si aucun domaine n'est vérifié dans les 7 jours suivant le moment où l'étape est devenue due pour la première fois, l'inscription est marquée Failed (comptée dans totalFailed) plutôt que retenue indéfiniment : l'activation sans domaine vérifié réussit donc, mais rien n'est livré tant que vous n'avez pas vérifié un domaine, et les inscriptions encore en attente après une semaine se terminent au lieu de rester bloquées indéfiniment.

Activate an automation
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/activate \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Mettre en pause une automatisation

POST https://api.mail.land/v1/marketing/automations/{id}/pause

Met l'automatisation en pause. Aucun nouvel abonné n'est inscrit, et les abonnés déjà dans la séquence n'avancent plus : chaque inscription s'arrête à son étape actuelle. Réactiver l'automatisation reprend chaque inscription arrêtée là où elle en était, en livrant tout ce qui était dû pendant la pause.

Pause an automation
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/pause \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Archiver une automatisation

POST https://api.mail.land/v1/marketing/automations/{id}/archive

Archive l'automatisation, ce qui peut être fait depuis n'importe quel statut, y compris Active. Les automatisations archivées sont masquées des vues de liste par défaut.

L'archivage arrête à la fois les nouvelles inscriptions et les étapes suivantes pour les abonnés déjà inscrits : chaque inscription s'arrête à son étape actuelle, comme la mise en pause. Contrairement à la pause, aucun point de terminaison ne permet de réactiver une automatisation Archived, donc cet arrêt ne se résout pas de lui-même.

Archive an automation
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/archive \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Dupliquer une automatisation

POST https://api.mail.land/v1/marketing/automations/{id}/duplicate?name=Copy%20of%20Welcome%20Series

Crée une nouvelle automatisation en Draft avec les étapes et paramètres clonés. Le paramètre de requête name est optionnel.

Duplicate an automation
curl -X POST "https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/duplicate?name=Copy%20of%20Welcome%20Series" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Déclencher manuellement

POST https://api.mail.land/v1/marketing/automations/{id}/trigger
Requête de déclenchement manuel
{
  "subscriberIds": ["3m8k1p9x4q7n2z", "6q2n9k4x1p8m3z", "1x7m3q8k2n9p4z"]
}

Inscrit manuellement des abonnés spécifiques dans l'automatisation. L'automatisation doit être Active et son type de déclencheur doit être Manual (5).

Trigger automation manually
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/trigger \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"subscriberIds": ["3m8k1p9x4q7n2z", "6q2n9k4x1p8m3z", "1x7m3q8k2n9p4z"]}'

Suivi des inscriptions

La progression de chaque abonné à travers l'automatisation est suivie comme une inscription :

StatutValeurDescription
Active0En cours de progression à travers les étapes
Paused1Inscription mise en pause
Completed2Toutes les étapes terminées
Failed3Une étape SendEmail n'a pas de modèle dans ce tenant : absent depuis le début ou supprimé depuis. Compté dans le totalFailed de l'automatisation
Unsubscribed4L'abonné s'est désabonné pendant la séquence

Il n'existe pas de statut d'inscription Cancelled. La réponse des détails de l'automatisation inclut les compteurs agrégés d'inscriptions sous forme de totalEnrolled et totalCompleted (et non totalEnrollments/activeEnrollments/completedEnrollments/failedEnrollments).

Supprimer une automatisation

DELETE https://api.mail.land/v1/marketing/automations/{id}

Supprime définitivement l'automatisation, ses étapes et les données d'inscription.

La mise à jour et la suppression sont autorisées pour n'importe quel statut sauf Active : pas seulement Draft/Paused (mise à jour) ou Draft/Archived (suppression) comme l'indiquaient les versions précédentes de cette page.

Delete an automation
curl -X DELETE https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Réponses d'erreur

StatutCodeDescription
400VALIDATION_FAILEDChamps obligatoires manquants ou configuration d'étape invalide, y compris une étape SendEmail sans templateId ou une étape Condition avec des settings non évaluables
400TEMPLATE_NOT_FOUNDLe templateId d'une étape SendEmail ne correspond à aucun modèle de votre tenant
400INVALID_REQUESTLe nom de l'automatisation existe déjà ou transition de statut invalide
403FORBIDDENPermissions insuffisantes
404RESOURCE_NOT_FOUNDAutomatisation non trouvée, ou la transition de statut est invalide (mise à jour/activation/pause dans le mauvais statut, suppression d'une automatisation Active)

Les endpoints d'automatisations ne renvoient jamais 422.

Prochaines étapes

  • Campagnes : envoyer des campagnes ponctuelles
  • Abonnés : gérer les contacts ciblés par les automatisations
  • Listes : organiser les abonnés en listes pour les déclencheurs

Sur cette page