MailLandDocs
Marketing

Automatisierungen

Richten Sie triggerbasierte E-Mail-Sequenzen ein, die automatisch basierend auf Abonnentenverhalten ausgeführt werden

Mit Automatisierungen können Sie mehrstufige E-Mail-Sequenzen erstellen, die durch Abonnenten-Events ausgelöst werden. Definieren Sie einen Trigger, erstellen Sie eine Abfolge von Schritten, und MailLand führt den Ablauf automatisch aus, sobald der Trigger auslöst.

Automatisierungs-Trigger

Jede Automatisierung beginnt mit einem einzelnen Trigger:

TriggerWertBeschreibung
SubscriberJoins0Abonnent wird einer Mailingliste hinzugefügt
SubscriberUpdated1Abonnentenprofil wird aktualisiert
CampaignOpened2Abonnent öffnet eine bestimmte Kampagne
CampaignClicked3Abonnent klickt einen Link in einer Kampagne
DateBased4Nur Geburtstags-Trigger: wertet Subscriber.Birthday aus (siehe Hinweis unten)

DateBased wertet ausschließlich Subscriber.Birthday aus, nicht ein beliebiges wiederkehrendes Datumsfeld. Birthday lässt sich über POST/PUT /v1/marketing/subscribers setzen (siehe Abonnenten-Seite) sowie über den CSV-Import, der eine optionale birthday-Spalte akzeptiert, sodass eine DateBased-Automatisierung jeden Abonnenten einschreibt, dessen Geburtstag auf einem der beiden Wege gesetzt wurde.

| Manual | 5 | Manuell über API ausgelöst |

Automatisierungsstatus

StatusWertBeschreibung
Draft0Bearbeitbar, läuft nicht
Active1Aktiv: neue Abonnenten werden bei Triggerauslösung aufgenommen
Paused2Pausiert: keine neuen Aufnahmen, und weitere Schritte stoppen für bereits eingeschriebene Abonnenten. Erneutes Aktivieren (Active) setzt sie genau dort fort, wo sie angehalten wurden, und liefert alles nach, was während der Pause fällig wurde
Archived3Archiviert: in Standardansichten ausgeblendet. Wie Paused stoppt dies neue Einschreibungen; weitere Schritte stoppen auch für bereits eingeschriebene Abonnenten. Es gibt keinen Endpunkt zum Dearchivieren, dieser Stopp ist für diese Einschreibungen also dauerhaft

Schritttypen

Jede Automatisierung enthält eine geordnete Abfolge von Schritten:

SchritttypWertBeschreibung
SendEmail0Eine E-Mail an den Abonnenten senden
Wait1Eine bestimmte Dauer warten, bevor es weitergeht
Condition2Wertet ein Abonnentenfeld aus; ein Gate, das bei „wahr" fortfährt und bei „falsch" die Einschreibung beendet (siehe Condition-Schritt weiter unten)
AddToList3Abonnent einer Mailingliste hinzufügen
RemoveFromList4Abonnent aus einer Mailingliste entfernen
UpdateSubscriber5Abonnentenfelder aktualisieren
Webhook6Einen Webhook an eine externe URL senden

Personalisierung

Automatisierungs-E-Mail-Schritte unterstützen {{variable}}-Merge-Tags, die pro Empfänger durch den Datensatz des eingeschriebenen Abonnenten ersetzt werden.

TagWert
{{firstName}}Vorname des Abonnenten
{{lastName}}Nachname des Abonnenten
{{fullName}}Vor- und Nachname zusammen
{{email}}E-Mail-Adresse des Abonnenten
{{subscriberId}}Undurchsichtige Abonnenten-ID
{{custom_<field>}}Jedes benutzerdefinierte Feld des Abonnenten, auch verfügbar als {{<field>}}
Personalisierter Automatisierungsschritt
<p>Hi {{firstName}}, here's what's new this month.</p>

Ein Tag ohne Wert bleibt genau so stehen, wie er geschrieben wurde: {{firstName}} bleibt für einen Abonnenten ohne Vornamen in der zugestellten E-Mail als {{firstName}} bestehen, statt zu einer leeren Lücke zu werden. Schreiben Sie Inhalte, die in beiden Fällen korrekt gelesen werden. Verwenden Sie eine Ausweich-Anrede, wenn Sie nicht sicher sind, dass jeder Abonnent das Feld hat.

Werte werden je nach Zielbereich escaped: HTML-Inhalt wird HTML-escaped, während Betreffzeile und Klartext-Body niemals escaped werden, Ben & Jerry's bleibt genau so.

