Cruises: select a cabin in a proposal

  • Booking
  • Booking
  • 5 routes
How do I build a cruise proposal and choose a physical cabin?

This scenario explains how to identify open cruise products, create a proposal, list the available cabins, optionally validate the arrangement, and apply the selected cabin.

It is specific to cruises, where the customer can choose a physical cabin instead of only selecting a room code.

Overview

Cruise journeys differ from standard resort journeys because the customer can select a physical cabin. This scenario covers the end-to-end flow from cruise discovery to final cabin assignment.

Prerequisites

  • Identify a cruise product that is open to sale.
  • Keep the product_id and then the proposal_id returned by the previous steps.
  • If you change the original room code, validate the arrangement before applying it.

Process workflow

Legend:
Mandatory
Optional
1

List available cruises

Optional

Use GET/v2/products to list available cruises.

Prerequisites

Prepare the parameters required by the call. Keep x-api-key and, when the route is customer-scoped, a valid bearer token.

Calling CURL

curl -X GET \
  -H "x-api-key: YOUR_API_KEY" \
  -H "accept-language: en-US" \
  "https://api.clubmed.com/v2/products?limit=20&page=1"

Example answer

[
  {
    "id": "product-1",
    "label": "Club Med Valmorel",
    "country_code": "FR",
    "type": "RESORT"
  }
]

info: Sélectionnez le product_id de la croisière voulue pour créer ensuite la proposition et charger les cabines disponibles.


Response codes

  • 200 OK: the expected data is returned.
  • 400 Bad Request: the request is invalid or incomplete.
  • 404 Not Found: the requested resource cannot be found.
GET/v2/products
See more
2

Create the cruise proposal

Mandatory

Use POST/v1/proposals/search/best to create the initial cruise proposal before selecting a cabin.

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/v1/proposals/search/best"

Example answer

{
  "id": "proposal-1",
  "product_id": "product-1",
  "price": {
    "amount": 2890,
    "currency": "EUR"
  },
  "option_available": true
}

info: Keep the returned proposal_id to load available cabins and then apply the cabin selection to the proposal.


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/v1/proposals/search/best
See more
3

List available cabins

Mandatory

Use GET/v0/proposals/{proposal_id}/available_rooms to list the physical cabins that can still be assigned on the cruise proposal.

Prerequisites

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

Calling CURL

curl -X GET \
  -H "x-api-key: YOUR_API_KEY" \
  -H "accept-language: en-US" \
  "https://api.clubmed.com/v0/proposals/{proposal_id}/available_rooms"

Example answer

[
  {
    "id": "cabin-1",
    "label": "Deluxe cabin",
    "occupancy": 2,
    "remaining_stock": 4
  }
]

info: Compare cabin characteristics and remaining availability before you lock one physical cabin on the proposal.


Response codes

  • 200 OK: the expected data is returned.
  • 400 Bad Request: the request is invalid or incomplete.
  • 404 Not Found: the requested resource cannot be found.
GET/v0/proposals/{proposal_id}/available_rooms
See more
4

Check the cabin assignment

Optional

Use POST/v1/accommodations_arrangement/check to validate the selected cabin assignment before applying it to the cruise 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 '[{"id": "room-1", "occupancy": 2, "attendees": [{"id": "attendee-1"}, {"id": "attendee-2"}]}]' \
  "https://api.clubmed.com/v1/accommodations_arrangement/check"

Example answer

[
  {
    "id": "room-1",
    "remaining_stock": 3,
    "differential_prices": {
      "amount": 120,
      "currency": "EUR"
    }
  }
]

info: Validate stock and price impact first, especially when several cabin candidates are still available.


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/v1/accommodations_arrangement/check
See more
5

Apply the cabin selection

Mandatory

Use the cabin-update route attached to this step to apply the selected physical cabin on the proposal once availability has been validated.

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 '[{"id": "room-1", "occupancy": 2, "attendees": [{"id": "attendee-1"}, {"id": "attendee-2"}]}]' \
  "https://api.clubmed.com/v1/proposals/{proposal_id}/accommodations_arrangement"

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/v1/proposals/{proposal_id}/accommodations_arrangement
See more