Sigorta
API Yolu
Uygunluk

Uygunluk

Uygunluk uçları, sepet kalemleriniz için alıcıya hangi sigorta tiplerini sunabileceğinizi döner. Hangi sigortanın sunulacağı kalemlerdeki sigorta alanlarından, hesabınızdaki sigorta ayarlarından ve sağlayıcı bağlantılarınızdan çözülür. Bu uçlar salt okumadır: teklif oluşturmaz, sağlayıcıya istek göndermez.

UçNe zaman
POST /api/v1/insurance/productsÖdemeyi oluşturmadan önce. Ödemede göndereceğiniz kalemleri gövdede gönderirsiniz.
GET /api/v1/insurance/productsÖdemeyi oluşturduktan sonra. Ödemenin kimliğini gönderirsiniz; ödeme oluşturulurken gönderdiğiniz kalemler kullanılır.
GET /api/v1/insurance/products (ödeme kimliği olmadan)Sepet kalemi olmadan satılan tipler için: Sepet kalemi olmadan.

Primi ödemenizin sepetine eklediğiniz akışta teklifi ve siparişi ödemeden önce alırsınız. Bu yüzden bu akışta POST ucunu kullanın; bkz. Prim ve Ödeme.

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

Ödemeden önce: POST /api/v1/insurance/products

AlanTipZorunluAçıklama
currencystringEvetÖdemenin para birimi, ISO 4217 (TRY).
context.itemsdiziEvetÖdemede göndereceğiniz sepet kalemleri; 1-100 öge. Biçim, ödeme isteğinin basketItems[] biçimiyle aynıdır: Sepet Kalemleri.
context.items[].insuranceContextnesneHayırKalemin kişisel olmayan bilgileri (sefer, model, tarihler gibi). Yanıttaki prefill bunlardan doldurulur: Sepet Kalemleri › Sigorta bağlamı.
context.items[].insuranceDatanesneHayırTeklif ve poliçe için bildiğiniz kişisel bilgiler (sigortalı, rezervasyon kodu, IMEI, plaka gibi). Saklanmaz; yanıttaki providedFields ve quoteReady bununla hesaplanır: Sepet Kalemleri › Sigorta ön verisi.
insuranceTypestringHayırYalnız bu sigorta tipi. Örnek: TICKET_CANCELLATION.
  • Sigorta sunmak istediğiniz kalemlerde sigorta alanları bulunmalıdır. En az insuranceCategory gereklidir: Sepet Kalemleri › Sigorta alanları.
  • Kalemlerden biri sigorta alanı taşıyorsa kalem id'leri tekil olmalıdır.
  • Sigorta birim başınadır: sigorta alanı taşıyan kalemde her birimi ayrı kalem olarak gönderin.
  • Kalemlerde insuranceData gönderebilirsiniz; saklanmaz, yalnızca bu yanıtın ön doldurma alanlarını hesaplamak için kullanılır: Ön veri ve otomatik teklif.

İki biletli bir sepet. Birinci bilet sefer bilgisini ve yolcunun bilgisini de taşır; ikincisi yalnızca sigorta alanlarını. Değerler örnektir; açılı parantez içindeki değerlerin yerine alıcınızın bilgilerini yazın:

{
  "currency": "TRY",
  "context": {
    "items": [
      {
        "id": "ticket-1",
        "name": "İzmir-Ankara tren bileti",
        "price": 50000,
        "category1": "bilet",
        "itemType": "VIRTUAL",
        "insuranceCategory": "TICKET",
        "insuranceTypes": ["TICKET_CANCELLATION"],
        "insuranceContext": {
          "transportMode": "TRAIN",
          "departureAt": "2025-12-23T12:50:00+03:00",
          "originCity": "İzmir",
          "destinationCity": "Ankara",
          "carrier": "Örnek Taşıyıcı"
        },
        "insuranceData": {
          "insured": [
            { "identityType": "TCKN", "identityNumber": "<kimlik numarası>", "birthDate": "<YYYY-MM-DD>" }
          ],
          "tickets": { "priceAmount": 50000 }
        }
      },
      {
        "id": "ticket-2",
        "name": "İzmir-Ankara tren bileti",
        "price": 50000,
        "category1": "bilet",
        "itemType": "VIRTUAL",
        "insuranceCategory": "TICKET",
        "insuranceTypes": ["TICKET_CANCELLATION"]
      }
    ]
  }
}
source lunixi-sign.sh
BODY='{"currency":"TRY","context":{"items":[...]}}'
lunixi_sign POST "/api/v1/insurance/products" "$BODY"
 
curl -X POST "https://api-gateway.lunixi.com/api/v1/insurance/products" \
  -H "Content-Type: application/json" \
  -H "X-Key-Id: $LUNIXI_KEY_ID" \
  -H "X-Date: $DATE" \
  -H "X-Nonce: $NONCE" \
  -H "Digest: $DIGEST" \
  -H "X-Signature: $SIGNATURE" \
  --data-raw "$BODY"

