MailLandDocs
Pazarlama

Aboneler

Abone kişilerinizi yönetin, listeleri içe aktarın ve etkileşimleri takip edin

E-posta abone kişilerinizi yönetin. Her abonenin etkileşim takibi, özel alanlar ve durum yönetimini içeren bir profili bulunur.

Abone Durumları

DurumDeğerAçıklama
Active0Abone olmuş ve e-posta alıyor
Unsubscribed1E-postalardan çıkmış
Bounced2Kalıcı geri dönüş kaydedilmiş
Complained3Spam şikayetinde bulunmuş
Pending4Ayrılmış: MailLand'de çift onaylı (double opt-in) bir akış yoktur, bu yüzden bu durumu hiçbir şey ayarlamaz

Bir abonedeki optInMethod ve consent* alanları yalnızca kanıt olarak kaydedilir: herhangi bir onay iş akışını yönlendirmezler.

Abone Oluşturma

POST https://api.mail.land/v1/marketing/subscribers
Create subscriber request
{
  "email": "[email protected]",
  "firstName": "John",
  "lastName": "Doe",
  "phone": "+1234567890",
  "company": "Acme Corp",
  "mailingListId": "ddv6ou6kz4wbto",
  "source": "api",
  "birthday": "1990-05-14",
  "customFields": {
    "plan": "enterprise",
    "region": "us-west"
  }
}
AlanTürZorunluAçıklama
emailstringEvetE-posta adresi
firstNamestringHayırAd
lastNamestringHayırSoyad
phonestringHayırTelefon numarası
companystringHayırŞirket adı
mailingListIdstringHayırEklenecek posta listesi
sourcestringHayırAbonelik kaynağı (ör. api, form, import)
birthdaystringHayırYYYY-MM-DD. DateBased otomasyon tetikleyicisi tarafından okunur
customFieldsobjectHayırAnahtar-değer özel alanları
Create a subscriber
curl -X POST https://api.mail.land/v1/marketing/subscribers \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "firstName": "John",
    "lastName": "Doe",
    "mailingListId": "ddv6ou6kz4wbto",
    "source": "api"
  }'

Yanıt

