> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aiinsurance.io/llms.txt
> Use this file to discover all available pages before exploring further.

# API Changelog

> Track updates and improvements to the AI Insurance API

## Product updates

New updates and improvements to the AI Insurance REST API.

***

## May 13 2026

### Configuration Rating Outputs API

**Changed**

* `POST /api/external/companies/{companyId}/configuration/rating/outputs` and `GET /api/external/companies/{companyId}/configuration/rating/outputs` — Field definitions now accept and return an optional `smartTagsNeeded` boolean. When `true`, the rater pushes this field's output into the smart-tag bucket at rating time, allowing the auto-created `AII{key}PrimaryInsured` smart tag to resolve a value. When omitted or `false`, the field is still displayed but the smart tag resolves to `null`.

### Submissions API

**Added**

* `GET /api/external/companies/{companyId}/submissions/{submissionId}/loss-history` — Retrieve the loss history entries on a submission. Returns `{ items: LossHistoryEntry[], totalCount: number }` or `{ items: [], totalCount: 0 }` when no loss history has been set. Requires `company.submission:read`.
* `POST /api/external/companies/{companyId}/submissions/{submissionId}/loss-history` — Append entries to a submission's loss history without replacing existing ones. Same request shape as PUT (`{ history: LossHistoryEntry[] }`), but entries are added to the end. Requires at least one entry; rejects unknown fields. Requires `submission:update`.

***

## May 12 2026

### Submissions API

**Added**

* `PUT /api/external/companies/{companyId}/submissions/{submissionId}/loss-history` — Set (replace) the loss history on a submission. Accepts `{ history: LossHistoryEntry[] }` where each entry has a `year` and claim `data` (only `totalIncurred` is required). Returns `{ success: true }`. For FMV1-enabled companies, automatically recomputes computed loss history fields on associated quotes. Requires `submission:update`.

***

## May 8 2026

### Submissions API

**Changed**

* `POST /api/external/companies/{companyId}/submissions/{submissionId}/files` — Now accepts files of any content type, not just `application/pdf`. The `400 UnsupportedFileType` error has been removed. The multipart field name changed from `files` to `file`.

***

## April 28 2026

### Submissions API

**Added**

* `POST /api/external/companies/{companyId}/submissions/{submissionId}/files` — Attach one or more PDF files to an existing submission. Accepts `multipart/form-data` with each file in a part named `files`; non-PDF content types are rejected with `400 UnsupportedFileType`. Returns `201 { fileIds: string[] }` with IDs in upload order. Files appear in the submission's Files tab. Requires `submission.file:create`.

***

## April 27 2026

### Address Resolution API

**Added**

* `GET /api/external/companies/{companyId}/resolve-address` — Geocode a freeform address string and return its structured subfields (`street`, `city`, `state`, `county`, `country`, `zipCode`) in the shape Field Model V1 rating expects. Pre-flight utility: integrators call this before building create/update payloads so addresses include all required pieces (especially `county`). `zipCode` is returned as a string with leading zeros preserved. Failures (empty input, no match, missing required subfield, upstream geocoder error) surface as `400` (or `502` for upstream errors) with a distinct `problemCode` — partial addresses are never returned as success. Writes are not auto-enriched. Requires `company:read`.

***

## April 24 2026

### Configuration Rating Fields API

**Added**

* `PUT /api/external/companies/{companyId}/configuration/rating/fields/rank` — Reorder rating input fields within a single `(companyId, entityType)` tuple by rewriting `application_fields.rank`. The array index of each `fieldId` becomes its new rank. The provided `fieldIds` must exactly match the set of rating fields currently defined for the entity type — partial reorders, duplicates, unknown ids, and missing ids are rejected with `400`. Updates UI ordering only; does not modify `rating_engine_revisions.config`. Requires `company:update`.

**Changed**

* `GET /api/external/companies/{companyId}/configuration/rating/fields` — Response now includes `rank` (integer, nullable), the UI rendering order of the field within its entity type. Lower values render first; `null` renders last. Not used as the endpoint's sort key.

***

## April 22 2026

### Configuration Rating Form Logic API

**Added**

