Download OpenAPI specification:Download
Date | Description |
---|---|
17 June 2022 | Added /util/countrymap service |
26 May 2022 | Added advice about review authenticity: Key concepts - Review authenticity |
6 May 2022 | Added product-content endpoints (which are not exclusive to transactional affiliates but return booking-related data elements) so that descriptions for these fields appear in this document; i.e., /search/products, /search/products/codes, /search/freetext, /product and /attraction/products |
11 Dec 2020 | Added Key concepts – Booking references , Key concepts – Cancellation policy and Common workflows and data validation – API workflow sections |
9 Dec 2020 | Added /bookings/cancel-reasons, /bookings/{booking-reference}/cancel-quote and /bookings/{booking-reference}/cancel endpoints |
28 Oct 2020 | Updated FAQ section re booking questions, traveler names, and pricing |
2 June 2020 | Updated Postman collections and Testing section |
20 May 2020 | Recompiled document with ReDoc 0.9.8 to resolve Chrome 80 incompatibility |
20 Apr 2020 | Regenerated response samples for most endpoints; updated postman collection |
This manual is an addendum to the Viator affiliate technical manual, covering booking-related topics.
VBAs with booking capability, or 'transactional affiliates' also have the option of allowing their customers to process bookings directly from their site and via the API – similar to a merchant partner – without being redirected to viator.com to complete their transaction. This partner type sends customer details, product details and credit card payment information via the API, but Viator retains control of and responsibility for processing payments and customer support.
Note:
The authentication mechanism for this API has been updated recently. Now, partners can also authenticate using a new style of API key that is included in each call as a header parameter. Previously, authentication was accomplished by including an API key as a query parameter.
Partners who are currently authenticating via the API key query parameter can continue to authenticate in this way; however, access to the new booking cancellation endpoints does require the new-style of API key. All other endpoints remain compatible with both authentication methods.
If you would like to switch to the new style of key, please speak to your business development account manager.
Access to the API is managed using an API key that is included as a header parameter to every call made to all API endpoints described in this document.
Header parameter name | Example value |
---|---|
exp-api-key | bcac8986-4c33-4fa0-ad3f-75409487026c |
If you do not know the API key for your organization, please contact your business development account manager for these details.
Please note that language localization is now controlled on a per-call basis. Previously, language localization was controlled via API-key configuration, with one language available per API key. Under the present scheme, you can access any language enabled for your organization's point of sale via a single API key.
Language selection is accomplished by specifying the desired language as a header parameter (Accept-Language
). See Accept-Language header for available language codes. If you would like access to additional languages, please contact your business development account manager.
Previously, authenticating to this API was accomplished by passing an API-key as a query parameter appended to the URI for each call; e.g.:
GET https://viatorapi.sandbox.viator.com/service/taxonomy/destinations?apiKey=xxxxxxxxxxxxxxxxxx
This method of authentication remains available for backwards-compatibility with existing implementations. If you would like to upgrade to the new style of API key, please contact your business development account manager.
You can only submit a review or rating of an experience to Viator if you were the person who made the booking through Viator. Before publication, each review goes through an automated tracking system, which collects information for each of the following criteria: who, what, how, and when.
If the system detects something that contradicts our publication criteria, the review is not published. When the system detects a problem with a review, it may be automatically rejected, sent to the reviewer for validation, or manually reviewed by our team of content specialists who work 24/7 to maintain the quality of the reviews on our site. In some cases, we will also send Viator customers an email asking them to validate their review before it is published.
All Viator customers need to do is click on the link provided in the email.
After publication, our team checks each review reported to it as not meeting our publication criteria. Tripadvisor reviews that appear on the Viator site are subject to the same checks and moderation processes as set out above. It is not necessary to have booked an experience through Viator (or Tripadvisor) to submit a review of an experience to the Tripadvisor site.
Bookings made with Viator can be either freesale (immediate confirmation) or on-request, which require us to confirm with our product supplier that the product has not sold out and is still available. This difference must be clearly communicated to the customer during the price check and on the order summary post-purchase page.
For freesale bookings, the voucher becomes available immediately, and the customer's credit card will be charged at the time of booking. For on-request bookings, confirmation will be sent to the customer within a timeframe supplied in the /booking/calculateprice and /bookingBook service responses.
The customer's credit card will be charged once their on-request booking is confirmed.
Products can have one or more tour grades. Each tour grade might represent a departure time or different tour option, such as additional meals, transport and so forth. If the tour grade code is "DEFAULT"
, do not display this to the customer, simply hide the product's tour grade information.
Many tours delivery a commentary in multiple languages using multilingual tour guides or with written or prerecorded information. Where available, the customer can preselect their preferred language option.
The available age bands for a product, such as adult, child, infant, etc., are returned by the /product service. The customer can select a different number of people from each age band during the price check and checkout process.
Some tour grades have defined traveler mixes used to price family passes; or, they might have special mixes for limited passenger tours, such as small buggies or weddings.
These traveler mixes are provided by the /booking/availability/tourgrades service. You may need to display these to your customers so that they are able to understand why they can or cannot select a particular tour grade if there is a traveler mix mismatch.
Some products have pick-up and return shuttle bus services. For these tours, you will need the customer to supply a pick-up hotel, or they must select live locally or hotel not yet booked options.
Viator maintains pick-up hotel lists for many popular destinations. These lists are available for customers to select their pick-up location for various tours. For destinations without hotel lists, customers can enter the name of their hotel. If a customer's hotel is not listed, they should be able to enter a hotel name; however, pick-up may not be possible for that hotel.
Each tour booking requires a lead traveler to be identified. To identify the lead traveler in your request, set the leadTraveller
flag to true
in the traveler class.
Some products have a list of one or more booking questions that need to be asked. Some are mandatory. The question, a description, etc. are provided in the product details object. The answers need to be included with the booking request.
Calls to the /booking/book service must use a secure channel (https) as they contain credit card information.
Viator can create promotional (promo) codes for discounts and other purposes. As it's unlikely for you to wish to support this feature, we recommend supplying null
in the promoCode
field and not including any customer-entered fields during the checkout process.
Partners can also supply additional information for their own internal purposes. These are attached to booking reports and other materials for use in allocating commissions to agents and so forth.
This section explains the meaning and function of the pricingUnit
field in the response object received from the /booking/availability/tourgrades/pricingmatrix service.
This service takes the following parameters as input in its request body:
Parameter | Type | Meaning |
---|---|---|
productCode |
string | unique alphanumeric identifier of the product to enquire about |
month |
string | month of the year by which to filter results |
year |
string | year by which to filter results |
currencyCode |
string | code for the currency in which to display pricing information |
{
"productCode": "10040WORLD",
"currencyCode": "USD",
"month": "06",
"year": "2019"
}
Within each object item of the tourGrades
array – each giving pricing details for a specific tour grade – is a pricingMatrix
array, the object items each detailing the per-age-band pricing for a specific pricing unit (pricingUnit
) associated with that product.
Using this information, you should be able to calculate the total cost of the booking – considering any booking options – with regard to the number of participants.
How to identify the fundamental unit prices for a booking, which are then summed in order to calculate a total price, is detailed below.
Note that in the response object received from the service, pricing schedules are organized hierarchically as follows:
bookingDate
--tourGrade
----ageBand
------price
There are two fundamental types of pricing unit – per-person and per-group.
If the pricing is per-person, then the total price of the booking will be directly proportional to the number of participants (passengers) of each type that are booking the product; i.e., a multiple of the per-person price.
The only pricing unit specifier for per-person pricing is “per person”; i.e.:
"pricingUnit": "per person"
Pricing unit | Example product | Meaning |
---|---|---|
"per person" |
10040WORLD | Per-person pricing – the unit price refers to the price for an individual participant. Some products have tiered pricing arrangements; i.e., a different per-person price can apply if certain numbers and combinations of participants in a particular age band are booking the product; e.g.:
Whether a range is available to be booked depends on whether the customer’s desired passenger mix satisfies the minimumCountRequired and maximumCountRequired fields in each item of the ageBandPrices array. |
If the pricing is per-group, then the total price of the booking will depend on the number of groups and types of group that ideally accommodate the participant mix.
The following pricing schedules follow “per-group” logic:
"pricingUnit": "per vehicle"
"pricingUnit": "per car"
"pricingUnit": "per group"
"pricingUnit": "per boat"
"pricingUnit": "per package"
"pricingUnit": "per jetski"
"pricingUnit": "per vessel"
"pricingUnit": "per helicopter"
"pricingUnit": "per room"
"pricingUnit": "per bike"
"pricingUnit": "per flight"
"pricingUnit": "per plane"
"pricingUnit": "per couple"
Eligibility for a certain individual pricing schedule; or, for inclusion in a particular group type, depends on the tour grade for the product, the type of participant (e.g., the age-band they fall into) and the date of the booking.
Pricing unit | Example product | Meaning |
---|---|---|
"per group" |
10847P42 | Per-group pricing – the unit price is calculated according to the number of groups the specified passenger will fit into rather than the exact number of participants. minimumCountRequired and maximumCountRequired must be considered as these fields relate to the available group sizes. |
"per room" |
6279P26 | Per-room pricing relates the room price, which depends on the number of participants making the booking. |
"per package" |
25941P70 | Per-package pricing refers to products that are sold as part of a package; for example a family package stipulating a passenger mix of two adults and two children |
"per vehicle" |
6154SHOP | Per-vehicle pricing is calculated according to the number of vehicles required for the specified passenger mix rather than the exact number of participants. minimumCountRequired and maximumCountRequired must be considered as these fields relate to the occupancy limitations for each vehicle. The minimum price will depend on the rate for a single vehicle. |
"per car" |
10175P10 | Per-car pricing – identical to "per vehicle", but refers specifically to vehicles that are cars. |
"per boat" |
11121P40 | Per-boat pricing – identical to "per vehicle", but refers specifically to vehicles that are boats. |
"per jetski" |
28965P127 | Per-jetski pricing – identical to "per vehicle", but refers specifically to vehicles that are jet-skis. |
"per vessel" |
17295P24 | Per-vessel pricing – identical to "per vehicle", but refers specifically to maritime vessels that are not strictly boats. |
"per helicopter" |
12189P23 | Per-helicopter pricing – identical to "per vehicle", but refers specifically to vehicles that are helicopters. |
"per bike" |
17448P8 | Per-bike pricing – identical to "per vehicle", but refers specifically to vehicles that are bikes. |
"per flight" |
28965P134 | Per-flight pricing – identical to "per vehicle", but refers specifically to the act of being aboard a flying vehicle. |
"per plane" |
14876P5 | Per-plane pricing – identical to "per vehicle", but refers specifically to vehicles that are aeroplanes. |
In this section, we’ll have a look at snippets from the response objects received from the /booking/availability/tourgrades/pricingmatrix service and interpret the results.
{
"productCode": "10040WORLD",
"currencyCode": "USD",
"month": "06",
"year": "2019"
}
Note: pricingMatrix
is an array of objects that detail the available pricing schedules for the product:
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per person",
"bookingDate": "2019-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 13.85,
"priceFormatted": "$13.85",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 1,
"minimumCountRequired": 0,
"maximumCountRequired": 15
},
{
"bandId": 2,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 6.92,
"priceFormatted": "$6.92",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 2,
"minimumCountRequired": 0,
"maximumCountRequired": 15
},
{
"bandId": 3,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 0,
"priceFormatted": "$0.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 3,
"minimumCountRequired": 0,
"maximumCountRequired": 15
},
{
"bandId": 5,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 10.39,
"priceFormatted": "$10.39",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 4,
"minimumCountRequired": 0,
"maximumCountRequired": 15
}
]
}
]
In this example, four age bands (1, 2, 3 and 5) have pricing information available. These numerically-identified age bands are the age bands allowed to book the product. Details of the age ranges that the product operator has defined are available from the /product service.
A call to /product regarding 10040WORLD
yields the following information:
"ageBands": [
{
"sortOrder": 1,
"ageFrom": 13,
"ageTo": 64,
"adult": true,
"bandId": 1,
"pluralDescription": "Adults",
"treatAsAdult": true,
"count": 0,
"description": "Adult"
},
{
"sortOrder": 2,
"ageFrom": 65,
"ageTo": 99,
"adult": false,
"bandId": 5,
"pluralDescription": "Seniors",
"treatAsAdult": true,
"count": 0,
"description": "Senior"
},
{
"sortOrder": 3,
"ageFrom": 4,
"ageTo": 12,
"adult": false,
"bandId": 2,
"pluralDescription": "Children",
"treatAsAdult": false,
"count": 0,
"description": "Child"
},
{
"sortOrder": 4,
"ageFrom": 0,
"ageTo": 3,
"adult": false,
"bandId": 3,
"pluralDescription": "Infants",
"treatAsAdult": false,
"count": 0,
"description": "Infant"
}
Product operators choose the age bands available for their product from the following five categories and define the age ranges that pertain to each band; i.e.:
bandId |
description |
---|---|
1 | Adult |
2 | Child |
3 | Infant |
4 | Youth |
5 | Senior |
For this product, the age bands have been defined as follows:
bandId |
description |
ageFrom |
ageTo |
---|---|---|---|
1 | Adult | 13 | 64 |
5 | Senior | 65 | 99 |
2 | Child | 4 | 12 |
3 | Infant | 0 | 3 |
Therefore, for this product, the following pricing applies:
Passenger type | Number | Price |
---|---|---|
Adult | 1-15 | $13.85 per person |
Senior | 1-15 | $10.39 per person |
Child | 1-15 | $6.92 per person |
Infant | 1-15 | free ($0) |
Per-person pricing might depend on the mix of passengers booking the tour. In the following example (5010SYDNEY
), a "48 Hour Family Pass Ticket" has a different price for children depending on how many are participating, which we'll see in the following snippet.
"tourGrades": [
{
"sortOrder": 1,
"gradeCode": "14HFAM",
"gradeTitle": "48 Hour Family Pass Ticket",
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per person",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 133.47,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$133.47",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 1
},
{
"bandId": 2,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 0,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$0.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 2,
"minimumCountRequired": 2,
"maximumCountRequired": 2
},
{
"bandId": 3,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 0,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$0.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 3,
"minimumCountRequired": 0,
"maximumCountRequired": null
}
]
},
{
"sortOrder": 2,
"pricingUnit": "per person",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 133.47,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$133.47",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 1
},
{
"bandId": 2,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 3.71,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$3.71",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 2,
"minimumCountRequired": 3,
"maximumCountRequired": 4
},
{
"bandId": 3,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 0,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$0.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 3,
"minimumCountRequired": 0,
"maximumCountRequired": null
}
]
}
]
},
…
]
To be eligible for a family pass ticket, the group must consist of an adult and at least two children.
Passenger mix | Adult price | Child price | Infant price |
---|---|---|---|
1 Adult + 1 Child |
N/A | N/A | N/A |
1 Adult + 2 Children + Any infants |
$133.47 | FREE | FREE |
1 Adult + 3-4 Children + Any infants |
$133.47 | $3.71 | FREE |
In this example, we see a per-person pricing schedule with a tiered arrangement, where the per-person price decreases depending on how many people are booking the tour, but the total price is still calculated as the sum of the individual per-person prices rather than an overall 'group' price.
{
"productCode": "17972P102",
"currencyCode": "USD",
"month": "08",
"year": "2019"
}
"tourGrades": [
{
"sortOrder": 1,
"gradeCode": "TG1",
"gradeTitle": "Arrival transfer",
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per person",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 52.45,
"priceFormatted": "$52.45",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 1,
"maximumCountRequired": 1,
"minimumCountRequired": 1
}
]
},
{
"sortOrder": 2,
"pricingUnit": "per person",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 26.22,
"priceFormatted": "$26.22",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 1,
"maximumCountRequired": 2,
"minimumCountRequired": 2
}
]
},
{
"sortOrder": 3,
"pricingUnit": "per person",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 17.91,
"priceFormatted": "$17.91",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 1,
"maximumCountRequired": 3,
"minimumCountRequired": 3
}
]
},
{
"sortOrder": 4,
"pricingUnit": "per person",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 19.19,
"priceFormatted": "$19.19",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 1,
"maximumCountRequired": 4,
"minimumCountRequired": 4
}
]
},
{
"sortOrder": 5,
"pricingUnit": "per person",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 15.35,
"priceFormatted": "$15.35",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 1,
"maximumCountRequired": 5,
"minimumCountRequired": 5
}
]
},
{
"sortOrder": 6,
"pricingUnit": "per person",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 12.66,
"priceFormatted": "$12.66",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "0",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 1,
"maximumCountRequired": 6,
"minimumCountRequired": 6
}
]
},
{
"sortOrder": 7,
"pricingUnit": "per person",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 10.94,
"priceFormatted": "$10.94",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 1,
"maximumCountRequired": 7,
"minimumCountRequired": 7
}
]
}
]
}
Travelers | Per-person price | Total price |
---|---|---|
1 | $52.45 | $52.45 |
2 | $26.22 | $52.44 |
3 | $17.91 | $53.73 |
4 | $19.19 | $76.76 |
5 | $15.35 | $76.75 |
6 | $12.66 | $75.96 |
7 | $10.94 | $76.58 |
{
"productCode": "10847P42",
"currencyCode": "USD",
"month": "06",
"year": "2019"
}
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per group",
"bookingDate": "2019-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 390,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$390.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 390,
"minNoOfTravellersRequiredForPrice": 2,
"priceFormatted": "$390.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 10
}
]
}
]
{
"productCode": "100245P40",
"currencyCode": "USD",
"month": "08",
"year": "2019"
}
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per room",
"bookingDate": "2019-08-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 110,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$110.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 110,
"minNoOfTravellersRequiredForPrice": 2,
"priceFormatted": "$110.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 10
}
]
}
]
{
"productCode": "25941P70",
"currencyCode": "USD",
"month": "02",
"year": "2019"
}
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per package",
"bookingDate": "2019-02-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 87.7,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$87.70",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 87.7,
"minNoOfTravellersRequiredForPrice": 2,
"priceFormatted": "$87.70",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 10
}
]
}
]
{
"productCode": "20190P4",
"currencyCode": "USD",
"month": "06",
"year": "2019"
}
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per vehicle",
"bookingDate": "2019-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 250,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$250.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 250,
"minNoOfTravellersRequiredForPrice": 2,
"priceFormatted": "$250.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 7
}
]
}
]
{
"productCode": "10175P10",
"currencyCode": "USD",
"month": "06",
"year": "2019"
}
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per car",
"bookingDate": "2019-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 98.08,
"priceFormatted": "$98.08",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 98.08,
"priceFormatted": "$98.08",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 2
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 3
}
]
}
]
{
"productCode": "11121P40",
"currencyCode": "USD",
"month": "08",
"year": "2018"
}
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per boat",
"bookingDate": "2018-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 266.21,
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"priceFormatted": "$266.21",
"minNoOfTravellersRequiredForPrice": 1
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 266.21,
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"priceFormatted": "$266.21",
"minNoOfTravellersRequiredForPrice": 2
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 2
}
]
}
]
{
"productCode": "28965P127",
"currencyCode": "USD",
"month": "08",
"year": "2018"
}
"tourGrades": [
{
"sortOrder": 1,
"gradeCode": "TG1",
"gradeTitle": "20 minutes for 1 person",
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per jetski",
"bookingDate": "2018-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 55.46,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$55.46",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 1
}
]
}
]
},
{
"sortOrder": 2,
"gradeCode": "TG3",
"gradeTitle": "20 minutes for 2 persons",
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per jetski",
"bookingDate": "2018-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 66.55,
"minNoOfTravellersRequiredForPrice": 1,
"priceFormatted": "$66.55",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 66.55,
"minNoOfTravellersRequiredForPrice": 2,
"priceFormatted": "$66.55",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": ""
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 2
}
]
}
]
}
]
This example shows how group prices can differ according to the size of the group in question. In this case, two adults can ride together on a two-person jet ski, whereas a single adult requires his or her own jet ski, and therefore the unit price is slightly higher for the single adult.
Travelers | Vehicle type | Price per jet ski | Price per person |
---|---|---|---|
1 | Single-person jet ski | $55.46 | $55.46 |
2 | Two-person jet ski | $66.55 | $33.275 |
{
"productCode": "17295P24",
"currencyCode": "USD",
"month": "06",
"year": "2019"
}
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per vessel",
"bookingDate": "2019-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 799,
"priceFormatted": "$799.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 799,
"priceFormatted": "$799.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 2
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 12
}
]
}
]
{
"productCode": "12189P23",
"currencyCode": "USD",
"month": "08",
"year": "2018"
}
"tourGrades": [
{
"sortOrder": 1,
"gradeCode": "TG1",
"gradeTitle": "Private Helicopter 1 to 2 Pax",
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per helicopter",
"bookingDate": "2018-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 1714.83,
"priceFormatted": "$1,714.83",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 1714.83,
"priceFormatted": "$1,714.83",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 2
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 2
}
]
}
]
},
{
"sortOrder": 2,
"gradeCode": "TG2",
"gradeTitle": "Private Helicopter 1 to 3 Pax",
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per helicopter",
"bookingDate": "2018-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 2047.41,
"priceFormatted": "$2,047.41",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 2047.41,
"priceFormatted": "$2,047.41",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 2
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 3
}
]
}
]
}
]
Travelers | Vehicle type | Price per helicopter | Price per person |
---|---|---|---|
1 | 1-2-person helicopter | $1,714.83 | $1,714.83 |
2 | 1-2-person helicopter | $1,714.83 | $857.415 |
3 | 1-3-person helicopter | $2,047.41 | $682.47 |
{
"productCode": "17448P8",
"currencyCode": "USD",
"month": "08",
"year": "2018"
}
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per bike",
"bookingDate": "2018-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 208.53,
"priceFormatted": "$208.53",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 208.53,
"priceFormatted": "$208.53",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 2
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 2
}
]
}
]
{
"productCode": "28965P134",
"currencyCode": "USD",
"month": "08",
"year": "2018"
}
"tourGrades": [
{
"sortOrder": 1,
"gradeCode": "TG1",
"gradeTitle": "Individual flight",
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per flight",
"bookingDate": "2018-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 61.01,
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"priceFormatted": "$61.01",
"minNoOfTravellersRequiredForPrice": 1
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 1
}
]
}
]
},
{
"sortOrder": 2,
"gradeCode": "TG2",
"gradeTitle": "Double",
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per flight",
"bookingDate": "2018-06-01",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 94.28,
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"priceFormatted": "$94.28",
"minNoOfTravellersRequiredForPrice": 1
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 94.28,
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"priceFormatted": "$94.28",
"minNoOfTravellersRequiredForPrice": 2
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 2
}
]
}
]
}
]
Travelers | gradeTitle |
Price per flight | Price per person |
---|---|---|---|
1 | Individual flight | $61.01 | $61.01 |
2 | Double | $94.28 | $47.14 |
{
"productCode": "14876P5",
"currencyCode": "USD",
"month": "06",
"year": "2019"
}
"pricingMatrix": [
{
"sortOrder": 1,
"pricingUnit": "per plane",
"bookingDate": "2019-01-02",
"ageBandPrices": [
{
"bandId": 1,
"prices": [
{
"sortOrder": 1,
"currencyCode": "USD",
"price": 433.03,
"priceFormatted": "$433.03",
"merchantNetPrice": 0
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
},
{
"sortOrder": 2,
"currencyCode": "USD",
"price": 433.03,
"priceFormatted": "$433.03",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 2
}
],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 3
}
]
}
]
Tour and experience product operators can set different prices for (and impose different rules on) those wishing to make a booking for their product according to how old they are.
For example, suppliers might choose to charge people 18 years and older ('adults') the full ticket price, while 'children' can book at a lower price.
Or, the tour operator may only allow children to make a group booking for the tour so long as the group contains 'at least one adult'.
Viator provides five categories (age bands) that product operators can use to segregate travelers into age groups (the limits of which they also define) in order to set pricing and traveler-count participation rules for their product according to the age band categories.
The age bands supported by the Viator API are as follows:
bandId |
Description |
---|---|
1 | Adult |
2 | Child |
3 | Infant |
4 | Youth |
5 | Senior |
The names and corresponding numeric identifiers of these categories are fixed as in the table above (i.e., 1
is always Adult
); however, the exact age range to which each category pertains must be defined manually by the supplier.
The maximum and minimum ages that each age band describes for each product can be retrieved from the /product service.
For example, a call to /product regarding 10040WORLD
yields the following ageBands
array within its response object:
"ageBands": [
{
"sortOrder": 1,
"ageFrom": 13,
"ageTo": 64,
"adult": true,
"bandId": 1,
"pluralDescription": "Adults",
"treatAsAdult": true,
"count": 0,
"description": "Adult"
},
{
"sortOrder": 2,
"ageFrom": 65,
"ageTo": 99,
"adult": false,
"bandId": 5,
"pluralDescription": "Seniors",
"treatAsAdult": true,
"count": 0,
"description": "Senior"
},
{
"sortOrder": 3,
"ageFrom": 4,
"ageTo": 12,
"adult": false,
"bandId": 2,
"pluralDescription": "Children",
"treatAsAdult": false,
"count": 0,
"description": "Child"
},
{
"sortOrder": 4,
"ageFrom": 0,
"ageTo": 3,
"adult": false,
"bandId": 3,
"pluralDescription": "Infants",
"treatAsAdult": false,
"count": 0,
"description": "Infant"
}
For this product, the age bands have been defined as follows:
bandId |
description |
ageFrom |
ageTo |
---|---|---|---|
1 | Adult | 13 | 64 |
5 | Senior | 65 | 99 |
2 | Child | 4 | 12 |
3 | Infant | 0 | 3 |
Product operators must define at least one age band for their tour, and there are no 'default' age ranges. Therefore, if the product operator has only specified a single 'adult' age band covering ages 18-99, it must be assumed that only people aged 18-99 are eligible to book the tour, essentially excluding children and centenarians in this case.
bandId
must be supplied in the request body of the following services:
Age bands are referenced by their bandId
in the responses from the following services:
As well as making bookings, transactional affiliate partners are also able to cancel bookings through the Viator API using the /bookings/cancel-reasons, /bookings/{booking-ref}/cancel-quote and /bookings/{booking-ref}/cancel endpoints. Items cancelled via the /bookings/{booking-ref}/cancel endpoint will be cancelled in full, and only one booking can be cancelled at a time.
For information about how to cancel bookings, see Cancellation API workflow.
All products can be cancelled; however, the refund granted by the supplier to the customer differs depending on the cancellation policy for the product in question.
There are three cancellation policy categories, standard, custom and all sales final, represented by an integer in the merchantTermsAndConditionsType
field in the merchantTermsAndConditions
object returned by /product: 1
, 2
or 3
, respectively.
Note: These policies are those provided by Viator to our partners. Partners can choose whether to extend these terms to their customers unchanged or set their own cancellation terms. For example, the partner can choose to make all products non-refundable; or, they might change the full-refund cancellation window to 72 hours instead of 24 hours, and so forth.
1
– Standard cancellation policyProducts in this category are cancellable up to 24 hours before the travel date (local supplier time) for a full refund. However, a 100% cancellation penalty applies for cancellations submitted less than 24 hours before the start time. Most products (about 85%) fall into this category.
5010SYDNEY
{
"data": {
"merchantTermsAndConditions": {
"termsAndConditions": "For a full refund, cancel at least 24 hours in advance of the start date of the experience.",
"merchantTermsAndConditionsType": 1,
"amountRefundable": null,
"cancellationFromTourDate": [
{
"dayRangeMin": 0,
"dayRangeMax": 1,
"percentageRefundable": 0,
"policyStartTimestamp": null,
"policyEndTimestamp": null
},
{
"dayRangeMin": 1,
"dayRangeMax": null,
"percentageRefundable": 100,
"policyStartTimestamp": null,
"policyEndTimestamp": null
}
]
},
"...": "..."
}
}
This product has the standard cancellation policy; i.e., when a booking is cancelled:
Policy | dayRangeMin | dayRangeMax | Logic | percentageRefundable |
---|---|---|---|---|
less than one day (24 hours) before the start time | 0 | 1 | (product_start_time - cancellation_time) >= 0 days && (product_start_time - cancellation_time) < 1 days | 0 |
more than one day (24 hours) before the start time | 1 | null | (product_start_time - cancellation_time) >= 1 day | 100 |
2
– Custom cancellation policyThe refund amount for products in this category varies depending on how long before its start time the product is cancelled. Many products on a custom policy are multi-day tours, which require more sophisticated planning on the supplier’s end. Only a small number of products (around 5%) fall into this category.
2264RJ410
"data": {
"merchantTermsAndConditions": {
"termsAndConditions": "If you cancel at least 30 day(s) in advance of the scheduled departure, there is no cancellation fee.<br>If you cancel between 10 and 29 day(s) in advance of the scheduled departure, there is a 50 percent cancellation fee.<br>If you cancel within 9 day(s) of the scheduled departure, there is a 100 percent cancellation fee.<br>",
"merchantTermsAndConditionsType": 2,
"amountRefundable": null,
"cancellationFromTourDate": [
{
"dayRangeMin": 10,
"dayRangeMax": 30,
"percentageRefundable": 50,
"policyStartTimestamp": null,
"policyEndTimestamp": null
},
{
"dayRangeMin": 30,
"dayRangeMax": null,
"percentageRefundable": 100,
"policyStartTimestamp": null,
"policyEndTimestamp": null
},
{
"dayRangeMin": 0,
"dayRangeMax": 10,
"percentageRefundable": 0,
"policyStartTimestamp": null,
"policyEndTimestamp": null
}
]
},
"...": "..."
}
This product has a complex cancellation policy; where cancellations processed:
Policy | dayRangeMin | dayRangeMax | Logic | percentageRefundable |
---|---|---|---|---|
30 days or more before the start time | 30 | null | (product_start_time - cancellation_time) >= 30 days | 100 |
10 days and less than 30 days (10 to 30 days) before the start time or more | 10 | 30 | (product_start_time - cancellation_time) >= 10 days && (product_start_time - cancellation_time) < 30 days | 50 |
less than 10 days before the start time | 0 | 10 | (product_start_time - cancellation_time) < 10 days | 0 |
Note: null
in the dateRangeMax
field means negative infinity; i.e., infinitely far in the past with respect to dateRangeMin
.
Additional clauses will be included in the termsAndConditions
field in natural language. This field is for human consumption and is not classically machine-interpretable.
3
– All sales final (100% cancellation penalty / no refund offered)Products in this category cannot be cancelled or amended without incurring a 100% penalty; i.e., the refund amount will be zero. Around 10% of products fall into this category.
5985P7
{
"data": {
"merchantTermsAndConditions": {
"termsAndConditions": "All sales are final and incur 100% cancellation penalties.<br>",
"merchantTermsAndConditionsType": 3,
"amountRefundable": null,
"cancellationFromTourDate": [
{
"dayRangeMin": 0,
"dayRangeMax": null,
"percentageRefundable": 0,
"policyStartTimestamp": null,
"policyEndTimestamp": null
}
]
},
"...": "..."
}
}
Products in this category can be cancelled, but in most cases no refund will be granted.
As alluded, there is an exception to this rule. Products with an 'on-request' booking type can still be cancelled when their booking status is "pending"
– i.e., before the supplier has confirmed the booking – and a full refund will be granted.
It is impossible to predict how long an 'on-request' booking will remain 'pending'. However, it is possible to check by enquiring about the booking using one of the post-booking services; i.e.:
An 'all sales final' product in a 'pending' state that can be cancelled and a refund granted will have the following characteristics:
bookingStatus
object returned from one of the services above will have a type
of "PENDING"
, and pending
will be true
.amountRefundable
field of the merchantTermsAndConditions
object will be non-zero and non-null. Rather, it will contain a currency-formatted string showing the amount that would be refunded if the cancellation were performed immediately; e.g., "USD 55.33".Within the merchantTermsAndConditions
object, the amountRefundable
field shows the amount of money in the selected currency that will be refunded if the cancellation is processed now. Because no booking has been made at this point, the value of this field in the response from /product will be null
.
Within the cancellationFromTourDate
object, the policyStartTimestamp
and policyEndTimestamp
fields indicate the exact times between which the different cancellation refund rates apply.
Note: these fields are null
in the response from /product, as they pertain to the cancellation policy time windows for a specific confirmed booking, and no booking is being made or enquired about at the point of retrieving product information. However, the fields will be populated in the responses from the following services that relate to making or retrieving actual bookings:
merchantTermsAndConditions
) from /booking/book5010SYDNEY
amountRefundable
, policyStartTimestamp
and policyEndTimestamp
are populated here."data": {
"merchantTermsAndConditions": {
"termsAndConditions": "For a full refund, cancel at least 24 hours in advance of the start date of the experience.",
"amountRefundable": "USD 55.33",
"cancellationFromTourDate": [
{
"dayRangeMin": 1,
"dayRangeMax": null,
"percentageRefundable": 100,
"policyStartTimestamp": null,
"policyEndTimestamp": 1551513600000
},
{
"dayRangeMin": 0,
"dayRangeMax": 1,
"percentageRefundable": 0,
"policyStartTimestamp": 1551340800000,
"policyEndTimestamp": 1551427200000
}
]
},
"...": "..."
}
Identically-structured merchantTermsAndConditions
data structures will be returned by:
Occasionally, customers seek a refund for a product after completing their travels.
The reason for this might be because they were unable to attend the tour due to the supplier having cancelled the tour due to bad weather or some other reason out of the customer's control; or, the customer might have been extremely dissatisfied with the tour itself, felt that it was misrepresented in its advertising, or some other serious complaint.
When this occurs, you will need to send a refund request by email to dpsupport and include both "CANCEL" and the booking reference number in the subject line.
For all post-travel cancellation requests, you will need to include a detailed description of the issue.
Except in cases of known service interruptions (e.g., due to extreme weather events), we will first verify the issue and seek authorization from the product supplier.
Once a decision regarding the refund has been made, we will notify your Customer Services Department with this information. You will then need to advise your customer directly and process the refund if granted.
policyStartTimestamp
and policyEndTimestamp
The integers that populate the policyStartTimestamp
and policyEndTimestamp
fields express points in time in the Unix time format; i.e., the number of seconds that have elapsed since 00:00:00 Thursday, 1 January 1970, Coordinated Universal Time (UTC), minus leap seconds.
Unix timestamps can be easily read and interpreted using the 'time' (or similar) library of your favorite programming language. For human purposes, an online conversion tool can be used.
As per the example above, canceling this booking between the following times yields zero refund (because it is within the 24 hour window):
policyStartTimestamp | policyEndTimestamp |
---|---|
Unix time | 1551340800000 |
Human readable time | GMT: Thursday, February 28, 2019 8:00:00 AM |
While we recommend that you, as a merchant partner, support the processing of partial refunds for your customers, it is up to your whether you implement this functionality.
If you would prefer to only grant the full (100%) refund that is offered on most products so long as the cancellation is processed more than 24 hours prior to the product's start time, we recommend that you implement logic that checks whether a 100% refund is available for the product at the time the customer wishes to cancel their booking.
Type 1: Standard policy (merchantTermsAndConditionsType is 1 ) |
---|
The 100% refund is available so long as the cancellation is performed more than 24 hours prior to the product start time |
Type 2: Custom policy (merchantTermsAndConditionsType is 2 ) |
---|
You will need to check whether any of the object-items in the cancellationFromTourDate array have:
|
Type 3: All sales final (merchantTermsAndConditionsType is 3 ) |
---|
No refunds are available; therefore, granting a refund to your customer for this kind of product will be solely at your expense (i.e., you will still be invoiced for the cost of the tour by Viator). Therefore, we recommend that you do not allow refunds for products with this policy. |
When a booking is made successfully via the /booking/book endpoint, Viator assigns it a numeric identifier, now known as the booking reference.
This booking reference is returned in the service's response in the itemId
field; however, this itemId
is found in different locations depending on the endpoint used:
Endpoint | itemId element location |
---|---|
/booking/book | data.itemSummaries[].itemId |
/booking/status | data.itemSummaries[].itemId |
/booking/status/items | data[].itemId |
/booking/pastbooking | data.itemSummaries[].itemId |
/booking/mybookings | data[].itemSummaries[].itemId |
The booking reference can used in the request in the following endpoints as the value in the itemId
field or in the itemIds
array:
The new booking cancellation endpoints; i.e.:
...use this booking reference value as an in-URL request parameter, but its format is slightly different.
Essentially, it is the booking's numeric identifier (itemId
), but prepended with BR-
. For example, if the itemId
is 580254558
, the bookingId
value in the cancellation request should be BR-580254558
.
The booking cancellation endpoints confirm the booking reference in the response in the bookingId
field; e.g.:
{
"bookingId": "BR-580669678",
"refundDetails": {
"itemPrice": 412.04,
"refundAmount": 412.04,
"refundPercentage": 100,
"currencyCode": "USD"
},
"status": "CANCELLABLE"
}
Users of the API usually implement a booking process workflow. The common workflows are:
Because the Viator API is both stateless and does not include services for managing a customer's shopping cart, this functionality must be fully managed on the partner's side.
Viator's servers can generate a price quote for one or several items, but this collection will not be saved by the server.
We recommend the following process:
From your view product details section, a button should be presented to check availability or book now or something similar. Use the /product service to retrieve product details and schedules.
Here, the customer is presented with the dates that remain available for the product. Available dates can be obtained via a request to /booking/availability/dates. The list of age bands (i.e.: 'adult', 'child'; and, each band's maximum and minimum age) is available from the /product service.
Validation – ensure that:
maxTravellerCount
field of the /product serviceOnce the date and traveler mix have been selected, the customer may need to select a tour grade. Products that do not have this information recorded in the Viator database are assigned a tour grade of "DEFAULT"
. For these products, it is unnecessary to select a tour grade.
Tour grade options must be displayed to the customer when the product has multiple tour grades, due to:
The tour grades for a product are retrieved with the /booking/availability/tourgrades service. If a tour grade is available (check the available
flag), an 'add to cart' button can be displayed. For unavailable tour grades (available
is false
), a reason (unavailableReason
) is provided, which will be one of:
"TRAVELLER_MISMATCH"
"BLOCKED_OUT"
, or"UNAVAILABLE"
You may choose to hide the blocked-out tour grades (if all tour grades are unavailable on a particular day, a day's tour grades are all "BLOCKED_OUT"
, or the product is not operating that day, the /booking/availability/dates service will not return that date).
You may also find that a product has no bookable tour grades on a day if the traveler mix does not meet that tour grade's traveler mix restrictions. For example, a honeymoon might require two adults as the only possible traveler mix.
You can choose to hide the "BLOCKED_OUT"
tour grades, but you will probably want to display the "TRAVELLER_MISMATCH"
grades with the traveler mix requirements listed so that the customer can elect to alter their traveler mix to suit (e.g., for family passes, etc.) You cannot allow the passenger to book with an incompatible traveler mix.
The return object includes information about tour grade restrictions:
ageBandsRequired
:
minimumCountRequired
: minimum number of travelers for an age bandmaximumCountRequired
: maximum number of travelers for an age band. If this field is null
, any number of travelers may be booked.You will need to present the ageBandsRequired
information as in the following examples:
In 'Adult' age band | Meaning |
---|---|
minimumCountRequired = 1maximumCountRequired = 3 |
From 1 to 3 adults |
minimumCountRequired = 0maximumCountRequired = 3 |
up to three adults |
minimumCountRequired = 3MaximumCountRequired = |
3 or more adults |
minimumCountRequired = 2MaximumCountRequired = 2 |
2 adults |
Note: There is a singular and plural version for each age band definition. We recommend automatically generating language that ensures the samples above are grammatically correct using this information.
The user can click back and change their traveler mix; or, they can try selecting another day.
Once the item has been added to the cart, you will need to preserve this information as part of the session data in your back-end, or as a browser cookie. In particular, you will need to store the product code and age band to quantity traveler mix.
Note: this is only an example and is implementation dependent. Alternatively, you could use the item class (as used in the API calls), but much of the information it contains does not need to be stored:
class shoppingCartItem {
var $productCode;
var $tourGrade;
var $date;
var $ageBandIdToQty; // assoc array
}
To obtain a price quote, you must call the /booking/calculateprice service. This service requires a currency code and an array of items to be specified. Each item contains the date, product code, tour grade code and an associative array of ageBandIds
-> quantity
.
Validation – the data must contain valid age bands, tour codes, dates, etc. acquired in previous requests to the API.
Note: A product's availability can change in the time between API calls as tour grades or products may be blocked out, or the booking window may close for upcoming dates.
The checkout process can be accomplished using the /booking/book service, but you may need to make requests to other services to calculate prices, display product information (age-band names, etc.) and list available pick-up hotels for user selection.
The Viator mobile website breaks the workflow down into three steps. For multiple items, some steps will need to be repeated, such as capturing the traveler names for each tour. In your implementation, you can reorganize/reorder the data collection to better suit your needs.
Example workflow:
The classes for the booking request are defined here in Booking Data Classes. You will need implement these in your chosen programming language and verify that the correct JSON objects are generated during serialization.
The traveler details are used to populate the booking->items[]->travellers[]
objects.
One passenger must be identified as the "lead traveler". A boolean field in the traveler object represents this flag. The lead traveler must be an adult or have the age band treatAsAdult
flag set to true
.
All other travelers must be included.
Validation requirements
Field | Requirements |
---|---|
bandId |
a valid age band ID for the product |
firstname |
less than 16 characters |
surname |
less than 36 characters |
title |
optional / not required |
leadTraveller |
set to true for one of the travelers who is in an age band that has the treatAsAdult flag set to true |
cellPhoneCountryCode |
optional / not required |
cellPhone |
either 0 or 6-25 characters long |
The travel details include the booking questions that are supplied in the /product service.
Sample question
Note: There may be more than one.
bookingQuestions: [{
"message": "For safety reasons you must enter the weight of <b>all</b> passengers",
"required": true,
"questionId": 23,
"title": "Passenger Weights",
"subTitle": "(e.g. 127 pounds, 145 kilos, etc)",
"sortOrder": 1
}]
The questions should be displayed with the title, message, subtitle and whether it is mandatory (required) or not.
Validation – if the question is mandatory, the user must enter at least one character.
'Special requirements' should be presented as a text input field so that customers can record whether they require wheelchair assistance, for example. It is not mandatory for the customer to enter any text.
The last thing that must be collected for each item being booked is the pick-up information. If the product includes pick-up, the hotelPickup
flag will be set to true
(in the product object).
If pick-up is included, you will need to make a request to /booking/hotels to determine if a hotel list exists. If it does, the list must be displayed so that the customer can make their selection. If not, a text input field should be displayed for hotel name collection.
Please note that the first three results in the list are not hotels; rather, these three are alternative selections, comprising:
If the customer selects 'hotel not listed', you must provide a hotel selection text input field. For the other two options, no hotel name is required. In all cases, the hotel ID must be updated with either a hotel ID or the IDs of the three items listed.
If no hotel list is available, you must provide a text input field for collecting the customer's hotel name. Please include instructions to enter 'live locally' or 'hotel not yet booked' if they cannot provide a hotel name.
Validation – if hotel list is available, the hotelId
must be supplied. If the hotelId
is notListed
the, pickupPoint
field must have at least one character.
If a hotel list is not available, then pickupPoint
must contain a value.
The 'billing' or 'booking information' step is where you will need to collect your customer's credit card details.
Validation
Field | Validation requirements | Mandatory |
---|---|---|
ccaddress1 |
at least 1 character | ❌ |
ccaddress2 |
none | ❌ |
ccaddressCity |
at least one character | ❌ |
ccaddressState |
at least one character from list in appendix if country is Canada, USA or Australia. | ❌ |
ccaddressZip |
at least one character | ✅ |
ccphone |
none | ❌ |
cctype |
one of Visa, Mastercard or Amex | ✅ |
ccname |
this must be at least two words (first and last name) and 2 characters long | ✅ |
ccnumber |
this must be valid. you must use a luhn check to validate | ✅ |
ccaddressCountryId |
must be a country code from the list in appendix | ✅ |
ccexpire |
expiry date for the credit card e.g. "12/2020" |
✅ |
ccadditionalDigits |
CVV – must be a three-digit number for Visa and Mastercard; four for American Express | ✅ |
If the response from the /product service contains information in the languageServices
field, e.g.:
"langServices": {
"en/SERVICE_AUDIO": "English - Audio"
}
...then you must specify which language option you wish to book for this tour in the languageOptionCode
field (see request body schema of the /booking/book service).
You must provide a checkbox that customers must check to confirm that they accept Viator's terms and conditions prior to submitting the booking request through the API. It's best to place this checkbox at the bottom of the form near the submit button.
Note that the value of this checkbox is not sent to Viator, but it will be assumed that by placing the booking, the customer agrees to the terms and conditions.
The object returned by the /booking/book service contains booking details that can be used to display an order summary to the customer.
Confirmed bookings of freesale products will return a voucherKey
and voucherURL
. The voucherURL
can be accessed by the customer to view their voucher.
Pending bookings of on-request products will return null
in the voucherKey
/voucherURL
fields. These fields will only contain values once the booking is confirmed.
A bookingStatus
object is included in the response that contains the status of the booking.
"bookingStatus": {
"status": 1,
"text": "Paid & Confirmed",
"type": "CONFIRMED",
"level": "ITEM",
"failed": false,
"confirmed": true,
"amended": false,
"pending": false,
"cancelled": false
}
The possible values of the status
and type
fields are described in bookingStatus field values and meanings.
Boolean flags that you can use to determine the booking status of the item:
failed
cancelled
confirmed
amended
pending
A booking is considered pending if the booking process is 'in progress'. For example, an on-request booking would be pending until it is confirmed/rejected by the supplier.
If a customer has made an amendment to an on-request booking that is yet to be accepted by the supplier, the booking would then have a status of amended when the supplier or customer service accepts the amendment.
Example response object:
{
"errorReference": null,
"data": {
"sortOrder": 0,
"rulesApplied": [],
"omniPreRuleList": null,
"bookingStatus": {
"status": 3,
"text": "Confirmed",
"type": "CONFIRMED",
"level": "ITINERARY",
"confirmed": true,
"pending": false,
"amended": false,
"cancelled": false,
"failed": false
},
"itemSummaries": [
{
"sortOrder": 0,
"rulesApplied": [],
"bookingStatus": {
"status": 1,
"text": "Paid & Confirmed",
"type": "CONFIRMED",
"level": "ITEM",
"failed": false,
"confirmed": true,
"amended": false,
"pending": false,
"cancelled": false
},
"travellerAgeBands": [
{
"sortOrder": 0,
"count": 2,
"pluralDescription": "Adults",
"description": "Adult",
"ageBandId": 1
}
],
"voucherKey": "1006291040:f73083cf41661dd626aa5280bcc5c0f5ffad3d6bc6da2c7f0016c5afdf35e082:581166836",
"voucherURL": "https://partner.live.rc.viator.com/voucher.jspa?PUID=10970&setLocale=en&code=1006291040:f73083cf41661dd626aa5280bcc5c0f5ffad3d6bc6da2c7f0016c5afdf35e082:581166836&embedResources=false",
"voucherRequirements": "You can present either a paper or an electronic voucher for this activity.",
"appleWalletURL": null,
"productPulledDown": false,
"merchantCancellable": false,
"productWidgetList": null,
"savingAmount": 0.00,
"applePassSupported": false,
"supplierName": null,
"supplierPhoneNumber": null,
"vouchers": null,
"passbooks": null,
"termsAndConditions": "{\"NumberRange: 2 - null\":0,\"NumberRange: 0 - 1\":100}",
"productCode": "5010SYDNEY",
"travelDate": "2020-06-16",
"tourGradeCode": "24HOUR",
"distributorItemRef": null,
"startingTime": null,
"languageServicesLanguageCode": "en",
"price": 69.44,
"leadTravellerSurname": "Simpson Test",
"itineraryId": 1006291040,
"lastRetailPriceFormatted": "$69.44",
"productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
"merchantNetPrice": 0,
"destId": 357,
"voucherOption": "VOUCHER_E",
"priceFormatted": "$69.44",
"itemId": 581166836,
"barcodeOption": "perperson",
"barcodeType": "qrcode",
"departurePoint": "You may start this tour at any of the stops listed.",
"departurePointAddress": null,
"departurePointDirections": null,
"leadTravellerFirstname": "Homer",
"rnplInfo": null,
"obfsId": 140679,
"leadTravellerTitle": "Mr",
"lastRetailPrice": 69.44,
"savingAmountFormated": "$0.00",
"bookingEngineId": "UF",
"merchantNetPriceFormatted": "",
"departsFrom": "The Rocks, Australia",
"tourGradeDescription": "24 Hour Classic Ticket (24HOUR)",
"pickupHotelId": null,
"pickupHotelName": null,
"hoursConfirmed": 0,
"priceUSD": 69.44,
"currencyCode": "USD"
}
],
"voucherURL": "https://partner.live.rc.viator.com/voucher.jspa?PUID=10970&setLocale=en&code=1006291040:f73083cf41661dd626aa5280bcc5c0f5ffad3d6bc6da2c7f0016c5afdf35e082&embedResources=false",
"securityToken": "f73083cf41661dd626aa5280bcc5c0f5ffad3d6bc6da2c7f0016c5afdf35e082",
"paypalRedirectURL": null,
"exchangeRate": 1,
"itineraryId": 1006291040,
"bookingDate": "2020-05-10",
"voucherKey": "1006291040:f73083cf41661dd626aa5280bcc5c0f5ffad3d6bc6da2c7f0016c5afdf35e082",
"bookerEmail": "apitest@viator.com",
"distributorRef": null,
"totalPrice": 69.44,
"totalPriceFormatted": "$69.44",
"totalPriceUSD": 69.44,
"hasVoucher": true,
"userId": null,
"currencyCode": "USD"
},
"dateStamp": "2020-05-10T19:13:25+0000",
"errorType": null,
"errorCodes": [],
"errorMessage": null,
"errorName": null,
"extraInfo": {},
"extraObject": null,
"success": true,
"totalCount": 1,
"errorMessageText": null,
"vmid": "331001"
}
/booking/mybookings can be used to check the status of a booking after it has been purchased. This is useful for checking the status of a pending booking, particularly if there are multiple items within the booking.
It is recommended that you poll the service no more than once per hour.
This is useful for checking the status of recently-made, but still pending bookings, or those that will commence soon.
Note: You can only poll this service (successful calls) once every 30 minutes.
In this section, we show a sample booking process flow using Viator API services.
{
"startDate": "2018-12-25",
"endDate": "2018-12-28",
"topX": "1-15",
"destId": 684,
"currencyCode": "USD",
"sortOrder": "TOP_SELLERS"
}
code=5010SYDNEY¤cyCode=USD
productCode=5010SYDNEY
{
"productCode": "5010SYDNEY",
"bookingDate": "2018-12-05",
"currencyCode": "USD",
"ageBands": [
{
"bandId": 1,
"count": 2
}
]
}
{
"productCode": "5010SYDNEY",
"month": "12",
"year": "2018",
"currencyCode": "USD"
}
hotelPickup
is true
for the product.hotelId
is the id
field in the response from the /booking/hotels service. This can be:'4119'
'local'
– if the customer resides near the location in which the product operates 'notBooked'
– if the customer's hotel is not yet booked'notListed'
– if the customer's hotel is not listed in the response from /booking/hotels. If this is the case, capture the customer’s hotel details in a text box and pass this information in the pickupPoint
field in the request body of the /booking/book service.{
"demo": true,
"currencyCode": "USD",
"booker": {
"firstname": "Homer Test",
"surname": "Simpson Test",
"title": "Mr",
"email": "apitest@viator.com",
"homePhone": "(02)66987564"
},
"ccPayDetail": {
"ccaddress1": "742 Evergreen Terrace",
"ccaddress2": "",
"ccaddressCity": "Springfield",
"ccaddressState": "WI",
"ccaddressZip": "12345",
"ccphone": "",
"cctype": "Visa",
"ccname": "Homer Simpson Test",
"ccnumber": "4242424242424242",
"ccaddressCountryId": "US",
"ccexpire": "12/2020",
"ccadditionalDigits": "747",
"fiscalNumber": null
},
"items": [
{
"hotelId": null,
"pickupPoint": null,
"travelDate": "2019-03-19",
"productCode": "5010SYDNEY",
"tourGradeCode": "24HOUR",
"languageOptionCode": "en/SERVICE_GUIDE",
"bookingQuestionAnswers": [
{
"questionId": 100,
"answer": "120 kgs"
}
],
"specialRequirements": "",
"travellers": [
{
"bandId":1,
"firstname": "Homer",
"surname": "Simpson Test",
"title": "Mr",
"leadTraveller": true
}, {
"bandId": 1,
"firstname": "Marge",
"surname": "Viator Test",
"title": "Mrs"
}
]
}
]
}
productCode=5010SYDNEY
or
destId=684
'FreesaleBE'
), unconditional free-sale ('UnconditionalBE'
) and free-sale / on-request ('FreesaleOnRequestBE'
) - i.e., during the free-sale period, confirmation should occur instantly. 'FreesaleOnRequestBE'
status means that the product will only remain free-sale up until a certain number of days before the travel date, after which it becomes on-request. 'Pending'
.The voucherOption
field in the response from the /booking/book service will contain one of the following values:
'VOUCHER_PAPER_ONLY'
voucherURL
field'VOUCHER_E'
or 'VOUCHER_ID_ONLY'
Note: the voucher will not be available until the booking is confirmed – the value of the hoursConfirmed
field in the response from the /booking/book service can be shown to the customer to indicate the time frame within which they are likely to be notified as to their booking confirmation.
To view the booking statuses for multiple items based on various criteria, use the /booking/status service.
Note that this service can only be polled once every five minutes. Ideally, this service should be used by your software implementation to perform bulk updates of pending itineraries. The maximum number of itinerary results returned is 1,000.
If the booking shows prices converted to and formatted according to a different currency to that in which it was made, it is because each API partner has a particular 'base currency', and all bookings will be made in that currency.
To make a demo booking, simply set the demo
field to true
in the /booking/book service.
While demo bookings are allowed on the live production environment, we recommend not doing so as it is possible that a notification could be sent to the supplier. Performing a cancellation of the demo booking is therefore recommended.
To cancel the booking, use the /booking/mybookings/message service. See: Contact customer service
Alternatively, send an email to dpsupport@viator.com including 'CANCEL' in the subject line along with the booking reference number to have the booking cancelled for you.
When canceling a booking, you are required to submit a valid 'reason for the cancellation' to assist with Viator's internal processes. This is accomplished via the inclusion of a valid reason code in the body of the request. The reason codes can be retrieved from the /bookings/cancel-reasons endpoint.
As the acceptable reasons for cancellation may be extended at any point (existing reasons will not change or be removed), we recommend retrieving an up-to-date list from this endpoint at least weekly.
The output from the /bookings/cancel-reasons endpoint at the time of writing is as follows:
{
"reasons": [
{
"cancellationReasonCode": "Customer_Service.I_canceled_my_entire_trip",
"cancellationReasonText": "I canceled my entire trip"
},
{
"cancellationReasonCode": "Customer_Service.Booked_wrong_tour_date",
"cancellationReasonText": "Booked wrong tour/date"
},
{
"cancellationReasonCode": "Customer_Service.Duplicate_Booking",
"cancellationReasonText": "Duplicate Booking"
},
{
"cancellationReasonCode": "Customer_Service.Chose_a_different_cheaper_tour",
"cancellationReasonText": "Chose a different/cheaper tour"
},
{
"cancellationReasonCode": "Customer_Service.Weather",
"cancellationReasonText": "Weather"
},
{
"cancellationReasonCode": "Customer_Service.Unexpected_medical_circumstances",
"cancellationReasonText": "Unexpected/medical circumstances"
},
{
"cancellationReasonCode": "Customer_Service.Tour operator asked me to cancel",
"cancellationReasonText": "Tour operator asked me to cancel"
}
]
}
Before canceling the booking, call the /bookings/{booking-reference}/cancel-quote endpoint to get information about whether the booking can be canceled using this endpoint and what the refund will be, for example:
GET https://api.viator.com/partner/bookings/BR-580254558/cancel-quote
Note: For information about the {booking-reference} in URL parameter, see Key concepts: Booking references
You will receive a cancellation quote object, e.g.:
{
"bookingId": "BR-580254558",
"status": "CANCELLABLE",
"refundDetails": {
"itemPrice": 109.77,
"refundAmount": 109.77,
"currencyCode": "USD",
"refundPercentage": 100.00
}
}
Note: Bookings that have not been confirmed by the supplier and have a status of "PENDING"
will report an itemPrice
, refundAmount
and refundPercentage
of 0
, as no fees are charged until the booking's status is "CONFIRMED"
.
The data elements in this object have meanings as follows:
Element | Meaning | Example |
---|---|---|
bookingId |
the booking reference number prepended with BR- |
BR-580254556 |
status |
One of the following:
|
CANCELLABLE |
refundDetails |
object containing information about the refund | |
itemPrice |
the amount paid for this product at the time of booking in the currency specified by currencyCode |
109.77 |
refundAmount |
the amount that will be reimbursed if the booking is cancelled now | 109.77 |
currencyCode |
the currency code for the currency in which pricing information is displayed | USD |
refundPercentage |
the refund amount expressed as a percentage of the itemPrice |
100.00 |
If the status
field has a value of CANCELLABLE
and you are happy with the refundAmount
, call the /bookings/{booking-ref}/cancel endpoint to cancel the booking, e.g.:
POST https://api.viator.com/partner/bookings/BR-580254558/cancel
A reason code corresponding to the reason for cancellation must be included in the request body; e.g.:
{
"reasonCode":"Customer_Service.Chose_a_different_cheaper_tour"
}
You should receive a response indicating that the cancellation was successful, e.g.:
{
"bookingId": "BR-580254558",
"status": "ACCEPTED"
}
A status
of ACCEPTED
indicates that the booking was successfully canceled.
Making a booking on Viator's system can be somewhat complex due to the wide variety of tours and other products that we sell. There are a number of key concepts that must be understood in order to develop a booking workflow and application.
class booking {
var $booker; // see class definition below
var $ccPayDetail; // see class definition below
var $items = array(); // see class definition below
var $sessionId;
var $currencyCode;
var $promoCode;
var $partnerDetail; // for partner bookings – this can be null if not used
var $newsletterSignUp;
var $demo;
}
// Partner use only. For tracking commissions, etc. class partnerDetail
class partnerDetail {
var $subPUID; // is some number which the partner should know
var $agentNumber; // is the agent PCC (??) / ARC / IATA number
var $agentEmailDelivery; // is one of these options (based off VAP and it seems
var $additionalEmail; // is some additional agent email
var $partnerParam; // is some extra parameters they want to write to the
}
// Viator use only
class partnerDetailEAP {
var $eapChainCode;
var $eapPropertyCode;
var $eapAuid;
}
// Viator use only
class partnerDetailShareASale {
var $shareSaleId;
var $shareSaleData;
}
class priceCheck {
var $promoCode;
var $currencyCode;
var $items = array();
}
class booker {
var $email;
var $workPhone;
var $postcode;
var $homePhone;
var $firstname;
var $surname;
var $title;
}
class ccPayDetail {
var $ccaddress1;
var $ccaddress2;
var $ccaddressCity;
var $ccaddressState;
var $ccaddressZip;
var $ccphone;
var $cctype;
var $ccname;
var $ccnumber;
var $ccaddressCountryId; var $ccexpire;
var $ccadditionalDigits;
}
class item {
var $ccaddress1;
var $ccaddress2;
var $ccaddressCity;
var $ccaddressState;
var $ccaddressZip;
var $ccphone;
var $cctype;
var $ccname;
var $ccnumber;
var $ccaddressCountryId;
var $ccexpire;
var $ccadditionalDigits;
var $travelDate;
var $productCode;
var $tourGradeCode;
var $hotelId;
var $pickupPoint;
var $languageOptionCode;
var $travellers = array();
var $bookingQuestionAnswers = array(); // array of bookingQuestionAnswer
var $specialRequirements;
}
class bookingQuestionAnswer {
var $questionId;
var $answer;
}
class traveller {
var $bandId;
var $firstname;
var $surname;
var $title;
var $leadTraveller;
var $cellPhoneCountryCode;
var $cellPhone;
}
Product availability information can be retrieved with the following services:
Multiple departures in a single day (each represented by a tour grade) and the language options (langServices).
This request is for three adults on a helicopter tour:
Request object (/booking/availability/tourgrades):
{
"productCode": "2280AAHT",
"bookingDate": "2013-05-11",
"currencyCode": "EUR",
"ageBands": [{
"bandId": 1,
"count": 3
}]
}
Response object (/booking/availability/tourgrades) :
{
"data": [{
"available": false,
"ageBands": null,
"langServices": null,
"gradeCode": "EARLYM",
"unavailableReason": "BOOKING_CUTOFF_EXPIRED",
"gradeTitle": "Early Morning Departure",
"gradeDepartureTime": "",
"gradeDescription": "Flight departs Las Vegas between 7am & 8am",
"defaultLanguageCode": "en",
"ageBandsRequired": null,
"currencyCode": "ERROR",
"retailPrice": 0,
"bookingDate": "2013-05-11",
"retailPriceFormatted": "",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"sortOrder": 1
},
{
"available": false,
"ageBands": null,
"langServices": null,
"gradeCode": "LATEM",
"unavailableReason": "BOOKING_CUTOFF_EXPIRED",
"gradeTitle": "Late Morning Departure",
"gradeDepartureTime": "",
"gradeDescription": "Flight departs Las Vegas between 9:45am & 10:45am",
"defaultLanguageCode": "en",
"ageBandsRequired": null,
"currencyCode": "ERROR",
"retailPrice": 0,
"bookingDate": "2013-05-11",
"retailPriceFormatted": "",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"sortOrder": 2
},
{
"available": false,
"ageBands": null,
"langServices": null,
"gradeCode": "EARLYA",
"unavailableReason": "BOOKING_CUTOFF_EXPIRED",
"gradeTitle": "Early Afternoon Departure",
"gradeDepartureTime": "2:50 PM",
"gradeDescription": "Flight departs Las Vegas between 12:30pm & 1:30pm",
"defaultLanguageCode": "en",
"ageBandsRequired": null,
"currencyCode": "ERROR",
"retailPrice": 0,
"bookingDate": "2013-05-11",
"retailPriceFormatted": "",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"sortOrder": 3
},
{
"available": false,
"ageBands": null,
"langServices": null,
"gradeCode": "LATEA",
"unavailableReason": "BOOKING_CUTOFF_EXPIRED",
"gradeTitle": "Late Afternoon Departure",
"gradeDepartureTime": "",
"gradeDescription": "Flight departs Las Vegas between 3:15pm & 4:15pm; available Ap",
"defaultLanguageCode": "en",
"ageBandsRequired": null,
"currencyCode": "ERROR",
"retailPrice": 0,
"bookingDate": "2013-05-11",
"retailPriceFormatted": "",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"sortOrder": 4
}],
"vmid": "221001",
"errorMessage": null,
"errorType": null,
"dateStamp": "2013-06-04T17:01:34+0000",
"totalCount": 1,
"errorReference": null,
"errorMessageText": null,
"success": true,
"errorName": null
}
The request is for five adults, but this product only support up to four adults.
Example request object (/booking/availability/tourgrades):
{
"productCode": "2280ULTWED",
"bookingDate": "2013-12-11",
"currencyCode": "EUR",
"ageBands": [{
"bandId": 1,
"count": 5
}]
}
Example response object
The response contains "TRAVELLER_MISMATCH"
and you can see the ageBandsRequired
values for the adult (1) age band in the available tour grade.
{
"data": [{
"available": false,
"ageBands": null,
"langServices": null,
"gradeCode": "DEFAULT",
"unavailableReason":
"TRAVELLER_MISMATCH",
"gradeTitle": "DEFAULT",
"gradeDepartureTime": "12:00 AM",
"gradeDescription": "DEFAULT",
"defaultLanguageCode": "en",
"ageBandsRequired": [
[{
"bandId": 1,
"minimumCountRequired": 2,
"maximumCountRequired": 2
}],
[{
"bandId": 1,
"minimumCountRequired": 3,
"maximumCountRequired": 3
}],
[{
"bandId": 1,
"minimumCountRequired": 4,
"maximumCountRequired": 4
}]],
"currencyCode": "ERROR",
"retailPrice": 0,
"bookingDate": "2013-12-11",
"retailPriceFormatted": "",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"sortOrder": 1
}],
"vmid": "221001",
"errorMessage": null,
"errorType": null,
"dateStamp": "2013-06-04T17:02:35+0000",
"totalCount": 1,
"errorReference": null,
"errorMessageText": null,
"success": true,
"errorName": null
}
The /booking/calculateprice service is used to calculate a total price, taking into account the specified traveler mix. It also reconfirms the availability of the products for the requested dates and traveler mix as well as pricing. It is strongly recommended that this service is called prior to making the booking to confirm that the booking will go through. This can be used to implement a shopping cart.
{
"currencyCode": "USD",
"items": [{
"travelDate": "2015-03-01",
"productCode": "2916ROME",
"tourGradeCode":
"24HR",
"travellers": [
{
"bandId": 1
},
{
"bandId": 1
}
]
}]
}
travellers
is an associative array of bandId
-> [quantity].
There can be several items in the cart. This allows for different traveler mixes per product booked.
The overall total of the booking is displayed in the itineraryNewPrice
and itineraryNewPriceFormatted
fields.
The result indicates if the booking is freesale or on-request. On-request bookings are not sold as "CONFIRMED"
, but are instead confirmed by the supplier at a later date. The approximate window for confirmation is provided in the hoursConfirmed
(integer) field for presentation to the customer. An hoursConfirmed
of 0
means that the booking is freesale. An hoursConfirmed
greater than 0
indicates that it is on-request.
The partnerDetail object can also be added to the JSON. Please see /booking/book for more details on the partnerDetails
object.
{
"vmid":"221002",
"errorMessage": null,
"errorType": null,
"dateStamp": "2012-04-12T13:48:27+0000",
"success": true,
"errorReference": null,
"errorMessageText": null,
"totalCount": 1,
"errorName": null
"data": [
{
"address": null,
"name": "I live locally / I'm staying with friends, relatives",
"id": "local",
"phone": null,
"productCodes": null,
"destinationId": 0,
"city": null,
"notes": null,
"latitude": null,
"longitude": null,
"postcode": null,
"brand": null,
"hotelString": "I live locally / I'm staying with friends, relatives",
"sortOrder": 1
},
{
"address": null,
"name": "My hotel is not yet booked",
"id": "notBooked",
"phone": null,
"productCodes": null,
"destinationId": 0,
"city": null,
"notes": null,
"latitude": null,
"longitude": null,
"postcode": null,
"brand": null,
"hotelString": "My hotel is not yet booked",
"sortOrder": 2
},
{
"address": null,
"name": "My hotel is not listed",
"id": "notListed",
"phone": null,
"productCodes": null,
"destinationId": 0,
"city": null,
"notes": null,
"latitude": null,
"longitude": null,
"postcode": null,
"brand": null,
"hotelString": "My hotel is not listed",
"sortOrder": 3
},
{
"address": "375 East Harmon Avenue",
"name": "Alexis Park Resort Hotel",
"id": "684_2",
"phone": "",
"productCodes": null,
"destinationId": 684,
"city": "Las Vegas",
"notes": null,
"latitude": 36.106258,
"longitude": -115.156146,
"postcode": "89169",
"brand": "",
"hotelString": null,
"sortOrder": 4
},
{
"address": "167 East Tropicana Avenue",
"name": "Americas Best Value Inn",
"id": "684_3",
"phone": "",
"productCodes": null,
"destinationId": 684,
"city": "Las Vegas",
"notes": null,
"latitude": 36.100778,
"longitude": -115.165522,
"postcode": "89109",
"brand": "",
"hotelString": null,
"sortOrder": 5
},
{
"address": "3131 Las Vegas Boulevard South",
"name": "Wynn Resort",
"id": "684_126",
"phone": "",
"productCodes": null,
"destinationId": 684,
"city": "Las Vegas",
"notes": null,
"latitude": 36.127563,
"longitude": -115.167704,
"postcode": "89109",
"brand": "",
"hotelString": null,
"sortOrder": 119
}
]
}
To make a booking, use the /booking/book service.
To make a real booking, ensure demo
is set to false
in the booking request.
Demo bookings will enter our system as a test booking and will not charge the merchant. To enable demo bookings, set demo
to true
in the booking request and pass "test"
as the traveler's first or last name.
Note: Avoid testing on Live, as the booking may be sent to the supplier (depending on the product). Any test bookings on live must be cancelled via the cancellation service; or, contact dpsupport@viator.com if you experience any other issues.
Example request
{
"demo": true,
"currencyCode": "USD",
"booker": {
"email": "apitest@viator.com",
"firstname": "Homer Test",
"surname": "Simpson Test",
"title": "Mr"
"cellPhoneCountryCode": "0055",
"cellPhone": "12345678",
"homePhone": "(02)66987564"
},
"ccPayDetail": {
"ccaddress1": "742 Evergreen Terrace",
"ccaddress2": "",
"ccaddressCity": "Springfield",
"ccaddressState": "WI",
"ccaddressZip": "12345",
"ccphone": "",
"cctype": "Visa",
"ccname": "Homer Simpson Test",
"ccnumber": "4242424242424242",
"ccaddressCountryId": "US",
"ccexpire": "12/2020",
"ccadditionalDigits": "747",
"fiscalNumber": null
},
"items": [{
"hotelId": null,
"pickupPoint": null,
"travelDate": "2015-03-31",
"productCode": "2916ROME",
"tourGradeCode": "24HR",
"languageOptionCode": "en/SERVICE_GUIDE",
"bookingQuestionAnswers": [{
"questionId": 100,
"answer": "120 kgs"
}],
"travellers": [{
"bandId": 1,
"firstname": "Homer",
"surname": "Simpson Test",
"title": "Mr",
"leadTraveller": true
"cellPhoneCountryCode": "0055",
"cellPhone": "911"
},
{
"bandId": 1,
"firstname": "Marge",
"surname": "Simpson",
"title": "Mrs"
}]
}]
}
Description of JSON request parameters
Object name | Element name | Type | Comments | Mandatory |
---|---|---|---|---|
sessionId |
string | Viator API User Account session Id. Not applicable to partners. | ❌ | |
ipAddresss |
string | The client ip address which is doing the booking. Internal sites only. | ❌ | |
aid |
string | Ignore (Viator only) | ❌ | |
newsletterSignUp |
boolean | If this is set to true , the booker email will be added to the list of subscribers for any Viator marketing emails. |
❌ | |
demo |
boolean | If this is set to True, then it is a demo booking only. Full demos do not send any notifications, are automatically confirmed and OnRequest products become freesale products. Default value is true. Production must have demo set to false . |
❌ | |
promoCode |
string | Ignore (Viator only) | ❌ | |
currencyCode |
string | The currency the booking will be submitted in. You will be billed in this currency. | ❌ | |
partnerDetail |
object | Applicable only for extra partner detail for either partner, EAP or Share-A-Sale. Itinerary level. Can omit or pass null if not needed. See object details below. |
❌ | |
agentEmailDelivery |
string | Applicable only to ARC/AAA (agent partners). Use one of "Agent only" , "Agent and Customer" or "Customer only" |
❌ | |
subPUID |
string | Used by agents to pass an additional identifier for their bookings. Alphanumeric characters only. | ❌ | |
agentNumber |
string | Agent ID | ❌ | |
agencyName |
string | Name of agency | ❌ | |
agentName |
string | Name of agent | ❌ | |
agentEmail |
string | Email of agent | ❌ | |
additionalEmail |
string | Additional email to send the booking confirmation to | ❌ | |
partnerParam |
string | Ignore (Viator only) | ❌ | |
partnerItemDetail |
object | Not applicable to affiliate partners | ❌ | |
otherDetail |
object | Other optional details to pass to the booking. At the moment, only call-center messages | ❌ | |
callCenterSource |
string | Ignore (Viator only) | ❌ | |
callCenterAgent |
string | Ignore (Viator only) | ❌ | |
booker |
object | The information of the primary contact. This contact does not have to be a traveler. | ✅ | |
email |
string | Email address of the primary contact | ❌ | |
homePhone |
string | Home phone number of the primary contact | ❌ | |
firstname |
string | First name of the primary contact | ✅ | |
surname |
string | Surname of the primary contact | ✅ | |
title |
string | Title of the primary contact | ❌ | |
cellPhoneCountryCode |
string | Country-code of the primary contact's cell phone | ❌ | |
cellPhoneCountryCode |
string | Cell phone number of the primary contact | ❌ | |
ccPayDetail |
object | API partners must pass this object. The billing details of the booking | ✅ | |
ccaddress1 |
string | Billing address | ❌ | |
ccaddress2 |
string | Billing address, second line | ❌ | |
ccaddressCity |
string | City in billing address | ❌ | |
ccaddressState |
string | See appendices for US, Canadian and Australian states | ❌ | |
ccaddressZip |
string | ZIP code / postcode of billing address | ❌ | |
ccaddressCountryId |
string | Country-code for the billing address. See appendices or use the /util/countrymap service | ❌ | |
ccphone |
string | Billing phone number | ❌ | |
cctype |
string | One of: "visa" , "mastercard" , "amex" or "discover" |
❌ | |
ccname |
string | Name on credit card | ❌ | |
ccnumber |
string | Credit card number | ❌ | |
ccadditionalDigits |
string | Equivalent to the CVV number | ❌ | |
fiscalNumber |
string | This field is mandatory for payments made with a Brazilian credit card, or a transaction conducted in Brazil. The transaction will be rejected by the payment gateway if the field is not provided. The customer name and fiscal number combination must be valid. Note that this number is also referred to as Cadastro de Pessoas Físicas (CPF) or individual fiscal registration number. This field accepts a max of 15 characters. | ✅ – Brazilian transactions ❌ – otherwise |
|
altContactDetails |
object | Optional object for capturing additional contact details of the primary contact whilst travelling | ❌ | |
contactType |
string | Type of contact information passed. The types available are: "MOBILE" - mobile/cell phone number; "EMAIL" - email address; "ALTERNATE" - alternate phone number; "NON_CONTACTABLE" - additional details not available |
❌ | |
phone |
string | Alternative phone number or mobile/cell phone number. Must be supplied if contactType is "MOBILE" or "ALTERNATE" |
❌ | |
phoneCountry |
string | Country code of phone number or mobile/cell phone number. Must be supplied if contactType is "MOBILE" or "ALTERNATE" |
❌ | |
email |
string | Alternative email address. Must be supplied if contactType is "EMAIL" |
❌ | |
items |
array | Array of items in itinerary to be booked | ✅ | |
productCode |
string | product code of the itinerary to be booked | ✅ | |
tourGradeCode |
string | tourGradeCode of the item to be booked. If tour grades are supplied in /product, you must allow the customer to select a tour grade code. If no tour grades are available for the product, pass "DEFAULT" . |
✅ | |
languageOptionCode |
string | The language service provided for this product that has been chosen for this booking. Usually in the format langcode/Service eg "en/SERVICE_GUIDE" . If the product details service /product for the product returns a langService, this must be provided. |
✅ (if languageServices are provided in /product) |
|
travelDate |
date | date of travel for the item (format is YYYY-MM-DD; e.g. 2013-12-25) | ✅ | |
hotelId |
string | If /product returns hotelPickup : true and a list of hotels is available for this product in /booking/hotels, a hotelId must be captured. The hotel id as per the hotel service (id field) or use one of these alternative hotel ids:local : customer lives locallynotBooked : Customer has not booked their hotel yetnotListed : Hotel not listed |
✅ (if /product returns hotelPickup : true for productCode and hotels available) |
|
pickupPoint |
string | Pickup point information related to hotel pickup. Details of the hotel or pickup point must be provided if the hotelId selected by the user is "notListed" or if no hotels are returned for the product in /booking/hotels where hotelPickup : true |
✅ (if hotelId = "notListed" or no hotels returned) |
|
specialReservation |
string | Not applicable to partners | ❌ | |
specialRequirements |
string | Capture any additional requirements for the booking, such as dietary requirements or if a wheelchair is required. Suggested workflow is if there are no bookingQuestionAnswers for the product, to collect specialRequirements . |
❌ | |
travellers |
array | Array of traveller names with a required lead traveller selected per item. | ✅ | |
bandId |
integer | Age band id. Available age band details for the product is listed in /product. | ✅ | |
firstname |
string | First name of the traveller. | ✅ | |
surname |
string | Surname of the traveller. | ✅ | |
title |
string | Title of the traveller. Suggested options: Mr, Mrs, Ms, Miss, Mstr, Dr | ✅ | |
leadTraveller |
boolean | Each item must have one traveller assigned as the lead traveller for the tour. The lead traveller will have a value of true, all other travellers will have a value of false. The lead traveller can have a mobile phone number added to the booking. | ✅ | |
cellPhoneCountryCode |
string | Ideally only collect the phone number country code for the lead traveller. Alternatively, collect the phone number of the booker instead. | ❌ | |
cellPhone |
string | Ideally only collect the phone number country code for the lead traveller. Alternatively, collect the phone number of the booker instead. | ❌ | |
bookingQuestionAnswers |
object | Answers to booking questions for the particular item. If a booking question is available in the bookingQuestions array in /product for the product, the matching bookingQuestionAnswers must be passed. If a product does not have any bookingQuestion items, you can omit the bookingQuestionAnswers field completely. Any invalid or unnecessary bookingQuestionAnswers that are passed to /booking/book will be ignored (no exceptions will be raised) |
✅ (if /product returns bookingQuestions ) |
|
questionId |
integer | questionId (provided in /product) |
✅ | |
answer |
string | Answer to the question at the questionId listed. Recommended length for the answer is 500 characters. |
✅ | |
marketing |
object | Object to send marketing data associated with the booking to the Viator system. Currently only capturing the user's operating system. | ❌ | |
os |
string | The user's operating system. The API partner will need to capture the user's operating system or user agent to pass into this field. | ❌ |
AAA should use this partnerDetail
object when making a request to this service:
{
"subPUID": "",
"agentNumber": "",
"agencyName": "",
"agentName": "",
"agentEmail": "",
"agentEmailDelivery": "",
"additionalEmail": "",
"partnerParam": ""
}
ARC should use this partnerDetail
object when making a request to this service:
{
"agentNumber": "",
"agencyName": "",
"agentName": "",
"agentEmail": "",
"agentEmailDelivery": ""
}
Other partner parameters:
{
...
"subPUID": "",
"partnerParam": "",
"additionalEmail": "",
...
}
A demo booking can be made by either setting the demo card variable to true
, or passing a demo credit card number.
If demo
is set to true
, regardless of the credit card number used, the booking will be a full demo booking. It is advised that a demo card is used if demo
is set to true
as it is an extra check or confirmation that a demo booking has been made.
Setting demo
to false
and using the partial demo credit card will make a partial demo booking. A partial demo booking will honour the booking type (freesale or on request) and no notifications will be sent to the supplier.
If you use the full demo credit card (4242), the booking will be a full demo booking and the value of the demo flag will be ignored.
Demo card type | Credit card number | CVV | Credit card type | Expiry date | demo flag |
---|---|---|---|---|---|
Full demo card | 4242424242424242 | 747 | VISA | Any future date | true |
Partial demo card | 4111111111111111 | 777 | VISA | Any future date | false |
In addition, ensure the ccname includes "test"
(e.g. "John Test"
) and indicate in the special requirements it is a test booking.
If you make a test booking on the live site, you must put in a request to cancel the booking. This can be done via the /booking/mybookings/message service.
NOTE: If demo is set to false and a real credit card is used in the Live environment, the credit card will be charged. If you need to test a live credit card on Live and need the charge refunded, please email apitechsupport@viator.com, ideally within 24 hours.
A number of errors may be returned in the response to the /booking/book service. If any errors are reported, NO items will be booked, NO items/data will be returned in the response, and NO billing will occur.
There are two error types:
"VALIDATION"
- occurs if a required field is missing or a field is not formatted properly"EXCEPTION"
- occurs when there are issues with the booking date, product / tourgrade code or the payment.Example of an error message:
{
"data": null,
"vmid": "221001",
"errorMessage": [ "Email is required" ],
"errorType": "VALIDATION",
"dateStamp": "2013-04-24T15:50:05+0000",
"errorReference": "null",
"errorMessageText": [ "Email is required" ],
"success": false,
"totalCount": 1,
"errorName": "null"
}
Please see Standard JSON fields in the Appendix for an explanation of the fields.
Scenario | errorType |
Example error message text |
---|---|---|
Missing required field from booking request, such as email address | VALIDATION |
Email is required |
Expiry date of credit card not in format mm/yyyy | VALIDATION |
The expiration date for your credit card is not formatted properly. Please verify and re-enter the expiration date. |
Lead traveller is not specified | VALIDATION |
A traveler needs to be selected as lead traveler. Lead Traveler's name must match credit card name. |
Traveller names are not provided | VALIDATION |
First name of traveler 1 is required, Last name of traveler 1 is required |
No travellers provided | VALIDATION |
A traveler needs to be selected as lead traveler. Lead Traveler's name must match credit card name. |
Product code does not exist | EXCEPTION |
We're sorry, we cannot find the tour, activity or attraction you are looking for |
Product code exists, but tour grade code does not exist | EXCEPTION |
SICInvalidTourGrade |
Booking date is in the past | EXCEPTION |
We're sorry, the following tour you are trying to book is sold out and no longer available: Grand Canyon All American Helicopter Tour (2280AAHT) |
Testing (where demo = true ) with a test card not on the list |
EXCEPTION |
Demo bookings only allow demo cards to be used! Please check the CC number entered |
languageOptionCode is in the wrong format |
EXCEPTION |
languageOptionCode should be LangCode/LangServices |
Missing required answers for item | EXCEPTION |
Additional questions missing |
Unsupported currency | EXCEPTION |
Could not lookup SGD:java.lang.RuntimeException: Could not lookup SGDf:au.com.fim.v3.etravel.PiusRecordNotFoundException: No currency found: select * from CurrencyFormat where currencyID = 'SGD' |
Invalid credit card number, expiry date, and/or CVV | EXCEPTION |
We're sorry, we cannot process the credit card you submitted. Either payment has been refused, or the card is invalid. Please verify and re-enter the credit card details, or use a different credit card. |
The /booking/status service retrieves the booking status for multiple items based on different criteria.
This service can only be polled every 30 minutes. This would ideally be used in software for bulk updates of pending itineraries.
The maximum number of results returned is 1,000 itineraries. Narrow your search criteria if you receive this many itineraries in response from the service.
NOTE: This will return both live and test bookings.
Example request body
{
"bookingDateFrom": "2020-08-01",
"bookingDateTo": "2020-09-01",
"itineraryIds": [
581166836
],
"itemIds": [
1006291040
],
"leadFirstName": "Homer test",
"leadSurname": "Simpson test",
"test": false
}
All fields are optional and can be omitted; however, at least one needs to be provided.
Field | Meaning |
---|---|
bookingDateFrom |
The booking date is greater than or equal this date |
bookingDateTo |
The booking date is less than or equal this date |
itineraryIds |
Array of itinerary ids (AKA Viator Reference) to check for; e.g., [1234657,2345267,3245154] |
itemIds |
Array of item ids (AKA Viator Item Reference) to check for; e.g., [1234657,2345267,3245154] |
leadFirstName |
The lead traveller's first name |
leadSurname |
The lead traveller's surname |
test |
Note: Setting test to true will bypass the poll limit on the sandbox environment only. The default value for test is false . |
Example response object (/booking/status)
{
"data": [
{
"itineraryId": 3332064,
"bookingStatus": {
"type": "CONFIRMED",
"level": "ITINERARY",
"failed": false,
"text": "Confirmed",
"cancelled": false,
"status": 3,
"confirmed": true,
"amended": false,
"pending": false
},
"bookingDate": "2013-03-25",
"distributorRef": null,
"itemSummaries": [{
"itineraryId": 3332064,
"itemId": 600088886,
"bookingStatus": {
"type": "CONFIRMED",
"level": "ITEM",
"failed": false,
"text": "Paid & Confirmed",
"cancelled": false,
"status": 1,
"confirmed": true,
"amended": false,
"pending": false
},
"travelDate": "2013-12-03",
"distributorItemRef": null,
"sortOrder": 0
}],
"sortOrder": 1
},
{
"itineraryId": 3332076,
"bookingStatus": {
"type": "CONFIRMED",
"level": "ITINERARY",
"failed": false,
"text": "Confirmed",
"cancelled": false,
"status": 3,
"confirmed": true,
"amended": false,
"pending": false
},
"bookingDate": "2013-03-26",
"distributorRef": null,
"itemSummaries": [{
"itineraryId": 3332076,
"itemId": 600088907,
"bookingStatus": {
"type": "CONFIRMED",
"level": "ITEM",
"failed": false,
"text": "Paid & Confirmed",
"cancelled": false,
"status": 1,
"confirmed": true,
"amended": false,
"pending": false
},
"travelDate": "2013-12-03",
"distributorItemRef": null,
"sortOrder": 0
}],
"sortOrder": 2
}],
"vmid": "221002",
"errorMessage": null,
"errorType": null,
"dateStamp": "2013-03-26T10:25:57+0000",
"errorReference": null,
"errorMessageText": null,
"success": true,
"totalCount": 2,
"errorName": null
}
You will receive the following error if you exceed the number of calls allowed to the service within the timeframe:
{
"data": null,
"vmid": "221002",
"errorMessage": [
"Access allowed every 30 minutes"
],
"errorType": "EXCEPTION",
"dateStamp": "2013-03-26T10:28:51+0000",
"errorReference": "~55315512721712161381352771",
"errorMessageText": [
"Access allowed every 30 minutes"
],
"success": false,
"totalCount": 1,
"errorName": "PollingDeniedException"
}
The /booking/pricingmatrix service retrieves the pricing matrix for tour grades, product age bands and pax (passenger) mixes.
Example request object (/booking/pricingmatrix)
"productCode": "5261HTLAP",
"tourGradeCode": "Zone 1",
"bookingDate": "2013-12-01",
"currencyCode": "USD",
"specialReservation": false
bookingDate
: The date to check for pricing data. This is an optional parameter for a normal product.
If the date is not provided then the nearest available date is determined (i.e. not blocked out or unavailable for any reason)
Example response object (/booking/pricingmatrix).
{
"data": [{
"pricingUnit": "per person",
"bookingDate": "2013-12-01",
"sortOrder": 1,
"ageBandPrices": [{
"bandId": 1,
"prices": [{
"sortOrder": 1,
"currencyCode": "USD",
"price": 81.94,
"priceFormatted": "$81.94",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}],
"sortOrder": 1,
"minimumCountRequired": 1,
"maximumCountRequired": 1
}]
},
{
"pricingUnit": "per person",
"bookingDate": "2013-12-01",
"sortOrder": 2,
"ageBandPrices": [{
"bandId": 1,
"prices": [{
"sortOrder": 1,
"currencyCode": "USD",
"price": 40.97,
"priceFormatted": "$40.97",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}],
"sortOrder": 1,
"minimumCountRequired": 2,
"maximumCountRequired": 2
}]
},
{
"pricingUnit": "per person",
"bookingDate": "2013-12-01",
"sortOrder": 3,
"ageBandPrices": [{
"bandId": 1,
"prices": [{
"sortOrder": 1,
"currencyCode": "USD",
"price": 27.32,
"priceFormatted": "$27.32",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"minNoOfTravellersRequiredForPrice": 1
}],
"sortOrder": 1,
"minimumCountRequired": 3,
"maximumCountRequired": 3
}]
}],
"errorReference": null,
"dateStamp": "2017-11-24T21:30:47+0000",
"errorType": null,
"errorCodes": null,
"errorMessage": null,
"errorName": null,
"success": true,
"totalCount": 3,
"errorMessageText": null,
"vmid": "321050"
}
Description of elements in JSON response object
Object | Element | Type | Comments | To be viewed by customer | Required field |
---|---|---|---|---|---|
data |
object | main response object | ❌ | ✅ | |
sortOrder |
integer | order in which to show the pricing | ✅ | ✅ | |
bookingDate |
date | booking date criteria | ✅ | ✅ | |
pricingUnit |
string | unit for pricing: currently, only "per person" is supported | ✅ | ✅ | |
ageBandPrices |
object | available age bands and their pricing | ❌ | ✅ | |
sortOrder |
integer | sort order for age band display | ✅ | ✅ | |
bandId |
integer | Note: the numeric bandId is associated with an age band description (e.g., "Adult" , "Infant" etc.) and a corresponding age range (e.g., from 12 to 99) - these details are available from the /product service. See Working with age bands |
❌ | ✅ | |
minimumCountRequired |
integer | minimum number of pricing units that apply to these prices | ✅ | ||
maximumCountRequired |
integer | maximum number of pricing units that apply to these prices | ✅ | ||
prices |
object | pricing available for the age band (based on the min and max count requirements) | ✅ | ✅ | |
currencyCode |
string | currency of the pricing | ✅ | ✅ | |
sortOrder |
integer | order the pricing is to be shown within the bandId |
✅ | ✅ | |
price |
number | price in decimal format | ❌ | ✅ | |
priceFormatted |
string | suggested sell price formatted according to the currency selected (with two decimal places where applicable) | ✅ | ✅ | |
merchantNetPrice |
number | Ignore (Viator only) | ❌ | ✅ | |
merchantNetPriceFormatted |
string | Ignore (Viator only) | ❌ | ✅ | |
minNoOfTravellersRequiredForPrice |
integer | number of units that the pricing applies to (e.g., a minNoOfTravellersRequiredForPrice of 3 means that the price is for three people) |
✅ | ✅ |
The /booking/voucher service retrieves details for a complete itinerary or a single itinerary item. The data is returned as HTML that can be wrapped in a header/footer.
itineraryId=3299307&leadLastName=DP&itemId=600033670
or
voucherKey=3299307:93c7f36a56b18ba1068787ba7fb7988da5c8ad08db77604110141ff21498603e:600033670
voucherKey
voucherKey
or the three separate parameters.voucherKey
is provided as well as other parameters, then the voucherKey
overrides the other parameters.voucherKey
is obtained from /booking/mybookings or in the /booking/book response object when a booking is made.fullHTML
This is an optional parameter:
true
, the full HTML (including <!DOCTYPE>
, <html>
and <head>
tags) will be returned.false
, an HTML <div>
element will be returned.false
mobileVoucher
true
. If true
, the mobile (cut down) voucher HTML is returned; otherwise, the full voucher HTML is returned and fullHTML
is ignoredvoucherOption
of "VOUCHER_E"
or "VOUCHER_ID_ONLY"
(e-vouchers are available for both options). Do not enable mobileVouchers
for paper vouchers (voucherOption
of "VOUCHER_PAPER_ONLY"
) as no barcode is returned.Example response object (/booking/voucher)
{
"data": "<div style=\'line-height: 1.5;font-family:\'Arial\',\'Helvetica\',\'Verdana\',sans-serif; font-size: 12px; padding: 0 10px; border-bottom: 1pxsolid #CAE2EA;\'><h2 style=\'font-size:16px;font-weight:bold;margin:0.5em 0;padding:0;\'>San FranciscoBay Sunset Catamaran Cruise ®</h2><h2 style=\'font-size:16px;font-weight:bold;margin:0.5em0;padding:0;\'>SAMPLE ONLY</h2><ul style=\'margin:0 0 1em 1em; padding:0;\'> <li><strong>Date:</strong>Friday April 13, 2012 </li><li><strong>Time:</strong><strong>2011:</strong><br><ul><li><strong>Nov. 6 to Nov. 27</strong>: 4:00pm (Fri., Sat. & Sun)</li></ul><p><strong>2012:</strong></p><ul><li><strong>March 2 to March 10:</strong> 5:00 pm (Fri., Sat. & Sun)</li><li><strong>March 11 to April 15:</strong> 6:00pm Daily</li><li><strong>April 16 to May 20:</strong> 6:30 pm Daily</li><li><strong>May 21 to July 22:</strong> 7:00 pm Daily</li><li><strong>July 23 to Aug 26: </strong>6:30 pm Daily</li><li><strong>Aug 27 to Sept 23:</strong>6:00 pm Daily</li><li><strong>Sept. 24 to Nov. 3:</strong> 5:30 pm Daily</li><li><strong>Nov 4 to Dec 2:</strong> 4:00pm (Friday, Sat., & Sun.)</li></ul><p>Please arrive 30 minutes prior to cruise departure.</li></ul> <ul style=\'margin:0 0 1em 1em; padding:0;\'> <li><strong>Lead Traveler: </strong> jos dp</li><li><strong>Number of Travelers: </strong> 1 Adult</li> <li><strong>Booking Reference: </strong>VIATOR600033672</li><li><strong>Product Code: </strong>2316SUN</li><li><strong>Confirmation Details:</strong>SUN </li> <li><strong>Location </strong><div><p>Pier 39</p></div><div></div><div>When you get to Pier 39, stand on the sidewalk & look towards the water, do NOT go down the center wherethe shops are, but take the left OUTSIDE walkway. Go towards the sea lions & look for a gate with the letter J on it</div></li></ul><h3 style=\'font-size:14px;font-weight:bold;margin:0.5em 0;padding:0;\'> Redemption Info</h3><ul style=\'margin:0 0 1em 1em; padding:0;\'> <li>You can present either a paper or an electronic voucherfor this activity. </li> </ul> <h3 style=\'font-size:14px;font-weight:bold;margin:0.5em 0;padding:0;\'>Important</h3> <ul><li>Your local contact is Adventure Cat Sailing Charters on +1 800 498 4228.</li><li>Please note: You mustreconfirm directly with Adventure Cat Sailing Charters at <ul> <li>Locally on 415 777 1630</li></ul> at least 24 Hour(s)prior to your tour/activity date. If you are not arriving within the specified timeframe, please contact Adventure CatSailing Charters prior to your travels, or immediately upon arrival at your destination.</li></ul><ul><li>Duringthe months of March, April and November, the weather in San Francisco can be unpredictable and sailings are subject tocancellation or rescheduling. Please ensure that you call the operator 1 day prior to sailing to confirm your tour</li></ul><h3 style=\'font-size:14px;font-weight:bold;margin:0.5em 0;padding:0;\'>Inclusions</h3><ul><li>1.5-hour Sunset Cruise</li><li>Light hors d\'oeuvres</li><li>Two complimentary drinks</li></ul><h3 style=\'font-size:14px;font-weight:bold;margin:0.5em 0;padding:0;\'>Terms and Conditions </h3> Read our completeTerms & Conditions for information on cancellations, date changes and other modifications to this confirmed reservation. </div><!-- end of voucher_item --></div>",
"vmid": "221001",
"errorMessage": null,
"errorType": null,
"dateStamp": "2012-04-13T10:40:47+0000",
"success": true,
"errorReference": null,
"errorMessageText": null,
"totalCount": 1,
"errorName": null
}
To email a voucher to a customer, you can use the /booking/voucher/email service.
You can provide an itineraryId
and leadLastName
; or, optionally, an itemId
or voucherKey
in the request object for this service.
{
"itineraryId": 3299307,
"itemId": 600033670,
"leadLastName": "DP",
"voucherKey": null,
"name": "David",
"email": "DavidT@viator.com",
"subject": "Tour vouchers from David",
"message": "hello this is a very very very long message"
}
Parameter | Meaning | Mandatory |
---|---|---|
voucherKey |
If a value is provided, it will override itineraryId , itemId and leadLastName . |
❌ |
itemId |
If an itemId is passed (not null and not 0), then only the individual item voucher gets sent. |
❌ |
{
"data": "Done",
"vmid": "221001",
"errorMessage": null,
"errorType": null,
"dateStamp": "2012-04-13T15:24:12+0000",
"success": true,
"errorReference": null,
"errorMessageText": null,
"totalCount": 1,
"errorName": null
}
To have a voucher faxed to a customer, you can use the /booking/voucher/fax service.
You can provide an itineraryId
and leadLastName
; or, optionally, an itemId
or voucherKey
in the request object for this service.
{
"itineraryId": 3299307,
"itemId": 600033670,
"leadLastName": "DP",
"voucherKey": null,
"countryCode": "61",
"areaCode": "02",
"faxNumber":"82195499",
"to":"Mary",
"subject":"Hi from David",
"message": "Here are all your tour vouchers for your trip"
}
Parameter | Meaning | Mandatory |
---|---|---|
voucherKey |
If a value is provided, it will override itineraryId , itemId and leadLastName . |
❌ |
itemId |
If an itemId is passed (not null and not 0), then only the individual item voucher gets sent. |
❌ |
{
"data": "Done",
"vmid": "221001",
"errorMessage": null,
"errorType": null,
"dateStamp": "2012-04-13T16:13:40+0000",
"success": true,
"errorReference": null,
"errorMessageText": null,
"totalCount": 1,
"errorName": null
}
The /booking/pastbooking service gets the details of a single specific past booking based on the voucherKey
, itineraryId
, or itemId
passed into it.
"email=john.doe@viator.com&itineraryId=3299307"
or
"email=john.doe@viator.com&itemId=600033670"
or
"voucherKey=3299307:93c7f36a56b18ba1068787ba7fb7988da5c8ad08db77604110141ff21498603e:600033670"
The email address passed must match the email address associated to the itinerary
Departure details, such as the departurePoint
, departurePointAddress
and departurePointDirections
, will be included in the response. These fields may contain HTML escape characters, such as &
and special characters that are escaped by a backslash. Ensure that these fields are parsed after receiving the response, or it may cause your JSON to be invalid.
Example response object (/booking/pastbooking):
{
"errorReference": null,
"data": {
"sortOrder": 0,
"rulesApplied": null,
"bookingStatus": {
"status": 3,
"text": "Confirmed",
"type": "CONFIRMED",
"level": "ITINERARY",
"confirmed": true,
"pending": false,
"amended": false,
"cancelled": false,
"failed": false
},
"itemSummaries": [{
"sortOrder": 0,
"rulesApplied": null,
"bookingStatus": {
"status": 1,
"text": "Paid & Confirmed", "type": "CONFIRMED",
"level": "ITEM",
"failed": false,
"confirmed": true,
"amended": false,
"pending": false,
"cancelled": false
},
"travellerAgeBands": [{
"sortOrder": 0,
"count": 2,
"pluralDescription": "Adults",
"description": "Adult",
"ageBandId": 1
}],
"voucherKey": "1000308214:899757cf8b419ed11f39045636b0b30af986d19126d04547097f4b9c05fb4b69:700179574",
"voucherURL": "https://viatorapi.viator.com/service/merchant/voucher.jspa?code=1000308214:899757cf8b419ed11f39045636b0b30af986d19126d04547097f4b9c05fb4b69:700179574&embedResources=false",
"voucherRequirements": "You must present a paper voucher for this tour. We will email a link to access and print your voucher at the Lead Travelers email address.",
"productPulledDown": false,
"merchantCancellable": true,
"productWidgetList": null,
"savingAmount": 0,
"vouchers": null,
"passbooks": null,
"termsAndConditions": null,
"itineraryId": 1000308214,
"productCode": "2065CPT",
"tourGradeCode": "1DAY",
"distributorItemRef": null,
"languageServicesLanguageCode": "en",
"travelDate": "2015-09-03",
"price": 26.28,
"leadTravellerSurname": "Test",
"barcodeOption": "tour",
"barcodeType": "code128",
"destId": 318,
"voucherOption": "VOUCHER_PAPER_ONLY",
"productTitle": "City Sightseeing Cape Town Hop-On Hop-Off Tour",
"itemId": 700179574,
"obfsId": 27643,
"departurePoint": "Tour starts at V&A Waterfront, outside the Two Oceans Aquarium, however you may board the bus at any one of the stops throughout the city (see the Itinerary section below for a list of stops)",
"departurePointAddress": "",
"departurePointDirections": "",
"leadTravellerTitle": "Mr",
"leadTravellerFirstname": "Homer",
"lastRetailPrice": 26.28,
"bookingEngineId": "UF",
"priceFormatted": "$26.28",
"savingAmountFormated": "$0.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"currencyCode": "USD",
"lastRetailPriceFormatted": "$26.28",
"departsFrom": "Cape Town, South Africa",
"tourGradeDescription": "1-Day Bus Tour (1DAY)",
"hoursConfirmed": 0,
"priceUSD": 26.28
}],
"voucherURL": "https://viatorapi.viator.com/service/merchant/voucher.jspa?code=1000308214:899757cf8b419ed11f39045636b0b30af986d19126d04547097f4b9c05fb4b69&embedResources=false",
"voucherKey": "1000308214:899757cf8b419ed11f39045636b0b30af986d19126d04547097f4b9c05fb4b69",
"bookerEmail": "jocelyn@viator.com",
"itineraryId": 1000308214,
"exchangeRate": 1,
"distributorRef": null,
"totalPrice": 26.28,
"bookingDate": "2015-06-10",
"totalPriceFormatted": "$26.28",
"totalPriceUSD": 26.28,
"hasVoucher": true,
"userId": null,
"currencyCode": "USD"
}
}
The /booking/mybookings service gets a user's future bookings; i.e., those with travel dates in the future. This service can also be used to check the status of a booking.
"sessionId=xxx"
, or"voucherKey=xxx"
, or"email=terry.smith@viator.com&lastCCFourDigits=4242"
, or"email=terry.smith@viator.com&itineraryOrItemId=3299307"
Provide one of:
sessionId
for all bookings related to a user account, orvoucherKey
, oremail
) and the last four digits of the credit card number (lastCCFourDigits
) used to make the booking to get all associated bookings, oremail
) with either an itemId
or itineraryId
...in that order
For "Failed"
items, display a message that communicates the following information to your customers:
"The booking has failed either because this tour or activity was not available or there was a technical issue. Please contact Customer Service if you need more information."
See also: bookingStatus field values and meanings
Departure details, such as the departurePoint
, departurePointAddress
and departurePointDirections
will be included in the response. These fields may contain HTML escape characters, such as &
and special characters that are escaped using a backslash. Ensure that these fields are parsed after receiving the response or it may cause your JSON to be invalid.
Example response object (/booking/mybookings):
{
"errorReference": null,
"data": {
"sortOrder": 0,
"rulesApplied": null,
"bookingStatus": {
"status": 3,
"text": "Confirmed",
"type": "CONFIRMED",
"level": "ITINERARY",
"confirmed": true,
"pending": false,
"amended": false,
"cancelled": false,
"failed": false
},
"itemSummaries": [{
"sortOrder": 0,
"rulesApplied": null,
"bookingStatus": {
"status": 1,
"text": "Paid & Confirmed",
"type": "CONFIRMED",
"level": "ITEM",
"failed": false,
"confirmed": true,
"amended": false,
"pending": false,
"cancelled": false
},
"travellerAgeBands": [{
"sortOrder": 0,
"count": 2,
"pluralDescription": "Adults",
"description": "Adult",
"ageBandId": 1
}],
"voucherKey": "1000308214:899757cf8b419ed11f39045636b0b30af986d19126d04547097f4b9c05fb4b69:700179574",
"voucherURL": "https://viatorapi.viator.com/service/merchant/voucher.jspa?code=1000308214:899757cf8b419ed11f39045636b0b30af986d19126d04547097f4b9c05fb4b69:700179574&embedResources=false",
"voucherRequirements": "You must present a paper voucher for this tour. We will email a link to access and print your voucher at the Lead Travelers email address.",
"productPulledDown": false,
"merchantCancellable": true,
"productWidgetList": null,
"savingAmount": 0,
"vouchers": null,
"passbooks": null,
"termsAndConditions": null,
"itineraryId": 1000308214,
"productCode": "2065CPT",
"tourGradeCode": "1DAY",
"distributorItemRef": null,
"languageServicesLanguageCode": "en",
"travelDate": "2015-09-03",
"price": 26.28,
"leadTravellerSurname": "Test",
"barcodeOption": "tour",
"barcodeType": "code128",
"destId": 318,
"voucherOption": "VOUCHER_PAPER_ONLY",
"productTitle": "City Sightseeing Cape Town Hop-On Hop-Off Tour",
"itemId": 700179574,
"obfsId": 27643,
"departurePoint": "Tour starts at V&A Waterfront, outside the Two Oceans Aquarium, however you may board the bus at any one of the stops throughout the city (see the Itinerary section below for a list of stops)",
"departurePointAddress": "",
"departurePointDirections": "",
"leadTravellerTitle": "Mr",
"leadTravellerFirstname": "Homer",
"lastRetailPrice": 26.28,
"bookingEngineId": "UF",
"priceFormatted": "$26.28",
"savingAmountFormatted": "$0.00",
"merchantNetPrice": 0,
"merchantNetPriceFormatted": "",
"currencyCode": "USD",
"lastRetailPriceFormatted": "$26.28",
"departsFrom": "Cape Town, South Africa",
"tourGradeDescription": "1-Day Bus Tour (1DAY)",
"hoursConfirmed": 0,
"priceUSD": 26.28
}],
"voucherURL": "https://viatorapi.viator.com/service/merchant/voucher.jspa?code=1000308214:899757cf8b419ed11f39045636b0b30af986d19126d04547097f4b9c05fb4b69&embedResources=false",
"voucherKey": "1000308214:899757cf8b419ed11f39045636b0b30af986d19126d04547097f4b9c05fb4b69",
"bookerEmail": "jocelyn@viator.com",
"itineraryId": 1000308214,
"exchangeRate": 1,
"distributorRef": null,
"totalPrice": 26.28,
"bookingDate": "2015-06-10",
"totalPriceFormatted": "$26.28",
"totalPriceUSD": 26.28,
"hasVoucher": true,
"userId": null,
"currencyCode": "USD"
},
"dateStamp": "2015-06-10T00:33:24+0000", "errorType": null,
"errorMessage": null,
"errorName": null,
"success": true,
"totalCount": 1,
"vmid": "321004",
"errorMessageText": null
}
In order to have a confirmation email regarding the booking sent to the email address associated with the booking by Viator Customer Service, you can use the /booking/mybookings/message service.
{
"itineraryId": 3299307,
"itemId": 600033670,
"type": "OTHER",
"message": "Voucher enquiry",
"otherQuestion": "This question will be overwritten with the question set at otherQuestionId"
"otherQuestionId":"VOUCHER_PROBLEM",
"respondInFL": false
}
Parameter | Meaning | Mandatory |
---|---|---|
sessionId |
Partners can either omit the sessionId field altogether or simply leave the value blank. |
❌ |
type |
Valid message types are: "AMEND" , "CANCEL" , "OTHER" , "REFUND" and partners must specify the type of "OTHER" |
✅ |
otherQuestion |
If otherQuestionId is not included, the text in this field will be the question asked |
❌ |
otherQuestionId |
If "OTHER" is specified in type , this field will override the otherQuestion with a pre-mapped question. Partners can specify: "ON_REQUEST" , "GENERAL_INFO" , "VOUCHER_PROBLEM" , "TECH_PROBLEM" , "INCORRECT_DETAILS" , "FAX_MOBILE" , "MOBILE_UPDATES" , "GENERAL_OTHER" |
❌ |
respondInFL |
Only applicable for "PARTNER"/"VML" sites. If true then respond in Foreign Language (FL) |
❌ |
{
"itineraryId": 3299307,
"itemId": 600033670,
"type": "CANCEL",
"message": "Holiday cancelled by the customer"
}
Your request will then be placed into a queue to be canceled manually by the Viator customer service team.
{
"data": "Successfully Submitted booking message",
"vmid": "221001",
"errorMessage": null,
"errorType": null,
"dateStamp": "2012-04-16T13:03:54+0000",
"success": true,
"errorReference": null,
"errorMessageText": null,
"totalCount": 1,
"errorName": null
}
This is a sample PHP POST API request to get the detailed availability of a product for a month.
function getAvailability ($productCode, $month, $year, $currencyCode, $ageBandIdQtyArray) {
// getServiceURL() should return the base URL; e.g., 'https://viatorapi.viator.com'
$url = getServiceURL() . "/service/booking/availability" . "?apiKey=" . getapiKey();
// set up an array for the agebands -> qty list
$agebandQtyList = array();
foreach ($ageBandIdQtyArray as $band => $qty) {
$agebandQty = new agebandQty();
$agebandQty->bandId = $band;
$agebandQty->count = $qty;
$agebandQtyList[] = $agebandQty;
}
// Sample JSON: { "productCode": "2280AAHT","month": "6", "year": "2011", "currencyCode": "EUR", "ageBands":[{ "bandId":1, "count":1 }]}
// add the other parameters
$data['productCode'] = $productCode;
$data['month'] = $month;
$data['year'] = $year;
$data['currencyCode'] = $currencyCode;
$data['ageBands'] = $agebandQtyList;
// encode the $data, post to the service, decode the JSON and return the resulting objec
return json_decode (do_post_request($url, json_encode($data),"Content-Type: application/json\n"));
}
// THIS IS A HELPER FUNCTION TO WRAP AN HTTP POST
// $data = array(); - this is a key value assoc array to emulate a form being posted...
// $response = do_post_request($url, http_build_query($data));
function do_post_request($url, $data, $optional_headers = null) {
$params = array('https' => array('method' => 'POST', 'content' => $data));
if ($optional_headers !== null) {
$params['https']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url, $php_errormsg");
}
return $response;
}
Here's some sample code for getting the product details.
function getProduct ($productCode, $currencyCode) {
global $prefix, $memcache, $cacheTime;
// create key for memcache
$key = $prefix."_".getapiKey()."_"."getProduct"."-".$productCode."-".$currencyCode;
// get the result from memcache if it's available
$ret = $memcache->get($key);
// if not available, call the API
if ($ret === false) {
// form the URL
$url = getServiceURL() . "/service/product" . "?apiKey=" . getapiKey() . "&code=" . $productCode . "¤cyCode=" . $currencyCode;
// do the GET and decode the results
$ret = json_decode (file_get_contents($url));
// check the return object for a successful request
if ($ret->success === true) {
// set the object into memcache for next time
$memcache->set($key, $ret, false, $cacheTime);
}
}
// return the data object
return $ret;
}
This is a sample Java POST API request to get the products in Las Vegas available on the 25th February, 2014
Note that this for Java code with Apache http-client 4.3.2:
HttpPost post = new HttpPost("http://viatorapi.viator.com/service/search/products?apiKey=xxxxxxxx");
post.setHeader("Content-Type", "application/json");
String json = "
{\"startDate\":\"2014-02-25\",\"endDate\":\"2014-02-25\", \"topX\":\"1-5\",\"destId\":\"684\"
";
post.setEntity(new StringEntity(json));
CloseableHttpClient httpclient = HttpClients.createDefault();
CloseableHttpResponse response = httpclient.execute(post);
InputStream content = response.getEntity().getContent();
To facilitate your testing of the API in the sandbox environment, please use the following file, which can be loaded into the Postman API development environment via its import function:
Before you start using the linked Postman collection for testing, you will need to set up the authorization method you wish to use. This can be either the new method (the exp-api-key
header parameter) or, the legacy method (the apiKey
query parameter).
While both methods remain available, we strongly recommend that you use the new method, as it:
Please speak to your account manager if you are still using the legacy apiKey and would like to switch to our new authentication mechanism.
exp-api-key
apiKey
We are getting rates 0 in 'merchantNetPriceFrom' field for all products, why?
merchantNetPriceFrom
is only available for our merchant partners; whereas, you currently have an affiliate apiKey. These are two completely separate partner programs that require different key configurations and agreements. Please contact the your account manager if you are interested in becoming a merchant partner.What are some common issues that cause bookings to fail in the API?
homePhone
or any phone field in the booking request contain spaces. The only non-numeric characters acceptable are: “-“, “+” , “(“, and “)”
No traveller or an incorrect traveller has been set as the lead traveller in the booking request;
leadTraveller
:true
must be set for one travellerleadTraveller
must be from an ageBand
that has treatAsAdult
set to true
. The data is available in the ageBands
object in the product details service.languageOptionCode
is invalid
langServices
object in the response from the /product service; e.g.,"langServices": {
"en/SERVICE_AUDIO": "English - Audio"
}
languageOptionCode
is populated in the same way; i.e.,"languageOptionCode": "en/SERVICE_AUDIO"
What does it mean if I receive a "503 Service Unavailable" response?
Why am I getting an empty response when checking booking details?
true
, as the booking status endpoints will ignore demo bookings. Please try making the booking again, ensuring the demo parameter is set to false
. If this also fails, please email dpsupport@viator.com and include a copy of the request and response JSON objects.Must I always provide details for all travelers when booking a product where allTravellerNamesRequired
=true
?
Must I always provide answers to the required booking questions when making a booking?
Why is there such a big difference in price between that given in the product endpoints and the actual price at the time of booking?
The Accept-Language
header parameter controls which language the natural language fields in the response from each endpoint will be translated into.
Note that you can only specify languages that have been configured for your API-key. Therefore, if you wish to access additional languages, you will need to contact your business development account manager.
Language | Accept-Language parameter value |
---|---|
English | en , en-US |
Danish | da , da-DK |
Dutch | nl , nl-NL |
Norwegian | no , no-NO |
Spanish | es , es-ES |
Swedish | sv , sv-SE |
French | fr , fr-FR |
Italian | it , it-IT |
German | de , de-DE |
Portuguese | pt , pt-PT |
Japanese | ja , ja-JP |
Field: type |
Field: status |
Meaning |
---|---|---|
"WAITING" |
0 |
This item has not been booked. Part of an unfinished itinerary. |
"CONFIRMED" |
1 |
This item has been successfully booked |
"UNAVAILABLE" |
2 |
This item has been had an availability check, that came back false. |
"PENDING" |
3 |
This item has begun booking, but has paused in a deferred booking engine |
"FAILED" |
4 |
A merchant partner with a freesale-only API-key has attempted to book an on-request product |
"CANCELLED" |
5 |
This item has successfully been cancelled. |
"EXPIRED" |
6 |
This item is now expired. |
"AMENDED" |
7 |
This item has been amended after booking. |
"PENDING_AMEND" |
8 |
This item has a pending amendment which can be cancelled. |
"REJECTED" |
12 |
Viator only |
"ON_HOLD" |
13 |
Viator only |
Supported currency codes for affiliate partners:
Currency code | Currency |
---|---|
USD | US dollar |
GBP | British pound |
EUR | Euro |
AUD | Australian dollar |
HKD | Hong Kong Dollar |
SGD | Singapore Dollar |
CHF | Swiss Franc |
JPY | Japanese Yen |
NOK | Norwegian Krone |
CAD | Canadian Dollar |
NZD | New Zealand Dollar |
INR | Indian Rupee |
BRL | Brazillian Lire |
ZAR | South African Rand |
DKK | Danish Krone |
SEK | Swedish Krona |
Note: Access to currencies other than the main currency configured your account is restricted by default. Please speak to your account manager if you require access to pricing in alternative currencies. Furthermore, partners will be paid commissions only in the main currency configured for their account.
Country code | Country |
---|---|
AF | Afghanistan |
AL | Albania |
DZ | Algeria |
AS | American Samoa |
AD | Andorra |
AO | Angola |
AI | Anguilla |
AQ | Antarctica |
AG | Antigua and Barbuda |
AR | Argentina |
AM | Armenia |
AW | Aruba |
AU | Australia |
AT | Austria |
AZ | Azerbaijan |
BS | Bahamas |
BH | Bahrain |
BD | Bangladesh |
BB | Barbados |
BY | Belarus |
BE | Belgium |
BZ | Belize |
BJ | Benin |
BM | Bermuda |
BT | Bhutan |
BO | Bolivia |
BA | Bosnia Herzegovina |
BW | Botswana |
BR | Brazil |
BN | Brunei |
BG | Bulgaria |
BF | Burkina Faso |
BI | Burundi |
KH | Cambodia |
CM | Cameroon |
CA | Canada |
CV | Cape Verde |
KY | Cayman Islands |
CF | Central Africa |
TD | Chad |
CL | Chile |
CN | China |
CX | Christmas Island |
CC | Cocos (Keeling) Islands |
CO | Colombia |
KM | Comoros |
CK | Cook Islands |
CR | Costa Rica |
CI | Cote D'Ivoire |
HR | Croatia |
CY | Cyprus |
CZ | Czech Republic |
DK | Denmark |
DJ | Djibouti |
DM | Dominica |
DO | Dominican Republic |
EC | Ecuador |
EG | Egypt |
SV | El Salvador |
GQ | Equatorial Guinea |
ER | Eritrea |
EE | Estonia |
ET | Ethiopia |
FK | Falkland Island |
FO | Faroe Islands |
FJ | Fiji |
FI | Finland |
FR | France |
GF | French Guiana |
PF | French Polynesia |
GA | Gabon |
GM | Gambia |
GE | Georgia |
DE | Germany |
GH | Ghana |
GI | Gibraltar |
GR | Greece |
GL | Greenland |
GD | Grenada |
GP | Guadeloupe |
GU | Guam |
GT | Guatemala |
GN | Guinea |
GW | Guinea Bissau |
GY | Guyana |
HT | Haiti |
HN | Honduras |
HK | Hong Kong |
HU | Hungary |
IS | Iceland |
IN | India |
ID | Indonesia |
IQ | Iraq |
IE | Ireland |
IL | Israel |
IT | Italy |
JM | Jamaica |
JP | Japan |
JO | Jordan |
KZ | Kazakhstan |
KE | Kenya |
KI | Kiribati |
KW | Kuwait |
KG | Kyrgyzstan |
LA | Lao People's Democratic Republic |
LV | Latvia |
LB | Lebanon |
LS | Lesotho |
LR | Liberia |
LY | Libyan Arab Jamahiriya |
LI | Liechtenstein |
LT | Lithuania |
LU | Luxembourg |
MO | Macau |
MK | Macedonia |
MG | Madagascar |
MW | Malawi |
MY | Malaysia |
MV | Maldives |
ML | Mali |
MT | Malta |
MQ | Martinique |
MR | Mauritania |
MU | Mauritius |
YT | Mayotte |
MX | Mexico |
FM | Micronesia |
MD | Moldova |
MC | Monaco |
MN | Mongolia |
MS | Monserrat |
MA | Morocco |
MZ | Mozambique |
NA | Namibia |
NR | Nauru |
NP | Nepal |
NL | Netherlands |
AN | Netherlands Antilles |
KN | Nevis- St Kitts |
NC | New Caledonia |
NZ | New Zealand |
NI | Nicaragua |
NE | Niger |
NG | Nigeria |
NU | Niue |
NF | Norfolk Island |
KP | North Korea |
MP | Northern Mariana Islands |
NO | Norway |
OM | Oman |
PK | Pakistan |
PW | Palau |
PS | Palestinian Territory, Occupied |
PA | Panama |
PG | Papua New Guinea |
PY | Paraguay |
PE | Peru |
PH | Philippines |
PN | Pitcairn |
PL | Poland |
PT | Portugal |
PR | Puerto Rico |
QA | Qatar |
RE | Reunion |
RO | Romania |
RU | Russian Federation |
RW | Rwanda |
SH | Saint Helena |
LC | Saint Lucia |
SM | San Marino |
ST | Sao Tome and Principe |
SA | Saudi Arabia |
SN | Senegal |
YU | Serbia and Montenegro |
SC | Seychelles |
SL | Sierra Leone |
SG | Singapore |
SK | Slovakia |
SI | Slovenia |
SB | Solomon Islands |
SO | Somalia |
ZA | South Africa |
KR | South Korea |
ES | Spain |
LK | Sri Lanka |
PM | St Pierre Miquelon |
VC | St Vincent and Grenadines |
SR | Suriname |
SZ | Swaziland |
SE | Sweden |
CH | Switzerland |
SY | Syria |
TW | Taiwan |
TJ | Tajikistan |
TZ | Tanzania |
TH | Thailand |
TL | Timor-Leste |
TG | Togo |
TK | Tokelau |
TO | Tonga |
TT | Trinidad and Tobago |
TN | Tunisia |
TR | Turkey |
TM | Turkmenistan |
TC | Turks and Caicos Islands |
TV | Tuvalu |
UG | Uganda |
UA | Ukraine |
AE | United Arab Emirates |
GB | United Kingdom |
UY | Uruguay |
UM | US Minor Outlying Islands |
US | United States of America |
UZ | Uzbekistan |
VU | Vanuatu |
VE | Venezuela |
VN | Vietnam |
VG | Virgin Islands-British |
VI | Virgin Islands-US |
WF | Wallis and Futuna Islands |
WS | Western Samoa |
YE | Yemen Republic |
ZM | Zambia |
ZW | Zimbabwe |
State code | State |
---|---|
AL | Alabama |
AK | Alaska |
AZ | Arizona |
AR | Arkansas |
CA | California |
CO | Colorado |
CT | Connecticut |
DE | Delaware |
DC | District of Columbia |
FL | Florida |
GA | Georgia |
HI | Hawaii |
ID | Idaho |
IL | Illinois |
IN | Indiana |
IA | Iowa |
KS | Kansas |
KY | Kentucky |
LA | Louisiana |
ME | Maine |
MD | Maryland |
MA | Massachusetts |
MI | Michigan |
MN | Minnesota |
MS | Mississippi |
MO | Missouri |
MT | Montana |
NE | Nebraska |
NV | Nevada |
NH | New Hampshire |
NJ | New Jersey |
NM | New Mexico |
NY | New York |
NC | North Carolina |
ND | North Dakota |
OH | Ohio |
OK | Oklahoma |
OR | Oregon |
PA | Pennsylvania |
RI | Rhode Island |
SC | South Carolina |
SD | South Dakota |
TN | Tennessee |
TX | Texas |
UT | Utah |
VT | Vermont |
VA | Virginia |
WA | Washington |
WV | West Virginia |
WI | Wisconsin |
WY | Wyoming |
Code | Province |
---|---|
Alberta | Alberta |
British Columbia | British Columbia |
Manitoba | Manitoba |
New Brunswick | New Brunswick |
Newfoundland and Labrador | Newfoundland |
Northwest Territories | Northwest Territories |
Nova Scotia | Nova Scotia |
Nunavut | Nunavut |
Ontario | Ontario |
Prince Edward Island | Prince Edward Island |
Quebec | Quebec |
Saskatchewan | Saskatchewan |
Yukon | Yukon Territory |
Code | State |
---|---|
ACT | Australian Capital Territory |
NSW | New South Wales |
NT | Northern Territory |
QLD | Queensland |
SA | South Australia |
TAS | Tasmania |
VIC | Victoria |
WA | Western Australia |
Error code | Services | Error message | Description |
---|---|---|---|
ADDRESS_REQUIRED | /booking/book | "You have not entered an address. Please enter your address information." | ccAddress1 was empty |
ADDRESS_SIZE_EXCEEDED | /booking/book | "Billing address is restricted to 50 characters long." | address field was longer than 51 characters |
ATTRIBUTE_NOT_FOUND | /product | ||
AGE_BAND_INVALID | /booking/book | a bandId has been submitted that does not correspond to any bandId available for the tour grade in question |
|
BOOKING_QUESTIONS_MISSING | /booking/book | "Additional questions missing" | one or more required booking questions are missing in the booking request |
CARD_EXPIRED | /booking/book | submitted credit card details corresponding to an expired card | |
CITY_REQUIRED | /booking/book | "You have not entered a city in the address section. Please enter your city." | address is required in the credit card section |
CITY_SIZE_EXCEEDED | /booking/book | "City is restricted to 40 characters long." | city name submitted was more than 40 characters long |
COUNTRY_REQUIRED | /booking/book | "You have not entered a country. Please enter your country." | no country was submitted in the booking request |
CREDIT_CARD_DECLINED | /booking/book | credit card used for booking was declined by the payment processor | |
CREDIT_CARD_EXPIRY_DATE_INVALID | /booking/book | "The expiration date for your credit card is not formatted properly. Please verify and re-enter the expiration date." | incorrectly-formatted credit card expiration date was submitted |
CREDIT_CARD_HOLDER_NAME_INVALID | /booking/book | credit card holder's name was invalid, perhaps due to the inclusion of invalid characters | |
CREDIT_CARD_NUMBER_INVALID | /booking/book | "Please verify and re-enter the credit card details, or use a different credit card" | invalid characters in credit card number |
CREDIT_CARD_NUMBER_REQUIRED | /booking/book | "Credit card number is required" | credit card number was omitted |
CREDIT_CARD_SECURITY_NUMBER_INVALID | /booking/book | "The card security number you entered for your credit card is invalid. It must contain 3 digits (or 4 with American Express cards). Please re-enter the card security number." | incorrect CCV code submitted |
CREDIT_CARD_SECURITY_NUMBER_REQUIRED | /booking/book | "Credit card security number is required" | CCV was not provided |
DEMO_BOOKING_WITH_REAL_CARD | /booking/pricingmatrix | demo is true , but credit card details are real |
|
DISTRIBUTOR_REFERENCE_MISMATCH | /booking/pastbooking; /booking/mybookings | Not applicable to booking affiliates | |
EMAIL_ADDRESS_INVALID | /booking/book | "Your email address format is invalid" | email address is formatted incorrectly |
EMAIL_REQUIRED | /booking/book | "Email is required" | email address is missing in the booking request |
FIRST_NAME_INVALID | /booking/book | "You have entered a name for the credit-card holder that is not valid. Please verify and re-enter the name of the credit card holder." | first name is formatted incorrectly or contains invalid characters in the booking request – string length must be > 1 and must not contain the following characters: <>%;"(), |
FIRST_NAME_REQUIRED | /booking/book | "First name of credit card details is required" | no first name specified |
FIRST_NAME_SIZE_EXCEEDED | /booking/book | "First name of credit card details is restricted to 30 characters long" | first name exceeds 30 characters |
INTERNAL_ERROR | any | any | the API itself has experienced an unexpected error |
LAST_NAME_INVALID | /booking/book | "You have entered a name for the credit-card holder that is not valid. Please verify and re-enter the name of the credit card holder." | last name is formatted incorrectly in the booking request – string length must be > 1 and must not contain the following characters: <>%;"(), |
LAST_NAME_REQUIRED | /booking/book | "Last name of credit card details is required" | no last name supplied in the ccname field of the ccPayDetail object |
LAST_NAME_SIZE_EXCEEDED | /booking/book | "Last name of credit card details is restricted to 35 characters long" | the surname in the ccname field of the ccPayDetail object must not exceed 35 characters in length |
LEAD_TRAVELLER_REQUIRED | /booking/book | "A traveler needs to be selected as lead traveler." | one traveller object within the travellers array in the booking request needs to have leadTraveller set to true |
PAYMENT_AMOUNTS_CHANGED | /booking/book | [e.g. "PAYMENT_AMOUNTS_CHANGED: HKD 2213.20 (was HKD 2210.26)" | This error indicates that the exchange rate was updated while the booking was being made. Refresh the product's pricing information and retry the booking. |
PAYMENT_CURRENCY_MISMATCH | /booking/book | ||
PAYMENT_ENCRYPTION_ERROR | /booking/book | Viator-only internal error - retry booking request | |
PAYMENT_INTERNAL_ERROR | /booking/book | Viator-only internal error - retry booking request | |
PAYMENT_LIMIT_REACHED | /booking/book | Viator-only internal error - retry booking request | |
PAYMENT_REJECTED | /booking/book | triggered when expiry: "01/2018" and card number: "4539791001730106" were submitted |
|
POSTCODE_REQUIRED | /booking/book | "You have not entered a zip code / post code. Please enter your zip code / post code.", | ccaddressZip was empty |
POSTCODE_SIZE_EXCEEDED | /booking/book | "Zip code / post code is restricted to 10 characters long." | ccaddressZip was more than 10 characters in length |
PRICING_DATA_MISSING | Viator-only internal error - retry booking request | ||
PRODUCT_TOUR_GRADE_UNKNOWN | /booking/pricingmatrix | Unknown tour grade: |
an invalid tour grade code was submitted |
PRODUCT_UNAVAILABLE | /booking/book | Viator-only internal error - retry booking request | |
REFUND_REJECTED | Viator-only internal error - retry booking request | ||
STATE_REQUIRED | /booking/book | ccaddressState is required for this billing request |
|
STATE_SIZE_EXCEEDED | /booking/book | ccaddressState must be fewer than 35 characters long |
|
TOUR_NOT_AVAILABLE | /booking/book | "We're sorry, the following tour you are trying to book is sold out and no longer available" | the tour is not available on the requested date |
TOUR_GONE | /product | "We're sorry, we cannot find the tour, activity or attraction you are looking for" | no product corresponding to the supplied details was found |
TOUR_NOT_AVAILABLE_BETWEEN_DATES | |||
TOUR_NOT_FOUND | /product | "We're sorry, we cannot find the tour, activity or attraction you are looking for" | no product corresponding to the supplied details was found |
TRAVELLER_COUNT_EXCEEDED_MAX_LIMIT | number of travellers in the booking request was greater than the limit for the product being booked | ||
TRAVELLER_FIRST_NAME_INVALID | /booking/book | "First name of traveler 1 must only contain alphabetical characters" | non-alphabetical characters were used in the traveller's first name |
TRAVELLER_FIRST_NAME_REQUIRED | /booking/book | "First name of traveler 1 is required" | firstname in the booker object was omitted |
TRAVELLER_LAST_NAME_INVALID | /booking/book | "Last name of traveler 1 should contain alphabet only and at least two letters long" | surname in the booker object contained non-alphabetical characters |
TRAVELLER_LAST_NAME_REQUIRED | /booking/book | "Last name of traveler 1 is required" | surname in the booker object was omitted |
TRAVELLER_MISMATCH | the bandId is not available for the selected tour grade |
||
UNKNOWN_ERROR | any | any | the API reports this error when the exception from the underlying system (e.g. booking server) is not recognized |
UNKNOWN_PAYMENT_METHOD | |||
UNSUPPORTED_CARD | cctype is not one of "Visa" , "Mastercard" or "Amex" |
Example product codes were valid at the time of writing. If you find that any of these product codes are invalid or do not include the relevant booking question, please inform us about it via email.
Id | stringQuestionId | title | subtitle | message | example product |
---|---|---|---|---|---|
1 | dateOfBirth_dob |
Date of Birth | (e.g. 20 October 1970) | Enter your date of birth. | 100009P2 |
2 | heights_passengerHeights |
Passenger Heights | (eg. 5'2, 158cm etc) | For safety reasons you must enter the height of all passengers. Please indicate inches or centimetres. | 100009P1 |
3 | passport_expiry |
Passport Expiry Date | (e.g. 15 September 2015. If multiple passengers, separate each entry e.g. 01 July 2012, 31 May 2014) | Enter passport expiry date for all passengers | 100014P10 |
4 | passport_nationality |
Passport Nationality | (e.g. United States of America. If multiple passengers, separate each entry e.g. Australia, China) | Enter country of issue of passport for all passengers | 100014P10 |
5 | passport_passportNo |
Passport Number | (e.g. 0123456789. If multiple passengers, separate each entry e.g. 0123456789, 9876543210) | Enter passport number for all passengers | 100014P10 |
6 | N/A | N/A | N/A | N/A | N/A |
7 | transfer_air_arrival_airline |
Arrival Airline | (e.g. United, British Airways, Qantas, etc) | Enter the name of your airline. | 100006P15 |
8 | transfer_air_arrival_flightNo |
Arrival Flight No | (e.g. UA 864, BA 923, QA 233, etc) | Enter your flight number. | 100006P15 |
9 | transfer_air_departure_airline |
Departure Airline | (e.g. United, British Airways, Qantas, etc) | Enter the name of your airline. | 100006P17 |
10 | transfer_air_departure_flightNo |
Departure Flight No | (e.g. UA 864, BA 923, QA 233, etc) | Enter your flight number. | 100006P17 |
11 | transfer_arrival_dropOff |
Drop Off Location | (e.g. 1234 Cedar Way, Brooklyn, NY 00123) | Enter the address for drop off. | 100006P15 |
12 | transfer_arrival_time |
Arrival Time | (eg. 8pm, 20:30 etc) | Enter your arrival time. Please indicate AM/PM or use the 24-hour clock. | 100006P15 |
13 | transfer_departure_date |
Departure date | (e.g. 15 September 2015) | Enter your departure date. | 100006P15 |
14 | transfer_departure_pickUp |
Pick up Location | (e.g. 1234 Cedar Way, Brooklyn, NY 00123) | Enter the address for pick up. | 100006P17 |
15 | transfer_departure_time |
Departure Time | (eg. 8pm, 20:30 etc) | Enter your departure time. Please indicate AM/PM or use the 24-hour clock. | 100006P17 |
16 | transfer_port_arrival_time |
Disembarkation Time | (eg. 8pm, 20:30 etc) | Enter your disembarkation time. Please indicate AM/PM or use the 24-hour clock. | 100014P14 |
17 | transfer_port_cruiseShip |
Cruise Ship | (e.g. Brilliance of the Seas, etc) | Enter your cruise ship. | 100014P14 |
18 | transfer_port_departure_time |
Boarding Time | (eg. 8pm, 20:30 etc) | Enter your boarding time. Please indicate AM/PM or use the 24-hour clock. | 100014P4 |
19 | transfer_rail_arrival_line |
Arrival Rail Line | (e.g. Amtrak, etc) | Enter the name of the rail provider. | 100006P15 |
20 | transfer_rail_arrival_station |
Arrival Rail Station | (e.g. Central Station, etc) | Enter name of arrival and/or departure station. | 100006P15 |
21 | transfer_rail_departure_line |
Departure Rail Line | (e.g. Amtrak, etc) | Enter the name of the rail provider. | 100014P10 |
22 | transfer_rail_departure_station |
Departure Rail Station | (e.g. Central Station, etc) | Enter name of arrival and/or departure station. | 100014P10 |
23 | weights_passengerWeights |
Passenger Weights | (e.g. 127 pounds, 145 kilos, etc) | For safety reasons you must enter the weight of all passengers. Please indicate pounds or kilos. | 100111P12 |
Field: type |
Field: status |
Meaning |
---|---|---|
"WAITING" |
0 |
This item has not been booked. Part of an unfinished itinerary. |
"CONFIRMED" |
1 |
This item has been successfully booked |
"UNAVAILABLE" |
2 |
This item has been had an availability check, that came back false. |
"PENDING" |
3 |
This item has begun booking, but has paused in a deferred booking engine |
"FAILED" |
4 |
A merchant partner with a freesale-only API-key has attempted to book an on-request product |
"CANCELLED" |
5 |
This item has successfully been cancelled. |
"EXPIRED" |
6 |
This item is now expired. |
"AMENDED" |
7 |
This item has been amended after booking. |
"PENDING_AMEND" |
8 |
This item has a pending amendment which can be cancelled. |
"REJECTED" |
12 |
Viator only |
"ON_HOLD" |
13 |
Viator only |
Get the cheapest tour grade
This service:
retailPrice
represents the 'from' price for this productproductCode | string unique alphanumeric identifier of the product for which you wish to retrieve tour grade availability information |
currencyCode | string (currencyCode) currency code for the currency to use for pricing fields
|
month | string month component (text format) of the start of the date range for which to retrieve tour grade availability information (must be in the future) |
year | string year component (text format) of the start of the date range for which to retrieve tour grade availability information (must be in the future) |
Array of objects array of objects specifying the age bands by which to to filter search results |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
object object detailing available tourgrades for the specified age bands and date range for this product |
{- "productCode": "5010SYDNEY",
- "currencyCode": "USD",
- "month": "12",
- "year": "2020",
- "ageBands": [
- {
- "bandId": 1,
- "count": 1
}
]
}
{- "errorReference": null,
- "data": {
- "productCode": "5010SYDNEY",
- "firstAvailableDate": "2020-06-01",
- "lastAvailableDate": "2021-05-04",
- "availability": [
- {
- "sortOrder": 1,
- "bookingDate": "2020-06-01",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 2,
- "bookingDate": "2020-06-02",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 3,
- "bookingDate": "2020-06-03",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 4,
- "bookingDate": "2020-06-04",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 5,
- "bookingDate": "2020-06-05",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 6,
- "bookingDate": "2020-06-06",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 7,
- "bookingDate": "2020-06-07",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 8,
- "bookingDate": "2020-06-08",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 9,
- "bookingDate": "2020-06-09",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 10,
- "bookingDate": "2020-06-10",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 11,
- "bookingDate": "2020-06-11",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 12,
- "bookingDate": "2020-06-12",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 13,
- "bookingDate": "2020-06-13",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 14,
- "bookingDate": "2020-06-14",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 15,
- "bookingDate": "2020-06-15",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 16,
- "bookingDate": "2020-06-16",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 17,
- "bookingDate": "2020-06-17",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 18,
- "bookingDate": "2020-06-18",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 19,
- "bookingDate": "2020-06-19",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 20,
- "bookingDate": "2020-06-20",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 21,
- "bookingDate": "2020-06-21",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 22,
- "bookingDate": "2020-06-22",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 23,
- "bookingDate": "2020-06-23",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 24,
- "bookingDate": "2020-06-24",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 25,
- "bookingDate": "2020-06-25",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 26,
- "bookingDate": "2020-06-26",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 27,
- "bookingDate": "2020-06-27",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 28,
- "bookingDate": "2020-06-28",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 29,
- "bookingDate": "2020-06-29",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}, - {
- "sortOrder": 30,
- "bookingDate": "2020-06-30",
- "retailPrice": 34.3,
- "gradeCode": "24HOUR",
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "unavailableReason": null,
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD",
- "available": true
}
]
}, - "dateStamp": "2020-04-21T23:22:52+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331002"
}
Get available dates
This service:
productCode | string Example: productCode=2280AAHT unique alphanumeric identifier of the product |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
object dictionary of month identifiers (e.g.,
|
{- "errorReference": null,
- "data": {
- "2020-05": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30",
- "31"
], - "2020-06": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30"
], - "2020-07": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30",
- "31"
], - "2020-08": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30",
- "31"
], - "2020-09": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30"
], - "2020-10": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30",
- "31"
], - "2020-11": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30"
], - "2020-12": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30",
- "31"
], - "2021-01": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30",
- "31"
], - "2021-02": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28"
], - "2021-03": [
- "01",
- "02",
- "03",
- "04",
- "05",
- "06",
- "07",
- 8,
- 9,
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "20",
- "21",
- "22",
- "23",
- "24",
- "25",
- "26",
- "27",
- "28",
- "29",
- "30",
- "31"
]
}, - "dateStamp": "2020-04-22T17:28:30+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331001"
}
Get available tour grades
This service reports:
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
productCode | string |
currencyCode | string (currencyCode) currency code for the currency to use for pricing fields
|
bookingDate | string date to enquire about available tour grades for this product |
Array of objects array of ageBand objects |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects |
{- "productCode": "5010SYDNEY",
- "currencyCode": "USD",
- "bookingDate": "2018-12-12",
- "ageBands": [
- {
- "bandId": 1,
- "count": 1
}
]
}
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "bookingDate": "2020-06-06",
- "ageBands": [
- {
- "bandId": 1,
- "count": 1,
- "bandTotal": 34.3,
- "pricePerTravelerFormatted": "$34.30",
- "pricePerTraveler": 34.3,
- "bandTotalFormatted": "$34.30",
- "currencyCode": "USD"
}
], - "ageBandsRequired": null,
- "langServices": {
- "en/SERVICE_AUDIO": "English - Audio"
}, - "gradeCode": "24HOUR",
- "unavailableReason": null,
- "gradeTitle": "24 Hour Classic Ticket ",
- "gradeDepartureTime": "",
- "gradeDescription": "Unlimited use on Big Bus Sydney & Bondi Hop-on Hop-off Tour for 24 hours from time of first use",
- "defaultLanguageCode": "en",
- "available": true,
- "retailPrice": 34.3,
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$34.30",
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD"
}, - {
- "sortOrder": 2,
- "bookingDate": "2020-06-06",
- "ageBands": [
- {
- "bandId": 1,
- "count": 1,
- "bandTotal": 45.93,
- "pricePerTravelerFormatted": "$45.93",
- "pricePerTraveler": 45.93,
- "bandTotalFormatted": "$45.93",
- "currencyCode": "USD"
}
], - "ageBandsRequired": null,
- "langServices": {
- "en/SERVICE_AUDIO": "English - Audio"
}, - "gradeCode": "48HOUR",
- "unavailableReason": null,
- "gradeTitle": "48 Hour Premium Ticket ",
- "gradeDepartureTime": "",
- "gradeDescription": "Duration: 2 days: FREE BONUS ENTRY to Sydney Tower with every Deluxe ticket end 31st March<br/>48 Hour Premium Ticket: Unlimited use on Big Bus Sydney & Bondi Tour for 48 hours from time of first use PLUS a guided walking tour of The Rocks, Syd",
- "defaultLanguageCode": "en",
- "available": true,
- "retailPrice": 45.93,
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$45.93",
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD"
}, - {
- "sortOrder": 3,
- "bookingDate": "2020-06-06",
- "ageBands": [
- {
- "bandId": 1,
- "count": 1,
- "bandTotal": 63.95,
- "pricePerTravelerFormatted": "$63.95",
- "pricePerTraveler": 63.95,
- "bandTotalFormatted": "$63.95",
- "currencyCode": "USD"
}
], - "ageBandsRequired": null,
- "langServices": {
- "en/SERVICE_AUDIO": "English - Audio"
}, - "gradeCode": "DELUXE",
- "unavailableReason": null,
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "gradeDepartureTime": "",
- "gradeDescription": "Big Bus and Habour Cruise: Combine two great Sydney experiences into one with a hop-on hop off Big Bus Tours and a hop-on hop-off Sydney Harbour cruise <br/>Duration: 2 days: FREE BONUS ENTRY to Sydney Tower with every Deluxe ticket end 31st March<br/>Complimentary Walking Tour: Complimentary English-speaking 90-minute guided walking tour of “The Rocks” historic and harbourside precinct.",
- "defaultLanguageCode": "en",
- "available": true,
- "retailPrice": 63.95,
- "merchantNetPrice": 0,
- "retailPriceFormatted": "$63.95",
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD"
}, - {
- "sortOrder": 4,
- "bookingDate": "2020-06-06",
- "ageBands": null,
- "ageBandsRequired": null,
- "langServices": null,
- "gradeCode": "TG1",
- "unavailableReason": "UNAVAILABLE",
- "gradeTitle": "48Hour Deluxe PLUS Attractions",
- "gradeDepartureTime": "",
- "gradeDescription": "Hop-on Hop-Off and Attractions: 48hr Big Bus Tours, 1-day Hop-On Hop-Off Harbour Cruise, 4 Attractions: Tower Eye, Madame Tussauds, Wildlife Zoo, Aquarium<br/>Duration: 2 days<br/>Complimentary Walking Tours: Complimentary English-speaking guided walking tour of “The Rocks” historic and harbourside precinct.",
- "defaultLanguageCode": "en",
- "available": false,
- "retailPrice": 0,
- "merchantNetPrice": 0,
- "retailPriceFormatted": "",
- "merchantNetPriceFormatted": "",
- "currencyCode": "ERROR"
}
], - "dateStamp": "2020-04-22T17:38:59+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": {
- "CDE_BRAINTREE": {
- "GPAY": "sandbox_9z9rtk3c_9vq4h9ywzmspggxp",
- "APPAY": "sandbox_whhzwy25_njz722qhz85vsr7s",
- "PP": "sandbox_whhzwy25_njz722qhz85vsr7s"
}
}, - "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331002"
}
Get availability, tour grades and pricing matrix
When queried with a given month, this service returns:
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
productCode | string alphanumeric identifier of product about which to retrieve tour grade and pricing information |
currencyCode | string (currencyCode) currency code for the currency to use for pricing fields
|
month | string month of year (as text) by which to filter results (must be in the future) |
year | string year (as text) by which to filter results (must be in the future) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
object |
{- "productCode": "5010SYDNEY",
- "month": "12",
- "year": "2020",
- "currencyCode": "EUR"
}
{- "errorReference": null,
- "data": {
- "bookingMonth": "2020-06",
- "pricingUnit": "per person",
- "dates": [
- {
- "sortOrder": 1,
- "bookingDate": "2020-06-01",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-01",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-01",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-01",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 2,
- "bookingDate": "2020-06-02",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-02",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-02",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-02",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 3,
- "bookingDate": "2020-06-03",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-03",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-03",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-03",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 4,
- "bookingDate": "2020-06-04",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-04",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-04",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-04",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 5,
- "bookingDate": "2020-06-05",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-05",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-05",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-05",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 6,
- "bookingDate": "2020-06-06",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-06",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-06",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-06",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 7,
- "bookingDate": "2020-06-07",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-07",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-07",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-07",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 8,
- "bookingDate": "2020-06-08",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-08",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-08",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-08",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 9,
- "bookingDate": "2020-06-09",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-09",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-09",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-09",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 10,
- "bookingDate": "2020-06-10",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-10",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-10",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-10",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 11,
- "bookingDate": "2020-06-11",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-11",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-11",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-11",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 12,
- "bookingDate": "2020-06-12",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-12",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-12",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-12",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 13,
- "bookingDate": "2020-06-13",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-13",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-13",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-13",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 14,
- "bookingDate": "2020-06-14",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-14",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-14",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-14",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 15,
- "bookingDate": "2020-06-15",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-15",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-15",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-15",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 16,
- "bookingDate": "2020-06-16",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-16",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-16",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-16",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 17,
- "bookingDate": "2020-06-17",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-17",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-17",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-17",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 18,
- "bookingDate": "2020-06-18",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-18",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-18",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-18",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 19,
- "bookingDate": "2020-06-19",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-19",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-19",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-19",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 20,
- "bookingDate": "2020-06-20",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-20",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-20",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-20",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 21,
- "bookingDate": "2020-06-21",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-21",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-21",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-21",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 22,
- "bookingDate": "2020-06-22",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-22",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-22",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-22",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 23,
- "bookingDate": "2020-06-23",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-23",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-23",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-23",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 24,
- "bookingDate": "2020-06-24",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-24",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-24",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-24",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 25,
- "bookingDate": "2020-06-25",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-25",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-25",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-25",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 26,
- "bookingDate": "2020-06-26",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-26",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-26",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-26",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 27,
- "bookingDate": "2020-06-27",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-27",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-27",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-27",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 28,
- "bookingDate": "2020-06-28",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-28",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-28",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-28",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 29,
- "bookingDate": "2020-06-29",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-29",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-29",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-29",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}, - {
- "sortOrder": 30,
- "bookingDate": "2020-06-30",
- "tourGrades": [
- {
- "sortOrder": 1,
- "gradeCode": "24HOUR",
- "gradeTitle": "24 Hour Classic Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-30",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 31.38,
- "merchantNetPrice": 0,
- "priceFormatted": "€31,38",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 21.27,
- "merchantNetPrice": 0,
- "priceFormatted": "€21,27",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 2,
- "gradeCode": "48HOUR",
- "gradeTitle": "48 Hour Premium Ticket ",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-30",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 42.01,
- "merchantNetPrice": 0,
- "priceFormatted": "€42,01",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 26.59,
- "merchantNetPrice": 0,
- "priceFormatted": "€26,59",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 3,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 0,
- "merchantNetPrice": 0,
- "priceFormatted": "€0,00",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 3,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}, - {
- "sortOrder": 3,
- "gradeCode": "DELUXE",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "pricingMatrix": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-30",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 58.5,
- "merchantNetPrice": 0,
- "priceFormatted": "€58,50",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "EUR",
- "price": 38.41,
- "merchantNetPrice": 0,
- "priceFormatted": "€38,41",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
]
}
], - "callForLastMinAvailability": false
}
]
}, - "dateStamp": "2020-04-22T23:17:31+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331002"
}
Calculate price
This service:
Importantly:
itineraryNewPrice
and itineraryNewPriceFormatted
fields.hoursConfirmed
(integer) field for presentation to the customer. An hoursConfirmed
of 0
means that the booking is 'freesale'. An hoursConfirmed
greater than 0
indicates that it is 'on request'.partnerDetail
object can also be added to the request object (see /booking/book for more details on the partnerDetails
object)Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
currencyCode | string (currencyCode) currency code for the currency to use for pricing fields
|
Array of objects array of travel detail objects |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
object |
{- "currencyCode": "USD",
- "items": [
- {
- "travelDate": "2020-12-12",
- "productCode": "5010SYDNEY",
- "tourGradeCode": "24HOUR",
- "travellers": [
- {
- "bandId": 1
}
]
}
]
}
{- "errorReference": null,
- "data": {
- "rulesApplied": [ ],
- "promoCode": null,
- "itinerary": {
- "sortOrder": 0,
- "rulesApplied": [ ],
- "omniPreRuleList": null,
- "bookingStatus": {
- "status": 0,
- "text": "Waiting to be Booked",
- "type": "WAITING",
- "level": "ITINERARY",
- "confirmed": false,
- "pending": false,
- "amended": false,
- "cancelled": false,
- "failed": false
}, - "itemSummaries": [
- {
- "sortOrder": 0,
- "rulesApplied": [ ],
- "bookingStatus": {
- "status": 0,
- "text": "Waiting to be Booked",
- "type": "WAITING",
- "level": "ITEM",
- "failed": false,
- "confirmed": false,
- "amended": false,
- "pending": false,
- "cancelled": false
}, - "travellerAgeBands": [
- {
- "sortOrder": 0,
- "count": 1,
- "pluralDescription": "Adults",
- "description": "Adult",
- "ageBandId": 1
}
], - "voucherKey": "",
- "voucherURL": null,
- "voucherRequirements": "You can present either a paper or an electronic voucher for this activity.",
- "appleWalletURL": null,
- "productPulledDown": false,
- "merchantCancellable": false,
- "productWidgetList": null,
- "savingAmount": 0,
- "applePassSupported": false,
- "supplierName": null,
- "supplierPhoneNumber": null,
- "vouchers": null,
- "passbooks": null,
- "termsAndConditions": null,
- "tourGradeCode": "24HOUR",
- "productCode": "5010SYDNEY",
- "travelDate": "2020-06-12",
- "distributorItemRef": null,
- "startingTime": null,
- "languageServicesLanguageCode": null,
- "price": 34.3,
- "leadTravellerSurname": null,
- "itineraryId": 1006235784,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "merchantNetPrice": 0,
- "priceFormatted": "$34.30",
- "itemId": 581108570,
- "destId": 357,
- "voucherOption": "VOUCHER_E",
- "barcodeOption": "perperson",
- "barcodeType": "qrcode",
- "departurePoint": "You may start this tour at any of the stops listed.",
- "departurePointAddress": null,
- "departurePointDirections": null,
- "leadTravellerFirstname": "",
- "rnplInfo": null,
- "obfsId": 69454,
- "pickupHotelName": null,
- "leadTravellerTitle": null,
- "lastRetailPrice": 34.3,
- "hoursConfirmed": 0,
- "lastRetailPriceFormatted": "$34.30",
- "savingAmountFormated": "$0.00",
- "tourGradeDescription": "24 Hour Classic Ticket (24HOUR)",
- "bookingEngineId": "UF",
- "merchantNetPriceFormatted": "",
- "departsFrom": "The Rocks, Australia",
- "pickupHotelId": null,
- "priceUSD": 34.3,
- "currencyCode": "USD"
}
], - "voucherURL": null,
- "securityToken": "bdc3137685b436fcadf7eeb33698a8b8a7fb432be58a061d48ff31b1568e16f6",
- "paypalRedirectURL": null,
- "exchangeRate": 1,
- "itineraryId": 1006235784,
- "bookingDate": "2020-04-22",
- "voucherKey": "",
- "bookerEmail": null,
- "distributorRef": null,
- "totalPrice": 34.3,
- "totalPriceFormatted": "$34.30",
- "totalPriceUSD": 34.3,
- "hasVoucher": false,
- "userId": null,
- "currencyCode": "USD"
}, - "paymentGatewayInfo": null,
- "promoCodeValid": false,
- "promoCodeExpired": false,
- "itineraryFromPrice": 34.3,
- "itineraryFromPriceFormatted": "$34.30",
- "itineraryNewPrice": 34.3,
- "itineraryNewPriceFormatted": "$34.30",
- "itinerarySaving": 0,
- "itinerarySavingFormatted": "$0.00",
- "hasPromoCode": false,
- "currencyCode": "USD"
}, - "dateStamp": "2020-04-22T17:56:17+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331001"
}
Get hotel pick-ups
This service:
productCode | string Example: productCode=2280AAHT unique alphanumeric identifier of the product |
destId | integer Example: destId=684 unique numeric identifier of the destination |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects array of hotel pick-up objects |
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "destinationId": 0,
- "productCodes": null,
- "brand": null,
- "hotelString": "I live locally / I'm staying with friends, relatives",
- "city": null,
- "postcode": null,
- "latitude": null,
- "phone": null,
- "longitude": null,
- "notes": null,
- "address": null,
- "name": "I live locally / I'm staying with friends, relatives",
- "id": "local"
}, - {
- "sortOrder": 2,
- "destinationId": 0,
- "productCodes": null,
- "brand": null,
- "hotelString": "My hotel is not yet booked",
- "city": null,
- "postcode": null,
- "latitude": null,
- "phone": null,
- "longitude": null,
- "notes": null,
- "address": null,
- "name": "My hotel is not yet booked",
- "id": "notBooked"
}, - {
- "sortOrder": 3,
- "destinationId": 0,
- "productCodes": null,
- "brand": null,
- "hotelString": "My hotel is not listed",
- "city": null,
- "postcode": null,
- "latitude": null,
- "phone": null,
- "longitude": null,
- "notes": null,
- "address": null,
- "name": "My hotel is not listed",
- "id": "notListed"
}, - {
- "sortOrder": 4,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89158-4300",
- "latitude": 36.107323,
- "phone": "+1 123 456 7890",
- "longitude": -115.17628,
- "notes": null,
- "address": "3730 Las Vegas Boulevard South, ",
- "name": "ARIA Resort & Casino",
- "id": "1091925"
}, - {
- "sortOrder": 5,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4321",
- "latitude": 36.113705,
- "phone": "+1 123 456 7890",
- "longitude": -115.16985,
- "notes": null,
- "address": "3645 Las Vegas Blvd S, ",
- "name": "Bally's Las Vegas Hotel & Casino",
- "id": "1121312"
}, - {
- "sortOrder": 6,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4303",
- "latitude": 36.112026,
- "phone": "+1 123 456 7890",
- "longitude": -115.175285,
- "notes": null,
- "address": "3600 Las Vegas Blvd S",
- "name": "Bellagio Las Vegas",
- "id": "1091703"
}, - {
- "sortOrder": 7,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-8933",
- "latitude": 36.115753,
- "phone": "+1 123 456 7890",
- "longitude": -115.174446,
- "notes": null,
- "address": "3570 Las Vegas Blvd South, ",
- "name": "Caesars Palace",
- "id": "1091762"
}, - {
- "sortOrder": 8,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-1138",
- "latitude": 36.13704,
- "phone": "+1 123 456 7890",
- "longitude": -115.16351,
- "notes": null,
- "address": "2880 Las Vegas Blvd S, ",
- "name": "Circus Circus Hotel & Casino Las Vegas",
- "id": "1091770"
}, - {
- "sortOrder": 9,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89119-1002",
- "latitude": 36.093147,
- "phone": "+1 123 456 7890",
- "longitude": -115.17744,
- "notes": null,
- "address": "3940 S Las Vegas Blvd",
- "name": "Delano Las Vegas",
- "id": "1496876"
}, - {
- "sortOrder": 10,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89101-2931",
- "latitude": 36.17198,
- "phone": "+1 123 456 7890",
- "longitude": -115.14171,
- "notes": null,
- "address": "206 N. 3rd Street",
- "name": "Downtown Grand",
- "id": "5790631"
}, - {
- "sortOrder": 11,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89101-5614",
- "latitude": 36.169106,
- "phone": "+1 123 456 7890",
- "longitude": -115.139015,
- "notes": null,
- "address": "600 East Fremont Street, ",
- "name": "El Cortez Hotel & Casino",
- "id": "1111692"
}, - {
- "sortOrder": 12,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4539",
- "latitude": 36.108875,
- "phone": "+1 123 456 7890",
- "longitude": -115.16867,
- "notes": null,
- "address": "80 East Harmon Avenue, ",
- "name": "Elara By Hilton Grand Vacations - Center Strip",
- "id": "2639337"
}, - {
- "sortOrder": 13,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-1967",
- "latitude": 36.128822,
- "phone": "+1 123 456 7890",
- "longitude": -115.1649,
- "notes": null,
- "address": "3131 Las Vegas Boulevard S, ",
- "name": "Encore At Wynn Las Vegas",
- "id": "2123368"
}, - {
- "sortOrder": 14,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4300",
- "latitude": 36.098976,
- "phone": "+1 123 456 7890",
- "longitude": -115.17598,
- "notes": null,
- "address": "3850 S Las Vegas Blvd, ",
- "name": "Excalibur Hotel & Casino",
- "id": "1097786"
}, - {
- "sortOrder": 15,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-8901",
- "latitude": 36.116383,
- "phone": "+1 123 456 7890",
- "longitude": -115.172195,
- "notes": null,
- "address": "3555 Las Vegas Blvd S, ",
- "name": "Flamingo Las Vegas Hotel & Casino",
- "id": "1091844"
}, - {
- "sortOrder": 16,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89101-5622",
- "latitude": 36.17074,
- "phone": "+1 123 456 7890",
- "longitude": -115.14361,
- "notes": null,
- "address": "200 Fremont St",
- "name": "Fremont Hotel & Casino",
- "id": "1111699"
}, - {
- "sortOrder": 17,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89103-4088",
- "latitude": 36.11706,
- "phone": "+1 123 456 7890",
- "longitude": -115.19205,
- "notes": null,
- "address": "4000 W Flamingo Rd, ",
- "name": "Gold Coast Hotel & Casino",
- "id": "1091823"
}, - {
- "sortOrder": 18,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89101-5603",
- "latitude": 36.17005,
- "phone": "+1 123 456 7890",
- "longitude": -115.145645,
- "notes": null,
- "address": "129 Fremont St, ",
- "name": "Golden Nugget Hotel & Casino",
- "id": "1091828"
}, - {
- "sortOrder": 19,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-8922",
- "latitude": 36.119415,
- "phone": "+1 123 456 7890",
- "longitude": -115.17206,
- "notes": null,
- "address": "3475 Las Vegas Boulevard South, ",
- "name": "Harrah's Las Vegas Hotel & Casino",
- "id": "1114889"
}, - {
- "sortOrder": 20,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-8919",
- "latitude": 36.116592,
- "phone": "+1 123 456 7890",
- "longitude": -115.1696,
- "notes": null,
- "address": "3575 Las Vegas Blvd S, ",
- "name": "Hilton Grand Vacations at the Flamingo",
- "id": "1217597"
}, - {
- "sortOrder": 21,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4702",
- "latitude": 36.11815,
- "phone": "+1 123 456 7890",
- "longitude": -115.16341,
- "notes": null,
- "address": "3950 Koval Ln, ",
- "name": "Holiday Inn Club Vacations at Desert Club Resort",
- "id": "2164660"
}, - {
- "sortOrder": 22,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89119-1004",
- "latitude": 36.09734,
- "phone": "+1 123 456 7890",
- "longitude": -115.17634,
- "notes": null,
- "address": "3900 S Las Vegas Blvd, ",
- "name": "Luxor Hotel & Casino",
- "id": "1111709"
}, - {
- "sortOrder": 23,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89119-1006",
- "latitude": 36.0959,
- "phone": "+1 123 456 7890",
- "longitude": -115.174095,
- "notes": null,
- "address": "3950 Las Vegas Boulevard South, ",
- "name": "Mandalay Bay Resort & Casino",
- "id": "1091886"
}, - {
- "sortOrder": 24,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109",
- "latitude": 36.10761,
- "phone": "+1 123 456 7890",
- "longitude": -115.16966,
- "notes": null,
- "address": "75 East Harmon Avenue, ",
- "name": "Marriott's Grand Chateau",
- "id": "1567617"
}, - {
- "sortOrder": 25,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4319",
- "latitude": 36.102436,
- "phone": "+1 123 456 7890",
- "longitude": -115.16935,
- "notes": null,
- "address": "3799 S Las Vegas Blvd",
- "name": "MGM Grand Las Vegas",
- "id": "1091891"
}, - {
- "sortOrder": 26,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4338",
- "latitude": 36.102093,
- "phone": "+1 123 456 7890",
- "longitude": -115.17433,
- "notes": null,
- "address": "3790 Las Vegas Boulevard South, ",
- "name": "New York - New York Hotel and Casino",
- "id": "1091904"
}, - {
- "sortOrder": 27,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-7304",
- "latitude": 36.10006,
- "phone": "+1 123 456 7890",
- "longitude": -115.167595,
- "notes": null,
- "address": "115 E Tropicana Avenue, ",
- "name": "OYO Las Vegas Hotel and Casino",
- "id": "1600446"
}, - {
- "sortOrder": 28,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89103-3903",
- "latitude": 36.114502,
- "phone": "+1 123 456 7890",
- "longitude": -115.19429,
- "notes": null,
- "address": "4321 West Flamingo Road, ",
- "name": "Palms Casino Resort",
- "id": "1208820"
}, - {
- "sortOrder": 29,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4345",
- "latitude": 36.11242,
- "phone": "+1 123 456 7890",
- "longitude": -115.17175,
- "notes": null,
- "address": "3655 Las Vegas Boulevard South, ",
- "name": "Paris Las Vegas",
- "id": "1143336"
}, - {
- "sortOrder": 30,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4337",
- "latitude": 36.132004,
- "phone": "+1 123 456 7890",
- "longitude": -115.16145,
- "notes": null,
- "address": "3770 S Las Vegas Blvd, South Part of the Strip, Next to NY Hotel",
- "name": "Park MGM Las Vegas",
- "id": "1097712"
}, - {
- "sortOrder": 31,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4331",
- "latitude": 36.110043,
- "phone": "+1 123 456 7890",
- "longitude": -115.17096,
- "notes": null,
- "address": "3667 Las Vegas Boulevard South, ",
- "name": "Planet Hollywood Resort & Casino",
- "id": "1091687"
}, - {
- "sortOrder": 32,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4308",
- "latitude": 36.106483,
- "phone": "+1 123 456 7890",
- "longitude": -115.17092,
- "notes": null,
- "address": "3745 Las Vegas Boulevard South, ",
- "name": "Polo Towers Suites",
- "id": "1091916"
}, - {
- "sortOrder": 33,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89103-4043",
- "latitude": 36.1161,
- "phone": "+1 123 456 7890",
- "longitude": -115.18675,
- "notes": null,
- "address": "3700 W Flamingo, ",
- "name": "Rio All-Suite Hotel & Casino",
- "id": "1091673"
}, - {
- "sortOrder": 34,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4504",
- "latitude": 36.106987,
- "phone": "+1 123 456 7890",
- "longitude": -115.166756,
- "notes": null,
- "address": "145 East Harmon Avenue",
- "name": "Signature at MGM Grand",
- "id": "1601419"
}, - {
- "sortOrder": 35,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4309",
- "latitude": 36.109745,
- "phone": "+1 123 456 7890",
- "longitude": -115.17384,
- "notes": null,
- "address": "3708 Las Vegas Boulevard South, ",
- "name": "The Cosmopolitan of Las Vegas, Autograph Collection",
- "id": "2829539"
}, - {
- "sortOrder": 36,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-8918",
- "latitude": 36.114937,
- "phone": "+1 123 456 7890",
- "longitude": -115.172455,
- "notes": null,
- "address": "3595 Las Vegas Boulevard South",
- "name": "The Cromwell Hotel Las Vegas",
- "id": "7537691"
}, - {
- "sortOrder": 37,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89101-5600",
- "latitude": 36.169464,
- "phone": "+1 123 456 7890",
- "longitude": -115.142784,
- "notes": null,
- "address": "301 Fremont Street, ",
- "name": "The D Casino Hotel Las Vegas",
- "id": "1091679"
}, - {
- "sortOrder": 38,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-8921",
- "latitude": 36.118,
- "phone": "+1 123 456 7890",
- "longitude": -115.17194,
- "notes": null,
- "address": "3535 Las Vegas Blvd S, ",
- "name": "The LINQ Hotel & Casino",
- "id": "1186114"
}, - {
- "sortOrder": 39,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-8923",
- "latitude": 36.121216,
- "phone": "+1 123 456 7890",
- "longitude": -115.17343,
- "notes": null,
- "address": "3400 Las Vegas Blvd. S., ",
- "name": "The Mirage Hotel & Casino",
- "id": "1097737"
}, - {
- "sortOrder": 40,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-1414",
- "latitude": 36.12396,
- "phone": "+1 123 456 7890",
- "longitude": -115.16791,
- "notes": null,
- "address": "3325 Las Vegas Blvd South, ",
- "name": "The Palazzo at The Venetian",
- "id": "1675000"
}, - {
- "sortOrder": 41,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89104-2507",
- "latitude": 36.147305,
- "phone": "+1 123 456 7890",
- "longitude": -115.155594,
- "notes": null,
- "address": "2000 South Las Vegas Boulevard, ",
- "name": "The STRAT Hotel, Casino & SkyPod",
- "id": "1114898"
}, - {
- "sortOrder": 42,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-8941",
- "latitude": 36.121475,
- "phone": "+1 123 456 7890",
- "longitude": -115.16994,
- "notes": null,
- "address": "3355 Las Vegas Blvd S, ",
- "name": "The Venetian Resort",
- "id": "1097704"
}, - {
- "sortOrder": 43,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-8916",
- "latitude": 36.123917,
- "phone": "+1 123 456 7890",
- "longitude": -115.17123,
- "notes": null,
- "address": "3300 Las Vegas Blvd S, ",
- "name": "Treasure Island - TI Hotel & Casino, a Radisson Hotel",
- "id": "1091967"
}, - {
- "sortOrder": 44,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-4325",
- "latitude": 36.09878,
- "phone": "+1 123 456 7890",
- "longitude": -115.17033,
- "notes": null,
- "address": "3801 Las Vegas Blvd South, ",
- "name": "Tropicana Las Vegas - A DoubleTree by Hilton Hotel",
- "id": "1097730"
}, - {
- "sortOrder": 45,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-1936",
- "latitude": 36.12944,
- "phone": "+1 123 456 7890",
- "longitude": -115.17272,
- "notes": null,
- "address": "2000 Fashion Show Drive, ",
- "name": "Trump International Hotel Las Vegas",
- "id": "2022061"
}, - {
- "sortOrder": 46,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89169-4708",
- "latitude": 36.113308,
- "phone": "+1 123 456 7890",
- "longitude": -115.160835,
- "notes": null,
- "address": "255 East Flamingo Road, ",
- "name": "Tuscany Suites & Casino",
- "id": "1224853"
}, - {
- "sortOrder": 47,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89158-4538",
- "latitude": 36.109516,
- "phone": "+1 123 456 7890",
- "longitude": -115.17793,
- "notes": null,
- "address": "2600 W. Harmon Avenue, ",
- "name": "Vdara Hotel & Spa at ARIA Las Vegas",
- "id": "2474086"
}, - {
- "sortOrder": 48,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89158-4382",
- "latitude": 36.106415,
- "phone": "+1 123 456 7890",
- "longitude": -115.17404,
- "notes": null,
- "address": "3752 S Las Vegas Blvd S\n\n, ",
- "name": "Waldorf Astoria Las Vegas",
- "id": "2456410"
}, - {
- "sortOrder": 49,
- "destinationId": 684,
- "productCodes": null,
- "brand": null,
- "hotelString": null,
- "city": "Las Vegas",
- "postcode": "89109-1967",
- "latitude": 36.126553,
- "phone": "+1 123 456 7890",
- "longitude": -115.16552,
- "notes": null,
- "address": "3131 Las Vegas Boulevard South, ",
- "name": "Wynn Las Vegas",
- "id": "1503598"
}
], - "dateStamp": "2020-04-22T18:09:15+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331001"
}
Book a product
This service allows you to:
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
demo | boolean specifier: |
currencyCode | string (currencyCode) currency code for the currency to use for pricing fields
|
object object containing details about the primary contact (note: this contact needn't be a traveller) | |
object API partners must pass this object. The billing details of the booking. | |
object Optional object for capturing additional contact details of the primary contact whilst travelling. If you specify a | |
Array of objects array of items in itinerary to be booked |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
object |
{- "partnerDetail": {
- "distributorRef": "distroRef111000"
}, - "demo": true,
- "currencyCode": "USD",
- "altContactDetails": {
- "contactType": "EMAIL",
- "email": "apitest@viator.com"
}, - "booker": {
- "email": "apitest@viator.com",
- "homePhone": 432886888,
- "firstname": "Homer test",
- "surname": "Simpson test",
- "title": "Mr",
- "cellPhoneCountryCode": "61",
- "cellPhone": 432886888
}, - "ccPayDetail": {
- "ccaddress1": "742 Evergreen Terrace",
- "ccaddress2": "",
- "ccaddressCity": "Springfield",
- "ccaddressState": "WI",
- "ccaddressZip": "12345",
- "ccphone": "",
- "cctype": "Visa",
- "ccname": "Homer Simpson Test",
- "ccnumber": "4242424242424242",
- "ccaddressCountryId": "US",
- "ccexpire": "12/2020",
- "ccadditionalDigits": "747",
- "fiscalNumber": null
}, - "items": [
- {
- "partnerItemDetail": {
- "distributorItemRef": "distroItemRef111000-1"
}, - "hotelId": "hotelId21",
- "pickupPoint": "pickupPoint21",
- "travelDate": "2020-12-31",
- "productCode": "2280AAHT",
- "tourGradeCode": "EB_ASTAR_SP~06:45",
- "languageOptionCode": "en/SERVICE_GUIDE",
- "bookingQuestionAnswers": [
- {
- "questionId": 23,
- "answer": "120 kgs"
}
], - "specialRequirements": "specialRequirements21",
- "travellers": [
- {
- "bandId": 1,
- "firstname": "Homer",
- "surname": "Simpson test",
- "title": "Mr",
- "leadTraveller": true
}
]
}
]
}
{- "errorReference": null,
- "data": {
- "sortOrder": 0,
- "rulesApplied": [ ],
- "omniPreRuleList": null,
- "bookingStatus": {
- "status": 3,
- "text": "Confirmed",
- "type": "CONFIRMED",
- "level": "ITINERARY",
- "confirmed": true,
- "pending": false,
- "amended": false,
- "cancelled": false,
- "failed": false
}, - "itemSummaries": [
- {
- "sortOrder": 0,
- "rulesApplied": [ ],
- "bookingStatus": {
- "status": 1,
- "text": "Paid & Confirmed",
- "type": "CONFIRMED",
- "level": "ITEM",
- "failed": false,
- "confirmed": true,
- "amended": false,
- "pending": false,
- "cancelled": false
}, - "travellerAgeBands": [
- {
- "sortOrder": 0,
- "count": 1,
- "pluralDescription": "Adults",
- "description": "Adult",
- "ageBandId": 1
}
], - "voucherKey": "1006235932:371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618:581108716",
- "voucherRequirements": "You can present either a paper or an electronic voucher for this activity.",
- "appleWalletURL": null,
- "productPulledDown": false,
- "merchantCancellable": false,
- "productWidgetList": null,
- "savingAmount": 0,
- "applePassSupported": false,
- "supplierName": null,
- "supplierPhoneNumber": null,
- "vouchers": null,
- "passbooks": null,
- "termsAndConditions": "{\"NumberRange: 2 - null\":0,\"NumberRange: 0 - 1\":100}",
- "pickupHotelId": null,
- "tourGradeCode": "EB_ASTAR_SP~06:45",
- "productCode": "2280AAHT",
- "travelDate": "2020-08-06",
- "distributorItemRef": null,
- "startingTime": "6:45 AM",
- "languageServicesLanguageCode": "en",
- "price": 409.99,
- "leadTravellerSurname": "Simpson test",
- "itineraryId": 1006235932,
- "productTitle": "Grand Canyon All-American Helicopter Tour",
- "merchantNetPrice": 0,
- "voucherOption": "VOUCHER_E",
- "destId": 684,
- "itemId": 581108716,
- "priceFormatted": "$409.99",
- "barcodeOption": "tour",
- "barcodeType": "code128",
- "departurePoint": "Traveler pickup is offered<br><br>",
- "departurePointAddress": null,
- "departurePointDirections": null,
- "leadTravellerFirstname": "Homer",
- "rnplInfo": null,
- "obfsId": 384923,
- "leadTravellerTitle": "Mr",
- "lastRetailPrice": 409.99,
- "tourGradeDescription": "Special: Earlybird A-Star 06:45 (EB_ASTAR_SP~06:45)",
- "lastRetailPriceFormatted": "$409.99",
- "bookingEngineId": "FO",
- "savingAmountFormated": "$0.00",
- "departsFrom": "Las Vegas, United States",
- "pickupHotelName": "pickupPoint21",
- "merchantNetPriceFormatted": "",
- "hoursConfirmed": 0,
- "priceUSD": 409.99,
- "currencyCode": "USD"
}
], - "securityToken": "371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618",
- "paypalRedirectURL": null,
- "exchangeRate": 1,
- "itineraryId": 1006235932,
- "bookingDate": "2020-04-22",
- "voucherKey": "1006235932:371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618",
- "bookerEmail": "apitest@viator.com",
- "distributorRef": "distroRef111000",
- "totalPrice": 409.99,
- "totalPriceFormatted": "$409.99",
- "totalPriceUSD": 409.99,
- "hasVoucher": true,
- "userId": null,
- "currencyCode": "USD"
}, - "dateStamp": "2020-04-22T19:12:27+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331002"
}
Get booking status
This service:
Exceeding the poll limit
{
"data": null
"vmid": 221002
"errorMessage": ["Access allowed every 30 minutes"]
"errorType": "EXCEPTION"
"dateStamp": "2013-03-26T10:28:51+0000"
"errorReference": 55315512721712161381352771
"errorMessageText": ["Access allowed every 30 minutes"]
"success": false
"totalCount": 1
"errorName": "PollingDeniedException"
}
bookingDateFrom | string earliest date for this booking |
bookingDateTo | string latest date for this booking |
itineraryIds | Array of integers array of itinerary identifiers to check |
itemIds | Array of integers array of item identifiers to check |
distributorRefs | Array of strings array of partner-defined distributor reference identifiers |
distributorItemRefs | Array of strings array of partner-defined distributor item reference identifiers e.g. |
leadFirstName | string first name of the lead traveler |
leadSurname | string surname of the lead traveler |
test | boolean ignore (Viator only) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
object object containing booking status, date and itinerary details |
{- "bookingDateFrom": "2020-12-01",
- "bookingDateTo": "2020-12-31",
- "itineraryIds": [
- 1006235932
], - "itemIds": [
- 581108716
], - "distributorRefs": [
- "distroRef111000"
], - "distributorItemRefs": [
- "distroItemRef111000-1"
], - "leadFirstName": "Homer test",
- "leadSurname": "Simpson test",
- "test": false
}
{- "errorReference": null,
- "dateStamp": "2020-04-22T19:12:27+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "321050",
- "data": {
- "itineraryId": 1006235932,
- "bookingStatus": {
- "status": 0,
- "text": "Waiting to be booked",
- "type": "WAITING",
- "level": "ITINERARY",
- "confirmed": false,
- "pending": false,
- "amended": false,
- "cancelled": false,
- "failed": false
}, - "bookingDate": "2020-04-22",
- "distributorRef": "Ref20132603_1",
- "itemSummaries": [
- {
- "itineraryId": 1006235932,
- "itemId": 581108716,
- "bookingStatus": {
- "status": 0,
- "text": "Waiting to be booked",
- "type": "WAITING",
- "level": "ITEM",
- "confirmed": false,
- "pending": false,
- "amended": false,
- "cancelled": false,
- "failed": false
}, - "travelDate": "2020-08-06",
- "distributorItemRef": "ItemRefA",
- "sortOrder": 0
}
], - "sortOrder": null
}
}
Get brief booking statuses
This service is similar to /booking/status in that it:
However, it differs in that it returns a multi-item array of booking items with less detail than what would be received from /booking/status.
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
bookingDateFrom | string earliest date for this booking |
bookingDateTo | string latest date for this booking |
itineraryIds | Array of integers array of itinerary identifiers to check |
itemIds | Array of integers array of item identifiers to check |
distributorRefs | Array of strings array of partner-defined distributor reference identifiers |
distributorItemRefs | Array of strings array of partner-defined distributor item reference identifiers e.g. |
leadFirstName | string first name of the lead traveler |
leadSurname | string surname of the lead traveler |
test | boolean ignore (Viator only) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects array containing item ids and their associated booking status object |
{- "bookingDateFrom": "2013-12-22",
- "bookingDateTo": "2013-12-25",
- "itineraryIds": [
- 1234567
], - "itemIds": [
- 1234567
], - "distributorRefs": [
- "Ref20132603_1"
], - "distributorItemRefs": [
- "refItem1"
], - "leadFirstName": null,
- "leadSurname": null,
- "test": false
}
{- "errorReference": null,
- "dateStamp": "2017-11-24T21:30:47+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "321050",
- "data": [
- {
- "itemId": 600088886,
- "bookingStatus": {
- "status": 0,
- "text": "Waiting to be booked",
- "type": "WAITING",
- "level": "ITEM",
- "confirmed": false,
- "pending": false,
- "amended": false,
- "cancelled": false,
- "failed": false
}, - "distributorItemRef": null
}
]
}
Get pricing matrix
This service:
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
productCode | string unique alphanumeric identifier of the product for which to retrieve the pricing matrix |
tourGradeCode | string alphanumeric identifier of the product tour grade for which to retrieve the pricing matrix |
bookingDate | string date for which to retrieve pricing data (note: this is an optional parameter for normal products; if the date is not provided then the nearest available date is determined) |
currencyCode | string (currencyCode) currency code for the currency to use for pricing fields
|
specialReservation | boolean ignore (Viator only) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects |
{- "productCode": "5010SYDNEY",
- "tourGradeCode": "24HOUR",
- "bookingDate": "2020-12-21",
- "currencyCode": "USD",
- "specialReservation": false
}
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "pricingUnit": "per person",
- "bookingDate": "2020-06-01",
- "ageBandPrices": [
- {
- "bandId": 1,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "USD",
- "price": 34.3,
- "merchantNetPrice": 0,
- "priceFormatted": "$34.30",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 1,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}, - {
- "bandId": 2,
- "prices": [
- {
- "sortOrder": 1,
- "currencyCode": "USD",
- "price": 23.25,
- "merchantNetPrice": 0,
- "priceFormatted": "$23.25",
- "merchantNetPriceFormatted": "",
- "minNoOfTravellersRequiredForPrice": 1
}
], - "sortOrder": 2,
- "minimumCountRequired": 0,
- "maximumCountRequired": 9
}
]
}
], - "dateStamp": "2020-04-22T18:28:01+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331004"
}
Get voucher details
This service:
Sample query parameters
itineraryId=3299307&leadLastName=DP&itemId=600033670
or
voucherKey=3299307:93c7f36a56b18ba1068787ba7fb7988da5c8ad08db77604110141ff21498603e:600033670
itineraryId | string Example: itineraryId=3299307 identifier of this itinerary |
leadLastName | string Example: leadLastName=Simpson surname of this lead traveler |
itemId | integer Example: itemId=600033670 numeric identifier of this item |
embeddedResources | boolean Example: embeddedResources=false ignore (Viator only) |
voucherKey | string Example: voucherKey=3299307:93c7f36a56b18ba1068787ba7fb7988da5c8ad08db77604110141ff21498603e:600033670 identifier for the voucher
|
fullHTML | boolean Example: fullHTML=true specifier:
|
mobileVoucher | boolean Example: mobileVoucher=true specifier:
|
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
data | string HTML-formatted voucher content |
{- "errorReference": null,
- "data": "\n <div id=\"content\" class=\"voucher_box\">\n <div id=\"voucher_1\">\n\n <div class=\"section\">\n <div class=\"voucher_title\">\n Voucher 1\n of 1: Homer Simpson test\n </div>\n </div>\n\n <div class=\"section bline\">\n <div class=\"btn_box\">\n </div>\n </div>\n\n <div style=\"line-height: 1.5;font-family:'Arial','Helvetica','Verdana',sans-serif; font-size: 12px; padding: 0 10px; border-bottom: 1px solid #CAE2EA;\">\n\n <h2 style=\"font-size:16px;font-weight:bold;margin:0.5em 0;padding:0;\">\n Grand Canyon All-American Helicopter Tour\n <span style=\"display: block;font-size:12px;\">\n Special: Earlybird A-Star 06:45\n </span>\n </h2>\n\n <div class=\"barcode\">\n <img src=\"/voucher/resource?type=barcode&itineraryItemId=581108716&voucherToken=371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618\" alt=\"\"/>\n </div>\n\n <h2 style=\"font-size:16px;font-weight:bold;margin:0.5em 0;padding:0;\">SAMPLE ONLY</h2>\n\n <ul style=\"margin:0 0 1em 1em; padding:0;\">\n <li>\n <strong>Date:</strong>\n Thursday August 06, 2020\n </li>\n </ul>\n\n <ul style=\"margin:0 0 1em 1em; padding:0;\">\n <li>\n <strong>Lead traveler\n :\n </strong>Homer Simpson test\n </li>\n <li>\n <strong>Number of Travelers\n :\n </strong>1 Adult</li>\n\n <li>\n <strong>Booking Reference:\n </strong>BR-581108716</li>\n\n <li>\n <strong>Product Code:\n </strong>2280AAHT</li>\n\n <li>\n <strong>Option Code:\n </strong>EB_ASTAR_SP~06:45</li>\n\n <li>\n <strong>Supplier\n : </strong>Sundance Helicopters</li>\n\n\n\n\n\n <li>\n <strong>Location\n :</strong>\n <p>Traveler pickup is offered<br><br></p>\n </li>\n\n <li>\n <strong>Tour Option Description\n :</strong>\n Special Offer: Receive a discounted seat for the Grand Canyon All American Helicopter Tour departing between 6:45am and 7am on an A-Star helicopter<br/>Pickup included\n \n </li>\n </ul>\n\n <h3 style=\"font-size:14px;font-weight:bold;margin:0.5em 0;padding:0;\">\n Voucher Information\n </h3>\n\n <ul style=\"margin:0 0 1em 1em; padding:0;\">\n You can present either a paper or an electronic voucher for this activity.\n <span style=\"color:#888888;\"> / You can present either a paper or an electronic voucher for this activity.</span>\n </ul>\n\n <h3 style=\"font-size:14px;font-weight:bold;margin:0.5em 0;padding:0;\">\n Important Information\n </h3>\n <ul><li>Your local contact is Sundance Helicopters on +17027360606.</li></ul>• Important: due to comfort, weight and balance of the aircraft, the maximum weight per passenger to ride in an A-Star helicopter is 275lbs (125kg / 19.6st). If passengers weigh in between 275lbs and 300lbs (136kg/21.4st), you will be required to upgrade to the EC-130.<br> • Any passenger over 300lbs will be required to purchase an additional seat. This is payable directly to the tour operator on the day of the tour.<br> • Due to the nature of this tour and the safety of all guests, the tour operator reserves the right to refuse service to passengers who are intoxicated or show signs of intoxication. If, as a result, your tour is canceled, you will not be entitled to a refund.<br> • Infant children must be under the age of two and have proof of age, such as a passport and are considered lap children.<br> • Per FAA regulations, all passenger must present photo ID at check in.<br> • If you would like a vegetarian meal as your lunch option, please contact the local operator as soon as possible.<br> • Please Note: Please look for your Limo driver who will get out and will be looking for the lead traveler’s last name of whom the reservation is under. There is also a sign in the front windshield of the Limo that will say Sundance Helicopters.<br><br>Hotel pickups commence prior to this time, you must contact the local service provider to verify your exact pickup time.<br><br>All flight times are approximate and subject to change due to weather conditions and weight restrictions.<br><br>This operator requires you to contact them directly prior to this tour/activity.<br><br>This operator requires you to contact them directly prior to this tour/activity.\n\n <h3 style=\"font-size:14px;font-weight:bold;margin:0.5em 0;padding:0;\">\n Inclusions\n </h3>\n <ul><li>45-minute (approx.) flight each way (helicopter based on option selected)</li><li>Hotel pickup and drop-off by limousine</li><li>Snacks</li><li>Glass of Champagne</li><li>All taxes and fees</li></ul>\n\n <h3 style=\"font-size:14px;font-weight:bold;margin:0.5em 0;padding:0;\">\n Exclusions\n </h3>\n <ul><li>Gratuities</li></ul>\n\n\n <h3 style=\"font-size:14px;font-weight:bold;margin:0.5em 0;padding:0;\">\n Terms and Conditions\n </h3>\n For a full refund, cancel at least 24 hours in advance of the start date of the experience.\n </div>\n\n </div>\n <br/>\n\n </div>\n\n",
- "dateStamp": "2020-04-22T23:44:26+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331004"
}
Email a voucher
This service:
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
itineraryId | integer numeric identifier of the itinerary |
itemId | integer numeric identifier of the item |
leadLastName | string surname of the lead traveler |
voucherKey | string unique identification code for the voucher |
name | string name of the person to whom the voucher is to be sent |
string email address of the person to whom the voucher is to be sent | |
subject | string subject line for the email that is to be sent to the recipient of the voucher |
message | string message content for the email to be sent to the recipient of the voucher |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
data | string natural-language status of the email operation |
{- "itineraryId": 3299307,
- "itemId": 600033670,
- "leadLastName": "DP",
- "voucherKey": null,
- "name": "David",
- "email": "DavidT@viator.com",
- "subject": "Tour vouchers from David",
- "message": "hello this is a very very very long message"
}
"./examples/booking-voucher-email-example.yaml"
Fax a voucher
This service:
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
itineraryId | integer numeric identifier of the itinerary |
itemId | integer numeric identifier of the item |
leadLastName | string surname of the lead traveler |
voucherKey | string unique identification code for the voucher |
countryCode | string country-code for the telephone number to which the voucher will be sent via fax |
faxNumber | any telephone number to which the voucher will be sent via fax |
to | string short name of the person to whom the fax will be addressed |
subject | string subject line for the fax that is to be sent to the recipient of the voucher |
message | string message content for the email to be sent to the recipient of the voucher |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
data | string natural-language status of the fax operation |
{- "itineraryId": 3299307,
- "itemId": 600033670,
- "leadLastName": "DP",
- "voucherKey": null,
- "countryCode": "string",
- "faxNumber": "82195499",
- "to": "string",
- "subject": "Tour vouchers from David",
- "message": "hello this is a very very very long message"
}
{- "errorReference": null,
- "dateStamp": "2017-11-24T21:30:47+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "321050",
- "data": "Done"
}
Get past booking
This service:
voucherKey
, itineraryId
or itemId
sent in the requestNote: This service will only return past bookings that were made with the same apiKey that was used to make the booking
Sample query parameters:
email=john.doe@viator.com&itineraryId=3299307
or
email=john.doe@viator.com&itemId=600033670
or
voucherKey=3299307:93c7f36a56b18ba1068787ba7fb7988da5c8ad08db77604110141ff21498603e:600033670
Departure details
departurePoint
, departurePointAddress
and departurePointDirections
, are included in the response. voucherKey | string Example: voucherKey=3299307:93c7f36a56b18ba1068787ba7fb7988da5c8ad08db77604110141ff21498603e:600033670 specifier of past booking type (use one of: |
string Example: email=apitest@viator.com email address by which to search for past bookings | |
itineraryId | string Example: itineraryId=1000308214 itinerary identifier by which to search for past bookings |
itemId | string Example: itemId=600033670 unique booking reference number by which to search for past bookings |
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
object object containing pricing matrix information |
{- "errorReference": null,
- "data": {
- "sortOrder": 0,
- "rulesApplied": [ ],
- "omniPreRuleList": [ ],
- "bookingStatus": {
- "status": 3,
- "text": "Confirmed",
- "type": "CONFIRMED",
- "level": "ITINERARY",
- "confirmed": true,
- "pending": false,
- "amended": false,
- "cancelled": false,
- "failed": false
}, - "itemSummaries": [
- {
- "sortOrder": 0,
- "rulesApplied": [ ],
- "bookingStatus": {
- "status": 1,
- "text": "Paid & Confirmed",
- "type": "CONFIRMED",
- "level": "ITEM",
- "confirmed": true,
- "amended": false,
- "failed": false,
- "pending": false,
- "cancelled": false
}, - "travellerAgeBands": [
- {
- "sortOrder": 0,
- "count": 1,
- "pluralDescription": "Adults",
- "description": "Adult",
- "ageBandId": 1
}
], - "voucherKey": "1006235932:371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618:581108716",
- "voucherRequirements": "You can present either a paper or an electronic voucher for this activity.",
- "appleWalletURL": null,
- "productPulledDown": false,
- "merchantCancellable": false,
- "productWidgetList": null,
- "savingAmount": 0,
- "applePassSupported": false,
- "supplierName": null,
- "supplierPhoneNumber": null,
- "vouchers": null,
- "passbooks": null,
- "termsAndConditions": "{\"NumberRange: 2 - null\":0,\"NumberRange: 0 - 1\":100}",
- "savingAmountFormated": "$0.00",
- "barcodeOption": "tour",
- "barcodeType": "code128",
- "tourGradeCode": "EB_ASTAR_SP~06:45",
- "departsFrom": "Las Vegas, United States",
- "tourGradeDescription": "Special: Earlybird A-Star 06:45 (EB_ASTAR_SP~06:45)",
- "pickupHotelId": null,
- "pickupHotelName": "pickupPoint21",
- "hoursConfirmed": 0,
- "priceUSD": 409.99,
- "bookingEngineId": "FO",
- "itineraryId": 1006235932,
- "departurePointDirections": null,
- "merchantNetPrice": 0,
- "price": 409.99,
- "destId": 684,
- "voucherOption": "VOUCHER_E",
- "priceFormatted": "$409.99",
- "rnplInfo": null,
- "itemId": 581108716,
- "productCode": "2280AAHT",
- "travelDate": "2020-08-06",
- "lastRetailPriceFormatted": "$409.99",
- "productTitle": "Grand Canyon All-American Helicopter Tour",
- "leadTravellerSurname": "Simpson test",
- "leadTravellerFirstname": "Homer",
- "distributorItemRef": null,
- "startingTime": "6:45 AM",
- "languageServicesLanguageCode": "en",
- "obfsId": 384923,
- "departurePoint": "Traveler pickup is offered<br><br>",
- "departurePointAddress": null,
- "lastRetailPrice": 409.99,
- "leadTravellerTitle": "Mr",
- "merchantNetPriceFormatted": "",
- "currencyCode": "USD"
}
], - "securityToken": "371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618",
- "paypalRedirectURL": null,
- "voucherKey": "1006235932:371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618",
- "bookerEmail": "apitest@viator.com",
- "distributorRef": "distroRef111000",
- "exchangeRate": 1,
- "itineraryId": 1006235932,
- "bookingDate": "2020-04-22",
- "totalPrice": 409.99,
- "totalPriceFormatted": "$409.99",
- "totalPriceUSD": 409.99,
- "hasVoucher": true,
- "userId": null,
- "currencyCode": "USD"
}, - "dateStamp": "2020-04-22T23:40:47+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331003"
}
Get user bookings
This service:
Provide either:
sessionId
) for all bookings related to a user account, or... voucherKey
or, provide:
email
) and lastCCFourDigits
)...to get all associated bookings
or...
an email address with either
an itemId
or
itineraryId
For failed items, show this text:
Departure Details
departurePoint
, departurePointAddress
and departurePointDirections
is included in the response&
and special characters escaped with a backslash. Ensure that these fields are parsed after receiving the response as it will cause your JSON to be invalid.sessionId | integer numeric session identifier for the booking |
voucherKey | string Example: voucherKey=3299307:93c7f36a56b18ba1068787ba7fb7988da5c8ad08db77604110141ff21498603e:600033670 voucher key for the booking |
string Example: email=apitest@viator.com email address of the booker for the booking | |
lastCCFourDigits | integer Example: lastCCFourDigits=4242 last four digits of the credit card that made the booking |
itineraryOrItemId | string Example: itineraryOrItemId=700179574 numeric identifier of the itinerary or item |
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
object |
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "rulesApplied": [ ],
- "omniPreRuleList": null,
- "bookingStatus": {
- "status": 3,
- "text": "Confirmed",
- "type": "CONFIRMED",
- "level": "ITINERARY",
- "confirmed": true,
- "pending": false,
- "amended": false,
- "cancelled": false,
- "failed": false
}, - "itemSummaries": [
- {
- "sortOrder": 0,
- "rulesApplied": [ ],
- "bookingStatus": {
- "status": 1,
- "text": "Paid & Confirmed",
- "type": "CONFIRMED",
- "level": "ITEM",
- "failed": false,
- "confirmed": true,
- "amended": false,
- "pending": false,
- "cancelled": false
}, - "travellerAgeBands": [
- {
- "sortOrder": 0,
- "count": 1,
- "pluralDescription": "Adults",
- "description": "Adult",
- "ageBandId": 1
}
], - "voucherKey": "1006235932:371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618:581108716",
- "voucherRequirements": "You can present either a paper or an electronic voucher for this activity.",
- "appleWalletURL": null,
- "productPulledDown": false,
- "merchantCancellable": false,
- "productWidgetList": null,
- "savingAmount": 0,
- "applePassSupported": false,
- "supplierName": null,
- "supplierPhoneNumber": null,
- "vouchers": null,
- "passbooks": null,
- "termsAndConditions": "{\"NumberRange: 2 - null\":0,\"NumberRange: 0 - 1\":100}",
- "pickupHotelId": null,
- "tourGradeCode": "EB_ASTAR_SP~06:45",
- "productCode": "2280AAHT",
- "travelDate": "2020-08-06",
- "distributorItemRef": null,
- "startingTime": "6:45 AM",
- "languageServicesLanguageCode": "en",
- "price": 409.99,
- "leadTravellerSurname": "Simpson test",
- "itineraryId": 1006235932,
- "productTitle": "Grand Canyon All-American Helicopter Tour",
- "merchantNetPrice": 0,
- "voucherOption": "VOUCHER_E",
- "destId": 684,
- "itemId": 581108716,
- "priceFormatted": "$409.99",
- "barcodeOption": "tour",
- "barcodeType": "code128",
- "departurePoint": "Traveler pickup is offered<br><br>",
- "departurePointAddress": null,
- "departurePointDirections": null,
- "leadTravellerFirstname": "Homer",
- "rnplInfo": null,
- "obfsId": 384923,
- "leadTravellerTitle": "Mr",
- "lastRetailPrice": 409.99,
- "tourGradeDescription": "Special: Earlybird A-Star 06:45 (EB_ASTAR_SP~06:45)",
- "lastRetailPriceFormatted": "$409.99",
- "bookingEngineId": "FO",
- "savingAmountFormated": "$0.00",
- "departsFrom": "Las Vegas, United States",
- "pickupHotelName": "pickupPoint21",
- "merchantNetPriceFormatted": "",
- "hoursConfirmed": 0,
- "priceUSD": 409.99,
- "currencyCode": "USD"
}
], - "securityToken": "371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618",
- "paypalRedirectURL": null,
- "exchangeRate": 1,
- "itineraryId": 1006235932,
- "bookingDate": "2020-04-22",
- "voucherKey": "1006235932:371ddaac6b5c6d66eabb4aa4ffa1d4080b153d37cf4794261b74986098c4b618",
- "bookerEmail": "apitest@viator.com",
- "distributorRef": "distroRef111000",
- "totalPrice": 409.99,
- "totalPriceFormatted": "$409.99",
- "totalPriceUSD": 409.99,
- "hasVoucher": true,
- "userId": null,
- "currencyCode": "USD"
}
], - "dateStamp": "2020-04-23T17:19:24+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331002"
}
Send a message to a customer
This service requests that a confirmation email be sent to the customer (email address associated with the booking) from Viator Customer Service (see Contact customer service for more information)
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
sessionId | string unique numeric Id for the session. Partners can either omit the sessionId field altogether or leave its value blank |
itineraryId | integer numeric identifier of the itinerary |
itemId | integer numeric identifier of the item |
type | string Enum: "AMEND" "CANCEL" "OTHER" "REFUND" Specifier of the question type - if |
message | string message content for the email to be sent to the recipient of the voucher |
otherQuestion | string natural-language iteration of the question to ask if type is |
otherQuestionId | string Enum: "ON_REQUEST" "GENERAL_INFO" "VOUCHER_PROBLEM" "TECH_PROBLEM" "INCORRECT_DETAILS" "FAX_MOBILE" "MOBILE_UPDATES" "GENERAL_OTHER" specifier of the premapped question when |
respondInFL | boolean Only applicable for "PARTNER"/"VML" sites. If |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
data | string natural-language status of the customer-service contact operation |
{- "sessionId": "",
- "itineraryId": 3299307,
- "itemId": 600033670,
- "type": "CANCEL",
- "message": "Voucher enquiry",
- "otherQuestion": "This question will be overwritten with the question set at `otherQuestionId`",
- "otherQuestionId": "ON_REQUEST",
- "respondInFL": false
}
{- "errorReference": null,
- "dateStamp": "2017-11-24T21:30:47+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "321050",
- "data": "Successfully submitted booking message"
}
Retrieves a dictionary of unique identification codes (cancellationReasonCode
) and their associated natural-language descriptions (cancellationReasonText
).
For information on how to use this service, see: Cancellation API workflow
Note:
https://api.sandbox.viator.com/partner/bookings/cancel-reasons
(sandbox) or https://api.sandbox.viator.com/partner/bookings/cancel-reasons
(live)Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
Array of objects (CancellationReason) Array of cancellation reason codes and their asssociated texts for display to the user |
{- "reasons": [
- {
- "cancellationReasonText": "Unexpected/medical circumstances",
- "cancellationReasonCode": "Customer_Service.Unexpected_medical_circumstances"
}, - {
- "cancellationReasonText": "Duplicate Booking",
- "cancellationReasonCode": "Customer_Service.Duplicate_Booking"
}, - {
- "cancellationReasonText": "Tour operator asked me to cancel",
- "cancellationReasonCode": "Customer_Service.Tour operator asked me to cancel"
}, - {
- "cancellationReasonText": "Chose a different/cheaper tour",
- "cancellationReasonCode": "Customer_Service.Chose_a_different_cheaper_tour"
}, - {
- "cancellationReasonText": "Weather",
- "cancellationReasonCode": "Customer_Service.Weather"
}, - {
- "cancellationReasonText": "Booked wrong tour/date",
- "cancellationReasonCode": "Customer_Service.Booked_wrong_tour_date"
}, - {
- "cancellationReasonText": "I canceled my entire trip",
- "cancellationReasonCode": "Customer_Service.I_canceled_my_entire_trip"
}
]
}
Retrieves a quote for the cancellation of a booking
For information on how to use this service, see: Cancellation API workflow
Note:
https://api.sandbox.viator.com/partner/bookings/{booking-reference}/cancel-quote
(sandbox) or https://api.viator.com/partner/bookings/{booking-reference}/cancel-quote
(live)booking-reference required | string Unique numeric identifier of the booking for which to retrieve a cancellation quote |
object (RefundDetails) Details of the refund Note: Bookings that have not been confirmed by the supplier and have a status of | |
bookingId | string The booking reference number, prepended with |
status | string Enum: "CANCELLABLE" "CANCELLED" "NOT_CANCELLABLE" String indicating the cancellation status of this itinerary item:
|
{- "bookingId": "BR-580669678",
- "refundDetails": {
- "itemPrice": 412.04,
- "refundAmount": 412.04,
- "refundPercentage": 100,
- "currencyCode": "USD"
}, - "status": "CANCELLABLE"
}
Submits a cancellation request for the specified booking
For information on how to use this service, see: Cancellation API workflow
Note:
https://api.sandbox.viator.com/partner/bookings/{booking-reference}/cancel
(sandbox) or https://api.viator.com/partner/bookings/{booking-reference}/cancel
(live)booking-reference required | string The ID of the booking |
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
reasonCode | string Machine-interpretable identification code for this cancellation reason, retrieved from cancellationReasons |
bookingId | string Booking reference number for this booking, prepended with |
status | string Enum: "ACCEPTED" "DECLINED" String indicating the outcome of the booking cancellation request.
|
reason | string Enum: "ALREADY_CANCELLED" "NOT_CANCELLABLE" |
{- "reasonCode": "Customer_Service.I_canceled_my_entire_trip"
}
{- "bookingId": "BR-580669678",
- "status": "ACCEPTED"
}
Note: This service is included in this manual in order to draw attention to the fields that are exclusively relevant to partners with booking capabilities. i.e., transactional affiliates and not content affiliates. All other field descriptions have been removed for clarity. See the Affiliate partner technical manual for information about how to use this service.
This service is used to search for products based on various criteria; such as:
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
destId | integer n/a |
seoId | string n/a |
catId | integer n/a |
subCatId | integer n/a |
startDate | string n/a |
endDate | string n/a |
currencyCode | string n/a |
topX | string (topX) start and end rows to return in the format {start}-{end}
|
sortOrder | string n/a |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects array of product objects |
{- "destId": 684,
- "subCatId": 26052,
- "sortOrder": "REVIEW_AVG_RATING_A",
- "topX": "1-3"
}
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "supplierName": null,
- "currencyCode": "USD",
- "catIds": [
- 26051,
- 6
], - "subCatIds": [
- 19,
- 26052,
- 21,
- 40293
], - "specialReservationDetails": null,
- "sslSupported": false,
- "panoramaCount": 0,
- "merchantCancellable": false,
- "bookingEngineId": "FreesaleBE",
- "onRequestPeriod": null,
- "primaryGroupId": 6,
- "pas": null,
- "available": true,
- "productUrlName": "Yoga-Uncorked-Artisan-Hotel",
- "primaryDestinationUrlName": "Las-Vegas",
- "shortDescription": "Sip your wine and unwind with wine yoga! This gentle yoga class combines sipping your wine and practicing fun yoga basics in a rad environment. A tad unconventional, this class is filled with laughter, fun, and cheers-ing your neighbor.<br><br>Private parties are available upon request.<br><br>Ticket includes one glass of wine, a souvenir adult sippy (to help prevent the spillage of the wine!), and a gentle quirky yoga class.<br><br>",
- "price": 55,
- "supplierCode": "73492",
- "translationLevel": 0,
- "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/0a/8a/a8/44.jpg",
- "primaryDestinationName": "Las Vegas",
- "onSale": false,
- "photoCount": 0,
- "reviewCount": 0,
- "primaryDestinationId": 684,
- "merchantNetPriceFrom": 0,
- "priceFormatted": "$55.00",
- "rrp": 0,
- "rrpformatted": "",
- "videoCount": 0,
- "rating": 0,
- "specialReservation": false,
- "shortTitle": "Yoga Uncorked-Artisan Hotel",
- "specialOfferAvailable": false,
- "uniqueShortDescription": null,
- "merchantNetPriceFromFormatted": "",
- "savingAmount": 0,
- "savingAmountFormated": "",
- "essential": null,
- "admission": null,
- "duration": "1 hour",
- "title": "Yoga Uncorked-Artisan Hotel",
- "code": "73492P17"
}, - {
- "sortOrder": 2,
- "supplierName": null,
- "currencyCode": "USD",
- "catIds": [
- 26051,
- 50127
], - "subCatIds": [
- 50128,
- 26052,
- 40293
], - "specialReservationDetails": null,
- "sslSupported": false,
- "panoramaCount": 0,
- "merchantCancellable": false,
- "bookingEngineId": "DeferredCRMBE",
- "onRequestPeriod": null,
- "primaryGroupId": 26051,
- "pas": null,
- "available": true,
- "productUrlName": "Sunset-Yoga-in-Las-Vegas",
- "primaryDestinationUrlName": "Nevada",
- "shortDescription": "Enjoy a quiet, beautiful short walk to a secluded and breathtaking scene in Las Vegas. Travelers can choose to visit Calico Basin, Mt. Charleston, Wetlands, Seven Magic Mountains, or Lake Las Vegas for a private or group yoga session. Each session will provide the freedom from day-to-day distractions and allow you to immerse yourself in a unique and awe-inspiring locale. Each yoga session will be tailored to the individual and/or group in order to ensure the proper tone and intention is set. This is an all-inclusive experience. Guided walking tour, customized yoga session, yoga mats and water will be provided.",
- "price": 256.42,
- "supplierCode": "73458",
- "translationLevel": 0,
- "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/3b/bc/78.jpg",
- "primaryDestinationName": "Nevada",
- "onSale": false,
- "photoCount": 0,
- "reviewCount": 0,
- "primaryDestinationId": 22171,
- "merchantNetPriceFrom": 0,
- "priceFormatted": "$256.42",
- "rrp": 0,
- "rrpformatted": "",
- "videoCount": 0,
- "rating": 0,
- "specialReservation": false,
- "shortTitle": "Explore the Beauty of Las Vegas with Private and Group Yoga Classes",
- "specialOfferAvailable": false,
- "uniqueShortDescription": null,
- "merchantNetPriceFromFormatted": "",
- "savingAmount": 0,
- "savingAmountFormated": "",
- "essential": null,
- "admission": null,
- "duration": "1 to 2 hours",
- "title": "Explore the Beauty of Las Vegas with Private and Group Yoga Classes",
- "code": "73458P1"
}, - {
- "sortOrder": 3,
- "supplierName": null,
- "currencyCode": "USD",
- "catIds": [
- 26051,
- 6,
- 50127
], - "subCatIds": [
- 50128,
- 19,
- 26052,
- 21,
- 40293
], - "specialReservationDetails": null,
- "sslSupported": false,
- "panoramaCount": 0,
- "merchantCancellable": false,
- "bookingEngineId": "FreesaleBE",
- "onRequestPeriod": null,
- "primaryGroupId": 26051,
- "pas": null,
- "available": true,
- "productUrlName": "Viva-Las-Vinos-Wine-Yoga",
- "primaryDestinationUrlName": "Las-Vegas",
- "shortDescription": "Sip your wine and unwind with wine yoga! This gentle yoga class combines sipping your wine and practicing fun yoga basics in a rad environment. A tad unconventional, this class is filled with laughter, fun, and cheers-ing your neighbor.<br><br>Private parties are available upon request.<br><br>Ticket includes one glass of wine, a souvenir adult sippy (to help prevent the spillage of the wine!), and a gentle quirky yoga class.<br><br>",
- "price": 55,
- "supplierCode": "73492",
- "translationLevel": 0,
- "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/09/27/7e/88.jpg",
- "primaryDestinationName": "Las Vegas",
- "onSale": false,
- "photoCount": 0,
- "reviewCount": 0,
- "primaryDestinationId": 684,
- "merchantNetPriceFrom": 0,
- "priceFormatted": "$55.00",
- "rrp": 0,
- "rrpformatted": "",
- "videoCount": 0,
- "rating": 0,
- "specialReservation": false,
- "shortTitle": "Yoga Uncorked at The Gramercy",
- "specialOfferAvailable": false,
- "uniqueShortDescription": null,
- "merchantNetPriceFromFormatted": "",
- "savingAmount": 0,
- "savingAmountFormated": "",
- "essential": null,
- "admission": null,
- "duration": "1 hour",
- "title": "Yoga Uncorked at The Gramercy",
- "code": "73492P4"
}
], - "dateStamp": "2020-04-20T19:24:12+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 3,
- "errorMessageText": null,
- "vmid": "331001"
}
Note: This service is included in this manual in order to draw attention to the fields that are exclusively relevant to affiliate partners with booking capabilities. i.e., 'transactional affiliates' and not 'content affiliates'. All other field descriptions have been removed for clarity. See the Affiliate partner technical manual for information about how to use this service.
This service returns an array of products given an array of product identifiers that is useful for wishlist / shopping cart / user account display
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
currencyCode | string (currencyCode) currency code for the currency to use for pricing fields
|
productCodes | Array of strings n/a |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects array of product objects |
{- "currencyCode": "USD",
- "productCodes": [
- "2280SUN"
]
}
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "supplierName": null,
- "currencyCode": "USD",
- "catIds": [
- 1,
- 9,
- 25,
- 12
], - "subCatIds": [
- 113,
- 2,
- 98,
- 26963,
- 36,
- 45,
- 95
], - "specialReservationDetails": null,
- "sslSupported": false,
- "panoramaCount": 0,
- "merchantCancellable": false,
- "bookingEngineId": "FreesaleOnRequestBE",
- "onRequestPeriod": 48,
- "primaryGroupId": null,
- "pas": null,
- "available": true,
- "productUrlName": "Grand-Canyon-West-Rim-Deluxe-Sunset-Helicopter-Tour",
- "primaryDestinationUrlName": "Las-Vegas",
- "shortDescription": "Take off from Las Vegas on a magical sunset helicopter tour to the Grand Canyon. You'll enjoy a 45-minute helicopter flight each way, land at the Grand Canyon for a glass of Champagne and snacks while you watch the sun start it's descent behind the walls of the canyon, then fly low over the famous neon-lit Las Vegas Strip on your return.",
- "price": 507.99,
- "supplierCode": "2280",
- "translationLevel": 0,
- "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/7a/ec/1c.jpg",
- "primaryDestinationName": "Las Vegas",
- "onSale": false,
- "photoCount": 7,
- "reviewCount": 399,
- "primaryDestinationId": 684,
- "merchantNetPriceFrom": 0,
- "priceFormatted": "$507.99",
- "rrp": 0,
- "rrpformatted": "",
- "videoCount": 1,
- "rating": 5,
- "specialReservation": false,
- "shortTitle": "Grand Canyon from Las Vegas West Rim Sunset Helicopter Tour",
- "specialOfferAvailable": false,
- "uniqueShortDescription": null,
- "merchantNetPriceFromFormatted": "",
- "savingAmount": 0,
- "savingAmountFormated": "",
- "essential": null,
- "admission": null,
- "duration": "3 hours 30 minutes",
- "title": "Grand Canyon West Rim Deluxe Sunset Helicopter Tour",
- "code": "2280SUN"
}
], - "dateStamp": "2020-04-20T21:02:27+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331001"
}
Note: This service is included in this manual in order to draw attention to the fields that are exclusively relevant to affiliate partners with booking capabilities. i.e., 'transactional affiliates' and not 'content affiliates'. All other field descriptions have been removed for clarity. See the Affiliate partner technical manual for information about how to use this service.
This service provides a free text search across all products destinations, attractions and recommendations
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
destId | integer n/a |
topX | string n/a |
currencyCode | string n/a |
text | string n/a |
searchTypes | Array of strings Items Enum: "PRODUCT" "DESTINATION" "ATTRACTION" "RECOMMENDATION" n/a |
sortOrder | string n/a |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects array of product objects |
{- "destId": 684,
- "topX": "1-3",
- "currencyCode": "USD",
- "text": "helicopter",
- "searchTypes": [
- "PRODUCT",
- "DESTINATION"
], - "sortOrder": "TOP_SELLERS"
}
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "data": {
- "sortOrder": 1,
- "supplierName": null,
- "currencyCode": "USD",
- "catIds": [
- 1,
- 9,
- 25,
- 12
], - "subCatIds": [
- 113,
- 2,
- 98,
- 26963,
- 36,
- 45,
- 94,
- 95
], - "specialReservationDetails": null,
- "sslSupported": false,
- "panoramaCount": 0,
- "merchantCancellable": false,
- "bookingEngineId": "FreesaleOnRequestBE",
- "onRequestPeriod": 48,
- "primaryGroupId": null,
- "pas": null,
- "available": true,
- "productUrlName": "Grand-Canyon-All-American-Helicopter-Tour",
- "primaryDestinationUrlName": "Las-Vegas",
- "shortDescription": "Take off from McCarran Airport on an exhilarating helicopter flight to the Grand Canyon. You'll enjoy a 45-minute helicopter flight each way, land deep in the canyon for a glass of champagne and a basket of snacks then fly low over the famous Las Vegas Strip on your return. The Grand Canyon All American Helicopter Tour is a half-day tour, leaving you with time in the day free to explore Las Vegas and Nevada at your leisure.",
- "price": 409.99,
- "supplierCode": "2280",
- "translationLevel": 0,
- "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/38/cd/90.jpg",
- "primaryDestinationName": "Las Vegas",
- "onSale": false,
- "photoCount": 5,
- "reviewCount": 0,
- "primaryDestinationId": 684,
- "merchantNetPriceFrom": 0,
- "priceFormatted": "$409.99",
- "rrp": 0,
- "rrpformatted": "",
- "videoCount": 1,
- "rating": 0,
- "specialReservation": false,
- "shortTitle": "Las Vegas to Grand Canyon Helicopter Tour with Champagne",
- "specialOfferAvailable": false,
- "uniqueShortDescription": null,
- "merchantNetPriceFromFormatted": "",
- "savingAmount": 0,
- "savingAmountFormated": "",
- "essential": null,
- "admission": null,
- "duration": "3 hours 30 minutes",
- "title": "Grand Canyon All-American Helicopter Tour",
- "code": "2280AAHT"
}, - "searchType": "PRODUCT"
}, - {
- "sortOrder": 2,
- "data": {
- "sortOrder": 2,
- "supplierName": null,
- "currencyCode": "USD",
- "catIds": [
- 1,
- 5,
- 9,
- 12
], - "subCatIds": [
- 32,
- 2,
- 98,
- 26963,
- 45,
- 94,
- 15
], - "specialReservationDetails": null,
- "sslSupported": false,
- "panoramaCount": 0,
- "merchantCancellable": false,
- "bookingEngineId": "FreesaleOnRequestBE",
- "onRequestPeriod": 336,
- "primaryGroupId": null,
- "pas": null,
- "available": true,
- "productUrlName": "Ultimate-Grand-Canyon-4-in-1-Helicopter-Tour",
- "primaryDestinationUrlName": "Las-Vegas",
- "shortDescription": "Take the ultimate Grand Canyon tour! You'll fly from Las Vegas to the Grand Canyon by helicopter, cruise the Colorado River, then spend time at the West Rim. You also have the option of choosing the Grand Canyon Skywalk for 360-degree panoramic views.",
- "price": 619.99,
- "supplierCode": "2280",
- "translationLevel": 0,
- "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/6f/78/b2.jpg",
- "primaryDestinationName": "Las Vegas",
- "onSale": false,
- "photoCount": 266,
- "reviewCount": 0,
- "primaryDestinationId": 684,
- "merchantNetPriceFrom": 0,
- "priceFormatted": "$619.99",
- "rrp": 0,
- "rrpformatted": "",
- "videoCount": 0,
- "rating": 0,
- "specialReservation": false,
- "shortTitle": "Grand Canyon West Rim Helicopter and Boat Tour from Las Vegas",
- "specialOfferAvailable": false,
- "uniqueShortDescription": null,
- "merchantNetPriceFromFormatted": "",
- "savingAmount": 0,
- "savingAmountFormated": "",
- "essential": null,
- "admission": null,
- "duration": "6 hours 30 minutes",
- "title": "Grand Canyon 4-in-1 Helicopter Tour",
- "code": "2280LI_5H"
}, - "searchType": "PRODUCT"
}, - {
- "sortOrder": 3,
- "data": {
- "sortOrder": 3,
- "supplierName": null,
- "currencyCode": "USD",
- "catIds": [
- 1,
- 5,
- 9,
- 25,
- 12
], - "subCatIds": [
- 32,
- 113,
- 2,
- 98,
- 94,
- 15
], - "specialReservationDetails": null,
- "sslSupported": false,
- "panoramaCount": 0,
- "merchantCancellable": false,
- "bookingEngineId": "FreesaleBE",
- "onRequestPeriod": null,
- "primaryGroupId": null,
- "pas": null,
- "available": true,
- "productUrlName": "Grand-Canyon-and-Hoover-Dam-Day-Trip-from-Las-Vegas-with-Optional-Skywalk",
- "primaryDestinationUrlName": "Las-Vegas",
- "shortDescription": "Hit the highway out of Las Vegas and spend the day touring the Grand Canyon and Hoover Dam. On this day trip you'll have four hours at the Grand Canyon, with the option of walking on the popular Grand Canyon Skywalk for panoramic 360-degree views.",
- "price": 118.19,
- "supplierCode": "3951",
- "translationLevel": 0,
- "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/71/4e/01.jpg",
- "primaryDestinationName": "Las Vegas",
- "onSale": false,
- "photoCount": 629,
- "reviewCount": 0,
- "primaryDestinationId": 684,
- "merchantNetPriceFrom": 0,
- "priceFormatted": "$118.19",
- "rrp": 0,
- "rrpformatted": "",
- "videoCount": 0,
- "rating": 0,
- "specialReservation": false,
- "shortTitle": "Grand Canyon, Hoover Dam from Las Vegas with Skywalk Option",
- "specialOfferAvailable": false,
- "uniqueShortDescription": null,
- "merchantNetPriceFromFormatted": "",
- "savingAmount": 0,
- "savingAmountFormated": "",
- "essential": null,
- "admission": null,
- "duration": "12 hours",
- "title": "Grand Canyon West Rim and Hoover Dam Tour from Las Vegas with Optional Skywalk",
- "code": "3951WESTDLX"
}, - "searchType": "PRODUCT"
}
], - "dateStamp": "2020-04-20T21:07:44+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 124,
- "errorMessageText": null,
- "vmid": "331001"
}
Note: This service is included in this manual in order to draw attention to the fields that are exclusively relevant to affiliate partners with booking capabilities. i.e., 'transactional affiliates' and not 'content affiliates'. All other field descriptions have been removed for clarity. See the Affiliate partner technical manual for information about how to use this service.
This service (/product) provides all product details required for a product display page, as well as information required for price checks and booking, such as:
currencyCode | string n/a |
voucherOption | string Enum: "VOUCHER_PAPER_ONLY" "VOUCHER_E" "VOUCHER_ID_ONLY" n/a |
code | string n/a |
showUnavailable | string n/a |
sortOrder | string n/a |
excludeTourGradeAvailability | boolean n/a |
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
object object containing product details |
{- "errorReference": null,
- "data": {
- "supplierName": null,
- "currencyCode": "USD",
- "catIds": [
- 6,
- 12
], - "subCatIds": [
- 97,
- 98,
- 5330,
- 26963,
- 32024,
- 45
], - "specialReservationDetails": null,
- "sslSupported": false,
- "panoramaCount": 0,
- "merchantCancellable": false,
- "bookingEngineId": "UnconditionalBE",
- "onRequestPeriod": null,
- "primaryGroupId": null,
- "pas": null,
- "available": true,
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "primaryDestinationUrlName": "Sydney",
- "voucherRequirements": "You can present either a paper or an electronic voucher for this activity.",
- "tourGradesAvailable": true,
- "hotelPickup": false,
- "userPhotos": [
- {
- "sortOrder": 1,
- "ownerName": "Husker1k",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2012-02-07",
- "productCode": "5010SYDNEY",
- "caption": "<p>Carl and Karen meeting a new friend at the Wildlife park.</p>",
- "ownerId": 1755909,
- "editorsPick": true,
- "photoId": 1909732,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/e4/dsc00471-photo_1909732-260tall.jpg",
- "title": "DSC00471"
}, - {
- "sortOrder": 2,
- "ownerName": "Kylie G",
- "ownerCountry": "Australia",
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2009-07-22",
- "productCode": "5010SYDNEY",
- "caption": "Sydney Opera House",
- "ownerId": 288013,
- "editorsPick": true,
- "photoId": 997106,
- "title": "Sydney Opera House"
}, - {
- "sortOrder": 3,
- "ownerName": "Sheila T",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2018-03-28",
- "productCode": "5010SYDNEY",
- "caption": "<p>This was taken from a water taxi</p>",
- "ownerId": 1327319,
- "editorsPick": false,
- "photoId": 31376266,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/8a/-photo_31376266-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 4,
- "ownerName": "Sheila T",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2018-03-28",
- "productCode": "5010SYDNEY",
- "caption": "<p>Tell us who is in the photo, what you were doing, etc.</p>",
- "ownerId": 1327319,
- "editorsPick": false,
- "photoId": 31376263,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/87/-photo_31376263-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 5,
- "ownerName": "Sheila T",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2018-03-28",
- "productCode": "5010SYDNEY",
- "caption": "<p>Tell us who is in the photo, what you were doing, etc.</p>",
- "ownerId": 1327319,
- "editorsPick": false,
- "photoId": 31376264,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/88/-photo_31376264-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 6,
- "ownerName": "Sheila T",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2018-03-28",
- "productCode": "5010SYDNEY",
- "caption": "<p>Tell us who is in the photo, what you were doing, etc.</p>",
- "ownerId": 1327319,
- "editorsPick": false,
- "photoId": 31376265,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/89/-photo_31376265-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 7,
- "ownerName": "Sheila T",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2018-03-28",
- "productCode": "5010SYDNEY",
- "caption": "<p>Tell us who is in the photo, what you were doing, etc.</p>",
- "ownerId": 1327319,
- "editorsPick": false,
- "photoId": 31376262,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/86/-photo_31376262-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 8,
- "ownerName": "hmyou",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2018-02-17",
- "productCode": "5010SYDNEY",
- "caption": "<p>open top deck on a good day.</p>",
- "ownerId": 7208378,
- "editorsPick": false,
- "photoId": 30550814,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/1e/-photo_30550814-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 9,
- "ownerName": "hmyou",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2018-02-17",
- "productCode": "5010SYDNEY",
- "caption": "<p>Sydney bus</p>",
- "ownerId": 7208378,
- "editorsPick": false,
- "photoId": 30550813,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/1d/-photo_30550813-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 10,
- "ownerName": "Sandra L",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2018-01-24",
- "productCode": "5010SYDNEY",
- "caption": "<p>The Sydney Harbour Bridge from Opera House.</p>",
- "ownerId": 29870783,
- "editorsPick": false,
- "photoId": 30156160,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/80/-photo_30156160-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 11,
- "ownerName": "Sandra L",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2018-01-24",
- "productCode": "5010SYDNEY",
- "caption": "<p>The rock pool at Bondi</p>",
- "ownerId": 29870783,
- "editorsPick": false,
- "photoId": 30156158,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/7e/-photo_30156158-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 12,
- "ownerName": "Sandra L",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2018-01-24",
- "productCode": "5010SYDNEY",
- "caption": "<p>Bondi Beach</p>",
- "ownerId": 29870783,
- "editorsPick": false,
- "photoId": 30156157,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/7d/-photo_30156157-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 13,
- "ownerName": "RALEIGH O",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2017-11-09",
- "productCode": "5010SYDNEY",
- "caption": "<p></p>",
- "ownerId": 1321723,
- "editorsPick": false,
- "photoId": 28933514,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/8a/-photo_28933514-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 14,
- "ownerName": "RALEIGH O",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2017-11-09",
- "productCode": "5010SYDNEY",
- "caption": "<p></p>",
- "ownerId": 1321723,
- "editorsPick": false,
- "photoId": 28933491,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/73/-photo_28933491-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 15,
- "ownerName": "RALEIGH O",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2017-11-09",
- "productCode": "5010SYDNEY",
- "caption": "<p></p>",
- "ownerId": 1321723,
- "editorsPick": false,
- "photoId": 28930587,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/1b/-photo_28930587-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 16,
- "ownerName": "RALEIGH O",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2017-11-09",
- "productCode": "5010SYDNEY",
- "caption": "<p></p>",
- "ownerId": 1321723,
- "editorsPick": false,
- "photoId": 28930586,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/1a/-photo_28930586-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 17,
- "ownerName": "RALEIGH O",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2017-11-09",
- "productCode": "5010SYDNEY",
- "caption": "<p></p>",
- "ownerId": 1321723,
- "editorsPick": false,
- "photoId": 28930585,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/19/-photo_28930585-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 18,
- "ownerName": "RALEIGH O",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "timeUploaded": "2017-11-09",
- "productCode": "5010SYDNEY",
- "caption": "<p></p>",
- "ownerId": 1321723,
- "editorsPick": false,
- "photoId": 28930584,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/18/-photo_28930584-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 19,
- "ownerName": "C S",
- "ownerCountry": "Netherlands",
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2017-10-12",
- "productCode": "5010SYDNEY",
- "caption": "<p>Sydney bridge, view from bus</p>",
- "ownerId": 182417,
- "editorsPick": false,
- "photoId": 28377343,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/ff/-photo_28377343-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 20,
- "ownerName": "C S",
- "ownerCountry": "Netherlands",
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2017-10-12",
- "productCode": "5010SYDNEY",
- "caption": "<p>Opera house</p>",
- "ownerId": 182417,
- "editorsPick": false,
- "photoId": 28377344,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/00/-photo_28377344-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 21,
- "ownerName": "C S",
- "ownerCountry": "Netherlands",
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2017-10-12",
- "productCode": "5010SYDNEY",
- "caption": "<p>View from upperdeck looking up in downtown, View from upper deck looking forward</p>",
- "ownerId": 182417,
- "editorsPick": false,
- "photoId": 28377342,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/fe/-photo_28377342-260tall.jpg",
- "title": ","
}, - {
- "sortOrder": 22,
- "ownerName": "Kirill P",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2017-05-11",
- "productCode": "5010SYDNEY",
- "caption": "<p>St Mary's Cathedral</p>",
- "ownerId": 23770411,
- "editorsPick": false,
- "photoId": 24296717,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/0d/-photo_24296717-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 23,
- "ownerName": "Kirill P",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2017-05-11",
- "productCode": "5010SYDNEY",
- "caption": "<p></p>",
- "ownerId": 23770411,
- "editorsPick": false,
- "photoId": 24296716,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/0c/-photo_24296716-260tall.jpg",
- "title": ""
}, - {
- "sortOrder": 24,
- "ownerName": "Kirill P",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "timeUploaded": "2017-05-11",
- "productCode": "5010SYDNEY",
- "caption": "<p>King's Cross' famous Coca Cola Sign</p>",
- "ownerId": 23770411,
- "editorsPick": false,
- "photoId": 24296715,
- "photoMediumResURL": "http://cache-graphicslib.viator.com/graphicslib/media/0b/-photo_24296715-260tall.jpg",
- "title": ""
}
], - "reviews": [
- {
- "sortOrder": 1,
- "ownerName": "Graeme I",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-04-06",
- "rating": 5,
- "review": "<p>Great time seeing the sights. The city is in two areas, but we didn’t have time to tour both. Maybe next year ?</p>",
- "publishedDate": "2020-04-06",
- "ownerId": 68774525,
- "viatorFeedback": "",
- "reviewId": 71899705
}, - {
- "sortOrder": 2,
- "ownerName": "BillB",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-03-24",
- "rating": 5,
- "review": "<p>Efficient and reasonable priced. Buses came on time and always had space. Would definitely recommend.</p>",
- "publishedDate": "2020-03-24",
- "ownerId": 38226256,
- "viatorFeedback": "",
- "reviewId": 71852325
}, - {
- "sortOrder": 3,
- "ownerName": "william b",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-03-13",
- "rating": 5,
- "review": "<p>Excellent tour two routes saw not only major attractions darling harbor opera house the Eye but also Bondi beach and a number of local towns<br/>\nBoat tour was great went to Manly and Watson cove both grea places for a stroll and drinks and food on the waterfront <br/>\nWell worth the price</p>",
- "publishedDate": "2020-03-13",
- "ownerId": 12096528,
- "viatorFeedback": "",
- "reviewId": 71691207
}, - {
- "sortOrder": 4,
- "ownerName": "Linda S",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-02-25",
- "rating": 5,
- "review": "<p>A great way to see the city. Two routes with a lot of stops and informative commentary. Excellent value especially the de-luxe ticket, but definitely need the 48 hour one as there is so much to see.</p>",
- "publishedDate": "2020-02-25",
- "ownerId": 38915546,
- "viatorFeedback": "",
- "reviewId": 70739309
}, - {
- "sortOrder": 5,
- "ownerName": "KEL",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-02-24",
- "rating": 5,
- "review": "<p>Excellent tours and clear commentary. <br/>\nGood stops fr connecting and on time buses. <br/>\nEnjoyed a beautiful city in an easy and informative way.</p>",
- "publishedDate": "2020-02-24",
- "ownerId": 1903650,
- "viatorFeedback": "",
- "reviewId": 70667205
}, - {
- "sortOrder": 6,
- "ownerName": "Barbara S",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-03-09",
- "rating": 4,
- "review": "<p>Very inclusive. Really glad we got both the red and blue bus on our ticket. Really enjoyed Bondi Beach</p>",
- "publishedDate": "2020-03-09",
- "ownerId": 25368382,
- "viatorFeedback": "",
- "reviewId": 71508083
}, - {
- "sortOrder": 7,
- "ownerName": "Melody J",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-03-06",
- "rating": 4,
- "review": "<p>Served its purpose of getting to see a lot of the city. We took it purposefully to go to Bondi Beach. Unfortunately weather was a but cool but we made the best of it. Sit on top for best views.</p>",
- "publishedDate": "2020-03-06",
- "ownerId": 25931845,
- "viatorFeedback": "",
- "reviewId": 71336861
}, - {
- "sortOrder": 8,
- "ownerName": "Keith S",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-03-10",
- "rating": 3,
- "review": "<p>Very slow, I know Sydney is a big city but there are so many traffic lights the bus gets stopped at and some of its actual stops it takes ages to get passengers on and off and when you are exposed on the upper deck in 36 degrees plus temperatures it becomes very unpleasant. One bus we were on vibrated terribly when stopped and on one the downstairs air conditioning wasn’t working so had to change busses. Some pretty naff music between commentary’s.but at least we seen some of the sights of Sydney on the whole probably worth it</p>",
- "publishedDate": "2020-03-10",
- "ownerId": 58055945,
- "viatorFeedback": "",
- "reviewId": 71560191
}, - {
- "sortOrder": 9,
- "ownerName": "Kenneth B",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-02-28",
- "rating": 2,
- "review": "<p>2/25/20 in Sydney. Had seen the concept elsewhere and it seemed to be a good way to see the city. Waited 45 minutes for a bus to appear. Due to overwhelming volume they put an extra bus on the route so we actually were able to get on. Didn’t dare “hop off” because of the volume of people waiting at each stop (afraid we would not be able to get back on).</p>\n\n<p>The commentary was informative, but the large number of riders (and the small number of busses) broke the system. This was a pure miss. Probably won’t try to use it in other locations in the future.</p>",
- "publishedDate": "2020-02-28",
- "ownerId": 4675191,
- "viatorFeedback": "",
- "reviewId": 70922157
}, - {
- "sortOrder": 10,
- "ownerName": "2bmarples",
- "ownerCountry": null,
- "productTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "productUrlName": "Sydney-and-Bondi-Hop-on-Hop-off-Tour",
- "ownerAvatarURL": null,
- "sslSupported": false,
- "viatorNotes": "",
- "productCode": "5010SYDNEY",
- "submissionDate": "2020-02-28",
- "rating": 2,
- "review": "<p>I have used the HOHO Bus in major cities all over the world, and I can say the service in Sydney was the worst I have ever experienced. Much longer than posted wait times for buses, some stops up to double! Terrible customer service - left sitting on a bus at a stop for an hour waiting for another bus to come to fill up our bus. No communication as to why we were sitting there. When the second bus arrived only a couple of people actually boarded, the rest just got off and their business was empty. When we first got to the stop a second empty bus came along and parked infront of ours. Left again only half full. If we had been told we were going to sit there for an hour waiting, we could have easily boarded the half empty bus and been on our way. No communication at all so just sat there wasting time.</p>",
- "publishedDate": "2020-02-28",
- "ownerId": 26099892,
- "viatorFeedback": "",
- "reviewId": 70922111
}
], - "videos": null,
- "tourGrades": [
- {
- "sortOrder": 1,
- "currencyCode": "USD",
- "langServices": {
- "en/SERVICE_AUDIO": "English - Audio"
}, - "gradeCode": "24HOUR",
- "merchantNetPriceFrom": 0,
- "priceFrom": 34.3,
- "priceFromFormatted": "$34.30",
- "merchantNetPriceFromFormatted": "",
- "gradeTitle": "24 Hour Classic Ticket ",
- "gradeDescription": "Unlimited use on Big Bus Sydney & Bondi Hop-on Hop-off Tour for 24 hours from time of first use",
- "defaultLanguageCode": "en",
- "gradeDepartureTime": ""
}, - {
- "sortOrder": 2,
- "currencyCode": "USD",
- "langServices": {
- "en/SERVICE_AUDIO": "English - Audio"
}, - "gradeCode": "48HOUR",
- "merchantNetPriceFrom": 0,
- "priceFrom": 45.93,
- "priceFromFormatted": "$45.93",
- "merchantNetPriceFromFormatted": "",
- "gradeTitle": "48 Hour Premium Ticket ",
- "gradeDescription": "Duration: 2 days: FREE BONUS ENTRY to Sydney Tower with every Deluxe ticket end 31st March<br/>48 Hour Premium Ticket: Unlimited use on Big Bus Sydney & Bondi Tour for 48 hours from time of first use PLUS a guided walking tour of The Rocks, Syd",
- "defaultLanguageCode": "en",
- "gradeDepartureTime": ""
}, - {
- "sortOrder": 3,
- "currencyCode": "USD",
- "langServices": {
- "en/SERVICE_AUDIO": "English - Audio"
}, - "gradeCode": "DELUXE",
- "merchantNetPriceFrom": 0,
- "priceFrom": 63.95,
- "priceFromFormatted": "$63.95",
- "merchantNetPriceFromFormatted": "",
- "gradeTitle": "48 Hour Deluxe Bus and Cruise",
- "gradeDescription": "Big Bus and Habour Cruise: Combine two great Sydney experiences into one with a hop-on hop off Big Bus Tours and a hop-on hop-off Sydney Harbour cruise <br/>Duration: 2 days: FREE BONUS ENTRY to Sydney Tower with every Deluxe ticket end 31st March<br/>Complimentary Walking Tour: Complimentary English-speaking 90-minute guided walking tour of “The Rocks” historic and harbourside precinct.",
- "defaultLanguageCode": "en",
- "gradeDepartureTime": ""
}
], - "ageBands": [
- {
- "sortOrder": 1,
- "ageFrom": 16,
- "ageTo": 99,
- "adult": true,
- "bandId": 1,
- "pluralDescription": "Adults",
- "treatAsAdult": true,
- "description": "Adult",
- "count": 0
}, - {
- "sortOrder": 2,
- "ageFrom": 5,
- "ageTo": 15,
- "adult": false,
- "bandId": 2,
- "pluralDescription": "Children",
- "treatAsAdult": true,
- "description": "Child",
- "count": 0
}, - {
- "sortOrder": 3,
- "ageFrom": 0,
- "ageTo": 4,
- "adult": false,
- "bandId": 3,
- "pluralDescription": "Infants",
- "treatAsAdult": false,
- "description": "Infant",
- "count": 0
}
], - "bookingQuestions": [ ],
- "passengerAttributes": null,
- "highlights": null,
- "salesPoints": [ ],
- "ratingCounts": {
- "1": 39,
- "2": 102,
- "3": 199,
- "4": 504,
- "5": 777
}, - "termsAndConditions": "For a full refund, cancel at least 24 hours in advance of the start date of the experience.",
- "maxTravellerCount": 9,
- "itinerary": "",
- "destinationId": 357,
- "translationLevel": 0,
- "productPhotos": [
- {
- "caption": "Free Entry to Sydney Tower for a limited time",
- "path": "attractions-splice-spp-674x446/0a/9e/a0/9b.jpg",
- "supplier": "SUPPLIER"
}
], - "additionalInfo": [
- "Confirmation will be received at time of booking",
- "Wheelchair accessible",
- "When booking the 24 or 48 hour Family Pass, only the lead passenger name is required for a booking of up to 2 Adults and 2 children 16 years and under. At time of booking you only need to enter 1 adult to complete your booking",
- "Infants aged 0 to 4 years travel free of charge"
], - "voucherOption": "VOUCHER_E",
- "applePassSupported": true,
- "city": "Sydney",
- "departureTime": "See itinerary",
- "departureTimeComments": "",
- "departurePoint": "You may start this tour at any of the stops listed.",
- "specialOffer": "",
- "returnDetails": "You may disembark at any of the available stops.",
- "mapURL": null,
- "allTravellerNamesRequired": true,
- "operates": "<p>Daily</p>",
- "exclusions": [
- "Food and drinks",
- "Admission"
], - "description": "<b>Itinerary</b><br><br><p><strong>Red Route - Sydney Icons</strong></p><p>Route Duration: 2 hours</p><div>Stops on the Red Route - Sydney Icons:</div><ul><li>T Galleria x Petal met Sugar - Circular Quay, George St, cnr Alfred St. (opp DFS Galleria)</li>\n<li>Martin Place Station, Elizabeth St, Stand E - Sydney Tower/ Westfield</li>\n<li>1 William St - Australian Museum</li>\n<li>William St at Palmer St - William St, Kings Cross</li>\n<li>121 Darlinghurst Rd - Kings Cross Train Station on Darlinghurst Rd.</li>\n<li>123-125 MacLeay St - El Alamein Fountain</li>\n<li>2 Bourke St - Cowper Wharf Rd, outside the Woollomooloo Hotel</li>\n<li>2A Macquarie St - Sydney Opera House</li>\n<li>Macquarie Street - Botanical Garden, Scenic Walk to Mrs Macquarie Chair</li>\n<li>State Library of New South Wales - State Library</li>\n<li>Prince Albert Rd opp College St - Hyde Park</li>\n<li>Greyhound Australia - Central Station, Pitt Street, Bus Bay 18</li>\n<li>Powerhouse Museum, Harris St - Powerhouse Museum</li>\n<li>Fish Market - Harris St, cnr Pyrmont Bridge Rd</li>\n<li>Marquee Sydney - The Star Casino</li>\n<li>Maritime Museum</li>\n<li>ICC Sydney</li>\n<li>Chinese Garden of Friendship</li>\n<li>SEA LIFE Sydney Aquarium</li>\n<li>ibis Sydney King Street Wharf - Kings Street Wharf</li>\n<li>Hickson Road</li>\n<li>Dawes Point - Sydney Harbour Bridge</li>\n<li>The Rocks</li></ul><div>Attractions on the Red Route - Sydney Icons:</div><p>Hyde Park Barracks / Australian Museum / Sea Life Sydney Aquarium / Darling Harbour / The Rocks / Bondi Beach / Sydney Harbour Bridge / Royal Botanic Garden Sydney / Sydney Town Hall / Hyde Park / Circular Quay / City Sightseeing Sydney / Madame Tussauds Sydney / Big Bus Sydney / Sydney Tower Eye Observation Deck</p><p><i>Operates:</i> 1st bus departs from Stop 1 Circular Quay at 8.30am.\nFrequency every 20 minutes\nLast bus departs from stop 1 at 6.30pm</p><p><strong>Blue Route - Bondi Lifestyle</strong></p><p>Route Duration: 2 hours</p><div>Stops on the Blue Route - Bondi Lifestyle:</div><ul><li>492 Pitt St - Central Station, Pitt Street, Bus Bay 18</li>\n<li>1 William St - Australian Museum </li>\n<li>Paddington Town Hall, Oxford St</li>\n<li>Oxford St opp Moncur St</li>\n<li>Bondi Beach</li>\n<li>North Bondi Beach, Campbell Pde</li>\n<li>Rose Bay</li>\n<li>Double Bay</li></ul><div>Attractions on the Blue Route - Bondi Lifestyle:</div><p>Paddington Markets / Centennial Park / Bondi Beach / Rose Bay / Double Bay</p><p><i>Operates:</i> 1st bus departs from Stop 1 Circular Quay at 9.30am.\nFrequency every 30 minutes\nLast bus departs from stop 1 at 6.30pm</p>",
- "inclusions": [
- "Choice of 24 hour or 48 hour pass",
- "Pre-recorded commentary in English, French, Spanish, German, Italian, Mandarin, Japanese, Korean",
- "Free wifi onboard"
], - "location": "The Rocks, Australia",
- "country": "Australia",
- "region": "New South Wales",
- "shortDescription": "Explore Sydney and Bondi Beach on this hop-on hop-off sightseeing tour, which takes you by double-decker bus to 34 stops around the city including Sydney Opera House, Sydney Harbour Bridge, Darling Harbour, Bondi Beach and more. Enjoy unobstructed views and recorded commentary on board. Simply hop off to walk around and sightsee in depth. Your ticket is valid for 24 or 48 hours, so you can experience Sydney and Bondi's most noteworthy attractions, sights, and shopping and dining areas at your own pace.",
- "price": 34.3,
- "supplierCode": "5010",
- "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/94/40/f3.jpg",
- "primaryDestinationName": "Sydney",
- "priceFormatted": "$34.30",
- "rrp": 0,
- "rrpformatted": "",
- "videoCount": 1,
- "onSale": false,
- "photoCount": 124,
- "reviewCount": 1621,
- "primaryDestinationId": 357,
- "merchantNetPriceFrom": 0,
- "rating": 4.5,
- "specialOfferAvailable": false,
- "shortTitle": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "specialReservation": false,
- "merchantNetPriceFromFormatted": "",
- "savingAmount": 0,
- "savingAmountFormated": "",
- "essential": null,
- "admission": null,
- "duration": "2 hours",
- "title": "Big Bus Sydney and Bondi Hop-on Hop-off Tour",
- "code": "5010SYDNEY"
}, - "dateStamp": "2020-04-20T21:32:44+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331004"
}
seoId
) can be used as a means of searching for available products; for example, in the /search/products service.Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
destId | integer unique numeric identifier of the destination in which to search for attractions |
topX | string (topX) start and end rows to return in the format {start}-{end}
|
sortOrder | string Sort order for the results; one of:
|
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects |
{- "destId": 684,
- "topX": "1-3",
- "sortOrder": "RECOMMENDED"
}
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "pageUrlName": "Carroll-Shelby-Museum",
- "primaryDestinationUrlName": "Las-Vegas",
- "publishedDate": "2020-03-02",
- "destinationId": 684,
- "seoId": 23402,
- "productCount": 2,
- "primaryDestinationName": "Las Vegas",
- "photoCount": 0,
- "primaryDestinationId": 684,
- "rating": 5,
- "attractionLatitude": 36.072175,
- "attractionLongitude": -115.179668,
- "attractionStreetAddress": "6405 Ensworth St.",
- "attractionCity": "Las Vegas",
- "attractionState": "Nevada",
- "title": "Carroll Shelby Museum"
}, - {
- "sortOrder": 2,
- "pageUrlName": "Shark-Reef-Aquarium-at-Mandalay-Bay",
- "primaryDestinationUrlName": "Las-Vegas",
- "publishedDate": "2020-02-27",
- "destinationId": 684,
- "seoId": 14235,
- "productCount": 1,
- "primaryDestinationName": "Las Vegas",
- "photoCount": 14,
- "primaryDestinationId": 684,
- "rating": 4.5,
- "attractionLatitude": 36.09215,
- "attractionLongitude": -115.17665,
- "attractionStreetAddress": "3950 Las Vegas Blvd South",
- "attractionCity": "Las Vegas",
- "attractionState": "Nevada",
- "title": "Shark Reef Aquarium at Mandalay Bay"
}, - {
- "sortOrder": 3,
- "pageUrlName": "Welder-Up",
- "primaryDestinationUrlName": "Las-Vegas",
- "publishedDate": "2020-02-26",
- "destinationId": 684,
- "seoId": 24303,
- "productCount": 3,
- "primaryDestinationName": "Las Vegas",
- "photoCount": 0,
- "primaryDestinationId": 684,
- "rating": 4.5,
- "attractionLatitude": 36.133057,
- "attractionLongitude": -115.17419,
- "attractionStreetAddress": "3160 South Highland Drive, Suite D",
- "attractionCity": "Las Vegas",
- "attractionState": "Nevada",
- "title": "Welder Up"
}
], - "dateStamp": "2020-04-20T23:46:09+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 71,
- "errorMessageText": null,
- "vmid": "331001"
}
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects array of destination objects |
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "selectable": false,
- "destinationUrlName": "USA",
- "defaultCurrencyCode": "USD",
- "lookupId": "8.77",
- "parentId": 8,
- "timeZone": "America/New_York",
- "iataCode": null,
- "destinationId": 77,
- "destinationType": "COUNTRY",
- "destinationName": "USA",
- "latitude": 37.09024,
- "longitude": -95.712891
}, - {
- "sortOrder": 1,
- "selectable": true,
- "destinationUrlName": "Alabama",
- "defaultCurrencyCode": "USD",
- "lookupId": "8.77.22212",
- "parentId": 77,
- "timeZone": "",
- "iataCode": null,
- "destinationId": 22212,
- "destinationType": "REGION",
- "destinationName": "Alabama",
- "latitude": 32.34,
- "longitude": -86.26
}, - {
- "sortOrder": 2,
- "selectable": true,
- "destinationUrlName": "Alaska",
- "defaultCurrencyCode": "USD",
- "lookupId": "8.77.270",
- "parentId": 77,
- "timeZone": "America/Anchorage",
- "iataCode": null,
- "destinationId": 270,
- "destinationType": "REGION",
- "destinationName": "Alaska",
- "latitude": 63.588753,
- "longitude": -154.4930619
}, - {
- "sortOrder": 3,
- "selectable": true,
- "destinationUrlName": "Arizona",
- "defaultCurrencyCode": "USD",
- "lookupId": "8.77.271",
- "parentId": 77,
- "timeZone": "America/Phoenix",
- "iataCode": null,
- "destinationId": 271,
- "destinationType": "REGION",
- "destinationName": "Arizona",
- "latitude": 34.0489281,
- "longitude": -111.0937311
}, - {
- "sortOrder": 4,
- "selectable": true,
- "destinationUrlName": "Arkansas",
- "defaultCurrencyCode": "USD",
- "lookupId": "8.77.22213",
- "parentId": 77,
- "timeZone": "",
- "iataCode": null,
- "destinationId": 22213,
- "destinationType": "REGION",
- "destinationName": "Arkansas",
- "latitude": 35.2011,
- "longitude": -91.8318
}, - {
- "sortOrder": 5,
- "selectable": true,
- "destinationUrlName": "California",
- "defaultCurrencyCode": "USD",
- "lookupId": "8.77.272",
- "parentId": 77,
- "timeZone": "America/Los_Angeles",
- "iataCode": null,
- "destinationId": 272,
- "destinationType": "REGION",
- "destinationName": "California",
- "latitude": 36.778261,
- "longitude": -119.4179324
}
], - "dateStamp": "2020-04-20T23:56:25+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331001"
}
destId
, or you can omit the destId
to get a list of all categories and subcategoriesdestId
is passed, productCount
and thumbnailURL
will be null
as they are destination-specific fieldsdestId | integer Example: destId=684 unique numeric identifier of the destination to enquire about (optional)
|
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects array of category data objects |
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 1,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 1,
- "subcategoryName": "Air Tours",
- "subcategoryUrlName": "Air-Tours",
- "categoryId": 1
}, - {
- "sortOrder": 2,
- "subcategoryId": 2,
- "subcategoryName": "Helicopter Tours",
- "subcategoryUrlName": "Helicopter-Tours",
- "categoryId": 1
}, - {
- "sortOrder": 3,
- "subcategoryId": 3,
- "subcategoryName": "Balloon Rides",
- "subcategoryUrlName": "Balloon-Rides",
- "categoryId": 1
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/71/7c/7d.jpg",
- "productCount": 77,
- "groupName": "Air, Helicopter & Balloon Tours",
- "groupUrlName": "Air-Helicopter-and-Balloon-Tours",
- "id": 1
}, - {
- "sortOrder": 2,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 26052,
- "subcategoryName": "Yoga Classes",
- "subcategoryUrlName": "Yoga-Classes",
- "categoryId": 26051
}, - {
- "sortOrder": 2,
- "subcategoryId": 40290,
- "subcategoryName": "Language Classes",
- "subcategoryUrlName": "Language-Classes",
- "categoryId": 26051
}, - {
- "sortOrder": 3,
- "subcategoryId": 33259,
- "subcategoryName": "Glassblowing Classes",
- "subcategoryUrlName": "Glassblowing-Classes",
- "categoryId": 26051
}, - {
- "sortOrder": 4,
- "subcategoryId": 40286,
- "subcategoryName": "Art Classes",
- "subcategoryUrlName": "Art-Classes",
- "categoryId": 26051
}, - {
- "sortOrder": 5,
- "subcategoryId": 40293,
- "subcategoryName": "Sports Lessons",
- "subcategoryUrlName": "Sports-Lessons",
- "categoryId": 26051
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/0a/03/9e/ca.jpg",
- "productCount": 12,
- "groupName": "Classes & Workshops",
- "groupUrlName": "Classes-and-Workshops",
- "id": 26051
}, - {
- "sortOrder": 3,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 7,
- "subcategoryName": "Day Cruises",
- "subcategoryUrlName": "Day-Cruises",
- "categoryId": 3
}, - {
- "sortOrder": 2,
- "subcategoryId": 40295,
- "subcategoryName": "Water Tours",
- "subcategoryUrlName": "Water-Tours",
- "categoryId": 3
}, - {
- "sortOrder": 3,
- "subcategoryId": 9,
- "subcategoryName": "Night Cruises",
- "subcategoryUrlName": "Night-Cruises",
- "categoryId": 3
}, - {
- "sortOrder": 4,
- "subcategoryId": 5640,
- "subcategoryName": "Dinner Cruises",
- "subcategoryUrlName": "Dinner-Cruises",
- "categoryId": 3
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/e5/a3/54.jpg",
- "productCount": 22,
- "groupName": "Cruises, Sailing & Water Tours",
- "groupUrlName": "Cruises-Sailing-and-Water-Tours",
- "id": 3
}, - {
- "sortOrder": 4,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 40338,
- "subcategoryName": "LGBT Friendly Tours",
- "subcategoryUrlName": "LGBT-Friendly-Tours",
- "categoryId": 4
}, - {
- "sortOrder": 2,
- "subcategoryId": 11,
- "subcategoryName": "Cultural Tours",
- "subcategoryUrlName": "Cultural-Tours",
- "categoryId": 4
}, - {
- "sortOrder": 3,
- "subcategoryId": 14,
- "subcategoryName": "Literary, Art & Music Tours",
- "subcategoryUrlName": "Literary-Art-and-Music-Tours",
- "categoryId": 4
}, - {
- "sortOrder": 4,
- "subcategoryId": 26967,
- "subcategoryName": "Architecture Tours",
- "subcategoryUrlName": "Architecture-Tours",
- "categoryId": 4
}, - {
- "sortOrder": 5,
- "subcategoryId": 12,
- "subcategoryName": "Historical & Heritage Tours",
- "subcategoryUrlName": "Historical-and-Heritage-Tours",
- "categoryId": 4
}, - {
- "sortOrder": 6,
- "subcategoryId": 5332,
- "subcategoryName": "Archaeology Tours",
- "subcategoryUrlName": "Archaeology-Tours",
- "categoryId": 4
}, - {
- "sortOrder": 7,
- "subcategoryId": 13,
- "subcategoryName": "Movie & TV Tours",
- "subcategoryUrlName": "Movie-and-TV-Tours",
- "categoryId": 4
}, - {
- "sortOrder": 8,
- "subcategoryId": 118,
- "subcategoryName": "Ghost & Vampire Tours",
- "subcategoryUrlName": "Ghost-and-Vampire-Tours",
- "categoryId": 4
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/73/48/34.jpg",
- "productCount": 108,
- "groupName": "Cultural & Theme Tours",
- "groupUrlName": "Cultural-and-Theme-Tours",
- "id": 4
}, - {
- "sortOrder": 5,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 15,
- "subcategoryName": "Day Trips",
- "subcategoryUrlName": "Day-Trips",
- "categoryId": 5
}, - {
- "sortOrder": 2,
- "subcategoryId": 17,
- "subcategoryName": "Rail Tours",
- "subcategoryUrlName": "Rail-Tours",
- "categoryId": 5
}, - {
- "sortOrder": 3,
- "subcategoryId": 74,
- "subcategoryName": "Private Day Trips",
- "subcategoryUrlName": "Private-Day-Trips",
- "categoryId": 5
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/6b/77/2f.jpg",
- "productCount": 221,
- "groupName": "Day Trips & Excursions",
- "groupUrlName": "Day-Trips-and-Excursions",
- "id": 5
}, - {
- "sortOrder": 6,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 5325,
- "subcategoryName": "Coffee & Tea Tours",
- "subcategoryUrlName": "Coffee-and-Tea-Tours",
- "categoryId": 6
}, - {
- "sortOrder": 2,
- "subcategoryId": 32024,
- "subcategoryName": "Market Tours",
- "subcategoryUrlName": "Market-Tours",
- "categoryId": 6
}, - {
- "sortOrder": 3,
- "subcategoryId": 18,
- "subcategoryName": "Bar, Club & Pub Tours",
- "subcategoryUrlName": "Bar-Club-and-Pub-Tours",
- "categoryId": 6
}, - {
- "sortOrder": 4,
- "subcategoryId": 32027,
- "subcategoryName": "Street Food Tours",
- "subcategoryUrlName": "Street-Food-Tours",
- "categoryId": 6
}, - {
- "sortOrder": 5,
- "subcategoryId": 21,
- "subcategoryName": "Wine Tasting & Winery Tours",
- "subcategoryUrlName": "Wine-Tasting-and-Winery-Tours",
- "categoryId": 6
}, - {
- "sortOrder": 6,
- "subcategoryId": 5324,
- "subcategoryName": "Beer & Brewery Tours",
- "subcategoryUrlName": "Beer-and-Brewery-Tours",
- "categoryId": 6
}, - {
- "sortOrder": 7,
- "subcategoryId": 19,
- "subcategoryName": "Cooking Classes",
- "subcategoryUrlName": "Cooking-Classes",
- "categoryId": 6
}, - {
- "sortOrder": 8,
- "subcategoryId": 81,
- "subcategoryName": "Nightlife",
- "subcategoryUrlName": "Nightlife",
- "categoryId": 6
}, - {
- "sortOrder": 9,
- "subcategoryId": 20,
- "subcategoryName": "Dining Experiences",
- "subcategoryUrlName": "Dining-Experiences",
- "categoryId": 6
}, - {
- "sortOrder": 10,
- "subcategoryId": 80,
- "subcategoryName": "Food Tours",
- "subcategoryUrlName": "Food-Tours",
- "categoryId": 6
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/82/99/03.jpg",
- "productCount": 81,
- "groupName": "Food, Wine & Nightlife",
- "groupUrlName": "Food-Wine-and-Nightlife",
- "id": 6
}, - {
- "sortOrder": 7,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 78,
- "subcategoryName": "Kid Friendly Tours & Activities",
- "subcategoryUrlName": "Kid-Friendly-Tours-and-Activities",
- "categoryId": 21
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/71/1c/ee.jpg",
- "productCount": 3,
- "groupName": "Kid Friendly",
- "groupUrlName": "Kid-Friendly",
- "id": 21
}, - {
- "sortOrder": 8,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 113,
- "subcategoryName": "Luxury Tours",
- "subcategoryUrlName": "Luxury-Tours",
- "categoryId": 25
}, - {
- "sortOrder": 2,
- "subcategoryId": 114,
- "subcategoryName": "Romantic Tours",
- "subcategoryUrlName": "Romantic-Tours",
- "categoryId": 25
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/36/b1/dd.jpg",
- "productCount": 171,
- "groupName": "Luxury & Special Occasions",
- "groupUrlName": "Luxury-and-Special-Occasions",
- "id": 25
}, - {
- "sortOrder": 9,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 84,
- "subcategoryName": "Overnight Tours",
- "subcategoryUrlName": "Overnight-Tours",
- "categoryId": 20
}, - {
- "sortOrder": 2,
- "subcategoryId": 85,
- "subcategoryName": "Multi-day Tours",
- "subcategoryUrlName": "Multi-day-Tours",
- "categoryId": 20
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/73/32/1c.jpg",
- "productCount": 53,
- "groupName": "Multi-day & Extended Tours",
- "groupUrlName": "Multi-day-and-Extended-Tours",
- "id": 20
}, - {
- "sortOrder": 10,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 5322,
- "subcategoryName": "Running Tours",
- "subcategoryUrlName": "Running-Tours",
- "categoryId": 9
}, - {
- "sortOrder": 2,
- "subcategoryId": 5323,
- "subcategoryName": "Ziplines",
- "subcategoryUrlName": "Ziplines",
- "categoryId": 9
}, - {
- "sortOrder": 3,
- "subcategoryId": 32,
- "subcategoryName": "4WD, ATV & Off-Road Tours",
- "subcategoryUrlName": "4WD-ATV-and-Off-Road-Tours",
- "categoryId": 9
}, - {
- "sortOrder": 4,
- "subcategoryId": 26032,
- "subcategoryName": "Horseback Riding",
- "subcategoryUrlName": "Horseback-Riding",
- "categoryId": 9
}, - {
- "sortOrder": 5,
- "subcategoryId": 33264,
- "subcategoryName": "Obstacle Courses",
- "subcategoryUrlName": "Obstacle-Courses",
- "categoryId": 9
}, - {
- "sortOrder": 6,
- "subcategoryId": 36,
- "subcategoryName": "Nature & Wildlife",
- "subcategoryUrlName": "Nature-and-Wildlife",
- "categoryId": 9
}, - {
- "sortOrder": 7,
- "subcategoryId": 5319,
- "subcategoryName": "Climbing",
- "subcategoryUrlName": "Climbing",
- "categoryId": 9
}, - {
- "sortOrder": 8,
- "subcategoryId": 33,
- "subcategoryName": "Fishing Charters & Tours",
- "subcategoryUrlName": "Fishing-Charters-and-Tours",
- "categoryId": 9
}, - {
- "sortOrder": 9,
- "subcategoryId": 119,
- "subcategoryName": "Eco Tours",
- "subcategoryUrlName": "Eco-Tours",
- "categoryId": 9
}, - {
- "sortOrder": 10,
- "subcategoryId": 35,
- "subcategoryName": "Hiking & Camping",
- "subcategoryUrlName": "Hiking-and-Camping",
- "categoryId": 9
}, - {
- "sortOrder": 11,
- "subcategoryId": 87,
- "subcategoryName": "Adrenaline & Extreme",
- "subcategoryUrlName": "Adrenaline-and-Extreme",
- "categoryId": 9
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/6a/e4/ce.jpg",
- "productCount": 387,
- "groupName": "Outdoor Activities",
- "groupUrlName": "Outdoor-Activities",
- "id": 9
}, - {
- "sortOrder": 11,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 116,
- "subcategoryName": "Private Sightseeing Tours",
- "subcategoryUrlName": "Private-Sightseeing-Tours",
- "categoryId": 26
}, - {
- "sortOrder": 2,
- "subcategoryId": 117,
- "subcategoryName": "Custom Private Tours",
- "subcategoryUrlName": "Custom-Private-Tours",
- "categoryId": 26
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/fa/8e/cf.jpg",
- "productCount": 113,
- "groupName": "Private & Custom Tours",
- "groupUrlName": "Private-and-Custom-Tours",
- "id": 26
}, - {
- "sortOrder": 12,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 39,
- "subcategoryName": "Shopping Passes & Offers",
- "subcategoryUrlName": "Shopping-Passes-and-Offers",
- "categoryId": 10
}, - {
- "sortOrder": 2,
- "subcategoryId": 40,
- "subcategoryName": "Shopping Tours",
- "subcategoryUrlName": "Shopping-Tours",
- "categoryId": 10
}, - {
- "sortOrder": 3,
- "subcategoryId": 88,
- "subcategoryName": "Fashion Shows & Tours",
- "subcategoryUrlName": "Fashion-Shows-and-Tours",
- "categoryId": 10
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/0a/3d/2d/cc.jpg",
- "productCount": 11,
- "groupName": "Shopping & Fashion",
- "groupUrlName": "Shopping-and-Fashion",
- "id": 10
}, - {
- "sortOrder": 13,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 89,
- "subcategoryName": "Ports of Call Tours",
- "subcategoryUrlName": "Ports-of-Call-Tours",
- "categoryId": 24
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/71/a6/31.jpg",
- "productCount": 3,
- "groupName": "Shore Excursions",
- "groupUrlName": "Shore-Excursions",
- "id": 24
}, - {
- "sortOrder": 14,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 5111,
- "subcategoryName": "Cabaret",
- "subcategoryUrlName": "Cabaret",
- "categoryId": 11
}, - {
- "sortOrder": 2,
- "subcategoryId": 41,
- "subcategoryName": "Concerts & Special Events",
- "subcategoryUrlName": "Concerts-and-Special-Events",
- "categoryId": 11
}, - {
- "sortOrder": 3,
- "subcategoryId": 70,
- "subcategoryName": "Family-friendly Shows ",
- "subcategoryUrlName": "Family-friendly-Shows",
- "categoryId": 11
}, - {
- "sortOrder": 4,
- "subcategoryId": 124,
- "subcategoryName": "Cirque du Soleil",
- "subcategoryUrlName": "Cirque-du-Soleil",
- "categoryId": 11
}, - {
- "sortOrder": 5,
- "subcategoryId": 42,
- "subcategoryName": "Comedy",
- "subcategoryUrlName": "Comedy",
- "categoryId": 11
}, - {
- "sortOrder": 6,
- "subcategoryId": 91,
- "subcategoryName": "Adults-only Shows",
- "subcategoryUrlName": "Adults-only-Shows",
- "categoryId": 11
}, - {
- "sortOrder": 7,
- "subcategoryId": 44,
- "subcategoryName": "Theater, Shows & Musicals",
- "subcategoryUrlName": "Theater-Shows-and-Musicals",
- "categoryId": 11
}, - {
- "sortOrder": 8,
- "subcategoryId": 90,
- "subcategoryName": "Dinner Packages",
- "subcategoryUrlName": "Dinner-Packages",
- "categoryId": 11
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/6e/cf/d0.jpg",
- "productCount": 111,
- "groupName": "Shows, Concerts & Sports",
- "groupUrlName": "Shows-Concerts-and-Sports",
- "id": 11
}, - {
- "sortOrder": 15,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 29,
- "subcategoryName": "Attraction Tickets",
- "subcategoryUrlName": "Attraction-Tickets",
- "categoryId": 8
}, - {
- "sortOrder": 2,
- "subcategoryId": 93,
- "subcategoryName": "Zoo Tickets & Passes",
- "subcategoryUrlName": "Zoo-Tickets-and-Passes",
- "categoryId": 8
}, - {
- "sortOrder": 3,
- "subcategoryId": 30,
- "subcategoryName": "Sightseeing Passes",
- "subcategoryUrlName": "Sightseeing-Passes",
- "categoryId": 8
}, - {
- "sortOrder": 4,
- "subcategoryId": 31,
- "subcategoryName": "Museum Tickets & Passes",
- "subcategoryUrlName": "Museum-Tickets-and-Passes",
- "categoryId": 8
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/6f/f1/ee.jpg",
- "productCount": 47,
- "groupName": "Sightseeing Tickets & Passes",
- "groupUrlName": "Sightseeing-Tickets-and-Passes",
- "id": 8
}, - {
- "sortOrder": 16,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 5336,
- "subcategoryName": "Day Spas",
- "subcategoryUrlName": "Day-Spas",
- "categoryId": 5335
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/09/c5/a0/15.jpg",
- "productCount": 4,
- "groupName": "Spa Tours",
- "groupUrlName": "Spa-Tours",
- "id": 5335
}, - {
- "sortOrder": 17,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 50,
- "subcategoryName": "Theme Park Tickets & Tours",
- "subcategoryUrlName": "Theme-Park-Tickets-and-Tours",
- "categoryId": 14
}, - {
- "sortOrder": 2,
- "subcategoryId": 51,
- "subcategoryName": "Water Parks",
- "subcategoryUrlName": "Water-Parks",
- "categoryId": 14
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/71/dd/6a.jpg",
- "productCount": 11,
- "groupName": "Theme Parks",
- "groupUrlName": "Theme-Parks",
- "id": 14
}, - {
- "sortOrder": 18,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 99,
- "subcategoryName": "City Packages",
- "subcategoryUrlName": "City-Packages",
- "categoryId": 12
}, - {
- "sortOrder": 2,
- "subcategoryId": 120,
- "subcategoryName": "Vespa, Scooter & Moped Tours",
- "subcategoryUrlName": "Vespa-Scooter-and-Moped-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 3,
- "subcategoryId": 45,
- "subcategoryName": "Self-guided Tours & Rentals",
- "subcategoryUrlName": "Self-guided-Tours-and-Rentals",
- "categoryId": 12
}, - {
- "sortOrder": 4,
- "subcategoryId": 33282,
- "subcategoryName": "Trikke Tours",
- "subcategoryUrlName": "Trikke-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 5,
- "subcategoryId": 26961,
- "subcategoryName": "Vespa Rentals",
- "subcategoryUrlName": "Vespa-Rentals",
- "categoryId": 12
}, - {
- "sortOrder": 6,
- "subcategoryId": 5331,
- "subcategoryName": "Motorcycle Tours",
- "subcategoryUrlName": "Motorcycle-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 7,
- "subcategoryId": 5329,
- "subcategoryName": "Skip-the-Line Tours",
- "subcategoryUrlName": "Skip-the-Line-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 8,
- "subcategoryId": 32042,
- "subcategoryName": "Classic Car Tours",
- "subcategoryUrlName": "Classic-Car-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 9,
- "subcategoryId": 5330,
- "subcategoryName": "City Tours",
- "subcategoryUrlName": "City-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 10,
- "subcategoryId": 95,
- "subcategoryName": "Half-day Tours",
- "subcategoryUrlName": "Half-day-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 11,
- "subcategoryId": 98,
- "subcategoryName": "Bus & Minivan Tours",
- "subcategoryUrlName": "Bus-and-Minivan-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 12,
- "subcategoryId": 26963,
- "subcategoryName": "Audio Guided Tours",
- "subcategoryUrlName": "Audio-Guided-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 13,
- "subcategoryId": 46,
- "subcategoryName": "Segway Tours",
- "subcategoryUrlName": "Segway-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 14,
- "subcategoryId": 97,
- "subcategoryName": "Hop-on Hop-off Tours",
- "subcategoryUrlName": "Hop-on-Hop-off-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 15,
- "subcategoryId": 40336,
- "subcategoryName": "Fun and Games",
- "subcategoryUrlName": "Fun-and-Games",
- "categoryId": 12
}, - {
- "sortOrder": 16,
- "subcategoryId": 94,
- "subcategoryName": "Full-day Tours",
- "subcategoryUrlName": "Full-day-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 17,
- "subcategoryId": 32044,
- "subcategoryName": "Escape Games",
- "subcategoryUrlName": "Escape-Games",
- "categoryId": 12
}, - {
- "sortOrder": 18,
- "subcategoryId": 96,
- "subcategoryName": "Night Tours",
- "subcategoryUrlName": "Night-Tours",
- "categoryId": 12
}, - {
- "sortOrder": 19,
- "subcategoryId": 26028,
- "subcategoryName": "Photography Tours",
- "subcategoryUrlName": "Photography-Tours",
- "categoryId": 12
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/73/48/32.jpg",
- "productCount": 563,
- "groupName": "Tours & Sightseeing",
- "groupUrlName": "Tours-and-Sightseeing",
- "id": 12
}, - {
- "sortOrder": 19,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 52,
- "subcategoryName": "Airport & Ground Transfers",
- "subcategoryUrlName": "Airport-and-Ground-Transfers",
- "categoryId": 15
}, - {
- "sortOrder": 2,
- "subcategoryId": 32762,
- "subcategoryName": "Private Drivers",
- "subcategoryUrlName": "Private-Drivers",
- "categoryId": 15
}, - {
- "sortOrder": 3,
- "subcategoryId": 100,
- "subcategoryName": "Bus Services",
- "subcategoryUrlName": "Bus-Services",
- "categoryId": 15
}, - {
- "sortOrder": 4,
- "subcategoryId": 5526,
- "subcategoryName": "Private Transfers",
- "subcategoryUrlName": "Private-Transfers",
- "categoryId": 15
}, - {
- "sortOrder": 5,
- "subcategoryId": 40308,
- "subcategoryName": "Transportation Services",
- "subcategoryUrlName": "Transportation-Services",
- "categoryId": 15
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/2a/fc/74.jpg",
- "productCount": 74,
- "groupName": "Transfers & Ground Transport",
- "groupUrlName": "Transfers-and-Ground-Transport",
- "id": 15
}, - {
- "sortOrder": 20,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 50128,
- "subcategoryName": "Unique Experiences",
- "subcategoryUrlName": "Unique-Experiences",
- "categoryId": 50127
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/71/13/ef.jpg",
- "productCount": 40,
- "groupName": "Unique Experiences",
- "groupUrlName": "Unique-Experiences",
- "id": 50127
}, - {
- "sortOrder": 21,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 5327,
- "subcategoryName": "Viator Exclusive Tours",
- "subcategoryUrlName": "Viator-Exclusive-Tours",
- "categoryId": 5326
}, - {
- "sortOrder": 2,
- "subcategoryId": 5328,
- "subcategoryName": "Viator VIP Tours",
- "subcategoryUrlName": "Viator-VIP-Tours",
- "categoryId": 5326
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/e9/32/7c.jpg",
- "productCount": 9,
- "groupName": "Viator VIP & Exclusive Tours",
- "groupUrlName": "Viator-VIP-and-Exclusive-Tours",
- "id": 5326
}, - {
- "sortOrder": 22,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 55,
- "subcategoryName": "Bike & Mountain Bike Tours",
- "subcategoryUrlName": "Bike-and-Mountain-Bike-Tours",
- "categoryId": 16
}, - {
- "sortOrder": 2,
- "subcategoryId": 56,
- "subcategoryName": "Walking Tours",
- "subcategoryUrlName": "Walking-Tours",
- "categoryId": 16
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/ab/f7/38.jpg",
- "productCount": 63,
- "groupName": "Walking & Biking Tours",
- "groupUrlName": "Walking-and-Biking-Tours",
- "id": 16
}, - {
- "sortOrder": 23,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 27534,
- "subcategoryName": "White Water Rafting",
- "subcategoryUrlName": "White-Water-Rafting",
- "categoryId": 17
}, - {
- "sortOrder": 2,
- "subcategoryId": 27536,
- "subcategoryName": "Tubing",
- "subcategoryUrlName": "Tubing",
- "categoryId": 17
}, - {
- "sortOrder": 3,
- "subcategoryId": 57,
- "subcategoryName": "Kayaking & Canoeing",
- "subcategoryUrlName": "Kayaking-and-Canoeing",
- "categoryId": 17
}, - {
- "sortOrder": 4,
- "subcategoryId": 33290,
- "subcategoryName": "Float Trips",
- "subcategoryUrlName": "Float-Trips",
- "categoryId": 17
}, - {
- "sortOrder": 5,
- "subcategoryId": 40334,
- "subcategoryName": "Water Equipment",
- "subcategoryUrlName": "Water-Equipment",
- "categoryId": 17
}, - {
- "sortOrder": 6,
- "subcategoryId": 103,
- "subcategoryName": "Boat Rental",
- "subcategoryUrlName": "Boat-Rental",
- "categoryId": 17
}, - {
- "sortOrder": 7,
- "subcategoryId": 26033,
- "subcategoryName": "Stand Up Paddleboarding",
- "subcategoryUrlName": "Stand-Up-Paddleboarding",
- "categoryId": 17
}, - {
- "sortOrder": 8,
- "subcategoryId": 59,
- "subcategoryName": "Surfing & Windsurfing",
- "subcategoryUrlName": "Surfing-and-Windsurfing",
- "categoryId": 17
}, - {
- "sortOrder": 9,
- "subcategoryId": 107,
- "subcategoryName": "Jet Boats & Speed Boats",
- "subcategoryUrlName": "Jet-Boats-and-Speed-Boats",
- "categoryId": 17
}, - {
- "sortOrder": 10,
- "subcategoryId": 60,
- "subcategoryName": "Other Water Sports",
- "subcategoryUrlName": "Other-Water-Sports",
- "categoryId": 17
}, - {
- "sortOrder": 11,
- "subcategoryId": 104,
- "subcategoryName": "Waterskiing & Jetskiing",
- "subcategoryUrlName": "Waterskiing-and-Jetskiing",
- "categoryId": 17
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/70/2b/6e.jpg",
- "productCount": 38,
- "groupName": "Water Sports",
- "groupUrlName": "Water-Sports",
- "id": 17
}, - {
- "sortOrder": 24,
- "subcategories": [
- {
- "sortOrder": 1,
- "subcategoryId": 61,
- "subcategoryName": "Wedding Packages",
- "subcategoryUrlName": "Wedding-Packages",
- "categoryId": 18
}, - {
- "sortOrder": 2,
- "subcategoryId": 62,
- "subcategoryName": "Honeymoon Packages",
- "subcategoryUrlName": "Honeymoon-Packages",
- "categoryId": 18
}
], - "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/06/70/4a/0e.jpg",
- "productCount": 33,
- "groupName": "Weddings & Honeymoons",
- "groupUrlName": "Weddings-and-Honeymoons",
- "id": 18
}
], - "dateStamp": "2020-04-20T23:59:14+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331004"
}
Retrieves all the country codes that can be used for the billing country ccaddressCountryId
in the /booking/book service
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects array of countrymap objects |
{- "errorReference": null,
- "data": {
- "AF": {
- "countryId": "AF",
- "countryName": "Afghanistan",
- "phoneCode": "+93"
}, - "AX": {
- "countryId": "AX",
- "countryName": "Aland Islands",
- "phoneCode": "+358"
}, - "AL": {
- "countryId": "AL",
- "countryName": "Albania",
- "phoneCode": "+355"
}, - "DZ": {
- "countryId": "DZ",
- "countryName": "Algeria",
- "phoneCode": "+213"
}, - "AS": {
- "countryId": "AS",
- "countryName": "American Samoa",
- "phoneCode": "+1-684"
}, - "AD": {
- "countryId": "AD",
- "countryName": "Andorra",
- "phoneCode": "+376"
}, - "AO": {
- "countryId": "AO",
- "countryName": "Angola",
- "phoneCode": "+244"
}, - "AI": {
- "countryId": "AI",
- "countryName": "Anguilla",
- "phoneCode": "+1-264"
}, - "AQ": {
- "countryId": "AQ",
- "countryName": "Antarctica",
- "phoneCode": "+672"
}, - "AG": {
- "countryId": "AG",
- "countryName": "Antigua and Barbuda",
- "phoneCode": "+1-268"
}, - "AR": {
- "countryId": "AR",
- "countryName": "Argentina",
- "phoneCode": "+54"
}, - "AM": {
- "countryId": "AM",
- "countryName": "Armenia",
- "phoneCode": "+374"
}, - "AW": {
- "countryId": "AW",
- "countryName": "Aruba",
- "phoneCode": "+297"
}, - "AC": {
- "countryId": "AC",
- "countryName": "Ascension",
- "phoneCode": ""
}, - "AU": {
- "countryId": "AU",
- "countryName": "Australia",
- "phoneCode": "+61"
}, - "AT": {
- "countryId": "AT",
- "countryName": "Austria",
- "phoneCode": "+43"
}, - "AZ": {
- "countryId": "AZ",
- "countryName": "Azerbaijan",
- "phoneCode": "+994"
}, - "BS": {
- "countryId": "BS",
- "countryName": "Bahamas",
- "phoneCode": "+1-242"
}, - "BH": {
- "countryId": "BH",
- "countryName": "Bahrain",
- "phoneCode": "+973"
}, - "BD": {
- "countryId": "BD",
- "countryName": "Bangladesh",
- "phoneCode": "+880"
}, - "BB": {
- "countryId": "BB",
- "countryName": "Barbados",
- "phoneCode": "+1-246"
}, - "BY": {
- "countryId": "BY",
- "countryName": "Belarus",
- "phoneCode": "+375"
}, - "BE": {
- "countryId": "BE",
- "countryName": "Belgium",
- "phoneCode": "+32"
}, - "BZ": {
- "countryId": "BZ",
- "countryName": "Belize",
- "phoneCode": "+501"
}, - "BJ": {
- "countryId": "BJ",
- "countryName": "Benin",
- "phoneCode": "+229"
}, - "BM": {
- "countryId": "BM",
- "countryName": "Bermuda",
- "phoneCode": "+1-441"
}, - "BT": {
- "countryId": "BT",
- "countryName": "Bhutan",
- "phoneCode": "+975"
}, - "BO": {
- "countryId": "BO",
- "countryName": "Bolivia",
- "phoneCode": "+591"
}, - "BQ": {
- "countryId": "BQ",
- "countryName": "Bonaire",
- "phoneCode": "+599"
}, - "BA": {
- "countryId": "BA",
- "countryName": "Bosnia and Herzegovina",
- "phoneCode": "+387"
}, - "BW": {
- "countryId": "BW",
- "countryName": "Botswana",
- "phoneCode": "+267"
}, - "BV": {
- "countryId": "BV",
- "countryName": "Bouvet Island",
- "phoneCode": "+55"
}, - "BR": {
- "countryId": "BR",
- "countryName": "Brazil",
- "phoneCode": "+55"
}, - "IO": {
- "countryId": "IO",
- "countryName": "British Indian Ocean Territory",
- "phoneCode": "+246"
}, - "BN": {
- "countryId": "BN",
- "countryName": "Brunei Darussalam",
- "phoneCode": "+673"
}, - "BG": {
- "countryId": "BG",
- "countryName": "Bulgaria",
- "phoneCode": "+359"
}, - "BF": {
- "countryId": "BF",
- "countryName": "Burkina Faso",
- "phoneCode": "+226"
}, - "XX": {
- "countryId": "XX",
- "countryName": "Burma (refer to Myanmar)",
- "phoneCode": ""
}, - "BI": {
- "countryId": "BI",
- "countryName": "Burundi",
- "phoneCode": "+257"
}, - "CV": {
- "countryId": "CV",
- "countryName": "Cabo Verde",
- "phoneCode": "+238"
}, - "KH": {
- "countryId": "KH",
- "countryName": "Cambodia",
- "phoneCode": "+855"
}, - "CM": {
- "countryId": "CM",
- "countryName": "Cameroon",
- "phoneCode": "+237"
}, - "CA": {
- "countryId": "CA",
- "countryName": "Canada",
- "phoneCode": "+1"
}, - "BQN": {
- "countryId": "BQN",
- "countryName": "Caribbean Netherlands",
- "phoneCode": ""
}, - "KY": {
- "countryId": "KY",
- "countryName": "Cayman Islands",
- "phoneCode": "+1-345"
}, - "CF": {
- "countryId": "CF",
- "countryName": "Central African Republic",
- "phoneCode": "+236"
}, - "TD": {
- "countryId": "TD",
- "countryName": "Chad",
- "phoneCode": "+235"
}, - "CL": {
- "countryId": "CL",
- "countryName": "Chile",
- "phoneCode": "+56"
}, - "CN": {
- "countryId": "CN",
- "countryName": "China",
- "phoneCode": "+86"
}, - "CX": {
- "countryId": "CX",
- "countryName": "Christmas Island",
- "phoneCode": "+61"
}, - "CC": {
- "countryId": "CC",
- "countryName": "Cocos (Keeling) Islands",
- "phoneCode": "+61"
}, - "CO": {
- "countryId": "CO",
- "countryName": "Colombia",
- "phoneCode": "+57"
}, - "KM": {
- "countryId": "KM",
- "countryName": "Comoros",
- "phoneCode": "+269"
}, - "CK": {
- "countryId": "CK",
- "countryName": "Cook Islands",
- "phoneCode": "+682"
}, - "CR": {
- "countryId": "CR",
- "countryName": "Costa Rica",
- "phoneCode": "+506"
}, - "CI": {
- "countryId": "CI",
- "countryName": "Cote d'Ivoire",
- "phoneCode": "+225"
}, - "HR": {
- "countryId": "HR",
- "countryName": "Croatia",
- "phoneCode": "+385"
}, - "CW": {
- "countryId": "CW",
- "countryName": "Curacao",
- "phoneCode": "+599"
}, - "CY": {
- "countryId": "CY",
- "countryName": "Cyprus",
- "phoneCode": "+357"
}, - "CZ": {
- "countryId": "CZ",
- "countryName": "Czechia",
- "phoneCode": "+420"
}, - "DK": {
- "countryId": "DK",
- "countryName": "Denmark",
- "phoneCode": "+45"
}, - "DJ": {
- "countryId": "DJ",
- "countryName": "Djibouti",
- "phoneCode": "+253"
}, - "DM": {
- "countryId": "DM",
- "countryName": "Dominica",
- "phoneCode": "+1-767"
}, - "DO": {
- "countryId": "DO",
- "countryName": "Dominican Republic",
- "phoneCode": "+1-809"
}, - "EC": {
- "countryId": "EC",
- "countryName": "Ecuador",
- "phoneCode": "+593"
}, - "EG": {
- "countryId": "EG",
- "countryName": "Egypt",
- "phoneCode": "+20"
}, - "SV": {
- "countryId": "SV",
- "countryName": "El Salvador",
- "phoneCode": "+503"
}, - "GQ": {
- "countryId": "GQ",
- "countryName": "Equatorial Guinea",
- "phoneCode": "+240"
}, - "ER": {
- "countryId": "ER",
- "countryName": "Eritrea",
- "phoneCode": "+291"
}, - "EE": {
- "countryId": "EE",
- "countryName": "Estonia",
- "phoneCode": "+372"
}, - "ET": {
- "countryId": "ET",
- "countryName": "Ethiopia",
- "phoneCode": "+251"
}, - "FK": {
- "countryId": "FK",
- "countryName": "Falkland Islands",
- "phoneCode": "+500"
}, - "FO": {
- "countryId": "FO",
- "countryName": "Faroe Islands",
- "phoneCode": "+298"
}, - "FJ": {
- "countryId": "FJ",
- "countryName": "Fiji",
- "phoneCode": "+679"
}, - "FI": {
- "countryId": "FI",
- "countryName": "Finland",
- "phoneCode": "+358"
}, - "FR": {
- "countryId": "FR",
- "countryName": "France",
- "phoneCode": "+33"
}, - "GF": {
- "countryId": "GF",
- "countryName": "French Guiana",
- "phoneCode": "+594"
}, - "PF": {
- "countryId": "PF",
- "countryName": "French Polynesia",
- "phoneCode": "+689"
}, - "TF": {
- "countryId": "TF",
- "countryName": "French Southern Territories and Antarctic Lands",
- "phoneCode": "+262"
}, - "GA": {
- "countryId": "GA",
- "countryName": "Gabon",
- "phoneCode": "+241"
}, - "GM": {
- "countryId": "GM",
- "countryName": "Gambia",
- "phoneCode": "+220"
}, - "GE": {
- "countryId": "GE",
- "countryName": "Georgia",
- "phoneCode": "+995"
}, - "DE": {
- "countryId": "DE",
- "countryName": "Germany",
- "phoneCode": "+49"
}, - "GH": {
- "countryId": "GH",
- "countryName": "Ghana",
- "phoneCode": "+233"
}, - "GI": {
- "countryId": "GI",
- "countryName": "Gibraltar",
- "phoneCode": "+350"
}, - "GR": {
- "countryId": "GR",
- "countryName": "Greece",
- "phoneCode": "+30"
}, - "GL": {
- "countryId": "GL",
- "countryName": "Greenland",
- "phoneCode": "+299"
}, - "GD": {
- "countryId": "GD",
- "countryName": "Grenada",
- "phoneCode": "+1-473"
}, - "GP": {
- "countryId": "GP",
- "countryName": "Guadeloupe",
- "phoneCode": "+590"
}, - "GU": {
- "countryId": "GU",
- "countryName": "Guam",
- "phoneCode": "+1-671"
}, - "GT": {
- "countryId": "GT",
- "countryName": "Guatemala",
- "phoneCode": "+502"
}, - "GG": {
- "countryId": "GG",
- "countryName": "Guernsey",
- "phoneCode": "+44-1481"
}, - "GN": {
- "countryId": "GN",
- "countryName": "Guinea",
- "phoneCode": "+224"
}, - "GW": {
- "countryId": "GW",
- "countryName": "Guinea-Bissau",
- "phoneCode": "+245"
}, - "GY": {
- "countryId": "GY",
- "countryName": "Guyana",
- "phoneCode": "+592"
}, - "HT": {
- "countryId": "HT",
- "countryName": "Haiti",
- "phoneCode": "+509"
}, - "HM": {
- "countryId": "HM",
- "countryName": "Heard Island and McDonald Islands",
- "phoneCode": "+61"
}, - "VA": {
- "countryId": "VA",
- "countryName": "Holy See (Vatican City State)",
- "phoneCode": "+379"
}, - "HN": {
- "countryId": "HN",
- "countryName": "Honduras",
- "phoneCode": "+504"
}, - "HK": {
- "countryId": "HK",
- "countryName": "Hong Kong",
- "phoneCode": "+852"
}, - "HU": {
- "countryId": "HU",
- "countryName": "Hungary",
- "phoneCode": "+36"
}, - "IS": {
- "countryId": "IS",
- "countryName": "Iceland",
- "phoneCode": "+354"
}, - "IN": {
- "countryId": "IN",
- "countryName": "India",
- "phoneCode": "+91"
}, - "ID": {
- "countryId": "ID",
- "countryName": "Indonesia",
- "phoneCode": "+62"
}, - "IQ": {
- "countryId": "IQ",
- "countryName": "Iraq",
- "phoneCode": ""
}, - "IE": {
- "countryId": "IE",
- "countryName": "Ireland",
- "phoneCode": "+353"
}, - "IM": {
- "countryId": "IM",
- "countryName": "Isle of Man",
- "phoneCode": "+44-1624"
}, - "IL": {
- "countryId": "IL",
- "countryName": "Israel",
- "phoneCode": "+972"
}, - "IT": {
- "countryId": "IT",
- "countryName": "Italy",
- "phoneCode": "+39"
}, - "JM": {
- "countryId": "JM",
- "countryName": "Jamaica",
- "phoneCode": "+1-876"
}, - "JP": {
- "countryId": "JP",
- "countryName": "Japan",
- "phoneCode": "+81"
}, - "JE": {
- "countryId": "JE",
- "countryName": "Jersey",
- "phoneCode": "+44-1534"
}, - "JO": {
- "countryId": "JO",
- "countryName": "Jordan",
- "phoneCode": "+962"
}, - "KZ": {
- "countryId": "KZ",
- "countryName": "Kazakhstan",
- "phoneCode": "+7"
}, - "KE": {
- "countryId": "KE",
- "countryName": "Kenya",
- "phoneCode": "+254"
}, - "KI": {
- "countryId": "KI",
- "countryName": "Kiribati",
- "phoneCode": "+686"
}, - "KW": {
- "countryId": "KW",
- "countryName": "Kuwait",
- "phoneCode": "+965"
}, - "KG": {
- "countryId": "KG",
- "countryName": "Kyrgyzstan",
- "phoneCode": "+996"
}, - "LA": {
- "countryId": "LA",
- "countryName": "Lao People's Democratic Republic",
- "phoneCode": "+856"
}, - "LV": {
- "countryId": "LV",
- "countryName": "Latvia",
- "phoneCode": "+371"
}, - "LB": {
- "countryId": "LB",
- "countryName": "Lebanon",
- "phoneCode": "+961"
}, - "LS": {
- "countryId": "LS",
- "countryName": "Lesotho",
- "phoneCode": "+266"
}, - "LR": {
- "countryId": "LR",
- "countryName": "Liberia",
- "phoneCode": "+231"
}, - "LY": {
- "countryId": "LY",
- "countryName": "Libya",
- "phoneCode": "+218"
}, - "LI": {
- "countryId": "LI",
- "countryName": "Liechtenstein",
- "phoneCode": "+423"
}, - "LT": {
- "countryId": "LT",
- "countryName": "Lithuania",
- "phoneCode": "+370"
}, - "LU": {
- "countryId": "LU",
- "countryName": "Luxembourg",
- "phoneCode": "+352"
}, - "MO": {
- "countryId": "MO",
- "countryName": "Macao",
- "phoneCode": "+853"
}, - "MK": {
- "countryId": "MK",
- "countryName": "Macedonia",
- "phoneCode": "+389"
}, - "MG": {
- "countryId": "MG",
- "countryName": "Madagascar",
- "phoneCode": "+261"
}, - "MW": {
- "countryId": "MW",
- "countryName": "Malawi",
- "phoneCode": "+265"
}, - "MY": {
- "countryId": "MY",
- "countryName": "Malaysia",
- "phoneCode": "+60"
}, - "MV": {
- "countryId": "MV",
- "countryName": "Maldives",
- "phoneCode": "+960"
}, - "ML": {
- "countryId": "ML",
- "countryName": "Mali",
- "phoneCode": "+223"
}, - "MT": {
- "countryId": "MT",
- "countryName": "Malta",
- "phoneCode": "+356"
}, - "MQ": {
- "countryId": "MQ",
- "countryName": "Martinique",
- "phoneCode": "+596"
}, - "MR": {
- "countryId": "MR",
- "countryName": "Mauritania",
- "phoneCode": "+222"
}, - "MU": {
- "countryId": "MU",
- "countryName": "Mauritius",
- "phoneCode": "+230"
}, - "YT": {
- "countryId": "YT",
- "countryName": "Mayotte",
- "phoneCode": "+269"
}, - "MX": {
- "countryId": "MX",
- "countryName": "Mexico",
- "phoneCode": "+52"
}, - "FM": {
- "countryId": "FM",
- "countryName": "Micronesia",
- "phoneCode": "+691"
}, - "MD": {
- "countryId": "MD",
- "countryName": "Moldova",
- "phoneCode": "+373"
}, - "MC": {
- "countryId": "MC",
- "countryName": "Monaco",
- "phoneCode": "+377"
}, - "MN": {
- "countryId": "MN",
- "countryName": "Mongolia",
- "phoneCode": "+976"
}, - "ME": {
- "countryId": "ME",
- "countryName": "Montenegro",
- "phoneCode": "+382"
}, - "MS": {
- "countryId": "MS",
- "countryName": "Montserrat",
- "phoneCode": "+1-664"
}, - "MA": {
- "countryId": "MA",
- "countryName": "Morocco",
- "phoneCode": "+212"
}, - "MZ": {
- "countryId": "MZ",
- "countryName": "Mozambique",
- "phoneCode": "+258"
}, - "MM": {
- "countryId": "MM",
- "countryName": "Myanmar",
- "phoneCode": "+95"
}, - "NA": {
- "countryId": "NA",
- "countryName": "Namibia",
- "phoneCode": "+264"
}, - "NR": {
- "countryId": "NR",
- "countryName": "Nauru",
- "phoneCode": "+674"
}, - "NP": {
- "countryId": "NP",
- "countryName": "Nepal",
- "phoneCode": "+977"
}, - "NL": {
- "countryId": "NL",
- "countryName": "Netherlands",
- "phoneCode": "+31"
}, - "AN": {
- "countryId": "AN",
- "countryName": "Netherlands Antilles",
- "phoneCode": "+599"
}, - "NC": {
- "countryId": "NC",
- "countryName": "New Caledonia",
- "phoneCode": "+687"
}, - "NZ": {
- "countryId": "NZ",
- "countryName": "New Zealand",
- "phoneCode": "+64"
}, - "NI": {
- "countryId": "NI",
- "countryName": "Nicaragua",
- "phoneCode": "+505"
}, - "NE": {
- "countryId": "NE",
- "countryName": "Niger",
- "phoneCode": "+227"
}, - "NG": {
- "countryId": "NG",
- "countryName": "Nigeria",
- "phoneCode": "+234"
}, - "NU": {
- "countryId": "NU",
- "countryName": "Niue",
- "phoneCode": "+683"
}, - "NF": {
- "countryId": "NF",
- "countryName": "Norfolk Island",
- "phoneCode": "+672"
}, - "MP": {
- "countryId": "MP",
- "countryName": "Northern Mariana Islands",
- "phoneCode": "+1-670"
}, - "NO": {
- "countryId": "NO",
- "countryName": "Norway",
- "phoneCode": "+47"
}, - "OM": {
- "countryId": "OM",
- "countryName": "Oman",
- "phoneCode": "+968"
}, - "PK": {
- "countryId": "PK",
- "countryName": "Pakistan",
- "phoneCode": "+92"
}, - "PW": {
- "countryId": "PW",
- "countryName": "Palau",
- "phoneCode": "+680"
}, - "PS": {
- "countryId": "PS",
- "countryName": "Palestine, State of",
- "phoneCode": "+970"
}, - "PA": {
- "countryId": "PA",
- "countryName": "Panama",
- "phoneCode": "+507"
}, - "PG": {
- "countryId": "PG",
- "countryName": "Papua New Guinea",
- "phoneCode": "+675"
}, - "PY": {
- "countryId": "PY",
- "countryName": "Paraguay",
- "phoneCode": "+595"
}, - "PE": {
- "countryId": "PE",
- "countryName": "Peru",
- "phoneCode": "+51"
}, - "PH": {
- "countryId": "PH",
- "countryName": "Philippines",
- "phoneCode": "+63"
}, - "PN": {
- "countryId": "PN",
- "countryName": "Pitcairn",
- "phoneCode": "+64"
}, - "PL": {
- "countryId": "PL",
- "countryName": "Poland",
- "phoneCode": "+48"
}, - "PT": {
- "countryId": "PT",
- "countryName": "Portugal",
- "phoneCode": "+351"
}, - "PR": {
- "countryId": "PR",
- "countryName": "Puerto Rico",
- "phoneCode": "+1"
}, - "QA": {
- "countryId": "QA",
- "countryName": "Qatar",
- "phoneCode": "+974"
}, - "RE": {
- "countryId": "RE",
- "countryName": "Reunion",
- "phoneCode": "+262"
}, - "RO": {
- "countryId": "RO",
- "countryName": "Romania",
- "phoneCode": "+40"
}, - "RU": {
- "countryId": "RU",
- "countryName": "Russian Federation",
- "phoneCode": "+7"
}, - "RW": {
- "countryId": "RW",
- "countryName": "Rwanda",
- "phoneCode": "+250"
}, - "BQS": {
- "countryId": "BQS",
- "countryName": "Saba",
- "phoneCode": ""
}, - "SH": {
- "countryId": "SH",
- "countryName": "Saint Helena",
- "phoneCode": "+290"
}, - "KN": {
- "countryId": "KN",
- "countryName": "Saint Kitts and Nevis",
- "phoneCode": "+1-869"
}, - "LC": {
- "countryId": "LC",
- "countryName": "Saint Lucia",
- "phoneCode": "+1-758"
}, - "MF": {
- "countryId": "MF",
- "countryName": "Saint Martin",
- "phoneCode": "+590"
}, - "PM": {
- "countryId": "PM",
- "countryName": "Saint Pierre and Miquelon",
- "phoneCode": "+508"
}, - "WS": {
- "countryId": "WS",
- "countryName": "Samoa",
- "phoneCode": "+685"
}, - "SM": {
- "countryId": "SM",
- "countryName": "San Marino",
- "phoneCode": "+378"
}, - "ST": {
- "countryId": "ST",
- "countryName": "Sao Tome and Principe",
- "phoneCode": "+239"
}, - "SA": {
- "countryId": "SA",
- "countryName": "Saudi Arabia",
- "phoneCode": "+966"
}, - "SN": {
- "countryId": "SN",
- "countryName": "Senegal",
- "phoneCode": "+221"
}, - "RS": {
- "countryId": "RS",
- "countryName": "Serbia",
- "phoneCode": "+381"
}, - "YU": {
- "countryId": "YU",
- "countryName": "Serbia and Montenegro",
- "phoneCode": "+381"
}, - "SC": {
- "countryId": "SC",
- "countryName": "Seychelles",
- "phoneCode": "+248"
}, - "SL": {
- "countryId": "SL",
- "countryName": "Sierra Leone",
- "phoneCode": "+232"
}, - "SG": {
- "countryId": "SG",
- "countryName": "Singapore",
- "phoneCode": "+65"
}, - "SX": {
- "countryId": "SX",
- "countryName": "Sint Maarten",
- "phoneCode": "+1721"
}, - "SK": {
- "countryId": "SK",
- "countryName": "Slovakia",
- "phoneCode": "+421"
}, - "SI": {
- "countryId": "SI",
- "countryName": "Slovenia",
- "phoneCode": "+386"
}, - "SB": {
- "countryId": "SB",
- "countryName": "Solomon Islands",
- "phoneCode": "+677"
}, - "SO": {
- "countryId": "SO",
- "countryName": "Somalia",
- "phoneCode": "+252"
}, - "ZA": {
- "countryId": "ZA",
- "countryName": "South Africa",
- "phoneCode": "+27"
}, - "KR": {
- "countryId": "KR",
- "countryName": "South Korea",
- "phoneCode": "+82"
}, - "ES": {
- "countryId": "ES",
- "countryName": "Spain",
- "phoneCode": "+34"
}, - "LK": {
- "countryId": "LK",
- "countryName": "Sri Lanka",
- "phoneCode": "+94"
}, - "VC": {
- "countryId": "VC",
- "countryName": "St Vincent and Grenadines",
- "phoneCode": "+1-784"
}, - "SR": {
- "countryId": "SR",
- "countryName": "Suriname",
- "phoneCode": "+597"
}, - "SZ": {
- "countryId": "SZ",
- "countryName": "Swaziland",
- "phoneCode": "+268"
}, - "SE": {
- "countryId": "SE",
- "countryName": "Sweden",
- "phoneCode": "+46"
}, - "CH": {
- "countryId": "CH",
- "countryName": "Switzerland",
- "phoneCode": "+41"
}, - "TW": {
- "countryId": "TW",
- "countryName": "Taiwan",
- "phoneCode": "+886"
}, - "TJ": {
- "countryId": "TJ",
- "countryName": "Tajikistan",
- "phoneCode": "+992"
}, - "TZ": {
- "countryId": "TZ",
- "countryName": "Tanzania, United Republic of",
- "phoneCode": "+255"
}, - "TH": {
- "countryId": "TH",
- "countryName": "Thailand",
- "phoneCode": "+66"
}, - "TL": {
- "countryId": "TL",
- "countryName": "Timor-Leste",
- "phoneCode": "+670"
}, - "TG": {
- "countryId": "TG",
- "countryName": "Togo",
- "phoneCode": "+228"
}, - "TK": {
- "countryId": "TK",
- "countryName": "Tokelau",
- "phoneCode": "+690"
}, - "TO": {
- "countryId": "TO",
- "countryName": "Tonga",
- "phoneCode": "+676"
}, - "TT": {
- "countryId": "TT",
- "countryName": "Trinidad and Tobago",
- "phoneCode": "+1-868"
}, - "TN": {
- "countryId": "TN",
- "countryName": "Tunisia",
- "phoneCode": "+216"
}, - "TR": {
- "countryId": "TR",
- "countryName": "Turkey",
- "phoneCode": "+90"
}, - "TM": {
- "countryId": "TM",
- "countryName": "Turkmenistan",
- "phoneCode": "+993"
}, - "TC": {
- "countryId": "TC",
- "countryName": "Turks and Caicos Islands",
- "phoneCode": "+1-649"
}, - "TV": {
- "countryId": "TV",
- "countryName": "Tuvalu",
- "phoneCode": "+688"
}, - "UG": {
- "countryId": "UG",
- "countryName": "Uganda",
- "phoneCode": "+256"
}, - "UA": {
- "countryId": "UA",
- "countryName": "Ukraine",
- "phoneCode": "+380"
}, - "AE": {
- "countryId": "AE",
- "countryName": "United Arab Emirates",
- "phoneCode": "+971"
}, - "GB": {
- "countryId": "GB",
- "countryName": "United Kingdom",
- "phoneCode": "+44"
}, - "UM": {
- "countryId": "UM",
- "countryName": "United States Minor Outlying Islands",
- "phoneCode": "+1"
}, - "US": {
- "countryId": "US",
- "countryName": "United States of America",
- "phoneCode": "+1"
}, - "UY": {
- "countryId": "UY",
- "countryName": "Uruguay",
- "phoneCode": "+598"
}, - "UZ": {
- "countryId": "UZ",
- "countryName": "Uzbekistan",
- "phoneCode": "+998"
}, - "VU": {
- "countryId": "VU",
- "countryName": "Vanuatu",
- "phoneCode": "+678"
}, - "VE": {
- "countryId": "VE",
- "countryName": "Venezuela",
- "phoneCode": "+58"
}, - "VN": {
- "countryId": "VN",
- "countryName": "Viet Nam",
- "phoneCode": "+84"
}, - "VG": {
- "countryId": "VG",
- "countryName": "Virgin Islands (British)",
- "phoneCode": "+1-284"
}, - "VI": {
- "countryId": "VI",
- "countryName": "Virgin Islands (U.S.)",
- "phoneCode": "+1-340"
}, - "WF": {
- "countryId": "WF",
- "countryName": "Wallis and Futuna",
- "phoneCode": "+681"
}, - "YE": {
- "countryId": "YE",
- "countryName": "Yemen",
- "phoneCode": "+967"
}, - "ZM": {
- "countryId": "ZM",
- "countryName": "Zambia",
- "phoneCode": "+260"
}, - "ZW": {
- "countryId": "ZW",
- "countryName": "Zimbabwe",
- "phoneCode": "+263"
}
}, - "dateStamp": "2022-06-14T23:28:29+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331001"
}
Note: This service is included in this manual in order to draw attention to the fields that are exclusively relevant to affiliate partners with booking capabilities. i.e., 'transactional affiliates' and not 'content affiliates'. All other field descriptions have been removed for clarity. See the Affiliate partner technical manual for information about how to use this service.
This service gets attraction-related products (for cross-selling purposes)
Aliases:
seoId | integer Example: seoId=14235 n/a |
topX | string Example: topX=1-3 start and end rows to return in the format {start}-{end}
Note:
|
sortOrder | string Example: sortOrder=SEO_PRODUCT_TOP_SELLERS n/a |
currencyCode | string Example: currencyCode=EUR n/a |
Accept-Language required | string Specifies the language into which the natural-language fields in the response from this service will be translated (see Accept-Language header for available langage codes) |
errorReference | string reference number of this error |
dateStamp | string timestamp of this response |
errorType | string code specifying the type of error |
errorCodes | Array of strings array of error codes pertaining to this error
|
errorMessage | Array of arrays array of error message strings |
errorName | string name of this type of error |
success | boolean boolean indicator of this request's outcome
|
totalCount | integer number of results available for this service |
errorMessageText | string array of error message strings in plain text |
vmid | string unique numeric id of the server that processed this request |
Array of objects |
{- "errorReference": null,
- "data": [
- {
- "sortOrder": 2,
- "supplierName": "MGM Resorts International",
- "currencyCode": "USD",
- "catIds": null,
- "subCatIds": null,
- "specialReservationDetails": null,
- "sslSupported": false,
- "panoramaCount": 0,
- "merchantCancellable": false,
- "bookingEngineId": "FreesaleBE",
- "onRequestPeriod": null,
- "primaryGroupId": null,
- "pas": null,
- "available": true,
- "productUrlName": "Shark-Reef-at-Mandalay-Bay-Hotel-and-Casino",
- "primaryDestinationUrlName": "Las-Vegas",
- "price": 22.49,
- "specialOfferAvailable": false,
- "supplierCode": "5156",
- "shortTitle": "Shark Reef Aquarium at Mandalay Bay Hotel in Las Vegas",
- "translationLevel": 0,
- "thumbnailHiResURL": "https://hare-media-cdn.tripadvisor.com/media/attractions-splice-spp-674x446/07/01/34/63.jpg",
- "primaryDestinationName": "Las Vegas",
- "priceFormatted": "$22.49",
- "rrp": 0,
- "rrpformatted": "",
- "primaryDestinationId": 684,
- "merchantNetPriceFrom": 0,
- "onSale": false,
- "photoCount": 6,
- "reviewCount": 98,
- "videoCount": 0,
- "rating": 4.5,
- "specialReservation": false,
- "uniqueShortDescription": null,
- "merchantNetPriceFromFormatted": "",
- "savingAmount": 0,
- "savingAmountFormated": "",
- "essential": "1",
- "admission": "1",
- "shortDescription": "Marvel at the incredible Shark Reef Aquarium in the heart of the desert at Mandalay Bay Hotel and Casino on the Las Vegas Strip. Explore the 14 exhibits containing exotic and endangered fish, reptiles and — of course — sharks. Enjoy up-close views of more than 100 sharks, including 30 in the 1.3 million-gallon (4.9 million-liter) main tank, one of the largest in the US. By walking through two underwater tunnels, get an even better sense of what it's like to be under the sea.",
- "duration": "10 hours",
- "title": "Shark Reef at Mandalay Bay Hotel and Casino",
- "code": "5156SHARK"
}
], - "dateStamp": "2020-04-20T22:33:42+0000",
- "errorType": null,
- "errorCodes": [ ],
- "errorMessage": null,
- "errorName": null,
- "extraInfo": { },
- "extraObject": null,
- "success": true,
- "totalCount": 1,
- "errorMessageText": null,
- "vmid": "331002"
}