Policy Management

Policy Management

This page provides supplementary information for the Policy Management API.

Get policy details

Send a request that looks like below to retrieve details of a single policy. Please replace the :id path variable with the actual policy Id.

### Get details of a single policy GET {{base-url-underwriting}}/api/v1/policies/:id?fields[policies]=reference,description,period,status,currencyCode Authorization: {{access-token}} Accept: application/vnd.api+json

Sample response

HTTP/2 200 OK { "data": { "type": "policies", "id": "policy-6f21f713-f977-5ded-a1d0-15d82ee48931", "attributes": { "reference": "1106467", "description": "Sample Customer Name", "period": { "start": "2024-12-19T00:00:00+00:00", "end": "2025-12-18T23:59:59+00:00" }, "currencyCode": "GBP", "status": "Created" } } }

Get policies belonging to a customer

To get policies belonging to a customer, send a request with parameters for paging, sorting, filtering, and a sparse fieldset selection. Please replace the {{policy-holder-id}} query parameter with the actual policy holder Id (aka the customer Id). For example,

### Get policies belonging to a customer GET {{base-url-underwriting}}/api/v1/policies?sort=-createdDate&fields[policies]=reference,description,period,status,currencyCode&page[size]=10&page[number]=1&filter[policyHolderId]={{policy-holder-id}} Authorization: {{access-token}} Accept: application/vnd.api+json

Sample response

HTTP/2 200 OK { "data": [ { "type": "policies", "id": "policy-6f21f713-f977-5ded-a1d0-15d82ee48931", "attributes": { "reference": "1106467", "description": "Sample Customer Name", "period": { "start": "2024-12-19T00:00:00+00:00", "end": "2025-12-18T23:59:59+00:00" }, "currencyCode": "GBP", "status": "Created" } }, ... ], "meta": { "total-records": 3, "totalResources": 3 } }

 

Create a new policy directly

For scenarios where quotation process is not necessary, the system allows creating the policy directly.

Please note to update "organizationContext": "<tenant or organization ID>" value.

The system expects "sourceId": "external-sale-1305" to be unique and repeating the same value will stop the policy from being created.

POST {{base-url-underwriting}}/api/v1/policies/createPolicyRequest Authorization: {{access-token}} Content-Type: application/vnd.api+json Accept: application/vnd.api+json { "data": { "type": "createPolicyRequests", "attributes": { "policyReference": "5500002", "sourceId": "external-sale-1305", "sourceSystemReference": "partner-B", "period": { "start": "2025-03-05T00:00:00.000Z", "end": "2026-03-04T00:00:00.000Z", "insurancePeriodStrategy": "" }, "insuredObjectReference": "John Doe", "answers": { "InsuredFirstNameTag": "John", "InsuredLastNameTag": "Doe", "InsuredDOBTag": "1985-05-12", "RateByAgeTag": "Standard", "OccupationTag": "Engineer", "IndexTag": "1", "LifeSumInsuredTag": "100000", "DisabilityCoverTag": "Yes", "DisabilityInsuredTag": "50000", "BasePremiumTag": "200" }, "currencyCode": "SEK", "proratablePremium": { "prorataType": "Annual365Premium", "premiumBeforeProRata": { "coverBreakdown": [ { "identity": { "id": 5001, "name": "Death", "industryCode": "", "reportingCode": "" }, "price": { "totalValue": { "amount": 100, "unroundedAmount": 100, "roundingStrategy": "RoundAwayFromZeroTo2DecimalPlaces" }, "preciseTotal": { "amount": 100, "unroundedAmount": 100, "roundingStrategy": "NoRounding" }, "breakdown": { "tariffPremium": { "amount": 100, "unroundedAmount": 100, "roundingStrategy": "RoundAwayFromZeroTo2DecimalPlaces" }, "underwritingAdjustment": { "amount": 0, "unroundedAmount": 0, "roundingStrategy": "RoundAwayFromZeroTo2DecimalPlaces" }, "salesDiscount": { "amount": 0, "unroundedAmount": 0, "roundingStrategy": "RoundAwayFromZeroTo2DecimalPlaces" }, "taxComponents": {}, "additionalComponents": {}, "reportingItems": {} } } } ] } }, "sourceSalesChannel": "saleschannel-10201c2f-4f32-08dd-391d-e1d818744bc2", "salesChannelName": "BOP sales channel", "salesChannelReference": "1", "productVersionId": "productversion-6f929ad3-4f37-08dd-3a7b-612cea438dca", "productName": "Accident", "productId": "product-76b922cb-4f31-08dd-b1b7-fbaf54bb39cd", "templateId": "string", "policyHolderId": "7411b977-203c-44c3-bf3f-3520af5a571b", "policyHolderData": { "id": "7411b977-203c-44c3-bf3f-3520af5a571b", "name": "John Test", "organizationContext": "<tenant or organization ID>" }, "salesDiscount": 0, "productCommission": 0, "underwritingAdjustment": 0, "underwritingAdjustmentReason": null, "salesCommission": 0, "paymentMethod": "invoice", "paymentFrequency": "monthly" } } }