Die älteren Snake-Case-Schreibweisen ({{first_name}}, {{last_name}}, {{full_name}}, {{subscriber_id}}) funktionieren weiterhin als Aliase.

Automatisierung erstellen

POST https://api.mail.land/v1/marketing/automations
Create automation request
{
  "name": "Welcome Series",
  "description": "3-email welcome sequence for new subscribers",
  "trigger": 0,
  "mailingListId": "7h3n5k8w2q9m1t",
  "campaignId": null,
  "steps": [
    {
      "type": 0,
      "order": 1,
      "templateId": "2p9x4k7m3q8n1z",
      "subject": "Welcome to our newsletter!"
    },
    {
      "type": 1,
      "order": 2,
      "delayMinutes": 1440
    },
    {
      "type": 0,
      "order": 3,
      "templateId": "9k4p2x7m1q3n8z"
    }
  ]
}
FeldTypErforderlichBeschreibung
namestringJaAutomatisierungsname (eindeutig pro Workspace)
descriptionstringNeinAutomatisierungsbeschreibung
triggerintJaTriggertyp (siehe Trigger-Tabelle)
mailingListIdstringNeinZiel-Mailingliste für den Trigger
campaignIdstringNeinOptional für CampaignOpened / CampaignClicked Trigger: wenn weggelassen, löst der Trigger bei jeder Kampagne aus, nicht nur bei einer
stepsarrayJaGeordnete Abfolge von Schritten

Es gibt kein segmentId-Feld bei einer Automatisierung: dieses Feld existiert hier nicht (Segmente werden anderswo verwendet, z. B. bei Kampagnen). Der Inhalt eines SendEmail-Schritts stammt aus templateId, nicht aus inline htmlContent/textContent/fromName/fromEmail.

campaignId ist bei den Öffnen-/Klick-Triggern optional, nicht erforderlich, wie frühere Versionen dieser Seite angaben. Der Trigger löst außerdem bei maschinellen Öffnungen aus (Apple Mail Privacy Protection Prefetch, Sicherheits-Link-Scanner), die MailLand heute nicht herausfiltert.

Schrittfelder

Jeder Schritt hat tatsächlich die Form { order, type, delayMinutes, templateId, subject, settings: {} }: es gibt kein segmentId auf Automatisierungsebene, und Schritte haben nicht die typspezifischen Felder, die in früheren Versionen dieser Seite gezeigt wurden (conditionField, targetMailingListId, updateField, webhookUrl, fromName, fromEmail, replyTo sind keine Top-Level-Schrittfelder). Die folgenden Tabellen zeigen die tatsächliche Form.

SendEmail-Schritt (type: 0):

FeldTypErforderlichBeschreibung
typeintJa0
orderintJaPosition des Schritts in der Sequenz
delayMinutesintNeinMinuten Wartezeit, bevor dieser Schritt läuft: auch wenn er der erste Schritt ist: die Verzögerung vor dem allerersten Versand wird jetzt bei der Einschreibung berücksichtigt (früher wurde sie ignoriert)
templateIdstringJaVorlage, die den E-Mail-Inhalt liefert: der Inhalt stammt ausschließlich aus der Vorlage
subjectstringNeinÜberschreibt den Betreff der Vorlage, wenn gesetzt

Es gibt keinen inline htmlContent/textContent/fromName/fromEmail/replyTo bei einem Schritt. Der Absender ist fest auf noreply@<erste vollständig verifizierte Domain> eingestellt und wird mit dem Workspace-Namen angezeigt, nicht pro Schritt konfigurierbar.

templateId ist bei jedem SendEmail-Schritt erforderlich. Erstellungs-/Aktualisierungsanfragen ohne templateId werden mit 400 VALIDATION_FAILED abgelehnt; eine templateId, die auf keine Vorlage im eigenen Tenant verweist, wird mit 400 TEMPLATE_NOT_FOUND abgelehnt, beides, bevor irgendetwas gespeichert wird. Wird eine Vorlage nach dem Speichern der Automatisierung gelöscht, wird die Einschreibung des nächsten Abonnenten, der diesen Schritt erreicht, als Failed markiert statt den Schritt stillschweigend zu überspringen, und sie zählt zum totalFailed-Wert der Automatisierung (siehe Automatisierungsdetails abrufen).

Wait-Schritt (type: 1):

FeldTypErforderlichBeschreibung
typeintJa1
orderintJaPosition des Schritts
delayMinutesintJaMinuten Wartezeit vor dem nächsten Schritt

Condition-Schritt (type: 2):

