Aller au contenu
Docs

Construisez des workflows à partir de déclencheurs et d’étapes, lancez-les et consultez leurs exécutions.

URL de basehttps://api.emailit.com/v2AuthentificationErreursLimites de débit

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.

POST/automations

Paramètres du corps

contextstringobligatoire
Ce sur quoi porte chaque exécution : contact, 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.
namestringobligatoire
Nom de l’automatisation, 191 caractères au maximum.
descriptionstring | null
Description facultative.
settingsobject
Règles d’exécution. Consultez Paramètres.
stepsobject[]obligatoire
Les étapes de déclenchement et d’action, dont au moins un déclencheur. Consultez Étapes.
connectionsobject[]obligatoire
Les liens entre les étapes. Transmettez [] 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 : false
true 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 : stop
stop 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 : true
false 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 : 0
Nombre maximal d’exécutions simultanées au statut running. 0 signifie aucune limite.
cooldown_secondsintegerpar défaut : 0
Ignore un déclenchement lorsque le même contact (ou e-mail) a démarré une exécution dans cette automatisation au cours de ce nombre de secondes.

Étapes

keystringobligatoire
Votre identifiant pour l’étape, unique dans l’automatisation, par exemple welcome_email. Les connexions, les statistiques d’étape et les mises à jour désignent les étapes par leur clé.
typestringobligatoire
trigger ou action.
triggerstring
Nom du déclencheur, obligatoire lorsque type vaut trigger. Consultez Déclencheurs.
actionstring
Nom de l’action, obligatoire lorsque type vaut action. Consultez Actions.
configobject
Paramètres du déclencheur ou de l’action.

Connexions

fromstringobligatoire
Clé de l’étape de départ du lien.
tostringobligatoire
Clé de l’étape suivante.
branchstringpar défaut : default
L’issue de l’étape from 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 :

  • condition ne suit que le lien dont la branch vaut yes ou no, selon le résultat.
  • wait_until ne suit que matched ou timeout (événements et conditions), ou default ou passed (dates).
  • experiment suit les liens de la variante choisie. Lorsque ce chemin se termine, l’exécution continue sur les liens default de l’étape d’expérimentation.
  • wait retarde l’étape suivante.
  • Toutes les autres actions suivent leurs liens default. Une étape qui a plusieurs liens sortants les exécute tous.
  • Une étape goal peut 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 email Un e-mail entrant arrive.
email.delivered, email.bounced, email.complained, email.loaded, email.clicked, email.failed, email.suppressed, email.canceled email 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_idstring
Pour contact.added_to_audience et contact.removed_from_audience : s’active uniquement pour cette liste de contacts (aud_…).
segment_idstring
Pour contact.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 : false
Pour contact.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_fieldstring
Pour contact.date_anniversary et contact.on_date : la clé du champ personnalisé qui contient la date, par exemple birthday.
offset, time, timezone, repeatobject, string, string, string
Pour les déclencheurs de date : offset 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.
tagstring
Pour contact.tag_added et contact.tag_removed : uniquement ce tag.
threshold, directionnumber, string
Pour contact.score_changed : uniquement quand le score franchit threshold, en montant (up, par défaut) ou en descendant (down).
fieldstring
Pour contact.updated : uniquement quand ce champ a changé, par exemple custom_fields.purchased, tags ou score.
event_namestring
Pour contact.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.
form_idstring
Pour form.submitted : uniquement ce formulaire.
filterobject

