Sigorta
Referans
Webhook Olayları

Webhook Olayları

Sigorta siparişlerinizin sonucu değiştiğinde Lunixi endpoint'inize insurance.* olaylarını gönderir: poliçe kesildi, kesilemedi, belgesi hazır, iptal edildi, prim iadesi gerekiyor ya da tamamlandı; hasar kaydı sağlayıcıya iletildi ya da iletilemedi; talep sağlayıcıya iletildi. Olaylar Checkout Form yolunda da API yolunda da aynıdır.

Teslimat, imza doğrulama ve yeniden deneme bütün ürünlerde aynıdır: Webhook'lar.

Olaylar

OlayNe zaman gönderilir
insurance.policy.issuedSiparişin poliçeleri sağlayıcıda kesildi.
insurance.policy.failedPoliçe kesin olarak kesilemedi ya da prim tahsil edilemediği için poliçe istenmedi. Sebep data.errorCode alanındadır.
insurance.refund.requiredPrim tahsil edildi ama poliçe kesin olarak kesilemedi; primin alıcıya iade edilmesi gerekiyor.
insurance.policy.document_readySiparişin kesilen poliçelerinin belgesi alınabilir.
insurance.policy.cancelledSağlayıcı siparişin bütün poliçelerinin iptalini kesinleştirdi.
insurance.refund.completedPrim iadesi tamamlandı.
insurance.claim.submittedHasar kaydı sağlayıcıya iletildi ve sağlayıcı kaydı aldı.
insurance.claim.failedHasar kaydı sağlayıcı tarafından kabul edilmedi ya da sağlayıcıya ulaşmadı. Sebep data.claim.errorCode alanındadır.
insurance.lead.submittedTalep sağlayıcıya iletildi ve sağlayıcı talebi aldı.

insurance.policy.issued

Siparişin poliçeleri kesildiğinde gönderilir. data.policyStatus ISSUED olur; poliçe numaraları data.policies[].policyNumber alanındadır.

Belge bu anda henüz hazır olmayabilir (documentStatus: PENDING). Belge hazır olduğunda ayrıca insurance.policy.document_ready gelir.

Poliçe sonucu gecikmeli kesinleşebilir. Bir sipariş için önce insurance.policy.failed (ve insurance.refund.required) geldiyse ve iade henüz başlamadıysa, poliçe sonradan kesildiğinde insurance.policy.issued da gelir. Bu durumda data.refundStatus NONE olur; prim iadesi artık gerekmez.

insurance.policy.failed

Üç durumda gönderilir:

Durumdata
Poliçe kesin olarak kesilemedi.policyStatus: FAILED_FINAL. errorCode sebebi taşır, ör. insurance.policy.issue_failed ya da insurance.policy.issue_deadline_passed.
Ödeme tahsil edilmeden iptal edildi, süresi doldu ya da kesin olarak başarısız oldu.collectionStatus: FAILED, policyStatus: NOT_REQUESTED, errorCode: insurance.premium.not_captured. Prim alınmadığı için iade gerekmez.
Primi sağlayıcı tahsil ediyor ve sağlayıcı çekimi reddetti.collectionStatus: FAILED, policyStatus: NOT_REQUESTED, errorCode: insurance.payment.declined. Sizin ödemeniz geçerli kalır. Bkz. Sağlayıcı Tahsilatı.

Prim tahsil edildiyse aynı anda insurance.refund.required da gönderilir.

insurance.refund.required

Prim tahsil edildiği hâlde poliçe kesin olarak kesilemediğinde gönderilir. Siparişte poliçe FAILED_FINAL, iade REQUIRED olur. errorCode poliçenin neden kesilemediğini gösterir.

Olayı aldığınızda siparişi sipariş ucundan okuyun:

  • refundStatus PENDING ya da REFUNDED ise iade başlamıştır; tamamlandığında insurance.refund.completed gelir.
  • refundStatus REQUIRED ise primi prim iadesi ucuyla iade edin. Primi Lunixi dışında tahsil ettiyseniz iadeyi kendi kanalınızdan yapıp aynı uçla bildirin.

Prim iadesi isteği tekrarlanabilir: iade zaten başladıysa sipariş olduğu gibi döner.

insurance.policy.document_ready

Siparişin kesilen poliçelerinin belgesi sağlayıcıda doğrulandığında gönderilir. data.documentStatus AVAILABLE olur.

