Add external services to a proposal

  • Proposal service
  • Services
  • 3 routes
How do I retrieve and display the external services available for a proposal?

This scenario explains how to create a proposal, retrieve the related additional services, and then read the external-service details available for the targeted product. It fits proposal-enrichment journeys before booking.

The flow starts with proposal creation and then reuses returned identifiers to expose services such as parking or concierge.

Overview

This scenario helps an application enrich a proposal with external services before the booking journey continues.

Prerequisites

  • The booking criteria required to create a proposal.
  • A proposal_id and then a product_id returned during the flow.
  • A valid x-api-key and, depending on the channel, an appropriate authorization context.

Expected result

The application can display the available external services, expose their business information, and prepare their addition to the proposal.

Process workflow

Legend:
Mandatory
Optional
1

Create the proposal

Mandatory

Use POST/v3/proposals/search to create the initial proposal that will be enriched with external services.

Prerequisites

  • A valid accept-language header and x-api-key.
  • The booking criteria required by the route, such as product_id, resort_arrival_date, duration, and number_attendees.
  • A consistent locale that will also be reused in the following steps.

Calling CURL

curl -X 'POST' \
  'https://api.clubmed.com/v3/proposals/search' \
  -H 'accept: application/json' \
  -H 'accept-language: en-US' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "product_id": "MPAC",
    "resort_arrival_date": "20260415",
    "duration": 7,
    "number_attendees": 2
  }'

Example answer

[
  {
    "id": "123456",
    "product_id": "MPAC",
    "package_id": "AI",
    "price": {
      "total": 9815.4,
      "currency": "EUR"
    },
    "is_bookable": false
  }
]

info: Keep the returned proposal_id and reuse the same locale in the service-related steps that follow.


Response codes

  • OK Response (200): returns one or more priced proposals matching the submitted criteria.
  • Error (400): the criteria, attendee setup, or JSON payload are invalid.
  • Error (401): authentication is missing, invalid, or expired.
  • Error (404): the requested product is unknown.
  • Error (409): the proposal criteria are no longer valid.
POST/v3/proposals/search
See more
2

Retrieve additional services

Mandatory

Use GET/v0/additional_services to list the additional services available before focusing on the product's external services.

Prerequisites

  • Have a valid proposal_id.
  • Send accept-language and x-api-key.
  • Add filters when you need to narrow the returned list.

Calling CURL

curl -X 'GET' \
  'https://api.clubmed.com/v0/additional_services?proposal_id=123456' \
  -H 'accept: application/json' \
  -H 'accept-language: en-US' \
  -H 'x-api-key: YOUR_API_KEY'

Example answer

[
  {
    "id": "VMOSK1",
    "type": "CHILDCARE",
    "currency": "EUR",
    "schedules": [
      {
        "start_date": "20100430",
        "end_date": "20100430",
        "attendees": [
          {
            "id": "A",
            "price": 88
          }
        ]
      }
    ]
  }
]

info: This step mainly confirms that the proposal can still receive services before you query the product's external catalog.


Response codes

  • OK Response (200): returns the additional services available for the proposal.
  • Error (400): the proposal context or filters are invalid.
  • Error (401): authentication is missing, invalid, or expired.
  • Error (404): the proposal was not found in the submitted context.
  • Error (409): the proposal criteria are no longer valid.
GET/v0/additional_services
See more
3

Retrieve external service details

Mandatory

Use GET/v0/products/{product_id}/external_services to retrieve the external services exposed by the product, such as concierge or partner-provided services.

Prerequisites

  • Have a valid product_id.
  • Send accept-language and x-api-key.
  • Add a filter only if you need to restrict the returned list.

Calling CURL

curl -X 'GET' \
  'https://api.clubmed.com/v0/products/MPAC/external_services' \
  -H 'accept: application/json' \
  -H 'accept-language: en-US' \
  -H 'x-api-key: YOUR_API_KEY'

Example answer

[
  {
    "id": "CHAMP285",
    "type": "CONCIERGERIE",
    "subtype": "BABY_SKI_LESSON",
    "title": "Champagne bottle",
    "description": "Bouteille de champagne de qualite superieur",
    "image": "https://ns.clubmed.com/fbs/test.jpg"
  }
]

info: Reuse id, type, and subtype to expose only the external services that are relevant in your UI.


Response codes

  • OK Response (200): returns the external services available for the product.
  • Error (400): the request or filters are invalid.
  • Error (401): non documented in Swagger.
  • Error (404): non documented in Swagger.
GET/v0/products/{product_id}/external_services
See more