
# API de Automações

Uma automação é um fluxo de trabalho composto por passos: um ou mais gatilhos que o iniciam, seguidos de ações, condições, atrasos, passos de IA e o restante, ligados num grafo. É a mesma automação que vê e edita na página de [Automações](../automations/automations.md). Este guia abrange a leitura e a criação das mesmas através da API.

- **URL base**: `https://api.dmchamp.com/v1`
- **Autenticação**: a sua chave de API (consulte [Autenticação](authentication.md))
- **Campos e corpos**: todos os parâmetros e campos de resposta encontram-se na [Referência da API](reference.md#tag/automations)
- **Erros**: consulte [Erros e Paginação](errors-and-pagination.md) e [Erros](#errors) abaixo

> **Agências:** todos os endpoints nesta página aceitam `sub_account_id` como parâmetro de consulta, para que possa ler e criar as automações de um cliente com a sua chave de agência. Um `sub_account_id` que não seja uma das contas dos seus clientes devolve `404`. Consulte [API para Agências](../agency/api-for-agencies.md).

---

## Como funciona: primeiro o rascunho

A API foi concebida para que nada comece a ser executado por acidente.

1. **Leia o catálogo.** O `GET /automations/steps` lista todos os gatilhos, ações e tipos de passos que pode utilizar, além da gramática para escrever um grafo (`graph_rules`).
2. **Crie um rascunho.** O `POST /automations` armazena a automação **desativada**. Nada é executado ainda.
3. **Verifique-a.** Leia-a novamente, abra-a no construtor (a resposta fornece-lhe o seu `open_path`) e certifique-se de que o proprietário da conta viu o que ela faz e a quem se destina.
4. **Ative-a.** O `POST /automations/{automationId}/enable` é uma chamada própria. Este é o passo que faz com que coisas reais aconteçam: mensagens enviadas, registos alterados, ferramentas fornecidas a um agente de IA.

A edição nunca altera o estado de uma automação (ligada ou desligada). Isto também significa que uma edição numa automação que está **ligada** entra em vigor imediatamente, na automação em tempo real. Para alterar uma automação em execução de forma segura, desative-a, edite-a, verifique-a e ative-a novamente.

Cada grafo que envia passa pelas mesmas verificações que o construtor aplica. Um grafo que não possa ser aberto ou executado é recusado com um `400` que lista exatamente o que deve ser corrigido.

### Acesso

- A conta necessita de Automações. Sem isso, todas as chamadas nesta página devolvem `403`.
- O acesso de um membro da equipa segue a sua área de **Automações** na [Gestão de Equipas](../settings/team-management.md): a leitura (listar, obter, passos, execuções, pastas) requer **Ver**, tudo o que altera algo requer **Editar**.
- Numa conta de cliente cujo plano exclui a criação e edição de automações, as chamadas de escrita devolvem `403`, exatamente como o construtor faz na aplicação.

---

## Endpoints

| Tarefa | Método + caminho | Explorador |
|---|---|---|
| Listar automatizações | `GET /automations` | [Abrir na Referência da API](reference.md#tag/automations/GET/automations) |
| Obter uma automatização com o seu grafo | `GET /automations/{automationId}` | [Abrir na Referência da API](reference.md#tag/automations/GET/automations/{automationId}) |
| Ler o catálogo de passos | `GET /automations/steps` | [Abrir na Referência da API](reference.md#tag/automations/GET/automations/steps) |
| Criar uma automatização (rascunho) | `POST /automations` | [Abrir na Referência da API](reference.md#tag/automations/POST/automations) |
| Atualizar uma automatização | `PUT /automations/{automationId}` | [Abrir na Referência da API](reference.md#tag/automations/PUT/automations/{automationId}) |
| Ligar | `POST /automations/{automationId}/enable` | [Abrir na Referência da API](reference.md#tag/automations/POST/automations/{automationId}/enable) |
| Desligar | `POST /automations/{automationId}/disable` | [Abrir na Referência da API](reference.md#tag/automations/POST/automations/{automationId}/disable) |
| Ler o histórico de execuções | `GET /automations/{automationId}/runs` | [Abrir na Referência da API](reference.md#tag/automations/GET/automations/{automationId}/runs) |
| Listar pastas | `GET /automations/folders` | [Abrir na Referência da API](reference.md#tag/automations/GET/automations/folders) |
| Criar uma pasta | `POST /automations/folders` | [Abrir na Referência da API](reference.md#tag/automations/POST/automations/folders) |
| Renomear uma pasta | `PUT /automations/folders/{folderId}` | [Abrir na Referência da API](reference.md#tag/automations/PUT/automations/folders/{folderId}) |
| Eliminar uma pasta | `DELETE /automations/folders/{folderId}` | [Abrir na Referência da API](reference.md#tag/automations/DELETE/automations/folders/{folderId}) |
| Mover uma automatização para uma pasta | `PUT /automations/{automationId}/folder` | [Abrir na Referência da API](reference.md#tag/automations/PUT/automations/{automationId}/folder) |

---

## Ler automatizações

`GET /automations` devolve resumos (sem passos), com os alterados mais recentemente primeiro; `folder_id=none` lista as que não estão em nenhuma pasta. `GET /automations/{automationId}` adiciona o `graph` completo: cada passo (`nodes[]`) com o seu `kind`, `label`, `alias`, `action`, `params` e `config`, e as ligações (`edges[]`) com `from`, `to` e, após uma condição ou semelhante, `branch`.

```bash
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f?apiKey=YOUR_API_KEY"
```

**É bom saber**

- **`alias` é a forma como os passos seguintes leem o resultado de um passo**, como `${nodes.<alias>.<field>}`. Um passo sem um é referenciado pelo seu id.
- `params` é mantido para leitores mais antigos; `config` transporta os mesmos valores e mais (regras de uma condição, prompt de um passo de IA, duração de um atraso, slug e parâmetros de uma ação).
- **Os segredos estão ocultos.** Valores que parecem credenciais (segredos de webhook, tokens, chaves de API, palavras-passe, valores de cabeçalho) são devolvidos 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 enviar esse passo de volta, coloque primeiro o texto completo.
- Se o serviço de automatização não puder ser alcançado, receberá um `503`, nunca uma lista vazia no seu lugar. Uma lista vazia significa sempre que não existem automatizações.

### O catálogo de passos

`GET /automations/steps` devolve tudo a partir do qual uma automatização pode ser construída: os 8 `node_kinds`, cada gatilho com as suas definições `fields` e `output_keys`, os `actions` integrados com os seus parâmetros, as `api_actions` (operações desta API que um passo de ação pode chamar), a gramática `graph_rules` e `counts`. Isto é 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.

- Sem `q`, as várias centenas de ações da API são devolvidas como etiquetas agrupadas por área em `api_actions_by_tag` e a lista plana fica vazia.
- Com `q` (uma palavra que não distingue maiúsculas de minúsculas), `api_actions` é a lista plana de correspondências, limitada a 60 (`api_actions_truncated` indica quando). As ações para aplicações de terceiros ligadas também são pesquisadas e devolvidas em `app_actions`: pesquise pelo nome da aplicação, por exemplo `q=hubspot`. Cada uma indica se a conta tem essa aplicação `connected`, e `connected_apps` lista as que estão ligadas. `app_actions_unavailable` é `true` quando as ações da aplicação não puderam ser pesquisadas desta vez; as outras listas continuam completas.

---

## Criar e editar

### Criar um rascunho

```bash
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" }]
    }
  }'
```

```json
{ "success": true, "automation": { "id": "8d2c7f1e-…", "enabled": false, "…": "…" }, "draft": true, "open_path": "/automations/8d2c7f1e-…", "warnings": [] }
```

`draft: true` e `enabled: false` são normais, não uma falha: uma nova automatização é sempre um rascunho até que a ative. `warnings` lista o que o construtor não conseguiu terminar, como etiquetas curtas (por exemplo `agent_function:not_linked`).

**Escrever o grafo.** `graph_rules` do catálogo é a gramática completa. Em resumo:

- Cada nó tem um `id` (único no grafo), um `type` (um dos 8 [tipos de passo](#step-kinds)), um `label` opcional e as suas definições em `data` sob uma chave com o nome do seu tipo (`data.trigger`, `data.action`, `data.condition`, `data.delay`, `data.ai`, `data.loop`, `data.transform`, `data.respond`).
- Uma automatização precisa de pelo menos um gatilho. A gramática ativa permite até 10, e a automatização inicia quando qualquer um deles é disparado.
- Todos os outros passos devem ser alcançáveis a partir de um gatilho, e nenhuma ligação pode levar de volta a um passo anterior.
- As arestas que saem de uma condição transportam `sourceHandle` `true` ou `false`; um ciclo `body` ou `done`; um atraso de Aguardar resposta `replied` ou `timed_out`. Outras arestas não têm nenhuma.
- Os slugs e parâmetros de ação vêm do catálogo. **Nunca adivinhe um id** (um agente, uma etiqueta, uma lista, uma fase): procure-o primeiro com a API ou deixe o campo como `""` para a pessoa escolher no construtor.
- As posições são opcionais; os passos sem uma são dispostos automaticamente.
- Os valores de passos anteriores são escritos como `${trigger.<field>}` e `${nodes.<step>.<field>}`. Consulte [Usar o que um passo anterior devolveu](../automations/automations.md#using-what-an-earlier-step-returned) e [Expressões](../automations/automations.md#expressions).
- O grafo é aceite em duas grafias: a do próprio construtor (acima) e a que uma leitura responde (`kind`, `config`, `from`, `to`, `branch`). Assim, pode ler uma automatização, alterar um passo e enviá-lo de volta.
- **Uma criação não é segura para repetir cegamente.** Se um pedido exceder o tempo limite, liste as suas automatizações antes de o enviar novamente, ou poderá acabar com dois rascunhos.

### Atualizar

`PUT /automations/{automationId}` altera `name`, `description` e/ou `graph` (pelo menos um, ou `400`). Um `graph` substitui o grafo **completo**, por isso trabalhe sempre a partir do que está armazenado: leia-o, altere o que for necessário e envie o grafo completo de volta.

```bash
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)" }'
```

- **Mantenha o `alias` de cada passo exatamente como o recebeu.** Se o alterar ou remover, todas as referências a esse passo ficarão vazias. Consulte [Dar nome aos seus passos](../automations/automations.md#naming-your-steps).
- **Deixe os valores de `"[redacted]"` como estão** e **restaure textos encurtados** (um texto terminado em reticências foi cortado na leitura).
- O estado de ativação da automatização nunca é alterado aqui. Se estiver ativa, a sua edição entra em vigor assim que for guardada. Enquanto estiver ativa, uma alteração que a faça disparar a si própria será recusada: desative-a primeiro.

### Ativar e desativar

`POST /automations/{automationId}/enable` liga uma automatização, para que esta seja executada a partir do seu acionador a partir de agora. Chame-o apenas quando o proprietário da conta tiver visto o que a automatização faz e a quem, e tiver dado o seu acordo. O construtor recusa-se a ligar um grafo que não pode ser executado (sem acionador, um ciclo, um passo que dispara a si próprio) com um `400` que explica o motivo.

```bash
curl -X POST "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/enable?apiKey=YOUR_API_KEY"
```

`POST /automations/{automationId}/disable` coloca-a em pausa: as execuções já em curso terminam, não se iniciam novas execuções. A desativação é sempre permitida. Nenhuma das chamadas requer um corpo.

---

## Histórico de execuções

`GET /automations/{automationId}/runs` devolve as execuções de uma automatização, da mais recente para a mais antiga (`limit` 1 a 50, predefinição 10): quando cada uma começou e terminou, o que a desencadeou, se foi bem-sucedida e o erro caso tenha falhado. Ler a automatização diz-lhe o que ela **faria**; o histórico de execuções diz-lhe o que ela **fez**, e é a única forma de distinguir uma automatização que nunca foi executada de uma que é executada e falha sempre.

```bash
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/runs?apiKey=YOUR_API_KEY&limit=20"
```

- `mode` é `live` para uma execução real, ou `safe` para uma **Execução segura** a partir do editor. Uma Execução segura não envia nada, por isso não é prova de que a automatização funciona numa utilização real.
- Uma lista `runs` vazia é uma resposta, não uma falha. A resposta contém então um `note`: ou o acionador nunca foi disparado, ou a automatização está desligada.

---

## Pastas

As pastas apenas agrupam automatizações na lista. Nunca alteram o que uma automatização faz ou se está ligada. Consulte [Organizar automatizações em pastas](../automations/automations.md#organizing-automations-in-folders).

```bash
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" }'
```

- Listar pastas também devolve `unfiled_count`, quantas automatizações não estão em nenhuma pasta.
- É necessário um nome de pasta, até 100 caracteres, e único na conta (`409`, `code: "folder_name_taken"`). Também pode arquivar uma automatização passando `folder_id` ao criá-la.
- Mudar o nome mantém as automatizações onde estão.
- **Eliminar uma pasta elimina apenas a pasta.** As suas automatizações passam a não estar em nenhuma pasta e continuam a funcionar exatamente como antes; a resposta indica quantas foram movidas (`moved_to_no_folder`).
- Ao mover, `folder_id` é necessário; envie `null` para retirar a automatização da sua pasta.

---

## Catálogo

### Tipos de passos

| Tipo | O que faz |
|---|---|
| `trigger` | Inicia a automatização quando algo acontece. |
| `action` | Executa um passo: uma ação integrada, uma ação de API, a ação de uma aplicação ligada, um pedido HTTP ou um e-mail. |
| `condition` | Divide o fluxo com base numa regra, num ramo `true` e num ramo `false`. |
| `transform` | Executa um pequeno pedaço de código para reformatar dados entre passos. |
| `ai` | Questiona a IA com um prompt que escreve. Pode devolver texto, campos separados ou escolher um de vários ramos. |
| `delay` | Aguarda por um tempo definido ou aguarda que o contacto responda (com um tempo limite). |
| `loop` | Repete os passos contidos no seu interior para cada item numa lista. |
| `respond` | Devolve uma resposta à chamada de webhook ou à 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 atualmente, agrupados conforme o construtor os agrupa. A coluna **Definições** contém as chaves de definições próprias do gatilho (`fields`), que restringem o momento em que este é ativado. Cada gatilho também aceita `respect_quiet_hours`, `run_hours`, `reentry` e `stop_on_response`; consulte [Definições de automatização](../automations/automations.md#automation-settings).

**Mensagens**

| Gatilho (`kind`) | Ativado quando | Definições |
|---|---|---|
| Mensagem recebida (`incoming_message`) | Um contacto envia uma mensagem em qualquer canal. | `campaign` (limita-o 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 dos seus números de WhatsApp Web ou para o seu próprio número de SMS e ninguém atende. | `to_number` |
| Mensagem entregue (`message_delivered`) | Uma mensagem que enviou é confirmada como entregue pelo canal. | `channel`, `agent` |
| Falha na mensagem (`message_failed`) | Uma mensagem que enviou não pôde ser entregue, com o erro. | `channel`, `agent` |
| Mensagem enviada (`message_sent`) | Qualquer mensagem sai da sua conta: a da IA, a sua, uma difusão, um seguimento. Filtre-a, ou será executada em todas elas. | `channel`, `sent_by` |
| Seguimento enviado (`follow_up_sent`) | Um seguimento automático é enviado. | nenhum |
| Seguimento ignorado (`follow_up_skipped`) | Um seguimento foi retido porque a sua condição de envio falhou. | nenhum |
| Seguimentos concluídos (`follow_up_exhausted`) | Um contacto recebeu o último seguimento da sequência e não há mais nada na fila. | nenhum |
| Conversa fechada (`conversation_closed`) | Um chat é fechado, com a forma como terminou e um resumo. | `channel`, `agent` |
| Difusão concluída (`broadcast_completed`) | Uma difusão terminou de ser enviada, com o número de mensagens enviadas e o número de falhas. | 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 Skool recebido (`skool_comment_received`) | Um membro comenta numa publicação Skool que uma das suas regras de comentário monitoriza. | nenhum |

**Contactos**

| Gatilho (`kind`) | Ativado quando | Definições |
|---|---|---|
| Novo contacto (`contact_created`) | Uma nova pessoa contacta-o pela primeira vez em qualquer canal, e também para importações, a API e contactos que cria manualmente. | nenhum |
| Contacto atualizado (`contact_updated`) | Um campo de contacto é alterado. | `field` |
| Contactos que adiciona aqui (`contact_added`) | Apenas para contactos que coloca nesta automatização pessoalmente a partir da página Contactos. Uma execução por contacto. | nenhum |
| Etiqueta aplicada (`tag_applied`) | Uma etiqueta é adicionada a um contacto, pelo seu agente de IA, por uma pessoa, por uma automatização ou por uma importação. | `tag_name`, `channel`, `applied_by` |
| Etiqueta removida (`tag_removed`) | Uma etiqueta é removida de um contacto. | `tag_name`, `channel` |
| Membro Skool entrou (`skool_member_joined`) | Alguém entra numa comunidade Skool que possui ou gere, com o seu perfil, respostas e pontuação de adequação. | `group_id`, `create_contact` |
| Membro Skool qualificado (`skool_member_qualified`) | As respostas de um novo membro Skool atingem ou superam o seu limite. | `min_score` |

**Negócios**

| Gatilho (`kind`) | Ativado quando | Definições |
|---|---|---|
| Negócio criado (`deal_created`) | Um novo negócio é adicionado a um dos seus funis. | `pipeline_id`, `stage_id` |
| Fase do negócio alterada (`deal_stage_changed`) | Um negócio move-se para uma fase diferente, indicando a fase que deixou e a que entrou. | `pipeline_id`, `to_stage_id`, `from_stage_id` |
| Negócio atualizado (`deal_updated`) | Um campo de negócio é alterado. | `field` |

**Marcações**

| Gatilho (`kind`) | Ativado quando | Definições |
|---|---|---|
| Marcação agendada (`appointment_booked`) | Uma nova marcação é agendada. | nenhum |
| Marcação cancelada (`appointment_cancelled`) | Uma marcação agendada é cancelada. | nenhum |
| Marcação reagendada (`appointment_rescheduled`) | Uma marcação agendada é movida para outra hora, com a hora antiga ao lado da nova. | `event_id` |
| Antes de uma marcação (`appointment_upcoming`) | Um tempo definido antes de cada marcação confirmada, para lembretes. Até cinco lembretes por automatização. | `offsets_minutes` |

**Tarefas**

| Gatilho (`kind`) | Ativado quando | Definições |
|---|---|---|
| Tarefa criada (`task_created`) | Uma tarefa é criada. | `task_type` |
| Tarefa concluída (`task_completed`) | Uma tarefa é movida para uma fase de concluída. | nenhum |

**Conta**

| Gatilho (`kind`) | Ativado quando | Definições |
|---|---|---|
| Saldo de créditos baixo (`low_credit_balance`) | O seu saldo de créditos desce abaixo do seu limite de alerta. | nenhum |
| Canal ligado (`channel_connected`) | Um dos seus canais termina a ligação. | `channel` |
| Canal desligado (`channel_disconnected`) | Um dos seus canais cai: sessão terminada, desvinculado ou cortado. Um número de WhatsApp Web que se volta a ligar sozinho só conta se ainda estiver em baixo após 30 minutos. | `channel` |

**Agência**

| Gatilho (`kind`) | Ativado quando | Definiçõ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 registo. | nenhum |
| Atividade da subconta (`sub_account_event`) | Algo acontece numa das suas contas de cliente: créditos a esgotar, um canal a ligar-se, uma alteração de plano. | `event`, `threshold` |

**Geral e aplicações**

| Acionador (`kind`) | Dispara quando | Definições |
|---|---|---|
| Agendado (`schedule`) | Num agendamento cron. | `cron`, `timezone` |
| Webhook (`webhook`) | Um sistema externo chama o endereço de webhook da automatização. | `webhook_secret` |
| Função de Agente de IA (`agent_function`) | O seu agente de IA chama esta automatizaçã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 num feed RSS ou Atom. | `feed_url` |
| E-mail recebido (`email_received`) | Um e-mail chega à sua caixa de correio ligada. | `from_contains`, `subject_contains` |
| Evento de aplicação (`app_event`) | Algo acontece numa aplicação ligada: uma fase de negócio muda, um pagamento é recebido, um formulário é submetido. | `toolkit`, `trigger_slug`, `connected_account_id`, `config` |
| Execução manual (`manual`) | Apenas quando iniciada manualmente. | nenhum |

Uma automatização pode conter, no máximo, um acionador de cada tipo: `webhook`, `app_event`, `agent_function`, `rss`, `schedule`, `email_received`, `appointment_upcoming` e `contact_added`. Um acionador que dispara quando um registo é criado não pode ser emparelhado com a ação que cria o mesmo registo, porque a automatização dispararia sobre si própria.

Para saber o que cada acionador transmite para os passos seguintes (`output_keys`) e para obter a lista completa de ações com os seus parâmetros, leia `GET /automations/steps`. O [Guia de Automatizações](../automations/automations.md#triggers) explica cada acionador nos termos do construtor.

---

## Erros

Cada erro tem a forma habitual `{ "success": false, "error_code": <status>, "error": "..." }`. Um grafo recusado adiciona `code` e `errors`: `errors` lista todos os problemas, uma frase corrigível para cada um, e `error` é o primeiro. Corrija exatamente o que está listado e envie o grafo completo novamente. `code` é um de `invalid_graph`, `automation_graph_has_a_cycle`, `self_triggering_automation`, `no_trigger`, ou outro código do construtor.

| Estado | Quando |
|---|---|
| `400` | O grafo foi recusado, falta um campo obrigatório (`name` ou `graph` numa criação, `folder_id` numa movimentação), uma atualização não enviou nada para alterar, um id não é válido, ou um nome de pasta está em falta, vazio ou é demasiado longo (`code: "invalid_name"`). |
| `403` | A conta não tem Automatizações; o plano de uma conta de cliente não inclui a criação e edição de automatizações (apenas escritas); ou o acesso a **Automatizações** do membro da equipa é demasiado baixo. |
| `404` | Nenhuma automatização com esse id nesta conta, nenhuma pasta com esse id (`code: "folder_not_found"`), ou um `sub_account_id` que não é uma das suas contas de cliente. |
| `409` | Já existe uma pasta com esse nome (`code: "folder_name_taken"`). |
| `413` | A automatização é maior do que o 1 MB que o construtor aceita. Mova código ou dados grandes para fora dos seus passos. |
| `422` | O construtor rejeitou o pedido por outro motivo. Verifique o grafo em relação a `GET /automations/steps`; enviar o mesmo pedido novamente não ajudará. |
| `503` | Não foi possível contactar o serviço de automatização. Tente novamente dentro de momentos. Para uma criação, liste primeiro as suas automatizações para não criar um segundo rascunho. |

::: master-only
## Utilizar estes endpoints via MCP

Todos os endpoints nesta página são também uma ferramenta para um assistente de IA que [liga via MCP](../integrations/connect-ai-clients.md), com as mesmas regras: uma nova automatização é um rascunho até ser ativada, e uma edição a uma automatizaçã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

- [Automatizações](../automations/automations.md): como funcionam os acionadores, passos, variáveis e o histórico de execução no construtor.
- [API para Agências](../agency/api-for-agencies.md): crie automatizações numa conta de cliente com `sub_account_id`.
- [Referência da API](reference.md): o explorador interativo completo de endpoints.