* `GET /api/external/companies/{companyId}/configuration/rating/form-logic` — List form-logic rules from a rating engine revision's config JSON. Requires `ratingEngineRevisionId` query parameter. Supports filtering by `ruleName` (exact match) and `id`, sorting by `ruleName` (default) or `rank`.
* `POST /api/external/companies/{companyId}/configuration/rating/form-logic` — Create a form-logic rule in a rating engine revision's config JSON (`config.policyFormLogicConfigs`). Rules use a `shouldAdd` conditional expression that supports `AND`/`OR` branches, leaf comparisons (`=`, `!=`, `<`, `<=`, `>`, `>=`, `IN`, `NOTIN`, `EXISTS`, `NOTEXISTS`, `SOME`), and an inverted-leaf shape. Requires `ratingEngineRevisionId`, `revisionStrategy`, `ruleName`, `rank`, and `shouldAdd`.
* `DELETE /api/external/companies/{companyId}/configuration/rating/form-logic/{formLogicId}` — Remove a form-logic rule from a rating engine revision's config JSON. Requires `ratingEngineRevisionId` and `revisionStrategy` query parameters.

***

## April 15 2026

### Configuration Rating Presets API

**Added**

* `GET /api/external/companies/{companyId}/configuration/rating/presets` — List coverage limit presets from a rating engine revision's config JSON. Requires `ratingEngineRevisionId` query parameter. Supports filtering by `coverageTypeKey` and `id`, sorting by `setName` or `coverageTypeKey`.
* `POST /api/external/companies/{companyId}/configuration/rating/presets` — Create a coverage limit preset in a rating engine revision's config JSON. For rating-engine companies where presets are stored in `config.coverageLimitPresets`, not in the `coverage_limit_presets` table. Requires `ratingEngineRevisionId` and `revisionStrategy` parameters. Supports default-steal (setting `isDefault: true` unsets existing defaults for the same coverage type).
* `DELETE /api/external/companies/{companyId}/configuration/rating/presets/{presetId}` — Remove a coverage limit preset from a rating engine revision's config JSON. The preset is permanently removed from the `coverageLimitPresets` array.

***

## April 13 2026

### FMV1 Policy Transaction API — Read Endpoints

**Added**

* `GET /api/v1/external/companies/{companyId}/policies/list` — List policies with segment scope filtering, JSONB field filters, time travel, and pagination
* `GET /api/v1/external/companies/{companyId}/policies/versions` — Search across all policy versions (cross-version search)
* `GET /api/v1/external/companies/{companyId}/policies/{policyId}/versions` — List all versions for a single policy

These endpoints complete the read path for the transaction-based policy model. Use `segmentScope` to filter by date range, `filters` for field-level JSONB queries, and `detail=full` to include complete segment data.

### Configuration Presets API

**Changed**

* Moved coverage limit preset endpoints from `/configuration/rating/presets` to `/configuration/presets` — these endpoints operate on the `coverage_limit_presets` table (for non-rating-engine companies). The `/configuration/rating/presets` path will be used by new config-JSON endpoints for rating-engine companies. **The old path is no longer available — update existing integrations to use the new path.**

### Exposure Types API

**Added**

* `DELETE /api/external/companies/{companyId}/exposure-types/{exposureTypeId}` — Permanently delete an exposure type and remove it from the company's enabled types. Validates the type is not referenced by insureds (409) before deletion.

### Coverage Types API

**Added**

* `DELETE /api/external/companies/{companyId}/coverage-types/{coverageTypeId}` — Permanently delete a company-specific coverage type. Validates the type is not global (403), not enabled (409), and has no field associations (409) before deletion.

***

## April 10 2026

### Coverage Types API

**Added**

* `GET /api/external/companies/{companyId}/coverage-types` — List all coverage types (global and company-specific) with optional label filtering
* `POST /api/external/companies/{companyId}/coverage-types` — Create a company-specific coverage type
* `PUT /api/external/companies/{companyId}/coverage-types/enabled` — Replace the company's enabled coverage types list wholesale

### Exposure Types API

**Added**

* `GET /api/external/companies/{companyId}/exposure-types` — List exposure types with optional label filtering
* `POST /api/external/companies/{companyId}/exposure-types` — Create an exposure type and add it to the company's enabled exposure types

### Configuration Rating Outputs API

**Added**

