DM Champ Docs

Automations-API

En automatisering är ett arbetsflöde som består av steg: en eller flera utlösare som startar det, följt av åtgärder, villkor, fördröjningar, AI-steg och övrigt, sammankopplade i en graf. Det är samma automatisering som du ser och redigerar på sidan Automatiseringar. Den här guiden täcker hur du läser och bygger dem via API:et.

Alla exempel nedan visar frågeformuläret ?apiKey= i cURL och rubriken X-API-Key i JavaScript och Python. Båda fungerar på varje slutpunkt.

Byråer: varje slutpunkt på den här sidan accepterar sub_account_id som en frågeparameter, så att du kan läsa och bygga en klients automatiseringar med din byrånivånyckel. Ett sub_account_id som inte är ett av dina klientkonton returnerar 404. Se API för byråer.


Hur det fungerar: utkast först

API:et är byggt så att ingenting börjar köras av misstag.

  1. Läs katalogen. GET /automations/steps listar varje utlösare, åtgärd och stegtyp du kan använda, plus grammatiken för att skriva en graf (graph_rules).
  2. Skapa ett utkast. POST /automations lagrar automatiseringen avstängd. Ingenting körs ännu.
  3. Kontrollera det. Läs tillbaka det, öppna det i byggverktyget (svaret ger dig dess open_path) och se till att personen som äger kontot har sett vad det gör och för vem.
  4. Slå på det. POST /automations/{automationId}/enable är ett eget anrop. Detta är steget som får verkliga saker att hända: meddelanden skickas, poster ändras, verktyg ges till en AI-agent.

Redigering ändrar aldrig om en automatisering är på eller av. Det innebär också att en ändring av en automatisering som är på får effekt direkt, på den aktiva automatiseringen. För att ändra en körande automatisering på ett säkert sätt, inaktivera den, redigera den, kontrollera den och aktivera den igen.

Varje graf du skickar går igenom samma kontroller som byggverktygets arbetsyta tillämpar. En graf som inte kan öppnas eller köras nekas med ett 400 som listar exakt vad som behöver åtgärdas.

Åtkomst

  • Kontot behöver Automatiseringar. Utan det returnerar varje anrop på den här sidan 403.
  • Ett teammedlems åtkomst följer deras Automatiseringar-område i Teamhantering: läsning (lista, hämta, steg, körningar, mappar) kräver Visa, allt som ändrar något kräver Redigera.
  • På ett klientkonto vars plan inte inkluderar skapande och redigering av automatiseringar, returnerar skrivanropen 403, precis som byggverktyget gör i appen.

Automatiserings-objektet

Listan returnerar en sammanfattning av varje automatisering, utan dess steg:

{
  "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"
}
Fält Betydelse
id Automatiseringens id.
name Vad den kallas i listan.
description En till tre meningar om vad den gör, eller null.
enabled Om den är påslagen. En inaktiverad automatisering körs aldrig.
updated_at När den senast ändrades.
trigger_kind Vad som utlöser den, till exempel incoming_message, schedule, webhook, agent_function eller manual. null när grafen inte har någon utlösare ännu.
folder_id, folder_name Mappen den ligger i, eller null för ingen mapp.

Att läsa in en automatisering lägger till created_at och dess 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" }]
  }
}

Varje steg (nodes[]) innehåller:

Fält Betydelse
id Stegets id, unikt inom grafen.
kind Typen av steg: trigger, action, condition, transform, ai, delay, loop eller respond. Se Stegtyper.
label Namnet som visas på steget i byggaren.
alias Stegets referensnamn. Senare steg läser dess utdata som ${nodes.<alias>.<field>}. null på ett steg som saknar detta (det refereras då via sitt id).
action Vad steget gör: åtgärden det kör, eller för ett utlösarsteg, utlösartypen. null på andra steg.
params Åtgärdens parametrar på ett åtgärdssteg, eller utlösarens inställningar på ett utlösarsteg. null på alla andra typer. Behålls för äldre läsare: config innehåller samma värden och mer.
config Stegets fullständiga inställningar så som byggaren lagrar dem, för alla typer av steg: regler för ett villkor, prompt för ett AI-steg, varaktighet för en fördröjning, slug och parametrar för en åtgärd.

