curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/list \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/list"
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/list', 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/list",
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/list"
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/list")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/list")
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-446655440002",
"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"
}
]
}
}
],
"totalCount": 1
}List Policies
Returns a paginated list of policies, resolving each policy to its latest version
(or the latest version as of timeTravelBackToDate), then applying segment scope
filters and field-level JSONB filters.
Example questions this endpoint answers:
- “Show me all current policies” —
segmentScope="all", no filters - “Current policies providing coverage on March 15” —
segmentScope={"asOf":"2025-03-15"} - “Current policies providing coverage during Q1” —
segmentScope={"fromDate":"2025-01-01","toDate":"2025-03-31"} - “What did the book of business look like on Jan 1?” —
timeTravelBackToDate=2025-01-01,segmentScope="all"
Use segmentScope to control which segments within each policy version participate
in filtering:
"all"— every segment of the resolved version{"asOf":"2025-03-15"}— point-in-time: segments wherestartDate <= asOf <= endDate{"fromDate":"2025-01-01","toDate":"2025-12-31"}— date range: segments overlapping the window
Use timeTravelBackToDate to see what the book of business looked like at a prior point
in time. Each policy is resolved to the version that was latest at that timestamp.
Use detail=full to include complete field data for the scope-matched segments in each
result. Use detail=summary for lightweight responses with only matched segment date ranges.
Pagination is zero-based: pageNumber=0 is the first page. pageSize
defaults to 50.
Required permission: policy.view
curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/list \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/list"
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/list', 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/list",
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/list"
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/list")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/policies/list")
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-446655440002",
"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"
}
]
}
}
],
"totalCount": 1
}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
Query Parameters
Zero-based page index (default 0).
x >= 0Number of records per page (default 50).
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 resolved
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.
Resolve each policy to the version that was latest at this date. Useful for reconstructing the book of business as it was known at a prior point in time.
Field to sort results by
policyId, createdAt, versionCreatedAt Sort direction (default desc)
asc, desc Response
Paginated list of policies
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.
