Build a shopping experience with the Club Med API

  • Shopping
  • 18 routes
How do I list products, accommodations, and prices with the Shopping API?

This scenario explains how to use the Shopping API to power a product discovery and consultation experience. The flow covers product listing, product detail, accommodations, activities, transfers, and the informative pricing resources needed to guide a shopping journey.

It is useful when an integration needs to assemble a complete shopping page from product content, availability context, and price-oriented endpoints without jumping directly into booking creation.

Overview

This scenario documents the Shopping API resources required to build a browsing experience around products, accommodations, transfers, activities, and informative prices.

Prerequisites

  • A valid x-api-key and accept-language.
  • A product_id returned by the catalog routes before reading detailed resources.
  • The product, market, and traveler filters required by the calendar and price-search routes.

Expected result

The application can list products, enrich one product page with detailed content, expose accommodations and transfers, and add informative pricing blocks without entering the booking flow.

Process workflow

Legend:
Mandatory
Optional
1

List products

Optional

This step uses GET/v2/products to list products.

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: Reuse the identifier returned by this step in the next calls.


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

Retrieve product detail

Optional

This step uses GET/v2/products/{product_id} to retrieve product detail.

Prerequisites

Prepare product_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/v2/products/{product_id}"

Example answer

{
"id": "product-1",
"label": "Club Med Valmorel",
"country_code": "FR",
"type": "RESORT",
"description": "Family resort in the Alps"
}

info: Reuse the identifier returned by this step in the next calls.


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/{product_id}
See more
3

Retrieve opening dates

Optional

This step uses GET/v0/products/{product_id}/opening_dates to retrieve opening dates.

Prerequisites

Prepare product_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/products/{product_id}/opening_dates?date_format=ISO"

Example answer

[
{
"start_date": "2026-07-05",
"end_date": "2026-07-12",
"status": "OPEN"
}
]

info: This response can be reused as the decision baseline for the next step in the journey.


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/products/{product_id}/opening_dates
See more
4

Read booking criteria

Optional

This step uses GET/v0/products/{product_id}/booking_criteria to read booking criteria.

Prerequisites

Prepare product_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/products/{product_id}/booking_criteria"

Example answer

