Precios según la duración de la estadía (LoS)

Travel Partner Prices API

La API de Travel Partner Prices te proporciona una interfaz de RESTful para enviar precios de propiedades a Google.

Servicio: travelpartnerprices.googleapis.com

Para llamar a este servicio, te recomendamos que uses las bibliotecas cliente que proporciona Google. Si tu aplicación necesita usar tus propias bibliotecas para llamar a este servicio, comunícate con tu administrador técnico de cuentas (TAM) para obtener el documento de Discovery de este servicio.

Extremo de servicio

Un endpoint de servicio es una URL base que especifica la dirección de red de un servicio de API. Un servicio puede tener varios extremos de servicio. Este servicio tiene el siguiente extremo, y todos los URI que se enumeran a continuación están relacionados con él:

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

Sube los precios de duración de la estadía proporcionados para una propiedad especificada.

Requiere un mensaje de precios de LoS codificado en JSON (consulta a continuación) como cuerpo del mensaje HTTP.

account_id: Este valor de cadena es el valor de "ID de cuenta" que se indica en la página Configuración de la cuenta de Hotel Center.

property_id: El valor de este elemento debe ser una cadena que coincida con el ID de la ficha en tu feed de lista de hoteles.

Autenticación de la API

La API de Travel Partner Prices usa OAuth 2.0 para autenticar tu aplicación y que puedas acceder a las APIs.

Sigue las instrucciones de configuración de OAUTH 2.0 para obtener autorización para tu API de Travel Partner Prices.

Cuando crees un proyecto nuevo para la API de Travel Partners Prices, deberás habilitar el acceso a tu nuevo proyecto de la consola de Google Cloud, de manera similar a las instrucciones proporcionadas en la API de Travel Partner.

Consulta los pasos proporcionados en la API de Travel Partner y reemplaza todas las instancias de "API de Travel Partner" por "API de Travel Partner Prices" para habilitar tu proyecto.

El alcance de la API de Travel Partner Prices es el siguiente: "https://travelpartnerprices.googleapis.com"

La ruta de carga de la API de Travel Partner Prices es la siguiente: "/travel/lodging/uploads/accounts/<account_id>/property_data"

Solicitudes

Sintaxis

El mensaje LoS Prices usa la siguiente sintaxis:

{
  "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,...]
          }]
        }]
      }]
    }]
  }
}

Elementos y atributos

El mensaje de precios de Length of Stay tiene los siguientes elementos y atributos:

Elemento Casos Tipo Descripción
requestTime 1 string

Es el momento en que se envió el mensaje de precio del LoS, expresado como una cadena con formato RFC 3339.

Se procesa cualquier mensaje enviado con un requestTime en las últimas 24 horas, y se descartan los que no se hayan enviado.

Los mensajes se procesan en orden de requestTime, sin importar el orden en que se reciben. Por ejemplo, una actualización de precio con un requestTime de 2019-05-03T14:09:00Z que se recibe después de un mensaje para los mismos itinerarios con un requestTime de 2019-05-03T14:10:00Z se descarta en favor del mensaje con la marca de tiempo posterior.

La RFC 3339 requiere fechas y horas completamente especificadas como YYYY-MM-DDThh:mm:ss.SSZ. Se requiere la zona horaria, especificada como un desplazamiento hh:mm positivo o negativo desde UTC, o Z como abreviatura de UTC.

Las fracciones de segundos son opcionales y se pueden expresar con una precisión de hasta nanosegundos. Por ejemplo, 2017-01-15T01:30:15.01-08:00 codifica 15.01 segundos después de las 1:30 p.m. (PST) del 15 de enero de 2017.

propertyPrices 1 Object Son los precios de una propiedad. Todos los precios dentro de este propertyPrices se aplican a la misma propiedad.

Este elemento no se repite. Para enviar precios de varias propiedades, debes realizar varias solicitudes HTTP (al menos una por propiedad).

arrivalDayPrices[] 1..n Object Precios para una fecha de llegada. Todos los precios dentro de este arrivalDayPrices se aplican a una propiedad específica, pero con diferentes fechas de llegada.
startDate 1 Object El productPrices se aplica a todas las fechas de llegada entre el startDate y el endDate, inclusive.

Si solo intentas especificar una fecha de llegada (y no un rango), ingresa la fecha de llegada en startDate y endDate.

startDate.year 1 integer Año del startDate Debe ser un valor entre 1 y 9999.
startDate.month 1 integer Mes del año. Debe encontrarse entre 1 y 12.
startDate.day 1 integer Día del mes. Debe ser entre 1 y 31, y ser válido para el año y el mes.
endDate 0..1 Object El parámetro productPrices se aplica a todas las fechas de llegada entre startDate y endDate, inclusive.

