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
Returns a paginated list of all versions for a single policy. Each version is a snapshot of the policy state produced by a transaction. Use this to see how a policy changed over time, or to find 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
API key authentication. Send your raw API key as the Authorization header value with NO scheme prefix — Authorization: YOUR-API-KEY. Do NOT prefix it with Bearer or ApiKey, and do not use an X-API-Key header; those are not accepted.
Path Parameters
Company identifier
Policy identifier
Query Parameters
Page number (1-based, default 1).
x >= 1Detail level. summary returns lightweight results with matched segment date ranges.
full includes complete field data for each scope-matched segment.
summary, full 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.
Field to sort results by
policyId, createdAt, versionCreatedAt Sort direction (default desc)
asc, desc 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.