Belgeyi data.policies[].documentUrl adresinden indirin. Bu adres Poliçe Belgesi ucudur; isteği diğer API istekleriniz gibi API anahtarınızla imzalarsınız. Adres tek başına yetki taşımaz ve belge Lunixi'de saklanmaz.

insurance.policy.cancelled

Sağlayıcı siparişin bütün poliçelerinin iptalini kesinleştirdiğinde gönderilir. data.policyStatus CANCELLED olur. İptal edilen poliçenin belgesi alınamaz; documentUrl boş metin olur.

Poliçe iptali primi iade etmez. Prim iadesi ayrı bir iştir ve tamamlandığında insurance.refund.completed gelir. Bkz. İptal ve Prim İadesi.

insurance.refund.completed

Prim iadesi tamamlandığında gönderilir. data.refundStatus REFUNDED olur.

  • Prim Lunixi ödemesinde tahsil edildiyse olay, iade ödemeden yapıldığında gelir.
  • Primi Lunixi dışında tahsil ettiyseniz olay, iadeyi prim iadesi ucuyla bildirdiğinizde gelir.

insurance.claim.submitted

Bir hasar kaydı sağlayıcıya ulaştığında ve sağlayıcı kaydı aldığında gönderilir. Kayıt data.claim alanındadır; data.claim.status SUBMITTED olur. Sağlayıcının hasar belgesini hasar belgesi ucundan alabilirsiniz.

Olay hasarın değerlendirme sonucunu taşımaz; değerlendirme sigorta şirketindedir.

insurance.claim.failed

Hasar kaydı sağlayıcı tarafından kabul edilmediğinde ya da sağlayıcıya ulaşmadığında gönderilir. data.claim.status FAILED olur; sebep data.claim.errorCode alanındadır:

data.claim.errorCodeAnlamı
insurance.claim.rejectedSağlayıcı kaydı reddetti.
insurance.provider.unavailableKayıt sağlayıcıya ulaşmadı.

Gerekirse aynı poliçe için yeni bir hasar kaydı açabilirsiniz: Hasar Kaydı.

insurance.lead.submitted

Bir talep sağlayıcıya ulaştığında ve sağlayıcı talebi aldığında gönderilir. Talep data.lead alanındadır; data.lead.status SUBMITTED olur. Talep bir siparişe bağlı olmadığı için bu olayın data alanı sipariş alanlarını taşımaz: Talep olayının yükü.

Olay, sağlayıcının talepten sonraki adımlarını (alıcıyla iletişim, teklif) taşımaz.

Olay gönderilmeyen durumlar

Aşağıdaki durumlar için olay gönderilmez. Bunları sipariş ucundan izleyin:

DurumSiparişte
Teklif ya da sipariş oluşturulduSipariş sipariş listesinde görünür.
Sağlayıcı iptal talebini reddettiPoliçe yürürlükte kalır; errorCode: insurance.policy.cancel_failed.
Prim iadesi reddedildirefundStatus: FAILED, refundErrorCode: insurance.refund.rejected.
Poliçe belgesi doğrulanamadıdocumentStatus: FAILED. Kesilmiş poliçe geçerli kalır; belgeyi yine Poliçe Belgesi ucundan isteyebilirsiniz.
Hasar kaydının sonucu kesinleşmediKayıt hasar kaydı ucunda status: UNKNOWN görünür. Sonuç kesinleştiğinde insurance.claim.submitted ya da insurance.claim.failed gelir.
Talebin sonucu bilinmiyor ya da talep başarısız olduTalep talep ucunda status: UNKNOWN ya da FAILED görünür. Sonuç talep isteğinin yanıtında da döner.

Teslimatın yapısı

Teslimatın gövdesi bir zarftır; siparişin alanları data altındadır.

Zarf

AlanAnlamı
idOlay kimliği; x-lunixi-event-id başlığıyla ve data.eventId ile aynı değer.
typeOlay tipi, ör. insurance.policy.issued.
organizationIdOrganizasyonunuz.
productCodeINSURANCE_SERVICE
environmentTEST ya da LIVE; siparişin sağlayıcı bağlantısının ortamı. Bkz. Abonelik.
eventVersionOlayın sürümü; bugün 1.
schemaVersiondata şemasının sürümü; bugün v1.
createdAtOlayın oluştuğu an.
dataSiparişin alanları; aşağıya bakın.

