Automatisations
Construisez des workflows à partir de déclencheurs et d’étapes, lancez-les et consultez leurs exécutions.
- POST/automations
- GET/automations/{id}
- POST/automations/{id}
- GET/automations
- DEL/automations/{id}
- POST/automations/{id}/start
- POST/automations/{id}/pause
- POST/automations/{id}/stop
- POST/automations/{id}/trigger
- GET/automations/{id}/runs
- GET/automations/{id}/runs/{run_id}
- GET/automations/{id}/stats
- GET/automations/{id}/steps/{step_key}/stats
Créer une automatisation
Crée une automatisation au statut draft à partir d’un graphe d’étapes et de connexions. Nécessite une clé API de portée full. Les automatisations sont en bêta.
L’automatisation ne fait rien tant que vous ne l’avez pas démarrée. Chaque exécution coûte 3 crédits à son démarrage, et chaque e-mail envoyé par send_email ou forward_email coûte 1 crédit de plus. Dans un espace de travail non vérifié, ces actions ne peuvent envoyer qu’aux adresses e-mail de compte des membres de l’espace de travail.
/automationsParamètres du corps
contextstringobligatoirecontact, email ou event. Le contexte détermine les déclencheurs et les actions utilisables, et ne peut pas être modifié par la suite. Consultez Contextes.namestringobligatoiredescriptionstring | nullsettingsobjectstepsobject[]obligatoireconnectionsobject[]obligatoire[] pour un graphe qui ne contient qu’un déclencheur. Consultez Connexions.Paramètres
on_step_failurestringpar défaut : stopstop fait passer l’exécution à failed lorsqu’une étape échoue. skip enregistre l’étape en échec et laisse le reste de l’exécution se terminer.allow_reentrybooleanpar défaut : truefalse ignore un déclenchement lorsque le même contact (ou e-mail) a déjà une exécution en cours dans cette automatisation.max_concurrent_runsintegerpar défaut : 0running. 0 signifie aucune limite.cooldown_secondsintegerpar défaut : 0Étapes
keystringobligatoirewelcome_email. Les connexions, les statistiques d’étape et les mises à jour désignent les étapes par leur clé.typestringobligatoiretrigger ou action.triggerstringactionstringconfigobjectConnexions
fromstringobligatoiretostringobligatoirebranchstringpar défaut : defaultfrom qui emprunte ce lien. Les étapes condition utilisent yes et no ; les étapes experiment utilisent les clés de variante. Toutes les autres étapes utilisent default.Contextes
| Contexte | Une exécution porte sur | Déclencheurs | Règles |
|---|---|---|---|
contact |
Un contact. send_email envoie à ce contact. |
contact.*, system.* |
Un ou plusieurs déclencheurs. Ils doivent tous être connectés à la même première action. |
email |
Un e-mail (envoyé ou reçu). | email.*, system.* |
Un ou plusieurs déclencheurs. Ils doivent tous être connectés à la même première action. |
event |
Le payload du déclencheur uniquement. | event.*, system.* |
Exactement un déclencheur. |
Chaque action doit être accessible depuis un déclencheur. Une exécution commence à l’action connectée au déclencheur qui s’est activé, puis suit les connexions :
conditionne suit que le lien dont labranchvautyesouno, selon le résultat.experimentsuit les liens de la variante choisie. Lorsque ce chemin se termine, l’exécution continue sur les liensdefaultde l’étape d’expérimentation.waitretarde l’étape suivante.- Toutes les autres actions suivent leurs liens
default. Une étape qui a plusieurs liens sortants les exécute tous.
Une exécution passe à completed lorsqu’il ne reste plus d’étapes, à failed lorsqu’une étape échoue (avec on_step_failure: "stop"), et à canceled lorsque vous arrêtez l’automatisation.
Déclencheurs
| Déclencheur | Contexte | S’active lorsque |
|---|---|---|
contact.added_to_audience |
contact | Un contact s’inscrit à une liste de contacts, y compris lors d’une réinscription. |
contact.removed_from_audience |
contact | Un abonné est supprimé d’une liste de contacts. |
contact.updated |
contact | Un contact est mis à jour. |
contact.loaded_email |
contact | Un destinataire qui est un contact de l’espace de travail ouvre un e-mail. |
contact.clicked_in_email |
contact | Un destinataire qui est un contact de l’espace de travail clique sur un lien suivi. |
contact.date_anniversary |
contact | Chaque jour à 0 h 00 UTC, pour les contacts dont le champ personnalisé de type date (YYYY-MM-DD) a le même mois et le même jour qu’aujourd’hui. |
contact.on_date |
contact | Chaque jour à 0 h 00 UTC, pour les contacts dont le champ personnalisé de type date correspond à la date du jour. |
contact.visits_url, contact.on_purchase, contact.on_event |
contact | Acceptés, mais Emailit ne les active pas encore. |
email.received |
Un e-mail entrant arrive. | |
email.delivered, email.bounced, email.complained, email.loaded, email.clicked, email.failed, email.suppressed, email.canceled |
L’événement e-mail du même nom se produit. | |
event.<name> |
event | Tout nom qui commence par event.. Emailit n’émet pas encore d’événements event.* ; démarrez les automatisations d’événement avec system.manual. |
system.manual |
tous | Vous appelez Déclencher une exécution. |
system.schedule |
tous | Accepté, mais Emailit n’active pas encore les déclencheurs programmés. |
Champs de config des déclencheurs :
audience_idstringcontact.added_to_audience et contact.removed_from_audience : s’active uniquement pour cette liste de contacts (aud_…).date_fieldstringcontact.date_anniversary et contact.on_date : la clé du champ personnalisé qui contient la date, par exemple birthday.filterobjectS’active uniquement lorsque l’événement correspond : { "match": "all", "rules": [{ "field": "subject", "operator": "contains", "value": "Invoice" }] }. match vaut all (par défaut) ou any. field est un chemin à points dans l’object de l’événement, par exemple to ou email.subject ; un préfixe payload. est ignoré.
Opérateurs : equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, in, not_in, is_set, is_not_set. Tous les opérateurs sauf is_set et is_not_set nécessitent une value ; in et not_in prennent un tableau.
Actions
| Action | Contexte | Configuration |
|---|---|---|
send_email |
tous | type (obligatoire, template), template_id (obligatoire : un ID tem_ ou l’alias d’un modèle publié), from, subject, reply_to, to |
forward_email |
email, event | to (obligatoire), from, subject, email_id |
wait |
tous | seconds (obligatoire, de 0 à 2 592 000, soit 30 jours) |
condition |
tous | filter (obligatoire, voir ci-dessous) |
experiment |
tous | variants (obligatoire), control |
call_webhook |
tous | url (obligatoire), method, headers, body |
run_automation |
tous | automation_id (obligatoire) |
end |
tous | Aucune |
add_to_audience |
contact | audience_id (obligatoire) |
remove_from_audience |
contact | audience_id (obligatoire) |
edit_contact |
contact | fields (obligatoire) |
add_to_suppressions |
email, event | type, reason, email |
remove_from_suppressions |
email, event | email |
create_contact |
email, event | email, first_name, audience_id |
send_emailenvoie le modèle.fromvaut par défaut l’expéditeur du modèle et doit appartenir à un domaine d’envoi vérifié.subjectremplace l’objet du modèle.reply_toest une adresse ou un tableau d’adresses. Dans le contextecontact, l’e-mail est envoyé au contact de l’exécution ; dans les contextesemailetevent, définissezto.forward_emailtransfère l’e-mail de l’exécution (ou l’e-mail indiqué dansemail_id) àto.fromvaut par défaut l’expéditeur d’origine etsubject,Fwd: <original subject>.conditionprend{ "match": "all" | "any", "rules": [...] }avec les mêmes opérateurs que les filtres de déclencheur. Les champs sans préfixe sont résolus par rapport au contact (first_name,custom_fields.plan) ou à l’e-mail (rcpt_to,subject) de l’exécution ; préfixez un champ parcontact.,email.,payload.oumeta.pour être explicite. L’étape continue suryesouno.experimentchoisit l’une desvariants(controlcompris), chacune de la forme{ "key": "a", "weight": 50 }, au hasard selon leur poids, et continue sur la branche qui porte le nom de la clé choisie.call_webhookenvoie une requête HTTP (méthodePOSTpar défaut,Content-TypeJSON) et enregistre la classe de statut (2xx,4xx,5xx), outimeoutounetwork_error. Une réponse autre que 2xx ne fait pas échouer l’étape.run_automationdémarre une exécution d’une autre automatisation active avec le payload de cette exécution. L’exécution en cours continue.edit_contactprendfields: [{ "key": "first_name", "value": "Ada" }]. Les clésemail,first_name,last_nameetunsubscribedmettent à jour le contact ; toute autre clé définit un champ personnalisé.add_to_suppressionsbloque l’adresse de l’exécution (typepar défaut :recipient;reasonpar défaut :automation).remove_from_suppressionsla retire des adresses bloquées. Dans le contexteevent, transmettezemail.create_contactcrée le contact (ou retrouve le contact existant) et l’inscrit éventuellement àaudience_id. Dans le contexteemail,emailvaut par défaut le destinataire de l’e-mail.
Les valeurs de type chaîne de toute configuration d’action peuvent contenir des variables qu’Emailit remplace lors de l’exécution de l’étape : {{contact.email}}, {{email.mail_from}}, {{payload.object.subject}} ou {{meta.source_event_id}}, par exemple "to": "{{email.mail_from}}". Les modèles envoyés par send_email affichent aussi directement les champs du contact, comme {{ first_name }}.
Réponse
Renvoie 201 Created avec l’automatisation dans data, y compris l’ID de chaque étape (aus_…) et les connexions. status vaut draft.
La création vérifie la structure du graphe : noms des déclencheurs et des actions pour le contexte, unicité des clés, validité des connexions, accessibilité des étapes, et utilisation d’un domaine d’envoi vérifié pour toute adresse from d’une action send_email. Elle ne vérifie pas que la configuration de chaque action est complète ; Mettre à jour une automatisation le fait. Les erreurs renvoient 400 avec errors indexé par chemin de champ.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "draft",
"settings": { "allow_reentry": false },
"last_triggered_at": null,
"published_at": null,
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-01T09:41:05.318274+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
},
{
"id": "aus_3vM0ORwEXCQcyS7rylfQBQEXjVk",
"key": "wait_1_day",
"type": "action",
"trigger": null,
"action": "wait",
"config": { "seconds": 86400 }
},
{
"id": "aus_3HOgOzxaXBgVRpLFtpvJNo4vd5c",
"key": "is_free_user",
"type": "action",
"trigger": null,
"action": "condition",
"config": {
"filter": {
"match": "all",
"rules": [{ "field": "custom_fields.plan", "operator": "is_not_set" }]
}
}
},
{
"id": "aus_3gCI5SWMPFVhOSawR6nz8sF55wp",
"key": "upgrade_tips",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "getting-started-tips" }
},
{
"id": "aus_3Pq7Wd2LxN8cVt5RmK0sHy4BfJe",
"key": "done",
"type": "action",
"trigger": null,
"action": "end",
"config": {}
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" },
{ "from": "welcome_email", "to": "wait_1_day", "branch": "default" },
{ "from": "wait_1_day", "to": "is_free_user", "branch": "default" },
{ "from": "is_free_user", "to": "upgrade_tips", "branch": "yes" },
{ "from": "is_free_user", "to": "done", "branch": "no" }
]
},
"message": "Automation was successfully created.",
"notify": true
}{
"message": "Validation failed.",
"errors": {
"steps.1.action": ["Action \"forward_email\" is not allowed for context \"contact\"."],
"steps": ["Action step \"upgrade_tips\" is not reachable from any trigger."]
}
}Récupérer une automatisation
Récupère une automatisation avec son graphe complet. Nécessite une clé API de portée full.
/automations/{id}Paramètres de chemin
idstringobligatoireaut_…).Réponse
Renvoie l’automatisation dans data.
idstringaut_.contextstringcontact, email ou event.namestringdescriptionstring | nullstatusstringdraft, running, paused, stopped ou archived.settingsobjecton_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Vide si vous n’en avez défini aucune.last_triggered_atstring | nullpublished_atstring | nullstepsobject[]id (aus_…), key, type, trigger, action et config. Les détails d’exécution désignent les étapes par leur id ; les statistiques, par leur key.connectionsobject[]from et to, et sa branch.Pour la signification de chaque déclencheur, action et paramètre, consultez Créer une automatisation. Renvoie 404 si l’automatisation n’existe pas ou a été supprimée.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "running",
"settings": { "allow_reentry": false },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-03T14:12:40.551870+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
},
{
"id": "aus_3vM0ORwEXCQcyS7rylfQBQEXjVk",
"key": "wait_1_day",
"type": "action",
"trigger": null,
"action": "wait",
"config": { "seconds": 86400 }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" },
{ "from": "welcome_email", "to": "wait_1_day", "branch": "default" }
]
}
}{
"message": "Automation not found."
}Mettre à jour une automatisation
Met à jour le nom, la description, les paramètres ou le graphe d’une automatisation. Nécessite une clé API de portée full. Le contexte ne peut pas être modifié.
Pour modifier le graphe, envoyez steps et connections ensemble ; ils remplacent le graphe actuel. Les étapes dont la key existe déjà conservent leur ID et leur historique d’exécution, les étapes que vous omettez sont supprimées, et les nouvelles clés sont ajoutées. Contrairement à la création, la mise à jour valide aussi la configuration de chaque action (par exemple, send_email nécessite type et template_id, et wait nécessite seconds).
Mettez l’automatisation en pause avant de modifier le graphe d’une automatisation active, puis démarrez-la de nouveau pour que les nouveaux déclencheurs prennent effet.
/automations/{id}Paramètres de chemin
idstringobligatoireaut_…).Paramètres du corps
namestringdescriptionstringsettingsobjecton_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Consultez Paramètres.stepsobject[]connections. Consultez Étapes.connectionsobject[]steps. Consultez Connexions.Réponse
Renvoie l’automatisation mise à jour dans data, avec message et notify. Renvoie 400 avec errors indexé par chemin de champ lorsque la validation échoue, et 404 si l’automatisation n’existe pas.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series (v2)",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "paused",
"settings": { "allow_reentry": false, "on_step_failure": "skip" },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-04T08:15:22.730115+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully updated.",
"notify": true
}{
"message": "Validation failed.",
"errors": {
"steps.2.config.seconds": ["Wait seconds cannot exceed 2592000 (30 days)."],
"steps.1.config.template_id": ["Template ID is required when type is \"template\"."]
}
}{
"message": "Automation not found."
}Lister les automatisations
Renvoie les automatisations de l’espace de travail, de la plus récente à la plus ancienne, sans leurs étapes ni leurs connexions. Nécessite une clé API de portée full. Les automatisations supprimées ne sont pas listées.
/automationsParamètres de requête
pageintegerpar défaut : 1per_pageintegerpar défaut : 25filter[context]stringcontact, email ou event.filter[status]stringdraft, running, paused, stopped ou archived.filter[name]stringsortstringpar défaut : created_atname, created_at, updated_at ou last_triggered_at.orderstringpar défaut : descasc ou desc.Vous pouvez aussi utiliser les filtres génériques key.condition=value sur name, status, context et created_at, avec match. Consultez Filtrage et tri.
Réponse
dataobject[]id, context, name, description, status, settings, last_triggered_at, published_at, created_at, updated_at. Dans cette liste, settings est toujours un objet vide ; récupérez l’automatisation pour le lire.total_recordsintegerper_pageintegercurrent_pageintegertotal_pagesinteger{
"data": [
{
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "running",
"settings": {},
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-03T14:12:40.551870+00:00"
}
],
"total_records": 1,
"per_page": 50,
"current_page": 1,
"total_pages": 1
}Supprimer une automatisation
Supprime une automatisation. Elle disparaît des listes et cesse de réagir aux déclencheurs. Nécessite une clé API de portée full.
Les exécutions déjà en cours ne sont pas annulées. Pour les annuler, arrêtez l’automatisation avant de la supprimer.
/automations/{id}Paramètres de chemin
idstringobligatoireaut_…).Réponse
Renvoie un message qui confirme la suppression. Renvoie 404 si l’automatisation n’existe pas ou a déjà été supprimée.
{
"message": "Automation was deleted successfully.",
"notify": true
}{
"message": "Automation not found."
}Démarrer une automatisation
Fait passer le statut de l’automatisation à running. À partir de là, les déclencheurs correspondants démarrent des exécutions ; les événements survenus avant le démarrage n’en démarrent pas. Nécessite une clé API de portée full.
Vous pouvez démarrer une automatisation draft, paused ou stopped. Le premier démarrage définit published_at.
Le démarrage ne valide pas de nouveau le graphe. Si vous avez construit l’automatisation avec Créer une automatisation, qui ne vérifie que la structure, assurez-vous que la configuration de chaque action est complète, ou envoyez une fois le graphe via Mettre à jour une automatisation, qui le valide entièrement. Une étape dont la configuration est incomplète échoue lorsqu’une exécution l’atteint.
/automations/{id}/startParamètres de chemin
idstringobligatoireaut_…).Réponse
Renvoie l’automatisation dans data avec status défini sur running. Renvoie 404 si l’automatisation n’existe pas.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "running",
"settings": { "allow_reentry": false },
"last_triggered_at": null,
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-01T10:00:02.204118+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully started.",
"notify": true
}{
"message": "Automation not found."
}Mettre en pause une automatisation
Fait passer le statut de l’automatisation à paused. Ses déclencheurs cessent de démarrer de nouvelles exécutions, mais les exécutions déjà en cours continuent, y compris celles qui attendent sur une étape wait. Nécessite une clé API de portée full.
Pour annuler aussi les exécutions en cours, arrêtez plutôt l’automatisation. Démarrez-la de nouveau pour réactiver ses déclencheurs.
/automations/{id}/pauseParamètres de chemin
idstringobligatoireaut_…).Réponse
Renvoie l’automatisation dans data avec status défini sur paused. Renvoie 404 si l’automatisation n’existe pas.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "paused",
"settings": { "allow_reentry": false },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-04T08:10:51.004732+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully paused.",
"notify": true
}{
"message": "Automation not found."
}Arrêter une automatisation
Fait passer le statut de l’automatisation à stopped et annule chaque exécution encore running ; ces exécutions prennent le statut canceled et leurs étapes restantes ne sont pas exécutées. Nécessite une clé API de portée full.
L’arrêt n’est disponible que via l’API. Pour laisser les exécutions en cours se poursuivre, mettez plutôt l’automatisation en pause. Vous pouvez démarrer de nouveau une automatisation arrêtée ; les nouvelles exécutions repartent de zéro.
/automations/{id}/stopParamètres de chemin
idstringobligatoireaut_…).Réponse
Renvoie l’automatisation dans data avec status défini sur stopped. Renvoie 404 si l’automatisation n’existe pas.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "stopped",
"settings": { "allow_reentry": false },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-05T16:45:09.882301+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully stopped.",
"notify": true
}{
"message": "Automation not found."
}Déclencher une exécution
Active le déclencheur system.manual avec le payload de votre choix. L’automatisation doit être running et comporter une étape de déclenchement system.manual ; sinon, aucune exécution ne démarre. Nécessite une clé API de portée full. Les déclenchements manuels ne sont disponibles que via l’API.
L’exécution démarre de manière asynchrone et coûte 3 crédits, comme toute autre exécution. Retrouvez-la avec Lister les exécutions.
/automations/{id}/triggerParamètres de chemin
idstringobligatoireaut_…).Paramètres du corps
payloadobjectLes données de l’exécution. Emailit y ajoute automation_id et enregistre le résultat comme payload de l’exécution. Les étapes peuvent le lire avec des variables comme {{payload.order_id}} et des conditions comme payload.plan.
Ce sur quoi porte l’exécution dépend du contexte de l’automatisation :
contact: transmettezcontact_id(con_…). Les actions sur les contacts etsend_emailutilisent ce contact.email: transmettezemail_id(em_…). Les actions sur les e-mails utilisent cet e-mail.event: n’importe quelles données. Définisseztoouemaildans la configuration des actions, par exemple"to": "{{payload.customer_email}}".
Réponse
Renvoie 200 avec un message une fois le déclenchement mis en file d’attente. Renvoie 422 si l’automatisation n’est pas running, et 404 si elle n’existe pas.
{
"message": "Automation trigger dispatched."
}{
"message": "Automation must be running to trigger."
}{
"message": "Automation not found."
}Lister les exécutions
Renvoie les exécutions d’une automatisation, de la plus récente à la plus ancienne. Chaque exécution est un parcours du graphe, démarré par un déclencheur. Nécessite une clé API de portée full.
/automations/{id}/runsParamètres de chemin
idstringobligatoireaut_…).Paramètres de requête
pageintegerpar défaut : 1per_pageintegerpar défaut : 25filter[status]stringrunning, completed, failed ou canceled.Vous pouvez aussi filtrer avec key.condition=value sur status, event et created_at (par exemple created_at.after=2026-10-01), et trier avec order et direction sur les mêmes clés. Consultez Filtrage et tri.
Réponse
dataobject[]total_records, per_page, current_page, total_pagesintegerChaque exécution comporte :
idstringaur_.automation_idstringaut_…).contact_idstring | nullcon_…) dans le contexte contact.email_idstring | nullem_…) dans le contexte email.event_idstring | nulleventstringcontact.added_to_audience ou system.manual.payloadobjectmetaobjectfailure_reason.statusstringrunning, completed, failed ou canceled (l’automatisation a été arrêtée).started_at, completed_at, created_at, updated_atstring | null{
"data": [
{
"id": "aur_3q6GdFk2eRSG093grI0v9e6REu8",
"automation_id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"contact_id": "con_3munwNLaXKUARc6ff9wPtxKVq4A",
"email_id": null,
"event_id": null,
"event": "contact.added_to_audience",
"payload": {},
"meta": {},
"status": "failed",
"started_at": "2026-10-03T14:12:40.551870+00:00",
"completed_at": "2026-10-03T14:12:41.093355+00:00",
"created_at": "2026-10-03T14:12:40.551870+00:00",
"updated_at": "2026-10-03T14:12:41.093355+00:00"
}
],
"total_records": 1,
"per_page": 25,
"current_page": 1,
"total_pages": 1
}{
"message": "Automation not found."
}Récupérer une exécution
Récupère une exécution d’une automatisation, y compris les étapes qu’elle a exécutées. Nécessite une clé API de portée full.
/automations/{id}/runs/{run_id}Paramètres de chemin
idstringobligatoireaut_…).run_idstringobligatoireaur_…).Réponse
Renvoie l’exécution dans data avec les champs décrits dans Lister les exécutions, ainsi que les payload et meta complets et un tableau run_steps.
payloadobject | null{ "object": { … } }) ou le payload que vous avez transmis à Déclencher une exécution, complété par automation_id.metaobject | nullsource_event_id relie l’exécution à l’événement qui l’a démarrée. Les exécutions en échec peuvent avoir un failure_reason : insufficient_credits (les 3 crédits de l’exécution n’ont pas pu être débités) ou run_timeout (l’exécution était toujours running au bout de 72 heures sans étape en attente).run_stepsobject[]Une entrée par étape atteinte par l’exécution :
step_id: l’ID de l’étape (aus_…). Faites-le correspondre àsteps[].idrenvoyé par Récupérer une automatisation.status:running,waiting(une étapewaitdont le délai n’est pas écoulé),completedoufailed.data: le résultat de l’étape. Par exemple,send_emailrenvoie{ "result": "email_queued", "email_oid": "em_…", "to": "…" },conditionrenvoie{ "result": true, "branch": "yes" }, et les étapes en échec renvoient{ "error": "…" }.started_at,completed_at,created_at.
Renvoie 404 si l’automatisation ou l’exécution n’existe pas.
{
"data": {
"id": "aur_3q6GdFk2eRSG093grI0v9e6REu8",
"automation_id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"contact_id": "con_3munwNLaXKUARc6ff9wPtxKVq4A",
"email_id": null,
"event_id": null,
"event": "contact.added_to_audience",
"payload": {
"object": {
"id": "sub_3Fh2pQx9LmZr4Wt7Nc0bVd8KsYe",
"object": "subscriber",
"subscribed": true,
"audience": { "id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "name": "Newsletter" },
"contact": { "id": "con_3munwNLaXKUARc6ff9wPtxKVq4A", "email": "ada@example.com" }
}
},
"meta": { "source_event_id": "evt_3Kd8sWq1NzXc5Vb7Mt2LpRy0HgA" },
"status": "running",
"started_at": "2026-10-03T14:12:40.551870+00:00",
"completed_at": null,
"created_at": "2026-10-03T14:12:40.551870+00:00",
"updated_at": "2026-10-03T14:12:40.551870+00:00",
"run_steps": [
{
"step_id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"status": "completed",
"data": {
"result": "email_queued",
"outcome": "accepted",
"email_oid": "em_3Cp8cMgPskzB8tIlgUyNJkpDp9O",
"to": "ada@example.com"
},
"started_at": "2026-10-03T14:12:40.702113+00:00",
"completed_at": "2026-10-03T14:12:40.918540+00:00",
"created_at": "2026-10-03T14:12:40.702113+00:00"
},
{
"step_id": "aus_3vM0ORwEXCQcyS7rylfQBQEXjVk",
"status": "waiting",
"data": { "status": "waiting", "delayMs": 86400000, "seconds": 86400 },
"started_at": "2026-10-03T14:12:41.004221+00:00",
"completed_at": null,
"created_at": "2026-10-03T14:12:41.004221+00:00"
}
]
}
}{
"message": "Run not found."
}Récupérer les statistiques
Renvoie des décomptes pour chaque étape d’une automatisation, indexés par clé d’étape. Nécessite une clé API de portée full.
/automations/{id}/statsParamètres de chemin
idstringobligatoireaut_…).Paramètres de requête
sincestring2026-10-01T00:00:00Z.untilstringrun_ids[]stringaur_…). Répétez le paramètre pour plusieurs exécutions.Réponse
Renvoie data, un objet qui contient une entrée par clé d’étape. Les étapes qu’aucune exécution n’a atteintes ont un total de 0.
totalintegerby_statusobjectrunning, waiting, completed, failed.by_outcomeobjectsend_email et forward_email : accepted, puis le dernier état de l’e-mail (delivered, loaded, clicked, bounced, failed, complained, unsubscribed, canceled). condition : matched, not_matched. experiment : la clé de la variante choisie. call_webhook : 2xx, 4xx, 5xx, timeout, network_error. Étapes en échec : error.funnelobjectsend_email. Décomptes cumulés : accepted inclut tous les e-mails qui sont allés plus loin, delivered inclut les e-mails chargés et cliqués, et loaded inclut les e-mails cliqués. bounced, failed, complained et unsubscribed sont des décomptes simples.{
"data": {
"joined": { "total": 0, "by_status": {}, "by_outcome": {} },
"welcome_email": {
"total": 412,
"by_status": { "completed": 409, "failed": 3 },
"by_outcome": { "delivered": 251, "loaded": 98, "clicked": 41, "bounced": 19, "error": 3 },
"funnel": {
"accepted": 390,
"delivered": 390,
"loaded": 139,
"clicked": 41,
"bounced": 19,
"failed": 0,
"complained": 0,
"unsubscribed": 0
}
},
"wait_1_day": {
"total": 409,
"by_status": { "completed": 352, "waiting": 57 },
"by_outcome": {}
},
"is_free_user": {
"total": 352,
"by_status": { "completed": 352 },
"by_outcome": { "matched": 270, "not_matched": 82 }
},
"upgrade_tips": {
"total": 270,
"by_status": { "completed": 270 },
"by_outcome": { "accepted": 12, "delivered": 180, "loaded": 61, "clicked": 17 },
"funnel": {
"accepted": 270,
"delivered": 258,
"loaded": 78,
"clicked": 17,
"bounced": 0,
"failed": 0,
"complained": 0,
"unsubscribed": 0
}
},
"done": {
"total": 82,
"by_status": { "completed": 82 },
"by_outcome": {}
}
}
}{
"message": "Automation not found."
}Récupérer les statistiques d’une étape
Renvoie les décomptes d’une étape d’une automatisation. Nécessite une clé API de portée full. Les champs sont les mêmes que dans Récupérer les statistiques.
/automations/{id}/steps/{step_key}/statsParamètres de chemin
idstringobligatoireaut_…).step_keystringobligatoirekey de l’étape, par exemple welcome_email.Paramètres de requête
sincestringuntilstringRéponse
Renvoie data avec total, by_status, by_outcome et, pour les étapes send_email, funnel. Renvoie 404 si l’automatisation ou la clé d’étape n’existe pas.
{
"data": {
"total": 412,
"by_status": { "completed": 409, "failed": 3 },
"by_outcome": { "delivered": 251, "loaded": 98, "clicked": 41, "bounced": 19, "error": 3 },
"funnel": {
"accepted": 390,
"delivered": 390,
"loaded": 139,
"clicked": 41,
"bounced": 19,
"failed": 0,
"complained": 0,
"unsubscribed": 0
}
}
}{
"message": "Step not found."
}