DM Champ Docs

Automations-API

En automatisering er et workflow bestående af trin: en eller flere udløsere, der starter det, efterfulgt af handlinger, betingelser, forsinkelser, AI-trin og resten, forbundet i en graf. Det er den samme automatisering, som du ser og redigerer på siden Automatiseringer. Denne guide dækker læsning og opbygning af dem via API’et.

Alle eksempler nedenfor viser ?apiKey=-forespørgselsformen i cURL og X-API-Key-headeren i JavaScript og Python. Begge fungerer på alle slutpunkter.

Bureauer: alle slutpunkter på denne side accepterer sub_account_id som en forespørgselsparameter, så du kan læse og opbygge en klients automatiseringer med din bureau-nøgle. Et sub_account_id, der ikke er en af dine klientkonti, returnerer 404. Se API for bureauer.


Hvordan det fungerer: kladde først

API’et er bygget således, at intet starter ved et uheld.

  1. Læs kataloget. GET /automations/steps viser alle udløsere, handlinger og trintyper, du kan bruge, plus grammatikken til at skrive en graf (graph_rules).
  2. Opret en kladde. POST /automations gemmer automatiseringen slået fra. Intet kører endnu.
  3. Tjek den. Læs den tilbage, åbn den i editoren (svaret giver dig dens open_path), og sørg for, at personen, der ejer kontoen, har set, hvad den gør, og over for hvem.
  4. Slå den til. POST /automations/{automationId}/enable er sit eget kald. Dette er trinnet, der får virkelige ting til at ske: beskeder sendes, poster ændres, værktøjer gives til en AI-agent.

Redigering ændrer aldrig, om en automatisering er slået til eller fra. Det betyder også, at en rettelse til en automatisering, der er slået til, træder i kraft med det samme på den aktive automatisering. For at ændre en kørende automatisering sikkert, skal du deaktivere den, redigere den, tjekke den og aktivere den igen.

Hver graf, du sender, gennemgår de samme tjek, som editoren anvender. En graf, den ikke kan åbne eller køre, afvises med en 400, der præcist angiver, hvad der skal rettes.

Adgang

  • Kontoen skal have Automatiseringer. Uden det returnerer hvert kald på denne side 403.
  • Et teammedlems adgang følger deres Automatiseringer-område i Teamstyring: læsning (liste, hent, trin, kørsler, mapper) kræver Vis, alt der ændrer noget kræver Rediger.
  • På en klientkonto, hvis abonnement ikke inkluderer oprettelse og redigering af automatiseringer, returnerer skrivekald 403, præcis som editoren gør i appen.

Automatiserings-objektet

Listen returnerer et resumé af hver automatisering uden dens trin:

{
  "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"
}
Felt Betydning
id Automatiseringens id.
name Hvad den kaldes på listen.
description En til tre sætninger om, hvad den gør, eller null.
enabled Om den er slået til. En deaktiveret automatisering kører aldrig.
updated_at Hvornår den sidst blev ændret.
trigger_kind Hvad der udløser den, for eksempel incoming_message, schedule, webhook, agent_function eller manual. null når grafen endnu ikke har en udløser.
folder_id, folder_name Mappen den er arkiveret i, eller null for ingen mappe.

Læsning af en automatisering tilføjer created_at og dens 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" }]
  }
}

Hvert trin (nodes[]) indeholder:

Felt Betydning
id Trinets id, unikt inden for grafen.
kind Typen af trin: trigger, action, condition, transform, ai, delay, loop eller respond. Se Trintyper.
label Navnet, der vises på trinnet i editoren.
alias Trinets referencenavn. Senere trin læser dets output som ${nodes.<alias>.<field>}. null på et trin, der ikke har nogen (det refereres derefter ved dets id).
action Hvad trinnet gør: den handling, det udfører, eller på et udløsertrin, udløsertypen. null på andre trin.
params Handlingens parametre på et handlingstrin, eller udløserens indstillinger på et udløsertrin. null på alle andre typer. Beholdes for ældre læsere: config indeholder de samme værdier og mere.
config Trinets fulde indstillinger, som editoren gemmer dem, for alle typer trin: regler for en betingelse, prompt for et AI-trin, varighed for en forsinkelse, slug og parametre for en handling.

