> ## 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.

# Overview

> Manage quotes using the Field Model V1 data structure

Quotes are top-level FMV1 entities with their own field definitions. Custom field data lives in a `quote` object on create/update and a `data` object on GET responses, with exposures in an `exposures` array. The available fields are configured per company — use the Configuration endpoint to discover them.

## Data Structure

Each quote contains:

* **`quote`** (create/update) / **`data`** (GET response) — quote-level custom field values (key-value pairs). Includes read-only lifecycle fields in responses.
* **`exposures`** — array of exposure objects, each with custom field values.

## Lifecycle Fields

These fields are **system-managed** and read-only. They appear in GET/List responses inside `data` but are rejected on create/update and omitted from the Configuration endpoint:

| Field               | Description                       |
| ------------------- | --------------------------------- |
| `quoteType`         | Quote type (e.g., "New Business") |
| `quoteStatus`       | Current status                    |
| `quoteNumber`       | Auto-generated quote number       |
| `quoteBindErrors`   | Binding validation errors         |
| `quoteSubmissionId` | Associated submission ID          |

## API Endpoints

| Method | Endpoint                    | Description                                                                                                          |
| ------ | --------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| GET    | `/v1/quotes`                | List quotes                                                                                                          |
| POST   | `/v1/quotes`                | Create a quote                                                                                                       |
| GET    | `/v1/quotes/{quoteId}`      | Get a quote                                                                                                          |
| PUT    | `/v1/quotes/{quoteId}`      | Update a quote (full replace)                                                                                        |
| DELETE | `/v1/quotes/{quoteId}`      | Delete a quote                                                                                                       |
| POST   | `/v1/quotes/{quoteId}/send` | Send a quote                                                                                                         |
| POST   | `/v1/quotes/{quoteId}/bind` | Bind a quote to create a Basic Policy (documented under [Basic Policies](/api-v1-reference/policies/basic-overview)) |
| GET    | `/v1/quotes/configuration`  | Get field configuration                                                                                              |

## Configuration

Call `GET /v1/quotes/configuration` to get JSON Schemas of available fields for your company. The response contains:

* **`quote`** schema — fields for the `quote` object (excludes calculated fields, policy-only fields, server-populated fields, and lifecycle fields)
* **`exposure`** schema — fields for each `exposures[]` item

Lifecycle fields are excluded from the configuration.

## Permissions

| Operation                | Permission             |
| ------------------------ | ---------------------- |
| List, Get, Configuration | `company.quote:read`   |
| Create                   | `company.quote:create` |
| Update                   | `company.quote:update` |
| Delete                   | `company.quote:delete` |
| Bind                     | `company.quote:create` |
| Send                     | `company.quote:update` |

## Example Create Request

```json theme={null}
{
  "submissionId": "550e8400-e29b-41d4-a716-446655440010",
  "quote": {
    "policyStartDate": "2025-01-01",
    "policyEndDate": "2026-01-01",
    "policyType": "new_business",
    "policyTimeZone": "America/New_York",
    "premium": 15000
  },
  "exposures": [
    {
      "exposureName": "Acme Corp",
      "employeeCount": 150
    }
  ]
}
```

<Note>
  `policyNumber` and `policyEffectiveDate` are not required on create. The only required fields are `policyStartDate`, `policyEndDate`, `policyType`, and `policyTimeZone`.
</Note>

## Example Response

```json theme={null}
{
  "id": "550e8400-e29b-41d4-a716-446655440001",
  "companyId": "550e8400-e29b-41d4-a716-446655440000",
  "submissionId": "550e8400-e29b-41d4-a716-446655440010",
  "policyId": null,
  "data": {
    "policyStartDate": "2025-01-01",
    "policyEndDate": "2026-01-01",
    "policyType": "new_business",
    "policyTimeZone": "America/New_York",
    "premium": 15000,
    "quoteType": "New Business",
    "quoteStatus": "in_progress",
    "quoteNumber": "Q-2025-001"
  },
  "exposures": [
    {
      "exposureName": "Acme Corp",
      "employeeCount": 150
    }
  ],
  "createdAt": "2025-01-15T10:30:00.000Z",
  "updatedAt": null,
  "createdBy": "google-oauth2|123456789"
}
```