* `GET /api/external/companies/{companyId}/configuration/rating/outputs` — List rating output fields with filtering by ID, sorting, and pagination
* `DELETE /api/external/companies/{companyId}/configuration/rating/outputs/{fieldId}` — Delete a rating output field and soft-delete its associated smart tag

***

## April 9 2026

### FMV1 Policy Transaction API

The FMV1 Policy API has been rebuilt around an immutable transaction model.
Policies are now managed through transaction endpoints rather than direct CRUD operations.

**Added**

* `POST /api/v1/external/companies/{companyId}/policies/transaction/new-business` — Create a new policy via a NEW\_BUSINESS transaction

The previous CRUD endpoints (`POST /v1/policies`, `DELETE /v1/policies/{policyId}`)
are deprecated and will be removed in a future release.

### Configuration Rating Outputs API

**Added**

* `POST /api/external/companies/{companyId}/configuration/rating/outputs` — Create a rating output field (`rating_engine_display`) with auto-created smart tag

### Configuration Rating Fields API

**Added**

* `DELETE /api/external/companies/{companyId}/configuration/rating/fields/{fieldId}` — Delete a rating input field, its application field association, and its entry in the rating engine revision config
* `GET /api/external/companies/{companyId}/configuration/rating/fields` — List rating input fields with filtering by ID and entity type, sorting, and pagination

***

## April 8 2026

### Configuration Rating Fields API

**Added**

* `POST /api/external/companies/{companyId}/configuration/rating/fields` — Create a rating input field and associate it with an entity type and rating engine revision

### Field Model V1 Quote Lifecycle Endpoints

**Added**

* `POST /api/v1/external/companies/{companyId}/quotes/{quoteId}/bind` — Bind a quote, creating a policy
* `POST /api/v1/external/companies/{companyId}/quotes/{quoteId}/send` — Send a quote, transitioning status to "sent"

***

## April 7 2026

### Configuration Fields API

**Added**

* `GET /api/external/companies/{companyId}/configuration/fields` — List entity fields with filtering by ID and entity name, sorting, and pagination
* `POST /api/external/companies/{companyId}/configuration/fields` — Create a field definition and associate it with an entity type (events, insureds, policies)
* `DELETE /api/external/companies/{companyId}/configuration/fields/{fieldId}` — Delete a field and its entity association

These endpoints manage entity-level configuration fields only. Rating fields are managed through separate `/configuration/rating/` endpoints.

***

### Field Model V1 Quotes API

**Added**

* `GET /api/v1/external/companies/{companyId}/quotes` — List quotes with pagination, sorting, and submission filtering
* `POST /api/v1/external/companies/{companyId}/quotes` — Create a quote with policy and exposure data
* `GET /api/v1/external/companies/{companyId}/quotes/{quoteId}` — Get a single quote
* `PUT /api/v1/external/companies/{companyId}/quotes/{quoteId}` — Update a quote (full replacement of policy and exposures)
* `DELETE /api/v1/external/companies/{companyId}/quotes/{quoteId}` — Soft-delete a quote
* `GET /api/v1/external/companies/{companyId}/quotes/configuration` — Get JSON Schemas for policy and exposure fields

Lifecycle fields (`quoteType`, `quoteStatus`, `quoteNumber`, `quoteBindErrors`, `quoteSubmissionId`) are read-only in responses and rejected on create/update.

***

## March 31 2026

### FMV1 Configuration Management API

**Added**

* `POST /api/v1/external/companies/{companyId}/configuration/generate` — Generate a blank FMV1 configuration template spreadsheet
* `POST /api/v1/external/companies/{companyId}/configuration/export` — Export FMV1 configuration to an existing Google Spreadsheet
* `POST /api/v1/external/companies/{companyId}/configuration/validate` — Validate a configuration spreadsheet
* `POST /api/v1/external/companies/{companyId}/configuration/compare` — Compare spreadsheet against database
* `POST /api/v1/external/companies/{companyId}/configuration/import` — Import configuration from a spreadsheet

These endpoints require the new **FMV1\_CONFIGURATION\_MANAGER** role. New permissions: `company.configuration:export` and `company.configuration:import`.

***

## March 30 2026

### Coverage Type Fields API

**Added**

* `POST /api/external/companies/{companyId}/coverage-types/{coverageTypeId}/fields` - Set fields on a company-specific coverage type

