Tarifs basés sur la durée du séjour

API Travel Partner Prices

L'API Travel Partner Prices vous fournit une interface RESTful pour envoyer les prix des établissements à Google.

Service : travelpartnerprices.googleapis.com

Pour appeler ce service, nous vous recommandons d'utiliser les bibliothèques clientes fournies par Google. Si votre application doit utiliser vos propres bibliothèques pour appeler ce service, contactez votre responsable de compte technique (TAM) pour obtenir le document de découverte de ce service.

Point de terminaison de service

Un point de terminaison de service est une URL de base qui spécifie l'adresse réseau d'un service d'API. Un service peut posséder plusieurs points de terminaison de service. Ce service possède le point de terminaison de service suivant, et tous les URI listés sont relatifs à ce point de terminaison de service :

https://travelpartnerprices.googleapis.com
Méthodes
ingestLosPropertyPrices POST /v1/accounts/account_id/properties/property_id:ingestLosPropertyPrices

Importez les prix de la durée du séjour fournis pour un établissement spécifique.

Nécessite un message de prix LoS encodé au format JSON (voir ci-dessous) comme corps du message HTTP.

account_id : cette valeur de chaîne correspond à la valeur "ID de compte" indiquée sur la page "Paramètres du compte" dans Hotel Center.

property_id : la valeur de cet élément doit être une chaîne correspondant à l'ID de la fiche dans votre flux Hotel List Feed.

Authentification auprès des API

L'API Travel Partner Prices utilise OAuth 2.0 pour authentifier votre application et vous permettre d'accéder aux API.

Suivez les instructions de configuration d'OAUTH 2.0 pour obtenir l'autorisation d'accéder à l'API Travel Partner Prices.

Lorsque vous créez un projet pour l'API Travel Partners Prices, vous devez activer l'accès à votre nouveau projet de la console Google Cloud, comme indiqué dans les instructions de l'API Travel Partner.

Reportez-vous aux étapes fournies dans l'API Travel Partner et remplacez toutes les instances de "API Travel Partner" par "API Travel Partner Prices" pour activer votre projet.

Le champ d'application de l'API Travel Partner Prices est le suivant : "https://travelpartnerprices.googleapis.com"

Le chemin d'importation de l'API Travel Partner Prices est le suivant : "/travel/lodging/uploads/accounts/<account_id>/property_data"

Requêtes

Syntaxe

Le message LoS Prices utilise la syntaxe suivante :

{
  "requestTime": YYYY-MM-DDTHH:mm:ss.SSSZ,
  "propertyPrices": {
    "arrivalDatePrices": [{
      "startDate": {
        "year": int
        "month": int
        "day": int
      }
      "endDate": {
        "year": int
        "month": int
        "day": int
      }
      "productPrices": [{
        "roomTypeId": "string"
        "ratePlanId": "string"
        "occupancyPrices": [{
          "adults": int
          "prices": [{
            "rateRuleId": "string"
            "currencyCode": "string"
            "rates": [night_1,night_2,...]
            "taxes": [night_1,night_2,...]
            "fees": [night_1,night_2,...]
          }]
        }]
      }]
    }]
  }
}

Éléments et attributs

Le message "Prix selon la durée du séjour" contient les éléments et les attributs suivants :

Élément Occurrences Type Description
requestTime 1 string

Heure à laquelle le message sur le prix de la durée du séjour a été envoyé, exprimée sous la forme d'une chaîne au format RFC 3339.

Tous les messages envoyés avec un requestTime au cours des dernières 24 heures sont traités. Les autres sont supprimés.

Les messages sont traités dans l'ordre de requestTime, quel que soit l'ordre dans lequel ils sont reçus. Par exemple, une mise à jour de prix avec un requestTime de 2019-05-03T14:09:00Z reçue après un message pour les mêmes itinéraires avec un requestTime de 2019-05-03T14:10:00Z est ignorée au profit du message dont l'horodatage est plus récent.

Le format RFC 3339 exige des dates et heures entièrement spécifiées, par exemple YYYY-MM-DDThh:mm:ss.SSZ. Le fuseau horaire est obligatoire. Il doit être spécifié sous la forme d'un décalage hh:mm positif ou négatif par rapport à l'heure UTC, ou Z comme abréviation d'UTC.

Les fractions de seconde sont facultatives et peuvent être exprimées avec une précision de l'ordre de la nanoseconde. Par exemple, 2017-01-15T01:30:15.01-08:00 correspond à 15, 01 secondes après 01h30 PST le 15 janvier 2017.

propertyPrices 1 Object Prix d'un établissement. Tous les prix de ce propertyPrices s'appliquent à la même propriété.

Cet élément n'est pas répété. Pour envoyer les prix de plusieurs propriétés, vous devez effectuer plusieurs requêtes HTTP (au moins une par propriété).

arrivalDayPrices[] 1..n Object Prix pour une date d'arrivée. Tous les prix de ce arrivalDayPrices s'appliquent à une propriété spécifique, mais à des dates d'arrivée différentes.
startDate 1 Object Le productPrices s'applique à toutes les dates d'arrivée comprises entre le startDate et le endDate (inclus).

Si vous ne souhaitez spécifier qu'une seule date d'arrivée (et non une plage), saisissez-la dans les champs startDate et endDate.

startDate.year 1 integer Année de startDate. La valeur doit être comprise entre 1 et 9 999.
startDate.month 1 integer Mois d'une année. La valeur doit être comprise entre 1 et 12.
startDate.day 1 integer Jour du mois. Il doit être compris entre 1 et 31, et valide pour l'année et le mois.
endDate 0..1 Object productPrices s'applique à toutes les dates d'arrivée comprises entre le startDate et le endDate, inclus.

