MailLandDocs
Marketing

Segmente

Erstellen Sie dynamische Segmente basierend auf Abonnentenattributen und -verhalten

Segmente sind dynamische Abonnentengruppen, die durch Bedingungen definiert werden. Im Gegensatz zu statischen Listen werden Segmente automatisch aktualisiert, wenn sich Abonnentendaten ändern. Verwenden Sie Segmente, um Kampagnen auf bestimmte Zielgruppen basierend auf Attributen, Engagement und Verhalten auszurichten.

Übereinstimmungstypen

ÜbereinstimmungstypWertBeschreibung
All0Alle Bedingungen müssen übereinstimmen (AND-Logik)
Any1Jede Bedingung kann übereinstimmen (OR-Logik)

Segment erstellen

POST https://api.mail.land/v1/marketing/segments
Create segment request
{
  "name": "Active Engaged Users",
  "description": "Users who opened or clicked in last 30 days",
  "matchType": "All",
  "conditions": [
    {
      "field": "lastemailopenedat",
      "operator": "inlast",
      "value": "30"
    },
    {
      "field": "status",
      "operator": "equals",
      "value": "Active"
    }
  ]
}
FeldTypErforderlichBeschreibung
namestringJaSegmentname (eindeutig pro Arbeitsbereich)
descriptionstringNeinSegmentbeschreibung
matchTypestringNeinAll (Standard) oder Any
conditionsarrayJaMindestens eine Bedingung
Create a segment
curl -X POST https://api.mail.land/v1/marketing/segments \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Active Engaged Users",
    "matchType": "All",
    "conditions": [
      { "field": "lastemailopenedat", "operator": "inlast", "value": "30" },
      { "field": "status", "operator": "equals", "value": "Active" }
    ]
  }'

Antwort

Segment response
{
  "id": "0qe306asbapwvd",
  "name": "Active Engaged Users",
  "description": "Users who opened or clicked in last 30 days",
  "matchType": "all",
  "matchTypeName": "All",
  "conditionsCount": 2,
  "subscriberCount": 450,
  "createdAt": "2026-02-17T12:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

Antworten geben matchType in Kleinbuchstaben zurück ("all" / "any"), auch wenn die Erstellungs-/Aktualisierungsanfrage "All"/"Any" akzeptiert.

Bedingungsfelder, die auf Öffnungen/Klicks basieren (emailsopened, lastemailopenedat usw.), enthalten maschinelle Aktivität, Apple Mail Privacy Protection Prefetch und Sicherheits-Link-Scanner, die heute nicht herausgefiltert wird.

Ein undokumentierter Endpunkt GET /{id}/preview existiert ebenfalls und liefert eine Stichprobe von Abonnenten, die derzeit den Bedingungen des Segments entsprechen.

Bedingungsfelder

Textfelder

Felder: email, firstname, lastname, company, source, phone

OperatorBeschreibungWert erforderlich
equalsExakte ÜbereinstimmungJa
notequalsNicht gleichJa
containsEnthält TeilzeichenfolgeJa
notcontainsEnthält nichtJa
startswithBeginnt mitJa
endswithEndet mitJa
isemptyFeld ist leerNein
isnotemptyFeld ist nicht leerNein

Numerische Felder

Felder: emailssent, emailsopened, emailsclicked

OperatorBeschreibungWert erforderlichWert2 erforderlich
equalsGleichJaNein
notequalsNicht gleichJaNein
greaterthanGrößer alsJaNein
greaterthanorequalGrößer oder gleichJaNein
lessthanKleiner alsJaNein
lessthanorequalKleiner oder gleichJaNein
betweenZwischen zwei WertenJaJa

Datumsfelder

Felder: createdat, subscribedat, lastemailsentat, lastemailopenedat, lastemailclickedat

OperatorBeschreibungWert erforderlich
equalsAn bestimmtem DatumJa (ISO-Datum)
beforeVor DatumJa (ISO-Datum)
afterNach DatumJa (ISO-Datum)
onorbeforeAm oder vorJa (ISO-Datum)
onorafterAm oder nachJa (ISO-Datum)
betweenZwischen DatenJa (value + value2)
inlastIn den letzten N TagenJa (ganzzahlige Tage)
isnullDatum nicht gesetztNein
isnotnullDatum gesetztNein

Enum-Felder

Feld: status

OperatorBeschreibungWerte
equalsGleich StatusActive, Unsubscribed, Bounced, Complained
notequalsNicht gleichGleiche Werte

Bedingungsbeispiele

Email domain filter
{ "field": "email", "operator": "contains", "value": "example.com" }
High engagement filter
{ "field": "emailssent", "operator": "between", "value": "10", "value2": "50" }
Recent clickers
{ "field": "lastemailclickedat", "operator": "inlast", "value": "7" }
Missing first name
{ "field": "firstname", "operator": "isempty" }

Segment-Metadaten abrufen

Rufen Sie alle verfügbaren Felder, Operatoren und Enum-Werte für die Erstellung von Segmentbedingungen ab:

GET https://api.mail.land/v1/marketing/segments/metadata/fields
Get segment metadata
curl https://api.mail.land/v1/marketing/segments/metadata/fields \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Metadata response
{
  "fields": [
    {
      "name": "email",
      "label": "Email",
      "type": "string",
      "operators": ["equals", "notequals", "contains", "notcontains", "startswith", "endswith", "isempty", "isnotempty"],
      "enumValues": null
    },
    {
      "name": "status",
      "label": "Status",
      "type": "enum",
      "operators": ["equals", "notequals"],
      "enumValues": ["Active", "Unsubscribed", "Bounced", "Complained"]
    }
  ]
}

Segmente auflisten

GET https://api.mail.land/v1/marketing/segments
ParameterTypStandardBeschreibung
cursorstring-Opaker Cursor aus dem nextCursor der vorherigen Seite. Für die erste Seite weglassen.
limitint20Elemente pro Seite
searchstring-Nach Name oder Beschreibung suchen
sortBystring-Sortierfeld
sortDescboolfalseAbsteigend sortieren
List segments
curl "https://api.mail.land/v1/marketing/segments?limit=20" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Segmentdetails abrufen

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

Gibt das vollständige Segment mit seinen Bedingungen zurück:

Get segment details
curl https://api.mail.land/v1/marketing/segments/0qe306asbapwvd \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Segment detail response
{
  "id": "0qe306asbapwvd",
  "name": "Active Engaged Users",
  "description": "Users who engaged in last 30 days",
  "matchType": "all",
  "matchTypeName": "All",
  "conditionsCount": 2,
  "subscriberCount": 450,
  "conditions": [
    {
      "field": "lastemailopenedat",
      "operator": "inlast",
      "value": "30",
      "value2": null
    },
    {
      "field": "status",
      "operator": "equals",
      "value": "Active",
      "value2": null
    }
  ],
  "cachedCount": 450,
  "cachedAt": "2026-02-17T10:00:00Z",
  "createdAt": "2026-01-10T08:00:00Z",
  "updatedAt": "2026-02-17T10:00:00Z"
}

Bedingungen in der Vorschau anzeigen

Zeigen Sie das Ergebnis der Bedingungen vor der Erstellung eines Segments in der Vorschau an. Die Segmentauswertung beschränkt sich immer auf Abonnenten mit dem Status Active, sodass eine Bedingung wie status notequals Active auf niemanden zutrifft.

POST https://api.mail.land/v1/marketing/segments/preview
Preview request
{
  "conditions": [
    { "field": "lastemailopenedat", "operator": "inlast", "value": "30" }
  ],
  "matchType": "All"
}
Preview segment conditions
curl -X POST https://api.mail.land/v1/marketing/segments/preview \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "conditions": [
      { "field": "lastemailopenedat", "operator": "inlast", "value": "30" }
    ],
    "matchType": "All"
  }'
