---
uuid: 820503bd-3354-41dc-ba85-8e54c809e2dc
date_created: 2026-02-26T16:41:34.661Z
date_updated: 2026-04-03T17:59:11.922Z
seo_url: save-and-retrieve-seller-proposals
category: Booking
tags: 
  - Proposals
  - Booking
routes: 
  - PATCH /v0/proposals/{proposal_id}
  - GET /v0/proposals/saved
  - GET /v2/proposals/{proposal_id}
---

# Save and reopen a seller proposal

This scenario explains how a seller can extend proposal persistence, find saved proposals later and reopen one proposal in detail. It fits assisted sales journeys where a quote needs to remain available beyond the initial session and be retrieved from a seller workspace.

The flow starts from an existing `proposal_id`, applies the `extend_persistence` operation, then lists saved proposals and finally opens the detailed proposal content for reuse.

## Flow

```mermaid
flowchart LR
    step0["Extend proposal persistence"]
    step1["List saved proposals"]
    step2["Open proposal details"]
    step0 --> step1
    step1 --> step2
```

## Overview

This scenario helps a seller-facing application keep a proposal available over time and retrieve it later from a saved proposals list.

## Prerequisites

* An existing `proposal_id`.
* A valid `x-api-key`. Some retrieval steps also require an `authorization` header.
* The save action relies on the `extend_persistence` PATCH operation.

## Expected result

The seller can save a proposal for later reuse, list the saved proposals and reopen one proposal with its pricing, households and commercial details.

## 1 - Extend proposal persistence

This route updates a proposal by applying an operation to it. Swagger lists the available operations on `/proposals` as `apply_promo_code`, `remove_options`, `extend_persistence`, `remove_promo_code`, and `auto_optionable`. In this scenario, the operation used is `extend_persistence` with `parameters: true`.

#### Prerequisites

* Have a valid `proposal_id`.
* Send `accept-language` and `x-api-key`.
* Use `extend_persistence` only on a proposal that must remain reusable over time.

#### Calling CURL

```bash
curl -X 'PATCH' \
  'https://api.clubmed.com/v0/proposals/123456' \
  -H 'accept: application/json' \
  -H 'accept-language: en-US' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "operation": "extend_persistence",
    "parameters": true
  }'
```

#### Example answer

```http
HTTP/1.1 204 No Content
```

> **info:** Swagger states that `extend_persistence` allows a proposal to stay alive for up to six months.

***

**Response codes**

* **OK Response (200):** not documented in Swagger. The successful contract is `204 No Content`, so no response body is returned.
* **Error (400):** the payload is invalid, incomplete or not valid JSON.
* **Error (401):** not documented in Swagger.
* **Error (404):** the proposal was not found.
* **Error (409):** the requested update cannot be applied to the current proposal state.

**Related route**: [PATCH https://api.clubmed.com//v0/proposals/{proposal\_id}](https://api.clubmed.com/doc?search=PATCH%20%2Fv0%2Fproposals%2F%7Bproposal_id%7D)

## 2 - List saved proposals

Use this route to list the proposals that have been saved for later reuse in the seller workspace.

#### Prerequisites

* Send `authorization` and `x-api-key`.
* Add search filters such as `customer_last_name`, `product_id`, `min_departure_date` or `discount_id` only if they help narrow the result set.
* Reuse one returned proposal `id` in the detail step.

#### Calling CURL

```bash
curl -X 'GET' \
  'https://api.clubmed.com/v0/proposals/saved?customer_last_name=Smith&page=1&limit=10' \
  -H 'accept: application/json' \
  -H 'authorization: Bearer YOUR_TOKEN' \
  -H 'x-api-key: YOUR_API_KEY'
```

#### Example answer

```json
[
  {
    "id": "123456",
    "product_id": "MPAC",
    "product_label": "Chamonix Mont-Blanc",
    "customer_id": "123456789",
    "first_name": "Michael",
    "last_name": "Jackson",
    "resort_arrival_date": "2022-04-15",
    "reservation_date": "2022-04-15"
  }
]
```

> **info:** The returned `id` is the `proposal_id` to reuse to reopen the saved proposal in detail.

***

**Response codes**

* **OK Response (200):** returns the saved proposals that match the requested seller filters.
* **Error (400):** one filter or input value is invalid.
* **Error (401):** authentication is missing, invalid or expired.
* **Error (404):** not documented in Swagger.
* **Error (206):** the response is partial and should be paginated or retried with narrower filters.

**Related route**: [GET https://api.clubmed.com//v0/proposals/saved](https://api.clubmed.com/doc?search=GET%20%2Fv0%2Fproposals%2Fsaved)

## 3 - Open proposal details

Use this route to reopen one saved proposal in detail after identifying it in the saved proposals list.

#### Prerequisites

* Reuse the `proposal_id` returned by `GET /v0/proposals/saved`.
* Send `x-api-key`.
* Call this step when the seller needs to inspect pricing, households and commercial options before resuming the journey.

#### Calling CURL

```bash
curl -X 'GET' \
  'https://api.clubmed.com/v2/proposals/123456' \
  -H 'accept: application/json' \
  -H 'x-api-key: YOUR_API_KEY'
```

#### Example answer

```json
{
  "id": "123456",
  "booking_id": 123456,
  "label": "Proposal with one club room",
  "price": {
    "total": 9815.4,
    "currency": "EUR",
    "is_transfer_included": true
  },
  "households": [
    {
      "attendees": [
        {
          "id": "A",
          "customer_id": "string"
        }
      ]
    }
  ],
  "option_available": true,
  "extend_persistence": false,
  "is_bookable": false
}
```

> **info:** Review `option_available`, `extend_persistence` and `is_bookable` before deciding whether the saved proposal can be reused as-is.

***

**Response codes**

* **OK Response (200):** returns the detailed content of the saved proposal with price and household information.
* **Error (400):** the proposal identifier or another input value is invalid.
* **Error (401):** not documented in Swagger.
* **Error (404):** not documented in Swagger.
* **Error (409):** the economic control or proposal criteria are no longer valid.

**Related route**: [GET https://api.clubmed.com//v2/proposals/{proposal\_id}](https://api.clubmed.com/doc?search=GET%20%2Fv2%2Fproposals%2F%7Bproposal_id%7D)