Si vous ne souhaitez spécifier qu'une seule date d'arrivée (et non une plage), vous pouvez omettre endDate.

endDate.year 1 integer Année de endDate. La valeur doit être comprise entre 1 et 9 999.
endDate.month 1 integer Mois d'une année. La valeur doit être comprise entre 1 et 12.
endDate.day 1 integer Jour du mois. Il doit être compris entre 1 et 31, et valide pour l'année et le mois.
productPrices[] 1..n Object Prix d'un produit. Tous les prix de ce productPrices s'appliquent à une combinaison spécifique de propriété et de date d'arrivée, mais à des produits différents.
roomTypeId 0..1 string Identifiant unique de la chambre à laquelle ce prix fait référence. Utilisez cet identifiant pour faire correspondre les données de l'offre de chambres aux données que vous avez envoyées dans roomdata. Pour en savoir plus, consultez Métadonnées des offres de chambres.
ratePlanId 0..1 string Identifiant unique des données du séjour organisé auquel ce prix se rapporte. Utilisez cet identifiant pour faire correspondre les données de l'offre de chambres aux données que vous avez envoyées dans packagedata. Pour en savoir plus, consultez Métadonnées des offres de chambres.
occupancyPrices[] 1..n Object Prix pour une occupation. Tous les prix de ce occupancyPrices s'appliquent à une propriété, une date d'arrivée et une combinaison de produits spécifiques, mais à des taux d'occupation différents.
adults 1 integer Nombre maximal de clients pouvant être réservés par chambre, y compris les adultes et les enfants. Cette valeur est définie pour tous les taux dans le champ occupancyPrices correspondant. Elle doit être un entier positif compris entre 1 et 99.

Remarque : Contactez votre équipe d'assistance pour envoyer l'occupation pour plus de quatre adultes.

prices[] 1..n Object Prix selon la durée du séjour. Tous les prix indiqués dans prices s'appliquent à une combinaison spécifique d'établissement, de date d'arrivée, de produit et d'occupation.
rateRuleId 0..1 string Pour les tarifs sous conditions, cet identifiant fait correspondre un tarif à une définition figurant dans votre fichier de définition des règles d'offres. Ce champ est limité à 40 caractères.
currencyCode 1 string Code à trois lettres de la devise dans laquelle rates et taxes sont fournis. Par exemple, "USD" pour le dollar américain.
rates[] 30 float Composant du tarif de base des prix de la durée du séjour.

Si une valeur taxes correspondante est fournie, ce taux n'inclut pas la taxe. Le prix total correspond à la somme du tarif et des taxes applicables.

La valeur à l'index n correspond à une durée de séjour n+1.

Vous devez envoyer l'ensemble complet des 30 prix de la durée du séjour à la fois. Si vous envoyez moins de 30 prix, tous les prix de durée de séjour fournis sont traités normalement, et les tarifs restants ne sont pas disponibles jusqu'à la durée de séjour de 30 jours. Si vous envoyez plus de 30 tarifs,ceux qui dépassent ce nombre seront ignorés .

Les durées de séjour non disponibles doivent être représentées par un 0.

taxes[] 30 float Composant de taxe des prix de la durée du séjour.

La valeur à l'index n correspond à une durée de séjour n+1.

fees[] 30 float Composant des frais pour les prix de la durée du séjour.

La valeur à l'index n correspond à une durée de séjour n+1.

Exemple

Tarifs et taxes basés sur la durée du séjour

L'exemple suivant montre comment définir une durée de séjour minimale de deux nuits pour une date d'arrivée et aucune disponibilité pour une autre date d'arrivée. Si vous définissez startDate sur le 1er septembre 2023 sans endDate, cela signifie que vous spécifiez les tarifs pour une seule date et que vous pouvez omettre endDate.

Le tableau occupancyPrices défini sur 2 vous permet de définir différents tarifs pour différentes capacités. Par conséquent, l'absence de disponibilité le 04/09/2023 limite les rates disponibles.

Le tableau taxes affiché est calculé comme 10 % du taux.

Le tableau fees affiché applique des frais de ménage de 50 $par séjour.

Si la date d'arrivée complète (3/9/2023) n'est pas disponible, vous devez envoyer explicitement la date et omettre rates, taxes et productPrices pour indiquer qu'il n'y a pas de disponibilité pour la date demandée.

{
  "requestTime": "2023-08-10T12:15:222",
  "propertyPrices": {
    "arrivalDatePrices": [
      {
        "startDate": {
          "year": 2023,
          "month": 9,
          "day": 1
        },
        "productPrices": [
          {
            "occupancyPrices": [
              {
                "adults": 2,
                "prices": [
                  {
                    "currencyCode": "USD",
                    "rates": [
                      0, 200, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "taxes": [
                      0, 20, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "fees": [
                      0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "startDate": {
          "year": 2023,
          "month": 9,
          "day": 3
        },
        "productPrices": [
          {
            "occupancyPrices": [
              {
                "adults": 2,
                "prices": [
                  {
                    "currencyCode": "USD",
                    "rates": [
                      0, 200, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "taxes": [
                      0, 20, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "fees": [
                      0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

Corps de la réponse

Si la requête aboutit, le corps de la réponse contient des données qui ont la structure suivante :

Représentation JSON
        {
          "name": "string"
        }
        
Champs
name Nom de ressource de PropertyPrices qui a été modifié. Elle se présente sous la forme suivante :
accounts/{account}/properties/{property}.