Ajouter un transfert à une proposition

  • Vente incitative de réservation
  • Option transfert
  • 4 routes
Comment ajouter un service de transfert à une proposition existante ?

Ce scénario explique comment retrouver une proposition, identifier les offres de transfert dans le catalogue des services additionnels, ajouter le transfert choisi à la proposition puis vérifier le résultat.

Vue d'ensemble

La séquence démarre par une recherche de proposition, puis utilise le catalogue des services additionnels pour cibler les transferts disponibles avant de mettre à jour la liste des services de la proposition et de contrôler le résultat.

Prérequis

  • Une proposition valide doit être créée ou retrouvée au préalable.
  • Le proposal_id retourné par la première étape est requis pour rechercher, mettre à jour puis contrôler les services.
  • accept-language et x-api-key sont requis sur les appels documentés.
  • L'ajout final repose sur une logique cancel & replace : si d'autres services doivent être conservés, ils doivent aussi être présents dans le payload du PUT.

Process workflow

Legend:
Obligatoire
Optionnel
1

Rechercher la proposition à enrichir

Obligatoire

Cette route permet de rechercher les propositions correspondant aux critères de séjour fournis par votre parcours. Utilisez-la pour récupérer la proposition cible, conserver son proposal_id, puis vérifier si un transfert additionnel doit réellement être ajouté.

Prerequis

  • accept-language et x-api-key sont requis.
  • Le corps de requête doit contenir les critères principaux de recherche comme product_id, resort_arrival_date, duration et number_attendees.
  • Conservez l'id de la proposition retenue pour les étapes suivantes.

Calling CURL

curl -X 'POST' \
  'https://api.clubmed.com/v3/proposals/search' \
  -H 'accept: application/json' \
  -H 'accept-language: fr-FR' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "product_id": "BALC",
    "resort_arrival_date": "20260204",
    "duration": 7,
    "number_attendees": 2,
    "known_attendees_information": [
      {"birthdate": "19960905"},
      {"birthdate": "19780619"}
    ]
  }'

Example answer

[
  {
    "id": "123456",
    "product_id": "MPAC",
    "booking_id": 123456,
    "package_id": "AI",
    "label": "Proposal with one club room",
    "duration": 7,
    "price": {
      "total": 9815.4,
      "currency": "EUR",
      "is_transfer_included": true
    },
    "option_available": true,
    "is_bookable": false
  }
]

info: contrôlez price.is_transfer_included sur la proposition retenue : si le transport inclut déjà le transfert, aucun service additionnel de transfert ne sera généralement attendu.


Codes de reponse

  • OK Response (200): la recherche a retourné une liste de propositions correspondant aux critères transmis.
  • Error (400): les critères ou le payload sont invalides, incomplets ou incohérents avec les règles de recherche documentées dans le Swagger.
  • Error (401): la requête est non autorisée car les éléments d'authentification ou la clé API sont absents, invalides ou expirés.
  • Error (403): au moins un client ou un contexte de vente n'est pas autorisé à poursuivre le parcours de booking.
  • Error (404): le produit demandé est introuvable pour le contexte soumis.
  • Error (409): les critères de proposition ne sont plus valides au moment de la recherche.
POST/v3/proposals/search
Voir plus
2

Rechercher les transferts disponibles

Obligatoire

Cette route retourne les services additionnels disponibles pour une proposition donnée. Dans ce scénario, utilisez types=TRANSFER pour récupérer uniquement les transferts éligibles avant de sélectionner celui à ajouter à la proposition.

Prerequis

  • accept-language et x-api-key sont requis.
  • Le paramètre proposal_id est requis pour cibler la proposition retenue à l'étape précédente.
  • Utilisez types=TRANSFER pour filtrer uniquement les services de transfert.

Calling CURL

curl -X 'GET' \
  'https://api.clubmed.com/v0/additional_services?proposal_id=24797468&types=TRANSFER' \
  -H 'accept: application/json' \
  -H 'accept-language: fr-FR' \
  -H 'x-api-key: YOUR_API_KEY'

Example answer

[
  {
    "id": "BALVDP",
    "currency": "EUR",
    "product_information_id": "BALVDP",
    "type": "TRANSFER",
    "schedules": [
      {
        "start_date": "20260211",
        "end_date": "20260211",
        "remaining_stock": 969,
        "attendees": [
          {
            "id": "A",
            "price": 16
          },
          {
            "id": "B",
            "price": 16
          }
        ]
      }
    ],
    "age_in_months": {
      "min": null,
      "max": 1199
    },
    "not_compatible_with": [],
    "sold_only_with": []
  }
]