Varje anslutning (edges[]) har from och to (steg-id:n), samt branch när den följer en gren av ett steg, till exempel true eller false efter ett villkor.

Två saker i config ändras på vägen ut:

  • Hemligheter döljs. Värden som ser ut som inloggningsuppgifter (webhook-hemligheter, token, API-nycklar, lösenord, huvudvärden) returneras som "[redacted]". Skicka tillbaka "[redacted]" oförändrat så behålls det lagrade värdet.
  • Långa texter förkortas. En enskild text som är längre än cirka 4 000 tecken kortas av och slutar med en ellips. Om du skickar tillbaka det steget, lägg först in dess fullständiga text igen.

Lista automatiseringar

GET /automations returnerar automatiseringarna på kontot, sorterade efter senast ändrade först, som sammanfattningar (inga steg).

Frågeparametrar (alla valfria): folder_id (endast automatiseringarna i den mappen, ett id från Lista mappar, eller none för de som inte ligger i någon mapp), 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, "...": "..." }] }

Om automatiseringstjänsten inte kan nås får du ett 503, aldrig en tom lista i dess ställe. En tom lista betyder alltid att det inte finns några automatiseringar.


Hämta en automatisering

GET /automations/{automationId} returnerar en automatisering med dess fullständiga graf: varje stegs typ, etikett, alias, åtgärd, parametrar och inställningar, plus anslutningarna mellan 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": ["..."] } } }

Ett id som inte finns på detta konto returnerar 404.


Stegkatalog

GET /automations/steps returnerar allt som en automatisering kan byggas av:

  • node_kinds: de 8 typerna av steg, var och en med en etikett och en beskrivning.
  • triggers: varje utlösare som kan starta en automatisering, med dess inställningsfält (fields) och de värden den skickar vidare till efterföljande steg (output_keys).
  • actions: de inbyggda åtgärder som ett åtgärdssteg kan köra, var och en med sin key (sluggen du använder i en graf) och dess params, markerade required där de finns.
  • api_actions: de operationer i detta API som ett åtgärdssteg kan anropa. Utan q returneras de som etiketter grupperade efter område i api_actions_by_tag, och den platta listan är tom eftersom det finns flera hundra av dem.
  • graph_rules: grammatiken för att skriva en graf: datan som varje stegtyp bär på, varje utlösartyp med dess inställningsnycklar, åtgärdsleverantörer, grennamn och mallsyntax. Läs den innan du skapar eller redigerar en.
  • counts: totalerna per lista, oavsett vad du sökte efter.

Detta är vad byggaren erbjuder, inte vad kontot har byggt. Kontrollera detta innan du drar slutsatsen att en utlösare eller åtgärd inte finns.

Frågeparametrar (alla valfria): q, ett ord för att söka i varje lista (skiftlägesokänsligt), och sub_account_id.

Med q:

  • api_actions är den platta listan med träffar, begränsad till 60. api_actions_truncated är true när begränsningen tillämpades. De första träffarna bär på sina parametrar.
  • Åtgärder för anslutna tredjepartsappar söks också igenom och returneras i app_actions. Sök på appens namn, till exempel q=hubspot. Varje post anger om kontot har den appen ansluten (connected), och connected_apps listar de appar som kontot har anslutna.
  • app_actions_unavailable är true när appåtgärderna inte kunde sökas igenom denna gång. De andra listorna är fortfarande kompletta.
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, förkortat)

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

Listorna över stegtyper och utlösare nedan är hämtade från denna slutpunkt. Själva slutpunkten är alltid den aktuella listan.


Skapa en automatisering

POST /automations skapar en automatisering utifrån ett namn och en graf. Den sparas avstängd, som ett utkast.

Brödtext

Fält Krävs Betydelse
name Ja Vad den kallas i listan. Kort och specifik.
description Nej En till tre meningar om vad den gör och när den körs.
graph Ja { nodes, edges }, se nedan.
folder_id Nej Mappen att spara den i, ett id från Lista mappar. Om den utelämnas eller är null hamnar den inte i någon mapp.

