---
title: "Confirm Booking"
method: PUT
path: "/partners/{partner_code}/bookings/{booking_id}/confirm"
tags: ["Confirm Booking"]
---

# Confirm Booking

`PUT /partners/{partner_code}/bookings/{booking_id}/confirm`

Completes the second step of the two-step booking flow. Use this endpoint after confirming an Offer with `require_payment_confirmation` set to `true`, which leaves the booking in `PENDING_PAYMENT`. Once payment has been collected, call this endpoint to move the booking to `CONFIRMED` and issue the policies.
The booking must be in `PENDING_PAYMENT` status; any other status returns `422`.
### 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
  - `payment_details` object — Payment information for the collected payment
    - `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
  - `xpay_charge_id` string — Deprecated. Use `payment_details.xpay_charge_id` instead.

## Response `201`

Created

- object — The confirmed booking. Payload is identical to the Confirm Offer response.
  - `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
    - `insured` object[]
    - `can_be_cancelled` boolean
  - `coi` object
    - `url` string, uri
    - `pdf` string, uri
  - `account_url` string, uri
  - `sign_up_url` string, uri
  - `policyholder` object
  - `total_tax` number
  - `total_tax_formatted` string
  - `total_premium` number
  - `total_premium_formatted` string
  - `fnol_link` string, uri
  - `booking_agent` unknown

## Other responses

- `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)
