---
title: "Retrieve the quote for a group quote intent"
method: GET
path: "/group_quote_intents/{group_quote_intent_id}/quote"
tags: ["Group Quote Intents"]
---

# Retrieve the quote for a group quote intent

`GET /group_quote_intents/{group_quote_intent_id}/quote`

## Request

- Base URL: `https://test.api.kota.io`
- URL: `https://test.api.kota.io/group_quote_intents/{group_quote_intent_id}/quote`
- Auth: HTTP bearer

Retrieves the quote details for a `group_quote_intent`. Returns pricing information and a fresh PDF URL. Only available when status is `quote_available`.

## Path parameters

- `group_quote_intent_id` string, required

## Response `200`

OK

- GroupQuoteResponse
  - `employee_count` integer, required: Number of employees covered by the quote. An employee covered by more than one of the quote's `levels` is counted once.
  - `cost_sharing` CostSharingConfigurationResponse
    - `type` 'member_count' | 'member_selection' | 'member_selection_percentage_based' | 'percentage' | 'policyholder_only' | 'family_type' | 'fixed_amount' | 'full_coverage' | 'pooled_member_count', required
    - `member_count` MemberCountCostSharingConfigurationResponse
      - `adults` integer, required: Number of additional adults covered, including partner/spouse.
      - `children` integer, required: Number of additional children covered.
    - `member_selection` MemberSelectionCostSharingConfigurationResponse
      - `partner` boolean, required: If a spouse/partner is covered.
      - `children` boolean, required: If children are covered.
    - `member_selection_percentage_based` MemberSelectionPercentageBasedCostSharingConfigurationResponse
      - `partner` boolean, required: If a spouse/partner is covered.
      - `children` boolean, required: If children are covered.
      - `percentage` integer, required: Employer coverage percentage of each covered member's premium: For 40% send 40. For 100% send 100.
    - `percentage` PercentageCostSharingConfigurationResponse
      - `percentage` integer, required: Employer coverage percentage: For 40% send 40. For 100% send 100.
    - `family_type` FamilyTypeCostSharingConfigurationResponse
      - `type` 'single' | 'couple' | 'single_with_children' | 'family', required
    - `fixed_amount` FixedAmountCostSharingConfigurationResponse
      - `monthly_amount` number, double, required: Monthly amount the employer covers, in the plan's currency. Must be positive.
    - `pooled_member_count` PooledMemberCountCostSharingConfigurationResponse
      - `dependents` integer, required: Number of dependents the employer covers in full, of any relationship: a spouse, partner or child each count as one. Must be zero or more.
  - `total_monthly_premium` number, double, required: Total monthly premium for the group, excluding any insurance premium tax. Tax is a separate line of `breakdown`.
  - `total_annual_premium` number, double, required: Total annual premium for the group, excluding any insurance premium tax. Where the provider prices the year in its own right, this is that figure rather than twelve times the monthly premium.
  - `currency` string, required: Currency of the premium (e.g. EUR, GBP). Every level of a quote is in one currency today; when a quote can span currencies, the totals and this field become null and `levels[].currency` is the only answer.
  - `breakdown` GroupQuoteBreakdownEntryResponse[], required: What makes up the annual cost: the premium, and the insurance premium tax charged on it when there is any. Amounts are annual and sum to what the employer pays.
    - `type` 'premium' | 'insurance_premium_tax', required
    - `currency` string, required: Currency of the amount (e.g. EUR, GBP).
    - `amount` number, double, required: The annual amount of this line.
  - `pdf_url` string, nullable: URL to download the quote PDF. The first whole-quote document, or the first level document when the provider issued none for the quote as a whole. Prefer `quote_pdfs`, which returns every document rather than one of them.
  - `pdf_expires_at` string, date-time, nullable: When the PDF URL expires
  - `quote_pdfs` GroupQuoteDocumentResponse[], required: The documents the provider issued for the quote as a whole. Documents issued per level are on `levels[].quote_pdfs` instead, and never repeated here.
    - `url` string, required: URL to download the document.
    - `expires_at` string, date-time, required: When the URL expires.
  - `levels` GroupQuoteLevelResponse[], required: The priced levels of the quote, one per level of the intent — match them up by `group_id` and `plan_id` rather than by position. Always present: a single quote returns one entry, so a consumer reads one shape for both.
    - `group_id` string, required: Unique identifier for the group this level covers.
    - `plan_id` string, required: Unique identifier for the plan this level is priced on.
    - `employee_count` integer, required: Number of employees of this group covered by this level.
    - `currency` string, required: Currency of this level's premiums (e.g. EUR, GBP).
    - `monthly_premium` number, double, required: This level's monthly premium, excluding any insurance premium tax.
    - `annual_premium` number, double, required: This level's annual premium, excluding any insurance premium tax.
    - `cost_sharing` CostSharingConfigurationResponse, required
      - `type` 'member_count' | 'member_selection' | 'member_selection_percentage_based' | 'percentage' | 'policyholder_only' | 'family_type' | 'fixed_amount' | 'full_coverage' | 'pooled_member_count', required
      - `member_count` MemberCountCostSharingConfigurationResponse
        - `adults` integer, required: Number of additional adults covered, including partner/spouse.
        - `children` integer, required: Number of additional children covered.
      - `member_selection` MemberSelectionCostSharingConfigurationResponse
        - `partner` boolean, required: If a spouse/partner is covered.
        - `children` boolean, required: If children are covered.
      - `member_selection_percentage_based` MemberSelectionPercentageBasedCostSharingConfigurationResponse
        - `partner` boolean, required: If a spouse/partner is covered.
        - `children` boolean, required: If children are covered.
        - `percentage` integer, required: Employer coverage percentage of each covered member's premium: For 40% send 40. For 100% send 100.
      - `percentage` PercentageCostSharingConfigurationResponse
        - `percentage` integer, required: Employer coverage percentage: For 40% send 40. For 100% send 100.
      - `family_type` FamilyTypeCostSharingConfigurationResponse
        - `type` 'single' | 'couple' | 'single_with_children' | 'family', required
      - `fixed_amount` FixedAmountCostSharingConfigurationResponse
        - `monthly_amount` number, double, required: Monthly amount the employer covers, in the plan's currency. Must be positive.
      - `pooled_member_count` PooledMemberCountCostSharingConfigurationResponse
        - `dependents` integer, required: Number of dependents the employer covers in full, of any relationship: a spouse, partner or child each count as one. Must be zero or more.
    - `quote_pdfs` GroupQuoteDocumentResponse[], required: The documents the provider issued for this level specifically. Empty when it issued them for the quote as a whole instead — those are on the quote's `quote_pdfs`.
      - `url` string, required: URL to download the document.
      - `expires_at` string, date-time, required: When the URL expires.
    - `premium_basis` PremiumBasisResponse
      - `type` 'employees' | 'estimate', required
      - `employee_count` integer, nullable, required: How many employees the premium is based on. Null only for an `estimate` that did not include a head count.
      - `average_employee_age` integer, nullable, required: The average age the premium is based on. Null when the premium does not use it.
      - `average_annual_salary` number, double, nullable, required: The average gross annual salary the premium is based on, in this level's `currency`. Null when the premium does not use it.
      - `status` 'current' | 'changed' | 'unknown', required
  - `generated_at` string, date-time, required: When the quote was generated
  - `expires_at` string, date-time, required: When the quote expires
  - `object` string: Object type identifier

