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/webhookscurl -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ı
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
name | string | Hayır | Bu webhook için okunabilir bir ad |
webhookUrl | string | Evet | Olayları almak için HTTPS endpoint URL'si |
products | array | Hayır | Ürün filtresi: transactional, marketing, inbound, system |
events | array | Hayır | Abone olunacak belirli olaylar (bkz. Olaylar) |
includeFutureEvents | boolean | Hayır | Abone olunan ürünlere eklenen yeni olayları alın (varsayılan: true) |
scope | string | Hayır | all_domains (varsayılan) veya selected_domains |
domainIds | array | Hayır | Filtrelenecek domain ID'leri (scope selected_domains ise zorunludur) |
Yanıt
Durum: 201 Created
{
"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/webhookscurl -X GET https://api.mail.land/v1/webhooks \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."[
{
"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}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}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}/testcurl -X POST https://api.mail.land/v1/webhooks/k3m9x2p7qw4rtz/test \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"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:
| Alan | Anlamı |
|---|---|
wouldReceiveRealEvents | Herhangi bir gerçek olayın bu uç noktaya ulaşıp ulaşamayacağı |
liveEvents | Dağıtıcının uyguladığı aynı filtreden geçen abone olunmuş olaylar |
dormantEvents | Hiçbir zaman gelmeyecek abone olunmuş olaylar, her biri nedeniyle |
subscriptionWarning | Uç 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-secretcurl -X POST https://api.mail.land/v1/webhooks/k3m9x2p7qw4rtz/regenerate-secret \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"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:
{
"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:
pausedAtzaman damgası ayarlanırpausedReasonneden duraklatıldığını açıklar- Diğer aktif webhook'larınıza bir
account.webhook_pausedolayı 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}/resumecurl -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}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ı
| Durum | Kod | Açıklama |
|---|---|---|
400 | INVALID_REQUEST | Geçersiz URL, olaylar veya kapsam yapılandırması |
403 | PLAN_LIMIT_REACHED | Planı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 |
404 | RESOURCE_NOT_FOUND | Webhook ID mevcut değil: yalnızca /test tarafından döndürülür |
Sonraki Adımlar
- Olaylar: tüm olay türlerinin ve verilerinin tam referansı
- İmza Doğrulama: webhook özgünlüğünü doğrulayın
- Yeniden Deneme Mantığı: yeniden deneme davranışını ve hata yönetimini anlayın