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ı
| Durum | Değer | Açıklama |
|---|---|---|
Active | 0 | Abone olmuş ve e-posta alıyor |
Unsubscribed | 1 | E-postalardan çıkmış |
Bounced | 2 | Kalıcı geri dönüş kaydedilmiş |
Complained | 3 | Spam şikayetinde bulunmuş |
Pending | 4 | Ayrı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{
"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"
}
}| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
email | string | Evet | E-posta adresi |
firstName | string | Hayır | Ad |
lastName | string | Hayır | Soyad |
phone | string | Hayır | Telefon numarası |
company | string | Hayır | Şirket adı |
mailingListId | string | Hayır | Eklenecek posta listesi |
source | string | Hayır | Abonelik kaynağı (ör. api, form, import) |
birthday | string | Hayır | YYYY-MM-DD. DateBased otomasyon tetikleyicisi tarafından okunur |
customFields | object | Hayır | Anahtar-değer özel alanları |
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
{
"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| Parametre | Tür | Varsayılan | Açıklama |
|---|---|---|---|
cursor | string | - | Önceki sayfanın nextCursor değerinden alınan opak imleç. İlk sayfa için belirtmeyin. |
limit | int | 20 | Sayfa başına öğe sayısı |
search | string | - | E-posta veya ada göre arama (şirkete göre değil) |
mailingListId | string | - | Posta listesine göre filtrele |
status | int | - | Abone durumuna göre filtrele |
sortBy | string | - | Sıralama alanı |
sortDesc | bool | false | Azalan sıralama |
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:
curl https://api.mail.land/v1/marketing/subscribers/exz31qoqlf01sj \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"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}{
"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.
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}/unsubscribeAbonenin 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.
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.
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/importCSV içeriğinden aboneleri içe aktarın:
{
"mailingListId": "ddv6ou6kz4wbto",
"csvContent": "email,firstName,lastName\n[email protected],John,Doe\n[email protected],Jane,Smith",
"source": "csv_import",
"updateExisting": true
}| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
mailingListId | string | Hayır | Hedef posta listesi |
csvContent | string | Evet | CSV 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) |
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
}'{
"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| Parametre | Tür | Açıklama |
|---|---|---|
mailingListId | string | Posta listesine göre filtrele |
status | int | Duruma göre filtrele |
subscribers_yyyyMMdd_HHmmss.csv dosya adıyla bir CSV dosyası indirme işlemi döndürür.
curl "https://api.mail.land/v1/marketing/subscribers/export?mailingListId=ddv6ou6kz4wbto" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-o subscribers_export.csvAbone İstatistikleri
GET https://api.mail.land/v1/marketing/subscribers/stats| Parametre | Tür | Açıklama |
|---|---|---|
mailingListId | string | Posta listesine göre filtrele |
curl "https://api.mail.land/v1/marketing/subscribers/stats?mailingListId=ddv6ou6kz4wbto" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"total": 1500,
"active": 1200,
"unsubscribed": 200,
"bounced": 80,
"complained": 10,
"pending": 10
}Abone Sayısı
GET https://api.mail.land/v1/marketing/subscribers/count| Parametre | Tür | Açıklama |
|---|---|---|
mailingListId | string | Posta listesine göre filtrele |
curl "https://api.mail.land/v1/marketing/subscribers/count?mailingListId=ddv6ou6kz4wbto" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"count": 1500,
"mailingListId": "ddv6ou6kz4wbto"
}Abone Büyümesi
GET https://api.mail.land/v1/marketing/subscribers/growth| Parametre | Tür | Varsayılan | Açıklama |
|---|---|---|---|
days | int | 30 | Geriye dönük dönem (maks. 90) |
mailingListId | string | - | Posta listesine göre filtrele |
curl "https://api.mail.land/v1/marketing/subscribers/growth?days=30&mailingListId=ddv6ou6kz4wbto" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"dataPoints": [
{
"date": "2026-02-17",
"newSubscribers": 50,
"unsubscribes": 5,
"cumulativeTotal": 1500
}
],
"totalNew": 500,
"totalUnsubscribes": 50,
"netGrowth": 450,
"currentTotal": 1500
}Hata Yanıtları
| Durum | Kod | Açıklama |
|---|---|---|
400 | INVALID_EMAIL_FORMAT | Geçersiz e-posta biçimi |
400 | INVALID_REQUEST | Abone e-posta adresi zaten mevcut |
403 | FORBIDDEN | Yetersiz izinler |
404 | RESOURCE_NOT_FOUND | Abone bulunamadı |
Sonraki Adımlar
- Listeler: aboneleri posta listelerinde düzenleyin
- Segmentler: abone verilerine dayalı dinamik segmentler oluşturun
- Kampanyalar: abonelerinize kampanya gönderin