# Webhook'lar

`/admin/webhooks`, sistem yöneticisinin harici sistemleri (faturalama platformları, izleme, özel tutkal kodu) polling olmadan yaşam döngüsü olaylarına abone etmesini sağlar. İki sekme:

### Endpoint'ler

Kayıtlı abonelerin tablosu — URL, abone olunan olay sayısı (tooltip onları listeler), durum rozeti (enabled / disabled / muted), son teslimat sonucu. "+ Endpoint ekle" CTA üzerinden ekleyin:

- **URL** — `https://` ya da `http://` (ikisi de kabul edilir; sunucunun kendi ağı dışındaki her alıcı için HTTPS kullanın, yük hesap verisi taşır); özel / loopback aralıkları SSRF savunması tarafından engellenir.
- **Olaylar** — kategori-gruplu checkbox grid (account, domain, ssl, backup, database, email, ftp, dns, plan). En az bir olay gerekir: hiçbir olaya abone olmayan bir uç oluşturmada da düzenlemede de reddedilir (`400 WEBHOOK_VALIDATION`). "Tümünü seç" / "Hiçbirini seçme".
- **Gizli anahtar** — isteğe bağlı; atlanırsa sunucu kriptografik olarak rastgele 32 byte'lık bir token üretir. Gizli anahtar Kaydet'ten sonra tek seferlik açığa çıkarma diyaloğunda **bir kez** gösterilir — hemen kopyalayın. Abone tarafı HMAC doğrulaması bu gizli anahtarı kullanır.
- **Açıklama** — serbest form etiket.
- **Enabled / muted_until** — soft-mute, abone satırını kaybetmeden teslimatı duraklatmanızı sağlar. Dispatcher, zaman damgası geçene kadar susturulmuş aboneyi atlar; değer ISO-8601 olmalıdır (`2030-01-01T00:00:00Z`).

Sağladığınız gizli anahtar 16–128 karakter, boşluksuz yazdırılabilir ASCII olmalıdır (boş ya da daha kısa bir değer oluşturmada da düzenlemede de reddedilir); kaydettikten sonra API ve panel yalnız son dört karakterini gösterir. Bir düzenleme diske yazılmadan önce bütün olarak doğrulanır: reddedilen değişiklik (bilinmeyen olay, özel ağ URL'si, zayıf gizli anahtar, bozuk susturma zaman damgası) kayıtlı aboneyi olduğu gibi bırakır; sunucunun okuyamadığı bir abone kaydı listeyi ya da dispatcher'ı bozmak yerine log satırıyla atlanır.

Satır başına aksiyonlar: Görüntüle / Düzenle / Test ateşle / Gizli anahtarı döndür / Sil. **Test ateşle** sentetik olayı yalnız bu uca gönderir — aynı olaya abone diğer uçlar almaz — ve uç devre dışı ya da sessize alınmışken `409 WEBHOOK_DISABLED` döner. Oluşturma, düzenleme, test, döndürme ya da silmede bir limit yanıtı (`429`) başarı olarak değil hata olarak bildirilir (diyalog açık kalır); reddin agent tarafındaki gerekçesi toast'a ulaşır.

### Teslimatlar

Tüm endpoint'lerdeki her teslimat denemesinin sayfalanmış geçmişi. Endpoint, olay, duruma göre filtre. Her satır gelen HTTP durumunu, deneme sayısını, dispatch payload'unu (tıklayınca tam istek / yanıt alıntısıyla detay diyaloğunu açar) gösterir. Dispatcher hâlâ yeniden denerken satır deneme sayısı ve sonraki deneme zamanıyla **Başarısız** okunur; nihai sonuç (başarı ya da dead-letter) onun yerini alır. Başarısız teslimatlar tek tıkla "Yeniden dene" butonunu yüzeye çıkarır: olay teslimatın kendi ucuna yeniden kuyruklanır — uç silinmişse `404`, devre dışı ya da sessize alınmışsa `409 WEBHOOK_DISABLED`. Uç listesi, olay kataloğu ya da geçmiş okunamazsa boş liste yerine Yenile butonlu bir hata görünümü gösterilir.

### Olay kataloğu (25 olay)

Stabil, nokta-notasyonlu tanımlayıcılar — yalnızca eklenir, asla yeniden adlandırılmaz:

```
account.{created,suspended,unsuspended,terminated,package_changed,password_changed}
domain.{added,removed}
ssl.{issued,renewed,failed}
backup.{completed,failed}
database.{created,deleted}
email.{created,deleted}
ftp.{created,deleted}
dns.{record_added,record_updated,record_deleted}
plan.{created,updated,deleted}
```

Tam abone tarafı kılavuzu (payload şekli, header kontratı, PHP SDK ile ya da elle imza doğrulama) [`docs/developer/webhooks.md`](../developer/webhooks.md) içinde yer alır.

**Kullanılan endpoint'ler:** `GET /system/webhooks/events`, `GET/POST /system/webhooks`, `GET/PUT/DELETE /system/webhooks/{id}`, `POST /system/webhooks/{id}/rotate`, `POST /system/webhooks/{id}/test`, `GET /system/webhooks/deliveries`, `GET /system/webhooks/deliveries/{id}`, `POST /system/webhooks/deliveries/{id}/retry`.

---
