Car Insurance
Documentation of the API for car insurance integration with the Consumer Council's insurance service.
Request from the Consumer Council
When the Consumer Council sends a request to the insurance company, it will be in JSON format. This request contains information about the person to be insured, as well as details about the specific offer being requested. The request will be sent to the company's specified endpoint.
The information about the person to be insured is built based on data from the National Registry, the Norwegian Public Roads Administration, and OFV.
In the header, we send X-RequestId, which is unique, and X-ClientId, which will be finansportalen.
Where amount limits and values in the Financial Portal’s insurance calculator must be selected as options in the user interface, and the insurance company does not operate with the same limits in its pricing tariffs, the insurance company shall nevertheless return a price. The price shall be returned as the closest value in the customer’s favor, for example the nearest price at the next higher mileage.
If the company is not able to offer a value in favor of the consumer, for example because the requested value is at the end of the scale, it is acceptable to provide the nearest available value.
Example request
{
"id": "xtNczK2rUAh5lfz-i26iO",
"person": {
"pid": "10816797409",
"firstName": "FORETAKSOM",
"lastName": "KONGE",
"addresses": [
{
"source": "folkeregisteret",
"streetName": "Munkerekkveien 110",
"postalCode": "3142",
"postalLocation": "VESTSKOGEN"
}
],
"memberships": [
{
"membershipId": "821395476",
"membershipName": "Norske Arkitekters Landsforbund"
}
]
},
"offerRequest": [
{
"id": "iKiLHD0opex6UcUqxyL3j",
"type": "bil",
"data": {
"coverage": "kasko",
"addons": [
"leiebil",
"maskinskade"
],
"bonus": "75%",
"yearlyMileage": 12000,
"youngestDriver": 25,
"loan": false,
"currentMileage": 50000,
"currentAccidents": 1,
"lastAccidentDate": "2023-02-05",
"deductible": 6000,
"carOwner": {
"ownerType": "otherOwner",
"leasingCompanyOrg": null,
"otherOwner": {
"pid": "09916795316",
"firstName": "FJÅNG",
"lastName": "REGEL"
}
},
"car": {
"source": "ofv",
"registrationDate": "2022-01-01",
"variantId": 385869,
"modelYear": 2022,
"brandName": "Audi",
"brandCode": 1230,
"modelName": "A4",
"modelCode": 9,
"variantName": "Avant Advanced 35 TFSi 150hk",
"variantCode": 21193,
"vehicleGroup": "Personbil",
"structureNo": "1230009211932022026",
"modelGeneration": "5B",
"modelSplitName": null,
"segment": "Mellomklassen",
"chassisShortName": "STV",
"chassis": "Stasjonsvogn",
"transmissionShortName": "AUT",
"transmission": "Automat",
"energySourceShortName": "BE",
"energySource": "Bensin Hybrid",
"totalEngines": 2,
"emissionStandard": "Euro 6",
"importPrice": 495100,
"currencyCode": "NOK",
"approved": "2022-01-07T16:56:42+01:00",
"transferred": "2022-12-12"
}
}
}
],
"requestAt": "2026-03-25T08:50:50+01:00"
}
Request field descriptions
Root-level fields
| Field | Type | Description | Values |
|---|---|---|---|
id | string | The unique ID for the request, generated by the Consumer Council. | 21 characters, uniquely generated. Example: "xtNczK2rUAh5lfz-i26iO" |
requestAt | string | Time when the request was sent. | ISO 8601 (complete). Example: "2026-03-25T08:50:50+01:00" |
Person object
| Field | Type | Description | Values |
|---|---|---|---|
pid | string | The national identity number of the person to be insured. | 11-digit number as a string. Example: "10816797409" |
firstName | string | First name of the person to be insured. | Example: "FORETAKSOM" |
lastName | string | Last name of the person to be insured. | Example: "KONGE" |
addresses | array of address objects | Address information for the person to be insured. | Never contains more than 1 element for car insurance. See Address object |
memberships | array of membership objects | Information about memberships for the person to be insured. Can be an empty list. | See Membership object |
Address object
| Field | Type | Description | Values |
|---|---|---|---|
source | string | Source of the address. | "folkeregisteret" |
streetName | string | Street name. | Example: "Munkerekkveien 110" |
postalCode | string | Postal code. | 4-digit number as a string. |
postalLocation | string | Postal place. | Uppercase letters. Example: "VESTSKOGEN" |
Membership object
| Field | Type | Description | Values |
|---|---|---|---|
membershipId | string | Organization number of the membership provider. | 9 digits as a string. Example: "821395476" |
membershipName | string | Name of the organization providing the membership. | Example: "Norske Arkitekters Landsforbund" |
Offer request object
| Field | Type | Description | Values |
|---|---|---|---|
id | string | The unique ID for the offer request on this product. | 21 characters, uniquely generated. Example: "iKiLHD0opex6UcUqxyL3j" |
type | string | Product type. | "bil" |
data | object | Data for the offer. | See Offer data object |
Offer data object
| Field | Type | Description | Values |
|---|---|---|---|
coverage | string | Insurance coverage. | "ansvar""delkasko""kasko""utvidet" |
addons | array of strings | Additional coverages for the insurance. Can contain multiple values. Is an empty array when no additional coverage is selected. | Possible elements in array: "leiebil" "maskinskade" |
bonus | string | Insurance bonus. | "75% > 5 år""75% > 4 år""75% > 3 år""75% > 2 år""75%""70% > 5 år""70% > 4 år""70% > 3 år""70% > 2 år""70%""60%""50%""40%""30%""20%""10%""0%""startbonus""-10%""-20%""-30%""-40%" |
yearlyMileage | integer | Requested annual mileage in number of km. | From 5000 to 50000, or 0 for unlimited mileage. |
youngestDriver | integer | Age of the youngest driver in years. | From 18 to 25. When the youngest driver is older than 25, we still send 25 here. |
loan | boolean | Whether there is a loan on the car. | true false |
currentMileage | integer | Current odometer value. | From 0 to 999999. |
currentAccidents | integer | Number of accidents during the last three years. | From 0 to 4. If there are more than 4 accidents, we still send 4 here. |
lastAccidentDate | string, nullable | Date of the last accident within the last five years. | "yyyy-mm-dd" Example: "2024-10-16" |
deductible | integer | Requested deductible in NOK. Applies only for comprehensive or extended coverage. | 0 when coverage is "ansvar" or "delkasko". For higher coverage levels, value is from 4000 to 35000. |
Car owner object
| Field | Type | Description | Values |
|---|---|---|---|
ownerType | string | Owner type. | "sameAsPerson" "otherOwner" "leasing" |
leasingCompanyOrg | string, nullable | Organization number for leasing company. | Example: "123456789" |
otherOwner | object, nullable | Information about another owner. | See Other owner object |
Other owner object
This object is only included in the request when ownerType = "otherOwner".
| Field | Type | Description | Values |
|---|---|---|---|
pid | string | National identity number of another owner. | Example: "09916795316" |
firstName | string | First name of another owner. | Example: "ALICE" |
lastName | string | Last name of another owner. | Example: "WONDERLAND" |
Car object
Information about the car to be insured. All fields except source, regNumber, and registrationDate come directly from OFV Kjøretøydata.
Data with source "ofv" is not available for vehicles fetched from "tenor" in the test environment.
| Field | Type | Description | Values |
|---|---|---|---|
source | string | Source of car data. | "ofv" "tenor" (test environment only) |
regNumber | string, nullable | Registration number of the car. | Example: "AB12345" |
registrationDate | date | Date of first registration. | "yyyy-mm-dd" Example: "2023-01-01" |
structureNo | string | Unique structure number for the car. | Example: "4360005000112020000" |
variantId | integer | Variant ID for the car model. | Example: 419436 |
vehicleGroup | string | Vehicle group. | Example: "Personbil" |
modelYear | integer | Model year of the car. | Example: 2025 |
brandName | string | Brand name of the car. | Example: "Tesla" |
brandCode | integer | Brand code of the car. | Example: 4360 |
modelName | string | Model name of the car. | Example: "Model Y" |
modelCode | integer | Model code of the car. | Example: 5 |
modelGeneration | string | Model generation of the car. | Example: "1" |
modelSplitName | string, nullable | Additional model specification. | Example: "Sportwagon" |
variantName | string | Variant name for the car model. | Example: "Long Range AWD" |
variantCode | integer | Variant code for the car model. | Example: 11 |
segment | string | Segment the car belongs to. | Example: "SUV mellomklasse" |
chassisShortName | string | Chassis code for the car. | Example: "SUV" |
chassis | string | Chassis description for the car. | Example: "Sport Utility Vehicle" |
transmissionShortName | string | Gearbox code. | Example: "AUT" |
transmission | string | Gearbox type. | Example: "Automat" |
energySourceShortName | string | Energy source code. | Example: "E" |
energySource | string | Type of energy source (electricity, petrol, etc.). | Example: "Elektrisitet" |
totalEngines | integer | Number of engines. | Example: 2 |
emissionStandard | string | Emission class. | Example: "Euro 6" |
importPrice | integer | Import price of the car. | Example: 471587 |
currencyCode | string | Currency code for import price. | Example: "NOK" |
approved | string | Time of approval. | ISO 8601 (complete). Example: "2024-10-16T12:06:00Z" |
transferred | string, nullable | Time of transfer. | ISO 8601 (date only). Example: "2024-10-16" |
Request with multiple offers
If the request contains multiple offers, it looks like this. Here, an additional offer (offerRequest) has been added for each unique car:
{
"id": "5Cw2lTTdy8HZA9Z1RBcKb",
"person": {
"pid": "10816797409",
"firstName": "FORETAKSOM",
"lastName": "KONGE",
"addresses": [
{
"source": "folkeregisteret",
"streetName": "Munkerekkveien 110",
"postalCode": "3142",
"postalLocation": "VESTSKOGEN"
}
],
"memberships": [
{
"membershipId": "821395476",
"membershipName": "Norske Arkitekters Landsforbund"
}
]
},
"offerRequest": [
{
"id": "lmp5_fChNgDt6zbtE1HuQ",
"type": "bil",
"data": {
"coverage": "kasko",
"addons": ["leiebil"],
"bonus": "75%",
"yearlyMileage": 12000,
"youngestDriver": 25,
"loan": false,
"currentMileage": 50000,
"currentAccidents": 1,
"lastAccidentDate": "2023-02-05",
"deductible": 6000,
"carOwner": {
"ownerType": "otherOwner",
"leasingCompanyOrg": null,
"otherOwner": {
"pid": "09916795316",
"firstName": "FJÅNG",
"lastName": "REGEL"
}
},
"car": {
"source": "ofv",
"registrationDate": "2022-01-01",
"variantId": 385869,
"modelYear": 2022,
"brandName": "Audi",
"brandCode": 1230,
"modelName": "A4",
"modelCode": 9,
"variantName": "Avant Advanced 35 TFSi 150hk",
"variantCode": 21193,
"vehicleGroup": "Personbil",
"structureNo": "1230009211932022026",
"modelGeneration": "5B",
"modelSplitName": null,
"segment": "Mellomklassen",
"chassisShortName": "STV",
"chassis": "Stasjonsvogn",
"transmissionShortName": "AUT",
"transmission": "Automat",
"energySourceShortName": "BE",
"energySource": "Bensin Hybrid",
"totalEngines": 2,
"emissionStandard": "Euro 6",
"importPrice": 495100,
"currencyCode": "NOK",
"approved": "2022-01-07T16:56:42+01:00",
"transferred": "2022-12-12"
}
}
},
{
"id": "BV_bS5xXoceIl26zftqd5",
"type": "bil",
"data": {
"coverage": "utvidet",
"addons": [
"leiebil",
"maskinskade"
],
"bonus": "60%",
"yearlyMileage": 30000,
"youngestDriver": 25,
"loan": true,
"currentMileage": 35000,
"currentAccidents": 1,
"lastAccidentDate": "2023-02-05",
"deductible": 8000,
"carOwner": {
"ownerType": "sameAsPerson"
},
"car": {
"source": "ofv",
"registrationDate": "2013-01-01",
"variantId": 220765,
"modelYear": 2013,
"brandName": "Tesla",
"brandCode": 4360,
"modelName": "Model S",
"modelCode": 2,
"variantName": "60",
"variantCode": 1,
"vehicleGroup": "Personbil",
"structureNo": "4360002000012013002",
"modelGeneration": "1",
"modelSplitName": null,
"segment": "Luksusbiler",
"chassisShortName": "COM",
"chassis": "Kombikupé",
"transmissionShortName": "AUT",
"transmission": "Automat",
"energySourceShortName": "E",
"energySource": "Elektrisitet",
"totalEngines": 1,
"emissionStandard": "Euro 6",
"importPrice": 446500,
"currencyCode": "NOK",
"approved": "2013-10-16T14:35:25+02:00",
"transferred": "2014-02-14"
}
}
}
],
"requestAt": "2026-03-25T08:50:50+01:00"
}
Tenor test data request
In the test environment, requests may also include vehicles from Tenor's dataset. These do not include information from OFV's database:
{
"id": "BoZTghz7UJbJZ1mA28NnY",
"person": {
"pid": "10816797409",
"firstName": "FORETAKSOM",
"lastName": "KONGE",
"addresses": [
{
"source": "folkeregisteret",
"streetName": "Munkerekkveien 110",
"postalCode": "3142",
"postalLocation": "VESTSKOGEN"
}
],
"memberships": [
{
"membershipId": "821395476",
"membershipName": "Norske Arkitekters Landsforbund"
}
]
},
"offerRequest": [
{
"id": "x7-xjveF1WKuWXVXMyQ3G",
"type": "bil",
"data": {
"coverage": "utvidet",
"addons": [],
"bonus": "50%",
"yearlyMileage": 10000,
"youngestDriver": 25,
"loan": true,
"currentMileage": 15000,
"currentAccidents": 0,
"lastAccidentDate": null,
"deductible": 8000,
"carOwner": {
"ownerType": "sameAsPerson",
"leasingCompanyOrg": null,
"otherOwner": null
},
"car": {
"source": "tenor",
"regNumber": "CO10028"
}
}
}
],
"requestAt": "2026-03-25T08:50:50+01:00"
}
Possible values for the membership field (work in progress)
| membershipId | membershipName |
|---|---|
934469267 | Arkitektenes Fagforbund |
960472764 | Befalets Fellesorganisasjon |
948383268 | BOB |
936560288 | Coop |
970217215 | Delta |
970430911 | Den Norske Jordmorforening |
960474341 | Den Norske Legeforening |
870167962 | Den Norske Tannlegeforening |
979469241 | Den Norske Turistforening |
966251808 | Den Norske Veterinærforening |
980331105 | Finansforbundet |
926490842 | Flyt-kunde |
874250082 | Huseierne |
971526726 | Krigsskoleutdannede Offiserers Landsforening |
971480416 | Kriminalomsorgens Yrkesforbund |
964422206 | LOfavør |
970168451 | Naturviterne |
944383832 | Norges Automobil-Forbund |
939678670 | Norges Bondelag |
856331482 | Norges Ingeniør- og Teknologorganisasjon |
970204938 | Norges Offisers- og Spesialistforbund |
970167943 | Norsk Bonde- og Småbrukarlag |
971074345 | Norsk Jernbaneforbund |
879495512 | Norsk Lektorlag |
971056541 | Norsk Lokomotivførerforbund |
970168419 | Norsk Psykologforening |
960893506 | Norsk Sykepleierforbund |
971043059 | Norsk Tjenestemannslag |
974235307 | Norsk Tollerforbund |
844146302 | Norske Arkitekters Landsforbund |
937052766 | OBOS |
971480270 | Parat |
871278342 | Regnskap Norge |
980374068 | Revisorforeningen |
964812578 | SAFE |
971277270 | Samfunnsviterne |
970168621 | Samfunnsøkonomene |
970149406 | Skolelederforbundet |
971435712 | STAFO |
971420782 | Teknisk-naturvitenskapelig Forening |
884026172 | Utdanningsforbundet |
971436050 | Yrkestrafikkforbundet |
Response from the insurance company
This is a description of how the response from the insurance company should be structured. Examples have been included for what each field should contain.
All data fields in the response, including the ones that are nullable, are mandatory, except membershipApplied, which is optional.
If a response does not meet the required specifications, it will be discarded, and the offer will not be shown in the insurance service.
Companies are expected to respond within a reasonable time to the Consumer Council’s price requests. A normal response time is considered to be under 15 seconds. Companies that respond quickly may be displayed earlier in the portal.
Example response
The response is based on the first request example.
{
"id": "xtNczK2rUAh5lfz-i26iO",
"company": "Forsikringsselskap Ipsum AS",
"totalPrice": 15883,
"totalDiscount": 700,
"totalOriginalPrice": 16583,
"products": [
{
"id": "iKiLHD0opex6UcUqxyL3j",
"type": "bil",
"productName": "Bilforsikring Kasko",
"prices": {
"price": 16183,
"originalPrice": 16583,
"tfa": 2483.7
},
"productDetails": {
"coverage": "kasko",
"addons": [
"leiebil",
"maskinskade"
],
"ipidUrls": [
{
"url": "https://www.forsikringipsum.no/ipid_bilforsikring",
"updatedAt": "2026-01-01T12:00:00.00Z"
}
],
"termsUrls": [
{
"url": "https://www.forsikringipsum.no/vilkar_bilforsikring_kasko",
"updatedAt": "2026-01-01T12:00:00.00Z"
},
{
"url": "https://www.forsikringipsum.no/vilkar_leiebil",
"updatedAt": "2026-01-01T12:00:00.00Z"
}
]
},
"offer": {
"bonus": "75%",
"deductible": 6000,
"yearlyMileage": 12000
}
}
],
"discounts": [
{
"id": "iKiLHD0opex6UcUqxyL3j",
"amount": 400,
"title": "Lorem ipsum",
"description": "Lorem ipsum dolor sit amet consectetur adipiscing elit",
"scope": "product",
},
{
"id": "xtNczK2rUAh5lfz-i26iO",
"amount": 300,
"title": "Lorem ipsum",
"description": "Lorem ipsum dolor sit amet consectetur adipiscing elit",
"scope": "package"
}
],
"additionalFees": [
{
"id": "xtNczK2rUAh5lfz-i26iO",
"amount": 150,
"title": "Lorem ipsum",
"description": "Lorem ipsum dolor sit amet consectetur adipiscing elit",
"scope": "package"
}
],
"membershipApplied": "Norske Arkitekters Landsforbund",
"uniqueSellingPoints": [
"Lorem ipsum dolor sit amet",
"Consectetur adipiscing elit"
],
"purchaseUrl": "https://forsikringipsum.no/handlekurv",
"receivedAt": "2026-03-27T12:07:42.36Z",
"responseAt": "2026-03-27T12:07:49.53Z"
}
Response field descriptions
Root-level fields
| Field | Type | Description | Valid values |
|---|---|---|---|
id | string | Same ID as received at root level in the request. | Must match id from request root level. Example: "xtNczK2rUAh5lfz-i26iO" |
company | string | Name of the insurance company. | Example: "Forsikringsselskap Ipsum AS" |
totalPrice | integer | Total price per year for all products, after discount. All fees and charges (both at product-level and root-level) except TFA are to be included in this price. | Must be greater than 0. Must be equal to totalOriginalPrice - totalDiscount. |
totalDiscount | integer | Total discount for the full insurance offer. Absolutely all discounts, both those that apply individually to the products and those that apply at the package level, must be included in this amount. Note that even though a discount can have amount = null in discounts, its actual value must still be included in this field. | Must not be less than the sum of all amount fields in the discounts array, but can be greater since amount for discounts is nullable. |
totalOriginalPrice | integer | Total original price per year for the full insurance offer before discount. All fees and charges (both at product-level and root-level) except TFA are to be included in this price. | Must be greater than 0. Must be greater than or equal to totalPrice. |
products | array of product objects | Products included in the insurance offer. | Must have the same number of elements as offerRequest in the request. See Products array |
discounts | array of discount objects | Discounts included in the insurance offer. | Can be empty. See Discounts array |
additionalFees | array of fee objects | Additional fees and charges that apply to the insurance offer. | Can be empty. See Fees array |
membershipApplied | string, nullable, optional | The name of the membership used when calculating price. | The field may be omitted or be null. If the field is included and is not null, it must precisely match one of the membership names from the request. |
uniqueSellingPoints | array of strings | USPs from the company. Must be provided as plain text without HTML, Markdown, or line breaks. | Can be empty. Max 5 string elements. Max length per string is 250 characters. |
purchaseUrl | string | URL for purchasing the products. | HTTPS URL. Example: "https://forsikringipsum.no/handlekurv" |
receivedAt | string | Time when the request was received. | ISO 8601 (complete). Example: "2026-03-27T12:07:42.36Z" |
responseAt | string | Time when the response was sent. | ISO 8601 (complete). Example: "2026-03-27T12:07:49.53Z" |
Products array
| Field | Type | Description | Valid values |
|---|---|---|---|
id | string | ID associated with the product offer. | Must match an ID from offerRequest in the request. Example: "iKiLHD0opex6UcUqxyL3j" |
type | string | Insurance product type. | "bil" |
productName | string | The company's own name for the product or coverage offered. | Example: "Bilforsikring Kasko" |
prices | object | Price values for the product. | See Prices object |
productDetails | object | Product details. | See Product details object |
offer | object | Offer details for the product. | See Offer object |
Discounts array
| Field | Type | Description | Valid values |
|---|---|---|---|
id | string | ID the discount applies to. | Must match either root-level id from the request, or one of the IDs in offerRequest. |
amount | integer, nullable | Discount amount in NOK. Optional to include. | May be null. If not null, must be greater than 0. |
title | string | Discount title. | Max length 50 characters. Example: "Lojalitetsrabatt" |
description | string, nullable | Discount description. | May be null.Max length 250 characters. |
scope | string | Indicates whether the discount applies to a specific product or to the full insurance offer. | "product""package" |
Fees array
All costs/fees that will be added to the invoice for the offer period (one year) must be reported, whether they are the base price or other costs and/or fees related to the establishment or maintenance of the customer relationship, or to each individual insurance agreement.
Costs related to invoicing options agreed upon in connection with the conclusion of the agreement shall not be reported.
| Field | Type | Description | Valid values |
|---|---|---|---|
id | string | ID the fee applies to. | Must match either root-level id from the request, or one of the IDs in offerRequest. |
amount | integer | Fee amount in NOK. | Must be greater than 0. |
title | string | Fee title. | Max length 50 characters. Example: "Etableringsgebyr". |
description | string, nullable | Fee description. | May be null.Max length 250 characters. |
scope | string | Indicates whether the fee applies to a specific product or to the full insurance offer. | "product""package" |
Prices object
| Field | Type | Description | Valid values |
|---|---|---|---|
price | integer | Product price per year, after discount. Without fees and costs or TFA. | Must be greater than 0. |
originalPrice | integer | Product original price/premium per year, before discount. Without fees and costs or TFA. | Must be greater than 0. Must be greater than or equal to price. |
tfa | decimal | Road traffic insurance tax for the product. This is purely supplementary information which should not be included in either originalPrice or totalOriginalPrice. | Must be greater than or equal to 0.0. |
Product details object
| Field | Type | Description | Valid values |
|---|---|---|---|
coverage | string | Coverage for the product. | "ansvar""delkasko""kasko""utvidet" |
addons | array of strings | Additional coverages included in the product. Must contain at least all additional coverages requested in data.addons for the same offerRequest. | Can be empty if no additional coverages were requested or are included. Valid elements in array: "leiebil""maskinskade" |
ipidUrls | array of IPID objects | List of direct download links to IPID documents (insurance product information document). | Must contain at least one element. See IPID array |
termsUrls | array of terms objects | List of direct download links to product terms. | Must contain at least one element. See Terms array |
IPID array
| Field | Type | Description | Valid values |
|---|---|---|---|
url | string | Download link to IPID. | HTTPS URL |
updatedAt | string | Time of the latest IPID update. | ISO 8601 (complete). Example: "2026-01-01T12:00:00.00Z" |
Terms array
| Field | Type | Description | Valid values |
|---|---|---|---|
url | string | Download link to terms. | HTTPS URL |
updatedAt | string | Time of the latest terms update. | ISO 8601 (complete). Example: "2026-01-01T12:00:00.00Z" |
Offer object
| Field | Type | Description | Valid values |
|---|---|---|---|
bonus | string | Product bonus. | "75% > 5 år""75% > 4 år""75% > 3 år""75% > 2 år""75%""70% > 5 år""70% > 4 år""70% > 3 år""70% > 2 år""70%""60%""50%""40%""30%""20%""10%""0%""-10%""-20%""-30%""-40%" |
deductible | integer | Product deductible in NOK. | From 0 to 35000. |
yearlyMileage | integer | Annual mileage for the car product in km. | From 1 to 999999, or 0 for unlimited mileage. |
Description of purchase link
The company may choose between two solutions for the link in the purchaseUrl field:
A. Continued offer flow
The link takes users to a personal page at the company, for example a checkout, "My page", or similar, where users can receive binding offers and/or complete the purchase of insurance based on the original offer returned to Finansportalen Insurance after authenticating with the company. The link itself contains no personal data, and users gain access to information related to the offer only after identifying themselves with the company.
B. Forward to the company's website
The link takes users to the company's website, product page, or similar, where users themselves start a dialog with the company to receive a binding offer and/or purchase insurance. The link contains no personal data, and users do not get access to information related to the original offer returned to Finansportalen Insurance.
In case of errors
If there is an error, we want the company to respond with a representative HTTP status code and the following body:
{
"error": {
"code": "string",
"message": "string"
}
}
If there are errors for one product in a request containing multiple products, the entire request will fail.
error.code must be one of the documented error codes below. error.message can be used to provide a brief, non-sensitive explanation of the error.
Use of HTTP status codes
| HTTP status code | When should it be used? | Typical error codes |
|---|---|---|
400 Bad Request | The request cannot be processed because it is invalid, is missing required fields, has the wrong data type, wrong format, or values outside documented limits. This also applies when combinations of fields are invalid, for example deductible above 0 when coverage = "ansvar". | validation_error |
422 Unprocessable Entity | The request is technically valid and understood, but the company cannot provide a price for the specific risk or business situation. This is the normal status code when the company cannot offer a price, for example due to an existing agreement, need for manual assessment, or because the parameter combination is not supported and would also not have produced a price in the company's public web solution. | no_price_available, existing_agreement, additional_information_required |
429 Too Many Requests | The company rejects the request because Finansportalen has sent too many requests in a short period of time, or because temporary capacity protection has been enabled. The response should include a Retry-After header if the company knows when a new request can be attempted. | service_unavailable |
500 Internal Server Error | The company encounters an internal error while processing the request, for example an error in price calculation or an unexpected system error. | failed_calculating_price, unknown_error |
503 Service Unavailable | The service is temporarily unavailable due to maintenance, capacity issues, or unavailable dependencies. The response should include a Retry-After header if the company knows when the service is expected to be available again. | service_unavailable |
As a general rule, 400 should be used when the error is caused by the content of the request from Finansportalen, 422 when the request is understood but the company cannot provide a price for the specific case, and 500/503 when the error is caused by the company or the company's dependencies.
Authentication and authorization errors are handled with ordinary HTTP status codes, for example 401 Unauthorized or 403 Forbidden. These errors concern access to the API and do not need to follow the error code list below.
Technical errors
| Code | Description |
|---|---|
validation_error | Invalid or missing fields in the request |
failed_calculating_price | The system could not calculate a price due to an internal error, for example an internal calculation failure or missing internal calculation data |
service_unavailable | The service is temporarily unavailable (e.g., maintenance or capacity issues) |
unknown_error | Unexpected error that does not fit into the other categories |
Other errors
| Code | Description |
|---|---|
no_price_available | The company cannot provide a price, and would also not have provided one in its public web solution, for example because the parameter combination is not supported |
existing_agreement | The company does not return a price because the user already has an agreement for the given product with the company |
additional_information_required | The request requires more information; the user must contact an advisor |