subscription.activated✓ CanlıAbonelik

Abonelik aktif (veya trial) olduğunda gönderilir — aktivasyonda ve her yenilemede. Premium yetkiyi bununla açarsın. ⚠️ Aynı abonelik için birden çok kez (farklı id'lerle) gelebilir; bu yüzden tenantId durumuna göre idempotent provision et, event sayısına güvenme. data, fatura periyodunu ve mevcut dönemin bitiş zamanını taşır.

← Lifecycle Webhook'ları

⚠️ Dikkat: subscription.activated AYNI abonelik için BİRDEN ÇOK kez gelir — checkout + subscription.created + subscription.updated + her yenileme; her biri FARKLI id ile (retry değil). Bu yüzden id ile dedup bunları birleştirmez. Provision'ı event SAYISINA göre değil, tenantId DURUMUNA göre idempotent yap ("aktif et" — kaç kez gelirse gelsin sonuç aynı). currentPeriodEnd her seferinde günceldir (erişim bitiş zamanı).

Ne zaman & ne yaparsın

Ne zamanAbonelik aktif/trial oldu (aktivasyon + her yenileme)
GeliştiriciPremium provision — idempotent (tenantId durumuna göre)
Abonelik / gatingYok — bağlı (connected) her kuruluma her zaman gelir

Envelope (tüm lifecycle/event'lerde ortak)

AlanTipZorunluAçıklama
idstringIdempotency anahtarı. Aynı id tekrar gelebilir (retry) → dedup et.
typestring"subscription.activated" — event mi lifecycle mı olduğunu bununla ayırt et.
versionstringEnvelope şema versiyonu ("1").
tenantIdstringHangi tenant (kurulum). İşlemini buna göre yap; cross-tenant doğrula.
occurredAtnumberOluşma zamanı (unix ms).
dataobjectTipe özel gövde (aşağıda).

data alanları

AlanTipZorunluAçıklama
intervalstringFatura periyodu (örn. "monthly"). Erişim süresini tek başına buradan değil currentPeriodEnd'den yönet.
currentPeriodEndnumberMevcut dönemin bitişi (unix ms — örn. 1783374777006). Premium erişimi bu zamana kadar geçerli say; her activated'te günceldir.

Tam örnek payload

Örnek webhook gövdesi (data alanı teyitli — webhook.site)
{
  "id": "evt_9f2a7c1b",
  "type": "subscription.activated",
  "version": "1",
  "tenantId": "tnt_123",
  "occurredAt": 1780000000000,
  "data": {
    "interval": "monthly",
    "currentPeriodEnd": 1783374777006
  }
}

En iyi pratik

  • tenantId durumuna göre idempotent "aktif" set et — toggle'lama. Aynı abonelik için birden çok kez (farklı id) gelir; event sayısına/id'sine değil, sonuç durumuna güven.
  • currentPeriodEnd'i sakla ve erişimi buna kadar ver; yeni activated gelmezse dönem sonunda kıs.
  • Yan etkileri (hoşgeldin maili, kota sıfırlama) tekrarlama — "daha önce aktif miydi?" durumuna bakarak yalnız ilk aktivasyonda çalıştır (id ile değil, tenantId durumu ile koru — id her seferinde farklı).
  • past_due → activated geri dönüşü olabilir: degrade ettiğin yetkiyi burada tam geri aç.