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

# Rate, Quote, Bind

> Take a quote from creation to a bound policy, one request per step

Rate, Quote, Bind is how an insurance sale moves: price the risk, offer the
terms, accept them. Through the API, each step is a request you already use,
and each request carries what its step decides. There are no extra calls in
between.

| Step | Request | What it carries |
| - | - | - |
| **Rate**: create the quote and price it | [Create Entity](https://docs.go.aiinsurance.io/api-reference/entities/create-entity.md), then [Rate Saved Quote by Id](https://docs.go.aiinsurance.io/api-reference/field-model-rating/rate-saved-quote-by-id.md) | The quote's fields and its setup in `pricingSetup`; then `saveToQuote: true`, which keeps the rating on the quote |
| **Quote**: settle the offer | Complete: [Update Entity](https://docs.go.aiinsurance.io/api-reference/entities/update-entity.md) with `quoteStatus: "complete"` | At Full Billing, `invoices: "generate"`, which generates the invoices the quote offers |
| **Bind**: issue the policy | [Bind Quote](https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/bind-quote.md) | The invoices it binds: `invoices: "saved"` or `"generate"` |

Paths below are under `/api/v1/companies/{companyId}`.

## Before you start

* The quote's submission and its exposures exist. Reference them by `id`.
* Your API key's role holds `quote.create`, `quote.edit`, `quote.rate` and
  `quote.bind`, and `quote.view` to read the quote back. With `form.create`
  and `form.edit` too, the create adds the quote's recommended quote forms and
  the bind its policy forms (see
  [Recommended forms on quote create](https://docs.go.aiinsurance.io/api-reference/entities/overview.md#recommended-forms-on-quote-create)).
* You know the name of the rating workflow to run. A rate that names none, or
  an unknown one, returns `400` listing your company's workflows.

## Choose the path

At a company that invoices, a quote states the
[pricing stack layer](https://docs.go.aiinsurance.io/api-reference/invoicing/pricing-stack.md#the-intended-layer)
it is meant to bind at. Complete and Bind refuse a quote whose bind would land
anywhere else. The app calls the layers Financials Setups, and the path follows
from the setup:

| Setup | Quote | Bind | The policy holds |
| - | - | - | - |
| Full Billing (`invoicing`), completed here | Complete with `invoices: "generate"` | `invoices: "saved"` | Pricing, billing and the invoices Complete generated |
| Full Billing (`invoicing`), quoted in your own app | Skipped: the quote stays in progress | `invoices: "generate"` | Pricing, billing and the invoices the bind generated |
| Invoicing Off (`billing`) | Complete | No `invoices` | Pricing and billing |

Pricing Only (`pricing`) follows the Invoicing Off row for a quote whose
billing calculation states no billing. No Pricing (`base`) skips rating.

The examples use one quote: a year from 2026-01-01, rated at 1,200.00, whose
billing states one line, `Premium` on the `Policy Invoice` type. The names are
an example company's; use your own, which
[Export Financials Configuration](https://docs.go.aiinsurance.io/api-reference/financials/export-financials-configuration.md)
lists. Your company's configuration decides which other fields the quote needs.

## Full Billing, completed here

Four requests.

1. **Create the quote with its setup.** `pricingSetup` holds the quote's
   intended layer and, when they differ from your company's payment defaults,
   its invoice settings, shaped as
   [Replace Quote Invoice Settings](https://docs.go.aiinsurance.io/api-reference/policy-invoicing/replace-quote-invoice-settings.md)
   takes them.

   ```json POST /api/v1/companies/{companyId}/entities/quote theme={null}
   {
     "quoteType": "newBusiness",
     "referencingSubmission": "550e8400-e29b-41d4-a716-446655440100",
     "primaryInsured": { "id": "550e8400-e29b-41d4-a716-446655440010" },
     "policyStartDate": { "date": "2026-01-01", "timezone": "America/New_York" },
     "policyEndDate": { "date": "2027-01-01", "timezone": "America/New_York" },
     "pricingSetup": {
       "pricingStackIntendedLayer": "invoicing",
       "invoiceSettings": {
         "schedule": {
           "paymentPeriod": "quarterly",
           "installmentCount": 4,
           "firstDueDate": "2026-01-01",
           "owedLeadTimeDays": 0,
           "avoidWeekendSends": false,
           "downPayment": null
         },
         "payees": [
           { "group": "Policy Invoice", "payeeId": "550e8400-e29b-41d4-a716-446655440010" }
         ],
         "endorsementHandling": { "mode": "void", "status": "scheduled" }
       }
     }
   }
   ```

   The response is `201` with the quote's `id`. The quote and its setup are
   saved together: a refused setting creates nothing. `pricingSetup` is not a
   field, so entity reads never return it. Send an `Idempotency-Key` to make a
   retry safe.

2. **Rate the quote and save the rating.**

   ```json POST /api/v1/companies/{companyId}/quotes/{quoteId}/rate theme={null}
   { "ratingWorkflowName": "standard", "saveToQuote": true }
   ```

   The rating is saved as the app saves it: the quote states
   `fullTermPricingInfo`, its billing calculation states `fullTermBillingInfo`
   (one `Premium` line of 1,200.00), and the run becomes the quote's current
   rating. The response's `data` is the rated quote. A rating that fails is
   still a `200`, with `diagnostics` and no `data`, and saves nothing.

3. **Complete the quote, generating its invoices.**

   ```json PATCH /api/v1/companies/{companyId}/entities/quote/{quoteId} theme={null}
   { "quoteStatus": "complete", "invoices": "generate" }
   ```

   Complete generates the quote's invoice plan from its settings, as
   [Generate Quote Invoices](https://docs.go.aiinsurance.io/api-reference/policy-invoicing/generate-quote-invoices.md)
   does, and saves it: four `Premium` invoices of `30000` cents, due
   2026-01-01, 2026-04-01, 2026-07-01 and 2026-10-01. It then completes the
   quote, checking it as its bind will. If either is refused, neither is
   saved. To review the invoices before you bind,
   `GET /api/v1/companies/{companyId}/quotes/{quoteId}/invoicing` shows them.

4. **Bind the invoices the quote offers.**

   ```json POST /api/v1/companies/{companyId}/quotes/{quoteId}/bind theme={null}
   { "invoices": "saved" }
   ```

**Outcome:** the policy holds the quote's pricing and billing and exactly the
four invoices Complete generated, `120000` cents in all.

## Full Billing, quoted in your own app

Three requests, when your own system presents the quote and its terms: the
quote stays in progress, and the bind generates its invoices.

1. Create the quote with its setup, as above.
2. Rate it and save the rating, as above.
3. Bind it, generating the invoices from its settings.

   ```json POST /api/v1/companies/{companyId}/quotes/{quoteId}/bind theme={null}
   { "invoices": "generate" }
   ```

**Outcome:** the policy holds the four invoices the bind generated. The bind
runs the same checks Complete runs, and the quote keeps no plan of the
invoices: after the bind, the policy's invoices are the record.

## Invoicing Off

Four requests, and no invoices.

1. Create the quote meant to bind at Invoicing Off:

   ```json POST /api/v1/companies/{companyId}/entities/quote theme={null}
   {
     "quoteType": "newBusiness",
     "referencingSubmission": "550e8400-e29b-41d4-a716-446655440100",
     "primaryInsured": { "id": "550e8400-e29b-41d4-a716-446655440010" },
     "policyStartDate": { "date": "2026-01-01", "timezone": "America/New_York" },
     "policyEndDate": { "date": "2027-01-01", "timezone": "America/New_York" },
     "pricingSetup": { "pricingStackIntendedLayer": "billing" }
   }
   ```

2. Rate it and save the rating, as above.

3. Complete it: `{ "quoteStatus": "complete" }`.

4. Bind it naming no invoices: `{}`.

**Outcome:** the policy holds the quote's pricing and billing, and no invoices.

## A company that does not invoice

A company that does not invoice has no layers to choose. Create the quote
without `pricingSetup` (sending it returns
`403 finv2-policy-invoicing-disabled`), rate it and save the rating, complete
it, and bind it naming no invoices.

## When a step is refused

A refusal saves nothing, and its message names the one request that fixes it,
with your ids. The ones this journey meets most:

| Refusal | Why | The fix it names |
| - | - | - |
| `422 quote-pricing-stack-intended-layer-required` | The quote has no intended layer: it was created without `pricingSetup` | Choose one with [Set Quote Pricing Stack Intended Layer](https://docs.go.aiinsurance.io/api-reference/policy-invoicing/set-quote-pricing-stack-intended-layer.md) |
| `422 quote-pricing-stack-intended-layer-mismatch` | The bind would land at another layer, for example a Full Billing quote completed or bound without invoices | Complete with `invoices: "generate"`, or bind with `invoices: "generate"` |
| `409 quote-rating-out-of-date` | Something that could move the price changed after the rating was saved, such as an input it read | Rate and save again, or bind with `confirmStaleRating: true` to keep the rating the quote holds |
| `409 quote-changed-during-rating` | Another request changed the quote while it was being rated | Rate and save again |
| `422 finv2-payment-generation-refused` | The quote states no billing for its invoices to add up to | Rate and save again; if it still states none, the configuration export shows why |

[Check Bind Conditions](https://docs.go.aiinsurance.io/api-reference/field-model-policy-validation/check-bind-conditions.md)
runs the bind's checks without binding, if you want to know before you send it.

## Related

* [Rating](https://docs.go.aiinsurance.io/api-reference/rating/overview.md): stateless rates, and what a saved rating writes
* [Quote Invoicing Overview](https://docs.go.aiinsurance.io/api-reference/invoicing/quote-invoicing.md): invoice settings, plans, Complete and the bind's `invoices`
* [The pricing stack](https://docs.go.aiinsurance.io/api-reference/invoicing/pricing-stack.md): the layers and the intended-layer check
* [Invoicing a policy](https://docs.go.aiinsurance.io/api-reference/invoicing/overview.md): the other ways to put invoices on a policy


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.