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}
- POST/automations/{id}/runs/{run_id}/cancel
- POST/automations/{id}/exit
- GET/automations/runs
- 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
exit_conditionsobject[]Annule l’exécution d’un contact dès que l’une de ces entrées correspond (contexte contact, 20 au maximum). Chaque entrée est soit un critère d’événement, c’est-à-dire le nom du déclencheur dans event plus ses champs de configuration, comme { "event": "contact.tag_added", "tag": "customer" } ou { "event": "contact.on_event", "event_name": "purchase" }, soit une condition sur le contact, { "condition": { "match": "all", "rules": [...] } }, avec les règles de l’action condition. Les critères acceptent tous les déclencheurs de contact sauf les déclencheurs de date et contact.visits_url, ainsi qu’un filter facultatif, comme les configurations de déclencheur. Les événements de segment (segment_id obligatoire) et les événements Commerce sont en alpha, comme leurs déclencheurs. Les critères contact.on_event, ici comme dans les étapes goal et wait_until, nécessitent un forfait Pro, Business ou Custom. Consultez Conditions de sortie et objectifs.
exit_on_audience_removalbooleanpar défaut : falsetrue annule une exécution démarrée par contact.added_to_audience quand le contact est retiré de cette liste, s’en désinscrit ou se désinscrit de tous les e-mails marketing.on_step_failurestringpar défaut : stopstop fait passer l’exécution à failed lorsqu’une étape échoue. skip enregistre l’étape en échec et continue sur ses liens default (ou no après une condition en échec).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 wait_until utilisent matched et timeout (événements et conditions) ou default et passed (dates) ; 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.wait_untilne suit quematchedoutimeout(événements et conditions), oudefaultoupassed(dates).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 étape
goalpeut aussi être atteinte hors de l’ordre : quand le contact remplit l’objectif, l’exécution y saute et continue après elle.
Une exécution passe à completed lorsqu’il ne reste plus d’étapes ou qu’une étape end_run s’exécute, à failed lorsqu’une étape échoue (avec on_step_failure: "stop"), et à canceled lorsqu’une condition de sortie correspond, que l’exécution est annulée ou que 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.added_to_segment |
contact | Un contact entre dans un segment avec suivi. Pas pour les changements dus à la modification du segment. Alpha : seule l’équipe Emailit peut ajouter des déclencheurs de segment ; les autres requêtes renvoient 403 avec error: "segments_alpha". |
contact.removed_from_segment |
contact | Un contact sort d’un segment avec suivi. Pas pour les changements dus à la modification du segment. Alpha, comme contact.added_to_segment. |
contact.created |
contact | Un contact est créé. |
contact.updated |
contact | Un contact est mis à jour, y compris ses tags et son score. |
contact.tag_added, contact.tag_removed |
contact | Un tag est ajouté au contact ou en est retiré. |
contact.score_changed |
contact | Le score de lead du contact change. |
contact.unsubscribed |
contact | Le contact se désinscrit d’une liste ou de tous les e-mails marketing. |
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.on_date |
contact | La date d’un champ personnalisé de type date arrive, éventuellement avec un décalage en jours ou en semaines, à une heure donnée dans un fuseau horaire. Une seule fois, ou chaque année avec repeat: "yearly". |
contact.date_anniversary |
contact | Chaque année, au mois et au jour d’un champ personnalisé de type date, avec les mêmes options. |
contact.on_event |
contact | Un événement personnalisé (c:) ou un événement de l’espace de travail (w:) concernant le contact. Forfaits Business et Custom : les autres forfaits reçoivent 403 avec error: "plan_required" et required_plan: "business". |
form.submitted |
contact | Un formulaire est envoyé avec une adresse e-mail. |
contact.on_purchase |
contact | Un contact passe une nouvelle commande. Alpha : seule l’équipe Emailit peut ajouter des déclencheurs Commerce ; les autres requêtes renvoient 403 avec error: "commerce_alpha". |
contact.abandoned_cart |
contact | Le panier d’un contact est abandonné. Alpha, comme contact.on_purchase. |
contact.visits_url |
contact | Accepté, mais Emailit ne l’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_…).segment_idstringcontact.added_to_segment et contact.removed_from_segment : le segment avec suivi (seg_…). Facultatif lorsque vous créez l’automatisation, obligatoire lorsque vous mettez à jour ses étapes. Un segment inexistant ou sans suivi renvoie 400.include_current_membersbooleanpar défaut : falsecontact.added_to_segment : au premier démarrage de l’automatisation, démarre aussi une exécution pour chaque contact déjà présent dans le segment. Les paramètres de réentrée s’appliquent toujours.date_fieldstringcontact.date_anniversary et contact.on_date : la clé du champ personnalisé qui contient la date, par exemple birthday.offset, time, timezone, repeatobject, string, string, stringoffset vaut { "amount": 3, "unit": "days", "direction": "before" } (unit days ou weeks), time est au format HH:MM (par défaut 00:00), timezone est un nom IANA (par défaut UTC), et repeat vaut once ou yearly pour contact.on_date.tagstringcontact.tag_added et contact.tag_removed : uniquement ce tag.threshold, directionnumber, stringcontact.score_changed : uniquement quand le score franchit threshold, en montant (up, par défaut) ou en descendant (down).fieldstringcontact.updated : uniquement quand ce champ a changé, par exemple custom_fields.purchased, tags ou score.event_namestringcontact.on_event : le nom de l’événement, comme purchase (correspond à c:purchase et à w:purchase) ou w:webinar.attended. Omettez-le pour n’importe quel événement de l’espace de travail ou personnalisé. Filtrez sur les propriétés de l’événement avec filter, par exemple properties.total.automation_id, campaign_id, link_containsstringform_idstringform.submitted : uniquement ce formulaire.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, email_type, tracking |
forward_email |
email, event | to (obligatoire), from, subject, email_id |
wait |
tous | seconds (obligatoire, de 0 à 2 592 000, soit 30 jours) |
wait_until |
tous (modes event et condition : contact) |
mode (date, event ou condition) et les champs de ce mode |
condition |
tous | filter (obligatoire, voir Conditions) |
goal |
contact | event ou condition, if_not_met |
experiment |
tous | variants (obligatoire), control |
call_webhook |
tous | url (obligatoire), method, headers, body, secret, fail_on_error |
run_automation |
tous | automation_id (obligatoire), exit_current |
exit_automation |
contact | automation_ids ou all: true |
end_run |
tous | Aucune |
end |
tous | Aucune |
add_tag, remove_tag |
contact | tags (obligatoire) |
update_score |
contact | operation (add, subtract ou set), value (obligatoire) |
add_to_audience |
contact | audience_id (obligatoire), emit_events |
remove_from_audience |
contact | audience_id (obligatoire), mode (remove ou unsubscribe), emit_events |
update_subscription |
contact | action (subscribe ou unsubscribe, obligatoire), scope (audience, all_audiences ou global), audience_id |
edit_contact |
contact | fields (obligatoire), emit_events |
add_to_suppressions |
email, event | type, reason, email |
remove_from_suppressions |
email, event | email |
create_contact |
email, event | email, first_name, audience_id, emit_events |
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, et peut être une variable. Dans le contextecontact, l’e-mail est envoyé au contact de l’exécution ; dans les contextesemailetevent, définissezto.email_typevautmarketing(par défaut dans le contextecontact: ignoré pour les contacts désinscrits, avec un lien de désinscription et des en-têtesList-Unsubscribe) outransactional.tracking: { "loads": true, "clicks": true }remplace les paramètres de suivi du domaine, ettracking: {}revient à ces paramètres.wait_untilattend une date :{ "mode": "date", "date": { "type": "global", "key": "webinar_date" }, "offset": { "amount": 1, "unit": "days", "direction": "before" }, "time": "09:00", "timezone": "Europe/Prague", "if_passed": "continue" }, oùdate.typevautcontact(avecfield),global(aveckey),fixed(avecvalue) oupayload(avecpath), etif_passedvautcontinueoubranch. Pour un événement :{ "mode": "event", "event": { "event": "contact.clicked_in_email" }, "timeout": { "amount": 2, "unit": "days" } }. Pour une condition :{ "mode": "condition", "condition": { ... }, "timeout": ... }. Les attentes durent 365 jours au maximum. Consultez Wait until.goalprend un critère d’événement dansevent(comme dansexit_conditions) ou unecondition. Quand le contact remplit l’objectif, l’exécution y saute.if_not_met(continue,waitouend) détermine ce qui se passe quand une exécution atteint l’objectif avant de l’avoir rempli. Les étapes d’objectif nécessitent un forfait Pro, Business ou Custom.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": [...] }. Consultez Conditions. 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. Sansbody, elle envoie l’automatisation, l’exécution, le contact et le payload au format JSON. Avecsecret, le corps est signé dansX-Emailit-Signature. Une réponse autre que 2xx ne fait pas échouer l’étape, sauf sifail_on_errorvauttrue. Les adresses privées sont bloquées.run_automationdémarre une exécution d’une autre automatisation active pour le même contact, avec le payload de cette exécution. L’exécution en cours continue, ou se termine avecexit_current: true.exit_automationannule les exécutions en cours du contact dans les automatisations listées dansautomation_ids, ou dans toutes les autres automatisations avecall: true.end_runtermine l’exécution, y compris les autres branches.endne termine que sa propre branche.add_tagetremove_tagmodifient les tags du contact.update_scoremodifie le score de lead.update_subscriptioninscrit ou désinscrit le contact pour une liste, pour toutes ses listes (unsubscribeuniquement) ou pour tous les e-mails marketing (global).remove_from_audiencesupprime l’appartenance du contact à la liste (mode: "remove", par défaut) ou le garde dans la liste comme désinscrit (mode: "unsubscribe").emit_events(truepar défaut) suradd_to_audience,remove_from_audience,create_contactetedit_contactenvoie les événementssubscriber.*etcontact.*habituels : les webhooks les reçoivent et d’autres automatisations démarrent. Les étapes enregistrées avant le 2026-10-20 ontemit_events: false, et leurs étapesremove_from_audienceontmode: "unsubscribe".edit_contactprendfields: [{ "key": "first_name", "value": "Ada" }]. Les clésemail,first_name,last_nameetunsubscribedmettent à jour le contact ; toute autre clé (avec ou sanscustom_fields.) définit un champ personnalisé, converti dans son type.operationvautset(par défaut),clear,incrementoudecrement.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}}, {{cf.plan}}, {{global.webinar_link}}, {{email.mail_from}}, {{payload.object.subject}} ou {{meta.source_event_id}}, par exemple "to": "{{email.mail_from}}". Le rendu des modèles envoyés par send_email, et de son subject, est effectué avec Temple, et ils disposent aussi directement des champs du contact, comme {{ first_name }}, {{tags}} et {{score}}.
Conditions
Un filtre condition (de même que les conditions de wait_until et de goal, et exit_conditions) s’écrit { "match": "all" | "any", "rules": [...] }. Une règle est { "field", "operator", "value" }, ou un groupe imbriqué { "match", "rules" }, sur 3 niveaux et 50 règles au maximum.
field |
operator |
value |
|---|---|---|
Champs du contact (email, first_name, last_name, created_at, unsubscribed, score), subscribed, custom_fields.<key>, global.<key>, payload.<path>, meta.<path>, contact.<path>, email.<path> |
equals, not_equals, contains, not_contains, starts_with, ends_with, in, not_in, is_set, is_not_set, greater_than, less_than, greater_or_equal, less_or_equal, is_true, is_false, before, after, on, is_past, is_future, within_last, within_next, more_than_ago, more_than_from_now |
La valeur. Les opérateurs exprimés en jours prennent un nombre de jours ou { "amount", "unit" }. Inutile pour is_set, is_not_set, is_true, is_false, is_past, is_future. |
tags |
contains, not_contains, in, not_in, is_set, is_not_set |
Un tag, ou un tableau pour in et not_in. |
audience |
is_subscribed, is_not_subscribed, is_member, is_not_member |
Un ID de liste (aud_…). |
engagement |
opened, not_opened, clicked, not_clicked |
"run", "automation", { "scope": "step", "step": "<key>" }, { "scope": "any", "days": 30 } ou { "scope": "campaign", "campaign_id": "cmp_…" }. |
segment |
is_member, is_not_member |
Un ID de segment (seg_…), avec ou sans suivi. Alpha. |
commerce.<field> |
Les opérateurs de segment du champ, sauf cinq qui prennent les noms de ce tableau : greater_or_equal, less_or_equal, within_last, within_next et more_than_ago |
La valeur que prend la règle de segment. Alpha. Voir ci-dessous. |
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. subscribed vaut true quand le contact peut recevoir des e-mails marketing.
Les règles commerce.<field> utilisent les champs Commerce des segments, évalués de la même façon : orders_count, total_spent, average_order_value, first_order_at, last_order_at, expected_next_order_at, last_active_at, churn_risk, purchased, viewed_product, used_coupon et cart, par exemple { "field": "commerce.purchased", "operator": "has", "value": { "days": 30, "product_ids": ["sku-1"] } }. Les règles de segment et Commerce sont en alpha : les autres requêtes qui en ajoutent renvoient 403 avec error segments_alpha ou commerce_alpha. Les automatisations qui en contiennent déjà continuent de fonctionner pour tout le monde.
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 et des branches, accessibilité des étapes, settings, 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.
Les fonctionnalités que le forfait de l’espace de travail n’inclut pas renvoient 403 avec error: "plan_required", le forfait le plus bas qui les inclut dans required_plan, et un message. Les étapes goal et les critères contact.on_event dans exit_conditions, goal et wait_until nécessitent pro, et le déclencheur contact.on_event nécessite business.
{
"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). Quand une étape conserve sa key et son action, les paramètres que vous omettez de sa config conservent leurs valeurs enregistrées : email_type et tracking pour send_email, emit_events pour les étapes de contact, et mode pour remove_from_audience. Envoyez un paramètre pour le modifier ; tracking: {} revient aux paramètres de suivi du domaine.
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
namestringdescriptionstringsettingsobjectexit_conditions, exit_on_audience_removal, on_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Consultez Paramètres. Les nouvelles conditions de sortie s’appliquent aux exécutions en cours, y compris sur les automatisations actives.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, 403 avec error: "plan_required" lorsque la mise à jour ajoute une étape, un déclencheur ou une condition de sortie que le forfait n’inclut pas (voir Créer une automatisation), et 404 si l’automatisation n’existe pas. Ce que l’automatisation contient déjà reste autorisé après un passage à un forfait inférieur.
{
"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. Lors du premier démarrage uniquement, les déclencheurs contact.added_to_segment avec include_current_members: true démarrent aussi une exécution pour chaque contact déjà présent dans leur segment avec suivi.
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.filter[contact_id]stringcon_…). Pour voir les exécutions d’un contact dans toutes les automatisations, utilisez Lister les exécutions d’un contact.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.cancel_reasonstring | nullexit_condition, left_audience, canceled_by_user (ou la reason que vous avez envoyée), exited_by_api, exited_by_automation, automation_stopped ou contact_deleted.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, un tableau run_steps et un tableau waits.
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). Les exécutions annulées ont un cancel_reason, et les exécutions terminées de façon anticipée ont un ended_by, comme end_run_step, moved_to_automation ou goal_not_met. Les exécutions démarrées par une autre automatisation ont un depth et soit un parent_run_id (démarrées par une étape Start automation), soit un caused_by (démarrées par une modification effectuée par une étape).run_stepsobject[]Une entrée par étape atteinte par l’exécution :
step_id: l’ID de l’étape (aus_…), ainsi questep_keyetaction, la clé et l’action de l’étape.status:running,waiting(une étapewaitouwait_untilqui n’est pas terminée),completed,failed,skipped(ignorée parce que l’exécution a sauté jusqu’à un objectif ou s’est terminée plus tôt) oucanceled.outcome: le résultat, par exemple le dernier statut de l’e-mail envoyé par une étapesend_email(delivered,loaded,clicked…),skippedpour un e-mail marketing destiné à un contact désinscrit,matchedounot_matchedpour une condition,matchedoutimeoutpour unwait_until, oureachedounot_reachedpour un objectif.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.
waitsobject[]Les attentes wait_until (événement ou condition) et goal de l’exécution : id, step_key, kind (event ou condition), event, status (waiting, matched, timed_out ou canceled), timeout_at, created_at et resolved_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."
}Annuler une exécution
Annule une exécution encore running. Les étapes en attente dans un Time delay ou un Wait until sont annulées, aucune autre étape ne s’exécute, et le statut de l’exécution passe à canceled. Nécessite une clé API de portée full.
Les exécutions annulées ne peuvent pas être reprises. Pour annuler toutes les exécutions d’un contact dans l’automatisation, utilisez Retirer un contact. Pour annuler des exécutions automatiquement, utilisez des conditions de sortie.
/automations/{id}/runs/{run_id}/cancelParamètres de chemin
idstringobligatoireaut_…).run_idstringobligatoireaur_…).Paramètres du corps
reasonstringpar défaut : canceled_by_usercancel_reason de l’exécution, 200 caractères au maximum.Réponse
Renvoie l’exécution dans data, avec status à canceled et cancel_reason. Renvoie 404 si l’automatisation ou l’exécution n’existe pas, et 422 si l’exécution n’est pas en cours.
Retirer un contact d’une automatisation
Annule toutes les exécutions de cette automatisation encore running pour un contact, par exemple depuis votre boutique quand une commande est payée. Les exécutions prennent le statut canceled. Nécessite une clé API de portée full.
Pour faire sortir des contacts automatiquement quand quelque chose se produit, utilisez plutôt des conditions de sortie.
/automations/{id}/exitParamètres de chemin
idstringobligatoireaut_…).Paramètres du corps
contact_idstringcon_…). Transmettez ce paramètre ou email.emailstringreasonstringpar défaut : exited_by_apicancel_reason de chaque exécution, 200 caractères au maximum.Réponse
dataobjectautomation_id, contact_id et canceled_runs, les ID des exécutions annulées. Vide si le contact n’avait aucune exécution en cours.messagestringCanceled 1 run.Renvoie 400 sans contact_id ni email, et 404 si l’automatisation ou le contact n’existe pas.
Lister les exécutions d’un contact
Renvoie les 100 dernières exécutions d’un contact dans toutes les automatisations, de la plus récente à la plus ancienne, chacune avec le nom de son automatisation. Nécessite une clé API de portée full.
/automations/runsParamètres de requête
contact_idstringcon_…). Transmettez ce paramètre ou email.emailstringstatusstringrunning, completed, failed ou canceled.Réponse
dataobject[]automation_name.Renvoie 400 sans contact_id ni email, et 404 si le contact n’existe pas.
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."
}