- Policies are insurance contracts issued to insureds
- Each policy has a number, primary insured, and effective dates
- Policies are divided into segments when exposures change mid-term
- Policies can be created directly for historical imports, or via the quote→bind flow
- Results are paginated with a fixed page size of 50
API Endpoints
- List Policies - Retrieve paginated list of policies with filtering and sorting
- Get Policy - Retrieve detailed policy information including segments, coverages, and rating inputs
- Create Policy - Create a policy directly (for historical imports)
- Delete Policy - Soft delete a policy by ID
Policy Segments
When exposures (insureds) are added, removed, or modified mid-term, policies are automatically divided into segments. Each segment represents a period where policy data is constant. Example: A policy running from Jan 1 to Dec 31 has one exposure. On June 1, a second exposure is added. The policy will have two segments:- Segment 1: Jan 1 - May 31 (one exposure)
- Segment 2: Jun 1 - Dec 31 (two exposures)
- Date range (
start,end) - Status (
bound,quoted,cancelled) - Premium and base premium totals
- Full coverage details with limits
- Exposure-level rating inputs showing how premiums were calculated
Time Travel (Historical Views)
The Get Policy endpoint supports theasOf query parameter to retrieve the policy state as it existed at a specific point in time:
- Auditing: Understanding the policy state at a specific date
- Reporting: Generating historical reports
- Debugging: Seeing how the policy looked before endorsements
Creating Policies
The Create Policy endpoint is primarily designed for historical imports where policies need to be created without going through the standard quote→bind wizard flow. Workflow:- Create insureds first via
POST /insureds - (Optional) Create broker via
POST /brokersif policy has a broker - Create the policy with insured and broker references via
POST /policies - The endpoint automatically creates insured snapshots with the provided
applicationData
Required Fields
| Field | Type | Description |
|---|---|---|
referenceId | string | Policy number (must be unique per company) |
startsAtDate | date | Policy effective start date (YYYY-MM-DD) |
endsAtDate | date | Policy effective end date (YYYY-MM-DD) |
type | string | Policy type (C, N, T, O, P, S, Q, R, A) |
billingPeriod | string | Billing frequency (annual, quarterly, monthly, etc.) |
insureds | array | At least one insured with exactly one “primary” |
coverages | array | At least one coverage with valid coverageTypeId |
Optional Fields
| Field | Type | Description |
|---|---|---|
coverageTimezone | string | IANA timezone (defaults to company default) |
description | string | Policy description |
premium | number | Premium in cents (overrides rating calculation) |
brokerId | uuid | ID of existing broker (use POST /brokers first) |
Policy Types
| Code | Description |
|---|---|
| C | Claims Made |
| N | New Claims Made |
| T | Tail |
| O | Occurrence |
| P | Occurrence + Claims Made |
| S | Split (Half Claims Made/Occurrence) |
| Q | Quota Share |
| R | Occurrence + Claims Made + Tail |
| A | Claims Made (Alternative) |
Policy Fields (List Response)
| Field | Type | Description |
|---|---|---|
id | uuid | Policy identifier |
companyId | uuid | Company identifier |
number | string | Policy number |
createdAt | datetime | When the policy was created (ISO 8601) |
primaryInsuredId | uuid/null | ID of the primary insured on this policy |
Policy Fields (Get Response)
The Get Policy endpoint returns detailed information including all list fields plus:| Field | Type | Description |
|---|---|---|
policyId | uuid | Policy identifier (same as id) |
policyNumber | string/null | Policy number (same as referenceId) |
referenceId | string/null | Policy reference ID |
startsAtDate | date/null | Policy effective start date |
endsAtDate | date/null | Policy effective end date |
status | string | Current policy status (see below) |
termStart | date/null | Policy term start date |
termEnd | date/null | Policy term end date |
sourceTransactionId | uuid/null | Transaction that created/modified the policy |
effectiveTimestamp | datetime/null | When current state became effective |
segments | array | Policy segments with coverage and exposure details |
type | string/null | Policy type code (C, N, T, O, etc.) |
description | string/null | Policy description |
coverageTimezone | string/null | IANA timezone for coverage dates |
currencyCode | string/null | ISO 4217 currency code (e.g., “USD”) |
prevPolicyId | uuid/null | ID of previous policy (for renewal chains) |
cancelledAt | datetime/null | Timestamp when policy was cancelled |
brokerId | string/null | ID of the broker associated with this policy |
recipientName | string/null | Name of the policy recipient |
recipientEmail | string/null | Email of the policy recipient |
primaryInsuredName | string/null | Name of the primary insured |
cancellationReason | string/null | Reason for policy cancellation |
cancellationExplanation | string/null | Additional cancellation explanation |
Policy Status Values
| Status | Description |
|---|---|
active | Policy is currently in effect |
not_started | Policy start date is in the future |
expired | Policy end date is in the past |
pending_signature | Awaiting policyholder signature |
pending_payment | Awaiting payment |
pending_actions | Awaiting both signature and payment |
pending_renewal | Within 60 days of renewal date |
renewal_in_progress | Renewal submission created but not bound |
renewed | Policy has been renewed |
cancelled | Policy has been cancelled |
Segment Fields
Each segment in thesegments array contains:
| Field | Type | Description |
|---|---|---|
start | date | Segment start date |
end | date | Segment end date |
status | string | Segment status (bound, quoted, cancelled) |
premium | number/null | Total premium for segment (cents) |
basePremium | number/null | Base premium before adjustments (cents) |
coverages | array | Coverages active during this segment |
exposures | array | Exposures with premium breakdown and rating inputs |
Exposure Fields
Each exposure in a segment contains:| Field | Type | Description |
|---|---|---|
exposureId | uuid | Exposure (insured) identifier |
exposureType | string/null | Type of exposure (e.g., “company”, “distribution_center”) |
premium | number/null | Premium for this exposure (cents) |
basePremium | number/null | Base premium before adjustments (cents) |
ratingInputs | object/null | Rating factors by coverage type (see below) |
Rating Inputs Structure
TheratingInputs object is keyed by coverage type ID. Each coverage contains rating factor objects with:
| Field | Type | Description |
|---|---|---|
fieldName | string | Human-readable factor name |
adjustedPremium | number | Premium after factor applied |
multiplier | number/array | Multiplier value(s) |
value | number/array | Base value(s) used |
days | integer | Days for pro-rata calculations |
base | integer | Base days (typically 365) |
Filtering and Sorting
Filter Parameters
| Parameter | Type | Description |
|---|---|---|
primaryInsuredId | uuid | Filter by primary insured ID |
filterText | string | Text search across policy number and other fields |
Sorting Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
sortBy | string | createdAt | Field to sort by (createdAt, updatedAt, number, startsAtDate, endsAtDate) |
sortDirection | string | desc | Sort direction (asc or desc) |
Pagination
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number (1-based, page size 50) |
items- Array of policies for the current pagetotalCount- Total number of matching policies across all pages
Permissions
Access to policies requires the appropriate permissions based on your API key:| Operation | Required Permission |
|---|---|
| List Policies | company.policy:read |
| Get Policy | company.policy:read |
| Create Policy | company.policy:create |
| Delete Policy | policy:delete |
Example: Create Policy Request
201 Created