**Changed**

* `GET /api/external/companies/{companyId}/coverage-types/{coverageTypeId}/fields` - Response now includes a `metadata` object with `coverageTypeScope` (global or company) and `fieldSources` (database, static, or both)

***

## March 27 2026

### Coverage Type Fields API

**Added**

* `GET /api/external/companies/{companyId}/coverage-types/{coverageTypeId}/fields` - Get fields associated with a coverage type

### Field Model V1 Events API

**Changed**

* Event responses no longer include `lawsuitId` — lawsuits are now managed via entity relationships, not auto-created on event creation
* `fieldModelV1Data` is now always present (non-nullable) in event responses
* List endpoint now filters `type` and `status` via `fieldModelV1Data` JSONB fields instead of legacy columns
* Creating an event no longer auto-creates a lawsuit record

### Field Model V1 Exposures API

**Changed**

* Exposures now read and write exclusively from `fieldModelV1Data`. Legacy columns (`name`, `entity_type`) are no longer populated on create or update.
* List endpoint filtering and sorting now operate on JSONB fields (`exposureType`, `exposureName`) instead of legacy columns.

***

## March 23 2026

### Assignees API

**Added**

* `GET /api/external/companies/{companyId}/{entityType}/{entityId}/assignees` - List assignees for an entity
* `PUT /api/external/companies/{companyId}/{entityType}/{entityId}/assignees` - Set assignees for an entity (full replace)

Supports policies, submissions, insureds, and events.

***

## March 16 2026

### Field Model V1 Custom Objects API

**Added**

* `GET /api/v1/external/companies/{companyId}/custom-objects` - List custom object types
* `GET /api/v1/external/companies/{companyId}/custom-objects/{objectType}/configuration` - Get field schema and relationship metadata
* `GET /api/v1/external/companies/{companyId}/custom-objects/{objectType}` - List custom objects (paginated)
* `GET /api/v1/external/companies/{companyId}/custom-objects/{objectType}/{objectId}` - Get custom object by ID
* `POST /api/v1/external/companies/{companyId}/custom-objects/{objectType}` - Create custom object
* `PUT /api/v1/external/companies/{companyId}/custom-objects/{objectType}/{objectId}` - Update custom object (full replacement)
* `DELETE /api/v1/external/companies/{companyId}/custom-objects/{objectType}/{objectId}` - Delete custom object
* `PUT /api/v1/external/companies/{companyId}/custom-objects/{objectType}/{objectId}/relationships/{fieldRefId}/{targetId}` - Add relationship
* `DELETE /api/v1/external/companies/{companyId}/custom-objects/{objectType}/{objectId}/relationships/{fieldRefId}/{targetId}` - Remove relationship

***

## February 27 2026

### Insureds Configuration API

**New Features**

* **Get Insureds Configuration**: Response now includes `fieldEntityTypeMappings` (maps field keys to entity type associations). This allows API consumers to determine which fields apply to which entity types.
* **Entity-type scoped fields**: The configuration response now only includes fields for entity types that are enabled for your company, instead of the union of all possible entity-type-specific fields.
* **Improved validation errors**: When creating or updating an insured with a field that belongs to a different entity type, the error message now indicates which entity types the field belongs to, instead of the generic "Unknown field key" message.

***

## February 26 2026

### Create Policy API

**Breaking Changes**

* **Unified exposures array**: The `primaryInsured` field and separate `exposures` array have been replaced with a single `exposures` array. Exactly one exposure must have `role: "primary"`.
  * **Before**: Separate `primaryInsured` object (no `role` field) + optional `exposures` array (roles: `named`, `additional`, `related`)
  * **After**: Single required `exposures` array where one entry has `role: "primary"` and others have `role: "named"`, `"additional"`, or `"related"`
* **Field renames in docs**: `insuredType` → `role`, `applicationData` → `ratingInfo`, `insureds` → `exposures` (docs now match actual code field names)

***

## February 24 2026

### Field Model V1 Exposures API

**New Features**

