Currently more than 50% of Viator products contain booking questions, making the implementation of booking questions important to the development of a commercially successful implementation of our Merchant API.

In this guide, we cover:

What are booking questions

Structure of booking questions

Booking questions with units

Pickup point booking questions

Z

Booking questions with allowed answers

Conditional booking questions

Single arrival/departure mode

Sending answers to booking questions in the booking request

Examples of products with booking questions for testing

What are booking questions?

Booking questions must be answered to ensure the supplier has all the traveler details they require and are specified by the supplier when creating their product listing, and they expect those answers to be provided by the traveler at the time the booking is made. Valid answers to all specified booking questions ensure that all travelers are allowed to participate in their desired tour and all relevant requirements – as specified by our suppliers and tour operators– are met.

Booking questions applied at the product level and returned in the bookingQuestions array in the response from the main product content endpoints, for example (product 150373P11):

Example response for product 150373P11
“bookingQuestions”: [

“AGEBAND”,
“DATE_OF_BIRTH”,
“FULL_NAMES_FIRST”,
“FULL_NAMES_LAST”,
“PASSPORT_EXPIRY”,
“PASSPORT_NATIONALITY”,
“PASSPORT_PASSPORT_NO”,
“PICKUP_POINT”,
“SPECIAL_REQUIREMENTS”,
“TRANSFER_ARRIVAL_DROP_OFF”,
“TRANSFER_ARRIVAL_MODE”,
“TRANSFER_PORT_ARRIVAL_TIME”,
“TRANSFER_PORT_CRUISE_SHIP

],

The list of all (23) booking questions can be retrieved with the /products/booking-questions/ endpoint.

Structure of booking questions

All booking questions are returned in the API response from /products/booking-questions/ endpoint along with all relevant data that explains how to categorize them and what kind of responses are required.
Below is an example data object returned for the DATE_OF_BIRTH booking question:

Example data object returned for the DATE_OF_BIRTH booking question
{

“legacyBookingQuestionId”: 1,
“id”: “DATE_OF_BIRTH”,
“type”: “DATE”,
“group”: “PER_TRAVELER”,
“label”: “Date of birth”,
“required”: “MANDATORY”,
“maxLength”: 100

}

id and legacyBookingQuestionId fields

Each question returns an id as well as a legacyBookingQuestionId property that corresponds to the id assigned to the question in the legacy v1 API (to facilitate the mapping of booking questions for v1 API partners who switch to the v2 API).

group field

The group field indicates whether a separate answer to the booking question must be provided for each traveler in the group; or, just once for the entire group. The value of the group field indicates which of the two categories the question falls into; one of:

PER_TRAVELER

Mandatory to answer for each traveler, for example: WEIGHT, AGEBAND, FULL_NAMES_FIRST. PER_TRAVELER booking questions are not co-dependent – presence of one of them doesn’t mean that another PER_TRAVELER question applies. For example a product could ask the WEIGHT question but not FULL_NAMES_FIRST or FULL_NAMES_LAST. When answering PER_TRAVELER booking questions, it’s necessary to include travelerNum to indicate which traveler is the answer for.

For example:

{

“question”: “DATE_OF_BIRTH”,
“answer”: “18.02.1982”,
“travelerNum”: 2

}

PER_BOOKING

Mandatory to answer on a booking level, for example: TRANSFER_ARRIVAL_MODE, SPECIAL_REQUIREMENTS, TRANSFER_PORT_ARRIVAL_TIME. In case of PER_BOOKING booking questions, the answer should not include travelerNum.

For example:

{

“question”: “TRANSFER_DEPARTURE_DATE”,
“answer”: “20 July 2022”

}

required field

Some booking questions are mandatory to answer while others are not. Whether a booking question is mandatory is indicated by the the required field:

  • MANDATORY – it is always mandatory to provide an answer to this question
  • OPTIONAL – it is optional to provide an answer to this question (at the moment it applies only to SPECIAL_REQUIREMENTS question)
  • CONDITIONAL – it is only mandatory to answer this question if it is made so by the presence of a related booking question. Conditional booking questions are explained here.

type field

The type field specifies the type of answer that is required, one of:

  • STRING
  • NUMBER_AND_UNIT
  • DATE
  • TIME
  • LOCATION_REF_OR_FREE_TEXT

label  and  hint fields

To help your users understand what information is being requested of them, the /products/booking-questions/ endpoint returns a human-language version of each question that is intended to be displayed to the customer. This is found in thelabel property of each booking question item in the response. Some booking questions also include a hint as to what answer the user is expected to provide, intended for use in tool-tip functionality. For example, “First name” is the plain text label for the booking question FULL_NAMES_FIRST, and includes a hint as to what kind of answer is expected (“E.g. Central Station”).

Example label and hint fields
{

“legacyBookingQuestionId”: 20,
“id”: “TRANSFER_RAIL_ARRIVAL_STATION”,
“type”: “STRING”,
“group”: “PER_BOOKING”,
“label”: “Name of arrival station”,
“hint”: “E.g. Central Station”,
“required”“CONDITIONAL”,
“maxLength”: 255

},

These fields are translated into all languages available in the API, as determined by the Accept-Language header parameter.

maxLength field

Additionally, maxLength indicates the maximum length allowed for the answer, measured in characters (UTF-8).

Booking questions with units

Some booking questions require that the answer includes the type of unit in the case that without such information, the answer may be ambiguous. This applies to booking questions about height, weight, or conditional booking questions related to location.

The /products/booking-questions/ endpoint returns the accepted values that unit can take in the response in the units field:

