Implementation manual for client communication with the web service.
| Version | Date | Description |
|---|---|---|
| 1.0.0 | 2023-07-14 | Initial version |
The credentials used in the testing environment are not functional in the production environment.
1.1 Implemented products
| Insurer | Identifier |
|---|---|
| Omniasig | insurer:omniasigproduct: general, professional, other |
1.2 Workflow
Creating policy:
-
Authentication Obtain a JWT token using credentials provided by OPERATOR
-
Create offer the response includes the [offerID] – this id will be needed in the following requests
-
Transform offer to policy use [offerID] from the offer step for policy to get the policy data
-
Download documents use [offerID] from the offer step to get offer documents, and [policyID] from the transform policy step to get policy documents
1. 3 Response types
The main structure of response is:
| Parameter | Description |
|---|---|
| error | This indicates the type of response: false indicates success, and true indicates an error. |
| status | HTTP status |
| data | Data related to the response / Additional data regarding the response. |
| message | Error message |
The structure of the responses can be divided into two major categories: successful response and error response.
Success
| Parameter | Description |
|---|---|
| error | false |
| status | 200 |
| data | (object) |
Error
| Parameter | Description |
|---|---|
| error | true |
| status | 400 - 500 |
| message | Error message |
| data | (optional) Additional data |
2. Authentication
2.1 Authenticate account
Endpoint: POST /auth
This method is used to authenticate an account by account and password (provided by OPERATOR).
If the authentication was successful. The response will include a JSON object with the following properties:
-
error: A boolean indicating if an error occurred during the request. In this case, it will be
false. -
status: An integer representing the status code of the response. In this case, it will be
200. -
data: A JSON object containing the following properties:
-
token: A string representing the JWT token generated by the server for the authenticated user.
-
expires_at: A string representing the date and time when the JWT token will expire in the format "YYYY-MM-DD HH:MM:SS".
-
refresh_token: A string representing the refresh token generated by the server for the authenticated user.
2.2 Renew token
Endpoint: PATCH /auth
This method is used to renew an authentication token based on the refresh token.
If the token has been successfully renewed, the generated response will have the same structure as the authentication response.
2.3 De-authenticate account
Endpoint: DELETE /auth
This method is used to deauthenticate an existing and valid auth token.
3. Create offer
Endpoint**:** POST /offer
3.1 Request
3.1.1. Input parameters
a. Main object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| provider | object | Yes | Information related to the insurer | |
| provider.organization | object | Yes | Insurer’s data | |
| provider.organization.businessName | string | Yes | Insurer identifier (see 1.1. → Identifiers) | |
| provider.authentication | object | Yes | Credentials to access insurer’s web service | |
| provider.authentication.account | string | Yes | Account | In DEV / QA environment these fields can be sent empty to use default test credentials |
| provider.authentication.password | string | Yes | Password | |
| provider.authentication.code | string | Yes | Code | |
| product | object | Yes | Information related to the product | |
| product.name | string | Yes | Product identifier (see 1.1. → Identifiers) | |
| product.currency | string | Yes | Currency | Accepted values: EUR, RON |
| product.liability | Liability object | Yes | Information related to the product | |
| product.customer | Person object | No | Contractor’s data | If not set the policyholder’s information will be used by default |
| product.policyholder | Person object | Yes | Policyholder’s data | |
| product.additionalData | object | No (depending on the product) | Product related additional information | Must be completed according to the Product specific parameters section |
| product.additionalData.rafCode | string | No | Offering agents RAF code | Format validation: RAF1234567891 Starts with RAF followed by at most 10 digits |
b. Liability object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| type | string | Yes | Type of the liability policy | If set the value has to be one of the following [malpraxis, pharma, veterinary, lawyers, notaries, counselors, executors, insolvency, tax-consultant, personal, hunters, estate-admin] |
| startDate | string | Yes | Start date of the policy | • Accepted format: YYYY-MM-DD • The date must be in the future. |
| termTime | number | Yes | Duration of the policy in months | Integer value between 1 and 12 |
| installmentCount | number | No | Number of installments for payment | If set the value has to be one of the following [1, 2, 4, 12] Note: in some cases the accepted values might change depending on the insurer |
| notes | string | No | Any additional observations regarding the policy | |
| renewPolicy | object | No | Object used in case of renewal of an existing policy | |
| renewPolicy.series | string | Yes, if renewPolicy.number is set | ||
| renewPolicy.number | number | Yes, if renewPolicy.series is set | ||
| additionalInsureds | object | No | Object used to set number of additional insured | |
| additionalInsureds.children | number | No | Number of additional children added to the policy | • Numeric value • Minimum value 0Note: if not set default value is 0 |
| additionalInsureds.residents | number | No | Number of additional residents added to the policy | |
| deductible | object | No | Object used to set policy deductible information | Note: if not set default value for percent is 0 and type is no-deductible |
| deductible.percent | number | No | Percent value | • Numeric value • Minimum value 0 |
| deductible.type | string | No | Type of deductible | Value has to be one of the following [undefined, no-deductible, per-event, of-loss] |
| allowance | object | No | Object used to set “Bonificatie” | |
| allowance.value | number | No | Percent value | • Numeric value • Value between [-99, 99] |
| territory | object | No | Object used to set policy coverage location | |
| territory.coversWorldWide | boolean | No | Coverage for world wide | Note: default value false |
| territory.coversRomania | boolean | No | Coverage for Romania | |
| coverage | Coverage object | Yes | ||
| conditions | Condition Object | Yes | ||
| intermediaryEmail | string | No | Intermediary Email | • valid email address |
c. Person object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| businessName | string | Yes, if it is present in request | Business name (if the person is a legal entity) | |
| companyRegistryNumber | string | Yes, if businessName field is present | Company registration number (if the person is a legal entity) | |
| caenCode | number | Company CAEN number | ||
| 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 |
| citizenship | string | Citizenship | Accepted values: iso2 codes from /nomenclature/country nomenclature | |
| gender | string | Gender: • m => male • f => female | Accepted values: m, f | |
| birthdate | string | Date of birth | • Accepted format: YYYY-MM-DD • The date must be in the past. | |
| email | string | No | Email address | It must be a valid email address. |
| mobileNumber | string | No | Mobile phone number | It must be a valid mobile number address. |
| identification | Identification object | Yes, if businessName field is not present | Information related to the identification document | |
| address | Address object | Yes | Person’s home address |
d. Identification object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| idType | string | Yes | Type of the identification document | Accepted values: CI, PASSPORT |
| idNumber | string | Yes | Series and number of the identification document | If idType = CI it must be a valid romanian identification number, accepted format of 2 letters and 6-7 digits |
| issueAuthority | string | Yes | Issuer of the identification document | |
| issueDate | string | Yes | Issuing date of the identification document | • date before now() +1 day • accepted format: YYYY-MM-DD |
e. 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/{county} nomenclature |
| cityCode | number | Yes | Locality code | Accepted values: any siruta code from /nomenclature/locality/{county} 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 | number | No | Postcode |
f. Coverage object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| auxiliaryStaff | object | No | ||
| auxiliaryStaff.isIncluded | boolean | Yes, if auxiliaryStaff is present | ||
| eScooter | object | No | ||
| eScooter.isIncluded | boolean | Yes, if eScooter is present | ||
| eScooter.value | number | Yes, if eScooter.isIncluded is true | • Numeric value • Minimum value 1 | |
| extendedReportingPeriod | object | No | ||
| extendedReportingPeriod.isIncluded | boolean | Yes, if extendedReportingPeriod.isIncluded is present | ||
| extendedReportingPeriod.value | number | Yes, if extendedReportingPeriod.isIncluded.isIncluded is true | Percent value | • Numeric value • Minimum value 1 |
| moralClaims | object | No | ||
| moralClaims.isIncluded | boolean | Yes, if moralClaims is present | ||
| moralClaims.value | number | Yes, if moralClaims.isIncluded is true | Percent value | • Numeric value • Minimum value 1 |
| feesCompensation | object | No | ||
| feesCompensation.isIncluded | boolean | Yes, if feesCompensation is present | ||
| feesCompensation.value | number | Yes, if feesCompensation.isIncluded is true | • Numeric value • Minimum value 1 | |
| perEvent | object | No | ||
| perEvent.isIncluded | boolean | Yes, if perEvent is present | ||
| perEvent.value | number | Yes, if perEvent.isIncluded is true | • Numeric value • Minimum value 1 | |
| policyLimit | object | No | ||
| policyLimit.isIncluded | boolean | Yes, if policyLimit is present | ||
| policyLimit.value | number | Yes, if policyLimit.isIncluded is true | • Numeric value • Minimum value 1 |
g. Conditions object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| locationCount | object | No | ||
| locationCount.isIncluded | boolean | Yes, if locationCount is present | ||
| locationCount.value | number | Yes, if locationCount.isIncluded is true | • Numeric value • Minimum value 1 | |
| claimsWithin3Years | object | No | ||
| claimsWithin3Years.isIncluded | boolean | Yes, if claimsWithin3Years is present | ||
| lossHistoryWithin5Years | object | No | ||
| lossHistoryWithin5Years.isIncluded | boolean | Yes, if lossHistoryWithin5Years is present | ||
| turnover | object | No | ||
| turnover.isIncluded | boolean | Yes, if turnover is present | ||
| turnover.value | number | Yes, if turnover.isIncluded is true | • Numeric value • Minimum value 1 |
3.1.2 Business rules
product.customer(if present) andproduct.policyholderhave to be adultse
3.2 Response
The object structure returned in the data field is described in this section.
Response data object
| Parameter | Type | Description |
|---|---|---|
| provider | object | |
| provider.organization | object | |
| provider.organization.businessName | string | Insurer identifier |
| product | object | |
| product.name | string | Product identifier |
| offers | array of Offer object | A list of generated offers, which can include offers generated successfully |
Offer object
| Parameter | Type | Description |
|---|---|---|
| offerId | number | • Unique identifier of the offer • Use this to transform the offer into a policy |
| providerOfferCode | string | Unique identifier of the offer generated by the insurer |
| premiumAmount | number | Premium amount defined in the currency returned in currency field |
| currency | string | Currency |
| exhangeRate | object | |
| exhangeRate.currency | string | |
| exhangeRate.amount | number | |
| exhangeRate.exhangeRate | number | |
| startDate | string | The start date of the policy |
| endDate | string | The end date of the policy |
| installments | object | |
| installments.id | number | Number of the installment |
| installments.amount | number | Premium amount of the installment |
| installments.dueDate | string | The due date of the payment |
| notes | string | Additional information from the insurer |
| offerExpiryDate | string | The date till the offer is valid |
4. Transform offer to policy
Endpoint: POST /policy
4.1 Request
4.1.1 Input parameters
Request data object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| offerId | number | Yes | Unique identifier f the offer that will be transformed to a policy | Offer has to exist |
| payment | Payment object | Yes | Payment information | |
| additionalData | object | No (depending on the product) | Product related additional information | Must be completed according to the Product specific parameters section |
Payment object
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| method | string | Yes | Payment methodNote: not all products will accept every option | Accepted values: receipt, broker receipt, payment order, broker payment order, pos |
| currency | string | Yes | Payment currency | At the moment only RON is accepted |
| amount | number | Yes | The payment amount in the selected currency | |
| date | string | Yes | Payment date | Accepted format: YYYY-MM-DD |
| documentNumber | string | Yes | Payment proof document details | Format: has to start with at least one character followed by digits |
4.2 Response
The object structure returned in the data field is described in this section.
Response data object
| Parameter | Type | Description |
|---|---|---|
| policies | array of Policy object | A list of issued policies, which can include policies successfully and/or with errors. |
Policy object
Structure might change
| Parameter | Type | Description |
|---|---|---|
| provider | object | |
| provider.organization | object | |
| provider.organization.businessName | string | Insurer identifier |
| policyId | number | Unique identifier of the issued policy |
| series | string | Policy series |
| number | number | Policy number |
| startDate | string | Policy start date |
| endDate | string | Policy end date |
| premiumAmount | number | Value of the policy |
| currency | string | Policy value currency |
| installments | object | |
| installments.id | number | Number of the installment |
| installments.amount | number | Premium amount of the installment |
| installments.dueDate | date | Format:Y-m-d |
5. Documents
5.1 Offer
Endpoint: GET /offer/{OfferID}
This API endpoint enables users to download the offer in PDF format. You will need to provide the OfferID received from the offer request call to access the download feature.
5.2 Policy
This API endpoint enables users to download the policy in PDF format.
5.2.1 By policy identifier
Endpoint: GET /policy/{PolicyID}
You will need to provide the policyId received from the offer transform request call to access the download feature.
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.
5.3 Insurer receipt
Endpoint: GET /policy/{PolicyId}/insurer-receipt
This API endpoint enables users to download the policy receipt in PDF format. You will need to provide the PolicyID received from the offer transform request call to access the download feature.
Implemented products for this endpoint:
6. Product-specific parameters
This section of the implementation manual outlines the specifications for the additionalData object, which forms part of the request for bidding and transformation of offers into policies.
The section also describes specific validation rules for each product.
6.1 Omniasig
Business rules:
-
At offering the following currencies are accepted for
product.currency[RON, EUR,USD, CHF] -
The
product.liability.termTimefield can have one of the following values [3, 6, 9, 12] -
The
product.liability.deductible.percentvalue has the following restrictions depending on theproduct.liability.deductible.type: -
per-eventvalues from0.3, 0.5, 1, 1.5, 2 -
of-lossvalues from3, 5, 7, 10, 15 -
undefinedorno-deductiblevalue has to be0 -
The
product.liability.coverage.moralClaims.valueandproduct.liability.coverage.feesCompensation.valuecan have the following percentage values[5, 10, 15, 20, 25, 30] -
The
product.liability.coverage.policyLimit.valueminimum value is1ifproduct.liability.coverage.perEvent.valuedoes not exist otherwise the minimum value isproduct.liability.coverage.perEvent.value -
product.policyholder.companyRegistryNumberandproduct.customer.companyRegistryNumberis not required -
product.customer.isForeignPersonandproduct.policyholder.isForeignPersonhas to be set tofalse, SAS working on development
6.1.1 General Liability Package
Business rules:
-
product.nameis set togeneral -
product.liability.typecan have the following values ifproduct.policyholderis a regular entity[hunters, estate-admin, personal]otherwise onlyestate-admin
6.1.1.1 Offer
Business rules:
-
product.liability.coverage.perEvent.valueforproduct.currencyEURCHFthe value has to be between[5000, 1000000] -
product.liability.coverage.perEvent.valueforproduct.currencyRON the value has to be between[24834.50, 4966900]
No additional data is required.
6.1.1.2 Transform offer to policy
No additional data is required.
Business rules:
payment.documentNumberis not required
6.1.2 Professional Liability Package
Business rules:
-
product.nameis set toprofessional -
product.liability.typecan have the following values ifproduct.policyholderis a regular entity[malpraxis, pharma, veterinary, lawyers, notaries, counselors, executors, insolvency, tax-consultant]otherwise[lawyers, notaries, counselors, executors, insolvency, tax-consultant] -
product.liability.conditions.turnover.isIncludedhas to be set totruewhenproduct.liability.typeis one of[lawyers, executors, insolvency, tax-consultant]otherwisefalse -
product.liability.coverage.perEvent.valueforproduct.currencyEURCHFthe value has to be between[10000, 5000000] -
product.liability.coverage.perEvent.valueforproduct.currencyRON the value has to be between[14900.70, 24834500] -
product.additionalData.product.conditions.professionalCategoryis a mandatory field ifproduct.liability.typeis one of[malpraxis, pharma, veterinary, lawyers]
6.1.2.1 Offer
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| product.retroactivePeriod | numeric | No | Value in months | Accepted value from [12, 24, 36] |
| product.conditions | object | No | ||
| product.conditions.activityType | string | No | Accepted value from [accounting, tax-advisory, audit] | |
| product.conditions.consultantsType | array of string | No | Accepted value from [accountant, expert-accountant, tax-consultant, auditor] | |
| product.conditions.professionalCategory | string | Yes, if product.liability.type is one of [malpraxis, pharma, veterinary, lawyers] | Accepted value from [medical-specialties, surgical-specialties, paraclinical-specialties, general-practitioner, biochemist, biologist, dental-specialties, medical-assistants, midwives, pharmacists, pharmacy-assistants, physicians, medical-staff, intern, permanent] | |
| product.conditions.professionalSpeciality | string | Yes, if product.conditions.professionalCategory is set | Accepted value from [allergology-and-clinical-immunology, anesthesia-and-intensive-care, infectious-diseases, cardiology, dermatology-and-venereology, diabetes-nutrition-and-metabolic-diseases, endocrinology, medical-assessment-of-work-capacity, clinical-pharmacology, gastroenterology, medical-genetics, geriatrics-and-gerontology, hematology, emergency-medicine, internal-medicine, occupational-medicine, sports-medicine, nephrology, pediatric-neurology, medical-oncology, pediatrics, pneumology, psychiatry, pediatric-psychiatry, radiation-oncology, rehabilitation-physical-medicine-and-balneology, rheumatology, cardiac-and-major-vessel-surgery, general-surgery, oral-and-maxillofacial-surgery, pediatric-surgery, plastic-and-reconstructive-microsurgery, aesthetic-surgery, thoracic-surgery, vascular-surgery, neurosurgery, obstetrics-and-gynecology, ophthalmology, pediatric-orthopedics, orthopedics-and-traumatology, otorhinolaryngology-(ent), urology, pathological-anatomy, epidemiology, hygiene, laboratory-medicine, forensic-medicine, nuclear-medicine, radiology-and-medical-imaging, public-health-and-management, family-medicine, general-medicine, biochemists, biologists, dentists, orthodontics-and-dentofacial-orthopedics-specialists, dentoalveolar-surgery-specialist, dental-technicians, from-inpatient-healthcare-facilities, from-primary-care-outpatient-clinics-individual-medical-practices, pharmacists-working-in-closed/open-circuit-pharmacies, pharmacy-assistants, veterinary-medicine, from-veterinary-medicine-units, all-specialties, neurology, neonatology] |
6.1.2.2 Transform offer to policy
No additional data is required.
Business rules:
payment.documentNumberis not required
6.1.3 Other Liability Package
Business rules:
-
product.nameis set toother5.2 Policy -
product.liability.typecan have the following values ifproduct.policyholderis a regular entity[hunters, estate-admin, personal]otherwise onlyestate-admin -
product.liability.coverage.perEvent.valueforproduct.currencyEURCHFthe value has to be between[3000, 300000] -
product.liability.coverage.perEvent.valueforproduct.currencyRON the value has to be between[14900.70, 1490070] -
product.liability.conditions.turnover.isIncludedhas to be set tofalse -
product.liability.additionalInsureds.residentsandproduct.liability.additionalInsureds.childrenhave to be set to0if they exist in the request
6.1.3.1 Offer
| Parameter | Type | Required | Description | Validation rules |
|---|---|---|---|---|
| product.conditions.accountingDeskActivities | boolean | Yes, if product.conditions.adminTechnicalActivities is false | If product.policyholder performs any accounting or desk activities | Note: default value false At least on of the fields has to be set to true. |
| product.conditions.adminTechnicalActivities | boolean | Yes, if accountingDeskActivities if false | If product.policyholder performs any administration or technical activities |
6.1.3.2 Transform offer to policy
No additional data is required.
Business rules:
payment.documentNumberis not required