Insurance Types and Schemas
This page describes the insurance type schemas; the request itself is on the Quotes page.
An insurance type is Lunixi's provider-independent insurance code. In quote and order requests you state which insurance you want with this code. Which provider product is used is decided by your provider connections, not by your request.
- A published type code never changes and is never removed. New types are added to the catalog.
- Field names and formats are the same whichever provider you work with. Provider-specific field names are not accepted.
- Who collects the premium depends on the product in your connection, not on the type. Check the
premiumCollectedByfield of the quote option; if it isPROVIDER, your provider collects the premium: Provider Collection.
Type catalog
| Type | Covers | Basket item category | Type object | Status |
|---|---|---|---|---|
TICKET_CANCELLATION | Cancellation of a bus, flight or train ticket | TICKET | tickets (array) | Active, schema version 1 |
HOTEL_CANCELLATION | Cancellation of a hotel booking | HOTEL | stay (object) | Active, schema version 1 |
DEVICE_INSURANCE | Mobile phone insurance | DEVICE | device (object) | Active, schema version 1 |
DEVICE_PROTECTION | Mobile phone repair and protection plan | DEVICE | device (object) | Active, schema version 1 |
EXTENDED_WARRANTY | Extended warranty for electronics and home appliances | ELECTRONICS | product (object) | Active, schema version 1 |
ROADSIDE_ASSISTANCE | Vehicle roadside assistance | VEHICLE | vehicle (object) | Active, schema version 1 |
TRAVEL_HEALTH | Domestic and international travel health insurance | TRAVEL | trip (object) | Active, schema version 1 |
MUSICAL_INSTRUMENT_PROTECTION | Musical instrument repair and protection plan | MUSICAL_INSTRUMENT | instrument (object) | Active, schema version 1 |
EVENT_ACCIDENT | Daily personal accident cover for an event attendee | EVENT | event (object) | Active, schema version 1 |
MICROMOBILITY_ACCIDENT | Daily personal accident cover for the rider of a rented scooter | MICROMOBILITY | rental (object) | Active, schema version 1 |
PERSONAL_ACCIDENT | Annual personal accident | None: sold without a basket item | accident (object) | Active, schema version 1 |
MEDICAL_COMPLICATION | Medical procedure complications in health tourism | HEALTH | procedure (object) | Active, schema version 1 |
PET_HEALTH | Health insurance for cats and dogs | PET; also sold without a basket item | pet (object) | Active, schema version 1 |
VEHICLE_TAG_PROTECTION | Vehicle identification tag (UTTS) protection | VEHICLE; also sold without a basket item | vehicle (object) | Active, schema version 1 |
MOTOR_GREEN_CARD | Green Card: the vehicle's liability insurance abroad | VEHICLE or TRAVEL; also sold without a basket item | vehicle (object) | Active, schema version 1 |
INBOUND_TRAVEL_HEALTH | Health insurance for a foreign visitor coming to Türkiye | TRAVEL; also sold without a basket item | trip (object) | Active, schema version 1 |
FOREIGN_RESIDENT_HEALTH | Health insurance for a foreigner residing in Türkiye | None: sold without a basket item | residence (object) | Active, schema version 1 |
ABROAD_STAY_HEALTH | Health insurance while studying or working abroad | EDUCATION or TRAVEL; also sold without a basket item | abroadStay (object) | Active, schema version 1 |
MOTOR_THIRD_PARTY_LIABILITY | Compulsory motor third-party liability insurance | VEHICLE; also sold without a basket item; leads too | vehicle (object) | Active, schema version 1; lead schema version 1 |
MOTOR_COMPREHENSIVE | Comprehensive motor insurance | VEHICLE; also sold without a basket item; leads too | vehicle (object) | Active, schema version 1; lead schema version 1 |
MOTOR_EXCESS_LIABILITY | Voluntary excess motor liability insurance for a vehicle | VEHICLE; also sold without a basket item | vehicle (object) | Active, schema version 1 |
COMPULSORY_EARTHQUAKE | Compulsory earthquake insurance (DASK) | HOME; also sold without a basket item | property (object) | Active, schema version 1 |
HOME_INSURANCE | Home insurance | HOME; also sold without a basket item | property (object) | Active, schema version 1 |
SUPPLEMENTARY_HEALTH | Supplementary health insurance | None: sold without a basket item | health (object) | Active, schema version 1 |
CARGO_TRANSIT | Road cargo transit insurance | None: lead only | shipment (object) | Active, lead schema version 1 |
The basket item category is the item's insuranceCategory value; which basket item a type is offered for is resolved from this field (see Basket Items). The DEVICE category has two separate types: device insurance and the repair plan are two products with different coverage, inputs and documents.
A type without a basket item category is not linked to a basket item; it is sold only on the API path, without a basket item: Selling Without a Basket Item. Types marked "also sold without a basket item" are sold both ways: with a basket item, and on the API path without one. All other types are offered only with a basket item.
Type objects other than tickets are singular: a quote covers a single stay, device, product, vehicle, trip, musical instrument, event ticket, rental, medical procedure, animal, period or home; on a basket-linked quote this is a single basket item. A PERSONAL_ACCIDENT, FOREIGN_RESIDENT_HEALTH or SUPPLEMENTARY_HEALTH quote covers a single person. On an INBOUND_TRAVEL_HEALTH or ABROAD_STAY_HEALTH quote all insured persons are on the same policy.
Lead types ("lead only") do not return a quote. These types have no quote, premium collection or policy; the buyer's details are passed to the provider in your connection as a lead: Leads. A quote request for a lead type receives 412 insurance.type.not_available. The fields of lead types are in their lead schema.
Types marked "leads too" both return quotes and accept leads. A quote request is sent with the type's schema, a lead request with the type's lead schema. A quote goes to the product in your connections that returns quotes, a lead to the product that accepts leads; they are separate products.
Schema version (schemaVersion)
The fields of each type are defined by a schema, and schemas are versioned per type (schemaVersion).
- A published schema version never changes: its field set and requirements are not tightened later.
- A breaking change is published as a new
schemaVersion; the old version stays available alongside it. - A provider updating its own product does not change the Lunixi schema.
Pre-fill data in the basket item
For every type sold with a basket item, you can also give the fields on this page in the basket item, before the quote request:
- Some of the non-personal fields are filled from the item's
insuranceContext. Which key fills which field in which type: Basket Items › Pre-filling. - The person fields and the other fields of the type object are given with the item's
insuranceData. Field names and formats are the same as on this page; the type object is a single object for the item (ticketsincluded) and carries nobasketItemId: Basket Items › Insurance pre-fill data. - The fields you give in the basket count towards the requirements of the quote. In the quote request you send only the missing ones: Quote › Quote with pre-fill data.
The fields of types sold only without a basket item, and of lead types, are sent in the request.
Stages
Whether a field is required depends on the stage of the request:
| Stage | When | Required fields |
|---|---|---|
QUOTE | When you get a quote | The fields needed for pricing |
POLICY | When you create an order and when the policy is issued | The required fields of the QUOTE stage plus the fields needed for the policy |
- If the quote is linked to a payment's basket (by payment ID or on the Checkout Form),
basketItemIdis also required on the type object; on every entry when the type object is an array, such astickets. - On a quote obtained without a basket item,
basketItemIdis not sent; if it is, the request is rejected. - Send the
POLICYstage fields in the quote request as well. Order and policy requests carry no extra fields; the policy is issued with the quote's data. See Quotes.
Additional product requirements
A type's schema covers the fields of every product that offers the type. A product in your connections may make a field that is optional in the schema required, or ask for a field at an earlier stage than the schema does.
- These fields are marked with
requiredByin thefieldsarray of the Eligibility response. - If a field the product needs at the quote stage is missing, only that product's option is excluded; the other options are returned: Quotes › Excluded options.
- If a field the product needs at the policy stage is missing, the order is rejected with
422 insurance.validation.invalid.
Person fields (policyholder, insured[])
The person fields are the same for every type. What varies between types is which identity types are accepted, how many insured persons can be sent, and which field is required at which stage. These are in the person table of each type's section.
| Field | Type | Rule |
|---|---|---|
identityType | enum | Identity type: TCKN, PASSPORT, VKN; limited to the ones the type accepts. If sent, identityNumber is required too. |
identityNumber | string | Identity number, validated against identityType. If sent, identityType is required too. |
firstName | string | First name. Text, at most 100 characters. |
lastName | string | Last name. Text, at most 100 characters. |
birthDate | string | Date of birth, YYYY-MM-DD; cannot be in the future. In the MOTOR_THIRD_PARTY_LIABILITY schema it applies only to a natural person (TCKN, PASSPORT); if sent with identityType: VKN, the request is rejected. |
gender | enum | Gender: MALE, FEMALE. Exists only in the DEVICE_INSURANCE, TRAVEL_HEALTH, MUSICAL_INSTRUMENT_PROTECTION, MEDICAL_COMPLICATION, INBOUND_TRAVEL_HEALTH and FOREIGN_RESIDENT_HEALTH schemas; if sent for another type, the request is rejected. |
birthPlace | string | Place of birth. Text, at most 100 characters. Exists only in the MEDICAL_COMPLICATION, INBOUND_TRAVEL_HEALTH and FOREIGN_RESIDENT_HEALTH schemas; if sent for another type, the request is rejected. |
fatherName | string | Father's name. Text, at most 100 characters. Exists only in the FOREIGN_RESIDENT_HEALTH schema; if sent for another type, the request is rejected. |
relationship | enum | The insured's relationship to the policyholder: SELF, SPOUSE, CHILD. Exists only in the ABROAD_STAY_HEALTH schema and only on insured[] entries; if sent elsewhere, the request is rejected. |
nationalityCountryCode | string | Nationality, ISO 3166-1 alpha-2. Exists only in the EVENT_ACCIDENT, MICROMOBILITY_ACCIDENT, INBOUND_TRAVEL_HEALTH and FOREIGN_RESIDENT_HEALTH schemas; if sent for another type, the request is rejected. |
companyName | string | Company name. Text, at most 200 characters. Exists only in the MUSICAL_INSTRUMENT_PROTECTION and MOTOR_THIRD_PARTY_LIABILITY schemas and applies only when identityType: VKN; if sent with another identity type or for another type, the request is rejected. |
heightCm | integer | Health declaration: height, centimetres; 30-250. Exists only in the SUPPLEMENTARY_HEALTH schema and only on insured[] entries; if sent elsewhere, the request is rejected. |
weightKg | integer | Health declaration: weight, kilograms; 1-350. Exists only in the SUPPLEMENTARY_HEALTH schema and only on insured[] entries. |
pregnancyStatus | enum | Health declaration: pregnancy status, PREGNANT. Exists only in the SUPPLEMENTARY_HEALTH schema, only on insured[] entries, and applies only on a quote that asks for pregnancy cover: SUPPLEMENTARY_HEALTH. |
email | string | Email address. |
phone | string | Phone number, E.164. |
address | object | Address; fields below. |
address:
| Field | Type | Rule |
|---|---|---|
countryCode | string | Country, ISO 3166-1 alpha-2. |
cityCode | string | Turkish province plate code, 01-81. |
districtCode | string | District, Lunixi reference code (DISTRICT, under the province). |
line | string | Address line. Text, at most 500 characters. |
The health declaration (heightCm, weightKg, pregnancyStatus) is special-category personal data.
Where a person table says "address (province, district, line)", address is required at that stage together with cityCode, districtCode and line. Where it says "address (country, province, district, line)", countryCode is required too; where it says "address line", address is required with line only. Person fields not named in the table are optional.
In lead schemas, policyholder carries only the identity type and number, date of birth, email and phone; any other person field is rejected. See Lead schemas.
Format details: Data Formats.
Reference codes
Fields such as brand, model, vehicle type, usage, liability limit, product category, occupation, medical procedure, pet breed, dwelling type, bank and district carry a Lunixi reference code. Provider identifiers are not accepted. Get the valid codes from this endpoint:
GET /api/v1/insurance/reference/{kind}
kind | Data | parentCode |
|---|---|---|
COUNTRY | Country (ISO 3166-1 alpha-2) | Not sent |
CITY | Province (plate code) | Not sent |
DISTRICT | District | Required: province code |
DEVICE_BRAND | Mobile phone brand | Not sent |
DEVICE_MODEL | Mobile phone model | Required: DEVICE_BRAND code |
VEHICLE_BRAND | Vehicle brand | Not sent |
VEHICLE_MODEL | Vehicle model | Required: VEHICLE_BRAND code |
VEHICLE_TYPE | Vehicle type (usage style or class) | Not sent |
PRODUCT_CATEGORY | Product category (electronics and home appliances, musical instruments) | Not sent |
OCCUPATION | Occupation | Not sent |
MEDICAL_PROCEDURE_COVER | Medical procedure and cover limit | Not sent |
PET_BREED | Pet breed | Required: the animal's species, CAT or DOG |
VEHICLE_USAGE | Vehicle usage | Not sent |
LIABILITY_LIMIT | Liability limit per vehicle | Not sent |
DWELLING_TYPE | Dwelling type | Not sent |
DWELLING_FLOOR | Floor of the unit | Not sent |
BANK | Bank | Not sent |
BANK_BRANCH | Bank branch | Required: BANK code |
FINANCE_INSTITUTION | Finance institution | Not sent |
ADDRESS_VILLAGE | Address chain: town or village | Required: DISTRICT code |
ADDRESS_NEIGHBOURHOOD | Address chain: neighbourhood | Required: ADDRESS_VILLAGE code |
ADDRESS_STREET | Address chain: avenue or street | Required: ADDRESS_NEIGHBOURHOOD code |
ADDRESS_BUILDING | Address chain: building | Required: ADDRESS_STREET code; also outerDoorNumber |
ADDRESS_UNIT | Address chain: independent unit (flat); its code is the UAVT address code | Required: ADDRESS_BUILDING code |
| Query parameter | Type | Description |
|---|---|---|
parentCode | string | Parent code. Send it for the kinds where the table marks it as required. |
limit | integer | Records per page, 1-100. Default 25. |
cursor | string | pageInfo.nextCursor from the previous response. Not sent on the first page. |
vehicleTypeCode | string | VEHICLE_BRAND and VEHICLE_MODEL only: vehicle type code (VEHICLE_TYPE). Sent together with modelYear; see List by vehicle type and year. |
modelYear | integer | VEHICLE_BRAND and VEHICLE_MODEL only: model year. Sent together with vehicleTypeCode. |
outerDoorNumber | string | ADDRESS_BUILDING only, and required there: the building's outer door number; see UAVT address chain. |
In the response the codes are in the data.items array; each entry carries code, label (display names by language code, e.g. tr-TR) and parentCode. Paging information is in the pageInfo field. The list returns only codes in use and is the same for all merchants; the brand and model list filtered by vehicle type and year and the address chain are the exceptions.
- Send the code as is; do not use the display name (
label) in requests. - A code that is well-formed but not recognized, or that has no counterpart at your connection's provider, is rejected at quote time with
422 insurance.reference.unknown(Error Codes). Do not send guessed or empty values. - The country code (
COUNTRY) is also used in nationality and destination country fields. If a country has no counterpart at your connection's provider, that field receives422 insurance.reference.unknowntoo.
List by vehicle type and year
You can filter the VEHICLE_BRAND and VEHICLE_MODEL lists by vehicle type and model year: GET /api/v1/insurance/reference/VEHICLE_BRAND?vehicleTypeCode=<vehicle type code>&modelYear=<year>. For the model list, send the brand as parentCode.
- The filtered list is read from the providers in your connections at request time. Only the brands and models that your connections offer and that have a Lunixi code are returned, so the list is specific to your account and can change over time.
vehicleTypeCodeandmodelYearare sent together. If one is missing, the request receives422 insurance.validation.invalid(reason: required). If neither is sent, all codes in use are returned.- The model year must be between 1950 and the year after the current year; otherwise
reason: invalid_model_year. - If these parameters are sent for another kind,
reason: not_applicableis returned. - If none of your connections has a provider that offers a filtered list, the response is
422 insurance.validation.invalid(field: kind,reason: live_reference_unavailable). If the vehicle type code has no counterpart at your connection's provider, the response is422 insurance.reference.unknown.
UAVT address chain
In the home types (COMPULSORY_EARTHQUAKE, HOME_INSURANCE) the home's address is sent as a single field: property.uavtAddressCode, the address code of the independent unit in the National Address Database (UAVT). The UAVT address code is a national code. If your buyer knows the code, you can send it directly; otherwise find it by walking the address chain step by step. At each step, show the list to the buyer and send the code of the chosen entry as the parentCode of the next step:
| Step | Request | Chosen code |
|---|---|---|
| 1. Province | GET /api/v1/insurance/reference/CITY | Province plate code |
| 2. District | GET /api/v1/insurance/reference/DISTRICT?parentCode=<province code> | District code |
| 3. Town or village | GET /api/v1/insurance/reference/ADDRESS_VILLAGE?parentCode=<district code> | Town or village code |
| 4. Neighbourhood | GET /api/v1/insurance/reference/ADDRESS_NEIGHBOURHOOD?parentCode=<town or village code> | Neighbourhood code |
| 5. Avenue or street | GET /api/v1/insurance/reference/ADDRESS_STREET?parentCode=<neighbourhood code> | Avenue or street code |
| 6. Building | GET /api/v1/insurance/reference/ADDRESS_BUILDING?parentCode=<street code>&outerDoorNumber=<outer door number> | Building code |
| 7. Independent unit | GET /api/v1/insurance/reference/ADDRESS_UNIT?parentCode=<building code> | UAVT address code |
The code of the entry chosen at the last step is the UAVT address code; send it in the quote request as property.uavtAddressCode. The other codes of the chain are not sent with the quote.
- From the town or village step onwards, the lists are read from the providers in your connections at request time and are not stored permanently. If none of your connections has a provider that offers the address chain, the request receives
422 insurance.validation.invalid(field: kind,reason: live_reference_unavailable). - The codes of the chain are national address codes. Town or village, neighbourhood, avenue or street and building codes have 1-12 digits; the independent unit's code (the UAVT address code) has 10 digits. Codes are text; leading zeros are kept. At these steps, a malformed parent code receives
reason: invalid_reference_codewith the field pathparentCode. - At the town or village step, if the district code has no counterpart at your connection's provider, the request receives
422 insurance.reference.unknownwith the field pathparentCode. - The building list needs the building's outer door number (
outerDoorNumber) together with the street code. An outer door number starts with a digit; it can contain digits, letters,/,-,.and spaces; it has at most 16 characters (e.g.12,12A,12/1). If it is not sent,reason: requiredis returned; if it is malformed,reason: invalid_outer_door_number. If it is sent for another kind,reason: not_applicableis returned. - In address lists
labelis the official place name;tr-TRanden-UScarry the same text. Paging is the same as for the other reference lists (limit,cursor). - An address is personal data. Do not send the chain codes or the UAVT address code in the
insuranceContextfield of a basket item.
The UAVT address code is checked at quote time. A malformed code receives 422 insurance.validation.invalid (reason: invalid_uavt_address_code) with the field path property.uavtAddressCode. A well-formed code that does not exist in UAVT receives reason: unknown_uavt_address_code with the same field path, and the quote request is not sent to the provider.
TICKET_CANCELLATION: schema version 1
Insurance against the cancellation of a bus, flight or train ticket. It is resolved from a basket item with insuranceCategory: TICKET.
The type-specific fields of the request body have three roots: policyholder, insured and the type object tickets.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity types: TCKN, PASSPORT, VKN. |
insured | array | QUOTE | The insured persons; 1-10 entries. Accepted identity types: TCKN, PASSPORT. |
tickets | array | QUOTE | The insured tickets; 1-10 entries. basketItemId is unique across tickets: one basket item is one ticket. |
tickets[]
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the ticket belongs to. At most 256 characters; leading and trailing spaces are not accepted, the value is stored as is. |
transportMode | enum | QUOTE | BUS, FLIGHT, TRAIN |
carrier | string | QUOTE | The carrier. Text, at most 100 characters. |
priceAmount | integer | QUOTE | Ticket amount in minor units; at least 1. |
departureAt | string | QUOTE | Departure time. ISO 8601, time zone required. |
originCity | string | QUOTE | Departure city. Text, at most 100 characters. |
destinationCity | string | QUOTE | Arrival city. Text, at most 100 characters. |
originAirportCode | string | QUOTE, FLIGHT only | Departure airport, three-letter IATA code. |
destinationAirportCode | string | QUOTE, FLIGHT only | Arrival airport, three-letter IATA code. |
isPromotional | boolean | No | Promotional ticket. If not sent, the ticket is treated as non-promotional. |
pnr | string | POLICY | Booking reference. Text, at most 32 characters. |
ticketNumber | string | POLICY | Ticket number. Text, at most 64 characters. |
flightNumber | string | POLICY, FLIGHT only | Flight number. |
Fields marked "FLIGHT only" apply only to a ticket with transportMode: FLIGHT, and their requirement is applied only then. If they are sent for another transport mode, the request is rejected.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[] | Identity type and number, date of birth | Email, phone |
policyholder | — | — |
No person field in policyholder is required on its own; only identityType and identityNumber are sent together.
Person insured with a passport
You can insure a foreign passenger with a passport (identityType: PASSPORT) instead of a Turkish identity number. A person with a passport also needs these fields:
| Field | Person | Required | Rule |
|---|---|---|---|
firstName, lastName | insured[], policyholder | QUOTE | First and last name. Accepted with any identity type; required only with a passport. |
gender | insured[], policyholder | QUOTE | MALE, FEMALE. Valid only with a passport. |
residenceCountryCode | insured[] | QUOTE | Country of residence, ISO 3166-1 alpha-2 (TR, DE). Valid only with a passport. |
If gender or residenceCountryCode is sent with a Turkish identity number, the field path gets not_applicable. These fields can also be given on the basket item with insuranceData: Basket Items › Insurance data.
Example request: Quotes.
HOTEL_CANCELLATION: schema version 1
Insurance against the cancellation of a hotel booking. It is resolved from a basket item with insuranceCategory: HOTEL. The type object stay is a single stay.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | POLICY | The policyholder. Accepted identity types: TCKN, PASSPORT, VKN. |
insured | array | QUOTE | The insured persons; 1-10 entries. Accepted identity types: TCKN, PASSPORT. |
stay | object | QUOTE | The insured stay. |
stay
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the stay belongs to. At most 256 characters; the value is stored as is. |
hotelName | string | QUOTE | Hotel name. Text, at most 200 characters. |
checkInDate | string | QUOTE | Check-in day, YYYY-MM-DD. |
checkOutDate | string | QUOTE | Check-out day, YYYY-MM-DD; must be after the check-in day. |
guestCount | integer | QUOTE | Number of guests, 1-20. |
reservationAmount | integer | QUOTE | Booking amount in minor units; at least 1. |
cityCode | string | POLICY | Province of the hotel, plate code 01-81. |
Dates are calendar days at the place of stay.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[] | Identity type and number, date of birth | — |
policyholder | — | Identity type and number, date of birth, email, phone, address (province, district, line) |
Example
The examples on this page show only the type-specific fields of the quote request, together with the policy fields; for the currency and the basket source see Quotes. Values are examples; replace the values in angle brackets with your buyer's details, and the reference codes with codes you got from the reference endpoints:
{
"insuranceType": "HOTEL_CANCELLATION",
"policyholder": {
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>",
"address": {
"cityCode": "35",
"districtCode": "<district code>",
"line": "<address line>"
}
},
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>"
}
],
"stay": {
"basketItemId": "hotel-1",
"hotelName": "Example Hotel",
"checkInDate": "2025-12-23",
"checkOutDate": "2025-12-25",
"guestCount": 2,
"reservationAmount": 450000,
"cityCode": "35"
}
}DEVICE_INSURANCE: schema version 1
An insurance policy for a mobile phone. It is resolved from a basket item with insuranceCategory: DEVICE. The type object device is a single device. The device's IMEI and the sum insured are required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity types: TCKN, PASSPORT. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured: the owner of the device; exactly 1 entry. Accepted identity types: TCKN, PASSPORT. |
device | object | QUOTE | The insured device. |
device
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the device belongs to. At most 256 characters; the value is stored as is. |
brandCode | string | QUOTE | Brand, reference code (DEVICE_BRAND). |
modelCode | string | QUOTE | Model, reference code (DEVICE_MODEL, under the brand). |
imei | string | QUOTE | The device's IMEI: 15 digits, check digit validated. |
sumInsuredAmount | integer | QUOTE | Sum insured (device value) in minor units; at least 1. |
coverageStartDate | string | No | First day of coverage, YYYY-MM-DD. If the product in your connection does not take a start day, the quote is rejected. |
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, first name, last name, date of birth, email, phone | Gender, address (province, district, line) |
policyholder | — | — |
The price is calculated with the insured person's details; that is why the person fields are required at the quote stage.
Example
{
"insuranceType": "DEVICE_INSURANCE",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"firstName": "<first name>",
"lastName": "<last name>",
"birthDate": "<YYYY-MM-DD>",
"gender": "FEMALE",
"email": "<email>",
"phone": "<E.164 phone>",
"address": {
"cityCode": "34",
"districtCode": "<district code>",
"line": "<address line>"
}
}
],
"device": {
"basketItemId": "phone-1",
"brandCode": "<brand code>",
"modelCode": "<model code>",
"imei": "<IMEI>",
"sumInsuredAmount": 3500000
}
}DEVICE_PROTECTION: schema version 1
A protection plan that covers the repair costs of a mobile phone. It is resolved from a basket item with insuranceCategory: DEVICE. The type object device is a single device. The quote is taken with the brand and model only, without the IMEI and without personal data.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity types: TCKN, PASSPORT. If you send it, it must be the same person as the insured. |
insured | array | POLICY | The insured: the owner of the device; at most 1 entry. Accepted identity types: TCKN, PASSPORT. |
device | object | QUOTE | The protected device. |
device
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the device belongs to. At most 256 characters; the value is stored as is. |
brandCode | string | QUOTE | Brand, reference code (DEVICE_BRAND). |
modelCode | string | QUOTE | Model, reference code (DEVICE_MODEL, under the brand). |
imei | string | POLICY | The device's IMEI: 15 digits, check digit validated. |
deviceValueAmount | integer | No | Device value in minor units; at least 1. A product that prices by model does not use this field. |
coverageStartDate | string | No | First day of coverage, YYYY-MM-DD. |
The IMEI cannot be registered after the policy; send it in the quote request at the latest, together with the policy fields.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | — | Identity type and number, date of birth, email, phone, address (province, district, line) |
policyholder | — | — |
Example
{
"insuranceType": "DEVICE_PROTECTION",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>",
"address": {
"cityCode": "06",
"districtCode": "<district code>",
"line": "<address line>"
}
}
],
"device": {
"basketItemId": "phone-1",
"brandCode": "<brand code>",
"modelCode": "<model code>",
"imei": "<IMEI>"
}
}EXTENDED_WARRANTY: schema version 1
12 or 24 more months of cover for electronics and home appliances after the manufacturer's warranty ends. It is resolved from a basket item with insuranceCategory: ELECTRONICS. The type object product is a single product. The quote is taken without personal data.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity types: TCKN, PASSPORT. If you send it, it must be the same person as the insured. |
insured | array | POLICY | The insured: the owner of the product; at most 1 entry. Accepted identity types: TCKN, PASSPORT. |
product | object | QUOTE | The product whose warranty is extended. |
product
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the product belongs to. At most 256 characters; the value is stored as is. |
categoryCode | string | QUOTE | Product category, reference code (PRODUCT_CATEGORY). |
brand | string | QUOTE | The product's brand. Text, at most 100 characters. |
model | string | QUOTE | The product's model. Text, at most 100 characters. |
priceAmount | integer | QUOTE | The product's sale price in minor units; at least 1. |
warrantyMonths | integer | QUOTE | Extra warranty period in months: 12 or 24. A JSON number; text such as "12" is not accepted. |
The upper limit of the product price is a rule of the product in your connection; a request above the limit is rejected at the quote stage. Corporate customers (tax identity number) are not supported in this version.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | — | Identity type and number, first name, last name, date of birth, email, phone, address (province, district, line) |
policyholder | — | — |
Example
{
"insuranceType": "EXTENDED_WARRANTY",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"firstName": "<first name>",
"lastName": "<last name>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>",
"address": {
"cityCode": "16",
"districtCode": "<district code>",
"line": "<address line>"
}
}
],
"product": {
"basketItemId": "tv-1",
"categoryCode": "<category code>",
"brand": "Example Brand",
"model": "Example Model 55",
"priceAmount": 2500000,
"warrantyMonths": 24
}
}ROADSIDE_ASSISTANCE: schema version 1
Towing and on-site assistance when a vehicle breaks down on the road. It is resolved from a basket item with insuranceCategory: VEHICLE. The type object vehicle is a single vehicle. The quote is taken without personal data and without the plate.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity types: TCKN, PASSPORT. If you send it, it must be the same person as the insured. |
insured | array | POLICY | The insured: the owner of the vehicle; at most 1 entry. Accepted identity types: TCKN, PASSPORT. |
vehicle | object | QUOTE | The vehicle to be assisted. |
vehicle
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the vehicle belongs to. At most 256 characters; the value is stored as is. |
brandCode | string | QUOTE | Brand, reference code (VEHICLE_BRAND). |
modelCode | string | QUOTE | Model, reference code (VEHICLE_MODEL, under the brand). |
modelYear | integer | QUOTE | Model year. A JSON number; between 1950 and the year after the current year. |
vehicleTypeCode | string | QUOTE | Vehicle type, reference code (VEHICLE_TYPE). |
plate | string | POLICY | Turkish licence plate; no spaces, upper case. |
This version accepts only vehicles with a Turkish plate.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | — | First name, last name, email, phone, address (province, district, line) |
policyholder | — | — |
The insured person's identity and date of birth are optional. The address is also used as the billing address.
Example
{
"insuranceType": "ROADSIDE_ASSISTANCE",
"insured": [
{
"firstName": "<first name>",
"lastName": "<last name>",
"email": "<email>",
"phone": "<E.164 phone>",
"address": {
"cityCode": "07",
"districtCode": "<district code>",
"line": "<address line>"
}
}
],
"vehicle": {
"basketItemId": "car-1",
"brandCode": "<brand code>",
"modelCode": "<model code>",
"modelYear": 2022,
"vehicleTypeCode": "<vehicle type code>",
"plate": "<plate>"
}
}TRAVEL_HEALTH: schema version 1
Health insurance for domestic and international travel. It is resolved from a basket item with insuranceCategory: TRAVEL. The type object trip is a single trip; all insured persons of the trip are on the same policy.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | POLICY | The policyholder. Accepted identity types: TCKN, PASSPORT. |
insured | array | QUOTE | The insured persons; 1-10 entries. Accepted identity types: TCKN, PASSPORT. identityNumber is unique across the insured persons. |
trip | object | QUOTE | The insured trip. |
trip
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the trip belongs to. At most 256 characters; the value is stored as is. |
scope | enum | QUOTE | Scope: DOMESTIC or INTERNATIONAL. |
startDate | string | QUOTE | First day, YYYY-MM-DD. |
endDate | string | QUOTE | Last day, YYYY-MM-DD; must be after the first day. |
residenceCountryCode | string | QUOTE | Country of residence, ISO 3166-1 alpha-2. |
destinationCountryCodes | string[] | QUOTE, INTERNATIONAL only | Destination countries; 1-10 entries, each ISO 3166-1 alpha-2, no duplicates. |
originCityCode | string | POLICY, DOMESTIC only | Departure province of a domestic trip, plate code 01-81. |
Fields marked "INTERNATIONAL only" and "DOMESTIC only" apply only in that scope, and their requirement is applied only then. If they are sent for the other scope, the request is rejected.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[] | Identity type and number, date of birth | — |
policyholder | — | Identity type and number, date of birth, email, phone |
The products in your connection differ by the scope of the trip and by the identity type of the insured persons. For a person insured with a passport, the first name, last name and gender (gender) may also be needed; send these fields if you have them. A product that does not fit the request returns no quote. If no product fits the request (for example, the products in your connection accept a single destination country and you sent several), the quote is rejected with 422 insurance.quote.declined.
Example
International trip:
{
"insuranceType": "TRAVEL_HEALTH",
"policyholder": {
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
},
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>"
}
],
"trip": {
"basketItemId": "tour-1",
"scope": "INTERNATIONAL",
"startDate": "2025-12-23",
"endDate": "2025-12-30",
"residenceCountryCode": "TR",
"destinationCountryCodes": ["DE"]
}
}On a domestic trip, destinationCountryCodes is not sent; for the policy, the departure province originCityCode is sent:
{
"scope": "DOMESTIC",
"startDate": "2025-12-23",
"endDate": "2025-12-26",
"residenceCountryCode": "TR",
"originCityCode": "06"
}MUSICAL_INSTRUMENT_PROTECTION: schema version 1
A protection plan that covers the repair cost of a musical instrument after sudden and unforeseen damage. It is resolved from a basket item with insuranceCategory: MUSICAL_INSTRUMENT. The type object instrument is a single instrument. The quote is obtained without personal data, from the instrument's brand, model and value.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity types: TCKN, VKN. If you send it, it must be the same person as the insured. |
insured | array | POLICY | The insured: the owner of the instrument; at most 1 entry. Accepted identity types: TCKN (individual), VKN (company). |
instrument | object | QUOTE | The protected musical instrument. |
instrument
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the instrument belongs to. At most 256 characters; the value is stored as is. |
brand | string | QUOTE | The instrument's brand. Text, at most 100 characters. |
model | string | QUOTE | The instrument's model. Text, at most 100 characters. |
valueAmount | integer | QUOTE | The instrument's value in minor units; at least 1. |
categoryCode | string | No | The instrument's category, reference code (PRODUCT_CATEGORY). |
serialNumber | string | No | The instrument's serial number. Text, at most 100 characters. |
- Musical instrument categories are in the
PRODUCT_CATEGORYlist. For this type, a code that is not a musical instrument category (for example an electronics product category) is rejected with422 insurance.reference.unknown. - If you send the serial number, it is printed on the policy document.
- If the product in your connection offers several plans, one quote request returns a separate option per plan: Quotes › Multiple options.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | — | Identity type and number, email, phone; plus the fields below depending on the identity type |
policyholder | — | — |
At the policy stage, depending on the identity type:
TCKN: the date of birth (birthDate) or the first and last name (firstName,lastName). If neither is present, the request receives422 insurance.validation.invalidwith the field pathinsured[0].birthDate. Gender (gender) is optional.VKN: the company name (companyName).
For a company (VKN) policy, if the product in your connection does not support cancelling it, the cancellation result is insurance.policy.cancel_failed and the policy stays in force: Cancellation and Premium Refund.
Example
{
"insuranceType": "MUSICAL_INSTRUMENT_PROTECTION",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"instrument": {
"basketItemId": "guitar-1",
"brand": "Example Brand",
"model": "Example Model",
"valueAmount": 4500000,
"categoryCode": "<category code>",
"serialNumber": "<serial number>"
}
}If the insured is a company, send insured like this:
"insured": [
{
"identityType": "VKN",
"identityNumber": "<tax identity number>",
"companyName": "<company name>",
"email": "<email>",
"phone": "<E.164 phone>"
}
]EVENT_ACCIDENT: schema version 1
Personal accident insurance for an event attendee, valid on the day of the event. It is resolved from a basket item with insuranceCategory: EVENT. The type object event is a single event ticket: a quote covers one ticket and one attendee. The price is calculated from the attendee's details, so the person fields are required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured: the attendee; exactly 1 entry. Accepted identity type: TCKN. |
event | object | QUOTE | The insured event ticket. |
event
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the ticket belongs to. At most 256 characters; the value is stored as is. |
coverageStartDate | string | QUOTE | The event day, YYYY-MM-DD. It must be the day you get the quote. |
- The policy is valid on the day it is issued and lasts at most one day. Get the quote on the event day.
- The day is a calendar day in Türkiye. A past day is rejected with
422 insurance.validation.invalid(reason: must_not_be_past), a future day with422 insurance.quote.declined. - The day is checked again at order and collection time. If the day has changed since the quote, the operation is rejected with
insurance.quote.declined; get a new quote. - Each ticket is a separate basket item and a separate quote.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, date of birth, email, phone | — |
policyholder | — | — |
Nationality (nationalityCountryCode) is optional; if not sent, TR is assumed.
Example
{
"insuranceType": "EVENT_ACCIDENT",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"event": {
"basketItemId": "concert-1",
"coverageStartDate": "<today, YYYY-MM-DD>"
}
}MICROMOBILITY_ACCIDENT: schema version 1
Personal accident insurance for the rider of a rented scooter, valid on the day of the rental. It is resolved from a basket item with insuranceCategory: MICROMOBILITY. The type object rental is a single rental: a quote covers one rental and one rider. The price is calculated from the rider's details, so the person fields are required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured: the rider; exactly 1 entry. Accepted identity type: TCKN. |
rental | object | QUOTE | The insured rental. |
rental
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the rental belongs to. At most 256 characters; the value is stored as is. |
coverageStartDate | string | No | The coverage day, YYYY-MM-DD. If you send it, it must be the day you get the quote. |
- The policy is valid on the day it is issued and lasts at most one day.
- The day is a calendar day in Türkiye. A past day is rejected with
422 insurance.validation.invalid(reason: must_not_be_past), a future day with422 insurance.quote.declined. If you sent the day and it has changed since the quote, the order is rejected withinsurance.quote.declined.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, date of birth, email, phone | — |
policyholder | — | — |
Nationality (nationalityCountryCode) is optional; if not sent, TR is assumed.
Example
{
"insuranceType": "MICROMOBILITY_ACCIDENT",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"rental": {
"basketItemId": "ride-1"
}
}PERSONAL_ACCIDENT: schema version 1
Annual personal accident insurance for one person. This type is not linked to a basket item; it is sold only on the API path, without a basket item: Selling Without a Basket Item. The type object accident holds the insurance details and carries no basketItemId. The quote is obtained without personal data, from the start day only.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | POLICY | The insured; at most 1 entry. Accepted identity type: TCKN. |
accident | object | QUOTE | The insurance details. |
accident
| Field | Type | Required | Rule |
|---|---|---|---|
coverageStartDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
occupationCode | string | POLICY | The insured's occupation, reference code (OCCUPATION). |
beneficiaryName | string | POLICY | The name of the beneficiary. Text, at most 100 characters. |
vehiclePlate | string | No | Turkish plate; no spaces, upper case. |
- The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote. - The occupation code is checked against its counterpart at your connection's provider when the order is created. A code without a counterpart receives
422 insurance.reference.unknownat the order and no premium is collected. Get the valid codes from the reference endpoint.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | — | Identity type and number, date of birth, email, phone |
policyholder | — | — |
Example
{
"insuranceType": "PERSONAL_ACCIDENT",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"accident": {
"coverageStartDate": "<YYYY-MM-DD>",
"occupationCode": "<occupation code>",
"beneficiaryName": "<beneficiary name>"
}
}MEDICAL_COMPLICATION: schema version 1
Insurance against complications of a medical procedure performed as part of health tourism. It is resolved from a basket item with insuranceCategory: HEALTH. The type object procedure is a single procedure: a quote covers one procedure and one patient. Persons are insured with a passport. The price is calculated from the insured's details, so the person and procedure fields are required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: PASSPORT. If not sent, the insured is also the policyholder; if sent, it can be a different person. |
insured | array | QUOTE | The insured: the person undergoing the procedure; exactly 1 entry. Accepted identity type: PASSPORT. |
procedure | object | QUOTE | The insured medical procedure. |
procedure
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the procedure belongs to. At most 256 characters; the value is stored as is. |
procedureCoverCode | string | QUOTE | The procedure and cover limit, reference code (MEDICAL_PROCEDURE_COVER). |
procedureDate | string | QUOTE | The procedure day, YYYY-MM-DD; must be within the coverage period. |
facilityName | string | QUOTE | The name of the healthcare facility performing the procedure. Text, at most 200 characters. |
startDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
endDate | string | QUOTE | The coverage end day, YYYY-MM-DD; must be after the start day. |
- Days are calendar days in Türkiye. A procedure day outside the coverage period receives
422 insurance.validation.invalid(reason: out_of_range) with the field pathprocedure.procedureDate. - If the start day has passed when the order is created, the order is rejected with
insurance.quote.declined; get a new quote. - If the product in your connection does not support cancelling this policy, a cancellation request returns
412 insurance.provider.not_integrated.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, first name, last name, gender, date of birth, place of birth, email, phone | — |
policyholder (if sent) | Identity type and number, first name, last name, gender, date of birth, place of birth | — |
Example
{
"insuranceType": "MEDICAL_COMPLICATION",
"insured": [
{
"identityType": "PASSPORT",
"identityNumber": "<passport number>",
"firstName": "<first name>",
"lastName": "<last name>",
"gender": "MALE",
"birthDate": "<YYYY-MM-DD>",
"birthPlace": "<place of birth>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"procedure": {
"basketItemId": "treatment-1",
"procedureCoverCode": "<procedure code>",
"procedureDate": "<YYYY-MM-DD>",
"facilityName": "Example Hospital",
"startDate": "<YYYY-MM-DD>",
"endDate": "<YYYY-MM-DD>"
}
}PET_HEALTH: schema version 1
Health insurance for cats and dogs. It is resolved from a basket item with insuranceCategory: PET; it is also sold without a basket item (Selling Without a Basket Item). The type object pet is a single animal. The price is calculated from the animal's and the owner's details, so the owner and animal fields are required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | QUOTE | The policyholder: the animal's owner. Accepted identity type: TCKN. |
insured | array | No | At most 1 entry. Accepted identity type: TCKN. If you send it, it must be the same person as the policyholder. |
pet | object | QUOTE | The insured animal. |
pet
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the animal belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
coverageStartDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
petName | string | QUOTE | The animal's name. Text, at most 100 characters. |
petSpecies | enum | QUOTE | Species: CAT, DOG. |
petBreedCode | string | QUOTE | Breed, reference code (PET_BREED, under the species). |
petGender | enum | QUOTE | The animal's sex: MALE, FEMALE. |
petBirthDate | string | QUOTE | The animal's date of birth, YYYY-MM-DD; cannot be in the future. |
petColor | string | No | The animal's colour. Text, at most 50 characters. |
- Get the breed codes under the species:
GET /api/v1/insurance/reference/PET_BREED?parentCode=CAT. Send a breed that matches the species. - The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote. - Some products in your connections need the animal's colour. If you do not send
petColor, only those products' options are excluded with the field pathpet.petColor; the other options are returned: Quotes › Excluded options. - If the product in your connection offers several plans, one quote request returns a separate option per plan: Quotes › Multiple options.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
policyholder | Identity type and number, date of birth, email, phone | — |
insured[0] (if sent) | — | — |
Example
{
"insuranceType": "PET_HEALTH",
"policyholder": {
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
},
"pet": {
"basketItemId": "pet-1",
"coverageStartDate": "<YYYY-MM-DD>",
"petName": "<animal's name>",
"petSpecies": "CAT",
"petBreedCode": "<breed code>",
"petGender": "FEMALE",
"petBirthDate": "<YYYY-MM-DD>",
"petColor": "<colour>"
}
}On a quote obtained without a basket item, pet.basketItemId is not sent.
VEHICLE_TAG_PROTECTION: schema version 1
Protection for the vehicle's vehicle identification tag (UTTS): cover for the device, wrong fuel filling, and towing or recovery. It is resolved from a basket item with insuranceCategory: VEHICLE; it is also sold without a basket item. The type object vehicle is the device of a single vehicle. The quote is obtained without personal data or vehicle identifiers, from the start day only.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | POLICY | The insured: the vehicle's owner; at most 1 entry. Accepted identity type: TCKN. |
vehicle | object | QUOTE | The vehicle the device is fitted to. |
vehicle
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the vehicle belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
coverageStartDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
plate | string | POLICY | Turkish plate; no spaces, upper case. |
chassisNumber | string | POLICY | Chassis number (VIN), 17 characters. |
tagInstallationCode | string | POLICY | The device's installation code: no spaces, upper-case letters and digits, 4-32 characters. |
- This version accepts only vehicles with a Turkish plate.
- The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote. - Formats of the chassis number and the installation code: Data Formats › Vehicle documents and identifiers.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | — | Identity type and number, date of birth, email, phone |
policyholder | — | — |
Example
{
"insuranceType": "VEHICLE_TAG_PROTECTION",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"vehicle": {
"basketItemId": "car-1",
"coverageStartDate": "<YYYY-MM-DD>",
"plate": "<plate>",
"chassisNumber": "<chassis number>",
"tagInstallationCode": "<installation code>"
}
}MOTOR_GREEN_CARD: schema version 1
Green Card: the vehicle's liability insurance abroad. It is resolved from a basket item with insuranceCategory: VEHICLE or TRAVEL; it is also sold without a basket item. The type object vehicle is a single period of a single vehicle. The price is calculated from the insured's and the vehicle's details, so every field is required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured: the vehicle's owner; exactly 1 entry. Accepted identity type: TCKN. |
vehicle | object | QUOTE | The insured vehicle and the coverage period. |
vehicle
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the vehicle belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
plate | string | QUOTE | Turkish plate; no spaces, upper case. |
registrationDocument | object | QUOTE | The vehicle registration document: serial and number; both required. |
registrationDate | string | QUOTE | Registration date, YYYY-MM-DD; cannot be in the future. |
seatCount | integer | QUOTE | Number of seats, driver included; 1-100. |
vehicleTypeCode | string | QUOTE | Vehicle class, reference code (VEHICLE_TYPE). |
startDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
endDate | string | QUOTE | The coverage end day, YYYY-MM-DD; must be after the start day. |
registrationDocument:
| Field | Type | Rule |
|---|---|---|
serial | string | The registration document's serial code: 1-4 upper-case letters. |
number | string | The registration document's number: 4-10 digits, as text. |
- This version accepts only vehicles with a Turkish plate.
- If the vehicle class has no price for the period you chose, the quote is rejected with
422 insurance.quote.declined. - The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote. - Once the policy is issued, you can download the Green Card certificate from the certificate endpoint.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, date of birth, email, phone | — |
policyholder | — | — |
Example
{
"insuranceType": "MOTOR_GREEN_CARD",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"vehicle": {
"basketItemId": "car-1",
"plate": "<plate>",
"registrationDocument": {
"serial": "<serial code>",
"number": "<registration number>"
},
"registrationDate": "<YYYY-MM-DD>",
"seatCount": 5,
"vehicleTypeCode": "<vehicle class code>",
"startDate": "<YYYY-MM-DD>",
"endDate": "<YYYY-MM-DD>"
}
}INBOUND_TRAVEL_HEALTH: schema version 1
Health insurance for a foreign visitor coming to Türkiye. It is a separate type from TRAVEL_HEALTH: the type object has the same name (trip), but its fields are this schema's. It is resolved from a basket item with insuranceCategory: TRAVEL; it is also sold without a basket item. The type object trip is a single period of a single visit; all insured persons are on the same policy. Persons are insured with a passport. The price is calculated from the persons' details, so the person fields are required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | QUOTE | The policyholder. Accepted identity type: PASSPORT. Does not have to be one of the insured. |
insured | array | QUOTE | The insured persons; 1-10 entries. Accepted identity type: PASSPORT. identityNumber is unique among the insured. |
trip | object | QUOTE | The insured visit. |
trip
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the visit belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
startDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
endDate | string | QUOTE | The coverage end day, YYYY-MM-DD; must be after the start day. |
- The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote. - If a nationality (
nationalityCountryCode) has no counterpart at your connection's provider, the quote receives422 insurance.reference.unknownwith the person's field path. - If the product in your connection does not support cancelling this policy, a cancellation request returns
412 insurance.provider.not_integrated.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
policyholder | Identity type and number, first name, last name, gender, date of birth, place of birth, nationality, address line, email, phone | — |
insured[] | Identity type and number, first name, last name, gender, date of birth, place of birth, nationality, address line | — |
The contact details are the policyholder's; the insured persons' email and phone are optional.
Example
{
"insuranceType": "INBOUND_TRAVEL_HEALTH",
"policyholder": {
"identityType": "PASSPORT",
"identityNumber": "<passport number>",
"firstName": "<first name>",
"lastName": "<last name>",
"gender": "FEMALE",
"birthDate": "<YYYY-MM-DD>",
"birthPlace": "<place of birth>",
"nationalityCountryCode": "DE",
"email": "<email>",
"phone": "<E.164 phone>",
"address": {
"line": "<address line>"
}
},
"insured": [
{
"identityType": "PASSPORT",
"identityNumber": "<passport number>",
"firstName": "<first name>",
"lastName": "<last name>",
"gender": "FEMALE",
"birthDate": "<YYYY-MM-DD>",
"birthPlace": "<place of birth>",
"nationalityCountryCode": "DE",
"address": {
"line": "<address line>"
}
}
],
"trip": {
"basketItemId": "visit-1",
"startDate": "<YYYY-MM-DD>",
"endDate": "<YYYY-MM-DD>"
}
}FOREIGN_RESIDENT_HEALTH: schema version 1
Health insurance for a foreigner residing in Türkiye. This type is not linked to a basket item; it is sold only on the API path, without a basket item: Selling Without a Basket Item. The type object residence is the residence period and carries no basketItemId. The quote is obtained without personal data, from the start day only. The person is insured with a passport.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: PASSPORT. If you send it, it must be the same person as the insured. |
insured | array | POLICY | The insured; at most 1 entry. Accepted identity type: PASSPORT. |
residence | object | QUOTE | The residence period. |
residence
| Field | Type | Required | Rule |
|---|---|---|---|
startDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
endDate | string | POLICY | The coverage end day, YYYY-MM-DD; must be after the start day. |
- The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote. - The residence address is in Türkiye:
insured[0].address.countryCodemust beTR. With another country the order is rejected withinsurance.quote.declined. - If the nationality, the address country, the province or the district has no counterpart at your connection's provider, the order receives
422 insurance.reference.unknownwith the field's path and no premium is collected. - If the product in your connection does not support cancelling this policy, a cancellation request returns
412 insurance.provider.not_integrated.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | — | Identity type and number, first name, last name, gender, date of birth, place of birth, father's name, nationality, email, phone, address (country, province, district, line) |
policyholder | — | — |
Example
{
"insuranceType": "FOREIGN_RESIDENT_HEALTH",
"insured": [
{
"identityType": "PASSPORT",
"identityNumber": "<passport number>",
"firstName": "<first name>",
"lastName": "<last name>",
"gender": "MALE",
"birthDate": "<YYYY-MM-DD>",
"birthPlace": "<place of birth>",
"fatherName": "<father's name>",
"nationalityCountryCode": "DE",
"email": "<email>",
"phone": "<E.164 phone>",
"address": {
"countryCode": "TR",
"cityCode": "34",
"districtCode": "<district code>",
"line": "<address line>"
}
}
],
"residence": {
"startDate": "<YYYY-MM-DD>",
"endDate": "<YYYY-MM-DD>"
}
}ABROAD_STAY_HEALTH: schema version 1
Health insurance for the duration of studying or working abroad. It is a separate type from TRAVEL_HEALTH. It is resolved from a basket item with insuranceCategory: EDUCATION or TRAVEL; it is also sold without a basket item. The type object abroadStay is a single period with a single destination country; all insured persons are on the same policy. Persons are insured with a Turkish identity number. The price is calculated from the persons' details, so the person fields are required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | QUOTE | The policyholder. Accepted identity type: TCKN. |
insured | array | QUOTE | The insured persons; 1-10 entries. Accepted identity type: TCKN. identityNumber is unique among the insured. |
abroadStay | object | QUOTE | The insured period. |
abroadStay
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the period belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
startDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
endDate | string | QUOTE | The coverage end day, YYYY-MM-DD; must be after the start day. |
coverageRegion | enum | QUOTE | Coverage region: EUROPE or WORLDWIDE. |
destinationCountryCode | string | QUOTE | Destination country, ISO 3166-1 alpha-2. Must be one of the countries of the chosen region. |
- The destination country cannot be Türkiye (
TR); the quote is rejected with422 insurance.quote.declined. - If the destination country has no counterpart in the chosen region at your connection's provider, the quote receives
422 insurance.reference.unknownwith the field pathabroadStay.destinationCountryCode. - The policyholder's address is in Türkiye:
policyholder.address.countryCodemust beTR. With another country the order is rejected withinsurance.quote.declined. - The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
policyholder | Identity type and number, date of birth, email, phone, address line | Address (country, province, district, line) |
insured[] | Identity type and number, date of birth, relationship (relationship) | — |
If the policyholder is also insured, they are listed in insured[] with relationship: SELF.
Example
{
"insuranceType": "ABROAD_STAY_HEALTH",
"policyholder": {
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>",
"address": {
"countryCode": "TR",
"cityCode": "06",
"districtCode": "<district code>",
"line": "<address line>"
}
},
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"relationship": "CHILD"
}
],
"abroadStay": {
"basketItemId": "school-1",
"startDate": "<YYYY-MM-DD>",
"endDate": "<YYYY-MM-DD>",
"coverageRegion": "EUROPE",
"destinationCountryCode": "DE"
}
}MOTOR_THIRD_PARTY_LIABILITY: schema version 1
Compulsory motor third-party liability insurance. It is resolved from a basket item with insuranceCategory: VEHICLE; it is also sold without a basket item. Leads can be opened for this type too: Lead schemas. The type object vehicle is a single policy for a single vehicle. Which vehicle fields are needed is decided by the vehicle's registration scenario (registrationScenario). The price is calculated from the insured's and the vehicle's details, so every field is required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity types: TCKN, PASSPORT, VKN. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured: the vehicle's owner; exactly 1 entry. Accepted identity types: TCKN, PASSPORT, VKN; one of them applies, depending on the registration scenario (Registration scenarios). |
vehicle | object | QUOTE | The insured vehicle. |
vehicle
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the vehicle belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
registrationScenario | enum | QUOTE | The vehicle's registration scenario: RENEWAL, NEW_REGISTRATION, FOREIGN_PLATE, OWNERSHIP_TRANSFER, DEALER_SHORT_TERM. It has no default. |
plateCityCode | string | QUOTE, NEW_REGISTRATION only | The plate province code of a vehicle that has no plate yet, 01-81. |
plate | string | QUOTE, except NEW_REGISTRATION | Plate; no spaces, upper case. A foreign plate in the FOREIGN_PLATE scenario, a Turkish plate in the other scenarios. |
registrationDocument | object | QUOTE, RENEWAL, OWNERSHIP_TRANSFER, DEALER_SHORT_TERM only | The vehicle registration document: serial and number; both required. |
chassisNumber | string | QUOTE, NEW_REGISTRATION, FOREIGN_PLATE only | Chassis number (VIN), 17 characters. |
engineNumber | string | QUOTE, NEW_REGISTRATION, FOREIGN_PLATE only | Engine number. |
modelCode | string | QUOTE, except RENEWAL | Model, reference code (VEHICLE_MODEL). The brand is the model's parent code; it is not sent separately. |
modelYear | integer | QUOTE, NEW_REGISTRATION, FOREIGN_PLATE, DEALER_SHORT_TERM only | Model year. A JSON number between 1950 and the year after the current year. |
vehicleTypeCode | string | QUOTE, except RENEWAL | Vehicle type (usage style), reference code (VEHICLE_TYPE). |
policyDurationMonths | integer | QUOTE, FOREIGN_PLATE only | Policy duration, months; 1-12. |
Fields marked with scenarios apply only in those scenarios, and the requirement is applied only then. If they are sent in another scenario, the request receives 422 insurance.validation.invalid (reason: not_applicable) with the field's path.
Registration scenarios
registrationScenario | Vehicle | Identity type of the insured | Vehicle fields |
|---|---|---|---|
RENEWAL | Policy for a registered vehicle | TCKN | plate, registrationDocument |
NEW_REGISTRATION | A vehicle not yet registered, with no plate | TCKN | plateCityCode, modelCode, modelYear, vehicleTypeCode, engineNumber, chassisNumber |
FOREIGN_PLATE | A vehicle with a foreign plate | PASSPORT | plate (foreign plate), modelCode, modelYear, vehicleTypeCode, engineNumber, chassisNumber, policyDurationMonths |
OWNERSHIP_TRANSFER | A registered vehicle before the transfer at the notary; the insured is the person taking over the vehicle | TCKN | plate, registrationDocument, vehicleTypeCode, modelCode |
DEALER_SHORT_TERM | A car dealer's short-term policy; the insured is the dealer company | VKN | plate, registrationDocument, vehicleTypeCode, modelCode, modelYear |
Prepare the quote step by step:
- Determine the vehicle's registration scenario with the buyer and send it as
registrationScenario. - Collect the insured's details with the scenario's identity type. If the identity type does not match the scenario, the quote receives
422 insurance.validation.invalid(reason: not_supported_for_registration_scenario) with the field pathinsured[0].identityType, and the request is not sent to the provider. - If the scenario is not
RENEWAL, get the vehicle type from theVEHICLE_TYPElist; find the model from the list by vehicle type and year: firstVEHICLE_BRAND, thenVEHICLE_MODELunder the brand. - Fill in the scenario's vehicle fields as in the table and get the quote.
- For an insured with
VKN, the company name (companyName) is required and the date of birth is not sent. WithTCKNandPASSPORT, the date of birth is required. - No coverage start day is sent for this type; the policy period is set by the product in your connection.
- In the
NEW_REGISTRATIONscenario, if the model year is not one of the years the product in your connection accepts, the quote receives422 insurance.validation.invalid(reason: not_supported_by_provider) with the field pathvehicle.modelYear. - If the vehicle type or the model has no counterpart at your connection's provider, the quote receives
422 insurance.reference.unknownwith the field's path. - If the product in your connection accepts only Turkish mobile numbers, a quote with another number receives
422 insurance.quote.declined. - For a policy issued with a passport or tax identity number, if the product in your connection does not support cancelling it, the cancellation results in
insurance.policy.cancel_failedand the policy stays in force: Cancellation and Premium Refund. - Formats of the foreign plate and the engine number: Data Formats.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, email, phone; date of birth with TCKN and PASSPORT, company name (companyName) with VKN | — |
policyholder | — | — |
Example
Renewal (RENEWAL):
{
"insuranceType": "MOTOR_THIRD_PARTY_LIABILITY",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"vehicle": {
"basketItemId": "car-1",
"registrationScenario": "RENEWAL",
"plate": "<plate>",
"registrationDocument": {
"serial": "<serial code>",
"number": "<registration number>"
}
}
}For a new registration (NEW_REGISTRATION) the plate province code is sent instead of a plate:
"vehicle": {
"basketItemId": "car-1",
"registrationScenario": "NEW_REGISTRATION",
"plateCityCode": "34",
"modelCode": "<model code>",
"modelYear": 2026,
"vehicleTypeCode": "<vehicle type code>",
"engineNumber": "<engine number>",
"chassisNumber": "<chassis number>"
}For a dealer's short-term policy (DEALER_SHORT_TERM) the insured is sent with a tax identity number:
"insured": [
{
"identityType": "VKN",
"identityNumber": "<tax identity number>",
"companyName": "<company name>",
"email": "<email>",
"phone": "<E.164 phone>"
}
]MOTOR_COMPREHENSIVE: schema version 1
Comprehensive motor insurance. It is resolved from a basket item with insuranceCategory: VEHICLE; it is also sold without a basket item. Leads can be opened for this type too: Lead schemas. The type object vehicle is a single policy for a single vehicle. The price is calculated from the insured's and the vehicle's details, so the fields are sent at the quote stage.
The products in your connections need different vehicle fields. The schema covers all of them; only the fields every product needs are required in the schema. If an optional field that a product needs is missing, only that product's option is excluded: Additional product requirements.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured: the vehicle's owner; exactly 1 entry. Accepted identity type: TCKN. |
vehicle | object | QUOTE | The insured vehicle. |
vehicle
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the vehicle belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
plate | string | QUOTE | Turkish plate; no spaces, upper case. |
coverageStartDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
registrationDocument | object | No | The vehicle registration document: serial and number; if you send it, both are required. |
registrationDate | string | No | Registration date, YYYY-MM-DD; cannot be in the future. |
modelYear | integer | No | Model year. A JSON number between 1950 and the year after the current year. |
vehicleTypeCode | string | No | Vehicle type, reference code (VEHICLE_TYPE). |
modelCode | string | No | Model, reference code (VEHICLE_MODEL). |
chassisNumber | string | No | Chassis number (VIN), 17 characters. |
engineNumber | string | No | Engine number. |
originCountryCode | string | No | Country of origin, ISO 3166-1 alpha-2. |
driverIdentityNumber | string | No | The driver's Turkish identity number; validated in the TCKN format. |
- One product in your connection may need the registration document, another the model year and the registration date. Options offered to vehicle owners living abroad additionally need the country of origin, the engine and chassis numbers, the model, the vehicle type and the driver's identity number. To get every option, send all the vehicle fields you can collect from your buyer. A missing field is returned with its path on the excluded option (e.g.
vehicle.registrationDocument): Quotes › Excluded options. - Each product in your connections returns its own option; one quote request can return several options: Quotes › Multiple options.
- This version accepts only vehicles with a Turkish plate.
- The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote. - If the vehicle type, the model or the country of origin has no counterpart at your connection's provider, that product's option is excluded with
insurance.reference.unknownand the field's path. - If the product in your connection accepts only Turkish mobile numbers, a quote with another number receives
422 insurance.quote.declined.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, date of birth, email, phone | — |
policyholder | — | — |
Example
{
"insuranceType": "MOTOR_COMPREHENSIVE",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"vehicle": {
"basketItemId": "car-1",
"plate": "<plate>",
"coverageStartDate": "<YYYY-MM-DD>",
"registrationDocument": {
"serial": "<serial code>",
"number": "<registration number>"
},
"registrationDate": "<YYYY-MM-DD>",
"modelYear": 2022,
"vehicleTypeCode": "<vehicle type code>"
}
}MOTOR_EXCESS_LIABILITY: schema version 1
Voluntary excess motor liability insurance for a vehicle. It is resolved from a basket item with insuranceCategory: VEHICLE; it is also sold without a basket item. The type object vehicle is a single policy for a single vehicle. The price is calculated from the insured's and the vehicle's details and the chosen limit, so every field is required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured: the vehicle's owner; exactly 1 entry. Accepted identity type: TCKN. |
vehicle | object | QUOTE | The insured vehicle and the limit. |
vehicle
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the vehicle belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
plate | string | QUOTE | Turkish plate; no spaces, upper case. |
registrationDocument | object | QUOTE | The vehicle registration document: serial and number; both required. |
chassisNumber | string | QUOTE | Chassis number (VIN), 17 characters. |
engineNumber | string | QUOTE | Engine number. |
modelCode | string | QUOTE | Model, reference code (VEHICLE_MODEL). |
modelYear | integer | QUOTE | Model year. A JSON number between 1950 and the year after the current year. |
vehicleTypeCode | string | QUOTE | Vehicle type, reference code (VEHICLE_TYPE). |
vehicleUsageCode | string | QUOTE | The vehicle's usage, reference code (VEHICLE_USAGE). |
coverageStartDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
liabilityLimitCode | string | QUOTE | Liability limit per vehicle, reference code (LIABILITY_LIMIT). |
- Get the limits from the
GET /api/v1/insurance/reference/LIABILITY_LIMITlist. Show the display name (label) to the buyer and send the code in the request. - This version accepts only vehicles with a Turkish plate.
- The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote. - If the limit, the usage, the vehicle type or the model has no counterpart at your connection's provider, the quote receives
422 insurance.reference.unknownwith the field's path. - If the product in your connection accepts only Turkish mobile numbers, a quote with another number receives
422 insurance.quote.declined.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, date of birth, email, phone | — |
policyholder | — | — |
Example
{
"insuranceType": "MOTOR_EXCESS_LIABILITY",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"vehicle": {
"basketItemId": "car-1",
"plate": "<plate>",
"registrationDocument": {
"serial": "<serial code>",
"number": "<registration number>"
},
"chassisNumber": "<chassis number>",
"engineNumber": "<engine number>",
"modelCode": "<model code>",
"modelYear": 2022,
"vehicleTypeCode": "<vehicle type code>",
"vehicleUsageCode": "<usage code>",
"coverageStartDate": "<YYYY-MM-DD>",
"liabilityLimitCode": "<limit code>"
}
}COMPULSORY_EARTHQUAKE: schema version 1
Compulsory earthquake insurance (DASK) for a home. It is resolved from a basket item with insuranceCategory: HOME; it is also sold without a basket item. The type object property is a single policy for a single independent unit (home). The home's address is sent as a UAVT address code: UAVT address chain. The price is calculated from the insured's and the home's details, so the home fields are required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured; exactly 1 entry. Accepted identity type: TCKN. |
property | object | QUOTE | The insured home. |
property
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the home belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
uavtAddressCode | string | QUOTE | UAVT address code: 10 digits, as text. |
coverageStartDate | string | QUOTE | The coverage start day, YYYY-MM-DD; cannot be before today. |
areaSqm | integer | QUOTE | Gross area of the unit, square metres; 1-100000. |
floorCount | integer | QUOTE | Total number of floors of the building; 1-200. |
constructionType | enum | QUOTE | Construction type: REINFORCED_CONCRETE_STEEL (steel, reinforced concrete or frame) or OTHER. |
constructionYear | integer | QUOTE | The building's construction year. A JSON number between 1800 and the current year. |
priorDamage | enum | QUOTE | The building's previous damage: NONE, LIGHT, MODERATE, TOTAL_LOSS (heavily damaged). |
usage | enum | QUOTE | How the unit is used: RESIDENTIAL, COMMERCIAL, OTHER. |
lienholder | object | No | Lienholder: the bank or finance institution that financed the home. Fields below. |
lienholder:
| Field | Type | Required | Rule |
|---|---|---|---|
institutionType | enum | If lienholder is sent | Type of institution: BANK or FINANCE (finance institution). |
bankCode | string | BANK only | Bank, reference code (BANK). |
bankBranchCode | string | BANK only | Branch, reference code (BANK_BRANCH, under the bank). |
branchCityCode | string | BANK only | The branch's province, plate code 01-81. |
financeInstitutionCode | string | FINANCE only | Finance institution, reference code (FINANCE_INSTITUTION). |
Fields marked "BANK only" and "FINANCE only" apply only for that institution type and are required there. If they are sent for the other type, the request is rejected. If there is no lienholder, do not send lienholder.
- Checking of the UAVT address code: UAVT address chain.
- Building fields are raw values (year, floor count, square metres); do not convert them into ranges. A value the product in your connection does not accept (e.g. more floors than the product's limit) receives
422 insurance.validation.invalid(reason: not_supported_by_provider) with the field's path. - The day is a calendar day in Türkiye. A past start day receives
422 insurance.validation.invalid(reason: must_not_be_past) at quote time. If the start day has passed when the order is created, the order is rejected withinsurance.quote.declined; get a new quote. - If the bank, branch, finance institution or the address district has no counterpart at your connection's provider, the request receives
422 insurance.reference.unknownwith the field's path. - If the product in your connection accepts only Turkish mobile numbers, a quote with another number receives
422 insurance.quote.declined.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, date of birth, email, phone | Address (province, district, line) |
policyholder | — | — |
Example
{
"insuranceType": "COMPULSORY_EARTHQUAKE",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>",
"address": {
"cityCode": "35",
"districtCode": "<district code>",
"line": "<address line>"
}
}
],
"property": {
"basketItemId": "home-1",
"uavtAddressCode": "<UAVT address code>",
"coverageStartDate": "<YYYY-MM-DD>",
"areaSqm": 120,
"floorCount": 5,
"constructionType": "REINFORCED_CONCRETE_STEEL",
"constructionYear": 2005,
"priorDamage": "NONE",
"usage": "RESIDENTIAL"
}
}If a bank financed the home, lienholder is sent like this:
"lienholder": {
"institutionType": "BANK",
"bankCode": "<bank code>",
"bankBranchCode": "<branch code>",
"branchCityCode": "35"
}HOME_INSURANCE: schema version 1
Home insurance. It is resolved from a basket item with insuranceCategory: HOME; it is also sold without a basket item. The type object property is a single policy for a single independent unit (home). The home's address is sent as a UAVT address code: UAVT address chain. The price is calculated from the insured's and the home's details and the sums insured, so every field is required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured; exactly 1 entry. Accepted identity type: TCKN. |
property | object | QUOTE | The insured home. |
property
| Field | Type | Required | Rule |
|---|---|---|---|
basketItemId | string | On a basket-linked quote | The id of the basket item the home belongs to. At most 256 characters; the value is stored as is. Not sent on a quote obtained without a basket item. |
uavtAddressCode | string | QUOTE | UAVT address code: 10 digits, as text. |
areaSqm | integer | QUOTE | Gross area of the unit, square metres; 1-100000. |
constructionYear | integer | QUOTE | The building's construction year. A JSON number between 1800 and the current year. |
dwellingTypeCode | string | QUOTE | Dwelling type, reference code (DWELLING_TYPE). |
floorCode | string | QUOTE | The floor the unit is on, reference code (DWELLING_FLOOR). |
contentsFireAmount | integer | QUOTE | Sum insured for contents against fire, minor units; at least 1, at most 100000000 (TRY 1,000,000). |
interiorDecorationAmount | integer | QUOTE | Sum insured for interior decoration, minor units; at least 1, at most 100000000 (TRY 1,000,000). |
glassBreakageAmount | integer | QUOTE | Sum insured for glass breakage, minor units; at least 2000000 (TRY 20,000). |
vacantOverThreeMonths | boolean | QUOTE | The home stays empty for more than three months a year. |
hasEarthquakePolicy | boolean | QUOTE | The home has a compulsory earthquake insurance policy in force. |
inGatedSite | boolean | QUOTE | The home is in a gated community. |
hasAlarm | boolean | QUOTE | The home has an alarm. |
hasCamera | boolean | QUOTE | The home has a security camera. |
hasWindowBars | boolean | QUOTE | The windows have iron bars. |
hasFireExtinguisher | boolean | QUOTE | The home has a fire extinguisher. |
hasSprinkler | boolean | QUOTE | The home has a sprinkler system. |
hasResidualCurrentDevice | boolean | QUOTE | The home has a residual current device. |
hasGasDetector | boolean | QUOTE | The home has a natural gas detector. |
isOwner | boolean | QUOTE | The insured owns the home. |
includeWatercraft | boolean | QUOTE | Cover for watercraft is requested. |
lienholder | object | No | Lienholder: the bank or finance institution that financed the home. Fields below. |
The lienholder fields are the same as for COMPULSORY_EARTHQUAKE (above); only the branch province (branchCityCode) is not in this schema, and if it is sent the request is rejected.
- Yes/no fields are JSON booleans (
true,false) and all of them are required; text such as"true"is not accepted. - If a sum insured is outside the limits, the quote receives
422 insurance.validation.invalidwith the field's path:reason: must_be_at_most_100000000at the upper limit,reason: must_be_at_least_<limit>at the lower limit. - If the product in your connection takes the sums insured in whole lira, an amount with kuruş receives
reason: not_supported_by_providerwith the field's path. Send the sums insured in whole lira (a multiple of100minor units). - No coverage start day is sent in this version; the policy period is set by the product in your connection.
- Checking of the UAVT address code: UAVT address chain.
- If the dwelling type, the floor, the bank, the branch or the finance institution has no counterpart at your connection's provider, the quote receives
422 insurance.reference.unknownwith the field's path. - If the product in your connection accepts only Turkish mobile numbers, a quote with another number receives
422 insurance.quote.declined.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, date of birth, email, phone | — |
policyholder | — | — |
Example
{
"insuranceType": "HOME_INSURANCE",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
}
],
"property": {
"basketItemId": "home-1",
"uavtAddressCode": "<UAVT address code>",
"areaSqm": 120,
"constructionYear": 2005,
"dwellingTypeCode": "<dwelling type code>",
"floorCode": "<floor code>",
"contentsFireAmount": 50000000,
"interiorDecorationAmount": 10000000,
"glassBreakageAmount": 2000000,
"vacantOverThreeMonths": false,
"hasEarthquakePolicy": true,
"inGatedSite": false,
"hasAlarm": false,
"hasCamera": false,
"hasWindowBars": false,
"hasFireExtinguisher": true,
"hasSprinkler": false,
"hasResidualCurrentDevice": true,
"hasGasDetector": true,
"isOwner": true,
"includeWatercraft": false
}
}SUPPLEMENTARY_HEALTH: schema version 1
Supplementary health insurance. This type is not linked to a basket item; it is sold only on the API path, without a basket item: Selling Without a Basket Item. The type object health holds the details of the insurance and carries no basketItemId. A quote covers a single person, insured with a Turkish identity number. The health declaration (height, weight, pregnancy status) is in the insured's fields. The price is calculated from the insured's details, so the person fields are required at the quote stage.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | No | The policyholder. Accepted identity type: TCKN. If you send it, it must be the same person as the insured. |
insured | array | QUOTE | The insured; exactly 1 entry. Accepted identity type: TCKN. |
health | object | QUOTE | The details of the insurance. |
health
| Field | Type | Required | Rule |
|---|---|---|---|
planType | enum | QUOTE | Plan type: INPATIENT or INPATIENT_OUTPATIENT (inpatient and outpatient). |
pregnancyCover | boolean | No | true: only plans with pregnancy cover are requested. If not sent or false, only plans without pregnancy cover are returned. |
installmentCount | integer | No | Number of instalments, 1-12. If not sent, the premium is collected in a single payment. |
Health declaration
| Field | Type | Required | Rule |
|---|---|---|---|
insured[0].heightCm | integer | QUOTE | Height, centimetres; 30-250. |
insured[0].weightKg | integer | QUOTE | Weight, kilograms; 1-350. |
insured[0].pregnancyStatus | enum | When pregnancyCover: true | Pregnancy status: PREGNANT. |
- The quote returns only plans of the plan type chosen with
planType. If the product in your connection offers plans from several insurance companies, one quote request returns a separate option per company and plan: Quotes › Multiple options. - When
pregnancyCover: true,insured[0].pregnancyStatusis required; if it is not sent,reason: requiredis returned. On a quote without pregnancy cover, apregnancyStatusis rejected withreason: not_applicable. - The health declaration is special-category personal data. It is sent only in the quote request; error responses carry only the field's path, never its value. Do not use a real person's details in tests.
- You can list an option's contracted health facilities by province: Quotes › Contracted facilities.
- Some options do not accept instalments. For such an option, if
installmentCountis greater than 1, the premium collection is rejected withinsurance.quote.declined. - The insured's address is in Türkiye:
insured[0].address.countryCodemust beTR. With another country, the order is rejected withinsurance.quote.declined. - If the province, district or country of the address has no counterpart at your connection's provider, the request receives
422 insurance.reference.unknownwith the field's path. - First and last names are not needed.
- If the product in your connection accepts only Turkish mobile numbers, a quote with another number receives
422 insurance.quote.declined.
Persons
| Person | QUOTE | POLICY |
|---|---|---|
insured[0] | Identity type and number, date of birth, email, phone, the address province (address.cityCode), height, weight; pregnancy status with pregnancy cover | The address country, district and line (countryCode, districtCode, line) |
policyholder | — | — |
Example
{
"insuranceType": "SUPPLEMENTARY_HEALTH",
"insured": [
{
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>",
"heightCm": 170,
"weightKg": 70,
"address": {
"countryCode": "TR",
"cityCode": "06",
"districtCode": "<district code>",
"line": "<address line>"
}
}
],
"health": {
"planType": "INPATIENT_OUTPATIENT"
}
}Lead schemas
The fields of lead types are defined by a lead schema. A lead schema uses the same rules as a quote schema and is versioned separately per type (schemaVersion).
- A lead has no stages: the fields marked "Yes" in the table are required in the lead request.
- Every lead schema has an optional
notefield at its root: the lead note, text, at most 1000 characters. The note may carry personal data; it is hidden in the lead's masked view. - A lead has no amount, currency, basket item or payment.
- Request and outcomes: Leads.
MOTOR_THIRD_PARTY_LIABILITY and MOTOR_COMPREHENSIVE: lead schema version 1
A lead for compulsory motor third-party liability insurance (MOTOR_THIRD_PARTY_LIABILITY) or comprehensive motor insurance (MOTOR_COMPREHENSIVE). Both types have the same lead schema. The type object vehicle is a single vehicle.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | Yes | The lead owner: the vehicle's owner. Fields below. |
vehicle | object | Yes | The vehicle. Fields below. |
note | string | No | The lead note. Text, at most 1000 characters. |
policyholder:
| Field | Type | Required | Rule |
|---|---|---|---|
identityType | enum | Yes | Identity type: TCKN only. |
identityNumber | string | Yes | Turkish identity number. |
birthDate | string | Yes | Date of birth, YYYY-MM-DD; cannot be in the future. |
email | string | Yes | Email address. |
phone | string | Yes | Phone number, E.164. |
vehicle:
| Field | Type | Required | Rule |
|---|---|---|---|
plate | string | Yes | Turkish plate; no spaces, upper case. |
registrationDocument | object | Yes | The vehicle registration document: serial (1-4 upper-case letters) and number (4-10 digits, as text); both required. |
Example:
{
"insuranceType": "MOTOR_COMPREHENSIVE",
"policyholder": {
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
},
"vehicle": {
"plate": "<plate>",
"registrationDocument": {
"serial": "<serial code>",
"number": "<registration number>"
}
},
"note": "<lead note>"
}CARGO_TRANSIT: lead schema version 1
A lead for road cargo transit insurance. The type object shipment is a single shipment; vehicle is the carrying vehicle.
| Field | Type | Required | Rule |
|---|---|---|---|
policyholder | object | Yes | The lead owner: the authorized person. Same fields as the motor lead: above. |
company | object | No | The tax identity of the company submitting the lead. Fields below. |
shipment | object | Yes | The shipment. Fields below. |
vehicle | object | Yes | The carrying vehicle's plate (plate) and registration document (registrationDocument). Same fields as the motor lead: above. |
note | string | No | The lead note. Text, at most 1000 characters. |
company:
| Field | Type | Required | Rule |
|---|---|---|---|
identityType | enum | Yes | Identity type: VKN only. |
identityNumber | string | Yes | Tax identity number: 10 digits, the check digit is validated. |
If you send company, send both fields. The company name is not in this schema; if it is sent, the request is rejected.
shipment:
| Field | Type | Required | Rule |
|---|---|---|---|
cargoDescription | string | Yes | The goods carried. Text, at most 500 characters. |
carrierVehicle | enum | Yes | Carrying vehicle type: TRUCK. |
invoiceAmount | integer | Yes | The invoice value of the goods, minor units; at least 1. |
consigneeName | string | Yes | The consignee company. Text, at most 200 characters. |
originCityCode | string | Yes | Origin province, plate code 01-81. |
destinationCityCode | string | Yes | Destination province, plate code 01-81. |
departureDate | string | Yes | Departure day, YYYY-MM-DD. |
Example:
{
"insuranceType": "CARGO_TRANSIT",
"policyholder": {
"identityType": "TCKN",
"identityNumber": "<identity number>",
"birthDate": "<YYYY-MM-DD>",
"email": "<email>",
"phone": "<E.164 phone>"
},
"company": {
"identityType": "VKN",
"identityNumber": "<tax identity number>"
},
"shipment": {
"cargoDescription": "<goods>",
"carrierVehicle": "TRUCK",
"invoiceAmount": 50000000,
"consigneeName": "<consignee company>",
"originCityCode": "34",
"destinationCityCode": "06",
"departureDate": "<YYYY-MM-DD>"
},
"vehicle": {
"plate": "<plate>",
"registrationDocument": {
"serial": "<serial code>",
"number": "<registration number>"
}
}
}Validation
- Any field that is not in the schema is rejected. A field sent under a provider's own field name is rejected too, because it is not in the schema.
- Text fields are trimmed and normalized to Unicode NFC. Empty text, control characters such as line breaks, and placeholder values such as "yok" ("none") are not accepted. If there is no value, do not send the field.
- Numeric fields (amounts, guest count, seat count, model year, warranty period, policy duration, square metres, floor count, construction year, height, weight, instalment count) are JSON numbers; a number sent as text is not accepted. The registration document number (
registrationDocument.number) and the UAVT address code (uavtAddressCode) are text. - All violations are collected in a single error response. Each violation carries the field path, for example
tickets[0].departureAt,stay.checkOutDate,vehicle.registrationDocument.number,property.lienholder.bankCodeorinsured[1].identityNumber. The value you sent is not written to the error response. - After schema validation, the existence of reference codes, whether the type is enabled on your account, and consistency with the basket are checked separately.