curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType} \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}"
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}/entities/{entityType}', 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}/entities/{entityType}",
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}/entities/{entityType}"
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}/entities/{entityType}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}")
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": [
{
"id": "550e8400-e29b-41d4-a716-446655440301",
"fieldModelV1Data": {
"exposureName": "Acme Corp HQ"
},
"createdAt": 1736937000,
"createdBy": "google-oauth2|123456789",
"updatedAt": 1736937000,
"updatedBy": null,
"createdByName": "Jane Adjuster",
"updatedByName": null
}
],
"hasMore": false,
"totalCount": 1
}List Entities
Lists or searches records of one type: claims and incidents (event),
insureds (exposure), submissions, quotes, people (claimants, attorneys,
brokers, contacts) or organizations (law firms, brokerages, vendors). Use
it to find a record’s id by its name or a claim’s reference number with
filterText, then read the record with Get Entity (getEntity). For a
whole book as a CSV or spreadsheet, use Start Entity Export Run
(startEntityExportRun); for policies, use List Policies
(listPoliciesTransactionModel).
Returns a paginated list of {entityType} entities. One parametric endpoint
serves all six CRUD entity types.
Free-text search (filterText) matches the whole phrase as a substring
of a search index, not of every field. A record is indexed by its display
name, an Event’s reference ID, and the fields your configuration’s
searchFields rows name for this type, which can include a custom-object
sub-field by its dotted path (vehicles.vin). Any other field is not
searched, and neither is a linked record’s name. So a word that appears
only in an unlisted field, such as a law firm’s name inside a claim’s
lawsuit details, finds nothing. Export Configuration
(exportFmv1Configuration) shows the searchFields rows. When a search
misses, search the related record instead (for example the law firm as an
organization, or the claimant as a person) and follow its link, filter
on a declared listFilters key with filters, or walk the pages and read
each record’s fieldModelV1Data. See the parameter.
Field-value filtering (filters) accepts tenant filters only as
{ fieldType: "declared", key, operator, value }, where key names a
listFilters definition for this entity’s list surface. Explicit fixed
system-filter forms remain supported. Implicit field-derived forms fail
with HTTP 400 and code implicit-filters-disabled.
Sorting is config-driven — sortBy accepts createdAt (default),
updatedAt, a declared list column key, or any configured field
referenceId. An unknown or unsortable sortBy is a 400
InvalidSortBy.
Pagination is zero-based (pageNumber=0 is the first page); pageSize
defaults to 51. To enumerate a whole book, walk pageNumber upward until
hasMore is false, pairing it with an explicit sortBy / sortDirection
so the ordering is fixed across the walk. pageNumber must be a
non-negative integer and pageSize a positive integer; anything else is a
400.
Unrecognised query parameters are rejected with 400 InvalidRequest,
and the message lists the ones this endpoint accepts. Paging has exactly one
spelling here — pageNumber — so ?page=, ?offset=, ?cursor= and
friends are errors rather than silently ignored. They used to be ignored,
which made a book larger than one page impossible to walk: the endpoint kept
answering with the first page and hasMore: true.
Required permission: <resource>.view for the entity’s resource (event.view,
exposure.view, quote.view, submission.view, person.view,
organization.view), derived from the path’s
{entityType}. See
Permissions.
curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType} \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}"
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}/entities/{entityType}', 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}/entities/{entityType}",
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}/entities/{entityType}"
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}/entities/{entityType}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}")
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": [
{
"id": "550e8400-e29b-41d4-a716-446655440301",
"fieldModelV1Data": {
"exposureName": "Acme Corp HQ"
},
"createdAt": 1736937000,
"createdBy": "google-oauth2|123456789",
"updatedAt": 1736937000,
"updatedBy": null,
"createdByName": "Jane Adjuster",
"updatedByName": null
}
],
"hasMore": false,
"totalCount": 1
}Authorizations
Path Parameters
Field Model V1 entity type (lowercase kebab-case URL slug). One of the six
CRUD entity types: event, exposure, quote, submission, person,
organization. policy is NOT valid here — Policy has no generic CRUD (its
writes go through the policy transaction endpoints), though it does have a
read-only /configuration schema.
event, exposure, quote, submission, person, organization Query Parameters
Free-text search, ANDed with every other filter. The whole phrase is matched
as a substring of the record's searchable fields (the fields declared in your
configuration's searchFields rows, plus the record's display name), ignoring
case, accents and repeated spaces: acme freight finds "Acme Freight Inc" but
not "Freight, Acme". A phrase typed like a phone number also matches its digits.
An Event's reference ID is always searchable. A Submission's name and a
Person's or Organization's email require searchFields rows.
Other fields are not searched, and neither are the names of linked records:
a claim whose only mention of "Northgate" is its insured's name is not found
by northgate. When a search misses, search the linked record's own type
(the exposure, person or organization) and follow its link, or page through
the list and read each item's fields.
JSON-encoded array of filters applied server-side with AND semantics.
Tenant filters must be { "fieldType": "declared", "key", "operator", "value" }, where key names a listFilters definition for this entity's
list surface. The definition controls the expression, logical result type, and
permitted operators.
Explicit fixed system-filter forms (systemUser, systemDate, and systemId)
are also supported. Implicit field-derived forms such as text, number,
optionSet, or join fail with HTTP 400 and code
implicit-filters-disabled; use the corresponding declared definition key.
See the Configuration API for the tenant's listFilters definitions.
Column to sort by. Accepts createdAt, updatedAt, the key of a list
column declared for the entity type's list, or any configured field
referenceId for the entity type (sorting is config-driven). Each value
sorts by what it reads as: numbers (including percentages) by value, text
case-insensitively with numbers in natural order, dates by day, option sets
by option label, addresses by country then state, a multi-value field by its
first value, and blanks last in either direction. An unknown value, or one
that cannot be sorted (linked-record and user fields, calculated list
columns, structured values, embedded exposures), is a 400
InvalidSortBy. Default createdAt.
