Eklentinin webhook ile abone olabileceği tüm event tipleri. Bir event'e abone olmak için manifest'te events[] listesine ekle ve events:subscribe scope'unu iste. Bir event'e tıkla → örnek payload açılır.
{ id, type, version, actor?, origin?, environment, tenantId, occurredAt, data }. Aşağıdaki örneklerde yalnız data event'e özeldir. version bir string'dir ("1", sayı değil); environment "sandbox" | "production"'dır (imzalı gövdede; test mağazası = sandbox — header'daki X-Restomenum-Environment imzasız kolaylık kopyasıdır, gövdedekini kullan); occurredAt epoch milisaniyedir (imza t= ise saniye); id idempotency anahtarıdır (retry'da sabit). Teslim biçimi ve imza için /webhook ve imza şeması.table.* / packet.*) zarf ayrıca sequence + sequenceScope taşır (opsiyonel): teslim sıralı değildir, bayat bir snapshot'ı bunlarla tanırsın → Olay sırası. Gövdedeki tutar alanları (currency, amountExponent, orders[].amounts) için Tutarlar.actor (kim yaptı) opsiyoneldir ve data'nın dışında durur. ⚠️ actor.userId/role doğrulanmaz (PIN ile seçilir) — yetki kararında kullanma; doğrulanmış tek alan actor.pluginId'dir. origin (deviceId) sözleşmeden çıktı — platform göndermiyor, mali/kasa atfını buna dayandırma. Kendi yazdığın olay sana da gelir → döngü koruması sende: hesap yaşam döngüsü.customers:read scope'unda gönderilir.app.installed, subscription.*, app.uninstalled) abone olmadan aynı uca düşer → Lifecycle Webhook’ları.events[] listesi. Abone olmadığın bir tip sana hiç yayınlanmaz ve bu tamamen sessizdir — ne teslim log'una bir satır düşer, ne bir hata/uyarı alırsın. Teslim edilmeyen bir olay ile hiç abone olmadığın bir olay dışarıdan aynı görünür.table.closed akmaya devam ederken table.reopened hiç gelmiyor olabilir — "webhook çalışıyor" gözlemi o tipe abone olduğunu kanıtlamaz. Sırayla kontrol et: (1) manifest events[] içinde tip var mı, (2) o sürüm yayınlandı mı (taslak sürümün aboneliği çalışmaz), (3) events:subscribe scope'u onaylı mı, (4) tipin gerektirdiği veri scope'u (orders:read vb.) verildi mi — eksikse olay gelir ama data boşalır.table.createdscope: orders:read✓ Canlıtable.updatedscope: orders:read✓ Canlıtable.closedscope: orders:read✓ Canlıtable.reopenedscope: orders:read✓ Canlıtable.deletedscope: orders:read✓ Canlıtable.closed_deletedscope: orders:read✓ Canlıtable.close_abortedscope: orders:read✓ Canlıpacket.createdscope: orders:read✓ Canlıpacket.updatedscope: orders:read✓ Canlıpacket.closedscope: orders:read✓ Canlıpacket.reopenedscope: orders:read✓ Canlıpacket.deletedscope: orders:read✓ Canlıpacket.closed_deletedscope: orders:read✓ Canlıpacket.cancelledscope: orders:read✓ Canlıpacket.status_changedscope: orders:read⏳ Yakındapacket.close_abortedscope: orders:read✓ Canlıproduct.createdscope: products:read✓ Canlıproduct.updatedscope: products:read✓ Canlıproduct.deletedscope: products:read✓ Canlıcategory.createdscope: products:read✓ Canlıcategory.updatedscope: products:read✓ Canlıcategory.deletedscope: products:read✓ Canlıuser.createdscope: users:read✓ Canlıuser.updatedscope: users:read✓ Canlıuser.deletedscope: users:read✓ Canlıcustomer.createdscope: customers:read✓ Canlıcustomer.updatedscope: customers:read✓ Canlıcustomer.order_addedscope: customers:read✓ Canlıcustomer.payment_addedscope: customers:read✓ Canlıpayment_method.createdscope: payment_methods:read✓ Canlıpayment_method.updatedscope: payment_methods:read✓ Canlıpayment_method.deletedscope: payment_methods:read✓ Canlıingredient.createdscope: ingredients:read✓ Canlıingredient.updatedscope: ingredients:read✓ Canlıingredient.deletedscope: ingredients:read✓ Canlıpurchase.grantedscope: purchases:read✓ Canlımessaging.message.statusscope: capability:messaging.send:consume✓ Canlıinvoice.statusscope: capability:invoice.issue:consume✓ Canlı