Hver forbindelse (edges[]) har from og to (trin-id’er), og branch når den følger en gren af et trin, for eksempel true eller false efter en betingelse.

To ting i config ændres på vej ud:

  • Hemmeligheder skjules. Værdier, der ligner legitimationsoplysninger (webhook-hemmeligheder, tokens, API-nøgler, adgangskoder, header-værdier), returneres som "[redacted]". Send "[redacted]" tilbage uændret, så bevares den gemte værdi.
  • Lange tekster forkortes. En enkelt tekst, der er længere end ca. 4.000 tegn, afkortes og slutter med en ellipse. Hvis du sender det trin tilbage, skal du først indsætte den fulde tekst igen.

List automatiseringer

GET /automations returnerer automatiseringerne på kontoen, sorteret efter seneste ændring først, som oversigter (ingen trin).

Forespørgselsparametre (alle valgfrie): folder_id (kun automatiseringerne i den mappe, et id fra List mapper, eller none for dem, der ikke er i en mappe), 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"]

Svar (200)

{ "success": true, "automations": [{ "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": false, "...": "..." }] }

Hvis automatiseringsservicen ikke kan nås, får du en 503, aldrig en tom liste i stedet. En tom liste betyder altid, at der ikke er nogen automatiseringer.


Hent en automatisering

GET /automations/{automationId} returnerer én automatisering med dens fulde graf: hvert trins type, etiket, alias, handling, parametre og indstillinger, plus forbindelserne imellem dem.

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"]

Svar (200)

{ "success": true, "automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "graph": { "nodes": ["..."], "edges": ["..."] } } }

Et id, der ikke findes på denne konto, returnerer 404.


Trinkatalog

GET /automations/steps returnerer alt, hvad en automatisering kan bygges af:

  • node_kinds: de 8 typer trin, hver med en etiket og en beskrivelse.
  • triggers: enhver trigger, der kan starte en automatisering, med dens indstillingsfelter (fields) og de værdier, den sender videre til efterfølgende trin (output_keys).
  • actions: de indbyggede handlinger, som et handlingstrin kan udføre, hver med dens key (det slug, du bruger i en graf) og dens params, markeret med required, hvor de befinder sig.
  • api_actions: de operationer i denne API, som et handlingstrin kan kalde. Uden q kommer de tilbage som etiketter grupperet efter område i api_actions_by_tag, og den flade liste er tom, da der er flere hundrede af dem.
  • graph_rules: grammatikken til at skrive en graf: de data, hver trintype indeholder, enhver triggertype med dens indstillingsnøgler, handlingsudbyderne, grennavnene og skabelonsyntaksen. Læs den, før du opretter eller redigerer en.
  • counts: totalerne pr. liste, uanset hvad du har søgt efter.

Dette er, hvad editoren tilbyder, ikke hvad kontoen har bygget. Tjek dette, før du konkluderer, at en trigger eller handling ikke eksisterer.

Forespørgselsparametre (alle valgfrie): q, et ord til at søge i alle lister (ikke-forskel på store og små bogstaver), og sub_account_id.

Med q:

  • api_actions er den flade liste over resultater, begrænset til 60. api_actions_truncated er true, når begrænsningen er anvendt. De første resultater indeholder deres parametre.
  • Handlinger for forbundne tredjepartsapps søges også og returneres i app_actions. Søg efter appens navn, for eksempel q=hubspot. Hver af dem angiver, om kontoen har den pågældende app forbundet (connected), og connected_apps viser de apps, som kontoen har forbundet.
  • app_actions_unavailable er true, når app-handlinger ikke kunne søges denne gang. De andre lister er stadig komplette.
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()

Svar (200, forkortet)

{
  "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 }
}

Listerne over trintyper og triggere herunder er hentet fra dette slutpunkt. Selve slutpunktet er altid den aktuelle liste.


Opret en automatisering

POST /automations opretter en automatisering ud fra et navn og en graf. Den gemmes slået fra, som et udkast.

Brødtekst

Felt Påkrævet Betydning
name Ja Hvad den kaldes på listen. Kort og specifik.
description Nej En til tre sætninger om, hvad den gør, og hvornår den kører.
graph Ja { nodes, edges }, se nedenfor.
folder_id Nej Mappen den skal gemmes i, et id fra List mapper. Hvis udeladt eller null, placeres den ikke i nogen mappe.

Grafen. graph_rules fra trinkataloget er den fulde grammatik. Kort sagt:

  • Hver node har et id (unikt i grafen, for eksempel trigger_1 eller send_reminder), en type (en af de 8 trintyper), et valgfrit label, og dens indstillinger i data, under en nøgle opkaldt efter dens type: 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 }.
  • En automatisering kræver mindst én trigger. Den aktive grammatik tillader op til 10, og automatiseringen starter, når en af dem aktiveres.
  • Ethvert andet trin skal kunne nås fra en trigger, og ingen forbindelse må føre tilbage til et tidligere trin.
  • Hver kant har et source og et target. Kanter, der forlader en betingelse, bærer sourceHandle true eller false. Kanter, der forlader et loop, bærer body eller done. Kanter, der forlader en “Vent på svar”-forsinkelse, bærer replied eller timed_out. Andre kanter har intet sourceHandle; grammatikken viser resten.
  • Handlings-slugs og parametre kommer fra kataloget. Gæt aldrig et id (en agent, et tag, en liste, et stadie): slå det op med API’en først, eller lad feltet stå som "", så personen kan vælge det i editoren.
  • Positioner er valgfrie. Trin uden en position placeres automatisk.
  • Værdier fra tidligere trin skrives som ${trigger.<field>} og ${nodes.<step>.<field>}. Se Brug af hvad et tidligere trin returnerede og Udtryk i vejledningen til automatiseringer.

