---
title: "Create a quote"
method: POST
path: "/groups/{groupId}/quotes"
tags: ["Quotes"]
---

# Create a quote

`POST /groups/{groupId}/quotes`

Rates the stored census and returns a complete quote synchronously. Deterministic: the same census, start date, and pricing configuration always produce the same numbers. Groups above the in-review threshold (default 200 employees) return `status: in_review` and are finalized by underwriting (webhook `quote.finalized`). Quotes expire per configuration (default 30 days). Rate limit: 60 quote creates per hour. All quotes are indicative pending underwriting confirmation.

## Path parameters

- `groupId` string, required

## Headers

- `Idempotency-Key` string

## Request body

- QuoteCreateRequest
  - `planYearStartDate` string, date — Defaults to the first of the month at least 60 days out.
  - `priorPepmCents` integer — Savings baseline override. Defaults to `group.currentCoverage.pepmCents`.

## Response `201`

The quote.

- Quote
  - `id` string, required
  - `groupId` string, required
  - `mode` 'test' | 'live', required
  - `status` 'ready' | 'in_review' | 'expired', required — `ready` for most groups (synchronous). Groups above the in-review employee threshold (default 200) return `in_review` and are finalized by Prescience underwriting; listen for the `quote.finalized` webhook.
  - `pricingBasis` 'indicative', required — Always `indicative`: rates are indicative pending underwriting confirmation and bind only at enrollment plus underwriting sign-off.
  - `plan` object, required
    - `id` string
    - `name` string
  - `planYearStartDate` string, date, required
  - `expiresAt` string, date-time, required — Expiry is configuration-driven; the default window is 30 days after creation. Enrolling against an expired quote returns `410 quote_expired`.
  - `census` object, required
    - `employees` integer
    - `coveredLives` integer
    - `tiers` object
      - `employeeOnly` integer
      - `employeeSpouse` integer
      - `employeeChildren` integer
      - `family` integer
  - `monthly` object, required
    - `totalCents` integer
    - `pepmCents` integer — Total divided by active employees, rounded.
    - `byTier` object
      - `employeeOnly` object
        - `count` integer
        - `avgCents` integer
      - `employeeSpouse` object
        - `count` integer
        - `avgCents` integer
      - `employeeChildren` object
        - `count` integer
        - `avgCents` integer
      - `family` object
        - `count` integer
        - `avgCents` integer
  - `annual` object, required
    - `totalCents` integer
  - `employeeContribution` object, required
    - `premiumCents` 0 — Always 0. Employees pay no premium contribution on Diamond.
  - `comparison` object, required
    - `priorPepmCents` integer
    - `savingsMonthlyCents` integer
    - `savingsAnnualCents` integer
    - `savingsPct` integer — Savings versus the prior plan, rounded to the nearest whole percent.
  - `fundingBreakdown` object, required
    - `expectedClaimsPct` integer
    - `stopLossPct` integer
    - `careNavigationPct` integer
    - `adminFeesPct` 0
    - `note` string
  - `assumptions` string[], required
  - `pricing` object — Pricing metadata: which configuration layer produced this quote. Additive in v1.1; absent on quotes created before it. All other quote fields are unchanged.
    - `source` 'code_default' | 'default' | 'partner', required — `partner`: integration-specific pricing configuration. `default`: platform default pricing configuration. `code_default`: built-in defaults.
    - `updatedAt` string, date-time — When the applied rate card was last updated. Absent for `code_default`.
  - `createdAt` string, date-time, required

## Other responses

- `400` — Validation failed.
- `401` — Missing, malformed, or revoked API key.
- `404` — No such resource in this mode. Test keys only see test resources; live keys only see live resources.
- `422` — No quotable census. Every member needs `zip` plus one of `dob` | `age`.
- `429` — Rate limit exceeded. Honor `Retry-After`.
- `500` — Something failed on our side. Safe to retry with the same `Idempotency-Key`.

---

[API](https://skmtc.dev/getprescience/apis/prescience-partner-api.md) · [All operations](https://skmtc.dev/getprescience/apis/prescience-partner-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getprescience/prescience-partner-api/revisions/eb1f377f8139/schema)