Grafen. graph_rules från stegkatalogen är den fullständiga grammatiken. I korthet:

  • Varje nod har ett id (unikt i grafen, till exempel trigger_1 eller send_reminder), en type (en av de 8 stegtyperna), en valfri label, och dess inställningar i data, under en nyckel uppkallad efter dess typ: 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 behöver minst en utlösare. Den aktiva grammatiken tillåter upp till 10, och automatiseringen startar när någon av dem aktiveras.
  • Varje annat steg måste vara nåbart från en utlösare, och ingen anslutning får leda tillbaka till ett tidigare steg.
  • Varje kant har en source och en target. Kanter som lämnar ett villkor bär på sourceHandle true eller false. Kanter som lämnar en loop bär på body eller done. Kanter som lämnar en “Vänta på svar”-fördröjning bär på replied eller timed_out. Andra kanter har ingen sourceHandle; grammatiken listar resten.
  • Åtgärdsslag och parametrar kommer från katalogen. Gissa aldrig ett id (en agent, en tagg, en lista, ett stadium): slå upp det med API:et först, eller lämna fältet som "" för personen att välja i byggaren.
  • Positioner är valfria. Steg utan position placeras ut automatiskt.
  • Värden från tidigare steg skrivs som ${trigger.<field>} och ${nodes.<step>.<field>}. Se Använda vad ett tidigare steg returnerade och Uttryck i guiden för automatiseringar.

Grafen accepteras i två stavningar: byggarens egen (noder med type och data, kanter med source och target, enligt nedan) och den som Hämta en automatisering svarar med (noder med kind, config, action, params; kanter med from, to, branch). Så du kan läsa en automatisering, ändra ett steg och skicka tillbaka den.

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 är automatiseringen som den är sparad, i samma form som Hämta en automatisering.
  • draft är true medan den är avstängd. En ny automatisering är alltid ett utkast tills du aktiverar den, så enabled: false här är normalt, inte ett fel.
  • open_path är var den öppnas i appens byggare.
  • warnings listar saker som byggaren inte kunde slutföra, som korta etiketter (till exempel agent_function:not_linked). Den är tom när allt är korrekt.

Ett skapande är inte säkert att upprepa blint. Om en begäran får timeout, lista dina automatiseringar innan du skickar den igen, annars kan du sluta med två utkast.


Uppdatera en automatisering

PUT /automations/{automationId} ändrar namnet, beskrivningen och/eller grafen. Skicka endast de fält du vill ändra.

Brödtext: name, description, graph (alla valfria, minst en).

En graph ersätter hela grafen, så arbeta alltid utifrån det som är lagrat:

  1. Läs automatiseringen med GET /automations/{automationId}.
  2. Ändra det du behöver i den grafen.
  3. Skicka tillbaka hela grafen, inklusive varje steg.

När du skickar tillbaka den:

  • Behåll varje stegs alias exakt som du fick det. Senare steg refererar till ett steg via dess alias (${nodes.<alias>.<field>}). Ändra eller ta bort det, så kommer varje referens till det steget att bli tom. Se Namnge dina steg.
  • Lämna "[redacted]"-värden som de är. Ett värde som visas som "[redacted]" behåller sitt lagrade värde.
  • Återställ förkortade texter. En text som kom tillbaka med en ellips i slutet var förkortad i läsningen.

Huruvida automatiseringen är på ändras aldrig här. Om den är på är din ändring live så snart den sparas. Medan en automatisering är på nekas en ändring som skulle få den att trigga sig själv: inaktivera 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"]})

Svar (200): samma form som en skapelse (automation, draft, open_path, warnings). Om inget av name, description eller graph skickas returneras 400.


Aktivera och inaktivera

POST /automations/{automationId}/enable aktiverar en automatisering så att den körs vid sin utlösare från och med nu. Anropa den endast när personen som äger kontot har sett vad automatiseringen gör och för vem, samt har gått med på att aktivera den. Byggverktyget vägrar att aktivera en graf som den inte kan köra (ingen utlösare, en loop, ett steg som utlöser sig självt) med ett 400 som förklarar varför.