Grafen accepteres i to stavemåder: editorens egen (noder med type og data, kanter med source og target, som vist nedenfor) og den, som Hent en automatisering svarer med (noder med kind, config, action, params; kanter med from, to, branch). Så du kan læse en automatisering, ændre et trin og sende den tilbage.

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()

Svar (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 er automatiseringen som gemt, i samme form som Hent en automatisering.
  • draft er true, mens den er slået fra. En ny automatisering er altid et udkast, indtil du aktiverer den, så enabled: false her er normalt, ikke en fejl.
  • open_path er hvor den åbner i appens editor.
  • warnings viser ting, som editoren ikke kunne færdiggøre, som korte etiketter (for eksempel agent_function:not_linked). Den er tom, når alt er korrekt.

En oprettelse er ikke sikker at gentage blindt. Hvis en anmodning får timeout, skal du liste dine automatiseringer, før du sender den igen, ellers risikerer du at ende med to kladder.


Opdater en automatisering

PUT /automations/{automationId} ændrer navnet, beskrivelsen og/eller grafen. Send kun de felter, du ønsker at ændre.

Brødtekst: name, description, graph (alle valgfrie, mindst én).

En graph erstatter hele grafen, så arbejd altid ud fra det, der er gemt:

  1. Læs automatiseringen med GET /automations/{automationId}.
  2. Ændr det, du har brug for i den graf.
  3. Send hele grafen tilbage, inklusive hvert trin.

Når du sender den tilbage:

  • Behold hver steps alias præcis som du modtog den. Senere steps refererer til et step via dets alias (${nodes.<alias>.<field>}). Hvis du ændrer eller fjerner det, vil alle referencer til det step blive tomme. Se Navngivning af dine steps.
  • Lad "[redacted]" værdier være, som de er. En værdi vist som "[redacted]" beholder sin gemte værdi.
  • Gendan forkortede tekster. En tekst, der kom tilbage med en udeladelsesprik, blev afkortet under læsningen.

Hvorvidt automatiseringen er tændt, ændres aldrig her. Hvis den er tændt, er din rettelse live, så snart den er gemt. Mens en automatisering er tændt, afvises en ændring, der ville få den til at udløse sig selv: deaktiver den først.

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"]})

Respons (200): samme form som en oprettelse (automation, draft, open_path, warnings). Hvis ingen af name, description eller graph sendes, returneres 400.


Aktiver og deaktiver

POST /automations/{automationId}/enable tænder for en automatisering, så den kører på sin trigger fra nu af. Kald den kun, når personen, der ejer kontoen, har set, hvad automatiseringen gør og for hvem, og har accepteret at tænde for den. Builder-værktøjet nægter at tænde for en graf, den ikke kan køre (ingen trigger, et loop, et step der udløser sig selv), med en 400, der forklarer hvorfor.

POST /automations/{automationId}/disable slukker for den (sætter den på pause). Kørsler, der allerede er i gang, færdiggøres; ingen nye kørsler starter. Deaktivering er altid tilladt.

Ingen af kaldene tager en body.

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"},
)

