Usage

This page presents some sample calls using the Travel Partner API v3.

The Travel Partner API endpoints accept REST-ful syntax in HTTPS calls. The base_url for all API requests is:

https://travelpartner.googleapis.com/v3/accounts/account_id

For the complete list of request and response fields, check out the API resources catalog.

Property performance report

The Property Performance Report View Service provides the ability to query (get, filter, and segment) a property performance report for a particular account.

Querying a property performance report

The following example gets the property performance report for all properties in account 12345678, filtered to the date of May 11, 2022, and grouped by partner hotel ID.

GET https://travelpartner.googleapis.com/v3/accounts/12345678/propertyPerformanceReportViews:query?filter=date%20%3D%20%272022-05-11%27&aggregateBy=partnerPropertyId

Sample response

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

Hotels

The Hotel View Service provides either a list of all the hotels or a summary of them for a particular account.

Getting a list of hotels

The following example retrieves a list of all the hotels in account 12345678:

GET https://travelpartner.googleapis.com/v3/accounts/12345678/hotelViews

The request accepts query parameters for navigating through multi-page results:

GET base_url/hotelViews?pageSize=10&pageToken=11

Sample response

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

Getting a properties summary

This example gets a summary of the properties for account 12345678:

GET https://travelpartner.googleapis.com/v3/accounts/12345678/hotelViews:summarize

Sample response

{
  "lastManifestUpdateTime": "2019-09-26T18:24:54.479972Z",
  "matchedPropertyCount": "206107",
  "overclusteredPropertyWithErrorsCount": "16927",
  "overclusteredPropertyCount": "17611",
  "unmatchedPropertyWithErrorsCount": "93638",
  "lastFeedSubmissionTime": "2019-09-19T20:51:08Z",
  "unmatchedPropertyCount": "99673"
}

Participation report

The Participation Report View Service provides the ability to query (get, filter, and segment) a participation report for a particular account.

Querying a participation report

The following example gets the participation report for all properties in account 12345678 and filters the report using a date of 10/4/20.

GET https://travelpartner.googleapis.com/v3/accounts/12345678/participationReportViews:query?filter=date%20%3D%20%272020-10-04%27

Sample response

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

Price accuracy

The Price Accuracy Views Service enables retrieval of price accuracy reports and scorecards for a particular account.

Getting a price accuracy report

The following example retrieves the price accuracy report on 8/26/2019 for account 12345678:

GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceAccuracyViews/20190826

Besides the usual query parameters for paging through the response, there are a couple more for including matched prices or pixel signals in the results.

In this example, the price accuracy report on 8/26/2019 includes matched prices and pixel signals:

GET base_url/priceAccuracyViews/20190826?includeMatchedPrices=true&includePixels=true

Listing available price accuracy reports

To get a list of the available reports, send this request:

GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceAccuracyViews

You can include the usual query parameters for paging through the results.

Sample response

{
  "priceAccuracyViews": [
    {
      "name": "accounts/12345678/priceAccuracyViews/20190925"
    },
...
    {
      "name": "accounts/12345678/priceAccuracyViews/20190827"
    }
  ]
}

Getting a price accuracy score

To get the price accuracy scorecard, use the summarize method:

GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceAccuracyViews:summarize

Sample response

{
  "updateTime": "2019-09-26T18:29:32.372204Z",
  "currentScore": "EXCELLENT",
  "predictedScore": "EXCELLENT"
}

Price coverage

The Price Coverage Views Service provides the latest price coverage report or the entire price coverage history.

Getting the latest price coverage stats

The following example retrieves the latest price coverage stats for account 12345678:

GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceCoverageViews:latest

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

Getting the price coverage history

This request gets the entire price coverage history for an account:

GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceCoverageViews

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

Price

The Price Views Service lets you retrieve a price report for a given property.

Getting pricing data for a property

To get the pricing report for a particular hotel (ID=101) belonging to account 12345678, issue this request:

GET https://travelpartner.googleapis.com/v3/accounts/12345678/priceViews/101

Sample response

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

Reconciliation reports

The Reconciliation Reports Service lets you get a list of reports, download a particular report, validate it, then upload the report to Google.

Getting a list of reconciliation reports

The following example gets a list of reports for account 12345678:

GET https://travelpartner.googleapis.com/v3/accounts/12345678/reconciliationReports

You can include optional start and end date query parameters to limit the results. For example, this query confines reports to only those between 6/15/2019 to 9/15/2019:

GET base_url/reconciliationReports?startDate=2019-06-15&endDate=2019-09-15

{
  "reconciliationReports": [
    {
      "name": "accounts/12345678/reconciliationReports/2019-09-19T08:32:00~booking_report.csv"
    }
  ]
}

Downloading a reconciliation report

This example retrieves the booking_report.csv report (as a JSON response) that was uploaded at 2019-08-26T12:00:00:

GET base_url/reconciliationReports/2019-08-26T12%3A00%3A00~bookings.csv

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

Validating a reconciliation report

You can use this method to validate the report before uploading it. Validating a report does not upload it.

The reconciliation report is included in the body of the request, as the value for the contents field. The reconciliation report must follow the syntax described in Reconciliation reports.

The following example validates a report for account 12345678:

POST https://travelpartner.googleapis.com/v3/accounts/12345678/reconciliationReports:validate

Sample successful response

{
  "successfulRecordCount": 3
}

Uploading a reconciliation report

After you've confirmed that a reconciliation report is valid, you can upload it to Google like in this example:

POST https://travelpartner.googleapis.com/v3/accounts/12345678/reconciliationReports

Sample successful response

{
  "successfulRecordCount": 3,
  "reconciliationReport": {
    "name": "accounts/12345678/reconciliationReports/2019-09-30T09:17~2019-09-19T08:32:00~booking_report.csv"
  }
}