MailLandDocs
Webhook'lar

Webhook'lara Genel Bakış

Webhook'lar aracılığıyla e-posta olayları hakkında gerçek zamanlı bildirimler alın

Webhook'lar, e-posta olayları gerçekleştiğinde (teslimler, geri dönmeler, şikayetler ve daha fazlası) sunucunuza gerçek zamanlı HTTP bildirimleri iletir. Durum değişikliklerini sorgulamak yerine, MailLand olayları gerçekleştikleri anda endpoint'inize iletir.

Webhook'lar Nasıl Çalışır

Bir webhook yapılandırın

Endpoint URL'nizi kaydedin ve almak istediğiniz olayları seçin.

Mail.Land olayları gönderir

Bir olay gerçekleştiğinde (örneğin, bir e-posta teslim edildiğinde), MailLand endpoint'inize olay verisiyle birlikte imzalı bir HTTP POST gönderir.

Sunucunuz yanıt verir

Alındığını onaylamak için bir 2xx durum kodu döndürün. 2xx olmayan yanıtlar otomatik yeniden denemeleri tetikler.

Webhook Oluşturma

POST https://api.mail.land/v1/webhooks
Create a webhook
curl -X POST https://api.mail.land/v1/webhooks \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production Events",
    "webhookUrl": "https://your-app.com/webhooks/mailland",
    "products": ["transactional", "marketing"],
    "events": ["message.delivered", "message.bounced", "message.deferred", "message.complained"],
    "includeFutureEvents": true,
    "scope": "all_domains"
  }'

İstek Alanları

AlanTürZorunluAçıklama
namestringHayırBu webhook için okunabilir bir ad
webhookUrlstringEvetOlayları almak için HTTPS endpoint URL'si
productsarrayHayırÜrün filtresi: transactional, marketing, inbound, system
eventsarrayHayırAbone olunacak belirli olaylar (bkz. Olaylar)
includeFutureEventsbooleanHayırAbone olunan ürünlere eklenen yeni olayları alın (varsayılan: true)
scopestringHayırall_domains (varsayılan) veya selected_domains
domainIdsarrayHayırFiltrelenecek domain ID'leri (scope selected_domains ise zorunludur)

Yanıt

Durum: 201 Created

Webhook created response
{
  "webhook": {
    "id": "k3m9x2p7qw4rtz",
    "name": "Production Events",
    "webhookUrl": "https://your-app.com/webhooks/mailland",
    "products": ["transactional", "marketing"],
    "events": ["message.delivered", "message.bounced", "message.deferred", "message.complained"],
    "includeFutureEvents": true,
    "scope": "all_domains",
    "domainIds": [],
    "isActive": true,
    "createdAt": "2026-02-17T10:00:00Z",
    "successCount": 0,
    "failureCount": 0,
    "consecutiveFailures": 0,
    "pauseThreshold": 10
  },
  "secret": "whsec_a1b2c3d4e5f6g7h8i9j0..."
}

secret yalnızca webhook oluşturulduğunda bir kez gösterilir. Güvenli bir şekilde saklayın: webhook imzalarını doğrulamak için buna ihtiyaç duyacaksınız. Kaybederseniz yeniden oluşturabilirsiniz; bu işlem eski secret'ı geçersiz kılar.

Webhook URL'leri HTTPS kullanmalıdır. MailLand URL'leri SSRF saldırılarına karşı doğrular: özel ağ adresleri (127.0.0.1, 10.x, 192.168.x, vb.) reddedilir. Teslimat yalnızca 443 numaralı bağlantı noktasında HTTPS ile yapılır; başka bir bağlantı noktasındaki ya da MailLand'in kendi sunucularına veya ana makine adlarına işaret eden bir URL 400 WEBHOOK_DESTINATION_NOT_ALLOWED ile reddedilir. Farklı bir TLS bağlantı noktası MailLand desteğinin açık onayını gerektirir.

Webhook'ları Listele

GET https://api.mail.land/v1/webhooks
List webhooks
curl -X GET https://api.mail.land/v1/webhooks \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
List response
[
  {
    "id": "k3m9x2p7qw4rtz",
    "name": "Production Events",
    "webhookUrl": "https://your-app.com/webhooks/mailland",
    "products": ["transactional", "marketing"],
    "events": ["message.delivered", "message.bounced"],
    "isActive": true,
    "lastTriggeredAt": "2026-02-17T12:30:00Z",
    "lastSuccessAt": "2026-02-17T12:30:00Z",
    "successCount": 1542,
    "failureCount": 3,
    "consecutiveFailures": 0,
    "createdAt": "2026-02-10T08:00:00Z"
  }
]

Oluşturma tarihine göre sıralanmış (en yenisi önce) en fazla 100 webhook döndürür.

Webhook Detayını Görüntüle

GET https://api.mail.land/v1/webhooks/{id}
Get webhook detail
curl -X GET https://api.mail.land/v1/webhooks/k3m9x2p7qw4rtz \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

En son 50 teslimat kaydıyla birlikte tam webhook yapılandırmasını döndürür. Teslimat kaydı ayrıntıları için Yeniden Deneme Mantığı sayfasına bakın.

Webhook Güncelleme

PUT https://api.mail.land/v1/webhooks/{id}
Update webhook
curl -X PUT https://api.mail.land/v1/webhooks/k3m9x2p7qw4rtz \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "All Events",
    "events": ["message.delivered", "message.bounced", "message.deferred", "message.complained"],
    "isActive": true
  }'

Tüm alanlar isteğe bağlıdır: yalnızca değiştirmek istediğiniz alanları ekleyin.

Webhook Test Etme

