Automatisierungen
Workflows aus Triggern und Schritten aufbauen, ausführen und ihre Durchläufe prüfen.
- POST/automations
- GET/automations/{id}
- POST/automations/{id}
- GET/automations
- DEL/automations/{id}
- POST/automations/{id}/start
- POST/automations/{id}/pause
- POST/automations/{id}/stop
- POST/automations/{id}/trigger
- GET/automations/{id}/runs
- GET/automations/{id}/runs/{run_id}
- POST/automations/{id}/runs/{run_id}/cancel
- POST/automations/{id}/exit
- GET/automations/runs
- GET/automations/{id}/stats
- GET/automations/{id}/steps/{step_key}/stats
Automatisierung erstellen
Erstellt eine Automatisierung im Status draft aus einem Graphen von Schritten und Verbindungen. Erfordert einen API-Schlüssel mit dem Scope full. Automatisierungen sind in der Beta.
Die Automatisierung tut nichts, bis Sie sie starten. Jeder Durchlauf kostet beim Start 3 Credits, und jede E-Mail, die send_email oder forward_email sendet, kostet einen weiteren Credit. In einem nicht verifizierten Workspace können diese Aktionen nur an die E-Mail-Adressen der Konten von Workspace-Mitgliedern senden.
/automationsBody-Parameter
contextstringerforderlichcontact, email oder event. Der Kontext bestimmt, welche Trigger und Aktionen Sie verwenden können, und lässt sich später nicht ändern. Siehe Kontexte.namestringerforderlichdescriptionstring | nullsettingsobjectstepsobject[]erforderlichconnectionsobject[]erforderlich[] für einen Graphen, der nur aus einem Trigger besteht. Siehe Verbindungen.Einstellungen
exit_conditionsobject[]Bricht den Durchlauf eines Kontakts ab, sobald einer dieser Einträge zutrifft (Kontext contact, bis zu 20). Jeder Eintrag ist ein Event-Matcher, also der Name des Triggers in event plus dessen Konfigurationsfelder, etwa { "event": "contact.tag_added", "tag": "customer" } oder { "event": "contact.on_event", "event_name": "purchase" }, oder eine Bedingung für den Kontakt, { "condition": { "match": "all", "rules": [...] } }, mit den Regeln der Aktion condition. Matcher akzeptieren jeden Kontakt-Trigger außer den Datums-Triggern und contact.visits_url sowie optional einen filter wie Trigger-Konfigurationen. Segment-Events (segment_id erforderlich) und Commerce-Events sind wie ihre Trigger in der Alpha. Matcher mit contact.on_event, hier und in den Schritten goal und wait_until, erfordern den Tarif Pro, Business oder Custom. Siehe Ausstiegsbedingungen und Ziele.
exit_on_audience_removalbooleanStandardwert: falsetrue bricht einen Durchlauf, den contact.added_to_audience gestartet hat, ab, wenn der Kontakt aus dieser Kontaktliste entfernt wird, sich von ihr abmeldet oder sich von allen Marketing-E-Mails abmeldet.on_step_failurestringStandardwert: stopstop markiert den Durchlauf als failed, wenn ein Schritt fehlschlägt. skip protokolliert den fehlgeschlagenen Schritt und setzt den Durchlauf an dessen default-Kanten fort (oder an no nach einer fehlgeschlagenen condition).allow_reentrybooleanStandardwert: truefalse überspringt einen Trigger, wenn derselbe Kontakt (oder dieselbe E-Mail) in dieser Automatisierung bereits einen laufenden Durchlauf hat.max_concurrent_runsintegerStandardwert: 0running. 0 bedeutet kein Limit.cooldown_secondsintegerStandardwert: 0Schritte
keystringerforderlichwelcome_email. Verbindungen, Schrittstatistiken und Aktualisierungen verweisen über diesen Schlüssel auf Schritte.typestringerforderlichtrigger oder action.triggerstringactionstringconfigobjectVerbindungen
fromstringerforderlichtostringerforderlichbranchstringStandardwert: defaultfrom dieser Kante folgt. Schritte vom Typ condition verwenden yes und no, Schritte vom Typ wait_until verwenden matched und timeout (Events und Bedingungen) oder default und passed (Datumsangaben), Schritte vom Typ experiment die Schlüssel der Varianten. Alle anderen Schritte verwenden default.Kontexte
| Kontext | Ein Durchlauf betrifft | Trigger | Regeln |
|---|---|---|---|
contact |
Einen Kontakt. send_email geht an diesen Kontakt. |
contact.*, system.* |
Ein oder mehrere Trigger. Sie müssen alle mit derselben ersten Aktion verbunden sein. |
email |
Eine E-Mail (gesendet oder empfangen). | email.*, system.* |
Ein oder mehrere Trigger. Sie müssen alle mit derselben ersten Aktion verbunden sein. |
event |
Nur den Payload des Triggers. | event.*, system.* |
Genau ein Trigger. |
Jede Aktion muss von einem Trigger aus erreichbar sein. Ein Durchlauf beginnt bei der Aktion, die mit dem ausgelösten Trigger verbunden ist, und folgt den Verbindungen:
conditionfolgt je nach Ergebnis nur der Kante, derenbranchyesodernoist.wait_untilfolgt nurmatchedodertimeout(Events und Bedingungen) oderdefaultoderpassed(Datumsangaben).experimentfolgt den Kanten der gewählten Variante. Wenn dieser Pfad endet, setzt sich der Durchlauf an dendefault-Kanten des Experiment-Schritts fort.waitverzögert den nächsten Schritt.- Alle anderen Aktionen folgen ihren
default-Kanten. Ein Schritt mit mehreren ausgehenden Kanten führt sie alle aus. - Ein Schritt
goalwird auch außerhalb der Reihenfolge erreicht: Wenn der Kontakt das Ziel erfüllt, springt der Durchlauf dorthin und setzt sich danach fort.
Ein Durchlauf ist completed, wenn keine Schritte mehr übrig sind oder ein Schritt end_run ausgeführt wird, failed, wenn ein Schritt fehlschlägt (mit on_step_failure: "stop"), und canceled, wenn eine Ausstiegsbedingung zutrifft, der Durchlauf abgebrochen wird oder Sie die Automatisierung stoppen.
Trigger
| Trigger | Kontext | Wird ausgelöst, wenn |
|---|---|---|
contact.added_to_audience |
contact | Ein Kontakt eine Kontaktliste abonniert, auch bei erneuter Anmeldung. |
contact.removed_from_audience |
contact | Ein Abonnent aus einer Kontaktliste gelöscht wird. |
contact.added_to_segment |
contact | Ein Kontakt einem Segment mit Tracking beitritt. Nicht bei Änderungen, die durch das Bearbeiten des Segments entstehen. Alpha: Nur das Emailit-Team kann Segment-Trigger hinzufügen; andere Anfragen geben 403 mit error: "segments_alpha" zurück. |
contact.removed_from_segment |
contact | Ein Kontakt ein Segment mit Tracking verlässt. Nicht bei Änderungen, die durch das Bearbeiten des Segments entstehen. Alpha, wie contact.added_to_segment. |
contact.created |
contact | Ein Kontakt erstellt wird. |
contact.updated |
contact | Ein Kontakt aktualisiert wird, auch Tags und Score. |
contact.tag_added, contact.tag_removed |
contact | Dem Kontakt ein Tag hinzugefügt oder von ihm entfernt wird. |
contact.score_changed |
contact | Sich der Lead-Score des Kontakts ändert. |
contact.unsubscribed |
contact | Der Kontakt sich von einer Kontaktliste oder von allen Marketing-E-Mails abmeldet. |
contact.loaded_email |
contact | Ein Empfänger, der ein Kontakt im Workspace ist, eine E-Mail öffnet. |
contact.clicked_in_email |
contact | Ein Empfänger, der ein Kontakt im Workspace ist, auf einen getrackten Link klickt. |
contact.on_date |
contact | Das Datum in einem eigenen Datumsfeld erreicht ist, optional um Tage oder Wochen verschoben, zu einer Uhrzeit in einer Zeitzone. Einmal oder mit repeat: "yearly" jährlich. |
contact.date_anniversary |
contact | Jedes Jahr an Monat und Tag eines eigenen Datumsfelds, mit denselben Optionen. |
contact.on_event |
contact | Ein eigenes Event (c:) oder Workspace-Event (w:) für den Kontakt eintrifft. Tarife Business und Custom: Andere Tarife erhalten 403 mit error: "plan_required" und required_plan: "business". |
form.submitted |
contact | Ein Formular mit einer E-Mail-Adresse abgeschickt wird. |
contact.on_purchase |
contact | Ein Kontakt eine neue Bestellung aufgibt. Alpha: Nur das Emailit-Team kann Commerce-Trigger hinzufügen; andere Anfragen geben 403 mit error: "commerce_alpha" zurück. |
contact.abandoned_cart |
contact | Der Warenkorb eines Kontakts abgebrochen wird. Alpha, wie contact.on_purchase. |
contact.visits_url |
contact | Wird akzeptiert, aber Emailit löst ihn noch nicht aus. |
email.received |
Eine eingehende E-Mail eintrifft. | |
email.delivered, email.bounced, email.complained, email.loaded, email.clicked, email.failed, email.suppressed, email.canceled |
Das gleichnamige E-Mail-Event eintritt. | |
event.<name> |
event | Jeder Name, der mit event. beginnt. Emailit löst noch keine event.*-Events aus; starten Sie Event-Automatisierungen mit system.manual. |
system.manual |
alle | Sie Durchlauf auslösen aufrufen. |
system.schedule |
alle | Wird akzeptiert, aber Emailit löst geplante Trigger noch nicht aus. |
Felder in config für Trigger:
audience_idstringcontact.added_to_audience und contact.removed_from_audience: nur für diese Kontaktliste (aud_…) auslösen.segment_idstringcontact.added_to_segment und contact.removed_from_segment: das Segment mit Tracking (seg_…). Optional beim Erstellen der Automatisierung, erforderlich, wenn Sie ihre Schritte aktualisieren. Ein Segment, das nicht existiert oder kein Tracking hat, gibt 400 zurück.include_current_membersbooleanStandardwert: falsecontact.added_to_segment: Startet beim ersten Start der Automatisierung auch einen Durchlauf für jeden Kontakt, der bereits im Segment ist. Die Einstellungen für den Wiedereintritt gelten weiterhin.date_fieldstringcontact.date_anniversary und contact.on_date: der Schlüssel des eigenen Felds, das das Datum enthält, zum Beispiel birthday.offset, time, timezone, repeatobject, string, string, stringoffset ist { "amount": 3, "unit": "days", "direction": "before" } (unit days oder weeks), time ist HH:MM (Standardwert 00:00), timezone ein IANA-Name (Standardwert UTC) und repeat bei contact.on_date once oder yearly.tagstringcontact.tag_added und contact.tag_removed: nur dieses Tag.threshold, directionnumber, stringcontact.score_changed: nur, wenn der Score threshold überschreitet, nach oben (up, Standardwert) oder nach unten (down).fieldstringcontact.updated: nur, wenn sich dieses Feld geändert hat, zum Beispiel custom_fields.purchased, tags oder score.event_namestringcontact.on_event: der Name des Events, etwa purchase (passt auf c:purchase und w:purchase) oder w:webinar.attended. Lassen Sie das Feld für jedes Workspace-Event oder eigene Event weg. Filtern Sie mit filter nach den Eigenschaften des Events, zum Beispiel properties.total.automation_id, campaign_id, link_containsstringform_idstringform.submitted: nur dieses Formular.filterobjectNur auslösen, wenn das Event passt: { "match": "all", "rules": [{ "field": "subject", "operator": "contains", "value": "Invoice" }] }. match ist all (Standardwert) oder any. field ist ein Pfad mit Punkten in das object des Events, zum Beispiel to oder email.subject; ein vorangestelltes payload. wird ignoriert.
Operatoren: equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, in, not_in, is_set, is_not_set. Jeder Operator außer is_set und is_not_set braucht einen value; in und not_in erwarten ein Array.
Aktionen
| Aktion | Kontext | Konfiguration |
|---|---|---|
send_email |
alle | type (erforderlich, template), template_id (erforderlich: eine tem_-ID oder der Alias einer veröffentlichten Vorlage), from, subject, reply_to, to, email_type, tracking |
forward_email |
email, event | to (erforderlich), from, subject, email_id |
wait |
alle | seconds (erforderlich, 0 bis 2.592.000, also 30 Tage) |
wait_until |
alle (Modi event und condition: contact) |
mode (date, event oder condition) und die Felder dieses Modus |
condition |
alle | filter (erforderlich, siehe Bedingungen) |
goal |
contact | event oder condition, if_not_met |
experiment |
alle | variants (erforderlich), control |
call_webhook |
alle | url (erforderlich), method, headers, body, secret, fail_on_error |
run_automation |
alle | automation_id (erforderlich), exit_current |
exit_automation |
contact | automation_ids oder all: true |
end_run |
alle | Keine |
end |
alle | Keine |
add_tag, remove_tag |
contact | tags (erforderlich) |
update_score |
contact | operation (add, subtract oder set), value (erforderlich) |
add_to_audience |
contact | audience_id (erforderlich), emit_events |
remove_from_audience |
contact | audience_id (erforderlich), mode (remove oder unsubscribe), emit_events |
update_subscription |
contact | action (subscribe oder unsubscribe, erforderlich), scope (audience, all_audiences oder global), audience_id |
edit_contact |
contact | fields (erforderlich), emit_events |
add_to_suppressions |
email, event | type, reason, email |
remove_from_suppressions |
email, event | email |
create_contact |
email, event | email, first_name, audience_id, emit_events |
send_emailsendet die Vorlage.fromist standardmäßig der Absender der Vorlage und muss auf einer verifizierten Versanddomain liegen.subjectüberschreibt den Betreff der Vorlage.reply_toist eine Adresse oder ein Array von Adressen und kann ein Platzhalter sein. Im Kontextcontactgeht die E-Mail an den Kontakt des Durchlaufs; in den Kontextenemailundeventsetzen Sieto.email_typeistmarketing(Standardwert im Kontextcontact: wird für abgemeldete Kontakte übersprungen, mit Abmeldelink undList-Unsubscribe-Headern) odertransactional.tracking: { "loads": true, "clicks": true }überschreibt die Tracking-Einstellungen der Domain, undtracking: {}kehrt zu ihnen zurück.wait_untilwartet auf ein Datum:{ "mode": "date", "date": { "type": "global", "key": "webinar_date" }, "offset": { "amount": 1, "unit": "days", "direction": "before" }, "time": "09:00", "timezone": "Europe/Prague", "if_passed": "continue" }, wobeidate.typecontact(mitfield),global(mitkey),fixed(mitvalue) oderpayload(mitpath) ist undif_passedcontinueoderbranch. Für ein Event:{ "mode": "event", "event": { "event": "contact.clicked_in_email" }, "timeout": { "amount": 2, "unit": "days" } }. Für eine Bedingung:{ "mode": "condition", "condition": { ... }, "timeout": ... }. Wartezeiten dauern bis zu 365 Tage. Siehe Wait until.goalerwartet einen Event-Matcher inevent(wie inexit_conditions) oder einecondition. Wenn der Kontakt das Ziel erfüllt, springt der Durchlauf zum Ziel.if_not_met(continue,waitoderend) legt fest, was passiert, wenn ein Durchlauf das Ziel erreicht, bevor der Kontakt es erfüllt hat. Zielschritte erfordern den Tarif Pro, Business oder Custom.forward_emailleitet die E-Mail des Durchlaufs (oder die E-Mail inemail_id) antoweiter.fromist standardmäßig der ursprüngliche Absender undsubjectstandardmäßigFwd: <original subject>.conditionerwartet{ "match": "all" | "any", "rules": [...] }. Siehe Bedingungen. Der Schritt wird mityesodernofortgesetzt.experimentwählt eine dervariants(einschließlichcontrol), jeweils{ "key": "a", "weight": 50 }, zufällig nach Gewichtung aus und setzt den Durchlauf auf dem Zweig fort, der nach dem gewählten Schlüssel benannt ist.call_webhooksendet eine HTTP-Anfrage (StandardmethodePOST, JSON alsContent-Type) und protokolliert die Statusklasse (2xx,4xx,5xx) odertimeoutodernetwork_error. Ohnebodysendet er die Automatisierung, den Durchlauf, den Kontakt und den Payload als JSON. Mitsecretwird der Body inX-Emailit-Signaturesigniert. Eine Antwort außerhalb von 2xx lässt den Schritt nur fehlschlagen, wennfail_on_errortrueist. Private Adressen werden blockiert.run_automationstartet einen Durchlauf einer anderen laufenden Automatisierung für denselben Kontakt, mit dem Payload dieses Durchlaufs. Der aktuelle Durchlauf läuft weiter oder endet mitexit_current: true.exit_automationbricht die laufenden Durchläufe des Kontakts in den Automatisierungen inautomation_idsab oder mitall: truein jeder anderen Automatisierung.end_runbeendet den Durchlauf, einschließlich der anderen Zweige.endbeendet nur seinen eigenen Zweig.add_tagundremove_tagändern die Tags des Kontakts.update_scoreändert den Lead-Score.update_subscriptionmeldet den Kontakt bei einer Kontaktliste an oder ab, von jeder Kontaktliste ab (nurunsubscribe) oder von allen Marketing-E-Mails (global).remove_from_audiencelöscht die Mitgliedschaft des Kontakts (mode: "remove", der Standardwert) oder behält ihn als abgemeldet auf der Kontaktliste (mode: "unsubscribe").emit_events(Standardwerttrue) beiadd_to_audience,remove_from_audience,create_contactundedit_contactsendet die üblichen Eventssubscriber.*undcontact.*, sodass Webhooks sie erhalten und andere Automatisierungen starten. Schritte, die vor dem 2026-10-20 gespeichert wurden, habenemit_events: false, und ihre Schritteremove_from_audiencehabenmode: "unsubscribe".edit_contacterwartetfields: [{ "key": "first_name", "value": "Ada" }]. Die Schlüsselemail,first_name,last_nameundunsubscribedaktualisieren den Kontakt; jeder andere Schlüssel (mit oder ohnecustom_fields.) setzt ein eigenes Feld, umgewandelt in dessen Typ.operationistset(Standardwert),clear,incrementoderdecrement.add_to_suppressionssperrt die Adresse des Durchlaufs (Standardwert fürtype:recipient, fürreason:automation).remove_from_suppressionshebt die Sperrung auf. Im Kontexteventübergeben Sieemail.create_contacterstellt den Kontakt (oder findet den vorhandenen) und meldet ihn optional beiaudience_idan. Im Kontextemailistemailstandardmäßig der Empfänger der E-Mail.
String-Werte in jeder Aktionskonfiguration können Platzhalter enthalten, die Emailit beim Ausführen des Schritts füllt: {{contact.email}}, {{cf.plan}}, {{global.webinar_link}}, {{email.mail_from}}, {{payload.object.subject}} oder {{meta.source_event_id}}, zum Beispiel "to": "{{email.mail_from}}". Vorlagen, die send_email sendet, und ihr subject werden mit Temple gerendert und bieten außerdem direkt die Felder des Kontakts, etwa {{ first_name }}, {{tags}} und {{score}}.
Bedingungen
Ein Filter für condition (ebenso Bedingungen in wait_until und goal sowie exit_conditions) ist { "match": "all" | "any", "rules": [...] }. Eine Regel ist { "field", "operator", "value" } oder eine verschachtelte Gruppe { "match", "rules" }, bis zu 3 Ebenen und 50 Regeln.
field |
operator |
value |
|---|---|---|
Kontaktfelder (email, first_name, last_name, created_at, unsubscribed, score), subscribed, custom_fields.<key>, global.<key>, payload.<path>, meta.<path>, contact.<path>, email.<path> |
equals, not_equals, contains, not_contains, starts_with, ends_with, in, not_in, is_set, is_not_set, greater_than, less_than, greater_or_equal, less_or_equal, is_true, is_false, before, after, on, is_past, is_future, within_last, within_next, more_than_ago, more_than_from_now |
Der Wert. Tagesoperatoren erwarten eine Anzahl Tage oder { "amount", "unit" }. Nicht nötig für is_set, is_not_set, is_true, is_false, is_past, is_future. |
tags |
contains, not_contains, in, not_in, is_set, is_not_set |
Ein Tag oder ein Array für in und not_in. |
audience |
is_subscribed, is_not_subscribed, is_member, is_not_member |
Eine Kontaktlisten-ID (aud_…). |
engagement |
opened, not_opened, clicked, not_clicked |
"run", "automation", { "scope": "step", "step": "<key>" }, { "scope": "any", "days": 30 } oder { "scope": "campaign", "campaign_id": "cmp_…" }. |
segment |
is_member, is_not_member |
Eine Segment-ID (seg_…), mit oder ohne Tracking. Alpha. |
commerce.<field> |
Die Segment-Operatoren des Felds, außer fünf, die die Namen aus dieser Tabelle verwenden: greater_or_equal, less_or_equal, within_last, within_next und more_than_ago |
Der Wert, den die Segmentregel erwartet. Alpha. Siehe unten. |
Felder ohne Präfix beziehen sich auf den Kontakt des Durchlaufs (first_name, custom_fields.plan) oder auf die E-Mail (rcpt_to, subject). subscribed ist true, wenn der Kontakt Marketing-E-Mails erhalten kann.
Regeln mit commerce.<field> verwenden die Commerce-Felder von Segmenten und werden genauso ausgewertet: orders_count, total_spent, average_order_value, first_order_at, last_order_at, expected_next_order_at, last_active_at, churn_risk, purchased, viewed_product, used_coupon und cart, zum Beispiel { "field": "commerce.purchased", "operator": "has", "value": { "days": 30, "product_ids": ["sku-1"] } }. Segment- und Commerce-Regeln sind in der Alpha: Andere Anfragen, die sie hinzufügen, geben 403 mit error segments_alpha oder commerce_alpha zurück. Automatisierungen, die sie bereits enthalten, funktionieren für alle weiter.
Rückgabe
Gibt 201 Created mit der Automatisierung in data zurück, einschließlich der ID jedes Schritts (aus_…) und der Verbindungen. status ist draft.
Beim Erstellen wird die Struktur des Graphen geprüft: Trigger- und Aktionsnamen für den Kontext, eindeutige Schlüssel, gültige Verbindungen und Zweige, Erreichbarkeit, die settings und ob jede Absenderadresse from in send_email eine verifizierte Versanddomain verwendet. Nicht geprüft wird, ob jede Aktionskonfiguration vollständig ist; das übernimmt Automatisierung aktualisieren. Fehler geben 400 mit errors zurück, nach Feldpfad gegliedert.
Funktionen, die der Tarif des Workspaces nicht enthält, geben 403 mit error: "plan_required", dem niedrigsten Tarif, der sie enthält, in required_plan und einer message zurück. Schritte goal und Matcher mit contact.on_event in exit_conditions, goal und wait_until erfordern pro, und der Trigger contact.on_event erfordert business.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "draft",
"settings": { "allow_reentry": false },
"last_triggered_at": null,
"published_at": null,
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-01T09:41:05.318274+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
},
{
"id": "aus_3vM0ORwEXCQcyS7rylfQBQEXjVk",
"key": "wait_1_day",
"type": "action",
"trigger": null,
"action": "wait",
"config": { "seconds": 86400 }
},
{
"id": "aus_3HOgOzxaXBgVRpLFtpvJNo4vd5c",
"key": "is_free_user",
"type": "action",
"trigger": null,
"action": "condition",
"config": {
"filter": {
"match": "all",
"rules": [{ "field": "custom_fields.plan", "operator": "is_not_set" }]
}
}
},
{
"id": "aus_3gCI5SWMPFVhOSawR6nz8sF55wp",
"key": "upgrade_tips",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "getting-started-tips" }
},
{
"id": "aus_3Pq7Wd2LxN8cVt5RmK0sHy4BfJe",
"key": "done",
"type": "action",
"trigger": null,
"action": "end",
"config": {}
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" },
{ "from": "welcome_email", "to": "wait_1_day", "branch": "default" },
{ "from": "wait_1_day", "to": "is_free_user", "branch": "default" },
{ "from": "is_free_user", "to": "upgrade_tips", "branch": "yes" },
{ "from": "is_free_user", "to": "done", "branch": "no" }
]
},
"message": "Automation was successfully created.",
"notify": true
}{
"message": "Validation failed.",
"errors": {
"steps.1.action": ["Action \"forward_email\" is not allowed for context \"contact\"."],
"steps": ["Action step \"upgrade_tips\" is not reachable from any trigger."]
}
}Automatisierung abrufen
Ruft eine Automatisierung mit ihrem vollständigen Graphen ab. Erfordert einen API-Schlüssel mit dem Scope full.
/automations/{id}Pfadparameter
idstringerforderlichaut_…).Rückgabe
Gibt die Automatisierung in data zurück.
idstringaut_.contextstringcontact, email oder event.namestringdescriptionstring | nullstatusstringdraft, running, paused, stopped oder archived.settingsobjecton_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Leer, wenn Sie keine festgelegt haben.last_triggered_atstring | nullpublished_atstring | nullstepsobject[]id (aus_…), key, type, trigger, action und config. Details zu Durchläufen verweisen über id auf Schritte, Statistiken über key.connectionsobject[]from und to sowie ihr branch.Was jeder Trigger, jede Aktion und jede Einstellung bedeutet, erfahren Sie unter Automatisierung erstellen. Gibt 404 zurück, wenn die Automatisierung nicht existiert oder gelöscht wurde.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "running",
"settings": { "allow_reentry": false },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-03T14:12:40.551870+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
},
{
"id": "aus_3vM0ORwEXCQcyS7rylfQBQEXjVk",
"key": "wait_1_day",
"type": "action",
"trigger": null,
"action": "wait",
"config": { "seconds": 86400 }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" },
{ "from": "welcome_email", "to": "wait_1_day", "branch": "default" }
]
}
}{
"message": "Automation not found."
}Automatisierung aktualisieren
Aktualisiert Name, Beschreibung, Einstellungen oder Graphen einer Automatisierung. Erfordert einen API-Schlüssel mit dem Scope full. Der Kontext lässt sich nicht ändern.
Um den Graphen zu ändern, senden Sie steps und connections zusammen; sie ersetzen den aktuellen Graphen. Schritte, deren key bereits existiert, behalten ihre ID und ihren Durchlaufverlauf, Schritte, die Sie weglassen, werden gelöscht, und neue Schlüssel werden hinzugefügt. Anders als beim Erstellen wird beim Aktualisieren auch die Konfiguration jeder Aktion validiert (zum Beispiel braucht send_email die Felder type und template_id und wait das Feld seconds). Wenn ein Schritt seinen key und seine Aktion behält, behalten Einstellungen, die Sie in seiner config weglassen, ihre gespeicherten Werte: email_type und tracking bei send_email, emit_events bei Kontaktschritten und mode bei remove_from_audience. Senden Sie eine Einstellung, um sie zu ändern; tracking: {} kehrt zu den Tracking-Einstellungen der Domain zurück.
Pausieren Sie die Automatisierung, bevor Sie den Graphen einer laufenden Automatisierung ändern, und starten Sie sie dann erneut, damit die neuen Trigger wirksam werden.
/automations/{id}Pfadparameter
idstringerforderlichaut_…).Body-Parameter
namestringdescriptionstringsettingsobjectexit_conditions, exit_on_audience_removal, on_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Siehe Einstellungen. Neue Ausstiegsbedingungen gelten für laufende Durchläufe, auch bei laufenden Automatisierungen.stepsobject[]connections senden. Siehe Schritte.connectionsobject[]steps senden. Siehe Verbindungen.Rückgabe
Gibt die aktualisierte Automatisierung in data zurück, mit message und notify. Gibt bei fehlgeschlagener Validierung 400 mit errors nach Feldpfad zurück, 403 mit error: "plan_required", wenn die Aktualisierung Schritte, Trigger oder Ausstiegsbedingungen hinzufügt, die der Tarif nicht enthält (siehe Automatisierung erstellen), und 404, wenn die Automatisierung nicht existiert. Was die Automatisierung bereits hat, bleibt nach einem Wechsel in einen niedrigeren Tarif erlaubt.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series (v2)",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "paused",
"settings": { "allow_reentry": false, "on_step_failure": "skip" },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-04T08:15:22.730115+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully updated.",
"notify": true
}{
"message": "Validation failed.",
"errors": {
"steps.2.config.seconds": ["Wait seconds cannot exceed 2592000 (30 days)."],
"steps.1.config.template_id": ["Template ID is required when type is \"template\"."]
}
}{
"message": "Automation not found."
}Automatisierungen auflisten
Gibt die Automatisierungen des Workspaces zurück, die neuesten zuerst, ohne ihre Schritte und Verbindungen. Erfordert einen API-Schlüssel mit dem Scope full. Gelöschte Automatisierungen werden nicht aufgelistet.
/automationsQuery-Parameter
pageintegerStandardwert: 1per_pageintegerStandardwert: 25filter[context]stringcontact, email oder event.filter[status]stringdraft, running, paused, stopped oder archived.filter[name]stringsortstringStandardwert: created_atname, created_at, updated_at oder last_triggered_at.orderstringStandardwert: descasc oder desc.Sie können auch die allgemeinen Filter der Form key.condition=value auf name, status, context und created_at verwenden, zusammen mit match. Siehe Filtern.
Rückgabe
dataobject[]id, context, name, description, status, settings, last_triggered_at, published_at, created_at, updated_at. settings ist in dieser Liste immer ein leeres Objekt; rufen Sie die Automatisierung ab, um es zu lesen.total_recordsintegerper_pageintegercurrent_pageintegertotal_pagesinteger{
"data": [
{
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "running",
"settings": {},
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-03T14:12:40.551870+00:00"
}
],
"total_records": 1,
"per_page": 50,
"current_page": 1,
"total_pages": 1
}Automatisierung löschen
Löscht eine Automatisierung. Sie verschwindet aus Listen und reagiert nicht mehr auf Trigger. Erfordert einen API-Schlüssel mit dem Scope full.
Bereits laufende Durchläufe werden nicht abgebrochen. Um sie abzubrechen, stoppen Sie die Automatisierung, bevor Sie sie löschen.
/automations/{id}Pfadparameter
idstringerforderlichaut_…).Rückgabe
Gibt eine message zurück, die das Löschen bestätigt. Gibt 404 zurück, wenn die Automatisierung nicht existiert oder bereits gelöscht wurde.
{
"message": "Automation was deleted successfully.",
"notify": true
}{
"message": "Automation not found."
}Automatisierung starten
Setzt den Status der Automatisierung auf running. Ab dann starten passende Trigger Durchläufe; Events, die vor dem Start eingetreten sind, nicht. Erfordert einen API-Schlüssel mit dem Scope full.
Sie können eine Automatisierung im Status draft, paused oder stopped starten. Der erste Start setzt published_at. Nur beim ersten Start starten Trigger contact.added_to_segment mit include_current_members: true außerdem einen Durchlauf für jeden Kontakt, der bereits in ihrem Segment mit Tracking ist.
Beim Starten wird der Graph nicht erneut validiert. Wenn Sie die Automatisierung mit Automatisierung erstellen angelegt haben, das nur die Struktur prüft, stellen Sie sicher, dass jede Aktionskonfiguration vollständig ist, oder senden Sie den Graphen einmal über Automatisierung aktualisieren, das ihn vollständig validiert. Ein Schritt mit unvollständiger Konfiguration schlägt fehl, wenn ein Durchlauf ihn erreicht.
/automations/{id}/startPfadparameter
idstringerforderlichaut_…).Rückgabe
Gibt die Automatisierung in data zurück, mit status auf running. Gibt 404 zurück, wenn die Automatisierung nicht existiert.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "running",
"settings": { "allow_reentry": false },
"last_triggered_at": null,
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-01T10:00:02.204118+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully started.",
"notify": true
}{
"message": "Automation not found."
}Automatisierung pausieren
Setzt den Status der Automatisierung auf paused. Ihre Trigger starten keine neuen Durchläufe mehr, aber bereits laufende Durchläufe laufen weiter, auch solche, die in einem wait-Schritt warten. Erfordert einen API-Schlüssel mit dem Scope full.
Um auch laufende Durchläufe abzubrechen, stoppen Sie die Automatisierung stattdessen. Starten Sie sie erneut, damit Trigger wieder Durchläufe auslösen.
/automations/{id}/pausePfadparameter
idstringerforderlichaut_…).Rückgabe
Gibt die Automatisierung in data zurück, mit status auf paused. Gibt 404 zurück, wenn die Automatisierung nicht existiert.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "paused",
"settings": { "allow_reentry": false },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-04T08:10:51.004732+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully paused.",
"notify": true
}{
"message": "Automation not found."
}Automatisierung stoppen
Setzt den Status der Automatisierung auf stopped und bricht jeden Durchlauf ab, der noch running ist; diese Durchläufe erhalten den Status canceled, und ihre restlichen Schritte werden nicht ausgeführt. Erfordert einen API-Schlüssel mit dem Scope full.
Stoppen ist nur per API möglich. Um laufende Durchläufe weiterlaufen zu lassen, pausieren Sie die Automatisierung stattdessen. Sie können eine gestoppte Automatisierung erneut starten; neue Durchläufe beginnen dann von vorn.
/automations/{id}/stopPfadparameter
idstringerforderlichaut_…).Rückgabe
Gibt die Automatisierung in data zurück, mit status auf stopped. Gibt 404 zurück, wenn die Automatisierung nicht existiert.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "stopped",
"settings": { "allow_reentry": false },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-05T16:45:09.882301+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully stopped.",
"notify": true
}{
"message": "Automation not found."
}Durchlauf auslösen
Löst den Trigger system.manual mit einem Payload Ihrer Wahl aus. Die Automatisierung muss running sein und einen Trigger-Schritt system.manual haben, sonst startet kein Durchlauf. Erfordert einen API-Schlüssel mit dem Scope full. Manuelle Trigger sind nur per API verfügbar.
Der Durchlauf startet asynchron und kostet wie jeder andere Durchlauf 3 Credits. Sie finden ihn über Durchläufe auflisten.
/automations/{id}/triggerPfadparameter
idstringerforderlichaut_…).Body-Parameter
payloadobjectDaten für den Durchlauf. Emailit ergänzt automation_id und speichert das Ergebnis als payload des Durchlaufs. Schritte können ihn mit Platzhaltern wie {{payload.order_id}} und in Bedingungen wie payload.plan lesen.
Worum es im Durchlauf geht, hängt vom Kontext der Automatisierung ab:
contact: Übergeben Siecontact_id(con_…). Kontaktaktionen undsend_emailverwenden diesen Kontakt.email: Übergeben Sieemail_id(em_…). E-Mail-Aktionen verwenden diese E-Mail.event: beliebige Daten. Setzen Sietooderemailin den Aktionskonfigurationen, zum Beispiel"to": "{{payload.customer_email}}".
Rückgabe
Gibt 200 mit einer message zurück, sobald der Trigger in die Warteschlange gestellt ist. Gibt 422 zurück, wenn die Automatisierung nicht running ist, und 404, wenn sie nicht existiert.
{
"message": "Automation trigger dispatched."
}{
"message": "Automation must be running to trigger."
}{
"message": "Automation not found."
}Durchläufe auflisten
Gibt die Durchläufe einer Automatisierung zurück, die neuesten zuerst. Jeder Durchlauf ist ein Durchgang durch den Graphen, gestartet von einem Trigger. Erfordert einen API-Schlüssel mit dem Scope full.
/automations/{id}/runsPfadparameter
idstringerforderlichaut_…).Query-Parameter
pageintegerStandardwert: 1per_pageintegerStandardwert: 25filter[status]stringrunning, completed, failed oder canceled.filter[contact_id]stringcon_…). Die Durchläufe eines Kontakts in allen Automatisierungen liefert Durchläufe eines Kontakts auflisten.Sie können auch mit key.condition=value auf status, event und created_at filtern (zum Beispiel created_at.after=2026-10-01) und mit order und direction nach denselben Schlüsseln sortieren. Siehe Filtern.
Rückgabe
dataobject[]total_records, per_page, current_page, total_pagesintegerJeder Durchlauf hat:
idstringaur_.automation_idstringaut_…).contact_idstring | nullcon_…) im Kontext contact.email_idstring | nullem_…) im Kontext email.event_idstring | nulleventstringcontact.added_to_audience oder system.manual.payloadobjectmetaobjectfailure_reason.statusstringrunning, completed, failed oder canceled.cancel_reasonstring | nullexit_condition, left_audience, canceled_by_user (oder der von Ihnen gesendete reason), exited_by_api, exited_by_automation, automation_stopped oder contact_deleted.started_at, completed_at, created_at, updated_atstring | null{
"data": [
{
"id": "aur_3q6GdFk2eRSG093grI0v9e6REu8",
"automation_id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"contact_id": "con_3munwNLaXKUARc6ff9wPtxKVq4A",
"email_id": null,
"event_id": null,
"event": "contact.added_to_audience",
"payload": {},
"meta": {},
"status": "failed",
"started_at": "2026-10-03T14:12:40.551870+00:00",
"completed_at": "2026-10-03T14:12:41.093355+00:00",
"created_at": "2026-10-03T14:12:40.551870+00:00",
"updated_at": "2026-10-03T14:12:41.093355+00:00"
}
],
"total_records": 1,
"per_page": 25,
"current_page": 1,
"total_pages": 1
}{
"message": "Automation not found."
}Durchlauf abrufen
Ruft einen Durchlauf einer Automatisierung ab, einschließlich der ausgeführten Schritte. Erfordert einen API-Schlüssel mit dem Scope full.
/automations/{id}/runs/{run_id}Pfadparameter
idstringerforderlichaut_…).run_idstringerforderlichaur_…).Rückgabe
Gibt den Durchlauf in data zurück, mit den unter Durchläufe auflisten beschriebenen Feldern sowie dem vollständigen payload und meta, einem Array run_steps und einem Array waits.
payloadobject | null{ "object": { … } }) oder der Payload, den Sie an Durchlauf auslösen übergeben haben, ergänzt um automation_id.metaobject | nullsource_event_id verknüpft den Durchlauf mit dem Event, das ihn gestartet hat. Fehlgeschlagene Durchläufe können failure_reason enthalten: insufficient_credits (die 3 Credits für den Durchlauf konnten nicht abgebucht werden) oder run_timeout (der Durchlauf war nach 72 Stunden noch running, ohne dass ein Schritt wartete). Abgebrochene Durchläufe haben cancel_reason, und abgeschlossene Durchläufe, die vorzeitig endeten, haben ended_by, etwa end_run_step, moved_to_automation oder goal_not_met. Durchläufe, die eine andere Automatisierung gestartet hat, haben depth und entweder parent_run_id (gestartet von einem Schritt Start automation) oder caused_by (gestartet durch eine Änderung, die ein Schritt vorgenommen hat).run_stepsobject[]Ein Eintrag pro Schritt, den der Durchlauf erreicht hat:
step_id: die ID des Schritts (aus_…), dazustep_keyundaction, Schlüssel und Aktion des Schritts.status:running,waiting(ein Schrittwaitoderwait_until, der noch nicht abgeschlossen ist),completed,failed,skipped(übergangen, weil der Durchlauf zu einem Ziel gesprungen ist oder vorzeitig endete) odercanceled.outcome: das Ergebnis, zum Beispiel der aktuelle Status der E-Mail, die ein Schrittsend_emailgesendet hat (delivered,loaded,clicked…),skippedfür eine Marketing-E-Mail an einen abgemeldeten Kontakt,matchedodernot_matchedfür eine Bedingung,matchedodertimeoutfür einwait_untiloderreachedodernot_reachedfür ein Ziel.data: das Ergebnis des Schritts. Zum Beispiel gibtsend_email{ "result": "email_queued", "email_oid": "em_…", "to": "…" }zurück,conditiongibt{ "result": true, "branch": "yes" }zurück, und fehlgeschlagene Schritte geben{ "error": "…" }zurück.started_at,completed_at,created_at.
waitsobject[]Die Wartezustände des Durchlaufs aus wait_until (Event oder Bedingung) und goal: id, step_key, kind (event oder condition), event, status (waiting, matched, timed_out oder canceled), timeout_at, created_at und resolved_at.
Gibt 404 zurück, wenn die Automatisierung oder der Durchlauf nicht existiert.
{
"data": {
"id": "aur_3q6GdFk2eRSG093grI0v9e6REu8",
"automation_id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"contact_id": "con_3munwNLaXKUARc6ff9wPtxKVq4A",
"email_id": null,
"event_id": null,
"event": "contact.added_to_audience",
"payload": {
"object": {
"id": "sub_3Fh2pQx9LmZr4Wt7Nc0bVd8KsYe",
"object": "subscriber",
"subscribed": true,
"audience": { "id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "name": "Newsletter" },
"contact": { "id": "con_3munwNLaXKUARc6ff9wPtxKVq4A", "email": "ada@example.com" }
}
},
"meta": { "source_event_id": "evt_3Kd8sWq1NzXc5Vb7Mt2LpRy0HgA" },
"status": "running",
"started_at": "2026-10-03T14:12:40.551870+00:00",
"completed_at": null,
"created_at": "2026-10-03T14:12:40.551870+00:00",
"updated_at": "2026-10-03T14:12:40.551870+00:00",
"run_steps": [
{
"step_id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"status": "completed",
"data": {
"result": "email_queued",
"outcome": "accepted",
"email_oid": "em_3Cp8cMgPskzB8tIlgUyNJkpDp9O",
"to": "ada@example.com"
},
"started_at": "2026-10-03T14:12:40.702113+00:00",
"completed_at": "2026-10-03T14:12:40.918540+00:00",
"created_at": "2026-10-03T14:12:40.702113+00:00"
},
{
"step_id": "aus_3vM0ORwEXCQcyS7rylfQBQEXjVk",
"status": "waiting",
"data": { "status": "waiting", "delayMs": 86400000, "seconds": 86400 },
"started_at": "2026-10-03T14:12:41.004221+00:00",
"completed_at": null,
"created_at": "2026-10-03T14:12:41.004221+00:00"
}
]
}
}{
"message": "Run not found."
}Durchlauf abbrechen
Bricht einen Durchlauf ab, der noch running ist. Schritte, die in einem Time delay oder Wait until warten, werden abgebrochen, es laufen keine weiteren Schritte, und der Status des Durchlaufs wird canceled. Erfordert einen API-Schlüssel mit dem Scope full.
Abgebrochene Durchläufe lassen sich nicht fortsetzen. Um alle Durchläufe eines Kontakts in der Automatisierung abzubrechen, verwenden Sie Kontakt entfernen. Um Durchläufe automatisch abzubrechen, verwenden Sie Ausstiegsbedingungen.
/automations/{id}/runs/{run_id}/cancelPfadparameter
idstringerforderlichaut_…).run_idstringerforderlichaur_…).Body-Parameter
reasonstringStandardwert: canceled_by_usercancel_reason des Durchlaufs gespeichert, bis zu 200 Zeichen.Rückgabe
Gibt den Durchlauf in data zurück, mit status canceled und cancel_reason. Gibt 404 zurück, wenn die Automatisierung oder der Durchlauf nicht existiert, und 422, wenn der Durchlauf nicht läuft.
Kontakt aus einer Automatisierung entfernen
Bricht jeden Durchlauf dieser Automatisierung ab, der für einen Kontakt noch running ist, zum Beispiel aus Ihrem Shop, wenn eine Bestellung bezahlt ist. Die Durchläufe erhalten den Status canceled. Erfordert einen API-Schlüssel mit dem Scope full.
Um Kontakte automatisch herauszunehmen, wenn etwas passiert, verwenden Sie stattdessen Ausstiegsbedingungen.
/automations/{id}/exitPfadparameter
idstringerforderlichaut_…).Body-Parameter
contact_idstringcon_…). Senden Sie diesen Parameter oder email.emailstringreasonstringStandardwert: exited_by_apicancel_reason jedes Durchlaufs gespeichert, bis zu 200 Zeichen.Rückgabe
dataobjectautomation_id, contact_id und canceled_runs, die IDs der abgebrochenen Durchläufe. Leer, wenn der Kontakt keine laufenden Durchläufe hatte.messagestringCanceled 1 run.Gibt ohne contact_id oder email 400 zurück und 404, wenn die Automatisierung oder der Kontakt nicht existiert.
Durchläufe eines Kontakts auflisten
Gibt die neuesten 100 Durchläufe eines Kontakts in allen Automatisierungen zurück, die neuesten zuerst, jeweils mit dem Namen der Automatisierung. Erfordert einen API-Schlüssel mit dem Scope full.
/automations/runsQuery-Parameter
contact_idstringcon_…). Senden Sie diesen Parameter oder email.emailstringstatusstringrunning, completed, failed oder canceled.Rückgabe
dataobject[]automation_name.Gibt ohne contact_id oder email 400 zurück und 404, wenn der Kontakt nicht existiert.
Statistiken abrufen
Gibt Zählwerte für jeden Schritt einer Automatisierung zurück, nach Schrittschlüssel geordnet. Erfordert einen API-Schlüssel mit dem Scope full.
/automations/{id}/statsPfadparameter
idstringerforderlichaut_…).Query-Parameter
sincestring2026-10-01T00:00:00Z.untilstringrun_ids[]stringaur_…). Wiederholen Sie den Parameter für mehrere Durchläufe.Rückgabe
Gibt data zurück, ein Objekt mit einem Eintrag pro Schrittschlüssel. Schritte, die kein Durchlauf erreicht hat, haben total mit dem Wert 0.
totalintegerby_statusobjectrunning, waiting, completed, failed.by_outcomeobjectsend_email und forward_email: accepted, dann der letzte Zustand der E-Mail (delivered, loaded, clicked, bounced, failed, complained, unsubscribed, canceled). condition: matched, not_matched. experiment: der Schlüssel der gewählten Variante. call_webhook: 2xx, 4xx, 5xx, timeout, network_error. Fehlgeschlagene Schritte: error.funnelobjectsend_email. Kumulierte Zählwerte: accepted umfasst jede E-Mail, die weiter gekommen ist, delivered umfasst geladene und geklickte E-Mails, und loaded umfasst geklickte. bounced, failed, complained und unsubscribed sind einfache Zählwerte.{
"data": {
"joined": { "total": 0, "by_status": {}, "by_outcome": {} },
"welcome_email": {
"total": 412,
"by_status": { "completed": 409, "failed": 3 },
"by_outcome": { "delivered": 251, "loaded": 98, "clicked": 41, "bounced": 19, "error": 3 },
"funnel": {
"accepted": 390,
"delivered": 390,
"loaded": 139,
"clicked": 41,
"bounced": 19,
"failed": 0,
"complained": 0,
"unsubscribed": 0
}
},
"wait_1_day": {
"total": 409,
"by_status": { "completed": 352, "waiting": 57 },
"by_outcome": {}
},
"is_free_user": {
"total": 352,
"by_status": { "completed": 352 },
"by_outcome": { "matched": 270, "not_matched": 82 }
},
"upgrade_tips": {
"total": 270,
"by_status": { "completed": 270 },
"by_outcome": { "accepted": 12, "delivered": 180, "loaded": 61, "clicked": 17 },
"funnel": {
"accepted": 270,
"delivered": 258,
"loaded": 78,
"clicked": 17,
"bounced": 0,
"failed": 0,
"complained": 0,
"unsubscribed": 0
}
},
"done": {
"total": 82,
"by_status": { "completed": 82 },
"by_outcome": {}
}
}
}{
"message": "Automation not found."
}Schrittstatistiken abrufen
Gibt die Zählwerte für einen Schritt einer Automatisierung zurück. Erfordert einen API-Schlüssel mit dem Scope full. Die Felder sind dieselben wie unter Statistiken abrufen.
/automations/{id}/steps/{step_key}/statsPfadparameter
idstringerforderlichaut_…).step_keystringerforderlichkey des Schritts, zum Beispiel welcome_email.Query-Parameter
sincestringuntilstringRückgabe
Gibt data mit total, by_status, by_outcome und bei Schritten vom Typ send_email mit funnel zurück. Gibt 404 zurück, wenn die Automatisierung oder der Schrittschlüssel nicht existiert.
{
"data": {
"total": 412,
"by_status": { "completed": 409, "failed": 3 },
"by_outcome": { "delivered": 251, "loaded": 98, "clicked": 41, "bounced": 19, "error": 3 },
"funnel": {
"accepted": 390,
"delivered": 390,
"loaded": 139,
"clicked": 41,
"bounced": 19,
"failed": 0,
"complained": 0,
"unsubscribed": 0
}
}
}{
"message": "Step not found."
}