
# API d'automatisations

Une automatisation est un flux de travail composé d'étapes : un ou plusieurs déclencheurs qui le lancent, suivis d'actions, de conditions, de délais, d'étapes d'IA et autres, connectés sous forme de graphe. Il s'agit de la même automatisation que celle que vous voyez et modifiez sur la page [Automatisations](../automations/automations.md). Ce guide explique comment les lire et les créer via l'API.

- **URL de base** : `https://api.dmchamp.com/v1`
- **Authentification** : votre clé API (voir [Authentification](authentication.md))
- **Champs et corps** : chaque paramètre et champ de réponse se trouve dans la [Référence de l'API](reference.md#tag/automations)
- **Erreurs** : voir [Erreurs et pagination](errors-and-pagination.md) et [Erreurs](#errors) ci-dessous

> **Agences :** chaque point de terminaison sur cette page accepte `sub_account_id` comme paramètre de requête, vous permettant ainsi de lire et de créer les automatisations d'un client avec votre clé d'agence. Un `sub_account_id` qui ne correspond pas à l'un de vos comptes clients renvoie `404`. Voir [API pour les agences](../agency/api-for-agencies.md).

---

## Comment ça marche : le brouillon d'abord

L'API est conçue de telle sorte que rien ne démarre par accident.

1. **Lisez le catalogue.** `GET /automations/steps` répertorie chaque type de déclencheur, d'action et d'étape que vous pouvez utiliser, ainsi que la grammaire pour écrire un graphe (`graph_rules`).
2. **Créez un brouillon.** `POST /automations` stocke l'automatisation **désactivée**. Rien ne s'exécute encore.
3. **Vérifiez-le.** Relisez-le, ouvrez-le dans le constructeur (la réponse vous donne son `open_path`) et assurez-vous que le propriétaire du compte a vu ce qu'il fait et pour qui.
4. **Activez-le.** `POST /automations/{automationId}/enable` est un appel spécifique. C'est l'étape qui déclenche des actions réelles : messages envoyés, enregistrements modifiés, outils fournis à un agent IA.

La modification ne change jamais l'état activé ou désactivé d'une automatisation. Cela signifie également qu'une modification apportée à une automatisation **activée** prend effet immédiatement, sur l'automatisation en cours d'exécution. Pour modifier une automatisation en cours d'exécution en toute sécurité, désactivez-la, modifiez-la, vérifiez-la, puis réactivez-la.

Chaque graphe que vous envoyez passe par les mêmes vérifications que celles appliquées par le canevas du constructeur. Un graphe qu'il ne peut pas ouvrir ou exécuter est refusé avec une `400` qui liste exactement ce qu'il faut corriger.

### Accès

- Le compte doit disposer des automatisations. Sans cela, chaque appel sur cette page renvoie `403`.
- L'accès d'un membre de l'équipe suit sa zone **Automatisations** dans la [Gestion d'équipe](../settings/team-management.md) : la lecture (liste, obtenir, étapes, exécutions, dossiers) nécessite **Voir**, tout ce qui modifie quelque chose nécessite **Modifier**.
- Sur un compte client dont le forfait exclut la création et la modification d'automatisations, les appels d'écriture renvoient `403`, exactement comme le fait le constructeur dans l'application.

---

## Points de terminaison

| Tâche | Méthode + chemin | Explorateur |
|---|---|---|
| Lister les automatisations | `GET /automations` | [Ouvrir dans la référence API](reference.md#tag/automations/GET/automations) |
| Obtenir une automatisation avec son graphe | `GET /automations/{automationId}` | [Ouvrir dans la référence API](reference.md#tag/automations/GET/automations/{automationId}) |
| Lire le catalogue des étapes | `GET /automations/steps` | [Ouvrir dans la référence API](reference.md#tag/automations/GET/automations/steps) |
| Créer une automatisation (brouillon) | `POST /automations` | [Ouvrir dans la référence API](reference.md#tag/automations/POST/automations) |
| Mettre à jour une automatisation | `PUT /automations/{automationId}` | [Ouvrir dans la référence API](reference.md#tag/automations/PUT/automations/{automationId}) |
| Activer | `POST /automations/{automationId}/enable` | [Ouvrir dans la référence API](reference.md#tag/automations/POST/automations/{automationId}/enable) |
| Désactiver | `POST /automations/{automationId}/disable` | [Ouvrir dans la référence API](reference.md#tag/automations/POST/automations/{automationId}/disable) |
| Lire l'historique des exécutions | `GET /automations/{automationId}/runs` | [Ouvrir dans la référence API](reference.md#tag/automations/GET/automations/{automationId}/runs) |
| Lister les dossiers | `GET /automations/folders` | [Ouvrir dans la référence API](reference.md#tag/automations/GET/automations/folders) |
| Créer un dossier | `POST /automations/folders` | [Ouvrir dans la référence API](reference.md#tag/automations/POST/automations/folders) |
| Renommer un dossier | `PUT /automations/folders/{folderId}` | [Ouvrir dans la référence API](reference.md#tag/automations/PUT/automations/folders/{folderId}) |
| Supprimer un dossier | `DELETE /automations/folders/{folderId}` | [Ouvrir dans la référence API](reference.md#tag/automations/DELETE/automations/folders/{folderId}) |
| Déplacer une automatisation vers un dossier | `PUT /automations/{automationId}/folder` | [Ouvrir dans la référence API](reference.md#tag/automations/PUT/automations/{automationId}/folder) |

---

## Lecture des automatisations

`GET /automations` renvoie des résumés (sans les étapes), les plus récemment modifiés en premier ; `folder_id=none` liste celles qui ne sont dans aucun dossier. `GET /automations/{automationId}` ajoute le `graph` complet : chaque étape (`nodes[]`) avec son `kind`, `label`, `alias`, `action`, `params` et `config`, ainsi que les connexions (`edges[]`) avec `from`, `to` et, après une condition ou similaire, `branch`.

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

**Bon à savoir**

- **`alias` est la façon dont les étapes ultérieures lisent la sortie d'une étape**, en tant que `${nodes.<alias>.<field>}`. Une étape sans identifiant est référencée par son id.
- `params` est conservé pour les anciens lecteurs ; `config` contient les mêmes valeurs et plus encore (les règles d'une condition, le prompt d'une étape IA, la durée d'un délai, le slug et les paramètres d'une action).
- **Les secrets sont masqués.** Les valeurs qui ressemblent à des identifiants (secrets de webhook, jetons, clés API, mots de passe, valeurs d'en-tête) sont renvoyées sous la forme `"[redacted]"`. Renvoyez `"[redacted]"` inchangé et la valeur stockée sera conservée.
- **Les textes longs sont raccourcis.** Un texte unique de plus de 4 000 caractères environ est tronqué et se termine par des points de suspension. Si vous renvoyez cette étape, remettez d'abord son texte complet.
- Si le service d'automatisation est injoignable, vous obtenez une `503`, jamais une liste vide à la place. Une liste vide signifie toujours qu'il n'y a aucune automatisation.

### Le catalogue des étapes

`GET /automations/steps` renvoie tout ce qui permet de construire une automatisation : les 8 `node_kinds`, chaque déclencheur avec ses paramètres `fields` et `output_keys`, les `actions` intégrés avec leurs paramètres, les `api_actions` (opérations de cette API qu'une étape d'action peut appeler), la grammaire `graph_rules`, et `counts`. C'est ce que le constructeur **propose**, et non ce que le compte a construit : vérifiez-le avant de conclure qu'un déclencheur ou une action n'existe pas.

- Sans `q`, les centaines d'actions API sont renvoyées sous forme d'étiquettes regroupées par zone dans `api_actions_by_tag` et la liste plate est vide.
- Avec `q` (un mot insensible à la casse), `api_actions` est la liste plate des correspondances, limitée à 60 (`api_actions_truncated` indique quand). Les actions pour les applications tierces connectées sont également recherchées et renvoyées dans `app_actions` : recherchez par le nom de l'application, par exemple `q=hubspot`. Chacune indique si le compte possède cette application `connected`, et `connected_apps` liste celles qui sont connectées. `app_actions_unavailable` est `true` lorsque les actions de l'application n'ont pas pu être recherchées cette fois-ci ; les autres listes restent complètes.

---

## Création et édition

### Créer un brouillon

```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` et `enabled: false` sont normaux, ce n'est pas un échec : une nouvelle automatisation est toujours un brouillon tant que vous ne l'activez pas. `warnings` liste ce que le constructeur n'a pas pu terminer, sous forme d'étiquettes courtes (par exemple `agent_function:not_linked`).

**Écriture du graphe.** `graph_rules` issu du catalogue est la grammaire complète. En résumé :

- Chaque nœud possède un `id` (unique dans le graphe), un `type` (l'un des 8 [types d'étapes](#step-kinds)), un `label` optionnel, et ses paramètres dans `data` sous une clé nommée d'après son type (`data.trigger`, `data.action`, `data.condition`, `data.delay`, `data.ai`, `data.loop`, `data.transform`, `data.respond`).
- Une automatisation nécessite au moins un déclencheur. La grammaire active en autorise jusqu'à 10, et l'automatisation démarre lorsque l'un d'eux se déclenche.
- Toute autre étape doit être accessible depuis un déclencheur, et aucune connexion ne peut mener à une étape précédente.
- Les arêtes quittant une condition portent `sourceHandle` `true` ou `false` ; une boucle `body` ou `done` ; un délai d'attente de réponse `replied` ou `timed_out`. Les autres arêtes n'en ont pas.
- Les slugs et paramètres d'action proviennent du catalogue. **Ne devinez jamais un id** (un agent, une étiquette, une liste, une étape) : recherchez-le d'abord avec l'API, ou laissez le champ tel quel `""` pour que la personne puisse choisir dans le constructeur.
- Les positions sont optionnelles ; les étapes sans position sont disposées automatiquement.
- Les valeurs des étapes précédentes sont écrites sous la forme `${trigger.<field>}` et `${nodes.<step>.<field>}`. Voir [Utiliser ce qu'une étape précédente a renvoyé](../automations/automations.md#using-what-an-earlier-step-returned) et [Expressions](../automations/automations.md#expressions).
- Le graphe est accepté sous deux formes : celle du constructeur (ci-dessus) et celle renvoyée par une lecture (`kind`, `config`, `from`, `to`, `branch`). Vous pouvez donc lire une automatisation, modifier une étape et la renvoyer.
- **Il n'est pas sûr de répéter une création à l'aveugle.** Si une requête expire, listez vos automatisations avant de l'envoyer à nouveau, sinon vous risquez de vous retrouver avec deux brouillons.

### Mise à jour

`PUT /automations/{automationId}` modifie `name`, `description` et/ou `graph` (au moins un, ou `400`). Un `graph` remplace le graphe **entier**, travaillez donc toujours à partir de ce qui est stocké : lisez-le, modifiez ce dont vous avez besoin et renvoyez le graphe complet.

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

- **Conservez chaque `alias` d'étape exactement tel que vous l'avez reçu.** Si vous le modifiez ou le supprimez, toute référence à cette étape deviendra vide. Voir [Nommer vos étapes](../automations/automations.md#naming-your-steps).
- **Laissez les valeurs `"[redacted]"` telles quelles**, et **restaurez les textes raccourcis** (un texte se terminant par des points de suspension a été tronqué lors de la lecture).
- L'état d'activation de l'automatisation n'est jamais modifié ici. Si elle est activée, votre modification est effective dès qu'elle est enregistrée. Lorsqu'elle est activée, toute modification qui pourrait provoquer un déclenchement en boucle est refusée : désactivez-la d'abord.

### Activer et désactiver

`POST /automations/{automationId}/enable` active une automatisation, afin qu'elle s'exécute désormais lors de son déclenchement. N'appelez cette fonction qu'une fois que le titulaire du compte a vu ce que fait l'automatisation, pour qui, et a donné son accord. Le générateur refuse d'activer un graphe qu'il ne peut pas exécuter (pas de déclencheur, une boucle, une étape qui se déclenche elle-même) avec un `400` expliquant pourquoi.

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

`POST /automations/{automationId}/disable` la met en pause : les exécutions déjà en cours se terminent, aucune nouvelle exécution ne démarre. La désactivation est toujours autorisée. Aucun de ces appels ne nécessite de corps.

---

## Historique des exécutions

`GET /automations/{automationId}/runs` renvoie les exécutions d'une automatisation, de la plus récente à la plus ancienne (`limit` de 1 à 50, par défaut 10) : quand chacune a commencé et s'est terminée, ce qui l'a déclenchée, si elle a réussi, et l'erreur en cas d'échec. La lecture de l'automatisation vous indique ce qu'elle **ferait** ; l'historique des exécutions vous indique ce qu'elle **a fait**, et c'est le seul moyen de distinguer une automatisation qui n'a jamais été exécutée d'une automatisation qui s'exécute et échoue à chaque fois.

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

- `mode` est `live` pour une exécution réelle, ou `safe` pour une **Exécution sécurisée** depuis l'éditeur. Une exécution sécurisée n'envoie rien, ce n'est donc pas une preuve que l'automatisation fonctionne en conditions réelles.
- Une liste `runs` vide est une réponse, pas un oubli. La réponse contient alors un `note` : soit le déclencheur n'a jamais été activé, soit l'automatisation est désactivée.

---

## Dossiers

Les dossiers servent uniquement à regrouper les automatisations dans la liste. Ils ne modifient jamais le fonctionnement d'une automatisation ni son état (activée ou non). Voir [Organiser les automatisations dans des dossiers](../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" }'
```

- La liste des dossiers renvoie également `unfiled_count`, le nombre d'automatisations qui ne sont dans aucun dossier.
- Un nom de dossier est requis, jusqu'à 100 caractères, et unique sur le compte (`409`, `code: "folder_name_taken"`). Vous pouvez également classer une automatisation en passant `folder_id` lors de sa création.
- Le renommage laisse les automatisations là où elles sont.
- **La suppression d'un dossier ne supprime que le dossier.** Ses automatisations ne sont plus dans aucun dossier et continuent de fonctionner exactement comme avant ; la réponse indique combien ont été déplacées (`moved_to_no_folder`).
- Lors d'un déplacement, `folder_id` est requis ; envoyez `null` pour retirer l'automatisation de son dossier.

---

## Catalogue

### Types d'étapes

| Type | Ce qu'il fait |
|---|---|
| `trigger` | Déclenche l'automatisation lorsqu'un événement se produit. |
| `action` | Exécute une étape : une action intégrée, une action API, l'action d'une application connectée, une requête HTTP ou un e-mail. |
| `condition` | Divise le flux selon une règle, en une branche `true` et une branche `false`. |
| `transform` | Exécute un court morceau de code pour reformater les données entre deux étapes. |
| `ai` | Interroge l'IA avec une instruction que vous rédigez. Elle peut renvoyer du texte, des champs séparés ou choisir parmi plusieurs branches. |
| `delay` | Attend pendant une durée définie, ou attend la réponse du contact (avec un délai d'expiration). |
| `loop` | Répète les étapes qu'il contient pour chaque élément d'une liste. |
| `respond` | Renvoie une réponse à l'appel de webhook ou à l'appel de fonction de l'agent IA qui a lancé l'exécution. |

### Déclencheurs

Voici les 40 déclencheurs listés dans le catalogue aujourd'hui, regroupés comme le constructeur les organise. La colonne **Paramètres** contient les clés de configuration propres au déclencheur (`fields`), qui permettent d'affiner son exécution. Chaque déclencheur accepte également `respect_quiet_hours`, `run_hours`, `reentry` et `stop_on_response` ; voir [Paramètres d'automatisation](../automations/automations.md#automation-settings).

**Messagerie**

| Déclencheur (`kind`) | Se déclenche quand | Paramètres |
|---|---|---|
| Message entrant (`incoming_message`) | Un contact envoie un message sur n'importe quel canal. | `campaign` (limite à un agent IA), `channel`, `message_filter_contains` (mot-clé), `message_filter_regex` (motif) |
| Appel manqué (`missed_call`) | Quelqu'un appelle l'un de vos numéros WhatsApp Web ou votre propre numéro SMS et personne ne répond. | `to_number` |
| Message délivré (`message_delivered`) | Un message que vous avez envoyé est confirmé comme délivré par le canal. | `channel`, `agent` |
| Échec de message (`message_failed`) | Un message que vous avez envoyé n'a pas pu être délivré, avec l'erreur associée. | `channel`, `agent` |
| Message envoyé (`message_sent`) | N'importe quel message quitte votre compte : celui de l'IA, le vôtre, une diffusion, un suivi. Filtrez-le, sinon il s'exécutera sur tous. | `channel`, `sent_by` |
| Suivi envoyé (`follow_up_sent`) | Un suivi automatique est envoyé. | aucun |
| Suivi ignoré (`follow_up_skipped`) | Un suivi a été retenu car sa condition d'envoi n'a pas été remplie. | aucun |
| Suivis terminés (`follow_up_exhausted`) | Un contact a reçu le dernier suivi de la séquence et rien d'autre n'est en file d'attente. | aucun |
| Conversation fermée (`conversation_closed`) | Une discussion est fermée, avec la manière dont elle s'est terminée et un résumé. | `channel`, `agent` |
| Diffusion terminée (`broadcast_completed`) | Une diffusion a fini d'être envoyée, avec le nombre d'envois réussis et échoués. | aucun |
| Réponse de prospect triée (`outreach_reply_labelled`) | La réponse d'un prospect par e-mail à froid est triée, par exemple comme Intéressé. | `label` |
| Commentaire Skool reçu (`skool_comment_received`) | Un membre commente sous une publication Skool surveillée par l'une de vos règles de commentaire. | aucun |

**Contacts**

| Déclencheur (`kind`) | Se déclenche quand | Paramètres |
|---|---|---|
| Nouveau contact (`contact_created`) | Une nouvelle personne vous contacte pour la première fois sur n'importe quel canal, ainsi que pour les importations, l'API et les contacts que vous créez manuellement. | aucun |
| Contact mis à jour (`contact_updated`) | Un champ de contact change. | `field` |
| Contacts ajoutés ici (`contact_added`) | Uniquement pour les contacts que vous ajoutez vous-même à cette automatisation depuis la page Contacts. Une exécution par contact. | aucun |
| Tag appliqué (`tag_applied`) | Un tag est ajouté à un contact, par votre agent IA, une personne, une automatisation ou une importation. | `tag_name`, `channel`, `applied_by` |
| Tag supprimé (`tag_removed`) | Un tag est retiré d'un contact. | `tag_name`, `channel` |
| Membre Skool rejoint (`skool_member_joined`) | Quelqu'un rejoint une communauté Skool que vous possédez ou gérez, avec son profil, ses réponses et son score de correspondance. | `group_id`, `create_contact` |
| Membre Skool qualifié (`skool_member_qualified`) | Les réponses d'un nouveau membre Skool atteignent ou dépassent votre seuil. | `min_score` |

**Opportunités**

| Déclencheur (`kind`) | Se déclenche quand | Paramètres |
|---|---|---|
| Opportunité créée (`deal_created`) | Une nouvelle opportunité est ajoutée à l'un de vos pipelines. | `pipeline_id`, `stage_id` |
| Étape d'opportunité modifiée (`deal_stage_changed`) | Une opportunité passe à une étape différente, en nommant l'étape quittée et celle atteinte. | `pipeline_id`, `to_stage_id`, `from_stage_id` |
| Opportunité mise à jour (`deal_updated`) | Un champ d'opportunité change. | `field` |

**Rendez-vous**

| Déclencheur (`kind`) | Se déclenche quand | Paramètres |
|---|---|---|
| Rendez-vous réservé (`appointment_booked`) | Un nouveau rendez-vous est réservé. | aucun |
| Rendez-vous annulé (`appointment_cancelled`) | Un rendez-vous réservé est annulé. | aucun |
| Rendez-vous reprogrammé (`appointment_rescheduled`) | Un rendez-vous réservé est déplacé à un autre moment, avec l'ancien créneau indiqué à côté du nouveau. | `event_id` |
| Avant un rendez-vous (`appointment_upcoming`) | Un temps défini avant chaque rendez-vous confirmé, pour les rappels. Jusqu'à cinq rappels par automatisation. | `offsets_minutes` |

**Tâches**

| Déclencheur (`kind`) | Se déclenche quand | Paramètres |
|---|---|---|
| Tâche créée (`task_created`) | Une tâche est créée. | `task_type` |
| Tâche terminée (`task_completed`) | Une tâche est déplacée vers une étape terminée. | aucun |

**Compte**

| Déclencheur (`kind`) | Se déclenche quand | Paramètres |
|---|---|---|
| Solde de crédits faible (`low_credit_balance`) | Votre solde de crédits tombe en dessous de votre seuil d'alerte. | aucun |
| Canal connecté (`channel_connected`) | L'un de vos canaux termine sa connexion. | `channel` |
| Canal déconnecté (`channel_disconnected`) | L'un de vos canaux est coupé : déconnecté, dissocié ou interrompu. Un numéro WhatsApp Web qui se reconnecte tout seul ne compte que s'il est toujours hors ligne après 30 minutes. | `channel` |

**Agence**

| Déclencheur (`kind`) | Se déclenche quand | Paramètres |
|---|---|---|
| Sous-compte créé (`sub_account_created`) | Un nouveau compte client est créé, depuis votre tableau de bord, l'API ou votre page d'inscription. | aucun |
| Activité du sous-compte (`sub_account_event`) | Quelque chose se produit sur l'un de vos comptes clients : crédits faibles, connexion d'un canal, changement de forfait. | `event`, `threshold` |

**Général et applications**

| Déclencheur (`kind`) | Se déclenche quand | Paramètres |
|---|---|---|
| Selon un calendrier (`schedule`) | Selon un calendrier cron. | `cron`, `timezone` |
| Webhook (`webhook`) | Un système externe appelle l'adresse webhook de l'automatisation. | `webhook_secret` |
| Fonction d'agent IA (`agent_function`) | Votre agent IA appelle cette automatisation comme une fonction au cours d'une conversation. | `function_name`, `function_description`, `parameters`, `agent_ids`, `campaign_ids` |
| Nouvel élément de flux (`rss`) | Un nouvel élément apparaît dans un flux RSS ou Atom. | `feed_url` |
| E-mail reçu (`email_received`) | Un e-mail arrive dans votre propre boîte de réception connectée. | `from_contains`, `subject_contains` |
| Événement d'application (`app_event`) | Quelque chose se produit dans une application connectée : une étape d'opportunité change, un paiement est reçu, un formulaire est soumis. | `toolkit`, `trigger_slug`, `connected_account_id`, `config` |
| Exécution manuelle (`manual`) | Uniquement lorsqu'elle est lancée manuellement. | aucun |

Une automatisation peut contenir au plus un déclencheur de chaque type parmi `webhook`, `app_event`, `agent_function`, `rss`, `schedule`, `email_received`, `appointment_upcoming` et `contact_added`. Un déclencheur qui s'active lors de la création d'un enregistrement ne peut pas être associé à l'action qui crée ce même enregistrement, car l'automatisation se déclencherait en boucle.

Pour savoir ce que chaque déclencheur transmet aux étapes suivantes (`output_keys`) et pour consulter la liste complète des actions avec leurs paramètres, lisez `GET /automations/steps`. Le [guide des automatisations](../automations/automations.md#triggers) explique chaque déclencheur avec les termes utilisés dans le générateur.

---

## Erreurs

Chaque erreur a la forme habituelle `{ "success": false, "error_code": <status>, "error": "..." }`. Un graphe refusé ajoute `code` et `errors` : `errors` liste chaque problème, avec une phrase corrective pour chacun, et `error` est le premier. Corrigez exactement ce qui est listé et renvoyez le graphe complet. `code` est l'un des codes `invalid_graph`, `automation_graph_has_a_cycle`, `self_triggering_automation`, `no_trigger`, ou un autre code provenant du générateur.

| Statut | Quand |
|---|---|
| `400` | Le graphe a été refusé, un champ requis est manquant (`name` ou `graph` lors d'une création, `folder_id` lors d'un déplacement), une mise à jour n'a rien envoyé à modifier, un identifiant n'est pas valide, ou un nom de dossier est manquant, vide ou trop long (`code: "invalid_name"`). |
| `403` | Le compte ne dispose pas d'Automatisations ; le forfait d'un compte client n'inclut pas la création et la modification d'automatisations (écriture seule) ; ou l'accès **Automatisations** du membre de l'équipe est trop restreint. |
| `404` | Aucune automatisation avec cet identifiant sur ce compte, aucun dossier avec cet identifiant (`code: "folder_not_found"`), ou un `sub_account_id` qui n'est pas l'un de vos comptes clients. |
| `409` | Un dossier portant ce nom existe déjà (`code: "folder_name_taken"`). |
| `413` | L'automatisation dépasse la limite de 1 Mo acceptée par le générateur. Déplacez le code ou les données volumineux hors de ses étapes. |
| `422` | Le générateur a rejeté la demande pour une autre raison. Vérifiez le graphe par rapport à `GET /automations/steps` ; renvoyer la même demande ne servira à rien. |
| `503` | Le service d'automatisation n'a pas pu être atteint. Réessayez dans un instant. Pour une création, listez d'abord vos automatisations afin de ne pas créer un second brouillon. |

::: master-only
## Utilisation de ces points de terminaison via MCP

Chaque point de terminaison sur cette page est également un outil pour un assistant IA que vous [connectez via MCP](../integrations/connect-ai-clients.md), avec les mêmes règles : une nouvelle automatisation est un brouillon jusqu'à ce qu'elle soit activée, et une modification apportée à une automatisation en cours d'exécution est appliquée immédiatement.

| Outil | Point de terminaison |
|---|---|
| `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` |
:::

---

## Étapes suivantes

- [Automatisations](../automations/automations.md) : comment fonctionnent les déclencheurs, les étapes, les variables et l'historique d'exécution dans le générateur.
- [API pour les agences](../agency/api-for-agencies.md) : créez des automatisations sur un compte client avec `sub_account_id`.
- [Référence de l'API](reference.md) : l'explorateur interactif complet des points de terminaison.