POST /automations/{automationId}/disable inaktiverar den (pausar den). Körningar som redan pågår slutförs; inga nya körningar startar. Inaktivering är alltid tillåten.

Inget av anropen tar 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"},
)

Svar (200): automatiseringen så som den lagras nu, i samma form som vid en skapelse, med draft: false efter en aktivering.


Körningshistorik

GET /automations/{automationId}/runs returnerar körningarna för en automatisering, med den senaste först: när varje körning startade och avslutades, vad som utlöste den, om den lyckades och felet om den misslyckades. Att läsa automatiseringen berättar vad den skulle göra. Körningshistoriken berättar vad den gjorde, och det är det enda sättet att skilja en automatisering som aldrig har körts från en som körs och misslyckas varje gång.

Frågeparametrar (alla valfria): limit (1 till 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 är live för en riktig körning, eller safe för en Säker körning från redigeraren. En säker körning skickar ingenting, så det är inget bevis på att automatiseringen fungerar vid verklig användning.
  • En tom runs-lista är ett svar, inte en lucka. Svaret innehåller då en note: antingen har utlösaren aldrig aktiverats, eller så är automatiseringen avstängd, så ingenting har körts.

Mappar

Mappar grupperar bara automatiseringar i listan. De ändrar aldrig vad en automatisering gör eller om den är påslagen. Se Organisera automatiseringar i mappar.

Lista mappar

GET /automations/folders returnerar mapparna, var och en med hur många automatiseringar den innehåller, plus unfiled_count: hur många automatiseringar som inte ligger i någon mapp.

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
}

Skapa en mapp

POST /automations/folders med { "name": "Appointment reminders" }. Namnet krävs, får vara upp till 100 tecken långt och måste vara unikt för kontot. Placera automatiseringar i den med Flytta en automatisering, eller skicka med folder_id när du skapar 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 } }. Ett namn som en annan mapp redan har returnerar 409 med code: "folder_name_taken".

Byt namn på en mapp

PUT /automations/folders/{folderId} med { "name": "..." }. Automatiseringarna i den stannar kvar där de är.

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

Ta bort en mapp

DELETE /automations/folders/{folderId} tar endast bort mappen. Automatiseringarna i den tas inte bort: de flyttas till ingen mapp och fortsätter köras precis som tidigare.

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

Flytta en automatisering till en mapp

PUT /automations/{automationId}/folder med { "folder_id": "<folder id>" }, eller { "folder_id": null } för att ta ut den ur sin mapp. folder_id krävs. Endast var automatiseringen listas ändras.

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

Stegtyper

Typ Vad den gör
trigger Startar automatiseringen när något händer.
action Kör ett steg: en inbyggd åtgärd, en API-åtgärd, en åtgärd i en ansluten app, en HTTP-förfrågan eller ett e-postmeddelande.
condition Delar upp flödet baserat på en regel, i en true- och en false-gren.
transform Kör en kort kodsnutt för att omforma data mellan steg.
ai Frågar AI:n med en prompt du skriver. Den kan returnera text, separata fält eller välja en av flera grenar.
delay Väntar en viss tid, eller väntar på att kontakten ska svara (med en timeout).
loop Upprepar stegen inuti för varje objekt i en lista.
respond Returnerar ett svar till webhook-anropet eller AI-agentens funktionsanrop som startade körningen.

Utlösare

Detta är de 40 utlösare (triggers) som katalogen listar idag, grupperade så som byggaren grupperar dem. Kolumnen Inställningar innehåller utlösarens egna inställningsnycklar (fields), som begränsar när den aktiveras. Varje utlösare tar även respect_quiet_hours, run_hours, reentry och stop_on_response; se Automatiseringsinställningar.

Meddelanden

