This is v2.2-draft — a working draft of the v2.2 standards, published for review and not yet ratified. It MUST NOT be used as the basis for a production implementation. For the current standards, switch to v2.1 using the version selector. See the v2.1 → v2.2-draft changelog for every change in this version.
Insurance Data Sharing — Requirements v2.2-draft10 min read
The validation rules that apply to Insurance Data Sharing. The Validated by column on each table indicates where each rule is enforced. Read alongside the Consent requirements and the User Journeys.
All requests require an active Trust Framework application with the ISP role, a valid transport certificate presented on every request via mTLS, an active signing key for JWT signing, and — when requesting ReadInsurancePremium — an active encryption key for decrypting the Premium JWE on the customer device.
Consent Creation
/paraud, signing algorithm (PS256), and expiry window.client_assertionclient_assertion_type: urn:ietf:params:oauth:client-assertion-type:jwt-bearer). Authenticates the TPP application — see Client Assertion.scope (in Request JWT)openid insurance.authorization_details[0].type (in Request JWT)urn:openfinanceuae:insurance-consent:v2.2.authorization_details[0].type (e.g. urn:openfinanceuae:insurance-consent:v2.2) restricts the version of the Insurance endpoints the consent can be used to call (specified in the path, e.g. /open-finance/insurance/v2.2/motor-insurance-policies). It MUST resolve to an ApiVersion the LFI has published in the Trust Framework for the Insurance API family./par OpenAPI schema. No additional or undocumented parameters are permitted.consent.Permissions structure{ InsuranceType, Permissions[] }. There MUST be at least one block, and each block MUST contain at least one permission code.consent.Permissions[*].InsuranceTypeEmployment, Health, Home, Life, Motor, Renters, Travel. Each sector may appear at most once in the array. The sector must also be one the LFI underwrites — if the LFI does not offer the requested sector, the validate hook will reject the consent.consent.Permissions[*].PermissionsReadInsurancePolicies MUST be present — it is the base permission that gates list and detail access for the sector. Other permissions (ReadCustomerBasic, ReadCustomerDetail, ReadCustomerPaymentDetails, ReadInsuranceProduct, ReadCustomerClaims, ReadInsurancePremium) MAY be included and unlock the corresponding field sets on the policy response.consent.Permissions[*].Permissions — ReadInsurancePremiumReadInsurancePremium MUST only be requested by TPPs that hold the Access Encrypted Resource Data optional certification with Nebras. An uncertified TPP MUST NOT include this permission in any per-sector block; if it does, the API Hub rejects the consent. Only certified TPPs are permitted to receive insurance premium data, whether the LFI returns it in cleartext or as an encrypted JWE.consent.Permissions (unsupported)ReadCustomerClaims for a sector the LFI does not surface claims on), the consent validation will fail.consent.BaseConsentIdauthorization_details[0].type is urn:openfinanceuae:insurance-consent:*). If the original consent in the chain already had a BaseConsentId, the TPP must reuse that same BaseConsentId rather than the immediate prior ConsentId.consent.ExpirationDateTimex-fapi-interaction-idList Policies
/{type}-insurance-policiesAuthorizationopenid insurance scope. The consent bound to the token must be in Authorized status and the ExpirationDateTime of the Consent must be in the future.v2.2 in /open-finance/insurance/v2.2/motor-insurance-policies) must match the version in the consent’s authorization_details[0].type (urn:openfinanceuae:insurance-consent:v2.2).{type} path segmentInsuranceType present in consent.Permissions. A call to a sector the consent does not grant returns 403.consent.PermissionsInsuranceType must include ReadInsurancePolicies.page query parameter, and Meta does not include TotalPages or TotalRecords.PolicyStatus. TPPs MUST be prepared to receive policies in any of the AEInsurancePolicyStatusCodes states (New, Renewed, Expired, Lapsed, Cancelled, PaidUp, Converted, Surrendered, DeathClaim, RiderClaim) and render them with their current status.x-fapi-interaction-idx-fapi-auth-dateTue, 11 Sep 2012 19:43:31 UTC.x-fapi-customer-ip-addressx-customer-user-agentGet a Policy
/{type}-insurance-policies/{InsurancePolicyId}AuthorizationAuthorized consent that has not expired.authorization_details[0].type.{type} path segmentInsuranceType present in consent.Permissions.consent.PermissionsInsuranceType must include ReadInsurancePolicies. The field sets returned on the policy depend on the additional permissions in the block (ReadCustomerBasic, ReadCustomerDetail, ReadCustomerPaymentDetails, ReadInsuranceProduct, ReadCustomerClaims, ReadInsurancePremium).InsurancePolicyIdGET /{type}-insurance-policies under the same consent. See Policy Access Validation for the response when the policy is not part of the consented set.PolicyStatus within the five-year window — there is no status-based 403. TPPs MUST render the policy according to its PolicyStatus rather than assume it is active.x-fapi-interaction-idx-fapi-auth-datex-fapi-customer-ip-addressx-customer-user-agentPolicy Access Validation
InsurancePolicyId is not part of the consented set for the sector403 with errorCode: Consent.PermanentPolicyAccessFailure and errorMessage: The policy is permanently inaccessible.