{
"durations": [
7,
14
],
"max_attendees": 6,
"departure_options": [
{
"id": "PAR"
}
]
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/products/{product_id}/booking_criteria
See more
5

List childcare offers

Optional

This step uses GET/v2/products/{product_id}/childcare to list childcare offers.

Prerequisites

Prepare product_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/v2/products/{product_id}/childcare"

Example answer

[
{
"id": "childcare-1",
"label": "Petit Club Med",
"min_age": 2,
"max_age": 3
}
]

info: This response can be reused as the decision baseline for the next step in the journey.


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/{product_id}/childcare
See more
6

Retrieve product pictures

Optional

This step uses GET/v1/products/{product_id}/pictures to retrieve product pictures.

Prerequisites

Prepare product_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/v1/products/{product_id}/pictures"

Example answer

[
{
"id": "picture-1",
"label": "Resort exterior",
"url": "https://example.com/picture.jpg"
}
]

info: This response can be reused as the decision baseline for the next step in the journey.


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/v1/products/{product_id}/pictures
See more
7

Read practical information

Optional

This step uses GET/v0/products/{product_id}/practical_information to read practical information.

Prerequisites

Prepare product_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/products/{product_id}/practical_information"

Example answer

{
"address": "Valmorel, France",
"check_in_time": "15:00",
"contact_phone": "+33123456789"
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/products/{product_id}/practical_information
See more
8

List activity categories

Optional

This step uses GET/v0/activity_categories to list activity categories.

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/v0/activity_categories"

Example answer

[
{
"id": "ski",
"label": "Ski"
},
{
"id": "wellness",
"label": "Wellness"
}
]

info: This response can be reused as the decision baseline for the next step in the journey.


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/activity_categories
See more
9

Retrieve activity detail

Optional

This step uses GET/v2/products/{product_id}/activities/{activity_id} to retrieve activity detail.

Prerequisites

Prepare product_id, activity_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/v2/products/{product_id}/activities/{activity_id}"

Example answer

{
"id": "activity-1",
"label": "Snowshoe hike",
"duration": 90,
"level": "DISCOVERY"
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/{product_id}/activities/{activity_id}
See more
10

Read cruise detail

Optional

This step uses GET/v0/products/{product_id}/cruise_detail to read cruise detail.

Prerequisites

Prepare product_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/products/{product_id}/cruise_detail"

Example answer

{
"ship": "Club Med 2",
"itinerary": [
{
"day": 1,
"port": "Barcelona"
}
]
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/products/{product_id}/cruise_detail
See more
11

List available transfers

Optional

This step uses GET/v1/products/{product_id}/transfers to list available transfers.

Prerequisites

Prepare product_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/v1/products/{product_id}/transfers"

Example answer

[
{
"id": "transfer-1",
"label": "Airport shuttle",
"price": {
"amount": 60,
"currency": "EUR"
}
}
]

info: This response can be reused as the decision baseline for the next step in the journey.


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/v1/products/{product_id}/transfers
See more
12

Retrieve transfer detail

Optional

This step uses GET/v1/products/{product_id}/transfers/{transfer_id} to retrieve transfer detail.

Prerequisites

Prepare product_id, transfer_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/v1/products/{product_id}/transfers/{transfer_id}"

Example answer

{
"id": "transfer-1",
"label": "Airport shuttle",
"duration": 45,
"price": {
"amount": 60,
"currency": "EUR"
}
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/v1/products/{product_id}/transfers/{transfer_id}
See more
13

List accommodation categories

Optional

This step uses GET/v0/products/{product_id}/accommodation_categories to list accommodation categories.

Prerequisites

Prepare product_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/products/{product_id}/accommodation_categories"

Example answer

[
{
"id": "cat-1",
"label": "Superior rooms"
}
]

info: This response can be reused as the decision baseline for the next step in the journey.


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/products/{product_id}/accommodation_categories
See more
14

Retrieve accommodation category detail

Optional

This step uses GET/v0/products/{product_id}/accommodation_categories/{accommodation_category_id} to retrieve accommodation category detail.

Prerequisites

Prepare product_id, accommodation_category_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/products/{product_id}/accommodation_categories/{accommodation_category_id}"

Example answer

{
"id": "cat-1",
"label": "Superior rooms",
"description": "Comfortable category for couples and families"
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/products/{product_id}/accommodation_categories/{accommodation_category_id}
See more
15

Retrieve an accommodation detail

Optional

This step uses GET/v2/products/{product_id}/accommodations/{accommodation_id} to retrieve an accommodation detail.

Prerequisites

Prepare product_id, accommodation_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/v2/products/{product_id}/accommodations/{accommodation_id}"

Example answer

{
"id": "room-1",
"label": "Superior Room",
"occupancy": 2,
"description": "Mountain view room"
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/{product_id}/accommodations/{accommodation_id}
See more
16

Compare another accommodation detail

Optional

This step uses GET/v2/products/{product_id}/accommodations/{accommodation_id} to compare another accommodation detail.

Prerequisites

Prepare product_id, accommodation_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/v2/products/{product_id}/accommodations/{accommodation_id}"

Example answer

{
"id": "room-1",
"label": "Superior Room",
"occupancy": 2,
"description": "Mountain view room"
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/{product_id}/accommodations/{accommodation_id}
See more
17

Consult the calendar view

Optional

This step uses GET/v2/products/{product_id}/calendar to consult the calendar view.

Prerequisites

Prepare product_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/v2/products/{product_id}/calendar?duration=7&first_date=2026-07-01&last_date=2026-08-31&number_attendees=2"

Example answer

{
"months": [
{
"month": "2026-07",
"days": [
{
  "date": "2026-07-05",
  "availability": "AVAILABLE",
  "price": {
    "amount": 2890,
    "currency": "EUR"
  }
}
]
}
]
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/{product_id}/calendar
See more
18

Search prices

Optional

This step uses GET/v1/search_price to search prices.

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/v1/search_price?product_id=product-1&start_date=2026-07-05&end_date=2026-07-12&number_attendees=2"

Example answer

{
"currency": "EUR",
"amount": 2890,
"breakdown": [
{
"label": "Stay",
"amount": 2500
},
{
"label": "Transport",
"amount": 390
}
]
}

info: This response can be reused as the decision baseline for the next step in the journey.


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/v1/search_price
See more