Sigorta
API Yolu
Hasar Kaydı

Hasar Kaydı

Kesilmiş bir poliçe için hasarı, sağlayıcı bağlantınız üzerinden sağlayıcınıza bildirirsiniz. Hasar kaydını POST /api/v1/insurance/policies/{policyId}/claims ile açarsınız; kaydın sonucunu kayıt ucundan ve webhook ile izlersiniz.

  • Hasar kaydı bildirimdir. Lunixi hasarı sağlayıcınıza iletir ve iletimin sonucunu gösterir. Hasarın değerlendirilmesi (kabul, ret, ödeme) sigorta şirketindedir; değerlendirmenin sonucu kayıtta yer almaz.
  • Belge Lunixi'de saklanmaz. Gönderdiğiniz belge yalnızca bu istekte işlenir ve sağlayıcınıza iletilir. Belgenin içeriği yanıtlara, istek kayıtlarına ve webhook'lara girmez.
  • Kayıt poliçe başınadır. Sigorta birim başınadır; policyId değerini siparişin policies[] dizisinden alırsınız: Sipariş nesnesi.

Kimlik doğrulama ve imzalama: Akışlar › Kimlik doğrulama.

Hasar kaydı açılabilen poliçeler

KoşulKarşılanmazsa
Sigorta tipi hasar kaydını destekler. Bugün yalnızca TICKET_CANCELLATION.412 insurance.claim.not_supported
Bağlantınızdaki ürün hasar kaydını destekler.412 insurance.claim.not_supported
Poliçe yürürlüktedir: poliçenin policyStatus değeri ISSUED.409 insurance.claim.state_conflict; bkz. Durum çakışması
Poliçede açık bir hasar kaydı yoktur.409 insurance.claim.state_conflict, reason: claim_open

Bakılan, siparişin değil o poliçenin (policies[].policyStatus) durumudur. Bir poliçede aynı anda tek bir açık kayıt bulunur: durumu PENDING, SUBMITTED ya da UNKNOWN olan kayıt açıktır. Sağlayıcıya ulaşan (SUBMITTED) bir kayıt varken aynı poliçe için ikinci kayıt açılmaz. FAILED bir kayıt yeni kayda engel değildir.

Akış

Belgeyi hazırlayın

Sigorta tipinin istediği belgeyi PDF olarak hazırlayın: Belgeler.

Hasar kaydını açın

POST /api/v1/insurance/policies/{policyId}/claims ucunu olay anı ve belgeyle çağırın. Lunixi kaydı açar ve aynı istekte sağlayıcınıza iletir.

Sonucu işleyin

Yanıttaki status değerine göre devam edin: Sonuçlar. Sonuç kesinleştiğinde insurance.claim.submitted ya da insurance.claim.failed webhook'u gönderilir.

Sağlayıcının belgesini alın

Kayıt SUBMITTED olduğunda sağlayıcının hasar belgesini belge ucundan alabilirsiniz.

Hasar kaydı açma: POST /api/v1/insurance/policies/{policyId}/claims

Idempotency-Key zorunludur. Bkz. Tekrar ve Idempotency-Key.

Yol parametresiAçıklama
policyIdPoliçe kimliği (insp_…).
AlanTipZorunluAçıklama
incidentAtstringEvetHasara konu olayın anı; saat dilimli ISO 8601. TICKET_CANCELLATION: biletin taşıyıcıda iptal edildiği an. En fazla 5 dakika ileri bir zaman kabul edilir.
documentsdiziEvetBelgeler; tipin istediği her belge tam bir kez. Alanları aşağıda.

Belgeler

