Migration guide
Collections are now a top-level resource (from 2025-01-01)
In 2025-01-01 an insurance collection lived under the product namespace: it was created at POST /insurance/collection and read under /insurance/collection/{collectionId}/... (wealth collections lived under /wealth/collection/...). In 2026-04-01 collections become a single shared, top-level resource. A collection is created at POST /collections regardless of product, and the insurance data is read from a product sub-path — GET /collections/{collectionId}/insurance/data, mirroring the Wealth API's /collections/{collectionId}/wealth/data.
Endpoint mapping
2025-01-01 (insurance) | 2026-04-01 |
|---|---|
POST /insurance/collection | POST /collections (shared across products) |
GET /insurance/collection/{collectionId}/status | GET /collections/{collectionId}/status |
GET /insurance/collection/{collectionId}/data | GET /collections/{collectionId}/insurance/data |
POST /insurance/collection/{collectionId}/supplement-info | POST /collections/{collectionId}/supplement-info |
POST /insurance/collection/{collectionId}/skip | POST /collections/{collectionId}/skip |
DELETE /insurance/collection/{collectionId} | DELETE /collections/{collectionId} |
GET /insurance/collection/{collectionId}/policy/{policyId}/document/{documentId} | GET /collections/{collectionId}/insurance/policy/{policyId}/document/{documentId} |
| — | GET /collections — new: list the collections for the session token's user |
GET /companies/availability is unchanged.
Typed request parameters
POST /collections replaces the untyped 2025-01-01 request body — a loginMethod plus an input map keyed by uppercase strings, with separate top-level consents and filter fields — with a single typed parameters array on InitiateCollectionRequest. Each entry carries a type discriminator and its own named, lower-camelCase fields.
- Credentials become typed parameters — UsernamePasswordParameter (
type: USERNAME_PASSWORD) and EmailPasswordParameter (type: EMAIL_PASSWORD) — instead ofUSERNAME/PASSWORDkeys ininput. - Regions for companies that list a
regionunderadditionalLoginInputsonGET /companies/availabilitymove from theREGIONinput key into a RegionParameter (type: REGION), sent alongside the credential parameter. - Consents are explicit, typed parameters. The
2025-01-01consentsarray only ever accepted one value,TRADE_UNION_MEMBERSHIP; supply it as a TradeUnionConsentParameter (type: TRADE_UNION_CONSENT) with an explicitvalueboolean and an optionalcollectedAttimestamp.value: trueis equivalent to the old array entry;value: falseand an omitted parameter both mean no consent. - Session identifiers move from inline
inputkeys into a SessionMetadataParameter (type: SESSION_METADATA), under itsattributesmap with the keyssessionId,advisorHandleandexternalReference. - The
filterfield (registrationNorules) is no longer part of the request body.
// 2025-01-01
{
"company": "fr-banque-populaire",
"loginMethod": "USERNAME_AND_PASSWORD",
"input": {
"USERNAME": "user@example.com",
"PASSWORD": "53cr3t_P455W0Rd***",
"REGION": "ALSACE LORRAINE CHAMPAGNE"
}
}
// 2026-04-01
{
"company": "fr-banque-populaire",
"loginMethod": "USERNAME_AND_PASSWORD",
"parameters": [
{
"type": "USERNAME_PASSWORD",
"username": "user@example.com",
"password": "53cr3t_P455W0Rd***"
},
{ "type": "REGION", "region": "ALSACE LORRAINE CHAMPAGNE" }
]
}Login methods (France)
loginMethod stays a top-level field and the French values are unchanged from 2025-01-01; read the methods a company accepts from loginMethods on GET /companies/availability. Only the shape of the payload changes — each method now carries its input in a typed parameter rather than in the input map:
| Login method | 2025-01-01 input | 2026-04-01 parameter |
|---|---|---|
USERNAME_AND_PASSWORD | { "USERNAME": "…", "PASSWORD": "…" } | { "type": "USERNAME_PASSWORD", "username": "…", "password": "…" } |
USERNAME_AND_PASSWORD with a region | { "USERNAME": "…", "PASSWORD": "…", "REGION": "…" } | the USERNAME_PASSWORD parameter above plus { "type": "REGION", "region": "…" } |
AUTHENTICATION_APP_URL | — | no credential parameter; the user authenticates through the URL returned in extraInformation |
PDF_UPLOAD | — | unchanged — PDF uploads are not started through POST /collections in this version |
Steps
- Repoint the base path. Replace
/insurance/collectionwith/collections, and read data from/collections/{collectionId}/insurance/datainstead of/insurance/collection/{collectionId}/data. Status, supplement-info, skip and deletion keep the same suffixes under the new prefix. - Convert the request body. Move each
inputkey into a typed entry in theparametersarray (e.g.USERNAME/PASSWORD→{ "type": "USERNAME_PASSWORD", "username": …, "password": … },REGION→{ "type": "REGION", "region": … }). - Move consents and session data into parameters. Replace the
consentsarray with aTRADE_UNION_CONSENTparameter carrying an explicitvalue, and moveSESSION_ID/ADVISOR_HANDLE/EXTERNAL_REFERENCEinto aSESSION_METADATAparameter'sattributesassessionId/advisorHandle/externalReference. - Handle the new statuses (
AUTHENTICATION_ERROR,LOGIN_METHOD_NOT_APPLICABLE, andDEGRADED_PERFORMANCEon company availability) so an unexpected value does not fall through as a failure.