Ein Condition-Schritt ist ein Gate, keine Verzweigung: Eine lineare Schrittliste hat keinen zweiten Pfad. Bei wahr fährt die Einschreibung mit dem nächsten Schritt fort. Bei falsch endet die Einschreibung dort (Completed), und kein späterer Schritt läuft für diesen Abonnenten.

FeldTypErforderlichBeschreibung
typeintJa2
orderintJaPosition des Schritts
settings.conditionFieldstringJaDas zu prüfende Abonnentenfeld: email, firstName, lastName, phone, company, source oder custom_<name> für ein benutzerdefiniertes Feld
settings.conditionOperatorstringJaequals, notEquals, contains, notContains, startsWith, endsWith, isEmpty, isNotEmpty (Groß-/Kleinschreibung wird ignoriert)
settings.conditionValuestringErforderlich außer bei isEmpty/isNotEmptyDer Vergleichswert

Vergleiche erfolgen als case-insensitive String-Vergleiche, dieselben Operatoren, die Segmente bereits anbieten. 400 VALIDATION_FAILED wird bei Erstellung/Aktualisierung zurückgegeben, wenn conditionField unbekannt ist, conditionOperator keiner der obigen Werte ist, oder conditionValue bei einem Operator fehlt, der einen Wert benötigt.

Ein Condition-Schritt, der vor Einführung dieser Validierung gespeichert wurde (dessen Einstellungen sich also nicht auswerten lassen), läuft aus Kontinuitätsgründen unverändert durch, validiert werden nur neue Erstellungs-/Aktualisierungsanfragen.

AddToList- / RemoveFromList-Schritte (type: 3, 4):

FeldTypErforderlichBeschreibung
typeintJa3 oder 4
orderintJaPosition des Schritts
settings.mailingListIdstringJaMailingliste zum Hinzufügen/Entfernen des Abonnenten, gelesen aus settings

UpdateSubscriber-Schritt (type: 5):

FeldTypErforderlichBeschreibung
typeintJa5
orderintJaPosition des Schritts
settingsobjectJaJeder Schlüssel in settings wird als benutzerdefiniertes Feld beim Abonnenten geschrieben

Webhook-Schritt (type: 6):

FeldTypErforderlichBeschreibung
typeintJa6
orderintJaPosition des Schritts
settings.urlstringJaURL für den POST-Request, gelesen aus settings

Anfragen von Webhook-Schritten werden mit einem Geheimnis des Empfängers des Schritts signiert (X-MLND-Signature, Prüfung wie bei Kunden-Webhooks): Jede eigene Schritt-URL hat ihr eigenes Geheimnis, sodass kein Empfänger für einen anderen signieren kann. Lesen Sie die Geheimnisse mit GET /v1/marketing/automations/{id}/webhook-signing-secrets und erneuern Sie sie mit POST /v1/marketing/automations/{id}/webhook-signing-secrets/regenerate, siehe Versionierung. Senden Sie { "webhookUrl": "…" }, um nur einen Empfänger zu rotieren.

Create an automation
curl -X POST https://api.mail.land/v1/marketing/automations \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome Series",
    "trigger": 0,
    "mailingListId": "7h3n5k8w2q9m1t",
    "steps": [
      {
        "type": 0, "order": 1,
        "subject": "Welcome!",
        "templateId": "2p9x4k7m3q8n1z"
      },
      { "type": 1, "order": 2, "delayMinutes": 1440 },
      {
        "type": 0, "order": 3,
        "subject": "Getting started",
        "templateId": "9k4p2x7m1q3n8z"
      }
    ]
  }'

Antwort