AlanTipAçıklama
documents[].kindstringBelgenin türü; değerler aşağıda.
documents[].contentTypestringYalnızca application/pdf.
documents[].contentBase64stringPDF dosyasının base64 içeriği.
Sigorta tipikindBelge
TICKET_CANCELLATIONCANCELLATION_PROOFTaşıyıcıdan aldığınız, biletin iptal edildiğini gösteren belge. Zorunlu.
  • Belgelerin toplam boyutu, base64 çözüldükten sonra en fazla 3 MB olabilir. Sınırı aşan istek 400 VALIDATION_ERROR ya da 422 insurance.validation.invalid (field: documents, reason: too_large) döner.
  • Dosya PDF olmalıdır; içeriği PDF olmayan belge 422 döner.
  • Belge alıcınızın kişisel verilerini taşıyabilir. Lunixi belgeyi saklamaz ve sağlayıcıya iletir; belgenin içeriği istek kayıtlarına girmez.
source lunixi-sign.sh
REQ_PATH="/api/v1/insurance/policies/<policyId>/claims"
CONTENT=$(base64 < iptal-belgesi.pdf | tr -d '\n')
BODY=$(printf '{"incidentAt":"2026-10-12T09:30:00+03:00","documents":[{"kind":"CANCELLATION_PROOF","contentType":"application/pdf","contentBase64":"%s"}]}' "$CONTENT")
printf '%s' "$BODY" > claim.json
lunixi_sign POST "$REQ_PATH" "$BODY"
 
curl -X POST "https://api-gateway.lunixi.com$REQ_PATH" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: insurance-claim-1001" \
  -H "X-Key-Id: $LUNIXI_KEY_ID" \
  -H "X-Date: $DATE" \
  -H "X-Nonce: $NONCE" \
  -H "Digest: $DIGEST" \
  -H "X-Signature: $SIGNATURE" \
  --data-binary @claim.json

Gövde belge nedeniyle büyük olabilir; bu yüzden örnek gövdeyi dosyadan gönderir. Digest'i dosyaya yazdığınız gövdenin aynısından hesaplayın.

Yanıt

İstek tamamlandığında 201 ve data içinde hasar kaydı nesnesini döner. Sağlayıcı kaydı aldıysa status SUBMITTED, sonuç kesinleşmediyse UNKNOWN olur.

Sonuçlar

SonuçYanıtKayıttaNe yapmalı
Sağlayıcı kaydı aldı201status: SUBMITTEDHasar bildirildi. insurance.claim.submitted gönderilir. Sağlayıcının belgesini belge ucundan alabilirsiniz.
Sonuç kesinleşmedi201status: UNKNOWNİstek sağlayıcıya ulaştı ama sonucu bilinmiyor. Kayıt yeniden gönderilmez; sonuç sağlayıcıdan doğrulanır. Kesinleştiğinde insurance.claim.submitted ya da insurance.claim.failed gelir. Bu sürede aynı poliçe için yeni kayıt açmayın.
Sağlayıcı kaydı reddetti422 insurance.claim.rejectedstatus: FAILED, errorCode: insurance.claim.rejectedSağlayıcı kaydı kabul etmedi; aynı istekle tekrar denemek sonucu değiştirmez. insurance.claim.failed gönderilir. Gerekirse yeni bir Idempotency-Key ile yeni kayıt açabilirsiniz.
Sağlayıcıya ulaşılamadı503 insurance.provider.unavailablestatus: FAILED, errorCode: insurance.provider.unavailableKayıt sağlayıcıya iletilmedi. Kayıt açıldıysa FAILED olur ve insurance.claim.failed gönderilir. Bir süre sonra yeni bir Idempotency-Key ile yeniden gönderin.

Sonuç doğrulanamazsa kayıt incelenir ve sonucu kesinleşene kadar UNKNOWN kalır.

Tekrar ve Idempotency-Key

  • Hasar kaydı belgeyi sağlayıcıya aynı istekte iletir. İstek 45 saniyeye kadar sürebilir; istemcinizin zaman aşımını buna göre ayarlayın.
  • Zaman aşımı ya da 5xx sonrasında yanıtı alamadıysanız isteği aynı Idempotency-Key ve aynı gövdeyle tekrarlayın. Kayıt ilk denemede açıldıysa yeni kayıt açılmaz; mevcut kayıt güncel durumuyla döner ve belge sağlayıcıya yeniden gönderilmez.
  • Aynı anahtar, kaydın durumu ne olursa olsun aynı kaydı döner. FAILED bir kaydı yeniden göndermek için yeni bir anahtar üretin.
  • Aynı anahtarı farklı bir istekle (başka poliçe, olay anı ya da belge) kullanırsanız 409 insurance.idempotency.conflict döner.