* **Field Model V1 Exposures CRUD API**: Full operations for managing exposures with company-configured dynamic fields
  * `GET /api/v1/external/companies/{companyId}/exposures/configuration` - Get JSON Schema of available fields
  * `POST /api/v1/external/companies/{companyId}/exposures` - Create an exposure with dynamic fields
  * `GET /api/v1/external/companies/{companyId}/exposures` - List exposures with filtering and pagination
  * `GET /api/v1/external/companies/{companyId}/exposures/{exposureId}` - Retrieve a single exposure by ID
  * `PATCH /api/v1/external/companies/{companyId}/exposures/{exposureId}` - Update an exposure (full replacement of field data)
  * `DELETE /api/v1/external/companies/{companyId}/exposures/{exposureId}` - Soft delete an exposure
  * Fields are dynamically defined per company — use the configuration endpoint to discover available fields and types
  * Supports Text, Number, Boolean, Option Set, and Object field types
  * Required permissions: `company.insured:read`, `company.insured:create`, `insured:update`, `insured:delete`

### Field Model V1 Policies API

**New Features**

* **FMV1 Policies CRUD API**: Full operations for managing Field Model V1 policies
  * `GET /api/v1/external/companies/{companyId}/policies` - List policies with filtering, sorting, and pagination
  * `POST /api/v1/external/companies/{companyId}/policies` - Create a policy with segment data
  * `GET /api/v1/external/companies/{companyId}/policies/{policyId}` - Retrieve a single policy by ID
  * `DELETE /api/v1/external/companies/{companyId}/policies/{policyId}` - Soft delete a policy
  * `GET /api/v1/external/companies/{companyId}/policies/configuration` - Get JSON Schema for available custom fields
  * Segment-based data structure with policy, coverage, and exposure custom fields
  * Required permissions: `company.policy:read` (read operations), `company.policy:create` (write operations)

***

## February 19 2026

### Defendants API

**New Features**

* **Defendants CRUD API**: Full operations for managing defendants on lawsuits
  * `GET /api/external/companies/{companyId}/events/{eventId}/lawsuit/defendants` - List defendants with filtering and pagination
  * `POST /api/external/companies/{companyId}/events/{eventId}/lawsuit/defendants` - Create a defendant for a lawsuit
  * `GET /api/external/companies/{companyId}/events/{eventId}/lawsuit/defendants/{defendantId}` - Retrieve a single defendant by ID
  * `PATCH /api/external/companies/{companyId}/events/{eventId}/lawsuit/defendants/{defendantId}` - Update a defendant (send null to clear fields)
  * `DELETE /api/external/companies/{companyId}/events/{eventId}/lawsuit/defendants/{defendantId}` - Soft delete a defendant
  * Each defendant is either an insured (`insuredId`) or non-insured party (`nonInsuredName`)
  * FK validation for `insuredId`, `attorneyId`, and `lawFirmId`
  * Required permission: `company.event:export`

### Events API

**Improvements**

* **`lawsuitId` field**: Event responses now include `lawsuitId` (nullable). Create and update event requests accept an optional `lawsuitId` to associate a lawsuit with an event.

***

## February 17 2026

### Lawsuits API

**New Features**

* **Lawsuits CRUD API**: Full operations for managing lawsuits on events (1:1 relationship)
  * `POST /api/external/companies/{companyId}/events/{eventId}/lawsuit` - Create a lawsuit for an event (409 if one already exists)
  * `GET /api/external/companies/{companyId}/events/{eventId}/lawsuit` - Retrieve the lawsuit for an event
  * `PATCH /api/external/companies/{companyId}/events/{eventId}/lawsuit` - Update the lawsuit (send null to clear fields)
  * `DELETE /api/external/companies/{companyId}/events/{eventId}/lawsuit` - Soft delete the lawsuit
  * All fields are optional on create; update supports partial updates with null clearing
  * FK validation for `plaintiffAttorneyId` and `plaintiffLawFirmId`
  * Required permission: `company.event:export`

***

### Event Financials API

**New Features**

* **Void Event Transaction**: `PATCH /api/external/companies/{companyId}/events/{eventId}/financials/transactions/{transactionId}`
  * Void an existing financial transaction by setting `status: "void"`
  * Required `voidReason` field to document why the transaction was voided
  * Returns full transaction detail after voiding
  * Required permission: `company.payment:update`

***

## February 16 2026

### Attorneys API

**New Features**