Terminate a policy

The policy termination flow starts with a call to calculate the policy termination

### Step 1: POST /calculateTerminationRequest POST {{base-url-underwriting}}/api/v1/policies/calculateTerminationRequest Authorization: {{access-token}} Content-Type: application/vnd.api+json Accept: application/vnd.api+json { "data": { "type": "calculateTerminationRequests", "attributes": { "policyId": "policy-7e578db3-f471-56ff-abec-22965a7f03fc", "acknowledgedExistenceOfClaims": false } } }

The API records the termination request and returns the policy data similar to the truncated sample below

HTTP/1.1 200 OK Content-Type: application/vnd.api+json { "data": { "type": "policies", "id": "policy-7e578db3-f471-56ff-abec-22965a7f03fc", "attributes": { "reference": "500000", "period": { "start": "2025-05-01T00:00:00+00:00", "end": "2026-04-30T23:59:59+00:00" }, "status": "Activated", ... } ... } ... }

The client app then sends another /calculateTerminationRequest request with more details, e.g. effectiveFrom, selectedReason, etc.

### Step 2: POST /calculateTerminationRequest with effective date and reason POST {{base-url-underwriting}}/api/v1/policies/calculateTerminationRequest Authorization: {{access-token}} Content-Type: application/vnd.api+json Accept: application/vnd.api+json { "data": { "type": "calculateTerminationRequests", "attributes": { "policyId": "policy-7e578db3-f471-56ff-abec-22965a7f03fc", "effectiveFrom": "2025-07-01", "selectedReason": "NOT_NEEDED", "terminationFee": 0, "terminationEmailRequired": false, "terminationEmailTemplateId": "", "acknowledgedExistenceOfClaims": true } } }

Sample response includes the premiumAfterTermination.

HTTP/1.1 200 OK Content-Type: application/vnd.api+json { "data": { "type": "policies", "id": "policy-7e578db3-f471-56ff-abec-22965a7f03fc", "attributes": { "reference": "500000", "status": "Activated", "terminationRequest": { "effectiveDate": "2025-07-01T00:00:00+07:00", "selectedReasonCode": "NOT_NEEDED", "premiumAfterTermination": { "amount": 105.13, "currencyCode": "GBP", "formattedAmount": "105.13 GBP" } ... } ... } ... }

Finally, the app client can call terminatePolicyRequest to complete the termination flow.

### Step 3: POST /terminatePolicyRequest POST {{base-url-underwriting}}/api/v1/policies/terminatePolicyRequest Authorization: {{access-token}} Content-Type: application/vnd.api+json Accept: application/vnd.api+json { "data": { "type": "terminatePolicyRequests", "attributes": { "policyId": "policy-7e578db3-f471-56ff-abec-22965a7f03fc" } } }

Sample response with policy status changed:

HTTP/1.1 200 OK Content-Type: application/vnd.api+json { "data": { "type": "policies", "id": "policy-7e578db3-f471-56ff-abec-22965a7f03fc", "attributes": { "reference": "500000", "status": "PendingTermination", "terminationRequest": { "effectiveDate": "2025-07-01T00:00:00+07:00", "selectedReasonCode": "NOT_NEEDED", "premiumAfterTermination": { "amount": 105.13, "currencyCode": "GBP", "formattedAmount": "105.13 GBP" } ... } ... } ... }

If you would like to request an article, drop us a mail at seamless.support@seamless.insure

Seamless Help Center