Anessa was previously called Insurely. You may still see the Insurely name in parts of our documentation while we complete the transition.

This version, 2021-01-01, is deprecated. The latest is 2026-04-01: open the 2026-04-01 introduction.

Migration Guide

Migrating to 2026-04-01

Summary

This migration covers four version jumps (2021-01-01 -> 2023-03-15 -> 2024-06-01 -> 2025-01-01 -> 2026-04-01) and includes significant restructuring of the API. The collection endpoints have been reorganized under a shared, top-level /collections resource, the collection request body has moved from an untyped input map to a typed parameters array, policyholder fields have been consolidated into a dedicated Holder object, monetary integer fields have been replaced with MonetaryAmount objects, and the premium fields have been collected in the Premium object.

Breaking Changes

Endpoint paths restructured

All /insurance-collection/* and /insurance-company/* endpoints have been removed. Collections are now a shared, top-level /collections resource, with the insurance data read from a product sub-path.

Action: Update all endpoint URLs in your integration according to the mapping below.

Old EndpointNew Endpoint
POST /insurance-collection/collect-infoPOST /collections
GET /insurance-collection/get-data/{collectionId}GET /collections/{collectionId}/insurance/data
GET /insurance-collection/status/{collectionId}GET /collections/{collectionId}/status
POST /insurance-collection/supplement-infoPOST /collections/{collectionId}/supplement-info
GET /insurance-collection/get-parametersRemoved
GET /insurance-collection/parameters/{country}Removed
GET /insurance-company/statusGET /companies/availability

Collection request body uses typed parameters

POST /collections takes an InitiateCollectionRequest. The insuranceCompany field is renamed to company, and the untyped input map and the separate consents field are replaced by a single typed parameters array. loginMethod must still be sent as a top-level field (a LOGIN_METHOD entry in parameters is ignored), and the Swedish values are unchanged.

Old requestNew parameter
input.SWEDISH_PERSONAL_NUMBER (BankID login methods)SwedishBankIdParameter: { "type": "SWEDISH_BANKID", "personalNumber": "…" }
input.USERNAME (EMAIL login method)EmailParameter: { "type": "EMAIL", "email": "…" }
consents: [{ "type": "TRADE_UNION_MEMBERSHIP" }]TradeUnionConsentParameter: { "type": "TRADE_UNION_CONSENT", "value": true }
input.SESSION_ID / ADVISOR_HANDLE / EXTERNAL_REFERENCEattributes.sessionId / advisorHandle / externalReference on a SessionMetadataParameter (type: SESSION_METADATA)
// 2021-01-01
{
  "insuranceCompany": "se-lansforsakringar",
  "loginMethod": "SWEDISH_MOBILE_BANKID_OTHER_DEVICE",
  "input": { "SWEDISH_PERSONAL_NUMBER": "199001011234" }
}

// 2026-04-01
{
  "company": "se-lansforsakringar",
  "loginMethod": "SWEDISH_MOBILE_BANKID_OTHER_DEVICE",
  "parameters": [
    { "type": "SWEDISH_BANKID", "personalNumber": "199001011234" }
  ]
}

Action: Rename insuranceCompany to company and convert each input key, consent and session identifier into a typed entry in parameters. See the 2025-01-01 migration guide for the full per-login-method mapping.

Policyholder fields moved to Holder object

The insuranceHolder* fields and otherInsuranceHolder have moved from individual insurance objects into a new Holder object, accessible via the holder field on each insurance type:

  • insuranceHolderName → holder.name
  • insuranceHolderEmail → holder.email
  • insuranceHolderPhoneNumber → holder.phoneNumber
  • insuranceHolderStreetAddress → holder.streetAddress
  • insuranceHolderPostalCode → holder.postalCode
  • insuranceHolderCity → holder.city
  • otherInsuranceHolder → holder.otherInsuranceHolder

Action: Replace all reads of insuranceHolder* fields with the equivalent fields on the holder object. For example, change insurance.insuranceHolderName to insurance.holder.name and insurance.otherInsuranceHolder to insurance.holder.otherInsuranceHolder.

Removed fields from Insurance base object

The following fields have been removed from Insurance and all insurance type objects:

  • externalId: the same value is now returned as id on each item in the data response, next to insurance (see FullInsuranceWrapper)
  • premiumAmountYearRounded
  • premiumFrequency

The premium fields premiumAmountYearRounded, premiumFrequency and paymentMethod have moved into the premium object (see Premium fields moved into premium below).

Action: Read id on the data response item instead of insurance.externalId, and use the premium object instead of premiumAmountYearRounded and premiumFrequency.

Integer monetary fields changed to MonetaryAmount

Multiple fields across insurance types that were previously plain integer values are now MonetaryAmount objects with amount and currency fields. This affects:

Action: Update all reads of these fields from field (integer) to field.amount (number) and field.currency (string).

Premium fields moved into premium

premiumAmountYearRounded, premiumFrequency and paymentMethod have been removed from the insurance object. Use the premium object (Premium) instead:

2021-01-012026-04-01
premiumAmountYearRounded (integer)Removed. Use premium.amount, a MonetaryAmount object, together with premium.period, which says what period the amount covers. When premium.period is YEARLY_PREMIUM_PERIOD, premium.amount is the yearly premium
premiumFrequencypremium.paymentFrequency (same values: 1, 2, 4, 12, 0 or -1)
paymentMethodpremium.paymentMethod

A Swedish premium in 2026-04-01 looks like this:

"premium": {
  "@market": "se",
  "amount": { "amount": 2355, "currency": "SEK" },
  "period": "YEARLY_PREMIUM_PERIOD",
  "paymentFrequency": 12,
  "paymentMethod": "AUTOGIRO"
}

Action: Read the premium amount from premium.amount instead of premiumAmountYearRounded, and check premium.period to see what period it covers. Read the payment frequency from premium.paymentFrequency and the payment method from premium.paymentMethod.

Changes inside the existing premium object

Only relevant if you already read the premium object in 2021-01-01. Its fields are renamed, and the MonetaryAmount object in premium.amount is restructured:

2021-01-012026-04-01
premium.amount.minorUnitAmount (integer, öre)premium.amount.amount (number, kronor). The value is 100 times smaller, so remove any division by 100
premium.amount.currencyCode (enum)premium.amount.currency (string, ISO 4217)
premium.frequencypremium.period (YEARLY_PREMIUM_FREQUENCY → YEARLY_PREMIUM_PERIOD, UNKNOWN_PREMIUM_FREQUENCY → UNKNOWN_PREMIUM_PERIOD)
premium.taxationRemoved

Action: Update your reads of these fields to the new names.

Removed fields on specific insurance types

Action: Remove any references to these fields in your code.

CompanyAvailability field renames

On CompanyAvailability:

  • insuranceCompany renamed to company
  • insuranceCompanyDisplayName renamed to companyDisplayName
  • New field companyGroup added
  • New status value DEGRADED_PERFORMANCE: the company is experiencing intermittent issues; collections can still be attempted but may fail or return incomplete data

Action: Update field references from insuranceCompany to company and insuranceCompanyDisplayName to companyDisplayName. Handle the DEGRADED_PERFORMANCE status.

CollectionStatus information map changes

In the CollectionStatusInformationMap (extraInformation on the status response):

  • AUTOSTART_TOKEN, the precompiled bankid:/// app link, has been removed. Build the link from SWEDISH_MOBILE_BANKID_AUTOSTART_TOKEN, which is unchanged.
  • INSTRUCTIONS now holds the instructions object that 2021-01-01 returned as INSTRUCTIONS_V2, and INSTRUCTIONS_V2 has been removed. This only affects the SWEDISH_MOBILE_BANKID_SAME_DEVICE_CLIENT_SIDE_AUTHENTICATION login method.

Action: Stop reading AUTOSTART_TOKEN and INSTRUCTIONS_V2. If you use client-side BankID authentication, read the instructions from INSTRUCTIONS.

Supplement-info

POST /insurance-collection/supplement-info is replaced by POST /collections/{collectionId}/supplement-info. In 2026-04-01 you may need it in these cases:

WhenBody
The status is CONTACT_FORM_PENDING: send the values listed under REQUIRED_INPUT_TYPES in extraInformationCollectionInput: { "type": "COLLECTION_INPUT", "items": [{ "type": "EMAIL", "value": "…" }, { "type": "MOBILE_PHONE_NUMBER", "value": "…" }] }
You use the SWEDISH_MOBILE_BANKID_SAME_DEVICE_CLIENT_SIDE_AUTHENTICATION login method: send the response to the INSTRUCTIONS requestResponseObject: { "type": "RESPONSE_OBJECT", "response": …, "headers": { "Set-Cookie": ["…"] } }

Action: When you get CONTACT_FORM_PENDING, or if you use client-side BankID authentication, send the matching body to POST /collections/{collectionId}/supplement-info.

parameters moved into coverage

The parameters list on each item in the data response has moved into a new coverage object: read coverage.parameters instead of parameters. The parameter entries themselves are unchanged. coverage also holds the insurance's documents.

Action: Read coverage.parameters instead of parameters.

Collection status values renamed and split

In 2021-01-01, status values were space-separated (for example COMPLETED PARTIAL), and LOGIN, USER INPUT, WAITING FOR AUTHENTICATION and FAILED each covered several different situations. In 2026-04-01 every value uses underscores, and each of those situations has its own status. WAITING FOR AUTHENTICATION itself is renamed to AUTHENTICATION_TIMEOUT:

2021-01-01 status2026-04-01 statusWhen
RUNNINGRUNNING
LOGINLOGIN
LOGINWAITING_FOR_USER_ACTIONThe user needs to sign in BankID for authentication to continue
COLLECTINGCOLLECTING
COMPLETEDCOMPLETED
COMPLETED PARTIALCOMPLETED_PARTIAL
COMPLETED EMPTYCOMPLETED_EMPTY
INCORRECT CREDENTIALSINCORRECT_CREDENTIALS
USER INPUTKYC_FORMThe company asks the user to fill in a KYC form before data can be collected
USER INPUTCUSTOMER_ENROLLMENT_REQUIREDThe user needs to sign up as a customer with the company before data can be collected
USER INPUTCONTACT_FORMThe company asks the user to fill in their contact details before data can be collected
USER INPUTCONTACT_FORM_PENDINGThe company asks for contact details, and you can supply them through the supplement-info endpoint
WAITING FOR AUTHENTICATIONAUTHENTICATION_TIMEOUTThe user did not authenticate in time
WAITING FOR AUTHENTICATIONAUTHENTICATION_CANCELLEDThe user cancelled the authentication
WAITING FOR AUTHENTICATIONAUTHENTICATION_CONFLICTAuthentication was cancelled because of multiple ongoing authentication sessions
WAITING FOR AUTHENTICATIONAUTHENTICATION_MISMATCHThe person who authenticated is not the person who started the collection
FAILEDFAILED
FAILEDTHIRD_PARTY_ERRORThe collection failed due to an error on the company's end
FAILEDAUTHENTICATION_ERRORSign-in failed for a reason that doesn't match a more specific status, for example when the chosen login method can't be used at the company

See Collection statuses for what each 2026-04-01 status means and how to act on it.

Action: Update every comparison against a status value to the 2026-04-01 name, and handle each of the values a single old status is now split into.

New Features

New collection endpoints

New field on InsuranceChild

insuredPersonDateOfBirth (the insured child's date of birth, YYYY-MM-DD) has been added to InsuranceChild. It is only available for some companies and is absent when it could not be determined.

Migration Checklist

  • Update Insurely-Version header to 2026-04-01
  • Update all endpoint URLs from /insurance-collection/* to /collections/*, and read data from /collections/{collectionId}/insurance/data
  • Rename insuranceCompany to company in the collection request, and move input, consents and session identifiers into the typed parameters array
  • Replace /insurance-company/status with /companies/availability, and remove calls to /insurance-collection/get-parameters and /insurance-collection/parameters/{country}
  • Update insuranceCompany to company and insuranceCompanyDisplayName to companyDisplayName in company availability responses
  • Migrate all insuranceHolder* field reads to the new holder object
  • Read id on the data response item instead of insurance.externalId
  • Read coverage.parameters instead of parameters
  • Update all integer monetary fields to read from MonetaryAmount objects (.amount and .currency)
  • Read the premium from the premium object: premium.amount together with premium.period (replaces premiumAmountYearRounded), premium.paymentFrequency (was premiumFrequency) and premium.paymentMethod (was paymentMethod)
  • If you read the premium object before: use the renamed fields premium.amount.amount, premium.amount.currency and premium.period
  • Build the BankID app link from SWEDISH_MOBILE_BANKID_AUTOSTART_TOKEN instead of AUTOSTART_TOKEN
  • Answer CONTACT_FORM_PENDING, and send client-side BankID responses, through /collections/{collectionId}/supplement-info
  • Update status handling to the 2026-04-01 status names, including the values that USER INPUT, WAITING FOR AUTHENTICATION, FAILED and LOGIN are split into
  • Remove references to usedForWork and insuranceLevel (car), veterinaryCareCovered (animal) and numberOfToilets (villa)

Field Mapping Table

ObjectOldNewChange
InsuranceinsuranceHolderName (string)holder.name (string)Moved to Holder
InsuranceinsuranceHolderEmail (string)holder.email (string)Moved to Holder
InsuranceinsuranceHolderPhoneNumber (string)holder.phoneNumber (string)Moved to Holder
InsuranceinsuranceHolderStreetAddress (string)holder.streetAddress (string)Moved to Holder
InsuranceinsuranceHolderCity (string)holder.city (string)Moved to Holder
InsuranceinsuranceHolderPostalCode (string)holder.postalCode (string)Moved to Holder
InsuranceotherInsuranceHolder (boolean)holder.otherInsuranceHolder (boolean)Moved to Holder
InsuranceexternalId (string)id on FullInsuranceWrapper (string)Moved
InsurancepaymentMethod (string)premium.paymentMethod (string)Moved into premium
InsurancepremiumAmountYearRounded (integer)--Removed (use premium.amount and premium.period)
InsurancepremiumFrequency (integer)premium.paymentFrequency (integer)Moved into premium
MonetaryAmountcurrencyCode (string enum)currency (string)Renamed
MonetaryAmountminorUnitAmount (long, minor units)amount (decimal, major units)Replaced — semantic change
Premiumfrequency (string enum)period (string enum)Renamed
Premiumtaxation (string enum)--Removed
All insurance typesdiscountAmount (integer)discountAmount (MonetaryAmount)Type changed
InsuranceAnimalanimalPurchasePrice (integer)animalPurchasePrice (MonetaryAmount)Type changed
InsuranceAnimalveterinaryCareAmount (integer)veterinaryCareAmount (MonetaryAmount)Type changed
InsuranceAnimalveterinaryCareAmountRemaining (integer)veterinaryCareAmountRemaining (MonetaryAmount)Type changed
InsuranceCottageinsuredMovablesAmount (integer)insuredMovablesAmount (MonetaryAmount)Type changed
InsuranceFarminsuredMovablesAmount (integer)insuredMovablesAmount (MonetaryAmount)Type changed
InsuranceHomeinsuredMovablesAmount (integer)insuredMovablesAmount (MonetaryAmount)Type changed
InsuranceVillainsuredMovablesAmount (integer)insuredMovablesAmount (MonetaryAmount)Type changed
InsuranceIncomeinsuredAmount (integer)insuredAmount (MonetaryAmount)Type changed
InsuranceIncomeinsuredMonthlyAmount (integer)insuredMonthlyAmount (MonetaryAmount)Type changed
InsuranceAccidentinsuredAmountBaseEconomicalDisability (integer)insuredAmountBaseEconomicalDisability (MonetaryAmount)Type changed
InsuranceAccidentinsuredAmountBaseMedicalDisability (integer)insuredAmountBaseMedicalDisability (MonetaryAmount)Type changed
InsuranceAccidentinsuredAmountLife (integer)insuredAmountLife (MonetaryAmount)Type changed
InsuranceAccidentinsuredAmountMaxMedicalDisability (integer)insuredAmountMaxMedicalDisability (MonetaryAmount)Type changed
InsuranceChildinsuredAmountBaseEconomicalDisability (integer)insuredAmountBaseEconomicalDisability (MonetaryAmount)Type changed
InsuranceChildinsuredAmountBaseMedicalDisability (integer)insuredAmountBaseMedicalDisability (MonetaryAmount)Type changed
InsuranceChildinsuredAmountLife (integer)insuredAmountLife (MonetaryAmount)Type changed
InsuranceChildinsuredAmountMaxMedicalDisability (integer)insuredAmountMaxMedicalDisability (MonetaryAmount)Type changed
InsuranceLifeinsuredAmountLife (integer)insuredAmountLife (MonetaryAmount)Type changed
InsurancePregnancyinsuredAmountBaseMedicalDisability (integer)insuredAmountBaseMedicalDisability (MonetaryAmount)Type changed
InsuranceAnimalveterinaryCareCovered (integer)--Removed
InsuranceVillanumberOfToilets (integer)--Removed
InsuranceCarusedForWork (boolean)--Removed
InsuranceCarinsuranceLevel (string)--Removed
CompanyAvailabilityinsuranceCompany (string)company (string)Renamed
CompanyAvailabilityinsuranceCompanyDisplayName (string)companyDisplayName (string)Renamed
FullInsuranceWrapperparameters (array)coverage.parameters (array)Moved into coverage