CM E-POSTA / GELİŞTİRİCİLER

Ürününüzle aynı dili konuşur.

REST API ile gönderim, gelen kutusu, şablonlar ve olaylar. Entegrasyon için gereken uç noktalar, parametreler ve örnekler burada.

Kimlik doğrulama

Panel → API Anahtarları bölümünden bir anahtar oluşturun ve Authorization başlığında gönderin.

Authorization: Bearer CMMAIL_API_KEY

Temel URL: https://cmapps.email/api/v1

Hızlı başlangıç

Tek bir POST isteği ile ilk mailinizi gönderin.

curl -X POST https://cmapps.email/api/v1/messages \
  -H "Authorization: Bearer $CMMAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "destek@sirketiniz.com",
    "to": ["musteri@example.com"],
    "subject": "Hoş geldiniz",
    "text_body": "CM E-Posta ile gönderildi.",
    "html_body": "<b>CM E-Posta</b> ile gönderildi."
  }'

İstek gövdesi — mail gönderimi

POST /messages için kabul edilen alanlar.

fromstringzorunluGönderen adres. Domaini, API anahtarının domaini ile aynı olmalı.
tostring[]zorunluAlıcı adresleri — dizi olarak.
subjectstringzorunluKonu başlığı.
html_bodystringopsiyonelHTML gövde.
text_bodystringopsiyonelDüz metin gövde.
ccstring[]opsiyonelBilgi (CC) alıcıları.
bccstring[]opsiyonelGizli (BCC) alıcıları.
template_iduuidopsiyonelKullanılacak şablonun kimliği.
template_varsobjectopsiyonelŞablon değişkenleri (anahtar → değer).
track_opensbooleanopsiyonelAçılma takibini etkinleştir.
track_clicksbooleanopsiyonelTıklama takibini etkinleştir.
headersobjectopsiyonelEk özel başlıklar.

Endpoint’ler

Yollar https://cmapps.email/api/v1 tabanına görelidir.

Mesajlar (giden)

POST/messagesMail gönder — kuyruğa alınır
POST/messages/batchTek istekte en fazla 100 mail — her mesaj için ayrı sonuç
GET/messagesGönderilen mesajları listele
GET/messages/{id}Gönderilen mesajın detayı
GET/messages/{id}/eventsTeslimat, açılma ve tıklama olayları

Gelen kutusu

GET/inboundGelen mesajları listele (?folder=inbox&limit&offset)
GET/inbound/{id}Gelen mesajın detayı
DELETE/inbound/{id}Gelen mesajı sil

Domainler

GET/domainsDomaini listele
GET/domains/{id}Domain detayı
POST/domains/{id}/verifyDNS doğrulamasını çalıştır
GET/domains/{id}/verificationDoğrulama durumunu getir

Şablonlar

POST/templatesŞablon oluştur
GET/templatesŞablonları listele
GET/templates/{id}Şablon detayı
PUT/templates/{id}Şablonu güncelle
DELETE/templates/{id}Şablonu sil

Webhook’lar

POST/webhooksWebhook oluştur
GET/webhooksWebhook’ları listele
GET/webhooks/{id}Webhook detayı
PUT/webhooks/{id}Webhook’u güncelle
DELETE/webhooks/{id}Webhook’u sil

Olaylar & analitik

GET/eventsOlayları listele (?message_id, ?type)
GET/reputationGönderen itibarı özeti (?hours)
GET/blacklist-checkDomainin kara listede olup olmadığını kontrol et

Örnek yanıt

Gönderilen mail kuyruğa alınır ve oluşturulan mesaj kaydının tamamı 201 Created ile döner.

HTTP/1.1 201 Created

