Ajouter des services à une réservation existante

  • Bookings
  • Upsell booking
  • 4 routes
Comment ajouter des services à une réservation existante ?

Ce scénario explique comment ajouter des services à une réservation existante en lisant le panier courant, en ajoutant un service, en validant la modification lorsqu'aucun paiement n'est nécessaire puis en listant les services souscrits. Il convient aux parcours de vente additionnelle post-réservation et de gestion des services.

Le flux part d'un customer_id et d'un booking_id connus, puis enchaîne la lecture du panier, l'enrichissement et la confirmation des services avant de relire les services rattachés à la réservation.

Vue d'ensemble

Ce scénario est conçu pour les applications qui doivent vendre ou gérer des services additionnels sur une réservation existante.

Prérequis

  • Un customer_id et un booking_id connus.
  • Un bearer token valide, accept-language et x-api-key.
  • Certaines étapes d'ajout et de validation reposent sur des corps de requête dont le schéma complet n'est pas exposé dans les extraits disponibles.
  • La route d'ajout au panier mentionne explicitement une limitation sur les réservations multi-stays.

Résultat attendu

L'application peut inspecter le panier courant, ajouter un service, valider la modification lorsqu'aucun paiement n'est requis puis relire les services souscrits sur la réservation.

Process workflow

Legend:
Obligatoire
Optionnel
1

Inspecter le panier de la réservation

Obligatoire

Utilisez cette route pour inspecter le panier courant de la réservation avant d'ajouter un nouveau service d'upsell.

Prerequis

  • Un customer_id et un booking_id valides.
  • Envoyez accept-language, authorization et x-api-key.
  • Appelez cette étape en premier pour comprendre le prix du panier courant et les contraintes de compatibilité des services.

Calling CURL

curl -X 'GET' \
  'https://api.clubmed.com/v1/customers/123456789/bookings/0123456789/cart' \
  -H 'accept: application/json' \
  -H 'accept-language: fr-FR' \
  -H 'authorization: Bearer YOUR_TOKEN' \
  -H 'x-api-key: YOUR_API_KEY'

Example answer

{
  "price": {
    "total": 250,
    "currency": "EUR",
    "detail": [
      {
        "amount": 500,
        "type": "CHILDCARE"
      }
    ]
  },
  "services": [
    {
      "id": "APCA2Y",
      "type": "CHILDCARE",
      "stay_index": 1,
      "sold_only_with": [
        "ATIG3A"
      ],
      "not_compatible_with": [
        "ATIG3A"
      ]
    }
  ]
}

info: Vérifiez sold_only_with et not_compatible_with avant d'ajouter un service pour éviter les conflits d'upsell.


Codes de reponse

  • OK Response (200): retourne le prix du panier courant et les services déjà en attente sur la réservation.
  • Error (400): une valeur d'entrée est invalide.
  • Error (401): l'authentification est absente, invalide ou expirée.
  • Error (403): l'accès est interdit à cause d'un mismatch sur le client, l'issuer ou la locale.
  • Error (404): non documente dans le Swagger.
GET/v1/customers/{customer_id}/bookings/{booking_id}/cart
Voir plus
2

Ajouter un service au panier

Obligatoire

Cette route ajoute un service à un panier. Le Swagger indique explicitement que la suppression d'un service du panier se fait via DELETE /v0/customers/{customer_id}/bookings/{booking_id}/cart/{serviceId}.

Prérequis

  • Réutiliser le customer_id et le booking_id du panier ciblé.
  • Envoyer accept-language, authorization et x-api-key.
  • Préparer un body de requête qui identifie le service, le planning et les attendees à rattacher au panier.

Calling CURL

curl -X 'POST' \
  'https://api.clubmed.com/v1/customers/123456789/bookings/0123456789/cart/services' \
  -H 'accept: application/json' \
  -H 'accept-language: fr-FR' \
  -H 'authorization: Bearer YOUR_TOKEN' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data-raw @booking-cart-service.json

Example answer

HTTP/1.1 204 No Content

