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.
- Bas-URL:
https://api.dmchamp.com/v1 - Autentisering: din API-nyckel (se Autentisering)
- Fel: se Fel & Sidnumrering och Fel nedan
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_idsom en frågeparameter, så att du kan läsa och bygga en klients automatiseringar med din byrånivånyckel. Ettsub_account_idsom inte är ett av dina klientkonton returnerar404. 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.
- Läs katalogen.
GET /automations/stepslistar varje utlösare, åtgärd och stegtyp du kan använda, plus grammatiken för att skriva en graf (graph_rules). - Skapa ett utkast.
POST /automationslagrar automatiseringen avstängd. Ingenting körs ännu. - 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. - 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 sinkey(sluggen du använder i en graf) och dessparams, markeraderequireddär de finns.api_actions: de operationer i detta API som ett åtgärdssteg kan anropa. Utanqreturneras de som etiketter grupperade efter område iapi_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ärtruenä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 exempelq=hubspot. Varje post anger om kontot har den appen ansluten (connected), ochconnected_appslistar de appar som kontot har anslutna. app_actions_unavailableärtruenä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 exempeltrigger_1ellersend_reminder), entype(en av de 8 stegtyperna), en valfrilabel, och dess inställningar idata, 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
sourceoch entarget. Kanter som lämnar ett villkor bär påsourceHandletrueellerfalse. Kanter som lämnar en loop bär påbodyellerdone. Kanter som lämnar en “Vänta på svar”-fördröjning bär pårepliedellertimed_out. Andra kanter har ingensourceHandle; 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ärtruemedan den är avstängd. En ny automatisering är alltid ett utkast tills du aktiverar den, såenabled: falsehär är normalt, inte ett fel.open_pathär var den öppnas i appens byggare.warningslistar saker som byggaren inte kunde slutföra, som korta etiketter (till exempelagent_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:
- Läs automatiseringen med
GET /automations/{automationId}. - Ändra det du behöver i den grafen.
- Skicka tillbaka hela grafen, inklusive varje steg.
När du skickar tillbaka den:
- Behåll varje stegs
aliasexakt 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ärliveför en riktig körning, ellersafefö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å ennote: 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.