- Fields are dynamically defined per company. Use the Configuration endpoint to discover available fields and their types.
- The request body for create is a flat JSON object where keys are field
referenceIds (e.g.,policyNumber,policyStartDate,policyType). - Exposures are nested inline in the policy — each exposure is an object in the
exposuresarray, with anidreferencing an existing exposure record. - Responses include a
fieldModelV1Dataobject containing all field values plus the nestedexposuresarray.
When to use Basic vs Transaction-Based Policies
| Use case | API |
|---|---|
| Simple data ingestion, policies that won’t be modified after creation, no audit trail needed | Basic Policies |
| Endorsements, cancellations, reinstatements, renewals, earned-premium reporting, full audit trail | Transaction-Based Policies |
Configuration
CallGET /v1/policies/configuration to get a JSON Schema of the available policy and exposure fields for your company. The same endpoint drives both the Basic and the Transaction-Based Policy APIs — one configuration, shared across both.
API Endpoints
- Get Configuration —
GET /v1/policies/configuration - Create Policy —
POST /v1/policies - List Policies —
GET /v1/policieswith filtering, sorting, pagination - Get Policy —
GET /v1/policies/{policyId} - Delete Policy —
DELETE /v1/policies/{policyId}(soft delete)
Permissions
| Operation | Required Permission |
|---|---|
| Get Configuration | company.policy:read |
| List Policies | company.policy:read |
| Get Policy | company.policy:read |
| Create Policy | company.policy:create |
| Delete Policy | policy:delete |
Filtering
| Parameter | Type | Description |
|---|---|---|
id | string or string[] | Filter by policy ID (single or array). |
policyNumberFilterText | string | Case-insensitive substring match against policyNumber only. Does not search any other field. |
filters | FieldModelV1ListFilter[] | Structured per-field filters against any FMV1 field or system column. Combined with AND semantics. See Filters below. |
Filters: structured field matching
Each item infilters is an object with fieldReferenceId, fieldType, operator, and a value (plus valueTo for between operators and systemColumn for systemUser / systemDate). The set of operators and the shape of value depend on fieldType.
Supported field types and their operators:
fieldType | Operators | value shape |
|---|---|---|
text | matches, contains, doesNotContain | string |
optionSet | in | string[] (allowed option keys) |
number | equals, greaterThan, lessThan, between | number (+ valueTo for between) |
boolean | equals | boolean |
date | on, before, after, between | { year, month, day } (+ valueTo for between) |
currency | equals, greaterThan, lessThan, between | number (+ valueTo for between) |
address | contains | string (substring across street/city/state/zip) |
join | in | string[] (allowed linked-entity IDs) |
textList / numberList / addressList | listIncludes | one item value of the list element type |
optionSetList | listIn, listAll, listExcludes | string[] |
systemUser | in | string[] + systemColumn: "createdBy" | "updatedBy" |
systemDate | on, before, after, between | { year, month, day } + systemColumn: "createdAt" | "updatedAt" |
policyStatus is active:
Sorting
| Value | Description |
|---|---|
createdAt | Sort by creation date (default) |
updatedAt | Sort by last update date |
number | Sort by policy number |
sortDirection parameter (asc or desc) to control sort order.
Example Create Request
Before creating a policy, create any exposures it references via the Exposures API —primaryInsured and each entry in exposures[].id must point to an existing exposure record.
201 Created
Example Get Response
policyStartDate, policyEndDate, policyEffectiveDate) are canonicalized on write from the { date: "YYYY-MM-DD", timezone } input form to the internal { day, month, year, timezone } form shown in responses.