Respons (200): automatiseringen som den er gemt nu, i samme form som en oprettelse, med draft: false efter en aktivering.


Kørselshistorik

GET /automations/{automationId}/runs returnerer kørslerne for en automatisering, nyeste først: hvornår hver kørsel startede og sluttede, hvad der udløste den, om den lykkedes, og fejlen, hvis den fejlede. Ved at læse automatiseringen kan du se, hvad den ville gøre. Kørselshistorikken fortæller dig, hvad den gjorde, og det er den eneste måde at skelne mellem en automatisering, der aldrig er kørt, og en, der kører og fejler hver gang.

Forespørgselsparametre (alle valgfrie): limit (1 til 50, standard 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"]

Svar (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 er live for en rigtig kørsel eller safe for en Sikker kørsel fra editoren. En sikker kørsel sender intet, så det er ikke et bevis på, at automatiseringen virker i reel brug.
  • En tom runs-liste er et svar, ikke en mangel. Svaret indeholder derefter en note: enten er udløseren aldrig blevet aktiveret, eller også er automatiseringen slået fra, så intet er kørt.

Mapper

Mapper grupperer kun automatiseringer på listen. De ændrer aldrig, hvad en automatisering gør, eller om den er tændt. Se Organisering af automatiseringer i mapper.

List mapper

GET /automations/folders returnerer mapperne, hver med antallet af automatiseringer den indeholder, plus unfiled_count: hvor mange automatiseringer der ikke er i nogen mappe.

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
}

Opret en mappe

POST /automations/folders med { "name": "Appointment reminders" }. Navnet er påkrævet, må være op til 100 tegn og skal være unikt for kontoen. Placer automatiseringer i den med Flyt en automatisering, eller angiv folder_id, når du opretter en.

curl -X POST "https://api.dmchamp.com/v1/automations/folders?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Appointment reminders" }'

Svar (201): { "success": true, "folder": { "id": "...", "name": "Appointment reminders", "automation_count": 0 } }. Et navn, som en anden mappe allerede har, returnerer 409 med code: "folder_name_taken".

Omdøb en mappe

PUT /automations/folders/{folderId} med { "name": "..." }. Automatiseringerne i den bliver, hvor de er.

Svar (200): { "success": true, "folder": { ... } }.

Slet en mappe

DELETE /automations/folders/{folderId} sletter kun mappen. Automatiseringerne i den bliver ikke slettet: de flyttes til ingen mappe og fortsætter med at køre præcis som før.

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." }

Flyt en automatisering til en mappe

PUT /automations/{automationId}/folder med { "folder_id": "<folder id>" }, eller { "folder_id": null } for at tage den ud af dens mappe. folder_id er påkrævet. Kun hvor automatiseringen er angivet, ændres.

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

Svar (200): { "success": true, "automation_id": "...", "folder_id": "..." }.


Katalog

Trin-typer

Type Hvad det gør
trigger Starter automatiseringen, når noget sker.
action Kører ét trin: en indbygget handling, en API-handling, en handling fra en forbundet app, en HTTP-anmodning eller en e-mail.
condition Opdeler flowet baseret på en regel i en true og en false gren.
transform Kører et lille stykke kode for at omforme data mellem trin.
ai Spørger AI’en med en prompt, du skriver. Den kan returnere tekst, separate felter eller vælge en af flere grene.
delay Venter i et bestemt tidsrum eller venter på, at kontakten svarer (med en timeout).
loop Gentager trinnene indeni for hvert element på en liste.
respond Returnerer et svar til webhook-kaldet eller AI-agentens funktionskald, der startede kørslen.

Triggers

Dette er de 40 triggere, som kataloget viser i dag, grupperet som bygherren grupperer dem. Kolonnen Indstillinger indeholder triggerens egne indstillingsnøgler (fields), som indsnævrer, hvornår den udløses. Hver trigger tager også respect_quiet_hours, run_hours, reentry og stop_on_response; se Automatiseringsindstillinger.

Beskeder