Accepted unit values
{

“legacyBookingQuestionId”: 23,
“id”: “WEIGHT”,
“type”: “NUMBER_AND_UNIT”,
“group”: “PER_TRAVELER”,
“label”: “Traveler weight in pounds or kilograms (required for safety reasons)”,
“units”: [

“kg”,
“lbs”

],
“required”: “MANDATORY”,
“maxLength”: 50

},
{

“legacyBookingQuestionId”: 2,
“id”: “HEIGHT”,
“type”: “NUMBER_AND_UNIT”,
“group”: “PER_TRAVELER”,
“label”: “Traveler height in feet or centimeters (required for safety reasons)”,
“units”: [

“cm”,
“ft”

],
“required”: “MANDATORY”,
“maxLength”: 50

},

Both the WEIGHT and HEIGHT questions must be answered for each traveler, as stipulated by the group field having the value PER_TRAVELER. Below is an example of how the questions are asked on the Viator.com website:

booking questions with units

This is an example of how the answer sent in the /bookings/book response might look:

Example answer
“bookingQuestionAnswers”: [
{

“question”: “WEIGHT”,
“answer”: “70”,
“unit”: “kg”
“travelerNum”: 1

},
{

“question”: “WEIGHT”,
“answer”: “60”,
“unit”: “kg”
“travelerNum”: 2

}
]

Booking questions related to location with two unit types (LOCATION_REFERENCE, FREETEXT) are explained in the next section of this article.

Pickup point booking question

Products that offer a pickup service return the PICKUP_POINT booking question in the bookingQuestions array in product content response.

There are two ways to provide an answer to this question: either by sending a LOCATION_REFERENCE or FREETEXT. The FREETEXT is conditional – it is allowed only when logistics.travelerPickup.allowCustomTravelerPickup: true.

For example, product 40636P5 returns logistics.travelerPickup.allowCustomTravelerPickup: false which means that the answer to the PICKUP_POINT question can be sent only as LOCATION_REFERENCE – one of the location references included under logistics.travelerPickup.locations. For this product there are only two options (there is no limit of pickup locations that can be added per product):

Product 40636P5 example
“locations”: [

{

“location”: {

“ref”: “CONTACT_SUPPLIER_LATER”

},
“pickupType”: “OTHER”

},
{

“location”: {

“ref”: “LOC-6eKJ+or5y8o99Qw0C8xWyJ3xd6KZl4G4/s2J308iHgg=”

},
“pickupType”: “HOTEL”

}

],

We recommend creating a drop-down list of locations available for a specific pickup type by filtering the values of logistics.travelerPickup.locations[].pickupType. – i.e. when creating a list of hotels available for pickup it’s necessary to segregate out all locations with “pickupType”: “HOTEL”. Details of all location references can be retrieved with the /locations/bulk endpoint. Each location reference with “pickupType”: “HOTEL” returns the name of a hotel that could be displayed to the customer, for example:

Example response from /locations/bulk endpoint
{

“locations”: [

{

“provider”: “TRIPADVISOR”,
“reference”: “LOC-6eKJ+or5y8o99Qw0C8xWyJ3xd6KZl4G4/s2J308iHgg=”,
“name”: “Arenal Springs Resort and Spa”,
“address”: {

“street”: “7 Kms Al Oeste De La Fortuna Camino Hacia El Volcan Arenal”,
“administrativeArea”: “La Fortuna de San Carlos”,
“country”: “Costa Rica”,
“countryCode”: “CR”,
“postcode”: “60503”

},
“center”: {

“latitude”: 10.50317,
“longitude”: -84.682304

}

}

]

}

The answer below includes the hotel LOCATION_REFERENCE that would have to be sent in case that the customer desired hotel pickup for this product:

Example answer

