Headless Insurance Program
The Policy API is designed to work with the Configuration API. The same field definitions you configure — policy fields, exposure fields, option sets — are the fields you write when creating policies through transactions.- Configure your insurance program — define fields, option sets, exposure types
- Create policies via
POST /transaction/new-business - Manage the lifecycle — endorse, cancel, reinstate, renew
- Query state — get a policy at any point in time, see full audit trail
Core Concepts
Transactions
Policies are modified through immutable transactions. Each transaction records what changed and produces a new policy version.| Transaction | Description |
|---|---|
| New Business | Creates a new policy with initial state |
| Endorse | Modifies an existing policy (add/remove exposures, change fields) |
| Cancel | Cancels a policy from a given date |
| Reinstate | Reinstates a previously cancelled policy |
| Renew | Renews a policy for a new term |
Segments
A segment is a date range where policy state is identical. Segments are derived from final state — they are not one-to-one with transactions. Adjacent segments with identical data are automatically merged. For example, three transactions can produce a single segment if the net effect returns the policy to a uniform state across the term.Versions
Each transaction produces a new version with a complete set of segments representing the full policy timeline. You can query any historical version. For a deeper explanation of these concepts, see Concepts. For a full worked example tracing 9 transactions through a realistic policy lifecycle, see the Lifecycle Walkthrough.API Endpoints
Transactions (write)
| Method | Endpoint | Description |
|---|---|---|
| POST | /v1/policies/transaction/new-business | Create a new policy |
| POST | /v1/policies/{policyId}/transaction/endorse | Endorse an existing policy (coming soon) |
| POST | /v1/policies/{policyId}/transaction/cancel | Cancel a policy (coming soon) |
| POST | /v1/policies/{policyId}/transaction/reinstate | Reinstate a cancelled policy (coming soon) |
| POST | /v1/policies/transaction/renew | Renew a policy for a new term (coming soon) |
| DELETE | /v1/policies/{policyId}/transactions/{transactionId} | Delete most recent transaction (coming soon) |
Queries (read)
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/policies/list | List policies (latest version per policy, with segment scope filtering) |
| GET | /v1/policies/versions | List policy versions across all policies |
| GET | /v1/policies/{policyId}/versions/{version} | Get a specific policy version with segments |
| GET | /v1/policies/{policyId}/versions | List versions for a single policy |
| GET | /v1/policies/{policyId}/transactions | Transaction audit trail (coming soon) |
Reporting
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/policies/bordereau | Bordereau export (coming soon) |
| GET | /v1/policies/{policyId}/earned-premium | Earned premium calculation (coming soon) |
Configuration
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/policies/configuration | Get field configuration |
Permissions
| Operation | Permission |
|---|---|
| List, Get, Configuration, History | company.policy:read |
| New Business, Renew | company.policy:create |
| Endorse, Cancel, Reinstate | company.policy:update |
| Delete Transaction | policy:delete |
Example: Create a Policy
Request
POST /v1/policies/transaction/new-business
Response
201 Created
Key Points
policyStartDate/policyEndDatedefine the policy term boundariesfieldModelV1Data.policycontains all policy-level fields, with exposures nested insidefullTermPolicyInfoandfullTermPolicyBillingare required on every policy- Exposures reference existing exposure records by
id— create exposures first via the Exposures API transactionTimestampis optional — defaults to the current time if omitted
Previous CRUD API
The previous CRUD endpoints (POST /v1/policies, DELETE /v1/policies/{policyId}) are deprecated. See Policy CRUD (Deprecated).