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
Lists or searches the company’s policies (the book of business), one row per
policy at its latest version, with paging, text search and field filters.
Use segmentScope to find policies with coverage on a date or in a period,
and timeTravelBackToDate to see the book as it stood on an earlier date. A
cancelled policy keeps its segments after the cancellation date, marked
policyStatus: cancelled, so read each segment’s policyStatus with
detail=full to tell in-force coverage from cancelled coverage.
Each policy resolves to its latest version (or the latest version as of
timeTravelBackToDate) before segment scope and field filters apply. To get
every matching version, use List Policy Versions
(listPolicyVersionsCrossPolicy). To read one policy in full, use List
Single Policy Versions (listSinglePolicyVersions).
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.
Use filterText to search: the whole phrase, matched against the policy’s
searchable fields on any segment of its latest version. It is ANDed with
the other filters, including under an as-of or time-travel lens.
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
Query Parameters
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
Free-text search. The whole phrase is matched as a substring of the
policy's searchable fields (the Policy fields declared in your configuration's
searchFields rows, plus its policy number), ignoring case, accents and
repeated spaces; a phrase typed like a phone number also matches its
digits. A policy matches when any segment of its latest version holds
the phrase.
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 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.
