Digital contract signing is equivalent of signing of a physical contract. You would be able to sign using your mouse, pointer or digital pen on the screen of your computer itself.
While TravelBullz would be recording your IP ADRESS, LOCAITON , DATE & TIME STAMP for validity of this contract and registering your consent of your to the terms and conditions of TravelBullz HK Limited.
By signing and accepting the terms and conditions you undertake that you have the authority to sign on behalf of your company.
While Lots of Vacations would be recording your IP ADRESS, LOCAITON , DATE & TIME STAMP for validity of this contract and registering your consent of your to the terms and conditions of Lots of Vacations.
The purpose of this document is to provide technical details about the API's. This document outlines the business processes supported by the API and details about specifications of API’s. It assumes that reader has a technical background and is familiar with JSON, API's.
It is recommended that at least all booking and cancellation transactions sent through the Test / Live environment should be logged and maintained by the hotel agent for at least 6 months.
In order to start testing, please notify our support team via e-mail at apisupport@technoheaven.com
When you have completed your development, contact your Account Manager for the activation of the access IP address of Test/Live Server is essential for whitelisting
Once you receive your Access token, you can start the development of your application/framework. The whole process of communication consists of simple JSON messages exchange (request /response) between your application/framework and system. Each request needs to be posted (through POST method) using https protocols. For details regarding requests and answers formats please consult the dedicated area of each request. For further assistance in development process do not hesitate to contact our support team.
Before you go live you need to share pdf sample voucher after booking.
{ "code": "NOCOUNT_ERROR", "type": "GENERAL", "description": "No availability found for given criteria try search with other criteria" }
{ "code": "INTERNAL_ERROR", "type": "API_ERROR", "description": "the server was unable to process the request due to an internal error" }
The Countries API has been designed to provide All Countries data. The following sections describe the Countries API Request and Response Format.
{ "Token": "Token" }
{ "CountryId": "ID", "Name": "name" }, Example : "CountryId": "25773", "Name": "AFGHANISTAN"
The Hotel List Search API has been designed to provide list of all Hotels with display Minimum price for particular city. The following sections describe the Hotel List Search request and response format
{ "Token": “Token”, "Request": { "CountryId": "ID" } }
{ "CityId":ID, "Name": "NAME" } Example : "CityId":26467, "Name": "KABUL"
AllCitieswithCountry API has been designed to provide list of all cities with country .The following sections describe the AllCitieswithCountry in one API call request and response format.
{ "Token": "", "Request": { "onlyhotel": 0 } }
{ "cityid": ID, "cityname": "", "countryid": ID, "countryname": "" },
AllHotelsByCity API has been designed to provide list of all Hotel details for that particular City. The following sections describe the AllHotelsByCity API request and response format.
{ "Token":"Token" , "Request": { "CityId" : ID } }
{ "HotelId": ID, "HotelName": "", "Latitude": " ", "longitude": " ", "Address": " ", "Rating": " ", "IsRecomondedHotel": false },
The AllHotelsByCityFull API has been designed to provide All hotels basic data with city wise.The following sections describe the AllHotelsByCityFull API Request and Response Format.
{ "Token":"Token" }
{ "Count": " ", "HotelList": [ { "HotelId": " ", "HotelName": " ", "Description": "", "Latitude": " ", "Longitude": " ", "Address": " ", "Rating": " ", "CountryId": " ", "CountryName": " ", "CityId": " ", "CityName": " ", "HotelFrontImage": "", "IsRecomondedHotel": "FALSE", "IsActive": "", "UpdatedDate": "" } ] }
Example :{ "HotelList": [ { "HotelId": 100530, "HotelName": "A la Carte Danang", "Description": "-", "Latitude": "16.0687593", "Longitude": "108.24506140000005", "Address": "200 Vo Nguyen Giap Street, Son Tra District, Da Nang, Vietnam", "Rating": "4", "CountryId": 43240, "CountryName": "Vietnam", "CityId": 43261, "CityName": "Da Nang", "HotelFrontImage": "https://d2lzo8rjhr36c.cloudfront.net//Images/Dubai/100530/1-ThumbNail.jpg", "IsRecomondedHotel": "FALSE", "IsActive": "active" } ], "Count": 1 }
The Availability API has been designed to provide list of all Hotels The following sections describe the hotellistsearch API request and response format. Currency set up done only once account is created and you have to use that Currency for transaction with api.
{ "Token": "", "Request": { "Rooms": [ { "RoomNo": 1, "NoofAdults": 1, "NoOfChild": 1, "ChildAge": [ 1, 0 ] } ], "CityID": 1, "CheckInDate": "", "CheckOutDate": "", "NoofNights": 1, "Nationality": "", "Filters": { "IsRecommendedOnly": 0, "IsShowRooms": 1, "IsOnlyAvailable": 0, "StarRating": { "Min":0, "Max":5 }, "HotelIDs": "" } }, "AdvancedOptions": { "CustomerIpAddress": "11.111.111.111", "Currency": "" } }
{ "AvailabilityRS": { "SearchKey": "", "Count": 1, "Currency": "", "HotelResult": [ { "StartPrice": 0, "HotelId": 0, "HotelOption": [ { "HotelOptionId": "", "MinPrice": 0, "IsCombineRoom": true, "HotelRooms": [ [ { "RoomNo": "", "RoomTypeName": "", "MealName": "", "Price": 0, "BookingStatus": "", "RoomToken": "" } ] ] } ] } ] } }
As we have both direct inventories and dynamic rates also so for some cases you will receive combined room in multiple room search ,so for easy to identify these rates we have now added new parameter in availability response IsCombined (true,false) if its true then rooms are combined to one room .for example : if search is forrooms :2room 1 : 1 adultroom 2 : 2 adultthen id IsCombined =true that means both rooms are combined in one (roomNo: "1") ;if False : then you recieve list of rooms(RoomNo:1,RoomNo:2).and when you try to book such combined room you have to pass pax details separately for both the rooms.-For Essential information you need to hit CancellationPolicy/Multi API
The AvailabilityWithCancellation API has been designed to provide list of Hotels with cancellation policy. The following sections describe the hotellistsearch API request and response format. Currency set up done only once account is created and you have to use that Currency for transaction with api.
The CancellationPolicy for Hotel API has been designed to provide Price of cancellation for particular Room. The following section describes API request and response format.
{ "Token": "", "Request": { "SearchKey": "", "HotelOptionId": "", "RoomToken": "" }, "AdvancedOptions": { "CustomerIpAddress": "11.111.111.111", "Currency": "" } }
{ "Error": [], "CancellationRS": { "Currency": "", "EssentialInformation": "", "CancellationPolicy": [ { "FromDate": "", "ToDate": "", "CancellationPrice": 0 }, { "FromDate": "", "ToDate": "", "CancellationPrice": 4 } ] } }
The CancellationPolicyMulti for Hotel API has been designed to provide Price of cancellation for multiple Room in single request. The following section describes API request and response format.
{ "Token": "", "Request": { "SearchKey": "", "HotelOption": { "HotelOptionId": "", "HotelRooms": [ { "RoomNo": "1", "RoomToken": " " }, { "RoomNo": "2", "RoomToken": " " } ] } }, "AdvancedOptions": { "CustomerIpAddress": "11.111.111.111", "Currency": "USD" } }
{ "Error": [], "Currency": "MYR", "CancellationRS": [ { "RoomNo": " ", "RoomTypeName": " ", "MealName": " ", "EssentialInformation": " ", "CancellationPolicy": [ { "FromDate": " ", "ToDate": " ", "CancellationPrice": 0 }, { "FromDate": " ", "ToDate": " ", "CancellationPrice": } ] }, { "RoomNo": "2", "RoomTypeName": " ", "MealName": " ", "EssentialInformation": " ", "CancellationPolicy": [ { "FromDate": " ", "ToDate": " ", "CancellationPrice": 0 }, { "FromDate": " ", "ToDate": " ", "CancellationPrice": 0 } ] } ] }
The PreBook API has been designed to check availability status of booking before book. This API must hit once for one booking or you will get duplication error.The following section describes API request and response format. in case of isCombineRoom= true we are going to do one change in previous response we sending price = 0 in other rooms and in roomNo=1 we giving you total price , but in new response we divide price in each room Total price will not change.only price is divided inside room.
{ "Token": "", "Request": { "SearchKey": "", "HotelOption": { "HotelOptionId": "", "HotelRooms": [ { "RoomNo": "1", "RoomToken": "" } ] } }, "AdvancedOptions": { "CustomerIpAddress": "11.111.111.111", "Currency": "" } }
{ "PreBookRS": { "HotelOption": { "HotelName": "", "Nationality": "", "BookingToken": "", "Status": "Bookable", "IsPriceChange": 0, "CheckInDate": "", "CheckOutDate": "", "TotalPrice": 0, "HotelRooms": [ { "UniqueId": 0, "RoomNo": "1", "RoomTypeName": "", "MealName": "", "Price": 0, "PriceChange": { "OldPrice": 0, "NewPrice": 0 } } ] } }, "Currency": "" }
{ "Error": [], "PreBookRS": { "HotelOption": { "HotelName": "AVANI Deira Dubai Hotel", "Nationality": "malaysia", "BookingToken": "BookingToken" , "Status": "Bookable", "IsPriceChange": 0, "CheckInDate": "01-21-2020", "CheckOutDate": "01-22-2020", "TotalPrice": 522.38, "HotelRooms": [ { "UniqueId": 158841, "RoomNo": "1", "RoomTypeName": "2 X Single room ", "MealName": "Room Only", "Price": 261.19, "PriceChange": { "OldPrice": 0, "NewPrice": 0 } }, { "UniqueId": 158842, "RoomNo": "2", "RoomTypeName": "2 X Single room ", "MealName": "Room Only", "Price": 261.19, "PriceChange": { "OldPrice": 0, "NewPrice": 0 } } ] }, "Currency": "AED" } }
The Book API has been designed to give booking details .The following section describes API request and response format. After getting response or error in book response. you have to mandatory perform booking detail api to get the actual status of booking using your internal reference or reference number from Bookresponse.
{ "Token": "", "Request": { "SearchKey": "", "BookRQ": { "BookingToken": "", "TotalPrice": 90, "InternalReference": "", "HotelRooms": [ { "UniqueId": 44144, "RoomNo": 1, "IsLead": "1", "PaxType": "Adult", "Prefix": "Mr.", "FirstName": "IOS", "LastName": "Test", "ChildAge": "0" }, { "UniqueId": 44145, "RoomNo": 2, "IsLead": "1", "PaxType": "Adult", "Prefix": "Mrs.", "FirstName": "test", "LastName": "test", "ChildAge": "0" } ] } }, "AdvancedOptions": { "CustomerIpAddress": "11.111.111.111", "Currency": "USD" } }
{ "BookRS": { "BookingId": 0, "ReferenceNo": "1577MA011900115", "InternalReference": "animesh" } , "Currency": "" , "Error": [] }
API has been designed to Generate bookingDetails .The following section describes API request and response format. Only one ID can be passed. You can get booking details using either BookigID or your internalReference
{ "Token": "", "Request": { "BookingDetailRQ": { "BookingId": "0", "InternalReference": "", "ReferenceNo": "" } }, "AdvancedOptions": { "CustomerIpAddress": "11.111.111.111", "Currency": "" } }
{ "BookingDetailRS": { "HotelOption": { "HotelName": "", "HotelId": "", "Nationality": "", "BookingId": "", "InternalReference": "", "CheckInDate": "", "CheckOutDate": "", "BookingDate": "", "LeadPaxName": "", "TotalPrice": "", "HotelRooms": [ { "RoomNo": "", "RoomTypeName": "", "MealName": "", "Price": "", "BookingStatus": "Confirmed", "CancellationPolicy": [ { "FromDate": "", "ToDate": "", "CancellationPrice": 0 } ], "Passenger": [ { "IsLead": "", "PaxType": "", "Name": "", "ChildAge": "" } ] } ] } } , "Currency": "" , "Error": [] }
{ "Token": "", "Request": { "CheckHotelCancellationChargesRQ": { "BookingId": "0", "InternalReference": "", "ReferenceNo": "1577MA011900115" } }, "AdvancedOptions": { "CustomerIpAddress": "11.111.111.111", "Currency": "USD" } }
{ "CheckHotelCancellationChargesRS": { "HotelOption": { "BookingId": "", "TotalPrice": "", "TotalCharge": 0, "TotalRefund": "", "CancelCode": "", "HotelRooms": [ { "BookingDetailId": 0, "RoomTypeName": "", "Price": "", "RefundAmount": "" } ] } } , "Currency": "" , "Error": [] }
API has been designed to cancle booking .The following section describes API request and response format.
{ "Token": "", "Request": { "CancelRQ": { "BookingId": "", "BookingDetailId": "0", "CancelCode": "", "Reason": "" "CancelAll":1 } }, "AdvancedOptions": { "CustomerIpAddress": "11.111.111.111", "Currency": "USD" } }
{ "CancelRS": { "HotelOption": { "BookingId": "", "HotelRooms": [ { "RoomTypeName": "", "Message": "Hotel Cancelled Successfully!!!", "CancelStatus": 1 } ] } } , "Currency": "" , "Error": [] }
API has been designed to Generate bookingDetails .Date range allowed 31 days. The following section describes API request and response format.
{ "Token": "", "Request": { "BookingSearchRQ": { "SearchBy": "bookingdate", {bookingdate or checkindate}, "OnlyAPI":1, "SearchCriteria": { "Dates": { "FromDate": "03-19-2019", "ToDate": "04-19-2019" } } } }, "AdvancedOptions": { "Currency": "MYR" } }
{ "Error": [], "BookingSearchRS": { "BookingList": [ { "HotelName": "J", "HotelId": "1", "BookingId": , "InternalReference": "", "ReferenceNo": "AAA", "CheckInDate": "08-14-2019", "CheckOutDate": "08-15-2019", "BookingDate": "04-01-2019", "TotalPrice": 1, "BookingStatus": "cancelled", "IsAPI":true ,false } ], "Currency": "MYR" } }
Please go through certification process in order to get live access.
To ensure what API methods you are using, flow of method calls for these methods. This will help us to verify the integration.
Here we are providing a list of test cases needs to be executed .Request / response for these cases will be required for verification .
Technical team will verify the test cases using Request / Response and suggest if there is any change required.
After completion of step 3, you have to provide test link of your integration website to verify the integration flow.
On successful completion of all the above steps, we will give sign off and provide Live access details.
Notification