Save a proposal for CMTA validation

  • Services
  • 3 routes
How do I create a proposal and make it available in CMTA?

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.

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.

Process workflow

Legend:
Mandatory
Optional
1

Create the proposal

Mandatory

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

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

[
  {
    "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.
POST/v3/proposals/search
See more
2

Add the attendees

Mandatory

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

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/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.
PUT/v3/proposals/{proposal_id}/attendees
See more
3

Extend proposal persistence

Mandatory

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

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/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.
PATCH/v0/proposals/{proposal_id}
See more