Subscriber response
{
  "id": "exz31qoqlf01sj",
  "email": "[email protected]",
  "firstName": "John",
  "lastName": "Doe",
  "phone": "+1234567890",
  "company": "Acme Corp",
  "status": "active",
  "statusName": "Active",
  "source": "api",
  "mailingListId": "ddv6ou6kz4wbto",
  "mailingListName": "Product Updates",
  "customFields": {
    "plan": "enterprise",
    "region": "us-west"
  },
  "subscribedAt": "2026-02-17T12:00:00Z",
  "unsubscribedAt": null,
  "createdAt": "2026-02-17T12:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

Aboneleri Listeleme

GET https://api.mail.land/v1/marketing/subscribers
ParametreTürVarsayılanAçıklama
cursorstring-Önceki sayfanın nextCursor değerinden alınan opak imleç. İlk sayfa için belirtmeyin.
limitint20Sayfa başına öğe sayısı
searchstring-E-posta veya ada göre arama (şirkete göre değil)
mailingListIdstring-Posta listesine göre filtrele
statusint-Abone durumuna göre filtrele
sortBystring-Sıralama alanı
sortDescboolfalseAzalan sıralama
List subscribers
curl "https://api.mail.land/v1/marketing/subscribers?limit=20&mailingListId=ddv6ou6kz4wbto" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Abone Ayrıntılarını Getirme

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

Etkileşim metrikleri içeren genişletilmiş bir profil döndürür:

Get subscriber details
curl https://api.mail.land/v1/marketing/subscribers/exz31qoqlf01sj \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Subscriber detail response
{
  "id": "exz31qoqlf01sj",
  "email": "[email protected]",
  "firstName": "John",
  "lastName": "Doe",
  "phone": "+1234567890",
  "company": "Acme Corp",
  "status": "active",
  "source": "api",
  "mailingListId": "ddv6ou6kz4wbto",
  "mailingListName": "Product Updates",
  "customFields": { "plan": "enterprise" },
  "birthday": "1990-05-14",
  "emailsSent": 50,
  "emailsOpened": 25,
  "emailsClicked": 10,
  "lastEmailSentAt": "2026-02-17T09:30:00Z",
  "lastEmailOpenedAt": "2026-02-16T15:20:00Z",
  "lastEmailClickedAt": "2026-02-15T11:10:00Z",
  "openRate": 50.0,
  "clickRate": 40.0,
  "subscribedAt": "2026-01-15T08:00:00Z",
  "createdAt": "2026-01-15T08:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

Aboneyi Güncelleme

PUT https://api.mail.land/v1/marketing/subscribers/{id}
Update subscriber request
{
  "firstName": "Jane",
  "lastName": "Smith",
  "phone": "+1234567890",
  "company": "TechCorp",
  "mailingListId": "ddv6ou6kz4wbto",
  "customFields": { "plan": "pro" },
  "birthday": "1990-05-14",
  "status": "Active"
}

PUT tüm profili değiştirir, birleştirmez. firstName, lastName, phone, company ve mailingListId atlandığında değişmeden bırakılmaz, hepsi null ile (veya listeden kaldırılarak) üzerine yazılır. mailingListId'yi atlamak, abonenin liste üyeliğini kaldırır. Korumak istediğiniz her alanı, mailingListId dahil, gönderin. Yalnızca customFields ve status atlandığında değişmeden kalır. birthday kendi kuralını izler: alanı atlamak değişmeden bırakır, "birthday": null göndermek temizler, YYYY-MM-DD değeri göndermek ayarlar, boş bir dize ("") 400 ile reddedilir. Alıcının zaten hiçbir listede olmayan bir kişisi varsa, kaldırdığınız üyelik yalnızca geçmiş olarak saklanır: artık kişiler arasında görünmez; abonelikten çıkmaları, onay kayıtları ve kampanya geçmişi korunur.

Update a subscriber
curl -X PUT https://api.mail.land/v1/marketing/subscribers/exz31qoqlf01sj \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Jane",
    "lastName": "Smith",
    "company": "TechCorp",
    "mailingListId": "ddv6ou6kz4wbto",
    "customFields": { "plan": "pro" },
    "status": "Active"
  }'

Abonelikten Çıkarma

POST https://api.mail.land/v1/marketing/subscribers/{id}/unsubscribe

Abonenin listesine özel bir vazgeçme (opt-out) kaydeder, abonenin listesi yoksa tüm pazarlama gönderimlerine özel, ve abone durumunu unsubscribedAt zaman damgasıyla Unsubscribed olarak ayarlar. İşlemsel e-postalar bu çağrıdan etkilenmez.

Unsubscribe a subscriber
curl -X POST https://api.mail.land/v1/marketing/subscribers/exz31qoqlf01sj/unsubscribe \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Aboneyi Silme

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

Aboneyi ve etkileşim verilerini kalıcı olarak siler. Vazgeçmeler ve bastırmalar korunur, bu nedenle aynı adresi yeniden eklemek onu yeniden abone yapmaz.

Delete a subscriber
curl -X DELETE https://api.mail.land/v1/marketing/subscribers/exz31qoqlf01sj \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Aboneleri İçe Aktarma

POST https://api.mail.land/v1/marketing/subscribers/import

CSV içeriğinden aboneleri içe aktarın:

Import request
{
  "mailingListId": "ddv6ou6kz4wbto",
  "csvContent": "email,firstName,lastName\n[email protected],John,Doe\n[email protected],Jane,Smith",
  "source": "csv_import",
  "updateExisting": true
}
AlanTürZorunluAçıklama
mailingListIdstringHayırHedef posta listesi
csvContentstringEvetCSV verisi: aşağıdaki format uyarısına bakın, başlık satırı başlık olarak kullanılmaz

İlk satır, içeriği ne olursa olsun bir başlık olarak kabul edilir ve atlanır, 1-3. sütunları alanlarla eşlemek için asla okunmaz. Sütunlar konumsaldır: 1. sütun her zaman email, 2. sütun her zaman firstName, 3. sütun her zaman lastName'dir; bunun dışındaki her sütun, başlığı birthday olan sütun hariç (büyük/küçük harf duyarsız, 1. sütundan sonra herhangi bir konumda), yok sayılır; bu sütun konumuna göre değil başlık adına göre okunur. Değeri YYYY-MM-DD olmalıdır; geçersiz bir değer satır başına errors içinde bildirilir ve o kişi yine de doğum günü olmadan içe aktarılır. birthday başlığı olmayan bir dosya tam olarak eskisi gibi davranır. Değerler düz virgüllerle bölünür, bu nedenle tırnak içinde virgül içeren bir değer desteklenmez ve yanlış bölünür. Yanıt ayrıca aşağıda gösterilenlere ek olarak importedNewMembershipForExistingRecipient, updatedMembership, alreadyMember, suppressed ve skippedDuplicateInFile sayaçlarını da ekler.

| source | string | Hayır | İçe aktarma kaynak etiketi | | updateExisting | bool | Hayır | Mevcut aboneleri güncelle (varsayılan: false) |

Import subscribers
curl -X POST https://api.mail.land/v1/marketing/subscribers/import \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "mailingListId": "ddv6ou6kz4wbto",
    "csvContent": "email,firstName,lastName\[email protected],John,Doe\[email protected],Jane,Smith",
    "source": "csv_import",
    "updateExisting": true
  }'
