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}
- 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
on_step_failurestringpadrão: stopstop marca a execução como failed quando uma etapa falha. skip registra a etapa com falha e deixa o restante da execução terminar.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 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.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 execução fica completed quando não restam etapas, failed quando uma etapa falha (com on_step_failure: "stop") e canceled quando 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.updated |
contact | Um contato é atualizado. |
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.date_anniversary |
contact | Diariamente às 00:00 UTC, para os contatos cujo campo personalizado de data (YYYY-MM-DD) tem o mês e o dia de hoje. |
contact.on_date |
contact | Diariamente às 00:00 UTC, para os contatos cujo campo personalizado de data é igual à data de hoje. |
contact.visits_url, contact.on_purchase, contact.on_event |
contact | Aceitos, mas o Emailit ainda não os 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_…).date_fieldstringcontact.date_anniversary e contact.on_date: a chave do campo personalizado que guarda a data, por exemplo birthday.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 |
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) |
condition |
todos | filter (obrigatório, veja abaixo) |
experiment |
todos | variants (obrigatório), control |
call_webhook |
todos | url (obrigatório), method, headers, body |
run_automation |
todos | automation_id (obrigatório) |
end |
todos | Nenhuma |
add_to_audience |
contact | audience_id (obrigatório) |
remove_from_audience |
contact | audience_id (obrigatório) |
edit_contact |
contact | fields (obrigatório) |
add_to_suppressions |
email, event | type, reason, email |
remove_from_suppressions |
email, event | email |
create_contact |
email, event | email, first_name, audience_id |
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. No contextocontact, o e-mail vai para o contato da execução; nos contextosemaileevent, definato.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": [...] }com os mesmos operadores dos filtros de gatilho. Campos sem prefixo são resolvidos no contato (first_name,custom_fields.plan) ou no e-mail (rcpt_to,subject) da execução; prefixe um campo comcontact.,email.,payload.oumeta.para ser explícito. 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. Uma resposta diferente de 2xx não faz a etapa falhar.run_automationinicia uma execução de outra automação em andamento com o payload desta execução. A execução atual continua.edit_contactrecebefields: [{ "key": "first_name", "value": "Ada" }]. As chavesemail,first_name,last_nameeunsubscribedatualizam o contato; qualquer outra chave define um campo personalizado.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 placeholders que o Emailit preenche quando a etapa é executada: {{contact.email}}, {{email.mail_from}}, {{payload.object.subject}} ou {{meta.source_event_id}}, por exemplo "to": "{{email.mail_from}}". Os templates enviados por send_email também renderizam diretamente os campos do contato, como {{ first_name }}.
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 válidas, alcançabilidade 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.
{
"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).
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
namestringdescriptionstringsettingsobjecton_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Consulte Configurações.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, e 404 se a automação não existir.
{
"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.
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.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 (a automação foi interrompida).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 e de um array run_steps.
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).run_stepsobject[]Uma entrada por etapa alcançada pela execução:
step_id: o ID da etapa (aus_…). Associe-o asteps[].idde Obter uma automação.status:running,waiting(uma etapawaitcujo tempo ainda não passou),completedoufailed.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.
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."
}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."
}