Assets API v1.3.0
| Version | Date | Description | Author |
|---|---|---|---|
| 1.3.0 | 2025-10-15 | Added ExtendedWarranty | Alexandru Marinica & Catalin Fronea |
| 1.2.0 | 2025-9-19 | Added DigitalProtection & BusinessCyberProtection By LevIns | Alexandru Marinica & Catalin Fronea |
| 1.1.0 | 2025-08-01 | Added Tire Policy Product By Michelin | Alexandru Marinica |
| 1.0.1 | 2025-04-15 | Added House Assistance Product By Pointer | Catalin Fronea |
| 1.0.0 | 2025-03-31 | Added GAP Product By Colonnade | Alexandru Marinica |
| 1.0.0 | 2025-03-31 | Added Solar Panel Product by Colonnade | Alexandru Marinica |
| 1.0.0 | 2025-03-31 | Initial version | Alexandru Marinica |
1. Introduction
The Assets API service allows the generation of offers, the transformation of offers into policies, and the downloading of corresponding documents. All requests (except for authentication) must include the "Token" header containing the JWT obtained via the authentication endpoints (using credentials provided by Life Is Hard SA as OPERATOR).
Environments:
-
Test/Development:
https://assets-api-qa.api.lifeishard.ro/– test environment with the latest changes. -
Production:
https://assets-api.api.lifeishard.ro/
Access to both environments is restricted to whitelisted IPs. Please contact the sales team to gain access. Credentials valid in the test environment are not applicable in production.
1.1. Implemented products
Currently, the insurer “Colonnade” offers two products:
-
solarPanel
-
gap
Important: In the offer request, the
productobject includes both the solarPanel and gap sub-objects as examples. A valid request must include only one of these. The system automatically determines the product type: if thesolarPanelkey is present in the request, then the system will process the solarPanel product for Colonnade.
1.2. Workflow
To create a policy, follow these steps:
-
Authentication: Obtain a JWT token using OPERATOR-provided credentials.
-
Create offer: Submit an offer request. The response includes an
offerIdto be used in subsequent requests. -
Transform offer to policy: Use the
offerIdfrom the offer step to transform the offer into a policy. -
Download documents: Use the
offerIdto download offer documents and thepolicyId(from the transformation step) to download policy documents.
1.3. Response types
Responses consist of either a successful response or an error response:
-
Success Response: - status: 200–299 - data: Object containing the relevant response data.
-
Error Response: - errors: Array of error messages - correlation_id: Internal error tracking ID - status: 400–500 - data: (Optional) Additional data regarding the error.
Note: Validation messages are in English by default. To change them to Romanian, include the header parameter Content-Language: ro.
2. Authentication
2.1. Authenticate account
-
Endpoint:
POST /auth -
Description: Authenticates an account using the provided account and password (credentials from the OPERATOR).
-
Success Response: The response includes:
-
token: The JWT for subsequent requests. -
expires_at: Expiry date/time in"YYYY-MM-DD HH:MM:SS"format. -
refresh_token: Token used to refresh the JWT.
2.2. Renew token
-
Endpoint:
PATCH /auth -
Description: Renews an authentication token using the provided refresh token.
-
Response: Same structure as the authentication response.
2.3. De-authenticate account
-
Endpoint:
DELETE /auth -
Description: De-authenticates an active JWT token.
3. Create offer
-
Endpoint:
POST /offer -
Description: Obtains a quote from the insurer for the specified product.
3.1. Request
3.1.1. Input parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| provider | object | Yes | Contains insurer information. |
| provider.organization | object | Yes | Insurer’s data. |
| provider.organization.businessName | string | Yes | Insurer identifier (for Colonnade, use “colonnade”). |
| provider.authentication | object | Yes | Credentials to access the insurer’s web service. |
| provider.authentication.account | string | No | Account (provided by the OPERATOR). |
| provider.authentication.password | string | No | Password. |
| provider.authentication.code | string | No | Optional code. |
| product | object | Yes | Product object |
Product Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| solarPanel | object | Yes, if you want quotation for solarPanel | SolarPanel Object |
| gap | object | Yes, if you want quotation for solarPanel | GAP Object |
| policyholder | object | Yes | Person object |
| additionalData | object | - | Depends on the insurer |
Person object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| businessName | string | Yes if it is present in the request | Business name (if the person is a legal entity) | |
| companyRegistryNumber | string | Sometimes | Company registry number (if the person is a legal entity) | Mandatory for all products except SolarPanel and GAP |
| caenCode | number | No | CAEN code (if the person is legal entity) | |
| lastName | string | Yes if businessName field is not present | Individual person's last name | |
| firstName | string | Individual person's first name | ||
| taxId | string | Yes | • Personal identification code for natural persons • Tax identification number for non-natural persons | It must be a valid Romanian CNP if businessName field is not present and isForeignPerson is false (or it’s not present) |
| isForeignPerson | boolean | No | Indicates if person is foreign person | |
| nationality | string | Yes if isForeignPerson is true | Nationality | Accepted values: iso2 codes from /nomenclature/country nomenclature. No validation applied if legal entity. |
| citizenship | string | Citizenship | Accepted values: iso2 codes from /nomenclature/country nomenclature. No validation applied if legal entity. | |
| gender | string | Gender: • m => male • f => female | Accepted values: m, f No validation applied if legal entity. | |
| birthdate | string | Date of birth | • Accepted format: YYYY-MM-DD • The date must be in the past. • No validation applied if legal entity. | |
| email | string | Yes | Email address | It must be a valid email address. |
| mobileNumber | string | Yes | Mobile phone number | Exactly 10 digits (without prefix) |
| hasDisability | boolean | No | Cannot be set true if isRetired is set true or if is legal entity. | |
| isRetired | boolean | No | Cannot be set true if hasDisability is set true or if is legal entity. | |
| identification | object | Yes if businessName field is not present | Information's related to the identification document | Information required for individual |
| identification.idType | string | Yes if identification field is present | Type of the identification document | Only accepted value: CI |
| identification.idNumber | string | Yes if identification field is present | Series and number of the identification document | It must be a valid Romanian ID number |
| identification.issueAuthority | string | No | Issuer of the identification document | |
| identification.issueDate | string | No | Issuing date of the identification document | Accepted format: YYYY-MM-DD |
| drivingLicense | object | No | ||
| drivingLicense.issueDate | string | Yes, if drivingLicense field is present | Issues date for Driver License. | Accepted format: YYYY-MM-DD Value cannot be greater than current date. |
| address | Address object | Yes | Person’s home address |
Address object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| country | string | No | iso2 country code | Accepted values: iso2 codes from /nomenclature/country nomenclature |
| county | string | Yes | County code | Accepted values: any code from /nomenclature/county nomenclature |
| city | string | Yes | Locality name | Accepted values: any name from /nomenclature/locality/{cod_judet} nomenclature |
| cityCode | number | Yes | Locality code | Accepted values: any siruta code from /nomenclature/locality/{cod_judet} nomenclature |
| street | string | Yes | Street | |
| houseNumber | string | Yes | House number | |
| building | string | No | Building | |
| staircase | string | No | Staircase | |
| apartment | string | No | Apartment | |
| floor | string | No | Floor | |
| postcode | string | No | Postcode |
Vehicle object
The product object must include only one of the following mutually exclusive sub-objects:
- solarPanel Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| startDate | string | Yes | Effective start date of the policy (format: YYYY-MM-DD). |
| termTime | integer | Yes | Policy validity period in months. |
| solarPanelItems | array | Yes | Array of solar panel items (see table below). |
solarPanelItem Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| category | string | Yes | Category (e.g., Photovoltaic/Solar/Heat Pump). |
| brand | string | Yes | Brand of the solar panel item (e.g., Tier-1 Canadian Solar 405W). |
| power | string | Yes | Power rating (e.g., “3”). |
| type | string | Yes | Type information (e.g., Single-phase, Supracharge, Three-phase). |
| count | integer | Yes | Number of items. |
| inverter | object | Yes | Inverter details. |
| smartMeter | object | Yes | Smart meter details. |
| installationDate | string | Yes | Installation date (format: YYYY-MM-DD). |
| address | object | Yes | Address information for installation (refer to Address section for details). |
Inverter Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| brand | string | Yes | Ex: Huawei SUN2000-3/5/6/8/10KTL |
smartMeter Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| brand | string | Yes | Ex: Smart meter Huawei |
- GAP Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| startDate | string | Yes | Effective start date (format: YYYY-MM-DD). |
| termTime | integer | Yes | Policy validity period in months. |
| vehicle | object | Yes | Object containing complete vehicle details (see table below). |
Vehicle Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| licensePlate | string | Yes | Vehicle license plate. Format and rules vary depending on registration type. |
| registrationType | string | Yes | Registration type (e.g., registered, recorded, temporaryRegistered, temporaryRecorded). |
| vin | string | Yes | Vehicle Identification Number (5–17 characters; excludes O, I, and Q if year > 1981). |
| vehicleType | string | Yes | Vehicle type (e.g., M1, M1G, etc.). |
| brand | string | Yes | Vehicle brand (e.g., Suzuki). |
| model | string | Yes | Vehicle model (e.g., Vitara). |
| yearOfConstruction | integer | Yes | Production year of the vehicle. |
| totalWeight | integer | Yes | Gross vehicle weight. |
| seats | integer | Yes | Number of seats. |
| usageType | string | Yes | Only vehicle usage type accepted is “personal” as of 30.05.2025 |
| address | object | Yes | Address information for the vehicle (refer to Address section for details). |
- HouseAssistance Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| startDate | string | Yes | Effective start date (format: YYYY-MM-DD). |
| termTime | integer | Yes | Policy validity period in months. |
| builtArea | integer | Yes | Total constructed area of the property, including walls, balconies, and other built-up spaces, measured in square meters (or relevant unit). |
| usableArea | integer | Yes | Net usable area of the property, excluding walls and shared/common areas — only spaces that can be practically used, measured in square meters (or relevant unit). |
| address | object | Yes | Address information for the house (refer to Address section for details). |
- Tire object
| Parameter | Type | Required | Description | Validation |
|---|---|---|---|---|
| startDate | string | Yes | Effective start date of the Tire cover. | Format YYYY-MM-DD. Must be ≥ today ≤ 60 days in the future |
| termTime | integer | Yes | Policy validity period in months. | Must be 12 or 24 |
| purchaseDate | string | Yes | Date the tires were purchased. | Format YYYY-MM-DD. Must be ≤ today and ≥ 30 days ago. |
| purchasePrice | number | Yes | Purchase price of the set of tires, in RON. | Numeric > 0 and ≤ 8000. |
| vehicleBrand | string | Yes | Vehicle brand on which the tires are mounted. | Name value from Nomenclature: /nomenclature/vehicle-brand |
| vehicleModel | string | Yes | Vehicle model on which the tires are mounted. | Name value from Nomenclature: /nomenclature/vehicle-model/{vehicleBrandId} |
| tireMake | string | Yes | Manufacturer of the tires. | Code value from Nomenclature:/nomenclature/tire-brand As of 01.08.2025 the only accepted value is “michelin” |
| tireModel | string | Yes | Model name of the tire. | Name value from Nomenclature: /nomenclature/vehicle-model/{tireMakeCode} |
| tireWidth | integer | Yes | Wheel rim diameter in inches. | Size value from Nomenclature: /nomenclature/tire-size |
| dot | string | Yes | DOT (Department of Transportation) code of the tire. | Exactly 4 digits, representing week and year (e.g. 3719). |
- DigitalProtection object
| Parameter | Type | Required | Description | Validation |
|---|---|---|---|---|
| startDate | string | Yes | Effective start date of the Digital protection cover. | Format YYYY-MM-DD. Min: tomorrow Max: today + 60 |
| termTime | integer | Yes | Policy validity period in months. | Must be 12 |
- BusinessCyberProtection object
| Parameter | Type | Required | Description | Validation |
|---|---|---|---|---|
| startDate | string | Yes | Effective start date of the Business Cyber Protection cover. | Format YYYY-MM-DD. Min: tomorrow Max: today + 60 |
| termTime | integer | Yes | Policy validity period in months. | Must be 12 |
| installmentCount | integer | No | Number of payment installments | Must be between 1 and 4 |
| website | string | Yes | Business website URL | Must be a valid URL |
| turnover | string | Yes | Annual business turnover | Enum: "less_than_100k","less_than_500k","less_than_1m" |
| numberOfEmployees | integer | Yes | Number of employees | Min: 1 Max: 100 |
| numberOfComputers | integer | Yes | Total computers in business | Min: 1 Max: 25 |
| numberOfInsuredComputers | integer | Yes | Number of computers to insure | Min: 1 Max: 25 |
| numberOfServers | integer | Yes | Total servers in business | Min: 0 Max: 100 |
| numberOfInsuredServers | integer | Yes | Number of servers to insure | Min: 0 Max: 100 |
| hasFirewall | boolean | Yes | Business has a firewall | |
| hasAntivirus | boolean | Yes | Business has antivirus software | |
| wantsEndpointSoftware | boolean | Yes | Wants endpoint protection software | |
| wantsEdrForComputers | boolean | Yes | Wants EDR for computers | |
| wantsEdrForServers | boolean | Yes | Wants EDR for servers | |
| insuredAmount | integer | Yes | Amount to insure in EURO | Min: 5000 Max: 100000 |
- ExtendedWarranty Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| startDate | string | Yes | Effective start date (format: YYYY-MM-DD). |
| termTime | integer | Yes | Policy validity period in months. |
| vehicle | object | Yes | Object containing complete vehicle details (see table below). |
Vehicle Object
| Parameter | Type | Required | Description |
|---|---|---|---|
| licensePlate | string | Yes | Vehicle license plate. Format and rules vary depending on registration type. |
| registrationType | string | Yes | Registration type (only registered). |
| vin | string | Yes | Vehicle Identification Number (5–17 characters; excludes O, I, and Q if year > 1981). |
| vehicleType | string | Yes | Vehicle type (only M1). |
| brand | string | Yes | Vehicle brand VAG only (e.g., Volkswagen). |
| model | string | Yes | Vehicle model (e.g., Golf). |
| enginePower | integer | Yes | Vehicle engine power. |
| currentMileage | integer | Yes | Vehicle current mileage. |
| usageType | string | Yes | Only vehicle usage type accepted is “personal” as of 30.05.2025 |
| isFirstOwner | boolean | Yes | Whether it is the first owner of the vehicle. |
| yearOfConstruction | string | Yes | Production year of the vehicle. |
| firstRegistration | string | Yes | Vehicle first registration date. |
| deliveryDate | string | No | Vehicle delivery date. |
Note: Only one sub-object (either solarPanel or gap for Colonnade, houseAssistance for Pointer, tire for Michelin or either digitalProtection or businessCyberProtection for Levins) should be included in a valid offer request. The system automatically determines the product type based on which key is present in the JSON payload.
3.1.2. Validation rules
Refer to the JSON schema for detailed validation rules (e.g., date formats, acceptable values for registration types, etc.).
Note: Validation messages are in English by default. To change them to Romanian, include the header parameter Content-Language: ro.
3.2. Response
A successful response returns an Offer object in the data field with the following key properties:
| Parameter | Type | Description |
|---|---|---|
| offerId | number | Unique identifier of the offer (used for policy transformation). |
| providerOfferCode | string | Unique identifier generated by the insurer. |
| premiumAmount | number | Premium amount (gross). |
| premiumAmountNet | number | Premium net amount. |
| currency | string | Currency of the offer. |
| startDate | string | Policy start date. |
| endDate | string | Policy end date. |
| referenceRate | number | Offer reference rate. |
| bonusMalusClass | string | Bonus-malus class used for premium calculation. |
| commissionValue | number | Commission value for the broker. |
| commissionPercent | number | Commission percentage. |
| greenCardExclusions | string | List of countries where the policy will not be applied. |
| notes | string | Additional notes. |
| offerExpiryDate | string | Expiry date of the offer (format: Y-m-d). |
| directCompensation | object | If applicable, details for direct compensation (providerOfferCode, premiumAmount, commissionValue, commissionPercent). |
| installments | object | Payment installment details (if applicable). |
| pid | string | PID file URL (if configured). |
| toc | string | Terms and Conditions file URL (if configured). |
4. Transform offer to policy
-
Endpoint:
POST /policy -
Description: Transforms an offer into a policy using the provided offer identifier.
4.1. Request
| Parameter | Type | Required | Description |
|---|---|---|---|
| offerId | number | Yes | Unique identifier of the offer (obtained from the offer response). |
| payment | object | Yes | Payment details (see Payment object table below). |
| additionalData | object | No | Additional data as required by the product. |
Payment object:
| Parameter | Type | Required | Description |
|---|---|---|---|
| method | string | Yes | Payment method. Accepted values: pos, receipt, broker receipt and broker payment order. |
| currency | string | Yes | Payment currency (only RON is accepted at the moment). |
| amount | number | Yes | Payment amount in RON. |
| date | string | Yes | Payment date (format: YYYY-MM-DD). |
| documentNumber | string | Yes | Payment proof document details. |
4.2. Response
The response returns a Policy object in the data field with the following key properties:
| Parameter | Type | Description |
|---|---|---|
| policies | array | Array of Policy objects. |
Each Policy object includes:
| Parameter | Type | Description |
|---|---|---|
| policyId | number | Unique identifier of the issued policy. |
| series | string | Policy series. |
| number | number | Policy number. |
| payment | object | Payment details (see ResponsePayment object table). |
| startDate | string | Policy start date. |
| endDate | string | Policy end date. |
| premiumAmount | number | Value of the policy. |
| currency | string | Policy currency. |
| installments | object | Installment details (if applicable). |
ResponsePayment object:
| Parameter | Type | Description |
|---|---|---|
| method | string | Payment method as sent to the insurer. |
| currency | string | Currency used for payment. |
| amount | number | Amount paid. |
| date | string | Payment date. |
| documentNumber | string | Payment proof document details. |
5. Documents
5.1. Offer
-
Endpoint:
GET /offer/\{offerId\} -
Description: Downloads the offer in PDF format.
-
Note: The downloaded PDFs will include the following documents:
-
offer
-
dnt
-
pre-contract
-
gdpr
-
terms-and-conditions
5.2.1 Policy
-
Endpoint:
GET /policy/\{policyId\} -
Description: Downloads the policy in PDF format.
5.2.2 By policy series and number
Endpoint: GET /policy?series={series}&number={number}
You will need to provide the series and number received in the response of transform offer into policy call to access the download feature.
6. Product-specific parameters
For the Assets API, additional product-specific parameters are required for the insurer Colonnade and Pointer.
6.1. Colonnade
SolarPanel Validations:
| Parameter | Type | Required | Description |
|---|---|---|---|
| product.solarPanel.solarPanelItems.*.installationDate | string | Yes | Max 2 years in the past |
| product.solarPanel.termTime | number | Yes | By =<> It strictly mean comparing whether installationDate (which is a date) is less than, greater than, or equal to the specified number of years.• If installationDate = 2 years, then the policy can be issued for 1 to 4 years.• If installationDate = 1 year, then the policy can be issued for 1 to 5 years.• If installationDate < 1 year, then the policy can be issued for 1 to 6 years.The value must be provided in months, not years. Please convert the selected number of years by multiplying it by 12 before sending (e.g., 2 years → 24 months). |
GAP Validations:
| Parameter | Type | Required | Description |
|---|---|---|---|
| product.gap.termTime | number | Yes | Must be 12 |
For both the solarPanel and gap products, the following additional data is mandatory:
AdditionalData for Colonnade – SolarPanel
| Parameter | Type | Required | Description |
|---|---|---|---|
| purchasePrice | number | Yes | Purchase price in RON. Must not exceed 150000. |
AdditionalData for Colonnade – General
| Parameter | Type | Required | Description |
|---|---|---|---|
| agreements | object | Yes | Object containing mandatory agreement flags. |
agreements Object Structure
| Parameter | Type | Required | Description |
|---|---|---|---|
| gdpr | boolean | Yes | Must be true. |
| consultation | boolean | Yes | Must be true. |
| dnt | boolean | Yes | Must be true. |
If the policyholder is a legal entity, the following field is also mandatory:
| Parameter | Type | Required | Description |
|---|---|---|---|
| policyholder.hasRelationsWithRussiaOrBelarus | boolean | Yes, if policyholder is PJ | Must be false. Indicates that the policyholder has NO relations with Russia or Belarus. |
6.2. Pointer
For houseAssistance product, the following additional data is mandatory:
AdditionalData for Pointer – HouseAssitance
| Parameter | Type | Required | Description |
|---|---|---|---|
| packageCodes | array | No | A list of selected package codes for which offers will be generated. |
6.3. Michelin
For tire product, the following additional data is mandatory:
| Parameter | Type | Required | Description |
|---|---|---|---|
| agreements | object | Yes | Object containing mandatory agreement flags. |
agreements Object Structure
| Parameter | Type | Required | Description |
|---|---|---|---|
| purchased4Tires | boolean | Yes | Must be true. |
| michelinDataAgreement | boolean | No | |
| customerAgreement | boolean | Yes | Must be true. |
| marketingConsent | boolean | No |
6.4. LevIns
6.4.1. LevIns - DigitalProtection
This product is strictly for individual customers only, the policyholder must be an individual person.
6.4.2. LevIns - BusinessCyberProtection
This product is strictly for business customers only, the policyholder must be a business.
6.5. Porsche
The Extended Warranty product offers additional protection for vehicles beyond the standard manufacturer warranty. Eligible vehicles must be registered, have a maximum mileage (180.000km), and meet specific criteria such as brand (Volkswagen, Audi, Seat, Skoda, Cupra, Bentley, Lamborghini, Bugatti, Porsche), usage type (personal), and a maximum age (year of construction within the last 7 years).