## Other responses

- `400`: Bad Request
- `404`: Not Found

## Changes

- **2026-10-28** `a4628d9568dd`: 1 info
  - added the optional property `levels/items/premium_basis` to the response with the `200` status
- **2026-10-26** `998f7cb004ab`: 1 warning
  - deleted the `header` request parameter `X-Platform-Id`
- **2026-10-21** `ce9736d28f93`: 2 warning, 2 info
  - added the new `pooled_member_count` enum value to the `cost_sharing/allOf[#/components/schemas/CostSharingConfigurationResponse]/type/allOf[#/components/schemas/CostSharingType]/` response property for the response status `200`
  - added the new `pooled_member_count` enum value to the `levels/items/cost_sharing/allOf[#/components/schemas/CostSharingConfigurationResponse]/type/allOf[#/components/schemas/CostSharingType]/` response property for the response status `200`
  - added the optional property `cost_sharing/allOf[#/components/schemas/CostSharingConfigurationResponse]/pooled_member_count` to the response with the `200` status
  - added the optional property `levels/items/cost_sharing/allOf[#/components/schemas/CostSharingConfigurationResponse]/pooled_member_count` to the response with the `200` status
- …earlier changes not shown

[Operation history](https://skmtc.dev/kota/apis/kota-api/changes/group_quote_intents/:group_quote_intent_id/quote/get.md)

---

[API](https://skmtc.dev/kota/apis/kota-api.md) - [All operations](https://skmtc.dev/kota/apis/kota-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kota/apis/kota-api/revisions/171e81b2c258?raw)