S’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_email envoie le modèle. from vaut par défaut l’expéditeur du modèle et doit appartenir à un domaine d’envoi vérifié. subject remplace l’objet du modèle. reply_to est une adresse ou un tableau d’adresses, et peut être une variable. Dans le contexte contact, l’e-mail est envoyé au contact de l’exécution ; dans les contextes email et event, définissez to. email_type vaut marketing (par défaut dans le contexte contact : ignoré pour les contacts désinscrits, avec un lien de désinscription et des en-têtes List-Unsubscribe) ou transactional. tracking: { "loads": true, "clicks": true } remplace les paramètres de suivi du domaine, et tracking: {} revient à ces paramètres.
  • wait_until attend 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.type vaut contact (avec field), global (avec key), fixed (avec value) ou payload (avec path), et if_passed vaut continue ou branch. 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.
  • goal prend un critère d’événement dans event (comme dans exit_conditions) ou une condition. Quand le contact remplit l’objectif, l’exécution y saute. if_not_met (continue, wait ou end) 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_email transfère l’e-mail de l’exécution (ou l’e-mail indiqué dans email_id) à to. from vaut par défaut l’expéditeur d’origine et subject, Fwd: <original subject>.
  • condition prend { "match": "all" | "any", "rules": [...] }. Consultez Conditions. L’étape continue sur yes ou no.
  • experiment choisit l’une des variants (control compris), 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_webhook envoie une requête HTTP (méthode POST par défaut, Content-Type JSON) et enregistre la classe de statut (2xx, 4xx, 5xx), ou timeout ou network_error. Sans body, elle envoie l’automatisation, l’exécution, le contact et le payload au format JSON. Avec secret, le corps est signé dans X-Emailit-Signature. Une réponse autre que 2xx ne fait pas échouer l’étape, sauf si fail_on_error vaut true. Les adresses privées sont bloquées.
  • run_automation dé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 avec exit_current: true.
  • exit_automation annule les exécutions en cours du contact dans les automatisations listées dans automation_ids, ou dans toutes les autres automatisations avec all: true.
  • end_run termine l’exécution, y compris les autres branches. end ne termine que sa propre branche.
  • add_tag et remove_tag modifient les tags du contact. update_score modifie le score de lead.
  • update_subscription inscrit ou désinscrit le contact pour une liste, pour toutes ses listes (unsubscribe uniquement) ou pour tous les e-mails marketing (global).
  • remove_from_audience supprime l’appartenance du contact à la liste (mode: "remove", par défaut) ou le garde dans la liste comme désinscrit (mode: "unsubscribe").
  • emit_events (true par défaut) sur add_to_audience, remove_from_audience, create_contact et edit_contact envoie les événements subscriber.* et contact.* habituels : les webhooks les reçoivent et d’autres automatisations démarrent. Les étapes enregistrées avant le 2026-10-20 ont emit_events: false, et leurs étapes remove_from_audience ont mode: "unsubscribe".
  • edit_contact prend fields: [{ "key": "first_name", "value": "Ada" }]. Les clés email, first_name, last_name et unsubscribed mettent à jour le contact ; toute autre clé (avec ou sans custom_fields.) définit un champ personnalisé, converti dans son type. operation vaut set (par défaut), clear, increment ou decrement.
  • add_to_suppressions bloque l’adresse de l’exécution (type par défaut : recipient ; reason par défaut : automation). remove_from_suppressions la retire des adresses bloquées. Dans le contexte event, transmettez email.
  • create_contact crée le contact (ou retrouve le contact existant) et l’inscrit éventuellement à audience_id. Dans le contexte email, email vaut 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.

POST/automations
Terminal
curl -X POST https://api.emailit.com/v2/automations \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome series",
    "context": "contact",
    "description": "Welcome new subscribers, then nudge free users a day later.",
    "settings": { "allow_reentry": false },
    "steps": [
      {
        "key": "joined",
        "type": "trigger",
        "trigger": "contact.added_to_audience",
        "config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
      },
      {
        "key": "welcome_email",
        "type": "action",
        "action": "send_email",
        "config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
      },
      {
        "key": "wait_1_day",
        "type": "action",
        "action": "wait",
        "config": { "seconds": 86400 }
      },
      {
        "key": "is_free_user",
        "type": "action",
        "action": "condition",
        "config": {
          "filter": {
            "match": "all",
            "rules": [{ "field": "custom_fields.plan", "operator": "is_not_set" }]
          }
        }
      },
      {
        "key": "upgrade_tips",
        "type": "action",
        "action": "send_email",
        "config": { "type": "template", "template_id": "getting-started-tips" }
      },
      { "key": "done", "type": "action", "action": "end" }
    ],
    "connections": [
      { "from": "joined", "to": "welcome_email" },
      { "from": "welcome_email", "to": "wait_1_day" },
      { "from": "wait_1_day", "to": "is_free_user" },
      { "from": "is_free_user", "to": "upgrade_tips", "branch": "yes" },
      { "from": "is_free_user", "to": "done", "branch": "no" }
    ]
  }'
JSON
{
  "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
}

Récupérer une automatisation

Récupère une automatisation avec son graphe complet. Nécessite une clé API de portée full.

GET/automations/{id}

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Réponse

Renvoie l’automatisation dans data.

idstring
ID de l’automatisation, avec le préfixe aut_.
contextstring
contact, email ou event.
namestring
Nom de l’automatisation.
descriptionstring | null
Description facultative.
statusstring
draft, running, paused, stopped ou archived.
settingsobject
Règles d’exécution : on_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Vide si vous n’en avez défini aucune.
last_triggered_atstring | null
Date à laquelle l’automatisation a démarré une exécution pour la dernière fois.
published_atstring | null
Date du premier démarrage de l’automatisation.
stepsobject[]
Pour chaque étape : 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[]
Pour chaque lien : les clés des étapes 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.

GET/automations/{id}
Terminal
curl https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "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" }
    ]
  }
}

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.

POST/automations/{id}

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Paramètres du corps