Zarfta bu tabloda olmayan alanlar da bulunabilir; kodunuzu yalnızca burada belgelenen alanlara dayandırın.

data

data, olayın anlattığı geçişten sonraki sipariş durumunu taşır. Talep olayının data alanı farklıdır: Talep olayının yükü.

AlanTipAçıklama
eventIdstringOlay kimliği; zarftaki id ile aynı.
eventTypestringOlay tipi; zarftaki type ile aynı.
merchantIdstringOrganizasyonunuz; zarftaki organizationId ile aynı.
insuranceOrderIdstringSipariş kimliği (inso_…). Sipariş ucundaki orderId ile aynı değerdir.
paymentIntentIdstring ya da nullSiparişin bağlı olduğu Lunixi ödemesi.
merchantOrderIdstring ya da nullKendi sipariş numaranız.
insuranceTypestringSigorta tipi, ör. TICKET_CANCELLATION. Bkz. Sigorta Tipleri.
premiumCollectedBystringPrimi kimin tahsil ettiği: primi siz tahsil ettiğinizde MERCHANT, sağlayıcınız tahsil ettiğinde PROVIDER (Sağlayıcı Tahsilatı).
providernesnePoliçeyi kesen sağlayıcı: code, name, logoUrl (string ya da null) ve bağlantınızın kimliği connectionId. Bilgi içindir.
statusstringGenel durum; dört eksenden türetilir. Bkz. Kavramlar › Genel durum.
collectionStatusstringTahsilat ekseni.
policyStatusstringPoliçe ekseni.
refundStatusstringİade ekseni.
documentStatusstringBelge ekseni.
premiumAmountintegerPrim, kuruş.
currencystringPara birimi, ISO 4217.
policiesdiziSepet kalemi başına poliçeler; alanları aşağıda. Poliçe oluşmadıysa boş dizi.
errorCodestring ya da nullYalnızca insurance.policy.failed ve insurance.refund.required olaylarında bulunur: hatanın Lunixi kodu. Kodların anlamı: Hata Kodları.
claimnesneYalnızca insurance.claim.* olaylarında bulunur: olayın konusu olan hasar kaydı; alanları aşağıda.
createdAtstringSiparişin oluşturulduğu an. Olayın anı zarftaki createdAt alanıdır.

Durum eksenlerinin değerleri: Kavramlar › Sipariş durumları.

policies[]:

AlanTipAçıklama
policyIdstringPoliçe kimliği (insp_…).
basketItemIdstringPoliçenin sigortaladığı sepet kalemi.
policyNumberstring ya da nullPoliçe belgesindeki numara. Poliçe kesilene kadar null.
policyStatusstringBu poliçenin durumu.
documentStatusstringBu poliçenin belge durumu.
documentUrlstringPoliçe yürürlükteyse (ISSUED ya da CANCEL_PENDING) Poliçe Belgesi ucunun tam adresi; değilse boş metin.

claim (yalnızca insurance.claim.* olaylarında):

AlanTipAçıklama
claimIdstringHasar kaydının kimliği (insclm_…).
policyIdstringHasarın bildirildiği poliçe (insp_…).
statusstringKaydın durumu: SUBMITTED ya da FAILED.
incidentAtstringHasara konu olayın anı, ISO 8601.
documentKindsstring[]Kayıtla gönderilen belgelerin türleri.
errorCodestring ya da nullYalnızca insurance.claim.failed olayında dolu: sebebin Lunixi kodu.
submittedAtstring ya da nullSağlayıcının kaydı aldığının doğrulandığı an.
createdAtstringKaydın oluşturulduğu an.

Hasar kaydı olaylarında siparişin diğer alanları olayın anındaki sipariş durumunu taşır. Belge ve sağlayıcının hasar referansı yüke girmez.

Talep olayının yükü

insurance.lead.submitted olayının data alanı yalnızca şu alanları taşır:

AlanTipAçıklama
eventIdstringOlay kimliği; zarftaki id ile aynı.
eventTypestringOlay tipi: insurance.lead.submitted.
merchantIdstringOrganizasyonunuz; zarftaki organizationId ile aynı.
leadnesneOlayın konusu olan talep; alanları aşağıda.
createdAtstringTalebin oluşturulduğu an. Olayın anı zarftaki createdAt alanıdır.