* **Attorneys API**: Full CRUD operations for managing attorneys
  * `GET /api/external/companies/{companyId}/attorneys` - List attorneys with filtering and pagination
  * `POST /api/external/companies/{companyId}/attorneys` - Create a new attorney
  * `GET /api/external/companies/{companyId}/attorneys/{attorneyId}` - Get attorney details
  * `PATCH /api/external/companies/{companyId}/attorneys/{attorneyId}` - Update an attorney
  * `DELETE /api/external/companies/{companyId}/attorneys/{attorneyId}` - Soft delete an attorney
  * Filter by ID (single or array) or text search across attorney names
  * Sort by createdAt, updatedAt, or name
  * Optional `lawFirmId` to associate an attorney with a law firm payee

***

## February 11 2026

### Events API

**Improvements**

* **Get Events Configuration**: Response now includes `fieldCoverageTypeMappings` (maps field keys to coverage type associations) and `companyCoverageTypes` (list of enabled coverage type IDs). This allows API consumers to determine which fields apply to which coverage types.

***

## January 26 2026

### Exposures API

**New Features**

* **New `/exposures/` endpoints**: Added `/exposures/` as the preferred endpoint path for managing exposures (previously called "insureds")
  * `GET /api/external/companies/{companyId}/exposures` - List exposures with filtering and pagination
  * `GET /api/external/companies/{companyId}/exposures/{exposureId}` - Retrieve a single exposure by ID
  * `POST /api/external/companies/{companyId}/exposures` - Create a new exposure
  * `PATCH /api/external/companies/{companyId}/exposures/{exposureId}` - Update an existing exposure
  * `DELETE /api/external/companies/{companyId}/exposures/{exposureId}` - Soft delete an exposure
  * The existing `/insureds/` endpoints remain available for backwards compatibility

### Insured API

**New Features**

* **Get insured endpoint**: `GET /api/external/companies/{companyId}/insureds/{insuredId}`
  * Retrieve a single insured (exposure) by ID
  * Returns insured details including name, entity type, and associated policy IDs

***

## January 13 2026

### Smart Tags API

**New Features**

* **Smart Tags API**: List smart tags for a company
  * `GET /api/external/companies/{companyId}/smart-tags` - List smart tags with filtering and pagination
  * Filter by ID (single or array) or text search across tag names
  * Sort by createdAt, updatedAt, tagName, or tagDisplayName

### Policies API

**New Features**

* **Create policy endpoint**: `POST /api/external/companies/{companyId}/policies`
  * Create policies directly for historical imports without going through quote→bind flow
  * Takes existing insured IDs (insureds must be created first via POST /insureds)
  * Creates insured snapshots with optional applicationData for rating
  * Creates policy snapshot with coverages
  * Supports: policy type, billing period, timezone, premium override, broker info
  * Validates exactly one primary insured, policy number uniqueness
  * Returns `{ id }` with HTTP 201

***

## January 6 2026

### Event Financials API

**New Features**

* **Event Financials API**: Full management of financial transactions and reserves for events
  * `GET /api/external/companies/{companyId}/events/{eventId}/financials/transactions` - List transactions for an event
  * `POST /api/external/companies/{companyId}/events/{eventId}/financials/transactions` - Create payment or invoice
  * `GET /api/external/companies/{companyId}/events/{eventId}/financials/transactions/{transactionId}` - Get transaction details with line items
  * `GET /api/external/companies/{companyId}/events/{eventId}/financials/reserves` - Get reserve amounts by category
  * `PATCH /api/external/companies/{companyId}/events/{eventId}/financials/expected-totals` - Update expected totals/reserves
  * `GET /api/external/companies/{companyId}/events/financials/{transactionType}/totals` - Get financial totals across all events
  * Support for itemized and non-itemized transaction types
  * Transaction statuses: owed, paid, approved, void

### Policies API

**New Features**

* **List policies endpoint**: `GET /api/external/companies/{companyId}/policies`
  * Retrieve policies with filtering and pagination support

### Insured API

**New Features**

* **Create insured endpoint**: `POST /api/external/companies/{companyId}/insureds`
  * Create new insured (exposure) records with name and entity type
* **Delete insured endpoint**: `DELETE /api/external/companies/{companyId}/insureds/{insuredId}`
  * Soft delete insured records

***