namestring
Nom, 191 caractères au maximum.
descriptionstring
Description.
settingsobject
Remplace tous les paramètres : exit_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[]
La liste complète des étapes. Obligatoire lorsque vous envoyez connections. Consultez Étapes.
connectionsobject[]
La liste complète des connexions. Obligatoire lorsque vous envoyez 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.

POST/automations/{id}
Terminal
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome series (v2)",
    "settings": { "allow_reentry": false, "on_step_failure": "skip" }
  }'
JSON
{
  "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
}

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.

GET/automations

Paramètres de requête

pageintegerpar défaut : 1
Numéro de page, à partir de 1.
per_pageintegerpar défaut : 25
Nombre d’automatisations par page, de 1 à 100.
filter[context]string
Uniquement les automatisations de ce contexte : contact, email ou event.
filter[status]string
Uniquement les automatisations de ce statut : draft, running, paused, stopped ou archived.
filter[name]string
Recherche insensible à la casse sur une partie du nom.
sortstringpar défaut : created_at
Champ de tri : name, created_at, updated_at ou last_triggered_at.
orderstringpar défaut : desc
Sens du tri : asc 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[]
Les automatisations de cette page : 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_recordsinteger
Nombre d’automatisations correspondantes.
per_pageinteger
Taille de page utilisée.
current_pageinteger
Numéro de cette page.
total_pagesinteger
Nombre de pages.
GET/automations
Terminal
curl -G https://api.emailit.com/v2/automations \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  --data-urlencode "filter[status]=running" \
  -d sort=last_triggered_at \
  -d per_page=50
JSON
{
  "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.

DELETE/automations/{id}

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Réponse

Renvoie un message qui confirme la suppression. Renvoie 404 si l’automatisation n’existe pas ou a déjà été supprimée.

DELETE/automations/{id}
Terminal
curl -X DELETE https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "message": "Automation was deleted successfully.",
  "notify": true
}

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.

POST/automations/{id}/start

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Réponse

Renvoie l’automatisation dans data avec status défini sur running. Renvoie 404 si l’automatisation n’existe pas.

POST/automations/{id}/start
Terminal
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/start \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "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
}

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.

POST/automations/{id}/pause

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Réponse

Renvoie l’automatisation dans data avec status défini sur paused. Renvoie 404 si l’automatisation n’existe pas.

POST/automations/{id}/pause
Terminal
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/pause \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "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
}

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.

POST/automations/{id}/stop

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Réponse

Renvoie l’automatisation dans data avec status défini sur stopped. Renvoie 404 si l’automatisation n’existe pas.

POST/automations/{id}/stop
Terminal
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stop \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "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
}

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.

POST/automations/{id}/trigger

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Paramètres du corps

payloadobject

Les 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 : transmettez contact_id (con_…). Les actions sur les contacts et send_email utilisent ce contact.
  • email : transmettez email_id (em_…). Les actions sur les e-mails utilisent cet e-mail.
  • event : n’importe quelles données. Définissez to ou email dans 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.

POST/automations/{id}/trigger
Terminal
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/trigger \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "payload": {
      "contact_id": "con_3munwNLaXKUARc6ff9wPtxKVq4A",
      "plan": "pro",
      "order_id": "ord_1042"
    }
  }'
JSON
{
  "message": "Automation trigger dispatched."
}

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.

GET/automations/{id}/runs

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Paramètres de requête

pageintegerpar défaut : 1
Numéro de page, à partir de 1.
per_pageintegerpar défaut : 25
Nombre d’exécutions par page, de 1 à 100.
filter[status]string
Uniquement les exécutions de ce statut : running, completed, failed ou canceled.
filter[contact_id]string
Uniquement les exécutions de ce contact (con_…). 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[]
Les exécutions de cette page. Leurs champs sont détaillés ci-dessous.
total_records, per_page, current_page, total_pagesinteger
Informations de pagination.

Chaque exécution comporte :

idstring
ID de l’exécution, avec le préfixe aur_.
automation_idstring
L’automatisation (aut_…).
contact_idstring | null
Le contact de l’exécution (con_…) dans le contexte contact.
email_idstring | null
L’e-mail de l’exécution (em_…) dans le contexte email.
event_idstring | null
ID de l’événement source, lorsque le payload du déclencheur en contient un.
eventstring
Le déclencheur qui a démarré l’exécution, par exemple contact.added_to_audience ou system.manual.
payloadobject
Toujours un objet vide dans cette liste. Récupérez l’exécution pour lire le payload de son déclencheur.
metaobject
Toujours un objet vide dans cette liste. Récupérez l’exécution pour lire ses métadonnées, comme failure_reason.
statusstring
running, completed, failed ou canceled.
cancel_reasonstring | null
La raison de l’arrêt d’une exécution annulée : exit_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
Horodatages en UTC.
GET/automations/{id}/runs
Terminal
curl -G https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  --data-urlencode "filter[status]=failed"
JSON
{
  "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
}

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.