BODY içindeki [...] yerine kalemlerinizi boşluksuz JSON olarak yazın.

Ödemeden sonra: GET /api/v1/insurance/products

Sorgu parametresiTipZorunluAçıklama
paymentIntentIdstring (UUID)HayırLunixi ödeme kimliği. Gönderilmezse sepet kalemi olmadan satılan tipler döner: Sepet kalemi olmadan.
currencystringEvetÖdemenin para birimi, ISO 4217.
insuranceTypestringHayırYalnız bu sigorta tipi.
  • Kalemler, ödeme POST /api/v1/payments/intents ile oluşturulurken gönderdiğiniz kalemlerdir. Sonradan gönderdiğiniz bir değer kalemlerin yerine geçmez.
  • Kalemlerin insuranceData'sı ödeme oluşturulduktan 24 saat sonra silinir; sonrasında yanıtta providedFields görünmez.
  • currency ödemenin para birimiyle aynı olmalıdır; değilse istek 422 insurance.validation.invalid (reason: currency_mismatch) döner.
  • Ödeme sigorta alanlı kalemlerle oluşturulmadıysa liste boş döner.
source lunixi-sign.sh
REQ_PATH="/api/v1/insurance/products?paymentIntentId=<ödeme kimliği>&currency=TRY"
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"

Sepet kalemi olmadan: GET /api/v1/insurance/products

paymentIntentId göndermezseniz yanıt, sepet kalemi olmadan satılan sigorta tiplerini döner. Bu tipler yalnızca API yolunda satılır; akış: Sepet Kalemi Olmadan Satış.

  • Yanıtta yalnızca sepet kalemi olmadan satılan tipler bulunur; basketItemIds boş dizidir.
  • Kalemlerle ya da ödeme kimliğiyle sorguladığınızda yalnızca sepet kalemi olmadan satılan tipler listelenmez.
  • Teklif vermeyen talep tipleri bu listede yer almaz: Talep.
source lunixi-sign.sh
REQ_PATH="/api/v1/insurance/products?currency=TRY"
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"

Yanıt

Uçların hepsi aynı yanıtı döner: data.products, sunulan sigorta tiplerinin listesidir. Liste, hesabınızdaki tip sırasına göre sıralanır.

AlanTipAçıklama
insuranceTypestringSigorta tipi kodu. Teklif isteğinde bu kodu gönderirsiniz.
typeObjectstringTipin teklif isteğindeki nesnesinin adı. Örnek: TICKET_CANCELLATION için tickets.
schemaVersionintegerTipin geçerli şema sürümü.
basketItemIdsstring[]Bu tipin sunulduğu sepet kalemlerinin id'leri.
titlenesneTipin adı; dil koduna göre metin (tr-TR, en-US).
descriptionnesneTipin açıklaması; dil koduna göre metin. Açıklama yoksa boş nesnedir.
fieldsdiziTipin şemasındaki alanlar: alan adı, biçimi ve hangi aşamada zorunlu olduğu (requiredAt: QUOTE ya da POLICY).
prefillnesneKalemlerin insuranceContext'inden doldurulan kişisel olmayan alanlar, teklif isteğinin biçiminde. insuranceData'da da verilen alan burada yer almaz. Yoksa boş nesnedir. Bkz. Ön veri ve otomatik teklif.
providedFieldsdiziKalemlerin insuranceData'sıyla gelen alanlar. Her öge path (alan yolu, ör. insured[0].birthDate) ve masked (değerin maskeli hâli) taşır. Yoksa boş dizidir.
quoteReadybooleanKalemlerdeki bilgiler teklif için yeterliyse true: teklifi ek alan göndermeden alabilirsiniz. Bağlam ve ön veri yoksa false.
insuranceDataIssuesdiziKullanılamayan ön veri. Her öge basketItemId, field ve reason taşır; değer yazılmaz. Sorun yoksa boş dizidir.

fields, teklif isteğinizde hangi alanları göndermeniz gerektiğini gösterir. Alanların açıklaması ve kuralları: Sigorta Tipleri ve Şemalar.

Ön veri ve otomatik teklif

prefill, providedFields, quoteReady ve insuranceDataIssues, sepet kalemlerinin insuranceContext ve insuranceData alanlarından hesaplanır: Sepet Kalemleri › Sigorta ön verisi.

  • GET ucunda kalemler ödeme oluşturulurken gönderdiğiniz kalemlerdir. POST ucunda gövdedeki context.items[].insuranceData kullanılır ve saklanmaz.
  • providedFields kişisel değeri hiçbir zaman açık döndürmez: kişisel değerler *** olur; identityType, tutar ve tarih gibi kişisel olmayan değerler olduğu gibi döner.
  • quoteReady: true, bağlam ve ön verinin teklif aşamasının zorunlu alanlarını ve açık ürünlerinizden en az birinin teklif kurallarını karşıladığını gösterir. Teklifi yalnızca insuranceType, currency ve sepet kaynağıyla alabilirsiniz: Teklif › Ön veriyle teklif. Sağlayıcının teklif vereceğini garanti etmez.
  • prefill ve providedFields'taki tip nesnesi, bağlam ya da ön veri taşıyan kalemlerden kurulur. Bu alanları taşımayan kalem bu nesnelerde yer almaz.
  • Bir alan hem prefill'de hem providedFields'ta görünmez; ön veri bağlamın önündedir.

