curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"summary": {
"id": "550e8400-e29b-41d4-a716-446655440004",
"policyId": "550e8400-e29b-41d4-a716-446655440001",
"companyId": "550e8400-e29b-41d4-a716-446655440099",
"createdAt": "2025-01-15T10:30:00.000Z",
"policyVersion": 3,
"versionCreatedAt": "2025-03-10T09:00:00.000Z",
"primaryInsuredName": "Mercy General Hospital",
"primaryInsuredId": "550e8400-e29b-41d4-a716-446655440010",
"policyNumber": "POL-2025-000123",
"policyStartDate": {
"date": "2025-01-01",
"timezone": "America/New_York"
},
"policyEndDate": {
"date": "2026-01-01",
"timezone": "America/New_York"
},
"fullTermPricingInfo": {
"premium": 110000,
"taxes": 0,
"fees": 500,
"total": 110500,
"pricingComponents": [
{
"label": "Policy Premium",
"classification": "policy-premium",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 110000
},
{
"label": "Policy Fee",
"classification": "policy-fee",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 500
}
]
},
"fullTermBillingInfo": null,
"matchedSegments": [
{
"startDate": "2025-01-01",
"endDate": "2025-06-01"
},
{
"startDate": "2025-06-01",
"endDate": "2025-09-01"
},
{
"startDate": "2025-09-01",
"endDate": "2026-01-01"
}
]
}
},
{
"summary": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"policyId": "550e8400-e29b-41d4-a716-446655440001",
"companyId": "550e8400-e29b-41d4-a716-446655440099",
"createdAt": "2025-01-15T10:30:00.000Z",
"policyVersion": 2,
"versionCreatedAt": "2025-02-01T14:00:00.000Z",
"primaryInsuredName": "Mercy General Hospital",
"primaryInsuredId": "550e8400-e29b-41d4-a716-446655440010",
"policyNumber": "POL-2025-000123",
"policyStartDate": {
"date": "2025-01-01",
"timezone": "America/New_York"
},
"policyEndDate": {
"date": "2026-01-01",
"timezone": "America/New_York"
},
"fullTermPricingInfo": {
"premium": 102000,
"taxes": 0,
"fees": 500,
"total": 102500,
"pricingComponents": [
{
"label": "Policy Premium",
"classification": "policy-premium",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 102000
},
{
"label": "Policy Fee",
"classification": "policy-fee",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 500
}
]
},
"fullTermBillingInfo": null,
"matchedSegments": [
{
"startDate": "2025-01-01",
"endDate": "2025-06-01"
},
{
"startDate": "2025-06-01",
"endDate": "2026-01-01"
}
]
}
},
{
"summary": {
"id": "550e8400-e29b-41d4-a716-446655440002",
"policyId": "550e8400-e29b-41d4-a716-446655440001",
"companyId": "550e8400-e29b-41d4-a716-446655440099",
"createdAt": "2025-01-15T10:30:00.000Z",
"policyVersion": 1,
"versionCreatedAt": "2025-01-15T10:30:00.000Z",
"primaryInsuredName": "Mercy General Hospital",
"primaryInsuredId": "550e8400-e29b-41d4-a716-446655440010",
"policyNumber": "POL-2025-000123",
"policyStartDate": {
"date": "2025-01-01",
"timezone": "America/New_York"
},
"policyEndDate": {
"date": "2026-01-01",
"timezone": "America/New_York"
},
"fullTermPricingInfo": {
"premium": 85000,
"taxes": 0,
"fees": 500,
"total": 85500,
"pricingComponents": [
{
"label": "Policy Premium",
"classification": "policy-premium",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 85000
},
{
"label": "Policy Fee",
"classification": "policy-fee",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 500
}
]
},
"fullTermBillingInfo": null,
"matchedSegments": [
{
"startDate": "2025-01-01",
"endDate": "2026-01-01"
}
]
}
}
],
"totalCount": 3
}List Single Policy Versions
Reads one policy: its current version first, then its earlier versions, each
the policy as a transaction (new business, endorsement, cancellation or
reinstatement) left it. This is how you read a policy by id, to see what is
in force now or how the policy changed over time. For one known version, use
Get Policy Version (getPolicyVersion); to search across policies, use List
Policies (listPoliciesTransactionModel).
Each version is a snapshot of the policy state produced by a transaction,
and filters finds the versions that match specific field criteria.
Example questions this endpoint answers:
- “Show me all versions of policy ABC” —
segmentScope="all", no filters - “Which versions of policy ABC had premium above $50k?” —
segmentScope="all",filterson premium field - “Which versions of policy ABC provided coverage on March 15?” —
segmentScope={"asOf":"2025-03-15"}
Query parameters (detail, segmentScope, filters, pagination, sorting) work
identically to the List Policy Versions endpoint, scoped to a single policy.
Required permission: policy.view
curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/{policyId}/versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"summary": {
"id": "550e8400-e29b-41d4-a716-446655440004",
"policyId": "550e8400-e29b-41d4-a716-446655440001",
"companyId": "550e8400-e29b-41d4-a716-446655440099",
"createdAt": "2025-01-15T10:30:00.000Z",
"policyVersion": 3,
"versionCreatedAt": "2025-03-10T09:00:00.000Z",
"primaryInsuredName": "Mercy General Hospital",
"primaryInsuredId": "550e8400-e29b-41d4-a716-446655440010",
"policyNumber": "POL-2025-000123",
"policyStartDate": {
"date": "2025-01-01",
"timezone": "America/New_York"
},
"policyEndDate": {
"date": "2026-01-01",
"timezone": "America/New_York"
},
"fullTermPricingInfo": {
"premium": 110000,
"taxes": 0,
"fees": 500,
"total": 110500,
"pricingComponents": [
{
"label": "Policy Premium",
"classification": "policy-premium",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 110000
},
{
"label": "Policy Fee",
"classification": "policy-fee",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 500
}
]
},
"fullTermBillingInfo": null,
"matchedSegments": [
{
"startDate": "2025-01-01",
"endDate": "2025-06-01"
},
{
"startDate": "2025-06-01",
"endDate": "2025-09-01"
},
{
"startDate": "2025-09-01",
"endDate": "2026-01-01"
}
]
}
},
{
"summary": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"policyId": "550e8400-e29b-41d4-a716-446655440001",
"companyId": "550e8400-e29b-41d4-a716-446655440099",
"createdAt": "2025-01-15T10:30:00.000Z",
"policyVersion": 2,
"versionCreatedAt": "2025-02-01T14:00:00.000Z",
"primaryInsuredName": "Mercy General Hospital",
"primaryInsuredId": "550e8400-e29b-41d4-a716-446655440010",
"policyNumber": "POL-2025-000123",
"policyStartDate": {
"date": "2025-01-01",
"timezone": "America/New_York"
},
"policyEndDate": {
"date": "2026-01-01",
"timezone": "America/New_York"
},
"fullTermPricingInfo": {
"premium": 102000,
"taxes": 0,
"fees": 500,
"total": 102500,
"pricingComponents": [
{
"label": "Policy Premium",
"classification": "policy-premium",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 102000
},
{
"label": "Policy Fee",
"classification": "policy-fee",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 500
}
]
},
"fullTermBillingInfo": null,
"matchedSegments": [
{
"startDate": "2025-01-01",
"endDate": "2025-06-01"
},
{
"startDate": "2025-06-01",
"endDate": "2026-01-01"
}
]
}
},
{
"summary": {
"id": "550e8400-e29b-41d4-a716-446655440002",
"policyId": "550e8400-e29b-41d4-a716-446655440001",
"companyId": "550e8400-e29b-41d4-a716-446655440099",
"createdAt": "2025-01-15T10:30:00.000Z",
"policyVersion": 1,
"versionCreatedAt": "2025-01-15T10:30:00.000Z",
"primaryInsuredName": "Mercy General Hospital",
"primaryInsuredId": "550e8400-e29b-41d4-a716-446655440010",
"policyNumber": "POL-2025-000123",
"policyStartDate": {
"date": "2025-01-01",
"timezone": "America/New_York"
},
"policyEndDate": {
"date": "2026-01-01",
"timezone": "America/New_York"
},
"fullTermPricingInfo": {
"premium": 85000,
"taxes": 0,
"fees": 500,
"total": 85500,
"pricingComponents": [
{
"label": "Policy Premium",
"classification": "policy-premium",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 85000
},
{
"label": "Policy Fee",
"classification": "policy-fee",
"qualifier": "",
"earningSchedule": "pro-rata",
"value": 500
}
]
},
"fullTermBillingInfo": null,
"matchedSegments": [
{
"startDate": "2025-01-01",
"endDate": "2026-01-01"
}
]
}
}
],
"totalCount": 3
}Authorizations
Path Parameters
Query Parameters
JSON-encoded segment scope filter. Controls which segments within each version
participate in filtering. Optional — defaults to "all" when omitted. Values:
"all"— every segment{"asOf":"YYYY-MM-DD"}— point-in-time{"fromDate":"YYYY-MM-DD","toDate":"YYYY-MM-DD"}— date range
JSON-encoded array of filters combined with AND semantics.
Tenant filters must use { fieldType: "declared", key, operator, value }, where key names a listFilters definition on the policy
surface. The definition supplies the SQL expression, result type, and
permitted operators.
Explicit fixed system-filter forms (systemUser, systemDate, and
systemId) remain supported. Implicit field-derived forms such as
text, number, optionSet, or join fail with HTTP 400
and code implicit-filters-disabled.
See the Configuration API for the tenant's listFilters definitions.
Response
Paginated list of policy versions
Paginated list of policy results.
Why this differs from the entity list shape. A non-policy entity list
(GET /entities/{entityType}) returns flat items, each a single
{ id, fieldModelV1Data, … } record. A policy list item instead carries a
summary object (and, with detail=full, a segments array) — it has no
single top-level field-data blob. This is by design: a Policy is
a segmented entity assembled from immutable transactions, so its field
data lives per-segment rather than in one flat record. The summary gives
the policy-level view (id, full-term info, matched segment date ranges) and
segments carries the per-segment data object when requested.