info: sur les propositions avec transport, le transfert peut déjà être inclus. Dans ce cas, la recherche de services peut retourner un tableau vide ou aucun transfert additionnel vendable.


Codes de reponse

  • OK Response (200): la liste des transferts disponibles a été retournée avec succès.
  • OK Response (206): la réponse est partielle.
  • Error (400): le contexte de proposition ou de booking est invalide, non validé, ou incohérent avec le client transmis.
  • Error (401): la requête est non autorisée car les éléments d'authentification ou la clé API sont absents, invalides ou expirés.
  • Error (403): l'accès est interdit pour le pays ciblé ou l'authentification attendue manque pour certains usages.
  • Error (404): la proposition ou le booking n'a pas été trouvé pour le contexte fourni.
  • Error (409): les critères de proposition ne sont plus valides au moment de la lecture.
  • Error (416): la plage ou le filtre demandé n'est pas satisfaisable.
GET/v0/additional_services
Voir plus
3

Ajouter le transfert à la proposition

Obligatoire

Cette route met à jour la liste des services associés à la proposition pour y inclure le transfert sélectionné. La ressource fonctionne en logique cancel & replace : le payload doit contenir l'ensemble complet des services qui doivent rester attachés à la proposition après la mise à jour.

Prerequis

  • accept-language et x-api-key sont requis.
  • Le paramètre de path proposal_id est requis.
  • Le corps de requête doit contenir l'identifiant du transfert sélectionné ainsi que les schedules et attendees concernés.
  • Si d'autres services doivent être conservés, relisez-les et réinjectez-les aussi dans le payload final.

Calling CURL

curl -X 'PUT' \
  'https://api.clubmed.com/v0/proposals/24796514/services' \
  -H 'accept: application/json' \
  -H 'accept-language: fr-FR' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '[
    {
      "id": "BALVDP",
      "schedules": [
        {
          "start_date": "20260211",
          "end_date": "20260211",
          "attendees": [
            {"id": "A"}
          ]
        }
      ]
    }
  ]'

Example answer

Aucun corps de réponse n'est documenté en cas de succès. Le Swagger documente une réponse 204 No Content.

info: si vous envoyez uniquement le transfert sans reprendre les autres services à conserver, ils peuvent être retirés de la proposition lors de la mise à jour.


Codes de reponse

  • OK Response (204): la liste des services a été mise à jour avec succès sans corps de réponse.
  • Error (400): le payload est invalide, contient un service incompatible, ou oublie un service requis.
  • Error (401): la requête est non autorisée car les éléments d'authentification ou la clé API sont absents, invalides ou expirés.
  • Error (404): la proposition ciblée est introuvable.
  • Error (409): le contrôle économique de la proposition n'est plus valide au moment de la mise à jour.
PUT/v0/proposals/{proposal_id}/services
Voir plus
4

Vérifier le transfert ajouté

Obligatoire

Cette route permet de relire les services actuellement associés à la proposition après la mise à jour. Utilisez-la pour confirmer que le transfert attendu est bien présent avec les bons participants et les bonnes dates.

Prerequis

  • x-api-key est requis.
  • Le paramètre de path proposal_id est requis.
  • Lancez cette vérification après le PUT de mise à jour des services.

Calling CURL

curl -X 'GET' \
  'https://api.clubmed.com/v0/proposals/24797468/services' \
  -H 'accept: application/json' \
  -H 'x-api-key: YOUR_API_KEY'

Example answer

[
  {
    "id": "BALVDP",
    "type": "TRANSFER",
    "currency": "EUR",
    "schedules": [
      {
        "start_date": "20260211",
        "end_date": "20260211",
        "attendees": [
          {
            "id": "A",
            "price": 16,
            "price_without_discount": 16,
            "discounts": []
          }
        ]
      }
    ],
    "product_information_id": "BALVDP",
    "sold_only_with": [],
    "not_compatible_with": []
  }
]

info: si le transfert attendu n'apparaît pas dans cette lecture, revérifiez le payload du PUT et les contraintes d'éligibilité renvoyées par la recherche de services.


Codes de reponse

  • OK Response (200): les services actuellement associés à la proposition ont été retournés avec succès et permettent de contrôler la présence du transfert.
  • Error (400): la requête est invalide ou le filtre transmis n'est pas exploitable.
  • Error (401): non documenté dans le Swagger.
  • Error (404): non documenté dans le Swagger.
GET/v0/proposals/{proposal_id}/services
Voir plus