Preview response
{
  "count": 450,
  "sampleEmails": [
    "[email protected]",
    "[email protected]",
    "[email protected]"
  ]
}

Segmentanzahl abrufen

GET https://api.mail.land/v1/marketing/segments/{id}/count
Get segment count
curl https://api.mail.land/v1/marketing/segments/0qe306asbapwvd/count \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Count response
{
  "segmentId": "0qe306asbapwvd",
  "count": 450
}

Segment-Cache aktualisieren

Erzwingen Sie eine erneute Zählung der übereinstimmenden Abonnenten:

POST https://api.mail.land/v1/marketing/segments/{id}/refresh
Refresh segment cache
curl -X POST https://api.mail.land/v1/marketing/segments/0qe306asbapwvd/refresh \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Refresh response
{
  "segmentId": "0qe306asbapwvd",
  "count": 460,
  "refreshedAt": "2026-02-17T12:30:00Z"
}

Segment duplizieren

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

Erstellt ein neues Segment mit geklonten Bedingungen. Der Parameter name ist optional.

Duplicate a segment
curl -X POST "https://api.mail.land/v1/marketing/segments/0qe306asbapwvd/duplicate?name=Copy%20of%20Segment" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Segment aktualisieren

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

Der Anfragekörper entspricht der Erstellungsanfrage. Das Aktualisieren eines Segments aktualisiert automatisch dessen zwischengespeicherte Anzahl.

Update a segment
curl -X PUT https://api.mail.land/v1/marketing/segments/0qe306asbapwvd \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Active Engaged Users (Updated)",
    "matchType": "All",
    "conditions": [
      { "field": "lastemailopenedat", "operator": "inlast", "value": "14" },
      { "field": "status", "operator": "equals", "value": "Active" }
    ]
  }'

Segment löschen

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

Das Löschen eines Segments trennt es von jeder Kampagne im Status Draft oder Scheduled, die es als Ziel hat (die segmentId der Kampagne wird geleert), wodurch diese Kampagne keine Zielgruppe mehr hat: beim Senden erhalten Sie 422, oder es wird an niemanden zugestellt. Eine Kampagne, die sich bereits im Status Sending befindet, ist davon nicht betroffen, da ihre Empfänger bereits aufgelöst wurden.

Delete a segment
curl -X DELETE https://api.mail.land/v1/marketing/segments/0qe306asbapwvd \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Fehlerantworten

StatusCodeBeschreibung
400VALIDATION_FAILEDName oder Bedingungen ungültig
400INVALID_REQUESTSegmentname existiert bereits
403FORBIDDENUnzureichende Berechtigungen
404RESOURCE_NOT_FOUNDSegment nicht gefunden

Nächste Schritte

  • Kampagnen: Kampagnen mit Segmenten ausrichten
  • Automatisierungen: Automatisierungen werden derzeit nicht durch Segmentzugehörigkeit ausgelöst
  • Abonnenten: Kontakte in Ihren Segmenten verwalten

Auf dieser Seite