API de Automações
Uma automação é um fluxo de trabalho composto por etapas: um ou mais gatilhos que o iniciam, seguidos por ações, condições, atrasos, etapas de IA e o restante, conectados em um grafo. É a mesma automação que você vê e edita na página de Automações. Este guia aborda como ler e criar automações por meio da API.
- URL Base:
https://api.dmchamp.com/v1 - Autenticação: sua chave de API (consulte Autenticação)
- Erros: consulte Erros e Paginação e Erros abaixo
Todos os exemplos abaixo mostram a forma de consulta ?apiKey= em cURL e o cabeçalho X-API-Key em JavaScript e Python. Ambos funcionam em todos os endpoints.
Agências: todos os endpoints nesta página aceitam
sub_account_idcomo um parâmetro de consulta, para que você possa ler e criar as automações de um cliente com sua chave de agência. Umsub_account_idque não seja uma das contas de seus clientes retornará404. Consulte API para Agências.
Como funciona: primeiro o rascunho
A API foi criada para que nada comece a ser executado por acidente.
- Leia o catálogo.
GET /automations/stepslista todos os gatilhos, ações e tipos de etapas que você pode usar, além da gramática para escrever um grafo (graph_rules). - Crie um rascunho.
POST /automationsarmazena a automação desligada. Nada é executado ainda. - Verifique. Leia-a novamente, abra-a no construtor (a resposta fornece seu
open_path) e certifique-se de que o proprietário da conta tenha visto o que ela faz e para quem. - Ligue-a.
POST /automations/{automationId}/enableé uma chamada própria. Esta é a etapa que faz as coisas acontecerem de verdade: mensagens enviadas, registros alterados, ferramentas fornecidas a um agente de IA.
Editar nunca altera se uma automação está ligada ou desligada. Isso também significa que uma edição em uma automação que está ligada entra em vigor imediatamente, na automação ativa. Para alterar uma automação em execução com segurança, desative-a, edite-a, verifique-a e ative-a novamente.
Todo grafo que você envia passa pelas mesmas verificações que a tela do construtor aplica. Um grafo que não pode ser aberto ou executado é recusado com um 400 que lista exatamente o que precisa ser corrigido.
Acesso
- A conta precisa de Automações. Sem isso, todas as chamadas nesta página retornam
403. - O acesso de um membro da equipe segue sua área de Automações em Gerenciamento de Equipe: ler (listar, obter, etapas, execuções, pastas) requer Visualizar, tudo o que altera algo requer Editar.
- Em uma conta de cliente cujo plano não permite criar e editar automações, as chamadas de escrita retornam
403, exatamente como o construtor faz no aplicativo.
O objeto de automação
A lista retorna um resumo de cada automação, sem suas etapas:
{
"id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f",
"name": "Price question auto-reply",
"description": "Replies with the price list when someone asks about prices.",
"enabled": false,
"updated_at": "2026-10-27T09:40:00.000Z",
"trigger_kind": "incoming_message",
"folder_id": "f1a2b3c4-5d6e-7f80-91a2-b3c4d5e6f708",
"folder_name": "Sales"
}
| Campo | Significado |
|---|---|
id |
O id da automação. |
name |
Como ela é chamada na lista. |
description |
Uma a três frases sobre o que ela faz, ou null. |
enabled |
Se ela está ligada. Uma automação desativada nunca é executada. |
updated_at |
Quando foi alterada pela última vez. |
trigger_kind |
O que a aciona, por exemplo incoming_message, schedule, webhook, agent_function ou manual. null quando o grafo ainda não tem um gatilho. |
folder_id, folder_name |
A pasta em que está arquivada, ou null para nenhuma pasta. |
Ler uma automação adiciona created_at e seu graph:
{
"id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f",
"name": "Price question auto-reply",
"description": "Replies with the price list when someone asks about prices.",
"enabled": false,
"created_at": "2026-10-27T09:12:00.000Z",
"updated_at": "2026-10-27T09:40:00.000Z",
"trigger_kind": "incoming_message",
"folder_id": null,
"folder_name": null,
"graph": {
"nodes": [
{
"id": "trigger_1",
"kind": "trigger",
"label": "Incoming message",
"alias": "incoming_message",
"action": "incoming_message",
"params": { "message_filter_contains": "price" },
"config": { "kind": "incoming_message", "message_filter_contains": "price" }
},
{
"id": "send_prices",
"kind": "action",
"label": "Send message",
"alias": "send_message",
"action": "SEND_MESSAGE",
"params": { "contact_id": "${trigger.contact.id}", "body": "Hi ${trigger.contact.first_name}, here is our price list: https://example.com/prices" },
"config": { "provider": "native", "slug": "SEND_MESSAGE", "params": { "contact_id": "${trigger.contact.id}", "body": "Hi ${trigger.contact.first_name}, here is our price list: https://example.com/prices" } }
}
],
"edges": [{ "from": "trigger_1", "to": "send_prices" }]
}
}
Cada etapa (nodes[]) contém:
| Campo | Significado |
|---|---|
id |
O id da etapa, único dentro do grafo. |
kind |
O tipo de etapa: trigger, action, condition, transform, ai, delay, loop ou respond. Veja Tipos de etapa. |
label |
O nome exibido na etapa no construtor. |
alias |
O nome de referência da etapa. Etapas posteriores leem sua saída como ${nodes.<alias>.<field>}. null em uma etapa que não possui nenhum (ela é então referenciada pelo seu id). |
action |
O que a etapa faz: a ação que ela executa, ou em uma etapa de gatilho, o tipo de gatilho. null em outras etapas. |
params |
Os parâmetros da ação em uma etapa de ação, ou as configurações do gatilho em uma etapa de gatilho. null em qualquer outro tipo. Mantido para leitores mais antigos: config carrega os mesmos valores e mais. |
config |
As configurações completas da etapa conforme o construtor as armazena, para cada tipo de etapa: regras de uma condição, prompt de uma etapa de IA, duração de um atraso, slug e parâmetros de uma ação. |
Cada conexão (edges[]) possui from e to (ids de etapa), e branch quando segue um ramo de uma etapa, por exemplo true ou false após uma condição.
Duas coisas em config são alteradas na saída:
- Segredos são ocultados. Valores que parecem credenciais (segredos de webhook, tokens, chaves de API, senhas, valores de cabeçalho) retornam como
"[redacted]". Envie"[redacted]"de volta inalterado e o valor armazenado será mantido. - Textos longos são encurtados. Um texto único com mais de cerca de 4.000 caracteres é cortado e termina com reticências. Se você enviar essa etapa de volta, coloque o texto completo nela primeiro.
Listar automações
GET /automations retorna as automações na conta, da mais recentemente alterada para a mais antiga, como resumos (sem etapas).
Parâmetros de consulta (todos opcionais): folder_id (apenas as automações naquela pasta, um id de Listar pastas, ou none para aquelas que não estão em nenhuma pasta), sub_account_id.
cURL
curl "https://api.dmchamp.com/v1/automations?apiKey=YOUR_API_KEY&folder_id=none"
JavaScript
const res = await fetch("https://api.dmchamp.com/v1/automations?folder_id=none", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { automations } = await res.json();
Python
res = requests.get(
"https://api.dmchamp.com/v1/automations",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"folder_id": "none"},
)
automations = res.json()["automations"]
Resposta (200)
{ "success": true, "automations": [{ "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": false, "...": "..." }] }
Se o serviço de automação não puder ser alcançado, você recebe um 503, nunca uma lista vazia em seu lugar. Uma lista vazia sempre significa que não há automações.
Obter uma automação
GET /automations/{automationId} retorna uma automação com seu grafo completo: tipo, rótulo, alias, ação, parâmetros e configurações de cada etapa, além das conexões entre elas.
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f?apiKey=YOUR_API_KEY"
const res = await fetch("https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { automation } = await res.json();
res = requests.get(
"https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f",
headers={"X-API-Key": "YOUR_API_KEY"},
)
automation = res.json()["automation"]
Resposta (200)
{ "success": true, "automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "graph": { "nodes": ["..."], "edges": ["..."] } } }
Um id que não está nesta conta retorna 404.
Catálogo de etapas
GET /automations/steps retorna tudo a partir do que uma automação pode ser construída:
node_kinds: os 8 tipos de etapa, cada um com um rótulo e uma descrição.triggers: todos os gatilhos que podem iniciar uma automação, com seus campos de configurações (fields) e os valores que eles fornecem para etapas posteriores (output_keys).actions: as ações integradas que uma etapa de ação pode executar, cada uma com seukey(o slug que você usa em um grafo) e seuparams, marcadorequiredonde eles estão.api_actions: as operações desta API que uma etapa de ação pode chamar. Semq, elas retornam como rótulos agrupados por área emapi_actions_by_tag, e a lista simples fica vazia, pois existem centenas delas.graph_rules: a gramática para escrever um grafo: os dados que cada tipo de etapa carrega, cada tipo de gatilho com suas chaves de configurações, os provedores de ação, os nomes de ramificação e a sintaxe de modelo. Leia antes de criar ou editar um.counts: os totais por lista, independentemente do que você pesquisou.
Isso é o que o construtor oferece, não o que a conta construiu. Verifique antes de concluir que um gatilho ou ação não existe.
Parâmetros de consulta (todos opcionais): q, uma palavra para pesquisar em cada lista (sem distinção entre maiúsculas e minúsculas), e sub_account_id.
Com q:
api_actionsé a lista simples de correspondências, limitada a 60.api_actions_truncatedétruequando o limite é aplicado. As primeiras correspondências carregam seus parâmetros.- Ações para aplicativos de terceiros conectados também são pesquisadas e retornam em
app_actions. Pesquise pelo nome do aplicativo, por exemploq=hubspot. Cada um indica se a conta tem esse aplicativo conectado (connected), econnected_appslista os aplicativos que a conta tem conectados. app_actions_unavailableétruequando as ações do aplicativo não puderam ser pesquisadas desta vez. As outras listas permanecem completas.
curl "https://api.dmchamp.com/v1/automations/steps?apiKey=YOUR_API_KEY&q=tag"
const res = await fetch("https://api.dmchamp.com/v1/automations/steps?q=tag", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { triggers, actions, graph_rules } = await res.json();
res = requests.get(
"https://api.dmchamp.com/v1/automations/steps",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"q": "tag"},
)
catalogue = res.json()
Resposta (200, abreviada)
{
"success": true,
"q": "tag",
"node_kinds": [{ "kind": "trigger", "label": "Trigger", "description": "Starts the automation when an event happens." }],
"triggers": [
{
"kind": "tag_applied",
"label": "Tag applied",
"group": "Contacts",
"fields": ["tag_name", "channel", "applied_by"],
"output_keys": ["contact.id", "contact.first_name", "..."]
}
],
"actions": [
{
"key": "SET_CONTACT_TAG",
"label": "Set contact tag",
"group": "Contacts",
"provider": "native",
"params": [{ "key": "contact_id", "required": true }, { "key": "tag", "required": true }]
}
],
"api_actions": ["..."],
"app_actions": [],
"graph_rules": "GRAPH: { nodes: [{ id, type, label?, data }], edges: [{ source, target, sourceHandle? }] } ...",
"counts": { "node_kinds": 8, "triggers": 40, "actions": 44, "api_actions": 454 }
}
As listas de tipos de etapa e gatilhos abaixo foram extraídas deste endpoint. O endpoint em si é sempre a lista atual.
Criar uma automação
POST /automations cria uma automação a partir de um nome e um grafo. Ela é armazenada desativada, como um rascunho.
Corpo
| Campo | Obrigatório | Significado |
|---|---|---|
name |
Sim | Como é chamado na lista. Curto e específico. |
description |
Não | Uma a três frases sobre o que faz e quando é executado. |
graph |
Sim | { nodes, edges }, veja abaixo. |
folder_id |
Não | A pasta onde arquivá-la, um id de Listar pastas. Se omitido ou null, não vai para nenhuma pasta. |
O grafo. graph_rules do catálogo de etapas é a gramática completa. Em resumo:
- Cada nó tem um
id(único no grafo, por exemplotrigger_1ousend_reminder), umtype(um dos 8 tipos de etapa), umlabelopcional e suas configurações emdata, sob uma chave nomeada de acordo com seu tipo:data.trigger = { kind, ... },data.action = { provider, slug, params },data.condition = { ... },data.delay = { seconds },data.ai = { prompt },data.loop = { over },data.transform = { language, code },data.respond = { status, body, content_type }. - Uma automação precisa de pelo menos um gatilho. A gramática ativa permite até 10, e a automação inicia quando qualquer um deles é disparado.
- Toda outra etapa deve ser alcançável a partir de um gatilho, e nenhuma conexão pode levar de volta a uma etapa anterior.
- Cada aresta tem um
sourcee umtarget. Arestas que saem de uma condição carregamsourceHandletrueoufalse. Arestas que saem de um loop carregambodyoudone. Arestas que saem de um atraso de Aguardar resposta carregamrepliedoutimed_out. Outras arestas não têmsourceHandle; a gramática lista o restante. - Slugs e parâmetros de ação vêm do catálogo. Nunca adivinhe um id (um agente, uma tag, uma lista, um estágio): procure primeiro com a API ou deixe o campo como
""para a pessoa escolher no construtor. - Posições são opcionais. Etapas sem uma são organizadas automaticamente.
- Valores de etapas anteriores são escritos como
${trigger.<field>}e${nodes.<step>.<field>}. Veja Usando o que uma etapa anterior retornou e Expressões no guia de Automações.
O grafo é aceito em duas grafias: a do próprio construtor (nós com type e data, arestas com source e target, como abaixo) e a que Obter uma automação responde (nós com kind, config, action, params; arestas com from, to, branch). Assim, você pode ler uma automação, alterar uma etapa e enviá-la de volta.
curl -X POST "https://api.dmchamp.com/v1/automations?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Price question auto-reply",
"description": "Replies with the price list when someone asks about prices.",
"graph": {
"nodes": [
{ "id": "trigger_1", "type": "trigger", "label": "Incoming message",
"data": { "trigger": { "kind": "incoming_message", "message_filter_contains": "price" } } },
{ "id": "send_prices", "type": "action", "label": "Send message",
"data": { "action": { "provider": "native", "slug": "SEND_MESSAGE",
"params": { "contact_id": "${trigger.contact.id}", "body": "Hi ${trigger.contact.first_name}, here is our price list: https://example.com/prices" } } } }
],
"edges": [{ "source": "trigger_1", "target": "send_prices" }]
}
}'
const res = await fetch("https://api.dmchamp.com/v1/automations", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ name: "Price question auto-reply", graph: { nodes, edges } }),
});
const { automation, draft, open_path, warnings } = await res.json();
res = requests.post(
"https://api.dmchamp.com/v1/automations",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"name": "Price question auto-reply", "graph": {"nodes": nodes, "edges": edges}},
)
draft = res.json()
Resposta (201)
{
"success": true,
"automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": false, "graph": { "...": "..." } },
"draft": true,
"open_path": "/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f",
"warnings": []
}
automationé a automação conforme armazenada, na mesma forma que Obter uma automação.draftétrueenquanto ela está desativada. Uma nova automação é sempre um rascunho até que você a ative, portanto,enabled: falseaqui é normal, não uma falha.open_pathé onde ela abre no construtor do aplicativo.warningslista coisas que o construtor não conseguiu concluir, como rótulos curtos (por exemploagent_function:not_linked). Fica vazio quando tudo está limpo.
Uma criação não é segura para ser repetida cegamente. Se uma solicitação atingir o tempo limite, liste suas automações antes de enviá-la novamente, ou você poderá acabar com dois rascunhos.
Atualizar uma automação
PUT /automations/{automationId} altera o nome, a descrição e/ou o gráfico. Envie apenas os campos que deseja alterar.
Corpo: name, description, graph (todos opcionais, pelo menos um).
Um graph substitui o gráfico inteiro, portanto, trabalhe sempre a partir do que está armazenado:
- Leia a automação com
GET /automations/{automationId}. - Altere o que for necessário nesse gráfico.
- Envie o gráfico inteiro de volta, incluindo todas as etapas.
Ao enviá-lo de volta:
- Mantenha o
aliasde cada etapa exatamente como você o recebeu. Etapas posteriores referem-se a uma etapa pelo seu alias (${nodes.<alias>.<field>}). Se você alterar ou remover, todas as referências a essa etapa ficarão vazias. Veja Nomeando suas etapas. - Deixe os valores
"[redacted]"como estão. Um valor exibido como"[redacted]"mantém seu valor armazenado. - Restaure textos abreviados. Um texto que retornou terminando em reticências foi cortado na leitura.
Se a automação está ligada ou não, nunca é alterado aqui. Se estiver ligada, sua edição entra em vigor assim que for salva. Enquanto uma automação estiver ligada, uma alteração que a faria disparar por si mesma será recusada: desative-a primeiro.
curl -X PUT "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Price question auto-reply (EN)" }'
// Read, edit, send back the whole graph
const get = await fetch(`https://api.dmchamp.com/v1/automations/${id}`, { headers: { "X-API-Key": "YOUR_API_KEY" } });
const { automation } = await get.json();
const step = automation.graph.nodes.find((n) => n.id === "send_prices");
step.config.params.body = "Hi ${trigger.contact.first_name}, our new price list: https://example.com/prices";
await fetch(`https://api.dmchamp.com/v1/automations/${id}`, {
method: "PUT",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ graph: automation.graph }),
});
url = f"https://api.dmchamp.com/v1/automations/{automation_id}"
automation = requests.get(url, headers={"X-API-Key": "YOUR_API_KEY"}).json()["automation"]
# ...edit automation["graph"] here, keeping every alias...
requests.put(url, headers={"X-API-Key": "YOUR_API_KEY"}, json={"graph": automation["graph"]})
Resposta (200): o mesmo formato de uma criação (automation, draft, open_path, warnings). Enviar nenhum de name, description ou graph retorna 400.
Habilitar e desabilitar
POST /automations/{automationId}/enable liga uma automação, para que ela seja executada a partir do seu gatilho a partir de agora. Chame-o apenas quando o proprietário da conta tiver visto o que a automação faz e para quem, e tiver concordado em ligá-la. O construtor recusa ligar um grafo que não pode ser executado (sem gatilho, um loop, uma etapa que dispara a si mesma) com um 400 que explica o motivo.
POST /automations/{automationId}/disable desliga a automação (pausa-a). Execuções já em andamento são finalizadas; nenhuma nova execução é iniciada. Desabilitar é sempre permitido.
Nenhuma das chamadas aceita um corpo.
curl -X POST "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/enable?apiKey=YOUR_API_KEY"
await fetch("https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/disable", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
requests.post(
"https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/enable",
headers={"X-API-Key": "YOUR_API_KEY"},
)
Resposta (200): a automação como armazenada agora, no mesmo formato de uma criação, com draft: false após uma habilitação.
Histórico de execuções
GET /automations/{automationId}/runs retorna as execuções de uma automação, da mais recente para a mais antiga: quando cada execução começou e terminou, o que a iniciou, se foi bem-sucedida e o erro caso tenha falhado. Ler a automação diz o que ela faria. O histórico de execuções diz o que ela fez, e é a única maneira de distinguir uma automação que nunca foi executada de uma que é executada e falha todas as vezes.
Parâmetros de consulta (todos opcionais): limit (1 a 50, padrão 10), sub_account_id.
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/runs?apiKey=YOUR_API_KEY&limit=20"
const res = await fetch("https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/runs?limit=20", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { runs, note } = await res.json();
res = requests.get(
"https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/runs",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"limit": 20},
)
runs = res.json()["runs"]
Resposta (200)
{
"success": true,
"automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": true, "trigger_kind": "incoming_message" },
"runs": [
{
"id": "run_7f3a",
"status": "failed",
"trigger_source": "incoming_message",
"started_at": "2026-10-27T10:02:11.000Z",
"finished_at": "2026-10-27T10:02:12.000Z",
"error": "Contact is on Do Not Disturb list",
"cancel_reason": null,
"mode": "live"
}
]
}
modeélivepara uma execução real, ousafepara uma Execução segura a partir do editor. Uma execução segura não envia nada, portanto, não é prova de que a automação funciona em uso real.- Uma lista
runsvazia é uma resposta, não uma lacuna. A resposta então carrega umnote: ou o gatilho nunca foi disparado, ou a automação está desligada, portanto, nada foi executado.
Pastas
As pastas apenas agrupam automações na lista. Elas nunca alteram o que uma automação faz ou se ela está ligada. Veja Organizando automações em pastas.
Listar pastas
GET /automations/folders retorna as pastas, cada uma com a quantidade de automações que contém, além de unfiled_count: quantas automações não estão em nenhuma pasta.
curl "https://api.dmchamp.com/v1/automations/folders?apiKey=YOUR_API_KEY"
{
"success": true,
"folders": [{ "id": "f1a2b3c4-5d6e-7f80-91a2-b3c4d5e6f708", "name": "Sales", "automation_count": 3 }],
"unfiled_count": 5
}
Criar uma pasta
POST /automations/folders com { "name": "Appointment reminders" }. O nome é obrigatório, pode ter até 100 caracteres e deve ser exclusivo na conta. Organize automações nelas com Mover uma automação, ou passe folder_id ao criar uma.
curl -X POST "https://api.dmchamp.com/v1/automations/folders?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Appointment reminders" }'
Resposta (201): { "success": true, "folder": { "id": "...", "name": "Appointment reminders", "automation_count": 0 } }. Um nome que outra pasta já possui retorna 409 com code: "folder_name_taken".
Renomear uma pasta
PUT /automations/folders/{folderId} com { "name": "..." }. As automações dentro dela permanecem onde estão.
Resposta (200): { "success": true, "folder": { ... } }.
Excluir uma pasta
DELETE /automations/folders/{folderId} exclui apenas a pasta. As automações nela não são excluídas: elas são movidas para nenhuma pasta e continuam sendo executadas exatamente como antes.
curl -X DELETE "https://api.dmchamp.com/v1/automations/folders/f1a2b3c4-5d6e-7f80-91a2-b3c4d5e6f708?apiKey=YOUR_API_KEY"
{ "success": true, "deleted": true, "moved_to_no_folder": 3, "message": "Folder deleted. 3 automations were moved to No folder; no automation was deleted." }
Mover uma automação para uma pasta
PUT /automations/{automationId}/folder com { "folder_id": "<folder id>" }, ou { "folder_id": null } para retirá-la de sua pasta. folder_id é obrigatório. Apenas onde a automação está listada muda.
curl -X PUT "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/folder?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "folder_id": "f1a2b3c4-5d6e-7f80-91a2-b3c4d5e6f708" }'
Resposta (200): { "success": true, "automation_id": "...", "folder_id": "..." }.
Catálogo
Tipos de etapa
| Tipo | O que faz |
|---|---|
trigger |
Inicia a automação quando algo acontece. |
action |
Executa uma etapa: uma ação integrada, uma ação de API, uma ação de aplicativo conectado, uma solicitação HTTP ou um e-mail. |
condition |
Divide o fluxo com base em uma regra, em um ramo true e um false. |
transform |
Executa um pequeno trecho de código para reformatar dados entre as etapas. |
ai |
Consulta a IA com um prompt que você escreve. Pode retornar texto, campos separados ou escolher um entre vários ramos. |
delay |
Aguarda por um tempo definido ou aguarda a resposta do contato (com um tempo limite). |
loop |
Repete as etapas dentro dele para cada item em uma lista. |
respond |
Retorna uma resposta para a chamada de webhook ou a chamada de função do agente de IA que iniciou a execução. |
Gatilhos
Estes são os 40 gatilhos que o catálogo lista hoje, agrupados conforme o construtor os agrupa. A coluna Configurações contém as chaves de configuração do próprio gatilho (fields), que restringem quando ele é disparado. Todo gatilho também aceita respect_quiet_hours, run_hours, reentry e stop_on_response; veja Configurações de automação.
Mensagens
Gatilho (kind) |
Dispara quando | Configurações |
|---|---|---|
Mensagem recebida (incoming_message) |
Um contato envia uma mensagem em qualquer canal. | campaign (limita a um agente de IA), channel, message_filter_contains (palavra-chave), message_filter_regex (padrão) |
Chamada perdida (missed_call) |
Alguém liga para um de seus números do WhatsApp Web ou seu próprio número SMS e ninguém atende. | to_number |
Mensagem entregue (message_delivered) |
Uma mensagem que você enviou é confirmada como entregue pelo canal. | channel, agent |
Falha na mensagem (message_failed) |
Uma mensagem que você enviou não pôde ser entregue, com o erro. | channel, agent |
Mensagem enviada (message_sent) |
Qualquer mensagem sai da sua conta: da IA, sua, uma transmissão, um acompanhamento. Filtre-a, ou ela será executada em todas elas. | channel, sent_by |
Acompanhamento enviado (follow_up_sent) |
Um acompanhamento automático é enviado. | nenhum |
Acompanhamento ignorado (follow_up_skipped) |
Um acompanhamento foi retido porque sua condição de envio falhou. | nenhum |
Acompanhamentos finalizados (follow_up_exhausted) |
Um contato recebeu o último acompanhamento da sequência e nada mais está na fila. | nenhum |
Conversa encerrada (conversation_closed) |
Um chat é encerrado, com como terminou e um resumo. | channel, agent |
Transmissão finalizada (broadcast_completed) |
Uma transmissão terminou de ser enviada, com quantos foram enviados e quantos falharam. | nenhum |
Resposta de lead classificada (outreach_reply_labelled) |
A resposta de um lead de e-mail frio é classificada, por exemplo, como Interessado. | label |
Comentário no Skool recebido (skool_comment_received) |
Um membro comenta em uma postagem do Skool que uma de suas regras de comentário monitora. | nenhum |
Contatos
Gatilho (kind) |
Dispara quando | Configurações |
|---|---|---|
Novo contato (contact_created) |
Uma nova pessoa entra em contato com você pela primeira vez em qualquer canal, e também para importações, a API e contatos que você cria manualmente. | nenhum |
Contato atualizado (contact_updated) |
Um campo de contato é alterado. | field |
Contatos que você adiciona aqui (contact_added) |
Apenas para contatos que você mesmo coloca nesta automação a partir da página de Contatos. Uma execução por contato. | nenhum |
Tag aplicada (tag_applied) |
Uma tag é adicionada a um contato, pelo seu agente de IA, uma pessoa, uma automação ou uma importação. | tag_name, channel, applied_by |
Tag removida (tag_removed) |
Uma tag é removida de um contato. | tag_name, channel |
Membro do Skool entrou (skool_member_joined) |
Alguém entra em uma comunidade Skool que você possui ou gerencia, com seu perfil, respostas e pontuação de adequação. | group_id, create_contact |
Membro do Skool qualificado (skool_member_qualified) |
As respostas de um novo membro do Skool atingem ou superam seu limite. | min_score |
Negócios
Gatilho (kind) |
Dispara quando | Configurações |
|---|---|---|
Negócio criado (deal_created) |
Um novo negócio é adicionado a um de seus funis. | pipeline_id, stage_id |
Estágio do negócio alterado (deal_stage_changed) |
Um negócio é movido para um estágio diferente, nomeando o estágio que ele deixou e o que ele entrou. | pipeline_id, to_stage_id, from_stage_id |
Negócio atualizado (deal_updated) |
Um campo de negócio é alterado. | field |
Compromissos
Gatilho (kind) |
Dispara quando | Configurações |
|---|---|---|
Agendamento marcado (appointment_booked) |
Um novo agendamento é marcado. | nenhum |
Agendamento cancelado (appointment_cancelled) |
Um agendamento marcado é cancelado. | nenhum |
Agendamento remarcado (appointment_rescheduled) |
Um agendamento marcado é movido para outro horário, com o horário antigo ao lado do novo. | event_id |
Antes de um agendamento (appointment_upcoming) |
Um tempo definido antes de cada agendamento confirmado, para lembretes. Até cinco lembretes por automação. | offsets_minutes |
Tarefas
Gatilho (kind) |
Dispara quando | Configurações |
|---|---|---|
Tarefa criada (task_created) |
Uma tarefa é criada. | task_type |
Tarefa concluída (task_completed) |
Uma tarefa é movida para um estágio concluído. | nenhum |
Conta
Gatilho (kind) |
Dispara quando | Configurações |
|---|---|---|
Saldo de crédito baixo (low_credit_balance) |
Seu saldo de crédito cai abaixo do seu limite de alerta. | nenhum |
Canal conectado (channel_connected) |
Um de seus canais termina de conectar. | channel |
Canal desconectado (channel_disconnected) |
Um de seus canais cai: desconectado, desvinculado ou cortado. Um número do WhatsApp Web que reconecta sozinho só conta se ainda estiver fora do ar após 30 minutos. | channel |
Agência
Gatilho (kind) |
Dispara quando | Configurações |
|---|---|---|
Subconta criada (sub_account_created) |
Uma nova conta de cliente é criada, a partir do seu painel, da API ou da sua página de inscrição. | nenhum |
Atividade da subconta (sub_account_event) |
Algo acontece em uma de suas contas de cliente: créditos ficando baixos, um canal conectando, uma mudança de plano. | event, threshold |
Geral e aplicativos
Gatilho (kind) |
Dispara quando | Configurações |
|---|---|---|
Agendado (schedule) |
Em um cronograma cron. | cron, timezone |
Webhook (webhook) |
Um sistema externo chama o endereço de webhook da automação. | webhook_secret |
Função de Agente de IA (agent_function) |
Seu agente de IA chama esta automação como uma função durante uma conversa. | function_name, function_description, parameters, agent_ids, campaign_ids |
Novo item de feed (rss) |
Um novo item aparece em um feed RSS ou Atom. | feed_url |
E-mail recebido (email_received) |
Um e-mail chega na sua caixa de entrada conectada. | from_contains, subject_contains |
Evento de aplicativo (app_event) |
Algo acontece em um aplicativo conectado: uma etapa de negócio muda, um pagamento é recebido, um formulário é enviado. | toolkit, trigger_slug, connected_account_id, config |
Execução manual (manual) |
Apenas quando iniciada manualmente. | none |
Uma automação pode conter no máximo um gatilho de cada tipo: webhook, app_event, agent_function, rss, schedule, email_received, appointment_upcoming e contact_added. Um gatilho que dispara quando um registro é criado não pode ser pareado com a ação que cria o mesmo registro, pois a automação dispararia a si mesma.
Para saber o que cada gatilho fornece para as etapas seguintes (output_keys) e a lista completa de ações com seus parâmetros, leia GET /automations/steps. O Guia de Automações explica cada gatilho nos termos do construtor.
Erros
Todo erro tem o formato usual { "success": false, "error_code": <status>, "error": "..." }. Um grafo recusado adiciona code e errors:
{
"success": false,
"error_code": 400,
"code": "invalid_graph",
"error": "<the first problem, as one sentence>",
"errors": ["<the first problem, as one sentence>", "<the next problem>"]
}
errors lista todos os problemas, cada um com uma frase corrigível, e error é o primeiro deles. Corrija exatamente o que está listado e envie o grafo completo novamente. code é um dos códigos invalid_graph, automation_graph_has_a_cycle, self_triggering_automation, no_trigger ou outro código do construtor.
| Status | Quando |
|---|---|
400 |
O grafo foi recusado (veja acima), um campo obrigatório está faltando (name ou graph em uma criação, folder_id em uma movimentação), uma atualização não enviou nada para alterar, um ID de automação ou pasta não é válido, ou um nome de pasta está faltando, vazio ou é muito longo (code: "invalid_name"). |
403 |
A conta não possui Automações; o plano de uma conta de cliente não inclui criar e editar automações (apenas escrita); ou o acesso a Automações do membro da equipe é muito baixo (Visualizar para leitura, Editar para escrita). |
404 |
Nenhuma automação com esse ID nesta conta, nenhuma pasta com esse ID (code: "folder_not_found"), ou um sub_account_id que não é uma de suas contas de cliente. |
409 |
Uma pasta com esse nome já existe (code: "folder_name_taken"). |
413 |
A automação é maior do que o limite de 1 MB aceito pelo construtor. Mova códigos ou dados grandes para fora de suas etapas. |
422 |
O construtor rejeitou a solicitação por outro motivo. Verifique o grafo em relação a GET /automations/steps; enviar a mesma solicitação novamente não ajudará. |
503 |
O serviço de automação não pôde ser alcançado. Tente novamente em instantes. Para uma criação, liste suas automações primeiro para não criar um segundo rascunho. |
Usando estes endpoints via MCP
Cada endpoint nesta página também é uma ferramenta para um assistente de IA que você conecta via MCP, com as mesmas regras: uma nova automação é um rascunho até ser habilitada, e uma edição em uma automação em execução entra em vigor imediatamente.
| Ferramenta | Endpoint |
|---|---|
list_automations |
GET /automations |
get_automation |
GET /automations/{automationId} |
list_automation_steps |
GET /automations/steps |
create_automation |
POST /automations |
update_automation |
PUT /automations/{automationId} |
enable_automation |
POST /automations/{automationId}/enable |
disable_automation |
POST /automations/{automationId}/disable |
list_automation_runs |
GET /automations/{automationId}/runs |
list_automation_folders |
GET /automations/folders |
create_automation_folder |
POST /automations/folders |
rename_automation_folder |
PUT /automations/folders/{folderId} |
delete_automation_folder |
DELETE /automations/folders/{folderId} |
move_automation_to_folder |
PUT /automations/{automationId}/folder |
Próximos passos
- Automações: como gatilhos, etapas, variáveis e o histórico de execução funcionam no construtor.
- API para Agências: crie automações em uma conta de cliente com
sub_account_id. - Referência da API: o explorador de endpoints interativo completo.