Automation response
{
  "id": "4f8k2m9p1q6z3s",
  "name": "Welcome Series",
  "description": "3-email welcome sequence for new subscribers",
  "trigger": "subscriberJoins",
  "triggerName": "SubscriberJoins",
  "status": "draft",
  "statusName": "Draft",
  "mailingListId": "7h3n5k8w2q9m1t",
  "mailingListName": "Product Updates",
  "campaignId": null,
  "campaignName": null,
  "stepsCount": 3,
  "totalEnrolled": 0,
  "totalCompleted": 0,
  "activatedAt": null,
  "createdAt": "2026-02-17T12:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

Es gibt kein segmentId/segmentName-Feld bei einer Automatisierung, und die Aufnahmezähler heißen totalEnrolled/totalCompleted (nicht totalEnrollments/activeEnrollments/completedEnrollments). Die Detailantwort fügt außerdem steps (die vollständige Schrittliste), completionRate und totalFailed hinzu: Einschreibungen, die einen SendEmail-Schritt ohne Vorlage im Tenant erreicht haben (fehlend oder inzwischen gelöscht).

Automatisierungen auflisten

GET https://api.mail.land/v1/marketing/automations
ParameterTypStandardBeschreibung
cursorstring-Opaker Cursor aus dem nextCursor der vorherigen Seite. Für die erste Seite weglassen.
limitint20Einträge pro Seite
searchstring-Nach Name suchen
statusint-Nach Automatisierungsstatus filtern
triggerint-Nach Triggertyp filtern
mailingListIdstring-Nach Mailingliste filtern
sortBystring-Sortierfeld
sortDescboolfalseAbsteigend sortieren
List automations
curl https://api.mail.land/v1/marketing/automations \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Automatisierungsdetails abrufen

GET https://api.mail.land/v1/marketing/automations/{id}

Gibt die vollständige Automatisierung einschließlich aller Schritte zurück:

Get automation details
curl https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Automation detail response
{
  "id": "4f8k2m9p1q6z3s",
  "name": "Welcome Series",
  "description": "3-email welcome sequence for new subscribers",
  "trigger": "subscriberJoins",
  "triggerName": "SubscriberJoins",
  "status": "active",
  "statusName": "Active",
  "mailingListId": "7h3n5k8w2q9m1t",
  "mailingListName": "Product Updates",
  "campaignId": null,
  "campaignName": null,
  "stepsCount": 3,
  "totalEnrolled": 230,
  "totalCompleted": 200,
  "totalFailed": 4,
  "activatedAt": "2026-01-10T08:05:00Z",
  "steps": [
    {
      "order": 1,
      "type": "sendEmail",
      "typeName": "SendEmail",
      "delayMinutes": null,
      "templateId": "2p9x4k7m3q8n1z",
      "subject": "Welcome to our newsletter!",
      "settings": null
    },
    {
      "order": 2,
      "type": "wait",
      "typeName": "Wait",
      "delayMinutes": 1440,
      "templateId": null,
      "subject": null,
      "settings": null
    },
    {
      "order": 3,
      "type": "sendEmail",
      "typeName": "SendEmail",
      "delayMinutes": null,
      "templateId": "9k4p2x7m1q3n8z",
      "subject": "Getting started with MailLand",
      "settings": null
    }
  ],
  "completionRate": 86.96,
  "createdAt": "2026-01-10T08:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

Automatisierung aktualisieren

PUT https://api.mail.land/v1/marketing/automations/{id}

Jeder Status außer Active kann aktualisiert werden (nicht nur Draft/Paused). Der Anfragekörper entspricht der Erstellungsanfrage.

Update an automation
curl -X PUT https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome Series",
    "trigger": 0,
    "mailingListId": "7h3n5k8w2q9m1t",
    "steps": [
      {
        "type": 0, "order": 1,
        "subject": "Welcome!",
        "templateId": "2p9x4k7m3q8n1z"
      },
      { "type": 1, "order": 2, "delayMinutes": 1440 },
      {
        "type": 0, "order": 3,
        "subject": "Getting started",
        "templateId": "9k4p2x7m1q3n8z"
      }
    ]
  }'

Automatisierung aktivieren

POST https://api.mail.land/v1/marketing/automations/{id}/activate

Überführt die Automatisierung von Draft oder Paused in den Status Active. Sobald sie aktiv ist, beginnt die Automatisierung mit der Aufnahme von Abonnenten, wenn der Trigger auslöst.

Die Aktivierung selbst wird nicht gegen die Domain-Verifizierung geprüft. Ein SendEmail-Schritt, der ohne vollständig verifizierte Domain erreicht wird, wird zurückgehalten, nicht übersprungen: Er wird in wachsenden Abständen erneut geprüft (15 Minuten, dann bis zu alle 6 Stunden) und wird zugestellt, sobald eine Domain verifiziert ist. Verifiziert sich innerhalb von 7 Tagen ab dem ersten Fälligwerden des Schritts keine Domain, wird die Einschreibung als Failed markiert (zählt zu totalFailed), statt endlos zu warten: die Aktivierung ohne verifizierte Domain gelingt also, aber nichts wird zugestellt, bis Sie eine Domain verifizieren, und Einschreibungen, die nach einer Woche noch warten, enden statt unbegrenzt zu halten.

Activate an automation
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/activate \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Automatisierung pausieren

POST https://api.mail.land/v1/marketing/automations/{id}/pause

Pausiert die Automatisierung. Es werden keine neuen Abonnenten aufgenommen, und Abonnenten, die sich bereits in der Sequenz befinden, kommen nicht weiter: jede Einschreibung hält an ihrem aktuellen Schritt an. Erneutes Aktivieren der Automatisierung setzt jede angehaltene Einschreibung dort fort, wo sie stand, und liefert alles nach, was während der Pause fällig wurde.

Pause an automation
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/pause \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Automatisierung archivieren

POST https://api.mail.land/v1/marketing/automations/{id}/archive

Archiviert die Automatisierung, was aus jedem Status heraus möglich ist, einschließlich Active. Archivierte Automatisierungen werden in Standardlistenansichten ausgeblendet.

Archivieren stoppt sowohl neue Aufnahmen als auch weitere Schritte für bereits aufgenommene Abonnenten: jede Einschreibung hält an ihrem aktuellen Schritt an, genau wie bei Pausieren. Anders als bei Pausieren gibt es keinen Endpunkt, der eine Archived-Automatisierung reaktiviert, dieser Stopp löst sich also nicht von selbst.

Archive an automation
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/archive \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Automatisierung duplizieren

POST https://api.mail.land/v1/marketing/automations/{id}/duplicate?name=Copy%20of%20Welcome%20Series

Erstellt eine neue Draft-Automatisierung mit kopierten Schritten und Einstellungen. Der Abfrageparameter name ist optional.

Duplicate an automation
curl -X POST "https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/duplicate?name=Copy%20of%20Welcome%20Series" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Manuell auslösen

POST https://api.mail.land/v1/marketing/automations/{id}/trigger
Manual trigger request
{
  "subscriberIds": ["3m8k1p9x4q7n2z", "6q2n9k4x1p8m3z", "1x7m3q8k2n9p4z"]
}

Nehmen Sie bestimmte Abonnenten manuell in die Automatisierung auf. Die Automatisierung muss den Status Active haben und ihr Triggertyp muss Manual (5) sein.

Trigger automation manually
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/trigger \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"subscriberIds": ["3m8k1p9x4q7n2z", "6q2n9k4x1p8m3z", "1x7m3q8k2n9p4z"]}'