info: Rejouez l'étape de lecture du panier après cet appel si l'interface doit afficher immédiatement le contenu et le pricing actualisés.


Codes de réponse

  • OK Response (200): non documenté dans le Swagger. Le contrat de succès est 204 No Content, donc aucun body n'est retourné.
  • Error (400): le payload est invalide, incomplet ou n'est pas un JSON valide.
  • Error (401): l'authentification est absente, invalide ou expirée.
  • Error (403): l'accès est interdit à cause d'un mismatch sur le client ou l'issuer.
  • Error (404): non documenté dans le Swagger.
  • Error (501): l'upsell sur réservation multi-stay n'est pas disponible sur cette route.
POST/v1/customers/{customer_id}/bookings/{booking_id}/cart/services
Voir plus
3

Valider les services sans paiement si possible

Obligatoire

Cette route valide les services additionnels d'une réservation sans paiement lorsque c'est possible. Utilisez-la uniquement lorsque les services sélectionnés peuvent être confirmés sans passer par une phase de paiement.

Prérequis

  • Réutiliser le customer_id et le booking_id de la réservation mise à jour.
  • Envoyer accept-language, authorization et x-api-key.
  • Vérifier que les services ajoutés ne nécessitent pas de paiement avant d'appeler cette étape de validation.

Calling CURL

curl -X 'POST' \
  'https://api.clubmed.com/v0/customers/123456789/bookings/0123456789/services_no_payment_validation' \
  -H 'accept: application/json' \
  -H 'accept-language: fr-FR' \
  -H 'authorization: Bearer YOUR_TOKEN' \
  -H 'x-api-key: YOUR_API_KEY'

Example answer

HTTP/1.1 204 No Content

info: Lorsqu'un paiement reste nécessaire, cette route n'est pas le bon endpoint de validation et le parcours doit continuer vers le flux de paiement adapté.


Codes de réponse

  • OK Response (200): non documenté dans le Swagger. Le contrat de succès est 204 No Content, donc aucun body n'est retourné.
  • Error (400): la requête est invalide ou la réservation ne peut pas être validée dans son état courant.
  • Error (401): l'authentification est absente, invalide ou expirée.
  • Error (403): l'accès est interdit à cause d'un mismatch sur le client, l'issuer ou la locale.
  • Error (404): la réservation ciblée est introuvable.
POST/v0/customers/{customer_id}/bookings/{booking_id}/services_no_payment_validation
Voir plus
4

Lister les services souscrits

Obligatoire

Utilisez GET/v3/customers/{customer_id}/bookings/{booking_id}/services pour relire les services souscrits après confirmation du panier d'upsell.

Prerequis

  • Réutilisez le customer_id et le booking_id de la réservation.
  • Envoyez accept-language, authorization et x-api-key.
  • Vous pouvez ajouter status en query si l'interface doit filtrer uniquement les services validés, en attente ou annulés.

Calling CURL

curl -X 'GET' \
  'https://api.clubmed.com/v3/customers/123456789/bookings/0123456789/services?status=VALIDATED' \
  -H 'accept: application/json' \
  -H 'accept-language: fr-FR' \
  -H 'authorization: Bearer YOUR_TOKEN' \
  -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",
            "status": "VALIDATED",
            "price": 16,
            "discounts": []
          }
        ]
      }
    ],
    "transfer_information": [
      {
        "journey_type": "OUTBOUND",
        "meeting_point": "Airport"
      }
    ]
  }
]

info: le filtre status est utile quand le booking contient beaucoup d'événements de service et que l'interface n'a besoin que du sous-ensemble actif.


Codes de reponse

  • OK Response (200): retourne les services actuellement souscrits sur la réservation.
  • Error (400): une valeur d'entrée est invalide.
  • Error (401): l'authentification est absente, invalide ou expirée.
  • Error (403): l'accès est interdit à cause d'un mismatch sur le client, l'issuer ou la locale.
  • Error (404): la réservation est introuvable.
GET/v3/customers/{customer_id}/bookings/{booking_id}/services
Voir plus