Utlösare (kind) Aktiveras när Inställningar
Inkommande meddelande (incoming_message) En kontakt skickar ett meddelande via valfri kanal. campaign (begränsar till en AI-agent), channel, message_filter_contains (nyckelord), message_filter_regex (mönster)
Missat samtal (missed_call) Någon ringer ett av dina WhatsApp Web-nummer eller ditt eget SMS-nummer och ingen svarar. to_number
Meddelande levererat (message_delivered) Ett meddelande du skickat bekräftas som levererat av kanalen. channel, agent
Meddelande misslyckades (message_failed) Ett meddelande du skickat kunde inte levereras, med felmeddelandet. channel, agent
Meddelande skickat (message_sent) Alla meddelanden lämnar ditt konto: AI:ns, ditt, ett utskick, en uppföljning. Filtrera det, annars körs det på alla. channel, sent_by
Uppföljning skickad (follow_up_sent) En automatisk uppföljning skickas ut. inga
Uppföljning hoppades över (follow_up_skipped) En uppföljning hölls tillbaka eftersom dess villkor för sändning inte uppfylldes. inga
Uppföljningar slutförda (follow_up_exhausted) En kontakt fick den sista uppföljningen i sekvensen och inget mer ligger i kö. inga
Konversation stängd (conversation_closed) En chatt stängs, med information om hur den avslutades och en sammanfattning. channel, agent
Utskick slutfört (broadcast_completed) Ett utskick har skickats klart, med antal skickade och antal misslyckade. inga
Leadsvar sorterat (outreach_reply_labelled) Svaret från ett kallt e-postlead sorteras, till exempel som Intresserad. label
Skool-kommentar mottagen (skool_comment_received) En medlem kommenterar under ett Skool-inlägg som en av dina kommentarsregler bevakar. inga

Kontakter

Utlösare (kind) Aktiveras när Inställningar
Ny kontakt (contact_created) En ny person når dig för första gången via valfri kanal, samt vid importer, API:et och kontakter du skapar manuellt. inga
Kontakt uppdaterad (contact_updated) Ett kontaktfält ändras. field
Kontakter du lägger till här (contact_added) Endast för kontakter du själv lägger till i denna automatisering från kontaktsidan. En körning per kontakt. inga
Tagg tillagd (tag_applied) En tagg läggs till på en kontakt, av din AI-agent, en person, en automatisering eller en import. tag_name, channel, applied_by
Tagg borttagen (tag_removed) En tagg tas bort från en kontakt. tag_name, channel
Skool-medlem gick med (skool_member_joined) Någon går med i en Skool-community du äger eller driver, med deras profil, svar och matchningspoäng. group_id, create_contact
Skool-medlem kvalificerad (skool_member_qualified) En ny Skool-medlems svar når upp till eller över din tröskel. min_score

Affärer

Utlösare (kind) Aktiveras när Inställningar
Affär skapad (deal_created) En ny affär läggs till i en av dina pipelines. pipeline_id, stage_id
Affärssteg ändrat (deal_stage_changed) En affär flyttas till ett annat steg, med namn på steget den lämnade och det den gick in i. pipeline_id, to_stage_id, from_stage_id
Affär uppdaterad (deal_updated) Ett affärsfält ändras. field

Möten

Utlösare (kind) Aktiveras när Inställningar
Möte bokat (appointment_booked) Ett nytt möte bokas. inga
Möte avbokat (appointment_cancelled) Ett bokat möte avbokas. inga
Möte ombokat (appointment_rescheduled) Ett bokat möte flyttas till en annan tid, med den gamla tiden bredvid den nya. event_id
Före ett möte (appointment_upcoming) En inställd tid före varje bekräftat möte, för påminnelser. Upp till fem påminnelser per automatisering. offsets_minutes

Uppgifter

Utlösare (kind) Aktiveras när Inställningar
Uppgift skapad (task_created) En uppgift skapas. task_type
Uppgift slutförd (task_completed) En uppgift flyttas till ett slutfört steg. inga

Konto

Utlösare (kind) Aktiveras när Inställningar
Lågt kreditsaldo (low_credit_balance) Ditt kreditsaldo sjunker under din varningsgräns. inga
Kanal ansluten (channel_connected) En av dina kanaler har anslutits. channel
Kanal frånkopplad (channel_disconnected) En av dina kanaler bryts: utloggad, avlänkad eller avstängd. Ett WhatsApp Web-nummer som återansluter av sig självt räknas endast om det fortfarande är nere efter 30 minuter. channel

Byrå

