Webhook’lar
Webhook’lar, sistemlerinizin Elido’daki değişikliklere yoklama (polling) yapmadan tepki vermesini sağlar. İki uç nokta türü vardır:
- Olay uç noktaları: belirli olay türlerine (
link.created,member.invitedvb.) abone olun. - SIEM uç noktaları: firehose; çalışma alanındaki her olay ve
audit.eventyükleri olarak tam denetim günlüğü akışı.
Uç nokta oluşturma
Settings → Webhooks üzerinden ya da API ile:
curl -X POST https://api.elido.app/v1/webhooks/workspaces/1/webhooks \
-H "Authorization: Bearer $ELIDO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://hooks.example.com/elido",
"events": ["link.created", "link.deleted"],
"kind": "event"
}'Yanıt, yalnızca bir kez gösterilen bir secret içerir:
{
"endpoint": { "id": 7, "url": "...", "events": [...] },
"secret": "whsec_a1b2c3d4..."
}Gizli anahtarı şimdi kaydedin. Bir daha asla döndürülmez. Gelen teslimatlardaki imzaları doğrulamak için kullanın.
İmzaları doğrulama
Her teslimat şunları taşır:
X-Elido-Signature: v1=4f8a...
X-Webhook-Signature: v1=4f8a... # backward-compatible alias
X-Webhook-Timestamp: 1735689600
X-Webhook-Event: link.created
X-Webhook-Delivery: 12345HMAC-SHA256(secret, "{timestamp}.{raw_body}") hesaplayın ve v1= sonrasındaki değerle sabit zamanlı karşılaştırın. 5 dakikadan eski teslimatları reddedin (now - timestamp > 300).
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(secret: string, headers: Headers, rawBody: string) {
const sig = headers.get("X-Webhook-Signature")?.replace(/^v1=/, "");
const ts = headers.get("X-Webhook-Timestamp");
if (!sig || !ts) return false;
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const expected = createHmac("sha256", secret)
.update(`${ts}.${rawBody}`)
.digest("hex");
return timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
}Yeniden denemeler
Başarısız teslimatlar (2xx olmayan her şey) üstel geri çekilmeyle yeniden denenir: 1 dakika, 5 dakika, 15 dakika. 3 denemeden sonra teslimat failed olarak işaretlenir.
Başarısız (veya zaten teslim edilmiş) bir denemeyi Webhooks → uç nokta → Retry üzerinden ya da şu komutla elle yeniden başlatabilirsiniz:
curl -X POST \
https://api.elido.app/v1/webhooks/workspaces/1/webhooks/7/deliveries/12345/retry \
-H "Authorization: Bearer $ELIDO_TOKEN"SIEM modu
SIEM türündeki bir uç nokta, olay başına abonelik filtresinden bağımsız olarak çalışma alanındaki her olayı alır. Buna hem operasyonel olaylar (link.created, member.invited, …) hem de denetim günlüğü firehose’u (audit.event) dahildir.
Denetimle ilgili her eylem (BAA imzalandı, üye rolü değişti, API anahtarı iptal edildi, …) bir audit.event zarfı yayar:
{
"type": "audit.event",
"workspace_id": 1,
"data": {
"kind": "member.role_changed",
"target_type": "member",
"target_id": 42,
"actor_user_id": 7,
"ip": "1.2.3.4",
"user_agent": "...",
"metadata": { "from": "viewer", "to": "admin" },
"recorded_at": "2026-05-01T12:00:00Z"
},
"timestamp": "2026-05-01T12:00:00Z"
}SIEM alım katmanınız (Splunk HEC, Datadog Logs, özel bir aktarıcı) kendi yerel biçimine çevirmekten sorumludur.
Kullanılabilir olay türleri
| Olay | Ne zaman |
|---|---|
link.created | Yeni bir bağlantı oluşturulduğunda |
link.updated | Bir bağlantının hedefi, slug’ı veya kuralları değiştiğinde |
link.deleted | Bir bağlantı arşivlendiğinde veya kalıcı olarak silindiğinde |
workspace.created | Yeni bir çalışma alanı hazırlandığında |
workspace.updated | Çalışma alanı ayarları değiştiğinde |
member.invited | Biri davet edildiğinde |
member.removed | Bir üye kaldırıldığında (veya ayrıldığında) |
audit.event | Herhangi bir denetim günlüğü girdisi; yukarıdaki SIEM moduna bakın |
Ayrıca gönderilenler (yükler için yardım merkezi webhook kılavuzuna bakın): link.expired, link.cap_reached, link.broken, member.role_changed, domain.verified, domain.ssl_failed, invitation.created, invitation.accepted, subscription.* ve usage.threshold_80 / usage.threshold_100.
Planlandı, bugün gönderilmez: tıklama başına olaylar,
link.clicked.aggregated,conversion.recorded,threshold.exceeded,domain.tls_renewedveqr.generated. Tıklama etkinliğini izlemek için analitik API’sini veya panoyu kullanın.