---
uuid: 8d0f7f61-f158-4258-b235-96b39dc82f0e
date_created: 2025-10-27T15:40:29.792Z
date_updated: 2026-04-03T16:26:42.529Z
seo_url: save-proposal-customer-account
category: Booking
tags: 
  - Booking
  - Customers
routes: 
  - POST /v3/proposals/search
  - PUT /v3/proposals/{proposal_id}/attendees
  - POST /v0/customers/{customer_id}/proposals_summary
  - GET /v0/customers/{customer_id}/proposals_summary
---

# Save a proposal to a customer account

This scenario explains how to create a proposal, identify the attendees, save the proposal under a customer account, and optionally list saved proposals later.

It is useful when a customer needs to pause the journey and reopen the saved proposal from their account.

## Flow

```mermaid
flowchart LR
    step0["Create the proposal"]
    step1["Identify the attendees"]
    step2["Save the proposal"]
    step3["List saved proposals"]
    step0 --> step1
    step1 --> step2
    step2 --> step3
    classDef optional fill:transparent,stroke:#ffffff,color:#ffffff,stroke-width:1px,stroke-dasharray: 6\,4
    class step3 optional
```

## Overview

The journey creates a proposal, enriches it with attendee data, stores it in the customer account, and optionally retrieves the saved proposal list afterward.

## Prerequisites

* Have the booking criteria required to create the proposal.
* Know the `customer_id` of the account that will store the proposal.
* Keep the `proposal_id` returned by the proposal creation step.

## 1 - Create the proposal

Use `POST /v3/proposals/search` to create the proposal.

#### Prerequisites

Prepare the parameters required by the call. Keep `x-api-key` and, when the route is customer-scoped, a valid bearer token. Validate the request body before the call to avoid a validation error.

#### Calling CURL

```bash
curl -X POST \
  -H "x-api-key: YOUR_API_KEY" \
  -H "accept-language: en-US" \
  -H "Content-Type: application/json" \
  -d '{"product_id": "product-1", "start_date": "2026-07-05", "end_date": "2026-07-12", "attendees": [{"birthdate": "1990-03-12"}]}' \
  "https://api.clubmed.com/v3/proposals/search"
```

#### Example answer

```json
[
  {
    "id": "proposal-1",
    "product_id": "product-1",
    "price": {
      "amount": 2890,
      "currency": "EUR"
    },
    "remaining_stock": 4
  }
]
```

> **info:** Keep the returned `proposal_id` to attach this proposal to the targeted customer account in the next step.

***

**Response codes**

* `200 OK`: the operation succeeds and the resource is returned.
* `400 Bad Request`: the body or parameters are invalid.
* `404 Not Found`: the target resource cannot be found.

**Related route**: [POST https://api.clubmed.com//v3/proposals/search](https://api.clubmed.com/doc?search=POST%20%2Fv3%2Fproposals%2Fsearch)

## 2 - Identify the attendees

Use `PUT /v3/proposals/{proposal_id}/attendees` to identify the attendees.

#### Prerequisites

Prepare `proposal_id`. Keep `x-api-key` and, when the route is customer-scoped, a valid bearer token. Validate the request body before the call to avoid a validation error.

#### Calling CURL

```bash
curl -X PUT \
  -H "x-api-key: YOUR_API_KEY" \
  -H "accept-language: en-US" \
  -H "Content-Type: application/json" \
  -d '{"attendees": [{"id": "attendee-1", "first_name": "Jane", "last_name": "Doe", "birthdate": "1990-03-12"}]}' \
  "https://api.clubmed.com/v3/proposals/{proposal_id}/attendees"
```

#### Example answer

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

> **info:** Success may be returned without a response body. Read the resource again afterwards if you need to display the final state.

***

**Response codes**

* `204 No Content`: the operation is applied successfully.
* `400 Bad Request`: the body or parameters are invalid.
* `404 Not Found`: the target resource cannot be found.

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

## 3 - Save the proposal

Use `POST /v0/customers/{customer_id}/proposals_summary` to save the proposal.

#### Prerequisites

Prepare `customer_id`. Keep `x-api-key` and, when the route is customer-scoped, a valid bearer token. Validate the request body before the call to avoid a validation error.

#### Calling CURL

```bash
curl -X POST \
  -H "x-api-key: YOUR_API_KEY" \
  -H "accept-language: en-US" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"proposal_id": "proposal-1"}' \
  "https://api.clubmed.com/v0/customers/{customer_id}/proposals_summary"
```

#### Example answer

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

> **info:** Success may be returned without a response body. Read the resource again afterwards if you need to display the final state.

***

**Response codes**

* `204 No Content`: the operation is applied successfully.
* `400 Bad Request`: the body or parameters are invalid.
* `401 Unauthorized`: the token is missing or invalid.
* `403 Forbidden`: access is denied in this context.
* `404 Not Found`: the target resource cannot be found.

**Related route**: [POST https://api.clubmed.com//v0/customers/{customer\_id}/proposals\_summary](https://api.clubmed.com/doc?search=POST%20%2Fv0%2Fcustomers%2F%7Bcustomer_id%7D%2Fproposals_summary)

## 4 - List saved proposals

Use `GET /v0/customers/{customer_id}/proposals_summary` to list saved proposals.

#### Prerequisites

Prepare `customer_id`. Keep `x-api-key` and, when the route is customer-scoped, a valid bearer token.

#### Calling CURL

```bash
curl -X GET \
  -H "x-api-key: YOUR_API_KEY" \
  -H "accept-language: en-US" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api.clubmed.com/v0/customers/{customer_id}/proposals_summary?limit=20&page=1"
```

#### Example answer

```json
[
  {
    "proposal_id": "proposal-1",
    "label": "Valmorel family stay",
    "updated_at": "2026-04-03T09:00:00Z"
  }
]
```

> **info:** Use this summary to find an existing proposal before reopening it or attaching it to a customer account.

***

**Response codes**

* `200 OK`: the expected data is returned.
* `400 Bad Request`: the request is invalid or incomplete.
* `401 Unauthorized`: the token is missing or invalid.
* `403 Forbidden`: access is denied in this context.
* `404 Not Found`: the requested resource cannot be found.

**Related route**: [GET https://api.clubmed.com//v0/customers/{customer\_id}/proposals\_summary](https://api.clubmed.com/doc?search=GET%20%2Fv0%2Fcustomers%2F%7Bcustomer_id%7D%2Fproposals_summary)
