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;
policyIddeğerini siparişinpolicies[]dizisinden alırsınız: Sipariş nesnesi.
Kimlik doğrulama ve imzalama: Akışlar › Kimlik doğrulama.
Hasar kaydı açılabilen poliçeler
| Koşul | Karşı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 parametresi | Açıklama |
|---|---|
policyId | Poliçe kimliği (insp_…). |
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
incidentAt | string | Evet | Hasara 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. |
documents | dizi | Evet | Belgeler; tipin istediği her belge tam bir kez. Alanları aşağıda. |
Belgeler
| Alan | Tip | Açıklama |
|---|---|---|
documents[].kind | string | Belgenin türü; değerler aşağıda. |
documents[].contentType | string | Yalnızca application/pdf. |
documents[].contentBase64 | string | PDF dosyasının base64 içeriği. |
| Sigorta tipi | kind | Belge |
|---|---|---|
TICKET_CANCELLATION | CANCELLATION_PROOF | Taşı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_ERRORya da422 insurance.validation.invalid(field: documents,reason: too_large) döner. - Dosya PDF olmalıdır; içeriği PDF olmayan belge
422dö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.jsonGö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ıt | Kayıtta | Ne yapmalı |
|---|---|---|---|
| Sağlayıcı kaydı aldı | 201 | status: SUBMITTED | Hasar bildirildi. insurance.claim.submitted gönderilir. Sağlayıcının belgesini belge ucundan alabilirsiniz. |
| Sonuç kesinleşmedi | 201 | status: 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ı reddetti | 422 insurance.claim.rejected | status: FAILED, errorCode: insurance.claim.rejected | Sağ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.unavailable | status: FAILED, errorCode: insurance.provider.unavailable | Kayı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
5xxsonrasında yanıtı alamadıysanız isteği aynıIdempotency-Keyve 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.
FAILEDbir 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.conflictdöner.
Hasar kaydı nesnesi
| Alan | Tip | Açıklama |
|---|---|---|
claimId | string | Hasar kaydının kimliği (insclm_…). |
orderId | string | Poliçenin siparişi (inso_…). |
policyId | string | Hasarın bildirildiği poliçe (insp_…). |
insuranceType | string | Sigorta tipi, ör. TICKET_CANCELLATION. |
status | string | Kaydın durumu; bkz. Durumlar. |
source | string | Kaydın açıldığı yer: MERCHANT_API ya da PANEL. |
incidentAt | string | Hasara konu olayın anı, ISO 8601. |
documentKinds | string[] | Kayıtla gönderilen belgelerin türleri. Belgenin kendisi kayıtta bulunmaz. |
errorCode | string ya da null | Kayıt FAILED ise sebebin Lunixi kodu: insurance.claim.rejected ya da insurance.provider.unavailable. |
submittedAt | string ya da null | Sağlayıcının kaydı aldığının doğrulandığı an. SUBMITTED olana kadar null. |
createdAt | string | Oluşturulma zamanı, ISO 8601. |
updatedAt | string | Son değişiklik zamanı, ISO 8601. |
Kayıtta sağlayıcının hasar referansı ve hata kodları bulunmaz.
Durumlar
status | Anlamı |
|---|---|
PENDING | Kayı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. |
SUBMITTED | Sağlayıcı kaydı aldı. |
UNKNOWN | İstek sağlayıcıya ulaştı ama sonucu bilinmiyor; sonuç doğrulanıyor. |
FAILED | Sağ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 parametresi | Tip | Açıklama |
|---|---|---|
limit | integer | Sayfa başına kayıt, 1-100. Varsayılan 25. |
cursor | string | Önceki yanıttaki pageInfo.nextCursor. İlk sayfada gönderilmez. |
orderId | string | Yalnız bu siparişin kayıtları (inso_…). |
policyId | string | Yalnız bu poliçenin kayıtları (insp_…). |
status | string | Yalnı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
200döner ve gövde PDF dosyasının kendisidir; JSON zarfı yoktur. Hata yanıtları JSON hata zarfıdır; ikisini yanıtınContent-Typebaşlığından ayırın.
| Başlık | Değer |
|---|---|
Content-Type | application/pdf |
Content-Disposition | attachment; filename="<claimId>.pdf" |
Cache-Control | no-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| Durum | Yanıt |
|---|---|
Kayıt SUBMITTED | Belge döner. |
| Kayıt başka bir durumda | 409 insurance.claim.state_conflict, reason: claim_not_submitted |
| Sağlayıcı belgeyi o an veremiyor | 503 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
| HTTP | code | Ne yapmalı |
|---|---|---|
400 | VALIDATION_ERROR | Biç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. |
404 | insurance.policy.not_found | Poliçe bulunamadı ya da başka bir hesaba ait. policyId değerini siparişten alın. |
404 | insurance.claim.not_found | Hasar kaydı bulunamadı ya da başka bir hesaba ait. |
409 | insurance.claim.state_conflict | details.reason alanına bakın; aşağıdaki tablo. |
409 | insurance.idempotency.conflict | Aynı Idempotency-Key farklı bir istekle kullanıldı; yeni kayıt için yeni anahtar üretin. |
412 | insurance.claim.not_supported | Bu poliçe için hasar kaydı açılamaz: sigorta tipi ya da bağlantınızdaki ürün hasar kaydını desteklemiyor. |
422 | insurance.validation.invalid | details.errors[] alanlarını düzeltin; aşağıdaki tablo. |
422 | insurance.claim.rejected | Sağlayıcı kaydı kabul etmedi; kayıt FAILED olur. |
503 | insurance.provider.unavailable | Sağlayıcıya ulaşılamadı; kayıt açıldıysa FAILED olur. Bir süre sonra yeni bir Idempotency-Key ile yeniden gönderin. |
503 | insurance.document.unavailable | Yalnı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ı
reason | Anlamı |
|---|---|
policy_not_issued | Poliçe kesilmedi: henüz istenmedi, kesiliyor, sonucu kesinleşmedi ya da kesilemedi. |
policy_cancel_pending | Poliçe için açık bir iptal talebi var. |
policy_cancelled | Poliçe iptal edildi. |
claim_open | Poliçede açık bir hasar kaydı var (PENDING, SUBMITTED ya da UNKNOWN). details.claimId varsa açık kaydın kimliğidir. |
claim_not_submitted | Belge yalnızca sağlayıcının aldığı (SUBMITTED) kayıtta alınabilir. |
Alan ihlalleri
field | reason | Anlamı |
|---|---|---|
incidentAt | required | Olay anı gönderilmedi. |
incidentAt | timezone_required | Zaman damgasında saat dilimi yok. |
incidentAt | invalid_timestamp | Değer ISO 8601 zaman damgası değil. |
incidentAt | in_future | Olay anı 5 dakikadan daha ileride. |
documents | too_large | Belgelerin toplam boyutu 3 MB'ı aşıyor. |
documents[i].content | not_pdf | Belgenin içeriği PDF değil. |
İlgili
- Sipariş ve Ödeme Bağlama:
policies[]ve poliçe durumu - Webhook Olayları:
insurance.claim.submittedveinsurance.claim.failed - Hata Kodları: hasar kaydının kodları
- Sigorta Tipleri ve Şemalar:
TICKET_CANCELLATION