Trigger (kind) Udløses når Indstillinger
Indgående besked (incoming_message) En kontakt sender en besked på en hvilken som helst kanal. campaign (begrænser den til én AI-agent), channel, message_filter_contains (nøgleord), message_filter_regex (mønster)
Ubesvaret opkald (missed_call) Nogen ringer til et af dine WhatsApp Web-numre eller dit eget SMS-nummer, og ingen tager den. to_number
Besked leveret (message_delivered) En besked, du har sendt, bekræftes leveret af kanalen. channel, agent
Besked fejlede (message_failed) En besked, du har sendt, kunne ikke leveres, med fejlen. channel, agent
Besked sendt (message_sent) Enhver besked forlader din konto: AI’ens, din egen, en udsendelse, en opfølgning. Filtrer den, ellers kører den på dem alle. channel, sent_by
Opfølgning sendt (follow_up_sent) En automatisk opfølgning sendes ud. ingen
Opfølgning sprunget over (follow_up_skipped) En opfølgning blev holdt tilbage, fordi dens afsendelsesbetingelse fejlede. ingen
Opfølgninger afsluttet (follow_up_exhausted) En kontakt modtog den sidste opfølgning i sekvensen, og intet mere er i kø. ingen
Samtale lukket (conversation_closed) En chat lukkes, med hvordan den sluttede og et resumé. channel, agent
Udsendelse afsluttet (broadcast_completed) En udsendelse er færdig med at sende, med hvor mange der blev sendt, og hvor mange der fejlede. ingen
Lead-svar sorteret (outreach_reply_labelled) Et svar fra et koldt e-mail-lead sorteres, for eksempel som Interesserede. label
Skool-kommentar modtaget (skool_comment_received) Et medlem kommenterer under et Skool-opslag, som en af dine kommentarregler overvåger. ingen

Kontakter

Trigger (kind) Udløses når Indstillinger
Ny kontakt (contact_created) En ny person kontakter dig for første gang på en hvilken som helst kanal, og også ved import, API’en og kontakter, du opretter manuelt. ingen
Kontakt opdateret (contact_updated) Et kontaktfelt ændres. field
Kontakter du tilføjer her (contact_added) Kun for kontakter, du selv placerer i denne automatisering fra siden Kontakter. Én kørsel pr. kontakt. ingen
Tag tilføjet (tag_applied) Et tag tilføjes til en kontakt af din AI-agent, en person, en automatisering eller en import. tag_name, channel, applied_by
Tag fjernet (tag_removed) Et tag fjernes fra en kontakt. tag_name, channel
Skool-medlem tilmeldt (skool_member_joined) Nogen tilmelder sig et Skool-fællesskab, du ejer eller driver, med deres profil, svar og fit-score. group_id, create_contact
Skool-medlem kvalificeret (skool_member_qualified) Et nyt Skool-medlems svar scorer på eller over din tærskelværdi. min_score

Handler

Trigger (kind) Udløses når Indstillinger
Handel oprettet (deal_created) En ny handel tilføjes til en af dine pipelines. pipeline_id, stage_id
Handelsstadie ændret (deal_stage_changed) En handel flyttes til et andet stadie, med angivelse af stadiet, den forlod, og det, den trådte ind i. pipeline_id, to_stage_id, from_stage_id
Handel opdateret (deal_updated) Et handelfelt ændres. field

Aftaler

Trigger (kind) Udløses når Indstillinger
Aftale booket (appointment_booked) En ny aftale bookes. ingen
Aftale annulleret (appointment_cancelled) En booket aftale annulleres. ingen
Aftale flyttet (appointment_rescheduled) En booket aftale flyttes til et andet tidspunkt, med det gamle tidspunkt ved siden af det nye. event_id
Før en aftale (appointment_upcoming) Et bestemt tidspunkt før hver bekræftet aftale, til påmindelser. Op til fem påmindelser pr. automatisering. offsets_minutes

Opgaver

Trigger (kind) Udløses når Indstillinger
Opgave oprettet (task_created) En opgave oprettes. task_type
Opgave fuldført (task_completed) En opgave flyttes til et fuldført stadie. ingen

Konto

Trigger (kind) Udløses når Indstillinger
Lav kreditbalance (low_credit_balance) Din kreditbalance falder under din advarselstærskel. ingen
Kanal forbundet (channel_connected) En af dine kanaler er færdig med at oprette forbindelse. channel
Kanal afbrudt (channel_disconnected) En af dine kanaler falder ud: logget ud, afbrudt eller afskåret. Et WhatsApp Web-nummer, der genopretter forbindelsen af sig selv, tæller kun, hvis det stadig er nede efter 30 minutter. channel

