Kitlelere gönder
Bir ya da daha fazla kitledeki herkese tek bir ileti gönderir; her kişi için ayrı bir kopya olarak ve her kişinin kaydından kişiselleştirilmiş olarak. Her kopyanın tam olarak bir alıcısı vardır, cc ya da bcc yoktur; bu yüzden kimse başka kime gittiğini görmez ve her kopya kendi `msg_` kimliği, olayları, izlemesi ve webhook'ları olan sıradan bir e-postadır. Çağrı hemen `202` ile yanıt verir ve gönderim arka planda sürer, bu yüzden onu `GET /broadcasts/{id}` ile izleyin.
Gerçek çağrıyı kendi anahtarınızla çalışma alanınıza karşı çalıştırır.
POST /broadcasts
Bir ya da daha fazla kitledeki herkese tek bir ileti gönderir; her kişi için ayrı bir kopya olarak ve her kişinin kaydından kişiselleştirilmiş olarak. Her kopyanın tam olarak bir alıcısı vardır, cc ya da bcc yoktur; bu yüzden kimse başka kime gittiğini görmez ve her kopya kendi msg_ kimliği, olayları, izlemesi ve webhook'ları olan sıradan bir e-postadır. Çağrı hemen 202 ile yanıt verir ve gönderim arka planda sürer, bu yüzden onu GET /broadcasts/{id} ile izleyin.
Örnek
emails:send ve audiences:read gerekir. audienceIds 1 ile 10 arası kimlik tutar. Gövde html ve/veya text'ten ya da kaydedilmiş bir template'ten gelir, hiçbir zaman ikisinden birden değil; şablon sağlamıyorsa subject zorunludur.
curl -X POST "$OE/broadcasts" -H "$AUTH" -H 'content-type: application/json' -d '{ "audienceIds": ["aud_4c1b8e2a7d9f05c36b4e8a71"], "from": "Acme <[email protected]>", "subject": "{{firstName|Hello}}, the September release is out", "html": "<p>Hi {{firstName|there}},</p><p>Here is what changed this month.</p>", "text": "Hi {{firstName|there}}, here is what changed this month. Unsubscribe: {{unsubscribeUrl}}", "tags": { "campaign": "release-2026-09" }, "scheduledAt": "PT2H"}'{ "object": "broadcast", "id": "brd_5a8c1e3f7b2d94a06c8e1f3b", "status": "scheduled", "mode": "live", "source": "api", "audienceIds": ["aud_4c1b8e2a7d9f05c36b4e8a71"], "from": "Acme <[email protected]>", "subject": "{{firstName|Hello}}, the September release is out", "counts": { "recipients": 412, "created": 0, "skipped": 0, "failedToQueue": 0, "queued": 0, "sending": 0, "sent": 0, "failed": 0, "cancelled": 0 }, "lastError": null, "scheduledAt": "2026-09-23T14:00:00.000Z", "startedAt": null, "completedAt": null, "cancelledAt": null, "createdAt": "2026-09-23T12:00:00.000Z", "updatedAt": "2026-09-23T12:00:00.000Z", "replayed": false}Yanıt queued'dur ya da scheduledAt ile scheduled'dır; bu alan bir ISO 8601 anı ya da PT2H gibi bir süre alır, en fazla 365 gün sonrası. counts.recipients şimdi alınan tahmindir, diğer sayaçlar 0'dan başlar. Location başlığı toplu gönderimi adlandırır.
Idempotency-Key başlığıyla yeniden denemek güvenlidir: aynı anahtar, ilk çağrının oluşturduğu toplu gönderimi 200 ve Idempotency-Replayed: true ile döndürür; aynı anahtar farklı bir gövdeyle 422 idempotency_key_reuse olur. Anahtar olmadan aynı gövdeyi iki kez göndermek toplu gönderimi iki kez gönderir.
Kopyalar Gönderilenler klasörüne kaydedilmez, çünkü toplu gönderim kayıttır. GET /emails?broadcastId=brd_5a8c1e3f7b2d94a06c8e1f3b onları kişi başına bir tane olarak listeler.
Kim alır
Kitlelerden en az birindeki her kişi, kaç kitlede bulunursa bulunsun bir kez sayılır. İki tür kişi dışarıda kalır: içinde bulunduğu seçili kitlelerin her birinden abonelikten çıkmış olan ve adresi bir geri dönme ya da şikâyet sonrasında veya biri eklediği için engelleme listesinde olan. Çağrıdan sonra ama gönderim ona ulaşmadan önce kitlelerden birine eklenen kişi dahil edilir.
Gönderim kitleleri her seferinde 50 kişi ilerler ve her kopyayı POST /emails'in kullandığı aynı hatta verir; bu yüzden her kopya diğer iletiler gibi yeniden denenir, izlenir ve raporlanır. POST /broadcasts/preview bu çağrının başlayacağı sayıyı hiçbir şey göndermeden döndürür.
Herhangi bir şey yazılmadan önce gönderimin tamamı planın aylık gönderim sayısıyla karşılaştırılır. Kotanın karşılayamadığı bir toplu gönderim 429 send_quota_exceeded ile reddedilir ve geride hiçbir şey bırakmaz. Her kopya bir gönderim sayılır.
Birleştirme alanları
subject, html ve text her kişi için doldurulur. Her alan çizgiden sonra bir yedek değer alır; kişinin o alan için değeri yoksa kullanılır, bu yüzden {{firstName|there}} adsız kaydedilmiş bir kişi için "there" olur. Değerler html içinde kaçırılır, süslü parantezlerin içinde boşluğa izin verilir ve diğer her {{…}} tam yazıldığı gibi bırakılır.
| Alan | Neyle doldurulur |
|---|---|
| `{{firstName}}` | Kişi adının ilk sözcüğü. |
| `{{lastName}}` | İlk sözcükten sonra kişi adının geri kalanı. |
| `{{name}}` | Kişinin tam adı. |
| `{{email}}` | Kopyanın gittiği adres. |
| `{{unsubscribeUrl}}` | Bu kişinin bu kitlelerden aboneliğini sonlandıran bağlantı. |
Gövde yerine template ile aynı beş değer özellik olarak geçirilir, ama yalnızca şablonun tanımladığı özellikler. firstName'i tanımlayan bir şablon onu alır, tanımlamadığı bir özellik hiç gönderilmez; bu yüzden kopyalar bilinmeyen bir özellik yüzünden hiçbir zaman başarısız olmaz. template.props içine koyduğunuz her şey her kopyaya aynı biçimde gider.
Abonelikten çıkma
Her kopya List-Unsubscribe ve List-Unsubscribe-Post: List-Unsubscribe=One-Click taşır. Bir posta istemcisinin kendi abonelikten çıkma düğmesini göstermesini sağlayan budur ve büyük posta kutusu sağlayıcılarının toplu postadan istediği de budur.
{{unsubscribeUrl}}'i kendisi yerleştirmeyen bir html ya da text gövdesine tek satırlık bir alt bilgi eklenir: "You are receiving this because you are on this mailing list. Unsubscribe". Şablon tam olduğu gibi gönderilir, bu yüzden {{unsubscribeUrl}}'i şablona koyun.
Bağlantı Abonelikten çık düğmesi olan bir sayfa açar; bu yüzden onu getiren bir bağlantı tarayıcısı kimsenin aboneliğini sonlandırmaz, bir posta istemcisinin tek tık isteği ise aboneliği hemen sonlandırır. Her iki durumda da kişi bu toplu gönderimin gittiği her kitlede abonelikten çıkmış olarak işaretlenir; bu, GET /audiences/{id}/contacts üzerinde unsubscribedAt olarak görünür. Diğer kitleleri, kişi kaydı ve ona tek tek gönderilen postalar etkilenmez.
Retler
| Durum | Kod | Ne zaman |
|---|---|---|
| 403 | from_address_forbidden | Anahtar from olarak gönderemez. |
| 404 | audience_not_found | audienceIds içindeki bir kimlik bu çalışma alanında hiçbir kitleyi adlandırmıyor. |
| 409 | domain_not_sendable | from alan adı, POST /emails'te olduğu gibi henüz postayı imzalayamıyor. |
| 422 | no_recipients | Kitleler boş ya da içlerindeki herkes abonelikten çıkmış veya engellenmiş. |
| 422 | invalid_parameter | Gövde yok, template'in yanında html ya da text var, şablon olmadan subject yok, 10'dan fazla kitle ya da 8'den fazla etiket var veya scheduledAt gelecekte değil ya da 365 günden uzak. |
| 422 | template_not_found | Şablon çözümlenmiyor. Şablonla ilgili diğer retler de template.* adını verir. |
| 422 | capability_unsupported | Anahtar belirli adreslerle sınırlı. Kitleler tüm çalışma alanına aittir. |
| 429 | send_quota_exceeded | Plan bu ay herkese bir kopyayı karşılayamıyor. |
Ek, cc, bcc, çeviri ya da şifreleme yok. tags en fazla 8 alır ve her kopya ayrıca sunucunun eklediği broadcast_id'yi taşır.