“bookingQuestionAnswers”: [
{

“question”: “PICKUP_POINT”,
“answer”: “LOC-6eKJ+or5y8o99Qw0C8xWyJ3xd6KZl4G4/s2J308iHgg=”,
“unit”: “LOCATION_REFERENCE”

}

The image below is an example of the hotel drop-down list on Viator.com, showing multiple hotels available for pickup:

booking questions - hotel pickup options

The option “I don’t see my pickup location” at the top of the list in the example above is to allow the customer to specify a pickup location that is not in the list and needs to be available as a choice if the product supports a custom pickup location, which can be determined by the value of logistics.travelerPickup.allowCustomTravelerPickup being true. This means that the answer to the PICKUP_POINTquestion can contain an arbitrary string referred to as FREETEXT. Once selected, an additional freetext input field should be displayed so that the traveler can share details of the location from which they want to be picked up:

booking questions - custom hotel pickup

The FREETEXT answer can then be sent in the booking request in a similar way to the example below:

Example answer

{

“question”: “PICKUP_POINT”,
“answer”: “1234 Cedar Way, Brooklyn NY 00123”,
“unit”: “FREETEXT”

}

Another option the customer has is to inform the supplier at a later time about their desired pickup location. This option is available only when the following location reference is returned under logistics.travelerPickup.locations:

Example of CONTACT_SUPPLIER_LATER

{

“location”: {

“ref”: “CONTACT_SUPPLIER_LATER”

},
“pickupType”: “OTHER”

}

Below is an example of how travelers can choose this option when making a booking on Viator.com:

booking questions - pickup location later

If the customer were to select this option, the answer would be categorized as having a unitType of LOCATION_REFERENCE in the booking request in the following way:

Example of LOCATION_REFERENCE

“bookingQuestionAnswers”: [
{

“question”: “PICKUP_POINT”,
“answer”: “CONTACT_SUPPLIER_LATER”,
“unit”: “LOCATION_REFERENCE”

}

Communication between the customer and the supplier regarding pickup (or any other booking-related issues) is subject to the rules that apply to supplier communications. This topic is covered in greater detail in the supplier communications section of our API documentation.

Please note: Pickup is defined on a product option level. When a product offers pickup, this would be indicated by the value of logistics.travelerPickup.pickupOptionType being either PICKUP_EVERYONE or PICKUP_AND_MEET_AT_START_POINT. In the case that this value for a certain product is PICKUP_AND_MEET_AT_START_POINT, it is necessary to verify that this also applies to the product option the customer wishes to book by checking if the productOptions[].description field includes the phrase “Pickup included” (if not, pickup is not included for that product option).

For example, product 5516ST5 has four productOptions, three of which – TW5, TWT and TG2 – offer pickup, while one – TO – does not:

Example productOptions for product 5516ST5
“productOptions”: [

{

“productOptionCode”: “TG5”,
“description”: “Dinner at Bonefish Grill: Dinner is reserved at 6pm. See image carousel for menu. <br/>Tour Order: Make your own way to the restaurant. After dinner, you will be picked up for your flight and then returned to your hotel.<br/>Pickup included”,
“title”: “Bonefish Grill Dinner & Flight”,
“languageGuides”: [

{

“type”: “GUIDE”,
“language”: “en”,
“legacyGuide”: “en/SERVICE_GUIDE”

}

]

},
{

“productOptionCode”: “TWT”,
“description”: “VIP Night flight of the Las Vegas strip – Includes Transportation<br/>Pickup included”,
“title”: “Flight with Transport”,
“languageGuides”: [

{

“type”: “GUIDE”,
“language”: “en”,
“legacyGuide”: “en/SERVICE_GUIDE”

}

]

},
{

“productOptionCode”: “TG2”,
“description”: “Dinner at Pampas Brazillian: Dinner is reserved at 6pm. See image carousel for menu. <br/>Tour Order: Make your own way to the restaurant. After dinner, you will be picked up for your flight and then returned to your hotel.<br/>Pickup included”,
“title”: “Pampas Dinner then Flight”,
“languageGuides”: [

{

“type”: “GUIDE”,
“language”: “en”,
“legacyGuide”: “en/SERVICE_GUIDE”

}

]

},
{

“productOptionCode”: “TO”,
“description”: “Make your own way to Terminal: VIP Night flight of the Las Vegas strip – Self Drive option”,
“title”: “Self-Drive Option”,
“languageGuides”: [

{

“type”: “GUIDE”,
“language”: “en”,
“legacyGuide”: “en/SERVICE_GUIDE”

}

]

}

]

When a product option that does not include a pickup service for a product that requests the PICKUP_POINT question, the following answer should be sent:

Example answer
{

“question”: “PICKUP_POINT”,
“answer”: “MEET_AT_DEPARTURE_POINT”,
“unit”: “LOCATION_REFERENCE”

}

Booking questions with allowed answers

Three of the booking questions impose a restriction with respect to how they may be answered. To be valid, the answer must be one of the options included in the allowedAnswers list. This applies to the AGEBAND, TRANSFER_ARRIVAL_MODE and TRANSFER_DEPARTURE_MODE questions.

AGEBAND

The answer to the AGEBAND question must be one of the following allowed answers:

Allowed ageband answers

“allowedAnswers”: [

“ADULT”,
“SENIOR”,
“YOUTH”,
“CHILD”,
“INFANT”,
“TRAVELER”

],

This is because we have a closed list of 6 age bands that are available in the Viator system that suppliers must select from, rather than being allowed to define these categories arbitrarily. When the AGEBAND question is included for a product, it must be answered for each traveler (PER_TRAVELER ) and the answer can include only one of the age bands returned for that product in the response from the product content endpoints. The passenger mix given in response to this booking question must also correspond to the passenger mix used to create the booking hold when adhering to that workflow. For example, if a booking hold was placed for a passenger mix of two adults and one child, the answers to this booking question must be “ADULT”,“ADULT”, and “CHILD”, respectively, for each of the three travelers.

Check out this article for more details about Viator age bands.

Example of how to include the answer to the AGEBAND question in the /bookings/book request:

Example answer to AGEBAND question

“bookingQuestionAnswers”: [

{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 1

},
{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 2

},
{

“question”: “AGEBAND”,
“answer”: “CHILD”,
“travelerNum”: 3

},
{

“question”: “AGEBAND”,
“answer”: “SENIOR”,
“travelerNum”: 4

}

]

TRANSFER_ARRIVAL_MODE and TRANSFER_DEPARTURE_MODE

The TRANSFER_ARRIVAL_MODE and TRANSFER_DEPARTURE_MODE questions are MANDATORY, and are usually returned for products that offer a pickup/drop-off service. There are 4 allowed answers to these questions:

Allowed answers to TRANSFER_ARRIVAL_MODE and TRANSFER_DEPARTURE_MODE

“allowedAnswers”: [

“AIR”,
“RAIL”,
“SEA”,
“OTHER”

],

The following is an example of a valid answer to the TRANSFER_ARRIVAL_MODE question:

Example answer to TRANSFER_ARRIVAL_MODE question:

“bookingQuestionAnswers”: [
{

“question”: “TRANSFER_DEPARTURE_MODE”,
“answer”: “AIR”

},

Please note: when TRANSFER_ARRIVAL_MODE or TRANSFER_DEPARTURE_MODE question is returned, a set of related conditional booking questions must be answered. In order to know what arrival/departure mode is available for the product it’s necessary to validate the values returned in the bookingQuestions array against the possible arrival/departure mode(s), as explained in the next section.

Conditional booking questions

The TRANSFER_ARRIVAL_MODE and TRANSFER_DEPARTURE_MODE booking questions are members of a special category of booking question that potentially makes the answering of other booking questions mandatory despite not having the MANDATORY designation, per the complex logic explained in the table below, which can also be found in the conditional booking questions section of our API documentation.

Conditional booking questions logic

Conditions:

  1. Rule applies only if logistics.travelerPickup.locations[] includes an item with pickupType: “AIRPORT”; or, if logistics.travelerPickup.allowCustomTravelerPickup is true. “PICKUP_POINT” answer must be a location for which pickupType is “AIRPORT” if answer to “TRANSFER_ARRIVAL_MODE” is “AIR”.
  2. Rule applies only if logistics.travelerPickup.locations[] includes an item with pickupType: “PORT”; or, if logistics.travelerPickup.allowCustomTravelerPickup is true. “PICKUP_POINT” answer must be a location for which pickupType is “PORT” if answer to “TRANSFER_ARRIVAL_MODE” is “SEA”.
  3. Rule applies only if logistics.travelerPickup.locations[] includes an item with pickupType: “HOTEL” or pickupType: “LOCATION”; or, if logistics.travelerPickup.allowCustomTravelerPickup is true.
  4. This question may only be answered “OTHER” if the answer to “TRANSFER_ARRIVAL_MODE” is also “OTHER”

Extra notes:

  • All “CONDITIONAL” booking questions that depend on the answer given to either “TRANSFER_ARRIVAL_MODE” or “TRANSFER_DEPARTURE_MODE” (i.e., those questions in the right-hand column in the table above) should be considered “MANDATORY” if they are stipulated in the “bookingQuestions” array of the product content response, and the respective transfer mode question is not stipulated. That is to say, for example, if “TRANSFER_AIR_ARRIVAL_AIRLINE” is present, but “TRANSFER_ARRIVAL_MODE” is absent from “bookingQuestions”, then “TRANSFER_AIR_ARRIVAL_AIRLINE” should be considered “MANDATORY”.
  • The “TRANSFER_PORT_CRUISE_SHIP” question is required to be answered when the customer’s response to either “TRANSFER_ARRIVAL_MODE” or “TRANSFER_DEPARTURE_MODE” is “SEA”; however, this question must only be answered once per booking. I.e., the answer for “TRANSFER_PORT_CRUISE_SHIP” pertains to both questions. There is no provision for the customer to specify different cruise ships for arrival and departure.
  • Please note that the inclusion of the “TRANSFER_ARRIVAL_MODE”, “TRANSFER_DEPARTURE_MODE” or their corollary conditional booking questions does not necessarily imply that pickup is offered for the product or product option being booked. It may be that these relate to another aspect of the service being offered; for example, an airport greeting product. Therefore, whether or not pickup is available should be determined at the product level by the value of logistics.travelerPickup.pickupOptionType being either “PICKUP_EVERYONE” or “PICKUP_AND_MEET_EVERYONE_AT_START_POINT” and not “MEET_EVERYONE_AT_START_POINT”; or, the presence of the phrase “pickup included” in the productOptions[].description field for the product option.

The logic above must be hard-coded to ensure that all conditions are validated correctly.

Per the table above, conditional booking questions (first column to the right) apply only when a specific condition is met. For example, if you see the question TRANSFER_PORT_ARRIVAL_TIME returned under bookingQuestions, it means that the product supports pickup from the port (TRANSFER_ARRIVAL_MODE – SEA), when questions related to port arrival are not returned, this arrival mode is not supported.

It is important to note that the arrival and departure modes are configured separately for each product, which is to say that the presence of a specific arrival mode does not necessarily imply that the same departure mode is available for the product.

The process of working with conditional booking questions is as follows (using product 100014P4 as an example in this case):

1

Verify whether the pickup service is provided by checking the value returned for logistics.travelerPickup.pickupOptionType – in this case “pickupOptionType” is “PICKUP_EVERYONE”. When, “pickupOptionType” is “PICKUP_AND_MEET_AT_START_POINT”, you must verify which of the available product options include pickup by checking for the presence of the phrase “Pickup included” anywhere in the productOptions[].description field).

2

Identify the available arrival/departure modes and their associated conditional booking questions – by checking the values returned in the bookingQuestions array and grouping the booking questions based on the logic from the conditional booking questions table in the Conditional booking questions section of our API documentation:

Booking questions response

“bookingQuestions”: [

“AGEBAND”,
“DATE_OF_BIRTH”,
“FULL_NAMES_FIRST”,
“FULL_NAMES_LAST”,
“PASSPORT_EXPIRY”,
“PASSPORT_NATIONALITY”,
“PASSPORT_PASSPORT_NO”,
“PICKUP_POINT”,
“SPECIAL_REQUIREMENTS”,
“TRANSFER_AIR_ARRIVAL_AIRLINE”,
“TRANSFER_AIR_ARRIVAL_FLIGHT_NO”,
“TRANSFER_AIR_DEPARTURE_AIRLINE”,
“TRANSFER_AIR_DEPARTURE_FLIGHT_NO”,
“TRANSFER_ARRIVAL_DROP_OFF”,
“TRANSFER_ARRIVAL_MODE”,
“TRANSFER_ARRIVAL_TIME”,
“TRANSFER_DEPARTURE_DATE”,
“TRANSFER_DEPARTURE_MODE”,
“TRANSFER_DEPARTURE_PICKUP”,
“TRANSFER_DEPARTURE_TIME”,
“TRANSFER_PORT_ARRIVAL_TIME”,
“TRANSFER_PORT_CRUISE_SHIP”,
“TRANSFER_PORT_DEPARTURE_TIME”,
“TRANSFER_RAIL_ARRIVAL_LINE”,
“TRANSFER_RAIL_ARRIVAL_STATION”,
“TRANSFER_RAIL_DEPARTURE_LINE”,
“TRANSFER_RAIL_DEPARTURE_STATION”

],

This product’s booking questions include “TRANSFER_ARRIVAL_MODE” and “TRANSFER_DEPARTURE_MODE”; and, it offers four options for both: AIR, RAIL, SEA, and OTHER . This is because it returns conditional booking questions that correspond to each of these arrival/departure modes.

3

Get the locations available for pickup from each arrival mode based on the values returned under logistics.travelerPickup.locations[].pickupType.

Please note: the following options for pickupType are currently available:

  • AIRPORT – the location is an airport
  • HOTEL– the location is a hotel
  • PORT – the location is a sea port
  • LOCATION – the location is a specific address added by the supplier
  • OTHER – the location is not, in fact a location; rather, it is a pseudo-location, one of: MEET_AT_DEPARTURE_POINT, or CONTACT_SUPPLIER_LATER
4
Check if the pickup location can be sent as FREETEXT or only as LOCATION_REFERENCE by verifying the value returned for logistics.travelerPickup.allowCustomTravelerPickup(true = FREETEXT allowed).
5

Display the available options to the user and collect from them their answers. The recommended way to simplify answering this question for the customer is to minimize the simultaneous display of choices via a two-step method on the front-end:

Selection of the arrival/departure mode:

Collecting answers to relevant conditional booking questions for that arrival/departure mode:

booking questions - Collecting answers to relevant conditional booking questions

Please note: as indicated in the screenshot above, the drop down list of pickup locations (to answer the PICKUP_POINT question based on conditions 1-3 from the table) should include only locations within the pickupType array that comport with the selected TRANSFER_ARRIVAL_MODE (if that question happens to be requested for the product):

  • TRANSFER_ARRIVAL_MODE – AIR“pickupType”: “AIRPORT”
  • TRANSFER_ARRIVAL_MODE – SEA“pickupType”: “PORT”
  • TRANSFER_ARRIVAL_MODE – OTHER“pickupType”: “HOTEL” or “pickupType”: “LOCATION”

The TRANSFER_ARRIVAL_DROP_OFF and TRANSFER_DEPARTURE_PICKUP questions are related to locations (arrival drop off and departure pickup) however there are no specific location references or conditions that apply to these questions (see the table). Therefore customers should be provided with a freetext input field for these questions and the answers must include the FREETEXT designation if the customer answered freely, via text.

6

Send answers provided by the customer in the /bookings/book response (see the section Sending answers to booking questions in the booking request).

Important note: the presence of the TRANSFER_ARRIVAL_MODE, TRANSFER_DEPARTURE_MODE, or conditional booking questions doesn’t guarantee that the pickup/drop off service is provided. This is indicated by the value returned for logistics.travelerPickup.pickupOptionType (either PICKUP_EVERYONE or PICKUP_AND_MEET_AT_START_POINT).

It could happen that the product returns the TRANSFER_ARRIVAL_MODE, TRANSFER_DEPARTURE_MODE, or conditional booking questions but pickup/drop off is not offered – this is the case with product 5126P11 (Traditional Airport Lei Greeting on Honolulu Oahu) that returns:

Example response

“travelerPickup”: {

“pickupOptionType”: “MEET_EVERYONE_AT_START_POINT”,
“allowCustomTravelerPickup”: false

}

At the same time, these booking questions are returned in the API:

Booking questions

“bookingQuestions”: [

“AGEBAND”,
“FULL_NAMES_FIRST”,
“FULL_NAMES_LAST”,
“SPECIAL_REQUIREMENTS”,
“TRANSFER_AIR_ARRIVAL_AIRLINE”,
“TRANSFER_AIR_ARRIVAL_FLIGHT_NO”,
“TRANSFER_ARRIVAL_TIME”

],

This product is a traditional Hawaiian Lei Greeting at the airport and the supplier requested to know arrival details to easily find customers at the airport. However, the pickup service is not offered here.

Single arrival/departure mode

As stated in the section above, conditional booking questions apply when a relevant condition is met – a specific answer is provided to the arrival/departure mode question (TRANSFER_ARRIVAL_MODE and TRANSFER_DEPARTURE_MODE).

There is an exception to this rule – when only a single arrival/departure mode is available for the product. In such cases, the TRANSFER_ARRIVAL_MODE or TRANSFER_DEPARTURE_MODE are not returned and the conditional booking questions returned in the bookingQuestions array become MANDATORY.

For example, product 67515P79 has only one arrival mode – AIR and returns the following bookingQuestions that don’t include the TRANSFER_ARRIVAL_MODE question:

Booking questions returned for product 67515P79

“bookingQuestions”: [

“AGEBAND”,
“FULL_NAMES_FIRST”,
“FULL_NAMES_LAST”,
“PICKUP_POINT”,
“SPECIAL_REQUIREMENTS”,
“TRANSFER_AIR_ARRIVAL_AIRLINE”,
“TRANSFER_AIR_ARRIVAL_FLIGHT_NO”,
“TRANSFER_ARRIVAL_DROP_OFF”,
“TRANSFER_ARRIVAL_TIME”

],

If you try to send the answer to the TRANSFER_ARRIVAL_MODE question, you would receive the following error in the response:
Example error response

{

“code”: “BAD_REQUEST”,
“message”: “Excess answers provided: TRANSFER_ARRIVAL_MODE”,
“timestamp”: “2022-05-24T14:58:09.071744Z”,
“trackingId”: “B93D6004:22A6_0A5D03B2:01BB_628CF280_281C61:10D0”

}

An example of the correct way to send answers for that product is included here (Single arrival mode – AIR).

Sending answers to booking questions in the booking request

Answers to booking questions must be included in the bookingQuestionAnswers[] array in the request to /bookings/book endpoint.

The following rules apply:

  • All MANDATORY booking questions returned for the product must be answered.
  • Booking questions that belong to group PER_TRAVELER must be answered per each traveler individually by indicating travelerNum.
  • Booking questions that belong to group PER_BOOKING must be answered per booking, travelerNum must be omitted.
  • Booking questions with units must include the selected units in the answer and it has to be one of the units returned for that booking question in the /products/booking-questions/ response.
  • Each answer has a maximum length limit measured in characters (UTF-8) and specified in the maxLength field returned for each booking question in the /products/booking-questions/ response.
  • Answers to booking questions TRANSFER_ARRIVAL_DROP_OFF and TRANSFER_DEPARTURE_PICKUP should be sent as FREETEXT.

There is a validation in the API for the presence of answers to all MANDATORY and relevant CONDITIONAL booking questions in the /bookings/book request. However the API doesn’t validate the format of the answer (other than LOCATION_REFERENCE or FREETEXT). In case you’d like to make sure that correct answers are provided by customers (i.e. date of birth, arrival time), you need to restrict data input by using validation rules on your end.

If you are not able to support a specific booking question, you need to create an additional logic on your end to filter out products that include this booking question in the product content response.

Examples below illustrate how to send answers to booking questions for different scenarios:

Arrival mode - AIR, departure mode - AIR

{

“productCode”: “100014P4”,
“currency”: “USD”,
“partnerBookingRef”: “BR-58232755244”,
“travelDate”: “2022-06-15”,
“startTime”: “06:30”,
“paxMix”: [{

“ageBand”: “ADULT”,
“numberOfTravelers”: 2

}],
“bookerInfo”: {

“firstName”: “Viator”,
“lastName”: “Test”

},
“languageGuide”: {

“type”: “GUIDE”,
“language”: “en”

},
“bookingQuestionAnswers”: [{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 1

},
{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 2

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “13 July 1990”,
“travelerNum”: 1

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “18 August 1986”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “aaa”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “bbb”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “25 December 2026”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “17 February 2030”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “23456789”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “87654783”
“travelerNum”: 2

},
{

“question”: “TRANSFER_ARRIVAL_MODE”,
“answer”: “AIR”

},
{

“question”: “TRANSFER_AIR_ARRIVAL_AIRLINE”,
“answer”: “British Airways”

},
{

“question”: “TRANSFER_AIR_ARRIVAL_FLIGHT_NO”,
“answer”: “123”

},
{

“question”: “TRANSFER_ARRIVAL_DROP_OFF”,
“answer”: “xxx”,
“unit”: “FREETEXT”

},
{

“question”: “TRANSFER_ARRIVAL_TIME”,
“answer”: “6 am”

},
{

“question”: “PICKUP_POINT”,
“answer”: “airport”,
“unit”: “FREETEXT”

},
{

“question”: “TRANSFER_DEPARTURE_MODE”,
“answer”: “AIR”

},
{

“question”: “TRANSFER_AIR_DEPARTURE_AIRLINE”,
“answer”: “British Airways”

},
{

“question”: “TRANSFER_AIR_DEPARTURE_FLIGHT_NO”,
“answer”: “1234”

},
{

“question”: “TRANSFER_DEPARTURE_DATE”,
“answer”: “2022-06-15”

},
{

“question”: “TRANSFER_DEPARTURE_TIME”,
“answer”: “9 pm”

},
{

“question”: “TRANSFER_DEPARTURE_PICKUP”,
“answer”: “xxx”,
“unit”: “FREETEXT”

}
],

“communication”: {
“email”: “test@viator.com”,
“phone”: “+61 400580000”

}

}

Arrival mode - AIR, departure mode - OTHER

{

“productCode”: “100014P4”,
“currency”: “USD”,
“partnerBookingRef”: “BR-58232755245”,
“travelDate”: “2022-06-15”,
“startTime”: “06:30”,
“paxMix”: [{

“ageBand”: “ADULT”,
“numberOfTravelers”: 2

}],
“bookerInfo”: {

“firstName”: “Viator”,
“lastName”: “Test”

},
“languageGuide”: {

“type”: “GUIDE”,
“language”: “en”

},
“bookingQuestionAnswers”: [{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 1

},
{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 2

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “13 July 1990”,
“travelerNum”: 1

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “18 August 1986”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “aaa”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “bbb”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “25 December 2026”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “17 February 2030”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “23456789”,
“travelerNum”: 1

},
{

“question”:“PASSPORT_PASSPORT_NO”,
“answer”: “87654783”,
“travelerNum”: 2

},
{

“question”: “TRANSFER_ARRIVAL_MODE”,
“answer”: “AIR”

},
{

“question”: “TRANSFER_AIR_ARRIVAL_AIRLINE”,
“answer”: “British Airways”

},
{

“question”: “TRANSFER_AIR_ARRIVAL_FLIGHT_NO”,
“answer”: “123”

},
{

“question”: “TRANSFER_ARRIVAL_DROP_OFF”,
“answer”: “xxx”,
“unit”: “FREETEXT”

},
{

“question”: “TRANSFER_ARRIVAL_TIME”,
“answer”: “6 am”

},
{

“question”: “PICKUP_POINT”,
“answer”: “airport”,
“unit”: “FREETEXT”

},
{

“question”: “TRANSFER_DEPARTURE_MODE”,
“answer”: “OTHER”

}

],

“communication”: {

“email”: “test@viator.com”,
“phone”: “+61 400580000”

}

}

Arrival mode - OTHER (LOCATION_REFERENCE), departure mode - OTHER

{

“productCode”: “100014P4”,
“currency”: “USD”,
“partnerBookingRef”: “BR-58232755246”,
“travelDate”: “2022-06-15”,
“startTime”: “06:30”,
“paxMix”: [{

“ageBand”: “ADULT”,
“numberOfTravelers”: 2

}],
“bookerInfo”: {

“firstName”: “Viator”,
“lastName”: “Test”

},
“languageGuide”: {

“type”: “GUIDE”,
“language”: “en”

},
“bookingQuestionAnswers”: [{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum“: 1

},
{

“question”:“AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 2

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “13 July 1990”,
“travelerNum”: 1

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “18 August 1986”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “aaa”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “bbb”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “25 December 2026”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “17 February 2030”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “23456789”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “87654783”,
“travelerNum”: 2

},
{

“question”: “TRANSFER_ARRIVAL_MODE”,
“answer”: “OTHER”

},
{

“question”: “PICKUP_POINT”,
“answer”: “LOC-6eKJ+or5y8o99Qw0C8xWyJ0zYMrmLR5xph1Qlbm5Mtw=”,
“unit”: “LOCATION_REFERENCE”

},
{

“question”: “TRANSFER_DEPARTURE_MODE”,
“answer”: “OTHER”

}

],
“communication”: {

“email”: “test@viator.com”,
“phone”: “+61 400580000”

}

}

Arrival mode - OTHER (FREETEXT), departure mode - OTHER

{

“productCode”: “100014P4”,
“currency”: “USD”,
“partnerBookingRef”: “BR-58232755246”,
“travelDate”: “2022-06-15”,
“startTime”: “06:30”,
“paxMix”: [{

“ageBand”: “ADULT”,
“numberOfTravelers”: 2

}],
“bookerInfo”: {

“firstName”: “Viator”,
“lastName”: “Test”

},
“languageGuide”: {

“type”: “GUIDE”,
“language”: “en”

},
“bookingQuestionAnswers”: [{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum“: 1

},
{

“question”:“AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 2

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “13 July 1990”,
“travelerNum”: 1

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “18 August 1986”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “aaa”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “bbb”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “25 December 2026”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “17 February 2030”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “23456789”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “87654783”,
“travelerNum”: 2

},
{

“question”: “TRANSFER_ARRIVAL_MODE”,
“answer”: “OTHER”

},
{

“question”: “PICKUP_POINT”,
“answer”: “Hotel Mercure”,
“unit”: “FREETEXT”

},
{

“question”: “TRANSFER_DEPARTURE_MODE”,
“answer”: “OTHER”

}

],
“communication”: {

“email”: “test@viator.com”,
“phone”: “+61 400580000”

}

}

Arrival mode - SEA, departure mode - SEA

{

“productCode”: “100014P4”,
“currency”: “USD”,
“partnerBookingRef”: “BR-58232755248”,
“travelDate”: “2022-06-15”,
“startTime”: “06:30”,
“paxMix”: [{

“ageBand”: “ADULT”,
“numberOfTravelers”: 2

}],
“bookerInfo”: {

“firstName”: “Viator”,
“lastName”: “Test”

},
“languageGuide”: {

“type”: “GUIDE”,
“language”: “en”

},
“bookingQuestionAnswers”: [{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum“: 1

},
{

“question”:“AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 2

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “13 July 1990”,
“travelerNum”: 1

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “18 August 1986”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “aaa”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “bbb”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “25 December 2026”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “17 February 2030”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “23456789”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “87654783”,
“travelerNum”: 2

},
{

“question”: “TRANSFER_ARRIVAL_MODE”,
“answer”: “SEA”

},
{

“question”: “TRANSFER_PORT_CRUISE_SHIP”,
“answer”: “Sunny Days”,

},
{

“question”: “TRANSFER_ARRIVAL_DROP_OFF”,
“answer”: “xxx”
“unit”: “FREETEXT”

}
{

“question”: “TRANSFER_PORT_ARRIVAL_TIME”,
“answer”: “6 am”,

},
{

“question”: PICKUP_POINT,
“answer”: “port”
“unit”: “FREETEXT”

}
{

“question”: “TRANSFER_DEPARTURE_MODE”,
“answer”: “SEA”,

},
{

“question”: “TRANSFER_PORT_CRUISE_SHIP”,
“answer”: “Henry”,

},
{

“question”: “TRANSFER_DEPARTURE_DATE”,
“answer”: “2022-06-15”,

},
{

“question”: “TRANSFER_PORT_DEPARTURE_TIME”,
“answer”: “9 pm”,

},
{

“question”: “TRANSFER_DEPARTURE_PICKUP”,
“answer”: “xxx”
“unit”: “FREETEXT”

}

],
“communication”: {

“email”: “test@viator.com”,
“phone”: “+61 400580000”

}

}

Arrival mode - RAIL, departure mode - RAIL

{

“productCode”: “100014P4”,
“currency”: “USD”,
“partnerBookingRef”: “BR-58232755249”,
“travelDate”: “2022-06-15”,
“startTime”: “06:30”,
“paxMix”: [{

“ageBand”: “ADULT”,
“numberOfTravelers”: 2

}],
“bookerInfo”: {

“firstName”: “Viator”,
“lastName”: “Test”

},
“languageGuide”: {

“type”: “GUIDE”,
“language”: “en”

},
“bookingQuestionAnswers”: [{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum“: 1

},
{

“question”:“AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 2

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “13 July 1990”,
“travelerNum”: 1

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “18 August 1986”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “aaa”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “bbb”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “25 December 2026”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “17 February 2030”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “23456789”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “87654783”,
“travelerNum”: 2

},
{

“question”: “TRANSFER_ARRIVAL_MODE”,
“answer”: “RAIL”

},
{

“question”: “TRANSFER_RAIL_ARRIVAL_STATION”,
“answer”: “Central Station”,

},
{

“question”: “TRANSFER_ARRIVAL_DROP_OFF”,
“answer”: “xxx”
“unit”: “FREETEXT”

}
{

“question”: “TRANSFER_RAIL_ARRIVAL_LINE”,
“answer”: “Green Line”,

},
{

“question”: “TRANSFER_ARRIVAL_TIME”,
“answer”: “6 am”

}
{

“question”: “TRANSFER_DEPARTURE_MODE”,
“answer”: “RAIL”,

},
{

“question”: “TRANSFER_RAIL_DEPARTURE_LINE”,
“answer”: “Blue Line”,

},
{

“question”: “TRANSFER_RAIL_DEPARTURE_STATION”,
“answer”: “Central Station”,

},
{

“question”: “TRANSFER_DEPARTURE_TIME”,
“answer”: “9 pm”,

},
{

“question”: “TRANSFER_DEPARTURE_DATE”,
“answer”: 2022-06-15″,

},
{

“question”: “TRANSFER_DEPARTURE_PICKUP”,
“answer”: “xxx”
“unit”: “FREETEXT”

}

],
“communication”: {

“email”: “test@viator.com”,
“phone”: “+61 400580000”

}

}

Arrival mode - RAIL, departure mode - OTHER

{

“productCode”: “100014P4”,
“currency”: “USD”,
“partnerBookingRef”: “BR-58232755250”,
“travelDate”: “2022-06-15”,
“startTime”: “06:30”,
“paxMix”: [{

“ageBand”: “ADULT”,
“numberOfTravelers”: 2

}],
“bookerInfo”: {

“firstName”: “Viator”,
“lastName”: “Test”

},
“languageGuide”: {

“type”: “GUIDE”,
“language”: “en”

},
“bookingQuestionAnswers”: [{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum“: 1

},
{

“question”:“AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 2

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “13 July 1990”,
“travelerNum”: 1

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “18 August 1986”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “aaa”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “bbb”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “25 December 2026”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_EXPIRY”,
“answer”: “17 February 2030”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_NATIONALITY”,
“answer”: “Germany”,
“travelerNum”: 2

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “23456789”,
“travelerNum”: 1

},
{

“question”: “PASSPORT_PASSPORT_NO”,
“answer”: “87654783”,
“travelerNum”: 2

},
{

“question”: “TRANSFER_ARRIVAL_MODE”,
“answer”: “RAIL”

},
{

“question”: “TRANSFER_RAIL_ARRIVAL_STATION”,
“answer”: “Central Station”,

},
{

“question”: “TRANSFER_ARRIVAL_DROP_OFF”,
“answer”: “xxx”
“unit”: “FREETEXT”

}
{

“question”: “TRANSFER_RAIL_ARRIVAL_LINE”,
“answer”: “Green Line”,

},
{

“question”: “TRANSFER_ARRIVAL_TIME”,
“answer”: “6 am”

}
{

“question”: “TRANSFER_DEPARTURE_MODE”,
“answer”: “OTHER”,

},

],
“communication”: {

“email”: “test@viator.com”,
“phone”: “+61 400580000”

}

}

Single arrival mode - AIR

{

“productCode”: “67515P79”,
“currency”: “USD”,
“partnerBookingRef”: “BR-58232755251”,
“productOptionCode”: “TG1”,
“travelDate”: “2022-09-15”,
“startTime”: “14:30”,
“paxMix”: [{

“ageBand”: “ADULT”,
“numberOfTravelers”: 2

}],
“bookerInfo”: {

“firstName”: “Viator”,
“lastName”: “Test”

},
“bookingQuestionAnswers”: [{

“question”: “AGEBAND”,
“answer”: “ADULT”,
“travelerNum“: 1

},
{

“question”:“AGEBAND”,
“answer”: “ADULT”,
“travelerNum”: 2

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “13 July 1990”,
“travelerNum”: 1

},
{

“question”: “DATE_OF_BIRTH”,
“answer”: “18 August 1986”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “aaa”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_FIRST”,
“answer”: “bbb”,
“travelerNum”: 2

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 1

},
{

“question”: “FULL_NAMES_LAST”,
“answer”: “ccc”,
“travelerNum”: 2

},
{

“question”: “TRANSFER_AIR_ARRIVAL_AIRLINE”,
“answer”: “British Airways”,

},
{

“question”: “TRANSFER_AIR_ARRIVAL_FLIGHT_NO”,
“answer”: “123”,

},
{

“question”: “TRANSFER_ARRIVAL_DROP_OFF”,
“answer”: “xxx”,
“unit”: “FREETEXT”,

},
{

“question”: “TRANSFER_ARRIVAL_TIME”,
“answer”: “6 am”,

},
{

“question”: “PICKUP_POINT”,
“answer”: “LOC-6eKJ+or5y8o99Qw0C8xWyOwyWagMrwaEMavV5Cf95CY=”
“unit”: “LOCATION_REFERENCE”

}

],
“communication”: {

“email”: “test@viator.com”,
“phone”: “+61 400580000”

}

}

Examples of products with booking questions for testing*

Booking question or condition Product 1 Product 2 Product 3
FULL_NAMES_FIRST 100111P17 100042P1 100143P7
FULL_NAMES_LAST 100111P17 100042P1 100143P7
DATE_OF_BIRTH 100427P4 10123P22 101291P1
AGEBAND 100111P17 100042P1 100143P7
HEIGHT 100978P31 100042P1 101291P1
HEIGHT 100111P17 100427P4 101291P1
PASSPORT_ 101124P5 10123P22 101607P2
"pickupType": "HOTEL" 101124P5 101607P2 100143P7
"pickupType": "LOCATION" 101650P10 101036P42 10006P8
Custom pickup location allowed ("allowCustomTravelerPickup": true) 9966P46 101650P10 100143P7
Custom pickup location not allowed ("allowCustomTravelerPickup": false) 100427P4 101124P5 100825P4
TRANSFER_ARRIVAL_MODE - OTHER 101650P10 101607P2 100143P7
TRANSFER_ARRIVAL_MODE - AIR 100427P4 10123P96 101607P2
TRANSFER_ARRIVAL_MODE - SEA 101124P5 9966P46 9966P7
TRANSFER_ARRIVAL_MODE - RAIL 100273P23  100014P4  9895P69
TRANSFER_DEPARTURE_MODE - AIR 100014P4  101853P2 100014P10
TRANSFER_DEPARTURE_MODE - SEA 9966P46 100014P4  35811P5
TRANSFER_DEPARTURE_MODE - RAIL 100014P4  101853P2 100014P10
PICKUP_EVERYONE 100427P4 100014P10 100143P7
PICKUP_AND_MEET_AT_START_POINT 9966P46 101853P2 9966P46
MEET_EVERYONE_AT_START_POINT 10123P22 150418P1 43696P1
Single arrival mode 100427P4 9966P46 100825P4
Single departure mode 100544P1 101036P48 100167P2
Multiple arrival modes 100014P4  9895P69 100014P10
Multiple departure modes 100014P4  101853P2 100014P10

*Please note: products listed above are subject to change and we can’t guarantee that they will contain the same data in the future.

In case you need additional product examples for testing, or have any other questions, feel free to contact us at affiliateapi@tripadvisor.com.