Endpoint'inizin çalıştığını doğrulamak için bir test olayı gönderin:

POST https://api.mail.land/v1/webhooks/{id}/test
Test a webhook
curl -X POST https://api.mail.land/v1/webhooks/k3m9x2p7qw4rtz/test \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Test result
{
  "success": true,
  "statusCode": 200,
  "statusText": "OK",
  "durationMs": 145,
  "responseBody": "{\"received\": true}",
  "headersSent": {
    "X-MLND-Signature": "t=1708171200,v1=abc123...",
    "X-MLND-Event-Id": "evt_test_abc123",
    "X-MLND-Event-Version": "1",
    "X-MLND-Event": "webhook.test",
    "X-MLND-Webhook-Id": "k3m9x2p7qw4rtz",
    "X-MLND-Attempt": "1"
  },
  "wouldReceiveRealEvents": true,
  "liveEvents": ["message.delivered", "message.bounced"],
  "dormantEvents": {},
  "subscriptionWarning": null
}

Test gönderimi gerçek bir olayla aynı imzalamayı ve aynı teslim taşımasını kullanır; bu nedenle burada başarı, URL'nizi, TLS'nizi ve imza doğrulamanızı kanıtlar.

Aboneliğinizi kanıtlamaz: test isteğe bağlı olarak gönderilir, olay seçiminize göre yönlendirilmez. Son dört alan bunu ayrıca yanıtlar:

AlanAnlamı
wouldReceiveRealEventsHerhangi bir gerçek olayın bu uç noktaya ulaşıp ulaşamayacağı
liveEventsDağıtıcının uyguladığı aynı filtreden geçen abone olunmuş olaylar
dormantEventsHiçbir zaman gelmeyecek abone olunmuş olaylar, her biri nedeniyle
subscriptionWarningUç nokta erişilebilir ama kalıcı olarak boşta ise ayarlanır

"success": true ile birlikte "wouldReceiveRealEvents": false önemli durumdur: uç nokta çalışıyor ama teslim edilebilecek hiçbir şeye abone değil.

Test başarısız olursa errorType alanı nedeni gösterir: ssrf_blocked (URL'nin veya ondan yapılan bir yönlendirmenin, platformun göndermeyi reddettiği bir yeri göstermesi) veya network_error (zaman aşımı, TLS hatası, bağlantı reddi; ayrıntıyı errorMessage taşır).

Secret Yenileme

Webhook secret'ınızı kaybettiyseniz veya döndürmeniz gerekiyorsa:

POST https://api.mail.land/v1/webhooks/{id}/regenerate-secret
Regenerate webhook secret
curl -X POST https://api.mail.land/v1/webhooks/k3m9x2p7qw4rtz/regenerate-secret \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
New secret
{
  "secretKey": "whsec_x9y8z7w6v5u4..."
}

Secret'ın yenilenmesi eski secret'ı hemen geçersiz kılar. Geçerli olayları reddetmemek için sunucunuzun doğrulama kodunu bir sonraki webhook teslimatından önce güncelleyin.

Domain Kapsamı

Varsayılan olarak, webhook'lar çalışma alanınızdaki tüm domainler için olayları alır. Bir webhook'u belirli domainlerle sınırlamak için:

Domain-scoped webhook
{
  "webhookUrl": "https://your-app.com/webhooks/mailland",
  "scope": "selected_domains",
  "domainIds": ["d4n8q1zt5wm3xc", "b7r2mv9k0jy4pw"]
}

Yalnızca bu domainlerle ilgili olaylar webhook'u tetikler.

Hatalarda Otomatik Duraklatma

MailLand, 10 ardışık teslimat hatası (webhook başına pauseThreshold aracılığıyla yapılandırılabilir) sonrasında webhook'ları otomatik olarak duraklatır. Bu, çevrimdışı endpoint'ler için kaynak israfını önler.

Bir webhook duraklatıldığında:

  • pausedAt zaman damgası ayarlanır
  • pausedReason neden duraklatıldığını açıklar
  • Diğer aktif webhook'larınıza bir account.webhook_paused olayı gönderilir
  • Uygulama içi bir bildirim oluşturulur

Duraklatılmış Webhook'u Sürdürme

Sorunu düzelttikten sonra teslimatı sürdürün:

POST https://api.mail.land/v1/webhooks/{id}/resume
Resume a paused webhook
curl -X POST https://api.mail.land/v1/webhooks/k3m9x2p7qw4rtz/resume \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Bu işlem duraklatma durumunu temizler, ardışık hata sayacını sıfırlar ve webhook'u yeniden etkinleştirir (isActive tekrar true olur), böylece gelecekteki olaylar ona normal şekilde teslim edilir.

Webhook Silme

DELETE https://api.mail.land/v1/webhooks/{id}
Delete a webhook
curl -X DELETE https://api.mail.land/v1/webhooks/k3m9x2p7qw4rtz \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

204 No Content döndürür. Webhook, gelen e-posta rotaları tarafından kullanılıyorsa, bu rotalar otomatik olarak güncellenir veya devre dışı bırakılır.

Hata Yanıtları

DurumKodAçıklama
400INVALID_REQUESTGeçersiz URL, olaylar veya kapsam yapılandırması
403PLAN_LIMIT_REACHEDPlanınız için maksimum webhook sayısına ulaşıldı
404(boş gövde)Webhook ID mevcut değil: get, update, delete, regenerate-secret ve resume tarafından döndürülür
404RESOURCE_NOT_FOUNDWebhook ID mevcut değil: yalnızca /test tarafından döndürülür

Sonraki Adımlar

Bu sayfada