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

API de Travel Partner Prices

La API de Travel Partner Prices te proporciona una interfaz 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 el 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 descubrimiento para este servicio.

Extremo de servicio

Un servicio extremo es un URL base que especifica la dirección de red de un servicio de API. Un servicio puede tener varios extremos de servicio. Este servicio ofrece los siguientes servicios: y todos los URIs enumerados están relacionados con este extremo de servicio:

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 específica.

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

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

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

Autenticación de la API

La API de Travel Partner Pricing usa OAuth 2.0 para hacer lo siguiente: autenticar tu aplicación para que puedas acceder a las APIs.

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

Cuando creas un proyecto nuevo para la API de precios de Travel Partners, debes hacer lo siguiente: habilita el acceso a tu nuevo proyecto de la consola de Google Cloud, que es similar al que se proporcionan en la API de Travel Partner.

Consulta los pasos que se proporcionan en la API de Travel Partner. y reemplazar todas las instancias de “API de Travel Partner” con "Precios de socios de viajes API" 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 por duración de la estadía tiene los siguientes elementos y atributos:

Elemento Casos Tipo Descripción
requestTime 1 string

El momento en que se envió el mensaje de precio por línea de pedido, expresado con formato RFC 3339 una cadena vacía.

Cualquier mensaje enviado con un requestTime dentro de los 24 anteriores se procesan y se descartan las que no lo hacen.

Los mensajes se procesan en orden de requestTime, independientemente del orden en que se reciban. Por ejemplo, un 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 descartan y se priorizan los mensaje con marca de tiempo de más adelante.

RFC 3339 requiere fechas y horas especificadas completas como YYYY-MM-DDThh:mm:ss.SSZ La zona horaria es obligatoria y se especificó. como una compensación de hh:mm positiva o negativa con respecto a UTC Z como abreviatura de UTC.

Los segundos fraccionarios son opcionales y se pueden expresar con una precisión de hasta nanosegundos. A modo de ejemplo, 2017-01-15T01:30:15.01-08:00 codifica 15.01 segundos después de las 01:30 PST del 15 de enero de 2017.

propertyPrices 1 Object Precios de una propiedad. Todos los precios en 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 en arrivalDayPrices se aplican a una propiedad específica, pero fechas de llegada diferentes.
startDate 1 Object El productPrices se aplica a todas las fechas de llegada entre el startDate y el endDate inclusive.

Si solo quieres 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 9,999.
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 productPrices se aplica a todas las fechas de llegada entre las startDate y endDate inclusive.

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

endDate.year 1 integer Es el año de la 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 encontrarse 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 de esta productPrices se aplican a una propiedad específica, una combinación de fechas de llegada, pero a productos diferentes.
roomTypeId 0..1 string Es el ID único de la habitación a la que se refiere este precio. Usa este ID para que los datos del paquete de Room coincidan con los que enviaste en roomdata. Para obtener más información, consulta Metadatos de paquetes de habitaciones.
ratePlanId 0..1 string Es el ID único de los datos del paquete al que se refiere este precio. Usa este ID para que los datos del paquete de Room coincidan con los que enviaste en packagedata. Para obtener más información, consulta Metadatos del paquete de habitaciones.
occupancyPrices[] 1..n Object Precios por ocupación. Todos los precios de este occupancyPrices se aplican a una propiedad, una fecha de llegada y una combinación de productos específicas, pero a diferentes ocupaciones.
adults 1 integer La cantidad máxima de huéspedes que se pueden reservar por habitación, incluida la cantidad adultos y niños. Este valor se establece para todas las tarifas del occupancyPrices correspondiente y debe ser un valor positivo un número entero entre 1 y 99.

Nota: Comunícate con tu equipo de asistencia al cliente para enviar la ocupación para 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 En el caso de las tarifas condicionales, este ID hace coincidir una tarifa con 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 Es el 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 la tarifa base de los precios de la duración de la estadía.

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

El valor del índice n corresponde a un n+1 y la duración de la estadía.

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 procesarán como de costumbre, y las tarifas restantes no estará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 tarifa número 30.

Las duraciones de las estadías 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 tarifa de los precios de duración de la estadía.

El valor del índice n corresponde a un n+1 y la duración de la estadía.

Ejemplo

Tarifas y impuestos según la duración de la estadía

En el siguiente ejemplo, se muestra cómo establecer una duración mínima de la estadía de 2 días para una fecha de entrada y no establecer disponibilidad para otra fecha de entrada. Si configuras la startDate del 1/9/2023 sin endDate, significa que estás especificando las tarifas para una sola fecha y puedes omitir la endDate

El array occupancyPrices que se establece en 2 te permite establecer diferentes tarifas para diferentes ocupaciones. Por lo tanto, la ausencia de vacantes el 04/09/23 limita los rates disponibles.

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

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

Si la fecha de entrada completa no está disponible (3/9/2023), debes enviar la fecha de forma explícita y omitir rates, taxes y productPrices a indican 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 el formulario:
accounts/{account}/properties/{property}