GET/automations/{id}/runs/{run_id}

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).
run_idstringobligatoire
L’ID de l’exécution (aur_…).

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
Le payload du déclencheur : les données de l’événement ({ "object": { … } }) ou le payload que vous avez transmis à Déclencher une exécution, complété par automation_id.
metaobject | null
source_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 que step_key et action, la clé et l’action de l’étape.
  • status : running, waiting (une étape wait ou wait_until qui 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) ou canceled.
  • outcome : le résultat, par exemple le dernier statut de l’e-mail envoyé par une étape send_email (delivered, loaded, clicked…), skipped pour un e-mail marketing destiné à un contact désinscrit, matched ou not_matched pour une condition, matched ou timeout pour un wait_until, ou reached ou not_reached pour un objectif.
  • data : le résultat de l’étape. Par exemple, send_email renvoie { "result": "email_queued", "email_oid": "em_…", "to": "…" }, condition renvoie { "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.

GET/automations/{id}/runs/{run_id}
Terminal
curl https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs/aur_3q6GdFk2eRSG093grI0v9e6REu8 \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "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"
      }
    ]
  }
}

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.

POST/automations/{id}/runs/{run_id}/cancel

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).
run_idstringobligatoire
L’ID de l’exécution (aur_…).

Paramètres du corps

reasonstringpar défaut : canceled_by_user
Enregistré comme cancel_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.

POST/automations/{id}/runs/{run_id}/cancel
Terminal
curl -X POST https://api.emailit.com/v2/automations/aut_3Mv8Xq2nKp5Lt/runs/aur_7Kp2Vx9mQt4Lw/cancel \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reason": "Customer asked to stop"}'

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.

POST/automations/{id}/exit

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Paramètres du corps

contact_idstring
L’ID du contact (con_…). Transmettez ce paramètre ou email.
emailstring
L’adresse e-mail du contact.
reasonstringpar défaut : exited_by_api
Enregistré comme cancel_reason de chaque exécution, 200 caractères au maximum.

Réponse

dataobject
automation_id, contact_id et canceled_runs, les ID des exécutions annulées. Vide si le contact n’avait aucune exécution en cours.
messagestring
Par exemple Canceled 1 run.

Renvoie 400 sans contact_id ni email, et 404 si l’automatisation ou le contact n’existe pas.

POST/automations/{id}/exit
Terminal
curl -X POST https://api.emailit.com/v2/automations/aut_3Mv8Xq2nKp5Lt/exit \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "ada@example.com"}'

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.

GET/automations/runs

Paramètres de requête

contact_idstring
L’ID du contact (con_…). Transmettez ce paramètre ou email.
emailstring
L’adresse e-mail du contact.
statusstring
Uniquement les exécutions ayant ce statut : running, completed, failed ou canceled.

Réponse

dataobject[]
Les exécutions, sous la même forme que dans Lister les exécutions, avec en plus automation_name.

Renvoie 400 sans contact_id ni email, et 404 si le contact n’existe pas.

GET/automations/runs
Terminal
curl "https://api.emailit.com/v2/automations/runs?email=ada@example.com&status=running" \
  -H "Authorization: Bearer $EMAILIT_API_KEY"

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.

GET/automations/{id}/stats

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).

Paramètres de requête

sincestring
Ne compte que les exécutions d’étapes créées à cette date ou après. Date-heure RFC 3339, par exemple 2026-10-01T00:00:00Z.
untilstring
Ne compte que les exécutions d’étapes créées à cette date ou avant. Date-heure RFC 3339.
run_ids[]string
Ne compte que ces exécutions (aur_…). 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.

totalinteger
Nombre de fois où des exécutions ont atteint l’étape.
by_statusobject
Décomptes par statut d’étape : running, waiting, completed, failed.
by_outcomeobject
Décomptes par issue. send_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.
funnelobject
Uniquement pour les étapes send_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.
GET/automations/{id}/stats
Terminal
curl -G https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stats \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -d since=2026-10-01T00:00:00Z
JSON
{
  "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": {}
    }
  }
}

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.

GET/automations/{id}/steps/{step_key}/stats

Paramètres de chemin

idstringobligatoire
L’ID de l’automatisation (aut_…).
step_keystringobligatoire
La key de l’étape, par exemple welcome_email.

Paramètres de requête

sincestring
Ne compte que les exécutions d’étapes créées à cette date ou après. Date-heure RFC 3339.
untilstring
Ne compte que les exécutions d’étapes créées à cette date ou avant. Date-heure RFC 3339.

Ré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.

GET/automations/{id}/steps/{step_key}/stats
Terminal
curl https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/steps/welcome_email/stats \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "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
    }
  }
}

Cette page vous a-t-elle été utile ?

Merci pour votre retour.

Merci, nous lisons chaque message.