insuranceContext ve insuranceData taşıyan tek biletli bir sepet için yanıt. Örnekte title, description ve fields gösterilmemiştir:

{
  "data": {
    "products": [
      {
        "insuranceType": "TICKET_CANCELLATION",
        "typeObject": "tickets",
        "schemaVersion": 1,
        "basketItemIds": ["ticket-1"],
        "prefill": {
          "tickets": [
            {
              "basketItemId": "ticket-1",
              "transportMode": "BUS",
              "carrier": "Örnek Taşıyıcı",
              "departureAt": "2025-12-23T12:50:00+03:00",
              "originCity": "Ankara",
              "destinationCity": "İstanbul"
            }
          ]
        },
        "providedFields": [
          { "path": "tickets[0].priceAmount", "masked": 50000 },
          { "path": "insured[0].identityType", "masked": "PASSPORT" },
          { "path": "insured[0].identityNumber", "masked": "***" },
          { "path": "insured[0].birthDate", "masked": "***" }
        ],
        "quoteReady": true,
        "insuranceDataIssues": []
      }
    ]
  }
}

Kullanılamayan ön veri

Kalemin ön verisi tipin şemasına uymazsa ödeme durmaz; o kalemin ön verisi kullanılmaz ve sebep insuranceDataIssues'ta döner:

{
  "insuranceDataIssues": [
    { "basketItemId": "phone-1", "field": "device.imei", "reason": "invalid_imei" }
  ]
}
reasonSebep
unknown_fieldAlan, kalemin sigorta tiplerinin hiçbirinin şemasında yok.
not_applicableAlan bu durumda geçerli değil; ör. transportMode: BUS olan bilette havalimanı kodu.
no_matching_schemaÖn veri kalemin sigorta tiplerinin hiçbirine uymuyor; ör. aynı kalemde hem device hem vehicle nesnesi. field değeri insuranceData'dır.
unavailableÖn veri şu anda okunamadı. Alanlar alıcıdan istenir; teklif isteğinde bu alanları gönderebilirsiniz.
Diğer sebeplerDeğer tipin biçimine uymuyor (ör. invalid_imei, invalid_checksum, invalid_format). Sebepler insurance.validation.invalid ile aynıdır.

Ön veriyi düzeltip yeni ödemeyle gönderin ya da eksik alanları teklif isteğinde gönderin. Tanımadığınız bir sebebi o alanın geçersiz olduğu şeklinde ele alın.

Ürüne göre zorunlu alanlar

Tipin şeması, o tipi sunan bütün ürünlerin alanlarını kapsar. fields dizisi, bağlantılarınızdaki açık ürünlerin kurallarını da gösterir:

AlanTipAçıklama
requiredAtstringAlanın tipin şemasında ya da açık ürünlerinizin hepsinde zorunlu olduğu aşama: QUOTE ya da POLICY. Alan isteğe bağlıysa bulunmaz.
requiredBydiziAlanı daha erken bir aşamada ya da yalnızca bazı ürünlerinizin istediğini gösterir. Her öge underwriterCode (sigorta şirketinin Lunixi kodu; şirket bildirilmemişse null) ve stage (QUOTE ya da POLICY) taşır. Böyle bir ürün yoksa bulunmaz.

requiredBy ögesindeki alanı o aşamada göndermezseniz yalnızca o ürünün seçeneği teklifte elenir: Teklif › Elenen seçenekler. Bütün seçenekleri almak için bu alanları da gönderin.

Boş liste

data.products boş bir dizi ise bu sepet için sigorta sunulmaz. Boş liste bir hata değildir ve ödemenizi etkilemez; ödemeyi sigortasız alabilirsiniz.

Liste şu durumlarda boş döner:

  • Sigorta ya da API yolu hesabınızda açık değildir.
  • Kalemlerde sigorta alanı yoktur, kalem insuranceEligible: false taşır ya da istenen tip kalemin türüne uymaz.
  • Tip hesabınızda açık değildir ya da kalem tipin uygunluk koşullarını karşılamaz.
  • Tipin açık olduğu kullanılabilir bir sağlayıcı bağlantınız yoktur.
  • Sepet kalemi olmadan sorguladınız ve hesabınızda sepet kalemi olmadan satılan açık bir tip yoktur.

Kontrol listesi: Test Ortamı › Sigorta sunulmuyorsa.

Hatalar

HTTPcodeNe yapmalı
400VALIDATION_ERRORcurrency, paymentIntentId, insuranceType ya da kalem biçimini düzeltin; details.errors hatalı alanı gösterir.
422insurance.validation.invalidKalemler kurallara uymuyor; details.errors[] ihlalleri listeler.

Ortak kodlar: Akışlar › Yanıt ve hatalar.

İlgili