Aufnahme-Tracking

Der Fortschritt jedes Abonnenten durch die Automatisierung wird als Aufnahme verfolgt:

StatusWertBeschreibung
Active0Durchläuft aktuell die Schritte
Paused1Aufnahme pausiert
Completed2Alle Schritte abgeschlossen
Failed3Ein SendEmail-Schritt hat keine Vorlage in diesem Tenant: von Anfang an fehlend oder inzwischen gelöscht. Wird im totalFailed-Wert der Automatisierung gezählt
Unsubscribed4Abonnent hat sich während der Sequenz abgemeldet

Es gibt keinen Aufnahmestatus Cancelled. Die Automatisierungsdetail-Antwort enthält aggregierte Aufnahmezahlen als totalEnrolled und totalCompleted (nicht totalEnrollments/activeEnrollments/completedEnrollments/failedEnrollments).

Automatisierung löschen

DELETE https://api.mail.land/v1/marketing/automations/{id}

Löscht die Automatisierung, ihre Schritte und Aufnahmedaten dauerhaft.

Aktualisieren und Löschen sind für jeden Status außer Active erlaubt: nicht nur Draft/Paused (Aktualisierung) oder Draft/Archived (Löschung), wie frühere Versionen dieser Seite angaben.

Delete an automation
curl -X DELETE https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Fehlerantworten

StatusCodeBeschreibung
400VALIDATION_FAILEDErforderliche Felder fehlen oder ungültige Schrittkonfiguration: auch ein SendEmail-Schritt ohne templateId oder ein Condition-Schritt mit nicht auswertbaren settings
400TEMPLATE_NOT_FOUNDDie templateId eines SendEmail-Schritts verweist auf keine Vorlage im eigenen Tenant
400INVALID_REQUESTAutomatisierungsname existiert bereits oder ungültiger Statusübergang
403FORBIDDENUnzureichende Berechtigungen
404RESOURCE_NOT_FOUNDAutomatisierung nicht gefunden, oder der Statusübergang ist ungültig (Aktualisierung/Aktivierung/Pausierung im falschen Status, Löschung einer Active-Automatisierung)

Die Automatisierungs-Endpunkte geben nie 422 zurück.

Nächste Schritte

  • Kampagnen: Einmalige Kampagnen versenden
  • Abonnenten: Kontakte verwalten, die Automatisierungen ansprechen
  • Listen: Abonnenten in Listen für Trigger organisieren

Auf dieser Seite