---
uuid: 347cd06b-046a-44ee-b922-d09adbc856cb
date_created: 2025-09-30T12:53:23.344Z
date_updated: 2026-04-03T16:26:39.722Z
seo_url: save-proposal-cmta-validation
category: Services
routes: 
  - POST /v3/proposals/search
  - PUT /v3/proposals/{proposal_id}/attendees
  - PATCH /v0/proposals/{proposal_id}
---

# Save a proposal for CMTA validation

This scenario shows how to create a proposal, enrich it with attendee data, and extend its persistence so it can be retrieved and validated in CMTA.

It fits partner journeys where the quote must remain available before customer payment.

## Flow

```mermaid
flowchart LR
    step0["Create the proposal"]
    step1["Add the attendees"]
    step2["Extend proposal persistence"]
    step0 --> step1
    step1 --> step2
```

## Overview

The journey starts with proposal creation, continues with attendee completion, and ends with the persistence extension used to keep the proposal available on the Club Med side.

## Prerequisites

* Prepare the booking criteria required to create the proposal.
* Gather attendee information before the attendee update step.
* Keep the `proposal_id` returned by the proposal search.

## 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` so it can be forwarded to the CMTA validation flow.

***

**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 - Add the attendees

Use `PUT /v3/proposals/{proposal_id}/attendees` to add 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 - Extend proposal persistence

Use `PATCH /v0/proposals/{proposal_id}` to extend proposal persistence.

#### 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 PATCH \
  -H "x-api-key: YOUR_API_KEY" \
  -H "accept-language: en-US" \
  -H "Content-Type: application/json" \
  -d '{"operation": "extend_persistence"}' \
  "https://api.clubmed.com/v0/proposals/{proposal_id}"
```

#### 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**: [PATCH https://api.clubmed.com//v0/proposals/{proposal\_id}](https://api.clubmed.com/doc?search=PATCH%20%2Fv0%2Fproposals%2F%7Bproposal_id%7D)