lead:

AlanTipAçıklama
leadIdstringTalebin kimliği (insl_…).
insuranceTypestringTalep tipi, ör. CARGO_TRANSIT.
schemaVersionintegerTalebin doğrulandığı talep şemasının sürümü.
statusstringTalebin durumu: SUBMITTED.
submittedAtstringSağlayıcının talebi aldığı an.
createdAtstringTalebin oluşturulduğu an.

Talebin gövdesi, not ve kişisel veriler, sağlayıcının adı ve talep referansı yüke girmez. Talebin maskeli görüntüsü için okuma ucunu kullanın.

Webhook'ta değeri olmayan alanlar null olarak gelir; alan yine de gövdede bulunur. Kişisel veri ve sağlayıcının kendi referansları yüke girmez.

Abonelik

Olayları almak için sigorta ürünü için bir webhook endpoint'i oluşturun:

AlanDeğer
productCodeINSURANCE_SERVICE
eventTypesİstediğiniz olaylar, ör. ["insurance.policy.issued", "insurance.refund.required"]; bütün sigorta olayları için ["insurance.*"]
environmentTEST endpoint, sağlayıcı bağlantısı Test ortamında olan siparişlerin olaylarını; LIVE endpoint, bağlantısı Canlı ortamda olanlarınkini alır.
curl -X POST "https://api-gateway.lunixi.com/api/v1/organizations/$ORG_ID/webhook-endpoints" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sigorta olayları — test",
    "url": "https://merchant.example.com/webhooks/lunixi",
    "productCode": "INSURANCE_SERVICE",
    "environment": "TEST",
    "secretRef": "vault:<secretId>",
    "eventTypes": ["insurance.*"]
  }'

Olayın ortamını API anahtarınız değil, siparişin sağlayıcı bağlantısı belirler. Test ederken bağlantınızın ortamını kontrol edin: Test Ortamı › Ortamı ne belirler.

Endpoint oluşturma, imza secret'ı ve teslimat geçmişi: Webhook Kurulumu.

İmza, yeniden deneme ve tekilleştirme

İmzayı her teslimatta doğrulayın; imza biçimi ve yeniden deneme politikası bütün ürünlerde aynıdır: Webhook'lar.

  • Teslimat en az bir kez yapılır. Aynı olay birden çok kez gelebilir. Olayı x-lunixi-event-id ile idempotent işleyin. Aynı olay her teslimatta aynı kimliği taşır; bu değer data.eventId ile de aynıdır.
  • Sıraya güvenmeyin. Yeniden denenen bir teslimat, sonraki bir olaydan sonra gelebilir. Siparişin son durumunu olayın sırasından değil, data içindeki durum eksenlerinden çıkarın. Emin olamadığınızda siparişi sipariş ucundan okuyun.
  • Olaya hızlı yanıt verin. İmzayı doğrulayın, olayı kendi kuyruğunuza yazın ve 2xx dönün. Belge indirme gibi işleri yanıttan sonra yapın.

Webhook'u sipariş ucuyla birlikte kullanma

Webhook, siparişin sonucunu hızlı öğrenmenin yoludur; tek kaynak değildir. Endpoint'iniz bir süre erişilemezse ya da durum olay gönderilmeyen bir yoldan değiştiyse (yukarıdaki tablo), siparişi sipariş ucundan okuyun. Webhook'tan gelen data.insuranceOrderId sipariş ucundaki orderId ile aynıdır.

Webhook’u sipariş ucuyla birlikte kullanmaVeri akışı: webhook hızlı kaynaktır, sipariş ucu ise bir olay kaçırıldığında ya da gönderilmediğinde kaynaktır; her iki durumda son hâli olayların sırasından değil durum eksenlerinden çıkarır ve kaydınızı sipariş kimliğiyle güncellersiniz.HIZLIKAÇIRINCAGÜNCELLEWebhookx-lunixi-event-idSipariş ucuGET …/orders/{orderId}Eksenleri okuyunolay sırası değilKaydınızinsuranceOrderId = orderIdLEJANTKAYNAKSON HÂLSİZİN SİSTEMİNİZ
Teslimat en az bir kezdir ve sırası garanti değildir: x-lunixi-event-id ile tekilleştirin, son hâli data içindeki durum eksenlerinden alın.

İlgili