Nesta página, você verá alguns exemplos de chamadas usando a API Travel Partner v3.
Os endpoints da API Travel Partner usam sintaxe REST para chamadas HTTPS por HTTPS. O base_url para todas as solicitações de API é:
https://travelpartner.googleapis.com/v3/accounts/account_id
Para ver a lista completa de campos de solicitação e resposta, confira o catálogo de recursos de API .
O serviço de visualização de relatório de desempenho de propriedade permite consultar (receber, filtrar e segmentar) um relatório de desempenho de propriedade de uma determinada conta.
No exemplo a seguir, o relatório de desempenho de todas as propriedades na conta 12345678
é filtrado, filtrado até a data de 11 de maio de 2022 e agrupado pelo ID de hotel do parceiro.
GET https://travelpartner.googleapis.com/v3/accounts/12345678/propertyPerformanceReportViews:query?filter=date%20%3D%20%272022-05-11%27&aggregateBy=partnerPropertyId
Exemplo de resposta
{
"results": [
{
"partnerPropertyId": "10001",
"clickCount": "47"
"impressionCount": "360"
},
{
"partnerPropertyId": "10003",
"clickCount": "23"
"impressionCount": "400"
},
{
"partnerPropertyId": "10007",
"clickCount": "106"
"impressionCount": "780"
},
{
"partnerPropertyId": "10009",
"clickCount": "81"
"impressionCount": "520"
},
]
}
Hotel O Serviço de visualização de hotéis oferece uma lista de todos os hotéis ou um resumo deles para uma conta específica.
Como receber uma lista de hotéis O exemplo a seguir recupera uma lista de todos os hotéis na conta 12345678
:
GET https://travelpartner.googleapis.com/v3/accounts/12345678/hotelviews
A solicitação aceita parâmetros de consulta para navegar pelos resultados de várias páginas:
GET base_url /hotelviews?pageSize=10&pageToken=11
Exemplo de resposta
{
"nextPageToken": "11",
"hotelViews": [
{
"googleHotelDisplayName": "Alameda Hotel",
"googleHotelId": "11111111111111111111",
"partnerHotelDisplayName": "Alameda Hotel",
"partnerHotelId": "10",
"dataIssues": [
"MISSING_STREET_NUMBER"
],
"googleClusterId": "1131326789990787753"
},
{
"googleClusterId": "11390920309628839218",
"googleHotelDisplayName": "At Hotel",
"googleHotelId": "9999999999999999999",
"partnerHotelDisplayName": "At Hotel and Restaurant",
"partnerHotelId": "100001"
},
...
{
"googleHotelDisplayName": "Aquapark & Spa Hotel",
"googleHotelId": "444444444444444444",
"partnerHotelDisplayName": "Aquapark & Spa Hotel",
"partnerHotelId": "100069",
"dataIssues": [
"MISSING_PHONE_NUMBER",
"MISSING_STREET_NUMBER",
"LATLONG_INCONSISTENT_WITH_ADDRESS"
],
"googleClusterId": "18401597592098761505"
}
]
}
Como acessar um resumo de propriedades Este exemplo recebe um resumo das propriedades da conta 12345678
:
GET https://travelpartner.googleapis.com/v3/accounts/12345678/hotelviews:summarize
Exemplo de resposta
{
"lastManifestUpdateTime": "2019-09-26T18:24:54.479972Z",
"matchedPropertyCount": "206107",
"overclusteredPropertyWithErrorsCount": "16927",
"overclusteredPropertyCount": "17611",
"unmatchedPropertyWithErrorsCount": "93638",
"lastFeedSubmissionTime": "2019-09-19T20:51:08Z",
"unmatchedPropertyCount": "99673"
}
Relatório de participação O serviço de visualização de relatórios de participação permite consultar (receber, filtrar e segmentar) um relatório de participação de uma conta específica.
Como consultar um relatório de participação O exemplo a seguir recebe o relatório de participação para todas as propriedades na conta 12345678
e filtra o relatório usando uma data de 4/10/20.
GET https://travelpartner.googleapis.com/v3/accounts/12345678/participationReportViews:query?filter=date%20%3D%20%272020-10-04%27
Exemplo de resposta
{
"results": [
{
"missedParticipationCountDetails": {
"noAvailabilityCount": "628873",
"otherReasonCount": "22",
"hotelSuspendedCount": "262",
"noTaxBreakdownCount": "1",
"noLandingPageCount": "4558",
"noPriceCount": "43194",
"noPriceCountDetails": {
"livePricingTechnicalIssueCount": "4795",
"livePricingNotTriggeredCount": "2",
"livePricingConfigIssueCount": "3",
"livePricingNotAvailableCount": "27731",
"livePricingOtherReasonCount": "1"
}
"otherReasonCount": "1"
"priceMissingCount": "2235",
"priceMissingCountDetails": {
"cacheRateMissingCount": "2030",
"itineraryBlockedCount": "196",
"livePricingNotSetupCount": "0",
"bandwidthDepletedCount": "1",
"livePricingTimeoutCount": "8",
"livePricingErrorCount": "0"
}
"priceProblemCount": "0",
"priceProblemCountDetails": {
"hotelSuspendedCount": "0",
"priceUnusuallyHighCount": "0",
"priceUnusuallyLowCount": "0",
"taxesAndFeesMissingCount": "0"
}
"priceUnavailableCount": "0",
"priceUnavailableCountDetails": {
"priceUnavailableCount": "0",
"participationNotLikelyCount": "0"
}
},
"participationCount": "1298876",
"missedParticipationCount": "679146",
"opportunityCount": "1975787",
"participationPercent": 0.6573967740444975
}
]
}
Nível de exatidão do preço Com o Serviço de visualizações do nível de precisão do preço , é possível recuperar relatórios e visões gerais de exatidão do preço de uma determinada conta.
Como gerar um relatório de nível de precisão do preço O exemplo a seguir recupera o Relatório de precisão de preços em 26/08/2019 para a conta 12345678
:
GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceAccuracyViews/20190826
Além dos parâmetros de consulta comuns para paginação pela resposta, há mais alguns para incluir preços correspondentes ou sinais de pixel nos resultados.
Neste exemplo, o relatório de precisão de preços em 26/08/2019 inclui preços correspondentes e indicadores de pixel:
GET base_url /priceAccuracyViews/20190826?includeMatchedPrices=true&includePixels=true
Como listar os relatórios de nível de precisão do preço Para ver uma lista dos relatórios disponíveis, envie esta solicitação:
GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceAccuracyViews
É possível incluir os parâmetros de consulta comuns para paginação nos resultados .
Exemplo de resposta
{
"priceAccuracyViews": [
{
"name": "accounts/12345678/priceAccuracyViews/20190925"
},
...
{
"name": "accounts/12345678/priceAccuracyViews/20190827"
}
]
}
Como receber uma pontuação por nível de precisão do preço Para acessar a visão geral do nível de precisão do preço, use o método summarize
:
GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceAccuracyViews:summarize
Exemplo de resposta
{
"updateTime": "2019-09-26T18:29:32.372204Z",
"currentScore": "EXCELLENT",
"predictedScore": "EXCELLENT"
}
Cobertura de preços O serviço de visualizações de cobertura de preço fornece o relatório de cobertura de preço mais recente ou todo o histórico de cobertura de preço.
Confira as estatísticas de cobertura de preço mais recentes O exemplo a seguir recupera as estatísticas de cobertura de preço mais recentes da conta 12345678
:
GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceCoverageViews:latest
Exemplo de resposta
{
"calculationDate": {
"month": 10,
"day": 1,
"year": 2019
},
"priceCoveragePercent": 7.683124346337668,
"matchedPropertyCount": 486546,
"priceCoverageBuckets": [
{
"availablePriceCount": "57708897",
"advanceBookingWindowRange": "DAYS_0_TO_30",
"priceCoveragePercent": 54.65867924338515,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "44221",
"advanceBookingWindowRange": "DAYS_0_TO_30",
"priceCoveragePercent": 0.04188368831276978,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "59988397",
"advanceBookingWindowRange": "DAYS_31_TO_60",
"priceCoveragePercent": 58.71161890824986,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "8805",
"advanceBookingWindowRange": "DAYS_31_TO_60",
"priceCoveragePercent": 0.008617596574336533,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "55096752",
"advanceBookingWindowRange": "DAYS_61_TO_90",
"priceCoveragePercent": 53.9240864613594,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "11747",
"advanceBookingWindowRange": "DAYS_61_TO_90",
"priceCoveragePercent": 0.011496979779526548,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "117074",
"advanceBookingWindowRange": "DAYS_91_TO_120",
"priceCoveragePercent": 0.11458222616057641,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "7527",
"advanceBookingWindowRange": "DAYS_91_TO_120",
"priceCoveragePercent": 0.007366797207839987,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "71904",
"advanceBookingWindowRange": "DAYS_121_TO_150",
"priceCoveragePercent": 0.07037361318354277,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "5544",
"advanceBookingWindowRange": "DAYS_121_TO_150",
"priceCoveragePercent": 0.005426002885646989,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "56528",
"advanceBookingWindowRange": "DAYS_151_TO_180",
"priceCoveragePercent": 0.05532487213561562,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "4680",
"advanceBookingWindowRange": "DAYS_151_TO_180",
"priceCoveragePercent": 0.00458039204632538,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "29269",
"advanceBookingWindowRange": "DAYS_181_TO_210",
"priceCoveragePercent": 0.02864604589826871,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "2336",
"advanceBookingWindowRange": "DAYS_181_TO_210",
"priceCoveragePercent": 0.0022862811581658314,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "22967",
"advanceBookingWindowRange": "DAYS_211_TO_240",
"priceCoveragePercent": 0.022478176095716885,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "1906",
"advanceBookingWindowRange": "DAYS_211_TO_240",
"priceCoveragePercent": 0.001865433171003456,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "19387",
"advanceBookingWindowRange": "DAYS_241_TO_270",
"priceCoveragePercent": 0.01897437192352781,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "2179",
"advanceBookingWindowRange": "DAYS_241_TO_270",
"priceCoveragePercent": 0.0021326227070391033,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "14102",
"advanceBookingWindowRange": "DAYS_271_TO_300",
"priceCoveragePercent": 0.013801856546427458,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "2048",
"advanceBookingWindowRange": "DAYS_271_TO_300",
"priceCoveragePercent": 0.0020044108783919615,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "10280",
"advanceBookingWindowRange": "DAYS_301_TO_330",
"priceCoveragePercent": 0.010061203041928398,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "1333",
"advanceBookingWindowRange": "DAYS_301_TO_330",
"priceCoveragePercent": 0.0013046287602033614,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
}
],
"priceCoverageBinaryPercent": 76.38722751805585
}
Como acessar o histórico de cobertura de preços Essa solicitação recebe todo o histórico de cobertura de preço de uma conta:
GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceCoverageViews
Exemplo de resposta
{
"priceCoverageViews": [
{
"calculationDate": {
"month": 9,
"day": 17,
"year": 2019
},
"priceCoveragePercent": 7.75351958685931,
"matchedPropertyCount": 492550,
"priceCoverageBuckets": [
{
"availablePriceCount": "57557901",
"advanceBookingWindowRange": "DAYS_0_TO_30",
"priceCoveragePercent": 53.85113864788107,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "40549",
"advanceBookingWindowRange": "DAYS_0_TO_30",
"priceCoveragePercent": 0.037937620780037304,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "60927294",
"advanceBookingWindowRange": "DAYS_31_TO_60",
"priceCoveragePercent": 58.90365880186203,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "9151",
"advanceBookingWindowRange": "DAYS_31_TO_60",
"priceCoveragePercent": 0.00884705927848756,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "58125328",
"advanceBookingWindowRange": "DAYS_61_TO_90",
"priceCoveragePercent": 56.19475711917089,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "6943",
"advanceBookingWindowRange": "DAYS_61_TO_90",
"priceCoveragePercent": 0.0067123956475291366,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "112206",
"advanceBookingWindowRange": "DAYS_91_TO_120",
"priceCoveragePercent": 0.10847919718085183,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "9665",
"advanceBookingWindowRange": "DAYS_91_TO_120",
"priceCoveragePercent": 0.00934398731576683,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "42373",
"advanceBookingWindowRange": "DAYS_121_TO_150",
"priceCoveragePercent": 0.04096562592146797,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "4123",
"advanceBookingWindowRange": "DAYS_121_TO_150",
"priceCoveragePercent": 0.0039860589449463675,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "34813",
"advanceBookingWindowRange": "DAYS_151_TO_180",
"priceCoveragePercent": 0.033656723271990756,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "3296",
"advanceBookingWindowRange": "DAYS_151_TO_180",
"priceCoveragePercent": 0.003186526869401704,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "26839",
"advanceBookingWindowRange": "DAYS_181_TO_210",
"priceCoveragePercent": 0.02594757119170884,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "2188",
"advanceBookingWindowRange": "DAYS_181_TO_210",
"priceCoveragePercent": 0.00211532790966351,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "20301",
"advanceBookingWindowRange": "DAYS_211_TO_240",
"priceCoveragePercent": 0.0196267239004017,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "1589",
"advanceBookingWindowRange": "DAYS_211_TO_240",
"priceCoveragePercent": 0.0015362230568808583,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "17661",
"advanceBookingWindowRange": "DAYS_241_TO_270",
"priceCoveragePercent": 0.01707440868947315,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "1768",
"advanceBookingWindowRange": "DAYS_241_TO_270",
"priceCoveragePercent": 0.0017092777624703316,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "14245",
"advanceBookingWindowRange": "DAYS_271_TO_300",
"priceCoveragePercent": 0.013771867492301967,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "2019",
"advanceBookingWindowRange": "DAYS_271_TO_300",
"priceCoveragePercent": 0.0019519410647214931,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
},
{
"availablePriceCount": "10625",
"advanceBookingWindowRange": "DAYS_301_TO_330",
"priceCoveragePercent": 0.010272101937922665,
"lengthOfStayRange": "LENGTH_OF_STAY_1_TO_7"
},
{
"availablePriceCount": "1401",
"advanceBookingWindowRange": "DAYS_301_TO_330",
"priceCoveragePercent": 0.0013544672767086734,
"lengthOfStayRange": "LENGTH_OF_STAY_8_TO_14"
}
],
"priceCoverageBinaryPercent": 77.83737691604914
},
...
]
}
Preço Com o serviço de visualização de preços , é possível recuperar um relatório de preços de uma determinada propriedade.
Como receber dados de preços para uma propriedade Para ver o relatório de preços de um hotel específico (ID = 101
) pertencente à conta 12345678
, emita esta solicitação:
GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceViews/101
Exemplo de resposta
{
"perItineraryPrices": [
{
"updateTime": "2019-09-30T23:24:32Z",
"checkinDate": {
"month": 9,
"day": 30,
"year": 2019
},
"taxes": 8.83,
"currencyCode": "USD",
"lengthOfStayDays": 1,
"roomAvailable": true,
"price": 68.25
},
...
{
"updateTime": "2019-10-02T03:32:22.347810Z",
"checkinDate": {
"month": 4,
"day": 23,
"year": 2020
},
"currencyCode": "USD",
"price": -1,
"lengthOfStayDays": 3,
"allInclusive": true
}
],
"name": "accounts/12345678/priceViews/101"
}
Relatórios de reconciliação
Esse conteúdo se aplica apenas aos Anúncios de hotéis.
O serviço de relatórios de reconciliação
Obter uma lista de relatórios de reconciliação O exemplo a seguir mostra uma lista de relatórios para a conta 12345678
:
GET https://travelpartner.googleapis.com/v3/accounts/12345678/reconciliationReports
Você pode incluir parâmetros opcionais de consulta de data de início e de término para limitar os resultados. Por exemplo, esta consulta limita a geração de relatórios somente aos que estão entre 15/06/2019 e 15/09/2019:
GET base_url /reconciliationReports?startDate=2019-06-15&endDate=2019-09-15
Exemplo de resposta
{
"reconciliationReports": [
{
"name": "accounts/12345678/reconciliationReports/2019-09-19T08:32:00~booking_report.csv"
}
]
}
Download de um relatório de conciliação Este exemplo recupera o relatório booking_report.csv
(como uma resposta JSON) que foi carregado em 2019-08-26T12:00:00
:
GET base_url /reconciliationReports/2019-08-26T12%3A00%3A00~bookings.csv
Exemplo de resposta
{
"contents": "Hotel ID,Hotel Name,Hotel Address,Hotel City,Hotel State/Region,Hotel PostalCode,Hotel Country Code,Hotel Phone Number,Booking Reference,Booking Date and Time,Check-in Date,Check-out Date,Number of Rooms,Number of Guests,Booking Revenue,Booking Revenue Currency,Booking Revenue Currency to Billing Currency Conversion Rate,Booking Status,Commission,Commission Currency,Commission Currency to Billing Currency Conversion Rate,Payment Date,Payment Status\n\n111,\"Capybara Hotel and Spa\",123 Foo Driveway,Boston,MA,02472,US,+11234567890,2thHRTY,2016-01-04,2016-02-01,2016-02-03,1,4,213.88,USD,1,Stayed,21.39,USD,1.0,2016-06-07,Invoice Required\n\n211,\"Mabels Gabels\",45678 Bar Street,London,,KT13 0PU,GB,+440203456123,z452121A,2016-02-04,2016-02-01,2016-02-03,1,3,414.21,GBP,1.249,Stayed,64.43,USD,1.0,2016-06-07,Invoice Required\n\n311,\"No-Tell Motels\",66 Acacia Avenue,Geneva,,1211,CH,+412241820000,42,2016-03-04,2016-02-01,2016-02-03,1,2,451.15,CHF,1.05,Stayed,37.41,EUR,0.99889,2016-06-07,Invoice Required"
}
Validar um relatório de reconciliação Você pode usar esse método para validar o relatório antes de fazer upload dele. A validação de um relatório não o envia.
O relatório de reconciliação está incluído no corpo da solicitação, como o valor do campo contents
. O relatório de reconciliação precisa seguir a sintaxe descrita em Relatórios de reconciliação .
O exemplo a seguir valida um relatório para a conta 12345678
:
POST https://travelpartner.googleapis.com/v3/accounts/12345678/reconciliationReports:validate
Exemplo de resposta bem-sucedida
{
"successfulRecordCount": 3
}
Enviando um relatório de conciliação Depois de confirmar que um relatório de reconciliação é válido, você poderá fazer upload dele para o Google como neste exemplo:
POST https://travelpartner.googleapis.com/v3/accounts/12345678/reconciliationReports
Exemplo de resposta bem-sucedida
{
"successfulRecordCount": 3,
"reconciliationReport": {
"name": "accounts/12345678/reconciliationReports/2019-09-30T09:17~2019-09-19T08:32:00~booking_report.csv"
}
}