Automações
Monte fluxos com gatilhos e etapas, execute-os e inspecione as execuções.
- 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
Criar uma automação
Cria uma automação com status draft a partir de um grafo de etapas e conexões. Requer uma chave de API com escopo full. As automações estão em beta.
A automação não faz nada até você iniciá-la. Cada execução custa 3 créditos ao começar, e cada e-mail enviado por send_email ou forward_email custa mais 1 crédito. Em um workspace não verificado, essas ações só podem enviar para os e-mails das contas dos membros do workspace.
/automationsParâmetros do corpo
contextstringobrigatóriocontact, email ou event. O contexto define quais gatilhos e ações você pode usar e não pode ser alterado depois. Consulte Contextos.namestringobrigatóriodescriptionstring | nullsettingsobjectstepsobject[]obrigatórioconnectionsobject[]obrigatório[] para um grafo que só tem um gatilho. Consulte Conexões.Configurações
exit_conditionsobject[]Cancela a execução de um contato assim que um destes itens corresponde (contexto contact, até 20). Cada item é um critério de evento, o nome do gatilho em event mais os campos de configuração dele, como { "event": "contact.tag_added", "tag": "customer" } ou { "event": "contact.on_event", "event_name": "purchase" }, ou uma condição sobre o contato, { "condition": { "match": "all", "rules": [...] } }, com as regras da ação condition. Os critérios aceitam todos os gatilhos de contato, exceto os gatilhos de data e contact.visits_url, e um filter opcional, como nas configurações dos gatilhos. Os eventos de segmento (segment_id obrigatório) e os eventos de e-commerce estão em alfa, como os gatilhos correspondentes. Os critérios contact.on_event, aqui e nas etapas goal e wait_until, exigem um plano Pro, Business ou Custom. Consulte Condições de saída e metas.
exit_on_audience_removalbooleanpadrão: falsetrue cancela uma execução iniciada por contact.added_to_audience quando o contato é removido dessa lista de contatos, se descadastra dela ou se descadastra de todos os e-mails de marketing.on_step_failurestringpadrão: stopstop marca a execução como failed quando uma etapa falha. skip registra a etapa com falha e continua pelas arestas default dela (ou por no depois de uma condition com falha).allow_reentrybooleanpadrão: truefalse ignora um gatilho quando o mesmo contato (ou e-mail) já tem uma execução em andamento nesta automação.max_concurrent_runsintegerpadrão: 0running ao mesmo tempo. 0 significa sem limite.cooldown_secondsintegerpadrão: 0Etapas
keystringobrigatóriowelcome_email. As conexões, as estatísticas das etapas e as atualizações se referem às etapas pela chave.typestringobrigatóriotrigger ou action.triggerstringactionstringconfigobjectConexões
fromstringobrigatóriotostringobrigatóriobranchstringpadrão: defaultfrom segue esta aresta. Etapas condition usam yes e no; etapas wait_until usam matched e timeout (eventos e condições) ou default e passed (datas); etapas experiment usam as chaves das variantes. Todas as outras etapas usam default.Contextos
| Contexto | Uma execução se refere a | Gatilhos | Regras |
|---|---|---|---|
contact |
Um contato. send_email envia para esse contato. |
contact.*, system.* |
Um ou mais gatilhos. Todos devem se conectar à mesma primeira ação. |
email |
Um e-mail (enviado ou recebido). | email.*, system.* |
Um ou mais gatilhos. Todos devem se conectar à mesma primeira ação. |
event |
Apenas o payload do gatilho. | event.*, system.* |
Exatamente um gatilho. |
Toda ação deve ser alcançável a partir de um gatilho. Uma execução começa na ação conectada ao gatilho que disparou e segue as conexões:
conditionsegue apenas a aresta cujobranchéyesouno, conforme o resultado.wait_untilsegue apenasmatchedoutimeout(eventos e condições), oudefaultoupassed(datas).experimentsegue as arestas da variante escolhida. Quando esse caminho termina, a execução continua pelas arestasdefaultda etapa de experimento.waitadia a próxima etapa.- Todas as outras ações seguem as arestas
defaultdelas. Uma etapa com várias arestas de saída executa todas elas. - Uma etapa
goaltambém pode ser alcançada fora de ordem: quando o contato atinge a meta, a execução pula para ela e continua depois dela.
Uma execução fica completed quando não restam etapas ou uma etapa end_run é executada, failed quando uma etapa falha (com on_step_failure: "stop") e canceled quando uma condição de saída corresponde, a execução é cancelada ou você interrompe a automação.
Gatilhos
| Gatilho | Contexto | Dispara quando |
|---|---|---|
contact.added_to_audience |
contact | Um contato se inscreve em uma lista de contatos, incluindo reinscrições. |
contact.removed_from_audience |
contact | Um inscrito é excluído de uma lista de contatos. |
contact.added_to_segment |
contact | Um contato entra em um segmento rastreado. Não dispara para alterações causadas pela edição do segmento. Alfa: apenas a equipe do Emailit pode adicionar gatilhos de segmento; as outras requisições retornam 403 com error: "segments_alpha". |
contact.removed_from_segment |
contact | Um contato sai de um segmento rastreado. Não dispara para alterações causadas pela edição do segmento. Alfa, como contact.added_to_segment. |
contact.created |
contact | Um contato é criado. |
contact.updated |
contact | Um contato é atualizado, incluindo as tags e a pontuação. |
contact.tag_added, contact.tag_removed |
contact | Uma tag é adicionada ao contato ou removida dele. |
contact.score_changed |
contact | A pontuação de lead do contato muda. |
contact.unsubscribed |
contact | O contato se descadastra de uma lista de contatos ou de todos os e-mails de marketing. |
contact.loaded_email |
contact | Um destinatário que é contato no workspace abre um e-mail. |
contact.clicked_in_email |
contact | Um destinatário que é contato no workspace clica em um link rastreado. |
contact.on_date |
contact | Chega a data de um campo personalizado de data, opcionalmente deslocada em dias ou semanas, em um horário do dia em um fuso horário. Uma vez, ou todo ano com repeat: "yearly". |
contact.date_anniversary |
contact | Todo ano, no mês e no dia de um campo personalizado de data, com as mesmas opções. |
contact.on_event |
contact | Um evento personalizado (c:) ou um evento do workspace (w:) do contato. Planos Business e Custom: os outros planos recebem 403 com error: "plan_required" e required_plan: "business". |
form.submitted |
contact | Um formulário é enviado com um endereço de e-mail. |
contact.on_purchase |
contact | Um contato faz um novo pedido. Alfa: apenas a equipe do Emailit pode adicionar gatilhos de e-commerce; as outras requisições retornam 403 com error: "commerce_alpha". |
contact.abandoned_cart |
contact | O carrinho de um contato é abandonado. Alfa, como contact.on_purchase. |
contact.visits_url |
contact | Aceito, mas o Emailit ainda não o dispara. |
email.received |
Chega um e-mail recebido. | |
email.delivered, email.bounced, email.complained, email.loaded, email.clicked, email.failed, email.suppressed, email.canceled |
Ocorre o evento de e-mail de mesmo nome. | |
event.<name> |
event | Qualquer nome que comece com event.. O Emailit ainda não emite eventos event.*; inicie as automações de evento com system.manual. |
system.manual |
todos | Você chama Disparar uma execução. |
system.schedule |
todos | Aceito, mas o Emailit ainda não dispara gatilhos agendados. |
Campos de config dos gatilhos:
audience_idstringcontact.added_to_audience e contact.removed_from_audience: dispara apenas para esta lista de contatos (aud_…).segment_idstringcontact.added_to_segment e contact.removed_from_segment: o segmento rastreado (seg_…). Opcional ao criar a automação, obrigatório ao atualizar as etapas dela. Um segmento que não existe ou não é rastreado retorna 400.include_current_membersbooleanpadrão: falsecontact.added_to_segment: no primeiro início da automação, inicia também uma execução para cada contato que já está no segmento. As configurações de reentrada continuam valendo.date_fieldstringcontact.date_anniversary e contact.on_date: a chave do campo personalizado que guarda a data, por exemplo birthday.offset, time, timezone, repeatobject, string, string, stringoffset é { "amount": 3, "unit": "days", "direction": "before" } (unit days ou weeks), time é HH:MM (padrão 00:00), timezone é um nome IANA (padrão UTC), e repeat é once ou yearly para contact.on_date.tagstringcontact.tag_added e contact.tag_removed: apenas esta tag.threshold, directionnumber, stringcontact.score_changed: apenas quando a pontuação ultrapassa threshold, subindo (up, padrão) ou descendo (down).fieldstringcontact.updated: apenas quando este campo mudou, por exemplo custom_fields.purchased, tags ou score.event_namestringcontact.on_event: o nome do evento, como purchase (corresponde a c:purchase e a w:purchase) ou w:webinar.attended. Omita-o para aceitar qualquer evento do workspace ou personalizado. Filtre pelas propriedades do evento com filter, por exemplo properties.total.automation_id, campaign_id, link_containsstringform_idstringform.submitted: apenas este formulário.filterobjectDispara apenas quando o evento corresponde: { "match": "all", "rules": [{ "field": "subject", "operator": "contains", "value": "Invoice" }] }. match é all (padrão) ou any. field é um caminho com pontos dentro do object do evento, por exemplo to ou email.subject; um payload. inicial é ignorado.
Operadores: equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, in, not_in, is_set, is_not_set. Todos os operadores, exceto is_set e is_not_set, precisam de um value; in e not_in recebem um array.
Ações
| Ação | Contexto | Configuração |
|---|---|---|
send_email |
todos | type (obrigatório, template), template_id (obrigatório: um ID tem_ ou o alias de um template publicado), from, subject, reply_to, to, email_type, tracking |
forward_email |
email, event | to (obrigatório), from, subject, email_id |
wait |
todos | seconds (obrigatório, de 0 a 2.592.000, ou seja, 30 dias) |
wait_until |
todos (modos event e condition: contact) |
mode (date, event ou condition) e os campos desse modo |
condition |
todos | filter (obrigatório, consulte Condições) |
goal |
contact | event ou condition, if_not_met |
experiment |
todos | variants (obrigatório), control |
call_webhook |
todos | url (obrigatório), method, headers, body, secret, fail_on_error |
run_automation |
todos | automation_id (obrigatório), exit_current |
exit_automation |
contact | automation_ids ou all: true |
end_run |
todos | Nenhuma |
end |
todos | Nenhuma |
add_tag, remove_tag |
contact | tags (obrigatório) |
update_score |
contact | operation (add, subtract ou set), value (obrigatório) |
add_to_audience |
contact | audience_id (obrigatório), emit_events |
remove_from_audience |
contact | audience_id (obrigatório), mode (remove ou unsubscribe), emit_events |
update_subscription |
contact | action (subscribe ou unsubscribe, obrigatório), scope (audience, all_audiences ou global), audience_id |
edit_contact |
contact | fields (obrigatório), 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_emailenvia o template. Por padrão,fromé o remetente do template e deve estar em um domínio de envio verificado.subjectsubstitui o assunto do template.reply_toé um endereço ou um array de endereços e pode ser uma variável. No contextocontact, o e-mail vai para o contato da execução; nos contextosemaileevent, definato.email_typeémarketing(padrão no contextocontact: ignorado para contatos descadastrados, com link de descadastro e cabeçalhosList-Unsubscribe) outransactional.tracking: { "loads": true, "clicks": true }substitui as configurações de rastreamento do domínio, etracking: {}volta a usá-las.wait_untilespera por uma data:{ "mode": "date", "date": { "type": "global", "key": "webinar_date" }, "offset": { "amount": 1, "unit": "days", "direction": "before" }, "time": "09:00", "timezone": "Europe/Prague", "if_passed": "continue" }, em quedate.typeécontact(comfield),global(comkey),fixed(comvalue) oupayload(compath), eif_passedécontinueoubranch. Por um evento:{ "mode": "event", "event": { "event": "contact.clicked_in_email" }, "timeout": { "amount": 2, "unit": "days" } }. Por uma condição:{ "mode": "condition", "condition": { ... }, "timeout": ... }. As esperas duram até 365 dias. Consulte Wait until.goalrecebe um critério de evento emevent(como emexit_conditions) ou umacondition. Quando o contato atinge a meta, a execução pula para ela.if_not_met(continue,waitouend) decide o que acontece quando uma execução chega à meta antes de atingi-la. As etapas de meta exigem um plano Pro, Business ou Custom.forward_emailencaminha o e-mail da execução (ou o e-mail ememail_id) parato. Por padrão,fromé o remetente original esubjectéFwd: <original subject>.conditionrecebe{ "match": "all" | "any", "rules": [...] }. Consulte Condições. A etapa continua emyesouno.experimentescolhe aleatoriamente, de acordo com o peso, uma dasvariants(oucontrol), cada uma no formato{ "key": "a", "weight": 50 }, e continua na ramificação com o nome da chave escolhida.call_webhookenvia uma requisição HTTP (método padrãoPOST,Content-TypeJSON) e registra a classe do status (2xx,4xx,5xx),timeoutounetwork_error. Sembody, ela envia a automação, a execução, o contato e o payload como JSON. Comsecret, o corpo é assinado emX-Emailit-Signature. Uma resposta diferente de 2xx não faz a etapa falhar, a menos quefail_on_errorsejatrue. Endereços privados são bloqueados.run_automationinicia uma execução de outra automação em andamento para o mesmo contato, com o payload desta execução. A execução atual continua, ou termina comexit_current: true.exit_automationcancela as execuções em andamento do contato nas automações deautomation_ids, ou em todas as outras automações comall: true.end_runencerra a execução, incluindo as outras ramificações.endencerra apenas a própria ramificação.add_tageremove_tagalteram as tags do contato.update_scorealtera a pontuação de lead.update_subscriptioninscreve ou descadastra o contato de uma lista de contatos, de todas as listas (apenasunsubscribe) ou de todos os e-mails de marketing (global).remove_from_audienceexclui a participação do contato na lista (mode: "remove", o padrão) ou o mantém na lista como descadastrado (mode: "unsubscribe").emit_events(padrãotrue) emadd_to_audience,remove_from_audience,create_contacteedit_contactenvia os eventossubscriber.*econtact.*de sempre, para que os webhooks os recebam e outras automações sejam iniciadas. As etapas salvas antes de 2026-10-20 têmemit_events: false, e as etapasremove_from_audiencedelas têmmode: "unsubscribe".edit_contactrecebefields: [{ "key": "first_name", "value": "Ada" }]. As chavesemail,first_name,last_nameeunsubscribedatualizam o contato; qualquer outra chave (com ou semcustom_fields.) define um campo personalizado, convertido para o tipo dele.operationéset(padrão),clear,incrementoudecrement.add_to_suppressionssuprime o endereço da execução (typepadrãorecipient,reasonpadrãoautomation).remove_from_suppressionsremove a supressão. No contextoevent, passeemail.create_contactcria o contato (ou encontra o existente) e, opcionalmente, o inscreve emaudience_id. No contextoemail, o padrão deemailé o destinatário do e-mail.
Os valores de string em qualquer configuração de ação podem usar variáveis que o Emailit preenche quando a etapa é executada: {{contact.email}}, {{cf.plan}}, {{global.webinar_link}}, {{email.mail_from}}, {{payload.object.subject}} ou {{meta.source_event_id}}, por exemplo "to": "{{email.mail_from}}". Os templates enviados por send_email, e o subject dela, são renderizados com o Temple e também têm diretamente os campos do contato, como {{ first_name }}, {{tags}} e {{score}}.
Condições
Um filtro condition (e também as condições de wait_until e goal e as exit_conditions) é { "match": "all" | "any", "rules": [...] }. Uma regra é { "field", "operator", "value" }, ou um grupo aninhado { "match", "rules" }, com até 3 níveis e 50 regras.
field |
operator |
value |
|---|---|---|
Campos do contato (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 |
O valor. Os operadores de dias recebem dias ou { "amount", "unit" }. Não é necessário para 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 |
Uma tag, ou um array para in e not_in. |
audience |
is_subscribed, is_not_subscribed, is_member, is_not_member |
Um ID de lista de contatos (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 |
Um ID de segmento (seg_…), rastreado ou não. Alfa. |
commerce.<field> |
Os operadores de segmento do campo, exceto cinco que usam os nomes desta tabela: greater_or_equal, less_or_equal, within_last, within_next e more_than_ago |
O valor que a regra de segmento recebe. Alfa. Veja abaixo. |
Campos sem prefixo são resolvidos no contato (first_name, custom_fields.plan) ou no e-mail (rcpt_to, subject) da execução. subscribed é true quando o contato pode receber e-mails de marketing.
As regras commerce.<field> usam os campos de e-commerce dos segmentos, avaliados da mesma forma: 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 e cart, por exemplo { "field": "commerce.purchased", "operator": "has", "value": { "days": 30, "product_ids": ["sku-1"] } }. As regras de segmento e de e-commerce estão em alfa: as outras requisições que as adicionam retornam 403 com error segments_alpha ou commerce_alpha. As automações que já as têm continuam funcionando para todos.
Retorno
Retorna 201 Created com a automação em data, incluindo o ID de cada etapa (aus_…) e as conexões. status é draft.
A criação verifica a estrutura do grafo: nomes de gatilhos e ações válidos para o contexto, chaves únicas, conexões e ramificações válidas, alcançabilidade, as settings e se todo endereço from de send_email usa um domínio de envio verificado. Ela não verifica se a configuração de cada ação está completa; Atualizar uma automação verifica. Os erros retornam 400 com errors organizados pelo caminho do campo.
Os recursos que o plano do workspace não inclui retornam 403 com error: "plan_required", o plano mais básico que os tem em required_plan e uma message. As etapas goal e os critérios contact.on_event em exit_conditions, goal e wait_until exigem pro, e o gatilho contact.on_event exige 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."]
}
}Obter uma automação
Obtém uma automação com o grafo completo. Requer uma chave de API com escopo full.
/automations/{id}Parâmetros de caminho
idstringobrigatórioaut_…).Retorno
Retorna a automação em data.
idstringaut_.contextstringcontact, email ou event.namestringdescriptionstring | nullstatusstringdraft, running, paused, stopped ou archived.settingsobjecton_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Vazio quando você não definiu nenhuma.last_triggered_atstring | nullpublished_atstring | nullstepsobject[]id (aus_…), a key, o type, o trigger, a action e a config de cada etapa. Os detalhes de uma execução se referem às etapas pelo id; as estatísticas, pela key.connectionsobject[]from e to de cada aresta e o branch dela.Consulte Criar uma automação para saber o significado de cada gatilho, ação e configuração. Retorna 404 se a automação não existir ou tiver sido excluída.
{
"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."
}Atualizar uma automação
Atualiza o nome, a descrição, as configurações ou o grafo de uma automação. Requer uma chave de API com escopo full. O contexto não pode ser alterado.
Para alterar o grafo, envie steps e connections juntos; eles substituem o grafo atual. As etapas cuja key já existe mantêm o ID e o histórico de execuções, as etapas que você deixar de fora são excluídas e as novas chaves são adicionadas. Ao contrário da criação, a atualização também valida a configuração de cada ação (por exemplo, send_email precisa de type e template_id, e wait precisa de seconds). Quando uma etapa mantém a key e a ação, as configurações que você deixar de fora da config dela mantêm os valores salvos: email_type e tracking em send_email, emit_events nas etapas de contato e mode em remove_from_audience. Envie uma configuração para alterá-la; tracking: {} volta a usar as configurações de rastreamento do domínio.
Pause a automação antes de alterar o grafo de uma automação em andamento e depois inicie-a de novo para que os novos gatilhos entrem em vigor.
/automations/{id}Parâmetros de caminho
idstringobrigatórioaut_…).Parâmetros do corpo
namestringdescriptionstringsettingsobjectexit_conditions, exit_on_audience_removal, on_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Consulte Configurações. As novas condições de saída valem para as execuções em andamento, também em automações em execução.stepsobject[]connections. Consulte Etapas.connectionsobject[]steps. Consulte Conexões.Retorno
Retorna a automação atualizada em data, com message e notify. Retorna 400 com errors organizados pelo caminho do campo quando a validação falha, 403 com error: "plan_required" quando a atualização adiciona uma etapa, um gatilho ou uma condição de saída que o plano não inclui (consulte Criar uma automação), e 404 se a automação não existir. O que a automação já tem continua permitido depois de um downgrade.
{
"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."
}Listar automações
Retorna as automações do workspace, das mais recentes para as mais antigas, sem as etapas e as conexões. Requer uma chave de API com escopo full. Automações excluídas não são listadas.
/automationsParâmetros de consulta
pageintegerpadrão: 1per_pageintegerpadrão: 25filter[context]stringcontact, email ou event.filter[status]stringdraft, running, paused, stopped ou archived.filter[name]stringsortstringpadrão: created_atname, created_at, updated_at ou last_triggered_at.orderstringpadrão: descasc ou desc.Você também pode usar os filtros genéricos key.condition=value em name, status, context e created_at, com match. Consulte Filtragem.
Retorno
dataobject[]id, context, name, description, status, settings, last_triggered_at, published_at, created_at, updated_at. Nesta listagem, settings é sempre um objeto vazio; obtenha a automação para lê-lo.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
}Excluir uma automação
Exclui uma automação. Ela desaparece das listagens e para de reagir aos gatilhos. Requer uma chave de API com escopo full.
As execuções que já estão em andamento não são canceladas. Para cancelá-las, interrompa a automação antes de excluí-la.
/automations/{id}Parâmetros de caminho
idstringobrigatórioaut_…).Retorno
Retorna uma message confirmando a exclusão. Retorna 404 se a automação não existir ou já tiver sido excluída.
{
"message": "Automation was deleted successfully.",
"notify": true
}{
"message": "Automation not found."
}Iniciar uma automação
Define o status da automação como running. A partir desse momento, os gatilhos correspondentes iniciam execuções; os eventos que aconteceram antes de você iniciá-la, não. Requer uma chave de API com escopo full.
Você pode iniciar uma automação draft, paused ou stopped. O primeiro início define published_at. Somente no primeiro início, os gatilhos contact.added_to_segment com include_current_members: true também iniciam uma execução para cada contato que já está no segmento rastreado deles.
Iniciar não valida o grafo de novo. Se você montou a automação com Criar uma automação, que verifica apenas a estrutura, confira se a configuração de cada ação está completa, ou envie o grafo uma vez por Atualizar uma automação, que o valida por completo. Uma etapa com configuração incompleta falha quando uma execução chega a ela.
/automations/{id}/startParâmetros de caminho
idstringobrigatórioaut_…).Retorno
Retorna a automação em data com status definido como running. Retorna 404 se a automação não existir.
{
"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."
}Pausar uma automação
Define o status da automação como paused. Os gatilhos dela param de iniciar novas execuções, mas as execuções já em andamento continuam, incluindo as que estão aguardando em uma etapa wait. Requer uma chave de API com escopo full.
Para também cancelar as execuções em andamento, interrompa a automação em vez de pausá-la. Inicie-a de novo para retomar os disparos.
/automations/{id}/pauseParâmetros de caminho
idstringobrigatórioaut_…).Retorno
Retorna a automação em data com status definido como paused. Retorna 404 se a automação não existir.
{
"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."
}Interromper uma automação
Define o status da automação como stopped e cancela todas as execuções que ainda estão running; essas execuções recebem o status canceled, e as etapas restantes delas não são executadas. Requer uma chave de API com escopo full.
A interrupção está disponível apenas pela API. Para manter as execuções em andamento, pause a automação em vez de interrompê-la. Você pode iniciar de novo uma automação interrompida; as novas execuções começam do zero.
/automations/{id}/stopParâmetros de caminho
idstringobrigatórioaut_…).Retorno
Retorna a automação em data com status definido como stopped. Retorna 404 se a automação não existir.
{
"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."
}Disparar uma execução
Dispara o gatilho system.manual com um payload escolhido por você. A automação precisa estar running e ter uma etapa de gatilho system.manual; caso contrário, nenhuma execução é iniciada. Requer uma chave de API com escopo full. Os gatilhos manuais estão disponíveis apenas pela API.
A execução começa de forma assíncrona e custa 3 créditos, como qualquer outra execução. Encontre-a com Listar execuções.
/automations/{id}/triggerParâmetros de caminho
idstringobrigatórioaut_…).Parâmetros do corpo
payloadobjectOs dados da execução. O Emailit adiciona automation_id e guarda o resultado como o payload da execução. As etapas podem lê-lo com placeholders como {{payload.order_id}} e condições como payload.plan.
A que a execução se refere depende do contexto da automação:
contact: passecontact_id(con_…). As ações de contato esend_emailusam esse contato.email: passeemail_id(em_…). As ações de e-mail usam esse e-mail.event: quaisquer dados. Definatoouemailnas configurações das ações, por exemplo"to": "{{payload.customer_email}}".
Retorno
Retorna 200 com uma message assim que o gatilho é colocado na fila. Retorna 422 se a automação não estiver running e 404 se ela não existir.
{
"message": "Automation trigger dispatched."
}{
"message": "Automation must be running to trigger."
}{
"message": "Automation not found."
}Listar execuções
Retorna as execuções de uma automação, das mais recentes para as mais antigas. Cada execução é uma passagem pelo grafo, iniciada por um gatilho. Requer uma chave de API com escopo full.
/automations/{id}/runsParâmetros de caminho
idstringobrigatórioaut_…).Parâmetros de consulta
pageintegerpadrão: 1per_pageintegerpadrão: 25filter[status]stringrunning, completed, failed ou canceled.filter[contact_id]stringcon_…). Para ver as execuções de um contato em todas as automações, use Listar as execuções de um contato.Você também pode filtrar com key.condition=value em status, event e created_at (por exemplo created_at.after=2026-10-01) e ordenar com order e direction pelas mesmas chaves. Consulte Filtragem.
Retorno
dataobject[]total_records, per_page, current_page, total_pagesintegerCada execução tem:
idstringaur_.automation_idstringaut_…).contact_idstring | nullcon_…) no contexto contact.email_idstring | nullem_…) no contexto 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 o reason que você enviou), 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."
}Obter uma execução
Obtém uma execução de uma automação, incluindo as etapas que ela executou. Requer uma chave de API com escopo full.
/automations/{id}/runs/{run_id}Parâmetros de caminho
idstringobrigatórioaut_…).run_idstringobrigatórioaur_…).Retorno
Retorna a execução em data com os campos descritos em Listar execuções, além do payload e do meta completos, de um array run_steps e de um array waits.
payloadobject | null{ "object": { … } }) ou o payload que você passou para Disparar uma execução, com automation_id adicionado.metaobject | nullsource_event_id vincula a execução ao evento que a iniciou. Execuções com falha podem ter failure_reason: insufficient_credits (não foi possível cobrar os 3 créditos da execução) ou run_timeout (a execução ainda estava running depois de 72 horas sem nenhuma etapa em espera). Execuções canceladas têm cancel_reason, e execuções concluídas que terminaram antes do fim têm ended_by, como end_run_step, moved_to_automation ou goal_not_met. Execuções iniciadas por outra automação têm depth e também parent_run_id (iniciada por uma etapa Start automation) ou caused_by (iniciada por uma alteração feita por uma etapa).run_stepsobject[]Uma entrada por etapa alcançada pela execução:
step_id: o ID da etapa (aus_…), estep_keyeaction, a chave e a ação da etapa.status:running,waiting(uma etapawaitouwait_untilque ainda não terminou),completed,failed,skipped(pulada quando a execução foi para uma meta ou terminou antes do fim) oucanceled.outcome: o resultado, por exemplo, o status mais recente do e-mail que uma etapasend_emailenviou (delivered,loaded,clicked…),skippedpara um e-mail de marketing a um contato descadastrado,matchedounot_matchedpara uma condição,matchedoutimeoutpara umwait_until, oureachedounot_reachedpara uma meta.data: o resultado da etapa. Por exemplo,send_emailretorna{ "result": "email_queued", "email_oid": "em_…", "to": "…" },conditionretorna{ "result": true, "branch": "yes" }e as etapas com falha retornam{ "error": "…" }.started_at,completed_at,created_at.
waitsobject[]As esperas de wait_until (por evento ou condição) e de goal da execução: id, step_key, kind (event ou condition), event, status (waiting, matched, timed_out ou canceled), timeout_at, created_at e resolved_at.
Retorna 404 se a automação ou a execução não existir.
{
"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."
}Cancelar uma execução
Cancela uma execução que ainda está running. As etapas em espera em um Time delay ou em um Wait until são canceladas, nenhuma outra etapa é executada, e o status da execução passa a ser canceled. Requer uma chave de API com escopo full.
As execuções canceladas não podem ser retomadas. Para cancelar todas as execuções de um contato na automação, use Remover um contato. Para cancelar execuções automaticamente, use condições de saída.
/automations/{id}/runs/{run_id}/cancelParâmetros de caminho
idstringobrigatórioaut_…).run_idstringobrigatórioaur_…).Parâmetros do corpo
reasonstringpadrão: canceled_by_usercancel_reason da execução, com até 200 caracteres.Retorno
Retorna a execução em data, com status canceled e cancel_reason. Retorna 404 se a automação ou a execução não existir, e 422 se a execução não estiver em andamento.
Remover um contato de uma automação
Cancela todas as execuções desta automação que ainda estão running para um contato, por exemplo, a partir da sua loja quando um pedido é pago. As execuções recebem o status canceled. Requer uma chave de API com escopo full.
Para tirar contatos automaticamente quando algo acontece, use condições de saída.
/automations/{id}/exitParâmetros de caminho
idstringobrigatórioaut_…).Parâmetros do corpo
contact_idstringcon_…). Envie este parâmetro ou email.emailstringreasonstringpadrão: exited_by_apicancel_reason de cada execução, com até 200 caracteres.Retorno
dataobjectautomation_id, contact_id e canceled_runs, os IDs das execuções canceladas. Vazio quando o contato não tinha execuções em andamento.messagestringCanceled 1 run.Retorna 400 sem contact_id ou email, e 404 se a automação ou o contato não existir.
Listar as execuções de um contato
Retorna as 100 execuções mais recentes de um contato em todas as automações, das mais recentes para as mais antigas, cada uma com o nome da automação. Requer uma chave de API com escopo full.
/automations/runsParâmetros de consulta
contact_idstringcon_…). Envie este parâmetro ou email.emailstringstatusstringrunning, completed, failed ou canceled.Retorno
dataobject[]automation_name.Retorna 400 sem contact_id ou email, e 404 se o contato não existir.
Obter estatísticas
Retorna contagens de todas as etapas de uma automação, organizadas pela chave da etapa. Requer uma chave de API com escopo full.
/automations/{id}/statsParâmetros de caminho
idstringobrigatórioaut_…).Parâmetros de consulta
sincestring2026-10-01T00:00:00Z.untilstringrun_ids[]stringaur_…). Repita o parâmetro para várias execuções.Retorno
Retorna data, um objeto com uma entrada por chave de etapa. As etapas que nenhuma execução alcançou têm total igual a 0.
totalintegerby_statusobjectrunning, waiting, completed, failed.by_outcomeobjectsend_email e forward_email: accepted e, depois, o estado mais recente do e-mail (delivered, loaded, clicked, bounced, failed, complained, unsubscribed, canceled). condition: matched, not_matched. experiment: a chave da variante escolhida. call_webhook: 2xx, 4xx, 5xx, timeout, network_error. Etapas com falha: error.funnelobjectsend_email. Contagens cumulativas: accepted inclui todos os e-mails que avançaram mais, delivered inclui os e-mails carregados e clicados, e loaded inclui os clicados. bounced, failed, complained e unsubscribed são contagens 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."
}Obter estatísticas das etapas
Retorna as contagens de uma etapa de uma automação. Requer uma chave de API com escopo full. Os campos são os mesmos de Obter estatísticas.
/automations/{id}/steps/{step_key}/statsParâmetros de caminho
idstringobrigatórioaut_…).step_keystringobrigatóriokey da etapa, por exemplo welcome_email.Parâmetros de consulta
sincestringuntilstringRetorno
Retorna data com total, by_status, by_outcome e, para etapas send_email, funnel. Retorna 404 se a automação ou a chave da etapa não existir.
{
"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."
}