---
title: "Confirm Offer"
method: POST
path: "/partners/{partner_code}/offers/{offer_id}/confirm/"
tags: ["Confirm Offer"]
---

# Confirm Offer

`POST /partners/{partner_code}/offers/{offer_id}/confirm/`

The Confirm Offer endpoint is used to finalize the purchase of products from a previously created Offer. This endpoint converts the selected Offer into a confirmed booking after payment has been successfully collected.
### Idempotency
This endpoint supports idempotency keys via the `x-idempotency-key` header to prevent duplicate transactions. Provide a unique operation identifier (e.g., UUID) to ensure safe retries. Duplicate requests return:
- **409 Conflict**: The request was already processed; response contains
  the cached original result (handle as success)
- **423 Locked**: The original request is still processing; retry after
  a short delay

## Headers

- `x-idempotency-key` string, uuid

## Request body

- object
  - `quotes` object[], required — Array of quote objects to confirm
    - `id` string, required — The product ID (quote ID) from the offer response
    - `insured` object[] — List of insured persons if required by the policy
      - `first_name` string
      - `last_name` string
      - `email` string, email
      - `birth_date` string, date
      - `country` string
      - `city` string
      - `postcode` string
      - `region` string
      - `age` integer
    - `instalment_plan` string — Selected instalment plan name
    - `first_instalment_paid` boolean — Whether first instalment has been paid
  - `policyholder` object, required — Policyholder information
    - `first_name` string, required — Policyholder's first name
    - `last_name` string, required — Policyholder's last name
    - `email` string, email, required — Policyholder's email address
    - `phone` string, required — Policyholder's phone number
    - `country` string, required — Policyholder's country code
    - `region` string — Policyholder's region or state
    - `city` string — Policyholder's city
    - `postcode` string — Policyholder's postal code
    - `address1` string — Policyholder's address line 1
    - `address2` string — Policyholder's address line 2
  - `require_payment_confirmation` boolean — Enables two-step confirmation. If `true`, the booking is left in `PENDING_PAYMENT` until you call `Confirm booking` endpoint. Defaults to `false`, confirming in one step.
  - `partner_transaction_id` string — Your internal transaction identifier
  - `payment_details` object — Payment information
    - `provider` string — Payment provider name (e.g., stripe, paypal, xpay)
    - `transaction_id` string — Payment transaction ID
    - `xpay_charge_id` string — XPay charge ID if using XPay
    - `xpay_customer_id` string — XPay customer ID if using XPay
    - `customer_token_id` string — Customer token for payment authorization
  - `booking_agent` object — Agent information if booked through an agent

## Response `200`

OK

- object
  - `id` string
  - `status` string
  - `currency` string
  - `total_price` number
  - `total_price_formatted` string
  - `partner_transaction_id` unknown
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `pds_url` string, uri
  - `security_token` string
  - `quotes` object[]
    - `id` string
    - `policy_start_date` string, date-time
    - `policy_end_date` string, date-time
    - `status` string
    - `price` number
    - `price_formatted` string
    - `policy` object
      - `policy_type` string
      - `policy_type_version` string, utc-millisec
      - `policy_type_slug` string
      - `policy_type_group_name` string
      - `policy_name` string
      - `policy_code` string
      - `policy_version` string
      - `category` string
      - `content` object
        - `title` string
        - `header` unknown
        - `description` string
        - `optout_msg` string
        - `inclusions` object[]
          - `title` string
          - `description` string
        - `exclusions` unknown[]
          - unknown
        - `disclaimer` string, style
        - `disclaimer_html` string, style
        - `payment_disclaimer` string
        - `in_path_disclaimer` string
        - `extra_content` object
      - `underwriter` object
        - `disclaimer` string
        - `name` string
      - `claim_selector_id` unknown
      - `policy_currency` string
    - `insured` object[]
      - `id` string
      - `first_name` string
      - `last_name` string
      - `email` string, email
      - `region` unknown
    - `tax` object
      - `total_tax` number
      - `total_amount_without_tax` number
      - `taxes` object[]
        - `tax_amount` number
        - `tax_code` string
        - `tax_amount_formatted` string
      - `total_tax_formatted` string
      - `total_amount_without_tax_formatted` string
    - `duration` string, style
    - `benefits` object[]
      - `benefit_content_id` string
      - `description` string
      - `extra_content` object
        - `benefit-text-test` string
        - `benefit_rich_text_test` string
      - `limit` integer
      - `limit_policy_currency` integer
      - `limit_formatted` string
      - `limit_policy_currency_formatted` string
      - `excess` integer
      - `excess_policy_currency` integer
      - `excess_formatted` string
      - `excess_policy_currency_formatted` string
    - `commission` object
      - `partner_commission` number
      - `surcharge_commission` integer
      - `total_commission` number
      - `partner_commission_formatted` string
      - `surcharge_commission_formatted` string
      - `total_commission_formatted` string
    - `created_at` string, date-time
    - `confirmed_at` string, date-time
    - `updated_at` string, date-time
    - `cancelled_at` unknown
    - `cancelled_from` unknown
    - `is_renewable` boolean
    - `is_pricebeat_enabled` unknown
    - `cover_amount` integer
    - `cover_amount_formatted` string
    - `pds_url` string, uri
    - `attachments` unknown[]
      - unknown
    - `files` unknown[]
      - unknown
    - `custom_documents` unknown
    - `extra_fields` object
      - `destination_region` string
      - `seller_entity` string
      - `age_brackets` string
      - `desitnation_sanctions` unknown[]
        - unknown
      - `sanctioned_distination_countries` string[]
      - `test_underwrting_rule` boolean
    - `surcharge` object
      - `total_amount` unknown
      - `surcharges` unknown
      - `total_amount_formatted` string
    - `parent_quote_status` unknown
    - `experiment` unknown
    - `next_renewal` unknown
    - `can_be_cancelled` boolean
    - `third_party_admins` unknown[]
      - unknown
    - `ombudsman_list` unknown[]
      - unknown
    - `cancellation_info` object
      - `reason_for_cancellation` string
  - `coi` object
    - `url` string, uri
    - `pdf` string, uri
  - `account_url` string, uri
  - `sign_up_url` string, uri
  - `policyholder` object
    - `first_name` string
    - `last_name` string
    - `email` string, email
    - `phone` unknown
    - `address1` unknown
    - `address2` unknown
    - `postcode` string, utc-millisec
    - `company` unknown
    - `company_reg_id` unknown
    - `middle_name` unknown
    - `country` string
    - `age` integer
    - `city` unknown
    - `region` string
    - `secondary_email` unknown
    - `birth_date` unknown
    - `allow_updates` boolean
    - `fields_allowed_to_update` unknown[]
      - unknown
  - `total_tax` number
  - `total_tax_formatted` string
  - `total_premium` number
  - `total_premium_formatted` string
  - `fnol_link` string, uri
  - `booking_agent` unknown

## Other responses

- `403` — Forbidden
- `404` — Not Found
- `409` — Conflict - Duplicate Request (Idempotent)
- `422` — Unprocessable Entity
- `423` — Locked - Request In Progress

---

[API](https://skmtc.net/covergenius/apis/offers-api.md) · [All operations](https://skmtc.net/covergenius/apis/offers-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/covergenius/offers-api/revisions/42536792b3f8/schema)