## December 30 2025

### Payees & Transaction Categories

**New Features**

* **Payees API**: Full CRUD operations for managing payees
  * `GET /api/external/companies/{companyId}/payees` - List all payees with filtering
  * `GET /api/external/companies/{companyId}/payees/{payeeId}` - Get payee details
  * `POST /api/external/companies/{companyId}/payees` - Create new payee
  * `PUT /api/external/companies/{companyId}/payees/{payeeId}` - Update payee
  * `DELETE /api/external/companies/{companyId}/payees/{payeeId}` - Delete payee
  * Support for saved and non-saved payee types

* **Transaction Categories endpoint**: `GET /api/external/companies/{companyId}/transaction-categories`
  * Retrieve available transaction categories for accounting integration

**Improvements**

* Added `batchId` audit logging support for bulk operations

***

## December 22 2025

### Submissions & Configuration Endpoints

**New Features**

* **Submissions CRUD API**: Complete submission management
  * `GET /api/external/companies/{companyId}/submissions/{submissionId}` - Get submission details
  * `POST /api/external/companies/{companyId}/submissions` - Create new submission
  * `PUT /api/external/companies/{companyId}/submissions/{submissionId}` - Update submission
  * `DELETE /api/external/companies/{companyId}/submissions/{submissionId}` - Delete submission

* **Events configuration endpoint**: `GET /api/external/companies/{companyId}/events/configuration`
  * Retrieve event type configuration and available options

**Improvements**

* Updated currency field documentation to use JSON Schema `money` format type

***

## December 19 2025

### Brokers & Quotes Configuration

**New Features**

* **Brokers CRUD API**: Full broker management
  * `GET /api/external/companies/{companyId}/brokers` - List brokers
  * `GET /api/external/companies/{companyId}/brokers/{brokerId}` - Get broker details
  * `POST /api/external/companies/{companyId}/brokers` - Create broker
  * `PUT /api/external/companies/{companyId}/brokers/{brokerId}` - Update broker
  * `DELETE /api/external/companies/{companyId}/brokers/{brokerId}` - Delete broker

* **Quotes configuration endpoint**: `GET /api/external/companies/{companyId}/quotes/configuration`
  * Retrieve quote-related configuration settings

**Improvements**

* Added `force` parameter to `DELETE /events/{eventId}` for force deletion

***

## December 17 2025

### Brokerages & API Improvements

**New Features**

* **Brokerages CRUD API**: Complete brokerage management
  * `GET /api/external/companies/{companyId}/brokerages` - List brokerages
  * `GET /api/external/companies/{companyId}/brokerages/{brokerageId}` - Get brokerage details
  * `POST /api/external/companies/{companyId}/brokerages` - Create brokerage
  * `PUT /api/external/companies/{companyId}/brokerages/{brokerageId}` - Update brokerage
  * `DELETE /api/external/companies/{companyId}/brokerages/{brokerageId}` - Delete brokerage

**Improvements**

* Create endpoints now return `201 Created` status code (previously `200 OK`)
* Removed deprecated `requestorEmail` field from all endpoints

***

## December 11 2025

### Events API

**New Features**

* **Events CRUD API**: Full event lifecycle management
  * `GET /api/external/companies/{companyId}/events` - List events with filtering
  * `GET /api/external/companies/{companyId}/events/{eventId}` - Get event details
  * `POST /api/external/companies/{companyId}/events` - Create new event
  * `PUT /api/external/companies/{companyId}/events/{eventId}` - Update event
  * `DELETE /api/external/companies/{companyId}/events/{eventId}` - Delete event

**Improvements**

* Added `insuredIds` array field for multi-insured event support
* Removed legacy fields from events API for cleaner responses
* Added nullable fields documentation for events API

***

## December 5 2025

### Notes & Quote Operations

**New Features**

* **Notes API**: Create and retrieve notes
  * `GET /api/external/companies/{companyId}/notes` - List notes with filtering
  * `POST /api/external/companies/{companyId}/notes` - Create new note
  * Support for author override fields

* **Quote creation endpoint**: `POST /api/external/companies/{companyId}/quotes`
  * Create new quotes programmatically

* **Quote deletion endpoint**: `DELETE /api/external/companies/{companyId}/quotes/{quoteId}`
  * Delete quotes that are no longer needed