Utlösare (kind) Aktiveras när Inställningar
Underkonto skapat (sub_account_created) Ett nytt klientkonto skapas, från din instrumentpanel, API:et eller din registreringssida. inga
Underkontoaktivitet (sub_account_event) Något händer på ett av dina klientkonton: krediter håller på att ta slut, en kanal ansluts, en plan ändras. event, threshold

Allmänt och appar

Utlösare (kind) Aktiveras när Inställningar
Enligt schema (schedule) Enligt ett cron-schema. cron, timezone
Webhook (webhook) Ett externt system anropar automatiseringens webhook-adress. webhook_secret
AI-agentfunktion (agent_function) Din AI-agent anropar denna automatisering som en funktion under en konversation. function_name, function_description, parameters, agent_ids, campaign_ids
Nytt flödesobjekt (rss) Ett nytt objekt visas i ett RSS- eller Atom-flöde. feed_url
E-post mottaget (email_received) Ett e-postmeddelande anländer till din anslutna brevlåda. from_contains, subject_contains
Apphändelse (app_event) Något händer i en ansluten app: en affärsmöjlighetsfas ändras, en betalning inkommer, ett formulär skickas in. toolkit, trigger_slug, connected_account_id, config
Manuell körning (manual) Endast när den startas manuellt. inga

En automatisering kan ha högst en utlösare av varje typ: webhook, app_event, agent_function, rss, schedule, email_received, appointment_upcoming och contact_added. En utlösare som aktiveras när en post skapas kan inte paras ihop med den åtgärd som skapar samma post, eftersom automatiseringen då skulle trigga sig själv.

För information om vad varje utlösare skickar vidare till efterföljande steg (output_keys) och den fullständiga listan över åtgärder med deras parametrar, läs GET /automations/steps. Automationsguiden förklarar varje utlösare med byggverktygets terminologi.


Fel

Varje fel har den vanliga formen { "success": false, "error_code": <status>, "error": "..." }. En avvisad graf lägger till code och 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 listar varje problem, med en åtgärdbar mening för varje, och error är det första. Åtgärda exakt det som listas och skicka hela grafen igen. code är en av invalid_graph, automation_graph_has_a_cycle, self_triggering_automation, no_trigger eller en annan kod från byggverktyget.

Status När
400 Grafen avvisades (se ovan), ett obligatoriskt fält saknas (name eller graph vid skapande, folder_id vid flytt), en uppdatering skickade inget att ändra, ett id för en automatisering eller mapp är ogiltigt, eller ett mappnamn saknas, är tomt eller för långt (code: "invalid_name").
403 Kontot har inte Automatiseringar; ett klientkontos plan inkluderar inte att skapa och redigera automatiseringar (endast skrivrättigheter); eller teammedlemmens åtkomst till Automatiseringar är för låg (Visa för läsning, Redigera för skrivning).
404 Ingen automatisering med det id:t finns på detta konto, ingen mapp med det id:t (code: "folder_not_found"), eller ett sub_account_id som inte är ett av dina klientkonton.
409 En mapp med det namnet finns redan (code: "folder_name_taken").
413 Automatiseringen är större än den 1 MB som byggverktyget accepterar. Flytta stor kod eller data utanför dess steg.
422 Byggverktyget avvisade begäran av en annan anledning. Kontrollera grafen mot GET /automations/steps; att skicka samma begäran igen hjälper inte.
503 Automatiseringstjänsten kunde inte nås. Försök igen om en stund. Vid skapande, lista dina automatiseringar först så att du inte skapar ett andra utkast.

Använda dessa slutpunkter via MCP

Varje slutpunkt på denna sida är också ett verktyg för en AI-assistent som du ansluter via MCP, med samma regler: en ny automatisering är ett utkast tills den aktiveras, och en ändring i en körande automatisering sker omedelbart.

Verktyg 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ästa steg

  • Automatiseringar: hur utlösare, steg, variabler och körningshistorik fungerar i byggverktyget.
  • API för byråer: bygg automatiseringar på ett klientkonto med sub_account_id.
  • API-referens: den fullständiga interaktiva slutpunktsutforskaren.