Hasar kaydı nesnesi

AlanTipAçıklama
claimIdstringHasar kaydının kimliği (insclm_…).
orderIdstringPoliçenin siparişi (inso_…).
policyIdstringHasarın bildirildiği poliçe (insp_…).
insuranceTypestringSigorta tipi, ör. TICKET_CANCELLATION.
statusstringKaydın durumu; bkz. Durumlar.
sourcestringKaydın açıldığı yer: MERCHANT_API ya da PANEL.
incidentAtstringHasara konu olayın anı, ISO 8601.
documentKindsstring[]Kayıtla gönderilen belgelerin türleri. Belgenin kendisi kayıtta bulunmaz.
errorCodestring ya da nullKayıt FAILED ise sebebin Lunixi kodu: insurance.claim.rejected ya da insurance.provider.unavailable.
submittedAtstring ya da nullSağlayıcının kaydı aldığının doğrulandığı an. SUBMITTED olana kadar null.
createdAtstringOluşturulma zamanı, ISO 8601.
updatedAtstringSon değişiklik zamanı, ISO 8601.

Kayıtta sağlayıcının hasar referansı ve hata kodları bulunmaz.

Durumlar

statusAnlamı
PENDINGKayıt açıldı, sağlayıcıya iletiliyor. Bu değeri yalnızca istek sürerken okuduğunuz ya da aynı Idempotency-Key ile tekrarladığınız isteklerde görürsünüz.
SUBMITTEDSağlayıcı kaydı aldı.
UNKNOWNİstek sağlayıcıya ulaştı ama sonucu bilinmiyor; sonuç doğrulanıyor.
FAILEDSağlayıcı kaydı reddetti ya da istek sağlayıcıya ulaşmadı. Sebep errorCode alanındadır.

SUBMITTED ve FAILED kesin durumlardır; değişmez.

Listeleme: GET /api/v1/insurance/claims

Hasar kayıtlarınızı en yeniden eskiye, cursor tabanlı sayfalar hâlinde döner.

Sorgu parametresiTipAçıklama
limitintegerSayfa başına kayıt, 1-100. Varsayılan 25.
cursorstringÖnceki yanıttaki pageInfo.nextCursor. İlk sayfada gönderilmez.
orderIdstringYalnız bu siparişin kayıtları (inso_…).
policyIdstringYalnız bu poliçenin kayıtları (insp_…).
statusstringYalnız bu durumdaki kayıtlar: PENDING, SUBMITTED, UNKNOWN ya da FAILED.

Yanıtta kayıtlar data.items dizisindedir; sayfalama bilgisi pageInfo alanındadır. Bozuk bir cursor 422 insurance.validation.invalid (field: cursor) döner.

source lunixi-sign.sh
REQ_PATH="/api/v1/insurance/claims?limit=25&policyId=<policyId>"
lunixi_sign GET "$REQ_PATH"
 
curl "https://api-gateway.lunixi.com$REQ_PATH" \
  -H "X-Key-Id: $LUNIXI_KEY_ID" \
  -H "X-Date: $DATE" \
  -H "X-Nonce: $NONCE" \
  -H "X-Signature: $SIGNATURE"

Okuma: GET /api/v1/insurance/claims/{claimId}

Tek bir hasar kaydını döner. Yanıtta data hasar kaydı nesnesidir. Sonucu UNKNOWN olan kaydı izlemek ya da webhook alamadığınız bir sonucu doğrulamak için bu ucu kullanın.

Sağlayıcının hasar belgesi: GET /api/v1/insurance/claims/{claimId}/document

Sağlayıcının hasar kaydı için verdiği belgeyi PDF olarak döner. Belge yalnızca kayıt SUBMITTED olduğunda alınabilir.

  • Belge Lunixi'de saklanmaz. Her istekte sağlayıcıdan alınır ve olduğu gibi size iletilir.
  • Başarılı yanıt 200 döner ve gövde PDF dosyasının kendisidir; JSON zarfı yoktur. Hata yanıtları JSON hata zarfıdır; ikisini yanıtın Content-Type başlığından ayırın.