* **Quote update endpoint**: `PATCH /api/external/companies/{companyId}/quotes/{quoteId}`
  * Update existing quote fields

* **Quote binding endpoint**: `POST /api/external/companies/{companyId}/quotes/{quoteId}/bind`
  * Bind a quote to convert it to a policy

***

## December 4 2025

### Quotes API Consolidation

**Breaking Changes**

* **Consolidated quote endpoints**: Moved from submission-scoped paths to single company-level endpoints with optional filters
  * **Before**: `GET /api/external/companies/{companyId}/submissions/{submissionId}/quotes`
  * **After**: `GET /api/external/companies/{companyId}/quotes?submissionId={submissionId}`
  * All quote endpoints now use optional `submissionId` and `applicationId` query parameters instead of path parameters

**New Features**

* **Lightweight quote info endpoint**: `GET /api/external/companies/{companyId}/quotes-info`

  * Returns essential fields only (9 fields vs 40+)
  * Optimized for listing, searching, and filtering
  * \~3x faster response times for dashboard views
  * Fields: id, number, status, createdAt, updatedAt, description, policyId, policyCurrency, grandTotal

* **Enhanced pagination**: All list endpoints now support robust pagination

  * Page size: 50 quotes per page
  * 1-based indexing (page=1 is first page, page=0 coerced to 1)
  * Response includes `totalCount` for pagination UI

* **Advanced filtering**: Comprehensive query parameters for all list endpoints

  * `status`: Filter by single status or array of statuses
  * `filterText`: Full-text search across quote fields
  * `dateFrom`/`dateTo`: Filter by creation date range
  * `applicationId`: Filter by associated application

* **Flexible sorting**: Control result ordering
  * `sortBy`: Choose field (createdAt, updatedAt, status, number)
  * `sortDirection`: asc or desc
  * Default: Most recent first (createdAt desc)

**Improvements**

* **Unified response format**: All list endpoints return `{ items: [], totalCount: number }`
* **Updated quote statuses**: Status values now match actual implementation
  * Added: `in_progress`, `complete`, `sent`, `accepted`, `applied_to_policy`
  * Updated: More granular status tracking for quote lifecycle
* **Better data models**: Clear distinction between lightweight and full quote representations
* **Improved documentation**: Separate guides for submissions and quotes with detailed examples

***

## August 8 2025

### External API enhancements

**Improvements**

* **New submission creation**: Create submissions with complete policy, coverage, and insured data via `POST /api/external/companies/{companyId}/submissions`
* **Submission updates**: Update existing submissions by adding new quotes via `PUT /api/external/companies/{companyId}/submissions/{submissionId}`
* **Enhanced quote retrieval**: Get detailed quote information including policy data, coverages, and billing configuration via `GET /api/external/companies/{companyId}/quotes/{quoteId}`
* **Configuration endpoint**: Retrieve company-specific configuration including rating fields, entity types, and coverage options via `GET /api/external/companies/{companyId}/configuration`

**API structure improvements**

* All endpoints now use `/api/external/` prefix for better organization and versioning
* Enhanced data models with comprehensive `ImportPolicy`, `ImportPolicyCoverage`, and `ImportInsured` objects
* Added support for policy types: Claims Made (C), Occurrence (O), Claims Paid (P), and more
* Expanded quote response with billing details, forms management, and binding settings

**Developer experience**

* Complete API documentation with detailed request/response examples
* Enhanced error handling and validation
* Comprehensive data model reference with all field descriptions
* Support for complex insurance workflows including renewals and endorsements

***

## Initial Release

### Core API functionality

**New features**

* **List submissions**: Retrieve paginated submissions for a company with filtering and sorting options
* **List quotes**: Get all quotes associated with a specific submission
* **Quote management**: Basic quote retrieval and status tracking
* **Authentication**: API key-based authentication for secure access

**Data models**

* Core `Submission` object with status tracking and metadata
* Basic `Quote` object with pricing and status information
* Support for submission types: new business, renewals, and endorsements
* Quote status management: draft, active, expired, bound, declined, superseded

**API foundation**

* RESTful API design following industry standards
* Comprehensive error handling with detailed error responses
* Rate limiting and security best practices
* UUID-based resource identification