Si solo intentas especificar una fecha de llegada (y no un rango), se puede omitir endDate.

endDate.year 1 integer Año del endDate Debe ser un valor entre 1 y 9999.
endDate.month 1 integer Mes del año. Debe encontrarse entre 1 y 12.
endDate.day 1 integer Día del mes. Debe ser entre 1 y 31, y ser válido para el año y el mes.
productPrices[] 1..n Object Son los precios de un producto. Todos los precios dentro de este productPrices se aplican a una combinación específica de propiedad y fecha de llegada, pero a diferentes productos.
roomTypeId 0..1 string Es el ID único de la habitación a la que se refiere este precio. Usa este ID para hacer coincidir los datos del paquete de Room con los que enviaste en roomdata. Para obtener más información, consulta Metadatos de Room Bundle.
ratePlanId 0..1 string Es el ID único de los datos del paquete al que hace referencia este precio. Usa este ID para hacer coincidir los datos de Room Bundle con lo que enviaste en packagedata. Para obtener más información, consulta Metadatos de Room Bundle.
occupancyPrices[] 1..n Object Son los precios para una ocupación. Todos los precios dentro de este occupancyPrices se aplican a una propiedad, una fecha de llegada y una combinación de productos específicos, pero a diferentes ocupaciones.
adults 1 integer Es la cantidad máxima de huéspedes que se pueden reservar por habitación, incluidos adultos y niños. Este valor se establece para todas las tarifas dentro del campo occupancyPrices correspondiente y debe ser un número entero positivo entre 1 y 99.

Nota: Comunícate con el equipo de asistencia al cliente para enviar la ocupación de más de cuatro adultos.

prices[] 1..n Object Precios por duración de la estadía Todos los precios dentro de prices se aplican a una combinación específica de propiedad, fecha de llegada, producto y ocupación.
rateRuleId 0..1 string Para las tarifas condicionales, este ID vincula una tarifa a una definición en tu archivo de definición de reglas de tarifas. El límite de caracteres para este campo es de 40.
currencyCode 1 string Código de moneda de tres letras en el que se proporcionan rates y taxes. Por ejemplo, "USD" para dólares estadounidenses.
rates[] 30 float Es el componente de tarifa base de los precios de la duración de la estadía.

Si se proporciona un valor de taxes correspondiente, esta tasa no incluye el impuesto. El precio total es la suma de la tarifa y el impuesto correspondientes.

El valor en el índice n corresponde a una duración de la estadía de n+1.

Debes enviar el conjunto completo de 30 precios de la LoS a la vez. Si envías menos de 30, todos los precios de LoS proporcionados se procesan de forma normal y las tarifas restantes no están disponibles hasta el LoS 30. Si envías más de 30,se descartarán los precios que envíes después de la 30ª tarifa .

Las duraciones de estadía no disponibles se deben representar con un 0.

taxes[] 30 float Es el componente impositivo de los precios por duración de la estadía.

El valor en el índice n corresponde a una duración de la estadía de n+1.

fees[] 30 float Es el componente de comisión de los precios por duración de la estadía.

El valor en el índice n corresponde a una duración de la estadía de n+1.

Ejemplo

Impuestos y tarifas según la duración de la estadía

En el siguiente ejemplo, se muestra cómo establecer la estadía mínima de 2 para una fecha de entrada y cómo establecer que no haya disponibilidad para otra fecha de entrada. Si estableces el startDate a partir del 1/9/2023 sin endDate, significa que especificas las tarifas para una sola fecha y puedes omitir el endDate.

El array occupancyPrices que se establece en 2 te permite establecer diferentes tarifas para diferentes ocupaciones. Por lo tanto, no hay vacantes el 4/9/23, lo que limita la disponibilidad de rates.

El array taxes que se muestra se calcula como el 10% de la tarifa.

El array fees que se muestra aplica una tarifa de limpieza de USD 50 por estadía.

Si toda la fecha de entrada no está disponible (3/9/2023), debes enviar la fecha de forma explícita y omitir rates, taxes y productPrices para indicar que no hay disponibilidad para la fecha solicitada.

{
  "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
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

Cuerpo de la respuesta

Si se ejecuta correctamente, el cuerpo de la respuesta contendrá datos con la siguiente estructura:

Representación JSON
        {
          "name": "string"
        }
        
Campos
name Es el nombre del recurso de PropertyPrices que se modificó. Tiene la siguiente forma:
accounts/{account}/properties/{property}.