MailLandDocs
Pazarlama

Segmentler

Abone özelliklerine ve davranışlarına dayalı dinamik segmentler oluşturun

Segmentler, koşullarla tanımlanan dinamik abone gruplarıdır. Statik listelerden farklı olarak, segmentler abone verileri değiştikçe otomatik olarak güncellenir. Özellikler, etkileşim ve davranışa göre belirli kitleleri hedeflemek için kampanyalarda segmentleri kullanın.

Eşleşme Türleri

Eşleşme TürüDeğerAçıklama
All0Tüm koşullar eşleşmelidir (AND mantığı)
Any1Herhangi bir koşul eşleşebilir (OR mantığı)

Segment Oluşturma

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"
    }
  ]
}
AlanTürZorunluAçıklama
namestringEvetSegment adı (çalışma alanı başına benzersiz)
descriptionstringHayırSegment açıklaması
matchTypestringHayırAll (varsayılan) veya Any
conditionsarrayEvetEn az bir koşul
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" }
    ]
  }'

Yanıt

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

Yanıtlar, oluşturma/güncelleme isteği "All"/"Any" kabul etse bile matchType'ı küçük harfle ("all" / "any") döndürür.

Açma/tıklamaya dayalı koşul alanları (emailsopened, lastemailopenedat vb.), bugün filtrelenmeyen makine etkinliğini, Apple Mail Privacy Protection ön yüklemesi ve güvenlik bağlantı tarayıcılarını, içerir.

Belgelenmemiş bir GET /{id}/preview uç noktası da mevcuttur ve segmentin koşullarıyla şu anda eşleşen abonelerden bir örnek döndürür.

Koşul Alanları

Metin Alanları

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

OperatörAçıklamaDeğer Gerekli
equalsTam eşleşmeEvet
notequalsEşit değilEvet
containsAlt dizi içerirEvet
notcontainsİçermezEvet
startswithŞununla başlarEvet
endswithŞununla biterEvet
isemptyAlan boşHayır
isnotemptyAlan boş değilHayır

Sayısal Alanlar

Alanlar: emailssent, emailsopened, emailsclicked

OperatörAçıklamaDeğer GerekliDeğer2 Gerekli
equalsEşittirEvetHayır
notequalsEşit değilEvetHayır
greaterthanBüyüktürEvetHayır
greaterthanorequalBüyük veya eşitEvetHayır
lessthanKüçüktürEvetHayır
lessthanorequalKüçük veya eşitEvetHayır
betweenİki değer arasındaEvetEvet

Tarih Alanları

Alanlar: createdat, subscribedat, lastemailsentat, lastemailopenedat, lastemailclickedat

OperatörAçıklamaDeğer Gerekli
equalsBelirli bir tarihteEvet (ISO tarih)
beforeTarihten önceEvet (ISO tarih)
afterTarihten sonraEvet (ISO tarih)
onorbeforeTarihte veya önceEvet (ISO tarih)
onorafterTarihte veya sonraEvet (ISO tarih)
betweenTarihler arasındaEvet (value + value2)
inlastSon N gündeEvet (tam sayı gün)
isnullTarih belirlenmemişHayır
isnotnullTarih belirlenmişHayır

Enum Alanları

Alan: status

OperatörAçıklamaDeğerler
equalsDuruma eşitActive, Unsubscribed, Bounced, Complained
notequalsEşit değilAynı değerler

Koşul Örnekleri

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 Meta Verilerini Alma

Segment koşulları oluşturmak için mevcut tüm alanları, operatörleri ve enum değerlerini alın:

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

Segmentleri Listeleme

GET https://api.mail.land/v1/marketing/segments
ParametreTürVarsayılanAçıklama
cursorstring-Önceki sayfanın nextCursor değerinden alınan opak imleç. İlk sayfa için belirtmeyin.
limitint20Sayfa başına öğe
searchstring-Ad veya açıklamada ara
sortBystring-Sıralama alanı
sortDescboolfalseAzalan sıralama
List segments
curl "https://api.mail.land/v1/marketing/segments?limit=20" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Segment Ayrıntılarını Alma

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

Koşullarıyla birlikte tam segmenti döndürür:

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

Koşulları Önizleme

Segment oluşturmadan önce koşulların sonucunu önizleyin. Segment değerlendirmesi her zaman Active durumundaki abonelerle sınırlıdır, bu nedenle status notequals Active gibi bir koşul kimseyle eşleşmez.

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

Segment Sayısını Alma

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 Önbelleğini Yenileme

Eşleşen abonelerin yeniden sayılmasını zorla:

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 Kopyalama

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

Klonlanmış koşullarla yeni bir segment oluşturur. name parametresi isteğe bağlıdır.

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

Segment Güncelleme

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

İstek gövdesi oluşturma isteğiyle aynıdır. Bir segmenti güncellemek, önbelleğe alınan sayısını otomatik olarak yeniler.

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 Silme

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

Bir segmenti silmek, onu hedefleyen Draft veya Scheduled durumundaki her kampanyadan ayırır (kampanyanın segmentId alanı temizlenir); bu da kampanyayı hedef kitlesiz bırakır: gönderim 422 döner veya kimseye teslim edilmez. Zaten Sending durumunda olan bir kampanya etkilenmez, çünkü alıcıları daha önce belirlenmiştir.

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

Hata Yanıtları

DurumKodAçıklama
400VALIDATION_FAILEDAd veya koşullar geçersiz
400INVALID_REQUESTSegment adı zaten mevcut
403FORBIDDENYetersiz izinler
404RESOURCE_NOT_FOUNDSegment bulunamadı

Sonraki Adımlar

  • Kampanyalar: kampanyaları segmentlerle hedefleme
  • Otomasyonlar: otomasyonlar şu anda segment üyeliğine göre tetiklenmez
  • Aboneler: segmentlerinizdeki kişileri yönetme

Bu sayfada