Mesajlar (işlemsel gönderim)

İşlemsel (transactional) gönderim yolu senkrondur: tek çağrı, tek SMTP zarfı, anında messageId. Zamanlanmış toplu gönderim için kampanya uçlarını kullanın.

Tekil/işlemsel gönderim

POST/public/v1/messagesscopesend

Header'lar

AdTipZorunluAçıklama
Idempotency-Keystringhayır1–128 karakter, yalnız görünür ASCII. Bkz. Idempotency-Key.

Gövde

AdTipZorunluAçıklama
fromstringhayırDoğrulanmış kimlik adresi. Boşsa hesabın varsayılan kimliği kullanılır. Domain kimliğinde domain altındaki herhangi bir adres yazılabilir.
tostring[]evetEn az 1, en çok 50 adres.
ccstring[]hayırCC alıcıları.
bccstring[]hayırBCC alıcıları.
subjectstringevetKonu. {{degisken}} desteklenir.
htmlstringhtml veya text'ten biriHTML gövde.
textstringhtml veya text'ten biriDüz metin gövde. Yalnız html verilirse text otomatik türetilir.
variablesobjecthayır{{degisken}} değerleri — subject/html/text'e uygulanır (HTML-encode'lu).
attachments[{uploadId, fileName, size}]hayırÖnceden POST /uploads ile yüklenmiş ek referansları. fileName/size bilgi amaçlıdır; sunucu yükleme kaydını esas alır.
customerRefstringhayırÖlçüm/ayıklama etiketi — bkz. customerRef. Max 64, [A-Za-z0-9_-].
scheduledAtstring—Desteklenmez → 422 scheduling_not_supported. İşlemsel yol senkrondur; zamanlanmış toplu gönderim için kampanya ucunu kullanın.

Tek zarf semantiği (önemli)

Mesaj tek bir SMTP zarfıdır — to+cc+bcc aynı çağrıda, tek messageId ile gönderilir (CC'li mesajda alıcı başına ayrı kopya üretilmez). Kredi, to+cc+bcc geçerli alıcı toplamı kadar düşer. accepted satırlarının hepsinde aynı messageId görünür.

Alıcı işleme sırası: normalize + üç liste genelinde tekilleştirme (hem to hem cc'de geçen adres yalnız to'da kalır) → sentaks (invalid_syntax) → bastırma (suppressed) → MX ön doğrulaması (mx_fail) → kredi. Elenen her adres yanıtın rejected listesinde gerekçesiyle raporlanır.

  • Geçerli to alıcısı kalmazsa: 422 no_valid_recipients, kredi düşmez.
  • Kredi yetersizse: HTTP 200 döner, tüm geçerli alıcılar rejected'a reason: "quota" ile yazılır, kredi düşmez, messageId alanı yazılmaz.
  • Zarf gönderilemezse (sağlayıcı arızası): 502 send_failed, düşülen kredinin tamamı iade edilir.

Bastırma kapsamı: işlemsel yolda yalnız campaign_and_transactional kapsamlı bastırma kayıtları süzer. Pazarlama aboneliğinden çıkan (scope=campaign) bir adrese işlemsel mail (randevu, şifre sıfırlama…) gitmeye devam eder — tasarımın amacı budur.

Idempotency-Key

Idempotency-Key header'ı (1–128 karakter, yalnız görünür ASCII) yalnız POST /messages'ta desteklenir:

  • Aynı anahtar + aynı gövde 24 saat içinde tekrar gelirse saklanan yanıt aynen döner (ikinci gönderim yapılmaz, kredi tekrar düşmez). Tekrar yanıtında Idempotency-Replayed: true header'ı bulunur.
  • Aynı anahtar + farklı gövde → 409 idempotency_conflict.
  • Yalnız başarılı (200) yanıtlar saklanır: hata yanıtı (422/429/502…) saklanmaz — sorunu giderip aynı anahtarla güvenle yeniden deneyebilirsiniz.
  • rejected.reason değerleri: invalid_syntax | mx_fail | suppressed | quota.

Ek yükleme

POST/public/v1/uploadsscopesend

multipart/form-data, dosya alan adı `file`. Tekil dosya sınırı 20 MB (aşımı 413 attachments_too_large).

Gövde

AdTipZorunluAçıklama
filefile (multipart)evetYüklenecek dosya. Tekil dosya ≤ 20 MB.
  • uploadId aynı hesabın POST /messages isteklerinde attachments alanında kullanılır; başka hesabın uploadId'si 404 not_found görünür.
  • Yükleme kaydının ömrü (TTL) 24 saattir; mesaj başarıyla gönderilince ek kaydı temizlenir, gönderilemeyen istekte TTL ile düşer (yeniden deneme hakkı).
  • Bir mesajın toplam ek boyutu 20 MB'ı aşamaz → 413 attachments_too_large.
  • Ekli mesaj Raw MIME olarak gönderilir; davranış (tek zarf, kredi, rejected) aynı kalır.

Mesaj durumu

GET/public/v1/messages/{id}scoperead

Path parametreleri

AdTipZorunluAçıklama
idstringevetGönderim yanıtındaki messageId (iç kayıt id'si de kabul edilir).
  • status union'ı: sent | delivered | bounced | complained. Olay yoksa sent.
  • Çok alıcılı zarfta en kötü durum önceliği uygulanır: tek alıcının bounce'u mesajı bounced gösterir (öncelik: bounce > complaint > delivery).
  • cc/bcc boşsa alan hiç yazılmaz.

Test gönderimi

POST/public/v1/messages/testscopesend

Panel "test maili" özelliğinin API karşılığı. Tek alıcı.

Gövde

AdTipZorunluAçıklama
fromstringhayırÇözümü POST /messages ile aynıdır (boşsa varsayılan kimlik).
tostringevetTek alıcı adresi.
subjectstringevetKonu.
htmlstringevetHTML gövde.
  • Kredi düşmez; bastırma ve MX ön doğrulaması uygulanmaz.
  • Ayrı bir oran sınırı yoktur (anahtar limiti 120/dk geçerlidir).

Adres bazlı geçmiş

GET/public/v1/recipients/{email}/historyscoperead

Path parametreleri

AdTipZorunluAçıklama
emailstringevetSorgulanan alıcı adresi.

Sorgu parametreleri

AdTipZorunluAçıklama
fromstring (ISO 8601)hayırTarih aralığı başlangıcı.
tostring (ISO 8601)hayırTarih aralığı bitişi.
  • kind: campaign | message. En yeni başta, en çok 500 satır.
  • status: kampanya satırında rapor union'ı (delivered/pending/bounced/complained/suppressed/failed), mesaj satırında mesaj union'ı (sent/delivered/bounced/complained).