Import response
{
  "imported": 50,
  "updated": 10,
  "skipped": 5,
  "errors": [
    "Invalid email: not-an-email",
    "Could not resolve a recipient identity for: [email protected]"
  ]
}

İçe aktarılan aboneler, içe aktarmanın gerçekten oluşturduğu her üyelik için SubscriberJoins otomasyonunu tetikler: tıpkı POST /v1/marketing/subscribers üzerinden tek bir oluşturma gibi. Zaten hedef listede olan bir kişi, dosya içinde bir tekrar veya bir (TenantId, Email) çakışması nedeniyle kaybedilen bir satır kaydedilmez. Hedef listede aktif bir SubscriberJoins otomasyonu varsa (veya tenant'ta listeye bağlı olmayan bir tane varsa), yeni kişiler içeren bir dosyayı içe aktarmak artık bu otomasyonu her birine gönderir, içe aktarmayı buna göre boyutlandırın. Suppression hâlâ uygulanır: kayıt hiçbir zaman suppress edilmiş bir alıcıyı atlamaz.

Aboneleri Dışa Aktarma

GET https://api.mail.land/v1/marketing/subscribers/export
ParametreTürAçıklama
mailingListIdstringPosta listesine göre filtrele
statusintDuruma göre filtrele

subscribers_yyyyMMdd_HHmmss.csv dosya adıyla bir CSV dosyası indirme işlemi döndürür.

Export subscribers
curl "https://api.mail.land/v1/marketing/subscribers/export?mailingListId=ddv6ou6kz4wbto" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -o subscribers_export.csv

Abone İstatistikleri

GET https://api.mail.land/v1/marketing/subscribers/stats
ParametreTürAçıklama
mailingListIdstringPosta listesine göre filtrele
Get subscriber stats
curl "https://api.mail.land/v1/marketing/subscribers/stats?mailingListId=ddv6ou6kz4wbto" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Subscriber stats response
{
  "total": 1500,
  "active": 1200,
  "unsubscribed": 200,
  "bounced": 80,
  "complained": 10,
  "pending": 10
}

Abone Sayısı

GET https://api.mail.land/v1/marketing/subscribers/count
ParametreTürAçıklama
mailingListIdstringPosta listesine göre filtrele
Get subscriber count
curl "https://api.mail.land/v1/marketing/subscribers/count?mailingListId=ddv6ou6kz4wbto" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Count response
{
  "count": 1500,
  "mailingListId": "ddv6ou6kz4wbto"
}

Abone Büyümesi

GET https://api.mail.land/v1/marketing/subscribers/growth
ParametreTürVarsayılanAçıklama
daysint30Geriye dönük dönem (maks. 90)
mailingListIdstring-Posta listesine göre filtrele
Get subscriber growth
curl "https://api.mail.land/v1/marketing/subscribers/growth?days=30&mailingListId=ddv6ou6kz4wbto" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Growth response
{
  "dataPoints": [
    {
      "date": "2026-02-17",
      "newSubscribers": 50,
      "unsubscribes": 5,
      "cumulativeTotal": 1500
    }
  ],
  "totalNew": 500,
  "totalUnsubscribes": 50,
  "netGrowth": 450,
  "currentTotal": 1500
}

Hata Yanıtları

DurumKodAçıklama
400INVALID_EMAIL_FORMATGeçersiz e-posta biçimi
400INVALID_REQUESTAbone e-posta adresi zaten mevcut
403FORBIDDENYetersiz izinler
404RESOURCE_NOT_FOUNDAbone bulunamadı

Sonraki Adımlar

  • Listeler: aboneleri posta listelerinde düzenleyin
  • Segmentler: abone verilerine dayalı dinamik segmentler oluşturun
  • Kampanyalar: abonelerinize kampanya gönderin

Bu sayfada