{
  "id": "a3f1c9e2-1b7d-4c2a-9f00-8e21d3b5a7c4",
  "domain_id": "d4b21f6e-0c33-4a19-b8e2-7f0a1c2d3e4f",
  "from_addr": "destek@sirketiniz.com",
  "to_addrs": ["musteri@example.com"],
  "subject": "Hoş geldiniz",
  "html_body": "<b>CM E-Posta</b> ile gönderildi.",
  "text_body": "CM E-Posta ile gönderildi.",
  "status": "queued",
  "attempts": 0,
  "track_opens": false,
  "track_clicks": false,
  "created_at": "2026-09-04T17:00:00Z",
  "updated_at": "2026-09-04T17:00:00Z"
}

Toplu gönderim

Tek istekte en fazla 100 mesaj gönderin. Her mesaj bağımsız değerlendirilir: listedeki bir hata diğerlerini engellemez, yanıt hangi mesajın kuyruğa girdiğini index ile bildirir. İsteğe Idempotency-Key ekleyerek zaman aşımı sonrası güvenle tekrar deneyebilirsiniz.

curl -X POST https://cmapps.email/api/v1/messages/batch \
  -H "Authorization: Bearer $CMMAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: siparis-2026-09-05-001" \
  -d '{
    "messages": [
      { "from": "destek@sirketiniz.com", "to": ["a@example.com"], "subject": "Hoş geldiniz", "text_body": "Merhaba" },
      { "from": "destek@sirketiniz.com", "to": ["b@example.com"], "subject": "Hoş geldiniz", "text_body": "Merhaba" }
    ]
  }'
HTTP/1.1 201 Created

{
  "queued": 1,
  "failed": 1,
  "results": [
    {
      "index": 0,
      "status": "queued",
      "message": { "id": "a3f1c9e2-...", "status": "queued" }
    },
    {
      "index": 1,
      "status": "failed",
      "error": "subject is required"
    }
  ]
}

Önemli notlar

İzin kapsamları

Her API anahtarının read ve/veya send kapsamı vardır: okuma (GET) istekleri read, gönderim ve değişiklik (POST/PUT/DELETE) istekleri send gerektirir. Eksik kapsamda 403 döner.

Domain yönetimi panelde

API anahtarı tek bir domaine bağlıdır; domain ekleme, silme ve teslimat ayarları müşteri panelinden (app.cmapps.email) yapılır. API üzerinden domaininizi listeleyebilir, detayını görebilir ve DNS doğrulamasını çalıştırabilirsiniz.

Gönderim ön-koşulları

Mail gönderebilmek için domain doğrulanmış ve aktif olmalıdır; ayrıca from adresinin domaini, anahtarın bağlı olduğu domain ile eşleşmelidir. Aksi halde 403 döner.

Idempotency-Key (tekrar güvenliği)

POST /messages ve /messages/batch isteklerine Idempotency-Key başlığı ekleyebilirsiniz. Zaman aşımı sonrası aynı anahtarla tekrar denerseniz mail ikinci kez gönderilmez; ilk yanıt aynen döner (Idempotent-Replay: true). Aynı anahtar farklı bir gövdeyle kullanılırsa 422, ilk istek hâlâ işlenirken tekrar gelirse 409 döner. Anahtarlar 24 saat geçerlidir.

Toplu gönderim

POST /messages/batch tek istekte en fazla 100 mesaj alır. Her mesaj bağımsız doğrulanır ve kuyruğa alınır: listedeki bir hata diğerlerini engellemez, yanıttaki results dizisi hangi mesajın kuyruğa girdiğini ve hangisinin neden başarısız olduğunu index ile bildirir.

İstek limiti

Her API anahtarı dakikada 3.000 istekle sınırlıdır. Yanıtlarda X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset başlıkları döner; limit aşılırsa 429 ve Retry-After başlığı gelir.

Listeleme ve sayfalama

Liste uçları { "data": [...], "total": N } biçiminde döner. limit (varsayılan 50, en fazla 100) ve offset sorgu parametreleriyle sayfalama yapılır.

Mobil uygulamanız mı var? Aynı JSON API tüm endpoint’lerde çalışır — ayrı bir SDK gerektirmez.