Bureau

Trigger (kind) Udløses når Indstillinger
Underkonto oprettet (sub_account_created) En ny klientkonto oprettes fra dit dashboard, API’en eller din tilmeldingsside. ingen
Underkonto-aktivitet (sub_account_event) Noget sker på en af dine klientkonti: kreditterne er ved at løbe tør, en kanal opretter forbindelse, en planændring. event, threshold
}
Generelt og apps
Udløser (kind) Aktiveres når Indstillinger
Efter tidsplan (schedule) På en cron-tidsplan. cron, timezone
Webhook (webhook) Et eksternt system kalder automatiseringens webhook-adresse. webhook_secret
AI Agent-funktion (agent_function) Din AI-agent kalder denne automatisering som en funktion under en samtale. function_name, function_description, parameters, agent_ids, campaign_ids
Nyt feed-element (rss) Et nyt element vises i et RSS- eller Atom-feed. feed_url
E-mail modtaget (email_received) En e-mail ankommer i din egen forbundne postkasse. from_contains, subject_contains
App-hændelse (app_event) Noget sker i en forbundet app: en salgsmuligheds-fase ændres, en betaling modtages, en formular indsendes. toolkit, trigger_slug, connected_account_id, config
Manuel kørsel (manual) Kun når den startes manuelt. ingen

En automatisering kan højst indeholde én udløser af hver type: webhook, app_event, agent_function, rss, schedule, email_received, appointment_upcoming og contact_added. En udløser, der aktiveres, når en post oprettes, kan ikke parres med den handling, der opretter den samme post, da automatiseringen ville aktivere sig selv.

For at se hvad hver udløser sender videre til efterfølgende trin (output_keys) og den fulde liste over handlinger med deres parametre, læs GET /automations/steps. Automationsguiden forklarer hver udløser med bygherrens ord.


Fejl

Enhver fejl har den sædvanlige form { "success": false, "error_code": <status>, "error": "..." }. En afvist graf tilføjer code og 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 viser hvert problem, én rettelig sætning hver, og error er den første. Ret præcis det, der er angivet, og send hele grafen igen. code er en af invalid_graph, automation_graph_has_a_cycle, self_triggering_automation, no_trigger eller en anden kode fra bygherren.

Status Hvornår
400 Grafen blev afvist (se ovenfor), et påkrævet felt mangler (name eller graph ved oprettelse, folder_id ved flytning), en opdatering sendte intet at ændre, et automatiserings- eller mappe-id er ikke gyldigt, eller et mappenavn mangler, er tomt eller for langt (code: "invalid_name").
403 Kontoen har ikke Automatiseringer; en klientkontos plan inkluderer ikke oprettelse og redigering af automatiseringer (kun skrivning); eller teammedlemmets Automatiseringer-adgang er for lav (Vis for læsning, Rediger for skrivning).
404 Ingen automatisering med det id på denne konto, ingen mappe med det id (code: "folder_not_found"), eller et sub_account_id, der ikke er en af dine klientkonti.
409 En mappe med det navn findes allerede (code: "folder_name_taken").
413 Automatiseringen er større end den 1 MB, som bygherren accepterer. Flyt stor kode eller data ud af dens trin.
422 Bygherren afviste anmodningen af en anden årsag. Tjek grafen mod GET /automations/steps; at sende den samme anmodning igen hjælper ikke.
503 Automatiserings-tjenesten kunne ikke nås. Prøv igen om et øjeblik. Ved oprettelse, list dine automatiseringer først, så du ikke laver et ekstra udkast.

Brug af disse slutpunkter via MCP

Hvert slutpunkt på denne side er også et værktøj til en AI-assistent, som du forbinder via MCP, med de samme regler: en ny automatisering er et udkast, indtil den aktiveres, og en redigering af en kørende automatisering er live.

Værktøj Slutpunkt
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

Næste skridt

  • Automatiseringer: hvordan udløsere, trin, variabler og kørselshistorik fungerer i bygherren.
  • API for bureauer: byg automatiseringer på en klientkonto med sub_account_id.
  • API-reference: den fulde interaktive slutpunkts-oversigt.