BaşlıkDeğer
Content-Typeapplication/pdf
Content-Dispositionattachment; filename="<claimId>.pdf"
Cache-Controlno-store
source lunixi-sign.sh
REQ_PATH="/api/v1/insurance/claims/<claimId>/document"
lunixi_sign GET "$REQ_PATH"
 
curl "https://api-gateway.lunixi.com$REQ_PATH" \
  -H "X-Key-Id: $LUNIXI_KEY_ID" \
  -H "X-Date: $DATE" \
  -H "X-Nonce: $NONCE" \
  -H "X-Signature: $SIGNATURE" \
  -o hasar.pdf
DurumYanıt
Kayıt SUBMITTEDBelge döner.
Kayıt başka bir durumda409 insurance.claim.state_conflict, reason: claim_not_submitted
Sağlayıcı belgeyi o an veremiyor503 insurance.document.unavailable (details.retryable: true). Kayıt değişmez; isteği bir süre sonra, tekrarlar arasındaki beklemeyi artırarak yineleyin.

Hatalar

HTTPcodeNe yapmalı
400VALIDATION_ERRORBiçimi düzeltin. Idempotency-Key eksikse, kind ya da contentType tanınmıyorsa, contentBase64 base64 değilse ya da tanımlanmamış bir alan gönderildiyse de bu hata döner.
404insurance.policy.not_foundPoliçe bulunamadı ya da başka bir hesaba ait. policyId değerini siparişten alın.
404insurance.claim.not_foundHasar kaydı bulunamadı ya da başka bir hesaba ait.
409insurance.claim.state_conflictdetails.reason alanına bakın; aşağıdaki tablo.
409insurance.idempotency.conflictAynı Idempotency-Key farklı bir istekle kullanıldı; yeni kayıt için yeni anahtar üretin.
412insurance.claim.not_supportedBu poliçe için hasar kaydı açılamaz: sigorta tipi ya da bağlantınızdaki ürün hasar kaydını desteklemiyor.
422insurance.validation.invaliddetails.errors[] alanlarını düzeltin; aşağıdaki tablo.
422insurance.claim.rejectedSağlayıcı kaydı kabul etmedi; kayıt FAILED olur.
503insurance.provider.unavailableSağlayıcıya ulaşılamadı; kayıt açıldıysa FAILED olur. Bir süre sonra yeni bir Idempotency-Key ile yeniden gönderin.
503insurance.document.unavailableYalnızca belge ucunda: sağlayıcının belgesi şu anda alınamıyor; bir süre sonra tekrar deneyin.

Ortak kodlar: Akışlar › Yanıt ve hatalar. Kodların ayrıntısı: Hata Kodları › Hasar kaydı.

Durum çakışması

reasonAnlamı
policy_not_issuedPoliçe kesilmedi: henüz istenmedi, kesiliyor, sonucu kesinleşmedi ya da kesilemedi.
policy_cancel_pendingPoliçe için açık bir iptal talebi var.
policy_cancelledPoliçe iptal edildi.
claim_openPoliçede açık bir hasar kaydı var (PENDING, SUBMITTED ya da UNKNOWN). details.claimId varsa açık kaydın kimliğidir.
claim_not_submittedBelge yalnızca sağlayıcının aldığı (SUBMITTED) kayıtta alınabilir.

Alan ihlalleri

fieldreasonAnlamı
incidentAtrequiredOlay anı gönderilmedi.
incidentAttimezone_requiredZaman damgasında saat dilimi yok.
incidentAtinvalid_timestampDeğer ISO 8601 zaman damgası değil.
incidentAtin_futureOlay anı 5 dakikadan daha ileride.
documentstoo_largeBelgelerin toplam boyutu 3 MB'ı aşıyor.
documents[i].contentnot_pdfBelgenin içeriği PDF değil.

İlgili