Ana içeriğe geç

Dış Poliçe (External Policy) Entegrasyonu

Bu döküman, InsurUp platformuna acenteniz dışında düzenlenmiş poliçelerin kaydedilmesi için kullanılan Dış Poliçe API'sinin nasıl çağrılacağını açıklar. Hedef kitle, entegrasyon gerçekleştirecek partner yazılım ekipleridir.

API Referansı: Tüm endpoint'lerin detaylı teknik dokümantasyonu için api.insurup.com/scalar adresini ziyaret edin.

1. Dış Poliçe Nedir?​

InsurUp'ta bir poliçe iki kaynaktan gelir:

SahiplikAnlamı
OWNAcentenin ürettiği poliçe — teklif veya manuel kayıt yoluyla açılır, acente üretimine dahildir.
EXTERNALAcente dışında düzenlenmiş poliçe — Sigorta Hizmetleri mutabakat dosyaları üzerinden acenteye aktarılır. Bu API ile doğrudan da kaydedilebilir.
Not

Bu API ile kaydedilen bir poliçe, sigorta şirketi mutabakatında zaten acentede kayıtlı göründüğünde çakışma yaratmaz — sistem aktarım sırasında eşleşen External kaydı tespit edip kendi içinde birleştirir.

2. Genel Bilgiler​

ÖzellikDeğer
EndpointPOST /policies/external
YetkilendirmeOAuth 2.0 bearer token — AgentUserPolicy policy'si + policy:write (veya core-api) scope'u. İstek başında Authorization: Bearer <token>.
Kimlik doğrulama sunucusuInsurUp AuthServer (OpenIddict)
İçerik türüapplication/json
Başarı yanıtı201 Created — gövde: { "policyId": "<GUID>" }
Poliçe PDF'iBu endpoint PDF yüklemez. PDF, ayrı bir dosya yükleme endpoint'i ile eklenir (bkz. Bölüm 6).

3. İstek Gövdesi (Request Body)​

AlanTipZorunluAçıklama
policyNumberstring (max 50)EvetSigorta şirketinin/acentenin atadığı poliçe numarası.
insuranceCompanyIdint?HayırSigorta şirketi ID'si. Verilmezse poliçe "şirketsiz" kaydedilir.
productIdint?HayırŞirket kataloğundaki ürün ID'si. insuranceCompanyId verilmişse anlamlıdır.
productBranchenumEvetÜrün branşı: Kasko, Trafik, Dask, Konut, Tss, Imm, YesilKart, FerdiKaza, Saglik, ... (tam liste API şemasında)
insuredCustomerIdGUIDEvetSigortalı müşteri ID'si (InsurUp'ta önceden oluşturulmuş olmalı).
insurerCustomerIdGUIDEvetSigorta ettiren müşteri ID'si.
coverageobject?HayırBranşa özgü teminat detayları (branş şemasına göre).
startDateDateOnly?HayırBaşlangıç tarihi (YYYY-MM-DD). Verilmezse endDate − 1 yıl kabul edilir.
endDateDateOnlyEvetBitiş tarihi (YYYY-MM-DD).
arrangementDateDateOnly?HayırDüzenleme tarihi. Verilmezse bugün kullanılır. startDate'ten sonra olamaz.
netPremium / grossPremium / commissiondecimal?HayırPrim bilgileri. grossPremium ≥ netPremium olmalı; hepsi ≥ 0.
renewalNumberbyteHayırYenileme numarası. Gönderilmezse 0 kabul edilir (ilk poliçe).
daskPolicyNumberstring? (max 20)Hayırİlgili DASK poliçe numarası (Zorunlu Deprem Sigortası).
currencyenumHayırTurkishLira (varsayılan), UnitedStatesDollar, Euro.
paymentTypeenumHayırSyncCreditCard, SyncOpenAccount, Async3DSecure, AsyncInsuranceCompanyRedirect, AsyncThirdParty3DSecure. Gönderilmezse Unknown kabul edilir.
assetId / assetTypeGUID? / enum?HayırSigortalı varlık (Vehicle / Property / Pet). assetId verilirse assetType zorunludur.
metadataobject?HayırSerbest anahtar/değer meta verisi.
agentBranchIdstring?HayırAcente şube ID'si.

4. Örnek İstek​

POST /policies/external HTTP/1.1
Authorization: Bearer <access_token>
Content-Type: application/json

{
"policyNumber": "86451239/001",
"insuranceCompanyId": 3,
"productId": 17,
"productBranch": "Kasko",
"insuredCustomerId": "0192f3c1-...-a1b2c3d4e5f6",
"insurerCustomerId": "0192f3c1-...-a1b2c3d4e5f6",
"startDate": "2026-09-01",
"endDate": "2027-09-01",
"arrangementDate": "2026-09-01",
"netPremium": 12500.00,
"grossPremium": 14900.00,
"commission": 1750.00,
"renewalNumber": 0,
"currency": "TurkishLira",
"paymentType": "SyncCreditCard",
"assetId": "0192f4aa-...-9f8e7d6c5b4a",
"assetType": "Vehicle"
}

Başarılı Yanıt (201)​

{
"policyId": "0192f5b7-3c2a-7b1e-9d4f-6a5b4c3d2e1f"
}

5. Hata Durumları ve Doğrulama Kuralları​

DurumHTTPAçıklama
Doğrulama hatası (eksik/geçersiz alan)400Örn. grossPremium < netPremium, startDate ≥ endDate, negatif prim, geçersiz enum.
Aynı poliçe zaten kayıtlı400policyNumber + insuranceCompanyId + renewalNumber üçlüsü mevcut bir poliçeyle çakışıyorsa istek reddedilir. Şirket belirtilmediyse bu kontrol uygulanmaz.
Müşteri rıza (consent) eksik400Acente ayarlarında ilgili işlemler için rıza zorunlu kılınmışsa, müşterinin aktif rıza kaydı yoksa istek reddedilir.
Yetkisiz / token geçersiz401/403Scope veya policy yetersiz.
Çakışma kontrolü kapsamı

Çakışma kontrolü yalnızca insuranceCompanyId gönderildiğinde yapılır. Aynı numarayla birden fazla "şirketsiz" dış poliçe kaydedilebilir; bu bilinçli bir tasarımdır.

6. Poliçe PDF'i Ekleme (Ayrı Adım)​

PDF, poliçe oluşturma isteğinin parçası değildir. Oluşturulan poliçenin policyId'si ile ayrı bir yükleme isteği gönderilir:

POST /policies/{policyId}/manual-document
Content-Type: multipart/form-data

Form alan adı: file. Her poliçeye yalnızca bir PDF yüklenebilir (ilk yükleme kalıcıdır; üzerine yazma yoktur).

7. Önemli Davranış Kuralları​

KuralAçıklama
Poliçe numarası zorunluDış poliçe numarası olmadan kayıt yapılamaz.
Şirket + numara + yenileme = kimlikMutabakat aktarımı bu üçlüye göre poliçeyi eşleştirir; aynı üçlüye sahip kayıtlar birleştirilir.
Tekrar kayıt (idempotency)Aynı üçlüyle ikinci bir oluşturma isteği hata alır; mevcut poliçenin üzerine yazmaz. Güncelleme için özel akışlar kullanılır.
Müşteri eşleştirmeinsuredCustomerId / insurerCustomerId, InsurUp müşteri kayıtlarının GUID'leridir; mutabakat dosyalarındaki TCKN eşleştirmesi sistem tarafından otomatik yapılır.
Webhook yokBu endpoint bir policy.created webhook'u tetiklemez; partner tarafında ek işlem gerektirmez.