Odigeo Connect Distributors API
Introduction & Guidelines
ODIGEO Connect is an API that allows access to every hotel available for booking.
This technical documentation includes API definitions & xml samples to guide you during the implementation of our various APIs.
The XMLs describe all our API services from top to bottom, following tag, @attribute, and child elements order.
Every element is classified as required / optional at each level, meaning that all @attributes defined as required are mandatory when using their correspondent tag element.
Best Practices
We strongly recommend NOT to send concurrent connections for the same property. Same property concurrent updates might lead to over-bookings.
We strongly recommend to optimize the requests sent (i.e. please use date ranges instead of updating the same data for individual dates). In this regard, it is advisable to always find a good balance between payload size and the number of requests/second.
Although our connectivity does not specify hard limits in regards of payload size or/and requests/second, we reserve the right to enforce them to any partner that does not comply with our best practices. As per our Terms and Conditions, please remember Odigeo Connect reserves the right to suspend or discontinue the access to our API if it is considered a partner puts the stability of our system at risk.
Glossary
Standard Terminology
Property
: A hotel, motel, inn, lodge or other accommodation facility.
Accommodation Type
: definition of each accommodation facility allowed by our API:
- Hotel
- Bed and breakfast
- Residence
- Apartment
- Hostel
- Guesthouse
- Resort
- Motel
- Apart-hotel
- Ryokan
POI Type
: definition of each Point Of Interest types offered by our API:
- 'POI': Generic POI
- 'nature': Nature related POI
- 'transportation': Transportation related POI
Facilities
Extra amenities provided by a property.
Format is "CategoryCode#facilitycode".
We allow the next facility list of codes:
- parkingAndTransportation#airportDropOff
- parkingAndTransportation#airportPickUp
- parkingAndTransportation#airportShuttle
- family#babysittingService
- activities#badmintonEquipment
- foodAndDrink#bar
- commonAreas#barberHairdresser
- foodAndDrink#bbqFacilities
- beach#beachAccess
- beach#beachBar
- beach#beachCabanas
- beach#beachCabins
- beach#beachRestaurant
- beach#beachTowels
- spaWellnessAndFitness#beautyServices
- parkingAndTransportation#bicycleHire
- activities#billiards
- businessFacilities#whiteboard
- spaWellnessAndFitness#bodyScrub
- spaWellnessAndFitness#bodyTreatments
- spaWellnessAndFitness#bodyWrap
- entertainment#booksDvdsOrMusicForChildren
- foodAndDrink#bottledWater
- activities#bowling
- activities#canoeing
- parkingAndTransportation#carHire
- entertainment#casino
- businessServices#catering
- foodAndDrink#childrenMeals
- family#childrenPlayground
- family#childrenPlaypen
- family#childrenTelevisionNetworks
- businessFacilities#computer
- receptionServices#concierge
- businessFacilities#copier
- receptionServices#currencyExchange
- activities#cycling
- cleaningServices#dailyMaidService
- activities#darts
- beach#deckChairs
- pool#deckChairs
- activities#diving
- businessFacilities#dvdPlayer
- receptionServices#earlyCheckIn
- entertainment#entertainmentStaff
- entertainment#eveningEntertainment
- spaWellnessAndFitness#facialTreatments
- businessFacilities#fax
- commonAreas#indoorFireplace
- activities#fishing
- spaWellnessAndFitness#fitnessFacilities
- commonAreas#gamesRoom
- commonAreas#garden
- commonAreas#souvenirGiftShop
- activities#golfCourse
- foodAndDrink#groceryDeliveries
- spaWellnessAndFitness#gym
- spaWellnessAndFitness#hairColouring
- spaWellnessAndFitness#hairCuts
- spaWellnessAndFitness#hairStyling
- spaWellnessAndFitness#hairTreatments
- spaWellnessAndFitness#hammam
- beach#hammocks
- pool#heatedPool
- internet#hiSpeed#rooms
- activities#hiking
- activities#horseRiding
- spaWellnessAndFitness#hotSpringBath
- pool#hotTubJacuzzi
- family#indoorPlayArea
- pool#indoorPool
- pool#infinityPool
- cleaningServices#ironingService
- entertainment#karaoke
- family#kidsClub
- pool#kidsPool
- businessFacilities#laptop
- receptionServices#lateCheckOut
- commonAreas#laundromat
- cleaningServices#laundry
- businessFacilities#projectorLcd
- commonAreas#library
- pool#lifeGuard
- building#lift
- beach#lockers
- pool#lockers
- spaWellnessAndFitness#lockers
- receptionServices#luggageStorage
- spaWellnessAndFitness#makeUpServices
- spaWellnessAndFitness#manicure
- spaWellnessAndFitness#massage
- activities#miniGolf
- commonAreas#miniMarket
- beach#nearbyPrivateBeach
- beach#nearbyPublicBeach
- receptionServices#newspapers
- entertainment#nightclubDj
- spaWellnessAndFitness#openAirBath
- pool#outdoorPool
- businessFacilities#projectorOverhead
- parkingAndTransportation#parkingGarage
- spaWellnessAndFitness#pedicure
- spaWellnessAndFitness#personalTrainer
- pool#poolBar
- pool#poolWithView
- businessServices#postParcelServices
- businessFacilities#printerBlackWhite
- beach#privateBeachAccess
- spaWellnessAndFitness#publicBath
- parkingAndTransportation#publicTransportTickets
- foodAndDrink#restaurant
- pool#rooftopPool
- foodAndDrink#roomService
- receptionServices#safetyDepositBox
- spaWellnessAndFitness#sauna
- businessFacilities#scanner
- businessServices#secretarialServices
- parkingAndTransportation#secureParking
- commonAreas#sharedKitchen
- commonAreas#sharedLoungeTvArea
- cleaningServices#shoeshine
- parkingAndTransportation#shuttleService
- ski#skiEquipmentHire
- ski#skiPassVendor
- ski#skiSchool
- ski#skiStorage
- ski#skiToDoorAccess
- businessFacilities#slideProjector
- activities#snorkelling
- activities#soccerField
- spaWellnessAndFitness#solarium
- spaWellnessAndFitness#spaAndWellnessCentre
- spaWellnessAndFitness#spaLounge
- businessFacilities#speakerphoneConferencePhone
- businessFacilities#speaker
- activities#squash
- businessServices#staffedBusinessCenter
- spaWellnessAndFitness#wattbikes
- spaWellnessAndFitness#steamRoom
- parkingAndTransportation#streetParking
- beach#sunLoungers
- pool#sunLoungers
- pool#sunUmbrellas
- pool#swimmingPool
- activities#tableTennis
- businessFacilities#telephone
- activities#tennisCourt
- commonAreas#terrace
- receptionServices#ticketDeskService
- receptionServices#tourDeskService
- pool#towels
- spaWellnessAndFitness#treadmills
- cleaningServices#trouserPress
- businessFacilities#tv
- beach#umbrellas
- parkingAndTransportation#valetParking
- foodAndDrink#vendingMachineSnacks
- entertainment#videoGames
- activities#volleyball
- activities#waterPark
- pool#waterSlide
- activities#waterSportFacilities
- spaWellnessAndFitness#waxingServices
- spaWellnessAndFitness#weightsBarsAndBenches
- foodAndDrink#welcomeDrink
- internet#wifi#rooms
- internet#wifi#businessCenter
- internet#wifi#commonAreas
- internet#wifi#outsideAreas
- activities#windsurfing
- spaWellnessAndFitness#yogaClasses
- internet#wifi#free
- parkingAndTransportation#freeparking
- parkingAndTransportation#freeairportShuttle
- reception#multilingualstaff
- rooms#familyrooms
- general#smokefreeproperty
- internet#wiredinternet
- business#meetingroom
- reception#bellboysersvice
- rooms#nonsmokingrooms
- rooms#heating
- foodAndDrink#breakfastavailable
- pool#Jacuzzi
- reception#atm
- reception#petsallowed
- rooms#airconditioning
- cleaningServices#drycleaning
- ski#skiing
- general#gayfriendly
- ski#tobogganing
- general#facilitiesdisabledguest
- general#designhotel
- general#rooftopterrace
- general#chapel
- activities#safari
- general#adultonly
- general#weddingservice
Cancellation Policies
: The first version of the Odigeo connect API will only accept
non-refundable cancellation policies (code value: 1).
Custom Types
There are a few OTA types / Odigeo Connect custom types that you will need to know in order to use the product API properly.
That are specific code/definitions that link concepts with codes.
You will find all of them described below.
Booking Channel Type
We are based on OTA Code List Booking Channel Type (BCT).
Value | Description |
---|---|
1 | Global distribution system (GDS) |
2 | Alternative distribution system (ADS) |
3 | Sales and catering system (SCS) |
4 | Property management system (PMS) |
5 | Central reservation system (CRS) |
6 | Tour operator system (TOS) |
7 | Internet |
8 | Kiosk |
9 | Agent |
Device Type
It is expected to use one of the next list.
Value | Description |
---|---|
NATIVE-SMARTPHONE | Access through Web App from a smartphone device |
WEB-DESKTOP | Access through Web Browser from a desktop device |
WEB-SMARTPHONE | Access through Web Browser from a smartphone device |
Sales Environment Touchpoint
It is expected to use one of the next list.
Value | Description |
---|---|
DYNPACK | Dynamic package touchpoint |
UPSELL | Upsell touchpoint |
STANDALONE | Hotel Standalone touchpoint |
POSTBOOKING | Post Trip-Booking Hotel touchpoint |
Sales Environment Customer Status
It is expected to use one of the next list.
Value | Description |
---|---|
NOT-LOGGED-IN | User is not logged in |
LOGGED-IN-NOT-PRIME | User is logged in but is not an eDreams Prime subscriber |
LOGGED-IN-PRIME | User is logged in and subscribed to eDreams Prime |
Age Categories
We are based on OTA descriptive code for age categories from OTA -2016B DESCRIPTIVE CODE TABLES(AQC).
From the whole OTA AQC list of age codes we are only using the following:
Code | Name |
---|---|
7 | Infant |
8 | Child |
10 | Adult |
*Note: AQC sent by the distributor might be transformed to another one due to supplier definition.
It will change at supplier request level but distributor response won't be affected by this transformation.
Meal Plan Type
We are based on OTA descriptive code for Meal Plan Type from OTA -2016B DESCRIPTIVE CODE TABLES(MPT).
Code | Name |
---|---|
1 | All inclusive |
2 | American |
3 | Bed & Breakfast |
4 | Buffet breakfast |
5 | Caribbean breakfast |
6 | Continental breakfast |
7 | English breakfast |
8 | European plan |
9 | Family plan |
10 | Full board |
11 | Full breakfast |
12 | Half board/modified American plan |
14 | Room only |
16 | Bermuda |
17 | Dinner bed and breakfast plan |
18 | Family American |
19 | Breakfast |
21 | Lunch |
22 | Dinner |
23 | Breakfast & lunch |
Currency
An ISO 4217 (3) alpha character code that specifies a monetary unit.
Decimal places
The ISO 4217 standard “minor unit” for the number of decimal places for a particular currency. Maximum value allowed is 2.
UIT Type
We are based on OTA descriptive code for Unique Id Type from OTA -2016B DESCRIPTIVE CODE TABLES(MPT). Nowadays we just use code 5 and 14 from the whole list. 15 could be use in the future for cancellations requests.
Code | Name |
---|---|
5 | Travel agency |
14 | Reservation |
15 | Cancellation |
Errors terminology
OTA Error codes
We are based on OTA descriptive 2016B ERROR CODES.
From them we are using the following subset:
Code | Name |
---|---|
15 | Invalid Date |
113 | Mandatory Booking Details Missing |
303 | Unable to complete process - please call reservations |
321 | Required Field Missing |
448 | System Error |
450 | Unable To Process |
OTA Error types
Refer to OpenTravel Code List Error Warning Type (EWT).
From them we are using the following subset:
Code | Name |
---|---|
10 | Required field missing |
12 | Processing exception |
13 | Application error |
Content API
version 6.0.0
Introduction
Content API allows you to get static information related to a Property as description, rooms, images, location... For this purpose there are a few set of endpoints which will allow you to keep up to date with updated properties and to fetch all content related info from them. This API is based in JSON::JSEND. The workflow to get property information is intended to be the next: You have an endpoint to get all property codes that has changed from a date, another to get the information by property code and another for room data related to a property.
This three endopoints are:
- Get list of modified properties
- Get single Property description
- Get single Room description
Environment | Host |
---|---|
Sandbox | https://sandbox-api-distributors.odigeoconnect.com |
Production | https://api-distributors.odigeoconnect.com |
Get list of modified Properties
Send an json message providing a date and time to get a
list of Properties modified since that date and time.
The response will be an json message containing a collection of properties that were
created, modified or deleted since the requested date and time. Each resource will be a Property
element containing its own id, modification status and date/time. Response will not be paginated.
Request
GET Parameter
Nodes
-
lastModifyDateTime
requiredDate is required in ISO8601 expressed in UTC format.
Response
JSEND message with the properties list or failure details.
Nodes
-
status
requiredSuccess if everything was ok, fail or error, otherwise
-
data
required-
resources
required (if the response was successful)Properties list parent node of array list
-
propertyId
requiredProperty identifier. Alphanumeric code with a maximum length of 16 characters
-
status
requiredEvent that triggered the change of the property (created/modified/closed).
-
date
requiredUTC date when the event happened.
-
-
error
optional (present if the request was not successful)Description of the error
-
errors
optional (present if the request was not complaint with the contracts)List of errors containing the next info
-
code
number identifying the error
-
shortText
Short description of the error
-
-
-
message
optional (present if the request was not complaint with the contracts)Message describing the failure
-
code
number identifying the error
Action | Endpoint |
---|---|
Get modified properties | GET /distributors/property/lastModified?lastModifyDateTime={YYY-MM-DDThh::mm:ssZ} |
Examples
-Success
Request
GET /distributors/property/lastModified?lastModifyDateTime=2020-01-01T12:00:00Z
Response
{
"status": "success",
"data": {
"resources": [
{
"propertyId": "123asasa",
"status": "created",
"date": "2017-06-06 13:35:43"
},
{
"propertyId": "456",
"status": "modified",
"date": "2017-06-06 14:35:43"
},
{
"propertyId": "789",
"status": "closed",
"date": "2017-06-06 13:35:43"
}
]
}
}
Status code: 200
-Bad Request
Response
{
"status": "fail",
"data": {
"error": "Invalid lastModifyDateTime"
}
}
Status code: 400
Get single Property description
Send a GET request adding the property identifier in the URL to retrieve detailed information about a property.
The response will be a JSEND message containing property extended information, amenities, media and contact information.
Rates will not be provided in this message exchange. Star qualifications will be provided as Award
rating.
Room type codes returned in this response should be used in subsequent availability and reservation
messages.
Request
Just add the property Identifier at the end of the URL
Nodes
-
PropertyId on URL
required
Response
JSEND message with the properties list or failure details.
Nodes
-
status
requiredSuccess if everything was ok, fail or error, otherwise
-
data
required-
resources
required (if the response was successful)Properties attributes
-
propertyId
requiredProperty identifier. Alphanumeric code with a maximum length of 16 characters
-
brandId
optionalSome properties might have a related brand identifier
-
chainId
optionalSome properties might belong to a Chain
-
externalIdentifiers
optionalExternal list of ids
-
tripadvisorId
optionalMapping to Tripadvisor
-
bookingId
optionalMapping to Booking
-
eanId
optionalMapping to ean
-
epsRapidId
optionalMapping to epsRapid
-
hotelbedsId
optionalMapping to Hotelbeds
-
-
name
requiredProperty name
-
description
requiredArray of property descriptions in different languages
-
locale
requiredISO 639-1 for preferred language code
-
content
requiredDescription of the property with a maximum of 4000 characters
-
-
latitude
requiredLatitude in decimal format, up to 8 decimal numbers, must comply with coordinate requirements
-
longitude
requiredLongitude in decimal format, up to 8 decimal numbers, must comply with coordinate requirements
-
rating
requiredRating from 0 to 5 related to the quality of the property.
-
address
requiredProperty location details
-
street
requiredAlphanumeric field with a max. of 255 characters
-
postalCode
requiredAlphanumeric field with a max. of 20 characters
-
stateProvince
requiredAlphanumeric field with a max. of 512 characters
-
cityCode
requiredNumeric field mapping with city with a max. of 10 characters corresponding with GeoNames ID
-
-
accommodationType
requiredString indicating Accommodation type, see glossary definition
-
checkInOut
optionalCheck In/Out Property time specific information
-
checkInStart
requiredCheck in time starts (hh:mm:ss)
-
checkInFinish
requiredCheck in time ends (hh:mm:ss)
-
checkOutStart
requiredCheck out time starts (hh:mm:ss)
-
checkOutFinish
requiredCheck out time ends (hh:mm:ss)
-
-
reception
optionalReception information
-
receptionOnSite
requiredboolean
-
receptionCode
requiredString, maximum length of 255 characters
-
receptionPhone
requiredString, maximum length of 45 characters
-
receptionEmail
optionalString (email format), maximum length of 255 characters
-
receptionAddress
requiredString, maximum length of 255 characters
-
reception24h
requiredboolean
-
receptionTimeFrom
requiredReception Opens at time (hh:mm:ss)
-
receptionTimeTo
requiredReception Closes at time (hh:mm:ss)
-
-
nearbyPOIs
optionalList of Points Of Interest (POI)
-
id
requiredinteger (max characters 11) GeoNames POI identifier
-
name
requiredstring describing POI
-
coordinates
requiredCoordinates for the POI
-
distance
requiredDistance to property in meters (Decimal value of
-
type
requiredstring detailing the characteristics of a POI
-
-
media
requiredList of media related to property
-
images
requiredList of images related to property
-
id
requiredString identifying the image
-
fullSizeUrl
requiredString with the url of the image in big format
-
thumbnailUrl
requiredString with the url of the image in reduced format
-
main
requiredboolean to flag if it is the main picture
-
-
-
building
requiredBuilding property information
-
flors
requirednumeric value to describe number of flors (max 5 length)
-
lift
requiredboolean to state whether if exists or not
-
yearBuilt
requirednumeric value to describe Year of construction (max 5)
-
lastRenewal
requirednumeric value to describe Year of renewal (max 5)
-
-
facilities
requiredList of string codes to describe property facilities available. See glossary for the full list.
-
-
error
optional (present if the request was not successful)Description of the error
-
errors
optional (present if the request was not complaint with the contracts)List of errors containing the next info
-
code
number identifying the error
-
shortText
Short description of the error
-
-
-
message
optional (present if the request was not complaint with the contracts)Message describing the failure
-
code
number identifying the error
Action | Endpoint |
---|---|
Get Property Detail | GET /distributors/property/{propertyId} |
Examples
-Success
Request
GET /distributors/property/1234
Response
{
"status": "success",
"data": {
"resources": [
{
"propertyId": "123456ABC",
"brandId": "brandId",
"chainId": "chainId",
"externalIdentifiers": {
"tripadvisorId": "4859665",
"bookingId": "1005787",
"eanId": "457861",
"epsRapidId": "343434",
"hotelbedsId": "362504"
},
"name": "Hotel Name",
"description": [
{
"locale": "en",
"content": "Nature: Plaça de la Vila de Madrid (0.14 km), Jardins del Doctor Fleming (0.4 km)\nTransportation: Urquinaona (0.49 km), Passeig de Gràcia (0.54 km)\nOther: Teatre Poliorama (0.13 km), Plaça de Catalunya (0.25 km)\nCommon areas: garden, sun terrace\nFoodAndDrink: restaurant, room service, bar\nActivities: tennis court, golf course (within 3 km), beach\nBeach: beach access, nearby public beach\nPool: outdoor pool\nFamily: children's playpen\nCleaningServices: ironing service\nReceptionServices: private check-in, early check-in, early check-out\nParkingAndTransportation: airport shuttle, bicycle rental\nSpaWellnessAndFitness: sauna, solarium, spa and wellness centre, massage\nBusinessFacilities: telephone\nInternet: WiFi (rooms, Common areas, outside areas, business centre) Premium (rooms) \n"
},
{
"locale": "it",
"content": "Nature: Plaça de la Vila de Madrid (0.14 km), Jardins del Doctor Fleming (0.4 km)\nTransportation: Urquinaona (0.49 km), Passeig de Gràcia (0.54 km)\nOther: Teatre Poliorama (0.13 km), Plaça de Catalunya (0.25 km)\nCommon areas: garden, Terrazza Solarium\nFoodAndDrink: restaurant, Servizio in camera, bar\nAttività: Campo da tennis, Campo da golf (nel raggio di 3 km), Spiaggia\nSpiaggia: beach access, nearby public beach\nPool: Piscina all'aperto\nFamily: children's playpen\nCleaningServices: Servizio Stireria\nReceptionServices: Check-In E Check-Out Privati, early check-in, early check-out\nParkingAndTransportation: Navetta aeroportuale, Noleggio biciclette\nSpaWellnessAndFitness: Sauna, Solarium, Spa & centro benessere, Massaggi\nBusinessFacilities: telephone\nInternet: WiFi (rooms, Common areas, outside areas, business centre) Premium (rooms) \n"
},
{
"locale": "es",
"content": "Nature: Plaça de la Vila de Madrid (0.14 km), Jardins del Doctor Fleming (0.4 km)\nTransportation: Urquinaona (0.49 km), Passeig de Gràcia (0.54 km)\nOther: Teatre Poliorama (0.13 km), Plaça de Catalunya (0.25 km)\nCommon areas: garden, Terraza solárium\nFoodAndDrink: restaurant, Servicio de habitaciones, bar\nActividades: Pista de tenis, Campo de golf (a menos de 3 km), Playa\nPlaya: beach access, nearby public beach\nPool: Piscina al aire libre\nFamily: children's playpen\nCleaningServices: Servicio de planchado\nReceptionServices: Registro de entrada y salida privado, early check-in, early check-out\nParkingAndTransportation: Traslado al aeropuerto, Alquiler de bicicletas\nSpaWellnessAndFitness: Sauna, Solárium, Spa y centro de bienestar, Masajes\nBusinessFacilities: telephone\nInternet: WiFi (rooms, Common areas, outside areas, business centre) Premium (rooms) \n"
},
{
"locale": "fr",
"content": "Nature: Plaça de la Vila de Madrid (0.14 km), Jardins del Doctor Fleming (0.4 km)\nTransportation: Urquinaona (0.49 km), Passeig de Gràcia (0.54 km)\nOther: Teatre Poliorama (0.13 km), Plaça de Catalunya (0.25 km)\nCommon areas: garden, Terrasse bien exposée\nFoodAndDrink: restaurant, Service d'étage, bar\nActivités: Court de tennis, Parcours de golf (à moins de 3 km), Plage\nPlage: beach access, nearby public beach\nPool: Piscine extérieure\nFamily: children's playpen\nCleaningServices: Service de repassage\nReceptionServices: Enregistrement/départ privé, early check-in, early check-out\nParkingAndTransportation: Navette aéroport, Location de vélos\nSpaWellnessAndFitness: Sauna, Solarium, Spa et centre de bien-être, Massage\nBusinessFacilities: telephone\nInternet: WiFi (rooms, Common areas, outside areas, business centre) Premium (rooms) \n"
},
{
"locale": "de",
"content": "Nature: Plaça de la Vila de Madrid (0.14 km), Jardins del Doctor Fleming (0.4 km)\nTransportation: Urquinaona (0.49 km), Passeig de Gràcia (0.54 km)\nOther: Teatre Poliorama (0.13 km), Plaça de Catalunya (0.25 km)\nCommon areas: garden, Sonnenterrasse\nFoodAndDrink: restaurant, Zimmerservice, bar\nAktivitäten: Tennisplatz, Golfkurs (max. 3 km entfernt), Strand\nStrand: beach access, nearby public beach\nPool: Außenpool\nFamily: children's playpen\nCleaningServices: Bügelservice\nReceptionServices: Privater Check-In/Check-Out, early check-in, early check-out\nParkingAndTransportation: Flughafenshuttle, Fahrradverleih\nSpaWellnessAndFitness: Sauna, Solarium, Spa und Wellnesscenter, Massage\nBusinessFacilities: telephone\nInternet: WiFi (rooms, Common areas, outside areas, business centre) Premium (rooms) \n"
}
],
"latitude": 41.385101,
"longitude": 2.171234,
"rating": 5,
"address": {
"street": "Bailén, 67",
"postalCode": "08009",
"stateProvince": "Barcelona",
"cityCode": 123
},
"accommodationType": "Bed & Breakfast",
"checkInOut": {
"checkInStart": "00:00",
"checkInFinish": "23:00",
"checkOutStart": "00:00",
"checkOutFinish": "23:00"
},
"reception": {
"receptionOnSite": true,
"receptionCode": "1234",
"receptionPhone": "6669999666",
"receptionEmail": "test@a.com",
"receptionAddress": "address",
"reception24h": true,
"receptionTimeFrom": "08:00",
"receptionTimeTo": "22:00"
},
"nearbyPOIs": [
{
"id": 10284108,
"name": "Jardins del Doctor Fleming",
"coordinates": {
"latitude": 41.38177,
"longitude": 2.16968
},
"distance": 395.33524030245235,
"type": "nature"
},
{
"id": 11184177,
"name": "Plaça de la Vila de Madrid",
"coordinates": {
"latitude": 41.38426,
"longitude": 2.17258
},
"distance": 139.37873510427613,
"type": "nature"
},
{
"id": 6690843,
"name": "Passeig de Gràcia",
"coordinates": {
"latitude": 41.3894,
"longitude": 2.16826
},
"distance": 542.807562754126,
"type": "transportation"
},
{
"id": 6690844,
"name": "Urquinaona",
"coordinates": {
"latitude": 41.38922,
"longitude": 2.17333
},
"distance": 487.2735745704449,
"type": "transportation"
},
{
"id": 6269513,
"name": "Plaça de Catalunya",
"coordinates": {
"latitude": 41.38705,
"longitude": 2.16997
},
"distance": 245.1108749384131,
"type": "POI"
},
{
"id": 10278668,
"name": "Teatre Poliorama",
"coordinates": {
"latitude": 41.3841,
"longitude": 2.17057
},
"distance": 128.4216961535123,
"type": "POI"
}
],
"media": {
"images": [
{
"id": "1d7a89d6d8ce08c5",
"fullSizeUrl": "http://edciw56067scxbc.belugacdn.link/pictures/876/491/876491d8-cd0a-4751-8079-8234532da1a6/1024x768/1d7a89d6d8ce08c5.jpg",
"thumbnailUrl": "http://edciw56067scxbc.belugacdn.link/pictures/876/491/876491d8-cd0a-4751-8079-8234532da1a6/200x200/1d7a89d6d8ce08c5.jpg",
"main": true
}
]
},
"building": {
"floors": 1,
"lift": false,
"yearBuilt": 1990,
"lastRenewal": 1990
},
"facilities":[
"commonAreas#garden",
"commonAreas#terrace",
"commonAreas#gamesRoom",
"commonAreas#library",
"commonAreas#prayerRoom",
"commonAreas#sunTerrace",
"commonAreas#sharedKitchen",
"commonAreas#sharedLoungeTvArea",
"commonAreas#outdoorFurniture",
"commonAreas#picnicArea",
"commonAreas#outdoorFireplace",
"commonAreas#indoorFireplace",
"commonAreas#miniMarket",
"commonAreas#souvenirGiftShop",
"commonAreas#barberHairdresser",
"commonAreas#laundromat",
"receptionServices#expressCheckInOut",
"receptionServices#privateCheckInOut",
"receptionServices#earlyCheckIn",
"receptionServices#earlyCheckOut",
"receptionServices#lateCheckIn",
"receptionServices#lateCheckOut",
"receptionServices#bellhopBoy",
"receptionServices#buttler",
"receptionServices#luggageStorage",
"receptionServices#safetyDepositBox",
"receptionServices#concierge",
"receptionServices#newspapers",
"receptionServices#currencyExchange",
"receptionServices#ticketDeskService",
"receptionServices#tourDeskService",
"receptionServices#atmCashMachine",
"paymentOptions#creditCards",
"paymentOptions#debitCards",
"paymentOptions#cash",
"paymentOptions#visa",
"paymentOptions#mastercard",
"paymentOptions#amex",
"internet#cable#rooms",
"internet#cable#commonAreas",
"internet#cable#outsideAreas",
"internet#cable#businessCenter",
"internet#wifi#rooms",
"internet#wifi#commonAreas",
"internet#wifi#outsideAreas",
"internet#wifi#businessCenter",
"internet#hiSpeed#rooms",
"internet#hiSpeed#commonAreas",
"internet#hiSpeed#outsideAreas",
"internet#hiSpeed#businessCenter",
"parkingAndTransportation#airportShuttle",
"parkingAndTransportation#bicycleHire",
"parkingAndTransportation#carHire",
"parkingAndTransportation#shuttleService",
"parkingAndTransportation#secureParking",
"parkingAndTransportation#streetParking",
"parkingAndTransportation#parkingGarage",
"parkingAndTransportation#electricVehicleChargingStation",
"parkingAndTransportation#publicTransportTickets",
"parkingAndTransportation#accessibleParking",
"parkingAndTransportation#airportPickUp",
"parkingAndTransportation#airportDropOff",
"parkingAndTransportation#valetParking",
"foodAndDrink#restaurant",
"foodAndDrink#roomService",
"foodAndDrink#bar",
"foodAndDrink#cocktailBar",
"foodAndDrink#breakfastInTheRoom",
"foodAndDrink#bbqFacilities",
"foodAndDrink#packedLunches",
"foodAndDrink#restaurantALaCarte",
"foodAndDrink#restaurantBuffet",
"foodAndDrink#snackBar",
"foodAndDrink#specialDietaryOptions",
"foodAndDrink#vendingMachineDrinks",
"foodAndDrink#vendingMachineSnacks",
"foodAndDrink#groceryDeliveries",
"foodAndDrink#childrenMeals",
"foodAndDrink#childFriendly",
"foodAndDrink#wineChampagne",
"foodAndDrink#bottledWater",
"foodAndDrink#onSiteCoffeeHouse",
"foodAndDrink#welcomeDrink",
"activities#tennisCourt",
"activities#golfCourse",
"activities#fishing",
"activities#billiards",
"activities#tableTennis",
"activities#windsurfing",
"activities#darts",
"activities#canoeing",
"activities#hiking",
"activities#cycling",
"activities#bowling",
"activities#diving",
"activities#horseRiding",
"activities#squash",
"activities#snorkelling",
"activities#miniGolf",
"activities#waterSportFacilities",
"activities#waterPark",
"activities#volleyball",
"activities#soccerField",
"activities#tennisEquipment",
"activities#badmintonEquipment",
"activities#beachActivities",
"ski#skiStorage",
"ski#skiSchool",
"ski#skiEquipmentHire",
"ski#skiPassVendor",
"ski#skiToDoorAccess",
"beach#beachAccess",
"beach#privateBeachAccess",
"beach#nearbyPublicBeach",
"beach#nearbyPrivateBeach",
"beach#lockers",
"beach#beachTowels",
"beach#umbrellas",
"beach#sunLoungers",
"beach#deckChairs",
"beach#beachCabanas",
"beach#beachCabins",
"beach#areasInTheShade",
"beach#beachBar",
"beach#beachRestaurant",
"beach#hammocks",
"spaWellnessAndFitness#sauna",
"spaWellnessAndFitness#solarium",
"spaWellnessAndFitness#spaAndWellnessCentre",
"spaWellnessAndFitness#massage",
"spaWellnessAndFitness#hammam",
"spaWellnessAndFitness#hotSpringBath",
"spaWellnessAndFitness#openAirBath",
"spaWellnessAndFitness#publicBath",
"spaWellnessAndFitness#beautyServices",
"spaWellnessAndFitness#facialTreatments",
"spaWellnessAndFitness#waxingServices",
"spaWellnessAndFitness#makeUpServices",
"spaWellnessAndFitness#hairTreatments",
"spaWellnessAndFitness#manicure",
"spaWellnessAndFitness#pedicure",
"spaWellnessAndFitness#hairCuts",
"spaWellnessAndFitness#hairColouring",
"spaWellnessAndFitness#hairStyling",
"spaWellnessAndFitness#bodyTreatments",
"spaWellnessAndFitness#bodyScrub",
"spaWellnessAndFitness#bodyWrap",
"spaWellnessAndFitness#lightTherapy",
"spaWellnessAndFitness#steamRoom",
"spaWellnessAndFitness#spaLounge",
"spaWellnessAndFitness#footBath",
"spaWellnessAndFitness#backMassage",
"spaWellnessAndFitness#neckMassage",
"spaWellnessAndFitness#footMassage",
"spaWellnessAndFitness#couplesMassage",
"spaWellnessAndFitness#headMassage",
"spaWellnessAndFitness#handMassage",
"spaWellnessAndFitness#fullBodyMassage",
"spaWellnessAndFitness#electricMassageChair",
"spaWellnessAndFitness#fitnessFacilities",
"spaWellnessAndFitness#yogaClasses",
"spaWellnessAndFitness#fitnessClasses",
"spaWellnessAndFitness#personalTrainer",
"spaWellnessAndFitness#lockers",
"spaWellnessAndFitness#gym",
"spaWellnessAndFitness#treadmills",
"spaWellnessAndFitness#wattbikes",
"spaWellnessAndFitness#weightsBarsAndBenches",
"pool#hotTubJacuzzi",
"pool#outdoorPool",
"pool#indoorPool",
"pool#waterSlide",
"pool#poolToys",
"pool#rooftopPool",
"pool#infinityPool",
"pool#poolWithView",
"pool#heatedPool",
"pool#saltWaterPool",
"pool#plungePool",
"pool#towels",
"pool#poolBar",
"pool#shallowEnd",
"pool#sunLoungers",
"pool#deckChairs",
"pool#sunUmbrellas",
"pool#fenceAroundPool",
"pool#swimmingPool",
"pool#waterWithChlorine",
"pool#kidsPool",
"pool#adultOnlyPool",
"pool#waterRubberWings",
"pool#lockers",
"pool#lifeGuard",
"pool#changingRoom",
"pool#wc",
"pool#showers",
"pool#bar",
"pool#restaurant",
"family#babysittingService",
"family#childrenPlayground",
"family#kidsClub",
"family#indoorPlayArea",
"family#kidsOutdoorPlayEquipment",
"family#babySafetyGates",
"family#childrenTelevisionNetworks",
"family#strollers",
"family#babyPhones",
"family#childrenPlaypen",
"entertainment#casino",
"entertainment#karaoke",
"entertainment#entertainmentStaff",
"entertainment#nightclubDj",
"entertainment#eveningEntertainment",
"entertainment#boardGamesPuzzles",
"entertainment#booksDvdsOrMusicForChildren",
"entertainment#videoGames",
"cleaningServices#laundry",
"cleaningServices#ironingService",
"cleaningServices#shoeshine",
"cleaningServices#trouserPress",
"cleaningServices#dailyMaidService",
"businessFacilities#computer",
"businessFacilities#laptop",
"businessFacilities#copier",
"businessFacilities#scanner",
"businessFacilities#printerColour",
"businessFacilities#printerBlackWhite",
"businessFacilities#fax",
"businessFacilities#dvdPlayer",
"businessFacilities#vhsPlayer",
"businessFacilities#projectorLcd",
"businessFacilities#projectorOverhead",
"businessFacilities#slideProjector",
"businessFacilities#walscreen",
"businessFacilities#speaker",
"businessFacilities#tv",
"businessFacilities#flatscreenTvUpTo32",
"businessFacilities#flatscreenTvAbove32",
"businessFacilities#whiteboard",
"businessFacilities#blackboard",
"businessFacilities#flipChart",
"businessFacilities#officeSupplies",
"businessFacilities#pens",
"businessFacilities#paper",
"businessFacilities#postIts",
"businessFacilities#speakerphoneConferencePhone",
"businessFacilities#telephone",
"businessServices#catering",
"businessServices#staffedBusinessCenter",
"businessServices#secretarialServices",
"businessServices#postParcelServices"
]
}
]
}
}
Status code: 200
-Bad Request
Response
{
"status": "error",
"data": {
"errors": [
{
"code": 400,
"shortText": "/propertyId : Does not match the regex pattern ^[a-zA-Z0-9]{1,16}$"
}
]
},
"message": "Error in schema validation",
"code": 1
}
Status code: 400
-Resource not found
Response
{
"status": "fail",
"data": {
"error": "Property xxxx not found"
}
}
Status code: 404
Get single Property Rooms description
Send a GET request adding the property identifier in the URL to retrieve detailed information about a property.
The response will be a JSON API message containing room and the resources linked to them, nowadays images.
Room type codes returned in this response should be used in subsequent availability and reservation messages.
Request
As GET request, the property identifier and at the url indicated
Nodes
-
PropertyId on URL
required
Response
JSON API message with the properties list or failure details.
Nodes
-
data
required if request was successfulList of data with property rooms information
-
type
requiredroom
will be return as value -
id
requiredInternal Unique Identifier for a room
-
attributes
requiredObject providing information about the room
-
code
requiredCode identifier to be used in future availability/reservation calls, string from 1 to 16 characters
-
-
relationships
requiredObject providing room relation with other resources
-
images
requiredObject with dataset of image list
-
data
requiredMain node of the data list
-
type
requiredRight now only
image
resource type is allowed -
id
requiredImage identifier, string 36 characters
-
-
-
-
-
included
requiredList of extended resources information linked to rooms
-
type
requiredimage
orimageTransformation
will be return as value -
id
requiredStringImage or imageTransformation identifier
-
attributes
requiredObject providing information about the image or imageTransformation
-
isMain
required forimage
resourcesboolean, indicates whether is the main image or not
-
type
required forimageTransformation
resourcesstring, values will be a limited set:
FULL_SIZE
,THUMBNAIL
. Indicates the transformation applied to the image -
url
required forimageTransformation
resourcesstring, valid url where the image is
-
width
required forimageTransformation
resourcesnumeric value, relates to width in pixels for the image
-
height
required forimageTransformation
resourcesnumeric value, relates to height in pixels for the image
-
-
relationships
required forimage
resources, empty otherwiseObject providing image relation with other resources
-
imageTransformations
requiredObject with dataset of imageTransformation list related to the image parent resource
-
data
requiredMain node of the data list
-
type
requiredRight now only
imageTransformation
resource type is allowed -
id
requiredImageTransformation identifier, string 36 characters
-
-
-
-
-
errors
required if request failsList of data with error information
-
status
requiredstring, Code identifier of the failure
-
detail
optionalstring, Extended message with the information of the failure
-
title
requiredstring, Short message with the information of the failure
-
Action | Endpoint |
---|---|
Get Property Room Detail | GET /distributors/property/{propertyId}/room |
Examples
-Success
Request
GET /distributors/property/1234/room
Response
{
"data": [
{
"type": "room",
"id": "contentRoomId",
"attributes": {
"code": "externalIdInAccor"
},
"relationships": {
"images": {
"data": [
{
"type": "image",
"id": "imageId"
}
]
}
}
}
],
"included": [
{
"type": "image",
"id": "imageId",
"attributes": {
"isMain": true
},
"relationships": {
"imageTransformations": {
"data": [
{
"type": "imageTransformation",
"id": "transformationId1"
},
{
"type": "imageTransformation",
"id": "transformationId2"
}
]
}
}
},
{
"type": "imageTransformation",
"id": "transformationId1",
"attributes": {
"type": "FULL_SIZE",
"url": "http://image.url/imageIdFullSize",
"width": 1920,
"height": 1080
}
},
{
"type": "imageTransformation",
"id": "transformationId1",
"attributes": {
"type": "THUMBNAIL",
"url": "http://image.url/imageIdThumbnail",
"width": 200,
"height": 200
}
}
]
}
Status code: 200
-Resource not found
Response
{
"errors": [
{
"status": "404",
"detail": "Property with id 1234 not found.",
"title": "Not Found"
}
]
}
Status code: 404
-Internal error
Response
{
"errors": [
{
"status": "500",
"title": "Internal server error"
}
]
}
Status code: 500
Availability API
version 3.1.2
Introduction
The API is based on messages that conform to the OpenTravel
Alliance 2016B specification
and
best
practices
The message format used is XML over HTTPS TLS (v1.1, v.1.2).
Is mandatory to include content-type: application/xml
CorrelationID
CorrelationID ensure that each request can be uniquely identified (GUID) for troubleshooting
purposes in both testing and production environments.
All requests you receive from OdigeoConnect will contain an CorrelationID, and your response
will include the same CorrelationID as received in the request.
Environment | Host |
---|---|
Sandbox | https://sandbox-api-distributors.odigeoconnect.com |
Production | https://api-distributors.odigeoconnect.com |
Authentication
To be able to test our various APIs, you will need to contact OC Connectivity Team.
Once Odigeo Connect signup process is completed, the OC Connectivity Team will provide you with test credentials, so you can start the API implementation on Odigeo Connect sandbox environment.
Access to the API will be provided with an API key, to be used in the Authorization
HTTP header.
Once it is considered that you have successfully implemented Odigeo Connect API, the OC Connectivity Team will provide you with the live authentication credentials necessary to test the interface in Odigeo Connect production environment.
Request header | Sample | Description |
---|---|---|
Authorization |
193s-cf36-ffff-xxxx |
When you call APIs, send the access token provided by OC Connectivity Team in the authentication header. Required. |
Errors
Overview
Standard HTTP response codes are used for success and failure notifications. Our errors are further
classified by Code
identifiers.
In general, 200 HTTP codes correspond to success, 40X codes are for developer- or user-related failures, and 50X codes are for Odigeo Connect related issues.
Rate limit exceeded errors
RLEE are returned when the request is valid but has exceeded the established rate limits.
All API endpoints are rate limited and all data-access endpoints are rate limited by client SLA.
Exact limits are dynamic and are designed to prevent any single source of traffic from impacting overall API stability
API errors
APIs Errors provide the option to send multiple actions in one single message.
The approach in case of failure is to not execute anything in case of error/s and retrieve an error message with all the errors found. Our aim will always be to provide the more semantic message error inside the error tags and a code to help to identify them.
Specific API errors are returned during scheduled server downtimes.
Odigeo Connect ARI API uses standard OTA error code list for application/business related errors.
Get multi Property Availability (cached)
This endpoint purpose is to get room and rate availability between a pair of dates for multiple properties.
Request
Selected OTA_HotelAvailRQ elements
Take into account next rules.
Criterion
should only have one StayDateRange
element and one RoomStayCandidates
element. Only the first occurrence
of each element will be processed. Additional elements will be ignored.
Only one AvailRequestSegments
/AvailRequestSegment
/HotelSearchCriteria
/Criterion
element must be provided.
An optional POS
element (Point Of Sale) can be used to provide segmentation information (country, brand, device).
This is also important as promotions might be applicable for specific properties/rateplans and can also depend on this information provided (market, device, company). Nowadays there is no flag to visualize a Rate does have a promotion applied, but if you need to you can flag it due to the format of the RatePlanCode. It will have two "." separators instead of one.
If availability is requested for more than one room, provide one RoomStayCandidate
element for each room, using a GuestCounts
element to provide the occupancy for that room.
Use the HotelCode
attribute of the HotelRef
element to provide the identifier of the target property for the request.
Multiple HotelRef
elements can be used to request availability for multiple properties.
Nodes
-
OTA_HotelAvailRQ
required-
@CorrelationID
required -
@PrimaryLangID
optionalISO 639-1 for preferred language request.
-
@Version
required5.000
-
@xmlns
requiredhttp://www.opentravel.org/OTA/2003/05
-
POS
optionalPoint of Sale (POS) identifies the party or connection channel making the request.
-
Source
optional-
@ISOCountry
optionalISO 3166-1 alpha-2 Country Code from source
-
BookingChannel
optional-
@Type
optionalThe type of booking channel. Refer to OTA Code List Booking Channel Type (BCT).
-
CompanyName
optionalInformation to identify the company making the request
-
@CompanyShortName
optionalIdentifier for the company Name
-
-
-
TPA_Extensions
optional-
Device
optional-
@Type
optionalThe type of device. Refer to OC Device Type.
-
-
SalesEnvironment
optional-
@Touchpoint
MandatoryThe Sales Environment Touchpoint. Allowed values: OC Sales Environment Touchpoint.
-
@CustomerStatus
MandatoryThe Sales Environment Customer Status. Allowed values: OC Sales Environment Customer Status.
-
-
-
-
-
AvailRequestSegments
required-
AvailRequestSegment
required-
HotelSearchCriteria
required-
Criterion
required-
HotelRef
requiredUse multiple HotelRef elements to request availability from multiple properties
-
@HotelCode
requiredProperty identifier.
-
-
StayDateRange
requiredCheck-in / Check-out Dates.
-
@Start
requiredCheck-in date. Format is YYYY-MM-DD
-
@End
requiredCheck-out date. Format is YYYY-MM-DD
-
-
RoomStayCandidates
required-
RoomStayCandidate
requiredUse multiple RoomStayCandidate elements to request availability for multiple rooms
-
GuestCounts
requiredA collection of Guest Counts associated with Room Stay. A child Guest Count element is required for each distinct age group.A collection of GuestCount by age group.
-
GuestCount
requiredA recurring element that identifies the number of guests and ages of the guests.
-
@AgeQualifyingCode
requiredDefines minimum age range or age category of a guest. Code based on: OC Age Categories definition
-
@Count
requiredNumber of guests of this type
-
@Age
optional/requiredRequired combined when it is combined with AgeQualifyingCode for children(8) or infant(7), optional otherwise.
-
-
-
-
-
-
-
-
-
Response
Response / selected OTA_HotelAvailRS elements
If there is availability for the requested dates, the response will be an OTA_HotelAvailRS
message containing
a single RoomStays
element with one RoomStay
element representing the cheapest available room combination
for each property. RoomStay
will be omitted for properties without availability.
Each RoomStay
element will contain the combination of available rooms for a property as a collection of RoomRate
elements. There will be one RoomRate
element for each room type / rate plan / guest count configuration, with a
NumberOfUnits
attribute to indicate how many rooms are available for that configuration.
Each RoomRate
will contain a Total
element with the price for that configuration. Amounts in Total
elements will
always be per unit. That is, if a RoomRate
element has a NumberOfUnits
count of 2, values in Total
element
should be multiplied by 2. The total sum of NumberOfUnits
for all RoomRate
elements will always match the number of
requested rooms.
The Total
element will also contain a HotelDiscount
element with a Percent
attribute, which will contain the discount percentage contractually agreed with the hotelier providing this room combination.
This discount is already applied to the total amount.
Also included is a RoomsLeft
element, with a Units
attribute, which refers to the remaining available rooms of this RoomRate
Each RoomStay
element will also contain a RatePlans
element, providing cancellation policies and meal
plan information.
Currency and amounts are as provided by properties, and no conversion is applied. If amounts are needed in another currency, conversion should be made by the API consumer.
If there is no availability, but the request was processed successfully, Success
will be the only child of
the OTA_HotelAvailRS
root element, with no other elements.
Nodes
-
OTA_HotelAvailRS
required-
Success
required (If the request was OK) -
RoomStays
required (If the request was OK & had availability)-
RoomStay
An available room combination. One element Best Available Rate (BAR) will be returned per property
-
RatePlans
-
RatePlan
-
@RatePlanCode
-
CancelPenalties
-
CancelPenalty
-
@NonRefundable
boolean
-
@PolicyCode
required if refundablePolicy code provided by the hotelier. This field is informative
-
PenaltyDescription
required if refundable-
Text
Penalty text description
-
-
-
-
MealsIncluded
-
@Breakfast
boolean - true if included
-
@Lunch
boolean - true if included
-
@Dinner
boolean - true if included
-
@MealPlanCodes
Refers to OC Meal Plan Type definition.
-
-
-
-
RoomRates
-
RoomRate
-
@RoomTypeCode
RoomType identifier
-
@NumberOfUnits
Number of Units available
-
@RatePlanCode
Rateplan identifier
-
RoomRateDescription
-
Text
Roomrate descriptive text
-
-
Total
Rate total information
-
@AmountAfterTax
The total amount including all associated taxes (e.g., sales tax, VAT, GST or any associated tax).
-
@CurrencyCode
-
@DecimalPlaces
Number of decimal places for the currency code specified.
-
TPA_Extensions
-
HotelDiscount
Discount negociated with property
-
@Percent
Percent of discount
-
-
HotelMarkup
Markup applied to rate
-
@Amount
-
@CurrencyCode
-
@DecimalPlaces
Number of decimal places for the currency code specified.
-
-
RoomsLeft
Rooms available
-
@Units
Number of rooms available (recommended to be shown at point of sale)
-
-
-
-
GuestCounts
A collection of Guest Counts associated with Room Stay.
A child Guest Count element is required for each distinct age group.
-
GuestCount
A recurring element that identifies the number of guests and ages of the them.
-
@AgeQualifyingCode
Defines minimum age range or age category of a guest. Code based on: OC Age Categories definition
-
@Count
Number of guests of this type
-
@Age
optional/requiredRequired when using AgeQualifyingCode for children(8), optional otherwise.
-
-
-
-
-
BasicPropertyInfo
Hotel information by RomRate
-
HotelCode
Property identifier
-
-
-
-
Errors
required (If the request was Not OK)
-
Action | Endpoint |
---|---|
multi availability | POST /distributors/v1/GetMultiAvailability |
Contracts
Request | OTA2016B OTA_HotelAvailRQ.xsd |
Response | OTA2016B OTA_HotelAvailRS.xsd |
Examples
-Success
Request
<?xml version="1.0" encoding="utf-8"?>
<OTA_HotelAvailRQ CorrelationID="ABC123" PrimaryLangID="en-GB" Version="5.000" xmlns="http://www.opentravel.org/OTA/2003/05">
<POS>
<Source ISOCountry="ES">
<BookingChannel Type="7">
<CompanyName CompanyShortName="OC.techteam"/>
</BookingChannel>
<TPA_Extensions>
<Device Type="WEB-DESKTOP"/>
<SalesEnvironment
Touchpoint="DYNPACK"
CustomerStatus="LOGGED-IN-NOT-PRIME"
/>
</TPA_Extensions>
</Source>
</POS>
<AvailRequestSegments>
<AvailRequestSegment>
<HotelSearchCriteria>
<Criterion>
<HotelRef HotelCode="PROPERF00001"/>
<HotelRef HotelCode="PROPERF00002"/>
<HotelRef HotelCode="PROPERF00003"/>
<HotelRef HotelCode="PROPERF00004"/>
<StayDateRange Start="2018-08-01" End="2018-08-03" />
<RoomStayCandidates>
<RoomStayCandidate>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2" />
</GuestCounts>
</RoomStayCandidate>
<RoomStayCandidate>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2" />
<GuestCount AgeQualifyingCode="8" Count="1" Age="10" />
</GuestCounts>
</RoomStayCandidate>
</RoomStayCandidates>
</Criterion>
</HotelSearchCriteria>
</AvailRequestSegment>
</AvailRequestSegments>
</OTA_HotelAvailRQ>
Response
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelAvailRS CorrelationID="ABC123" PrimaryLangID="en-GB" Version="7.000" xmlns="http://www.opentravel.org/OTA/2003/05">
<Success/>
<RoomStays>
<RoomStay>
<RatePlans>
<RatePlan RatePlanCode="RT20001.RP20001">
<CancelPenalties>
<CancelPenalty NonRefundable="true"/>
</CancelPenalties>
<MealsIncluded Breakfast="false" Lunch="true" Dinner="false" MealPlanCodes="21"/>
</RatePlan>
</RatePlans>
<RoomRates>
<RoomRate RoomTypeCode="RT20001" NumberOfUnits="1" RatePlanCode="RT20001.RP20001">
<RoomRateDescription>
<Text>1 Double bed with Ocean view</Text>
</RoomRateDescription>
<Total AmountAfterTax="60000" CurrencyCode="EUR" DecimalPlaces="2">
<TPA_Extensions>
<HotelDiscount Percent="30"/>
<HotelMarkup Amount="5000" CurrencyCode="EUR" DecimalPlaces="2"/>
<RoomsLeft Units="5"/>
</TPA_Extensions>
</Total>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
<GuestCount AgeQualifyingCode="8" Count="1" Age="10"/>
</GuestCounts>
</RoomRate>
<RoomRate RoomTypeCode="RT20001" NumberOfUnits="1" RatePlanCode="RT20001.RP20001">
<RoomRateDescription>
<Text>1 Double bed with Ocean view</Text>
</RoomRateDescription>
<Total AmountAfterTax="40000" CurrencyCode="EUR" DecimalPlaces="2">
<TPA_Extensions>
<HotelDiscount Percent="30"/>
<HotelMarkup Amount="5000" CurrencyCode="EUR" DecimalPlaces="2"/>
<RoomsLeft Units="4"/>
</TPA_Extensions>
</Total>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
</GuestCounts>
</RoomRate>
</RoomRates>
<BasicPropertyInfo HotelCode="PROPERF00002"/>
</RoomStay>
<RoomStay>
<RatePlans>
<RatePlan RatePlanCode="RT40001.RP40001">
<CancelPenalties>
<CancelPenalty NonRefundable="true"/>
</CancelPenalties>
<MealsIncluded Breakfast="false" Lunch="true" Dinner="false" MealPlanCodes="21"/>
</RatePlan>
</RatePlans>
<RoomRates>
<RoomRate RoomTypeCode="RT40001" NumberOfUnits="1" RatePlanCode="RT40001.RP40001">
<RoomRateDescription>
<Text>1 Double bed with Ocean view</Text>
</RoomRateDescription>
<Total AmountAfterTax="60000" CurrencyCode="EUR" DecimalPlaces="2">
<TPA_Extensions>
<HotelDiscount Percent="30"/>
<HotelMarkup Amount="5000" CurrencyCode="EUR" DecimalPlaces="2"/>
<RoomsLeft Units="3"/>
</TPA_Extensions>
</Total>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
<GuestCount AgeQualifyingCode="8" Count="1" Age="10"/>
</GuestCounts>
</RoomRate>
<RoomRate RoomTypeCode="RT40001" NumberOfUnits="1" RatePlanCode="RT40001.RP40001">
<RoomRateDescription>
<Text>1 Double bed with Ocean view</Text>
</RoomRateDescription>
<Total AmountAfterTax="40000" CurrencyCode="EUR" DecimalPlaces="2">
<TPA_Extensions>
<HotelDiscount Percent="30"/>
<HotelMarkup Amount="5000" CurrencyCode="EUR" DecimalPlaces="2"/>
<RoomsLeft Units="2"/>
</TPA_Extensions>
</Total>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
</GuestCounts>
</RoomRate>
</RoomRates>
<BasicPropertyInfo HotelCode="PROPERF00004"/>
</RoomStay>
</RoomStays>
</OTA_HotelAvailRS>
Status code: 200
-Bad Request
Response
<OTA_HotelAvailRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="5.000">
<Errors>
<Error Type="12" Code="450" ShortText="Invalid RQ format">line 6, column: 0, message: Element '{http://www.opentravel.org/OTA/2003/05}HotelRef', attribute 'HotelCode': [facet 'minLength'] The value '' has a length of '0'; this underruns the allowed minimum length of '1'.
</Error>
<Error Type="12" Code="450" ShortText="Invalid RQ format">line 6, column: 0, message: Element '{http://www.opentravel.org/OTA/2003/05}HotelRef', attribute 'HotelCode': '' is not a valid value of the atomic type '{http://www.opentravel.org/OTA/2003/05}StringLength1to16'.
</Error>
</Errors>
</OTA_HotelAvailRS>
Status code: 400
-Internal Server Error
Response
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelAvailRS CorrelationID="multiavilservererror" PrimaryLangID="en-GB" Version="7.000" xmlns="http://www.opentravel.org/OTA/2003/05">
<Errors>
<Error Type="13" Code="448" ShortText="Internal server error"/>
</Errors>
</OTA_HotelAvailRS>
Status code: 500
Get single Property Availability (cached)
This endpoint will have the same message exchange as Get multi Property Availability, with the following restrictions:
Request
Selected OTA_HotelAvailRQ elements
Requests should only provide one HotelRef
/@HotelCode
element. Only
the first HotelRef
element will be used. Additional elements will be ignored.
Responses will contain multiple RoomStay
elements, each element with only
one RoomRate
element. Each RoomStay
element will provide availability for
a single room type. All BasicPropertyInfo
/@HotelCode
attributes will reference the same property.
If a room combination was requested, room combinations and total amount must be done by the
API consumer, taking into account the availability of each room type provided
with the RoomRate
/@NumberOfUnits
attribute.
Nodes
-
OTA_HotelAvailRQ
required-
@CorrelationID
required -
@PrimaryLangID
optionalISO 639-1 for preferred language request.
-
@Version
required5.000
-
@xmlns
requiredhttp://www.opentravel.org/OTA/2003/05
-
POS
optionalPoint of Sale (POS) identifies the party or connection channel making the request.
-
Source
optional-
@ISOCountry
optionalISO 3166-1 alpha-2 Country Code from source
-
BookingChannel
optional-
@Type
optionalThe type of booking channel. Refer to OTA Code List Booking Channel Type (BCT).
-
CompanyName
optionalInformation to identify the company making the request
-
@CompanyShortName
optionalIdentifier for the company Name
-
-
-
TPA_Extensions
optional-
Device
optional-
@Type
optionalThe type of device. Refer to OC Device Type.
-
-
SalesEnvironment
optional-
@Touchpoint
MandatoryThe Sales Environment Touchpoint. Allowed values: OC Sales Environment Touchpoint.
-
@CustomerStatus
MandatoryThe Sales Environment Customer Status. Allowed values: OC Sales Environment Customer Status.
-
-
-
-
-
AvailRequestSegments
required-
AvailRequestSegment
required-
HotelSearchCriteria
required-
Criterion
required-
HotelRef
requiredOnly one HotelRef element will be required for this call, if there are more elements only the first will be used
-
@HotelCode
requiredProperty identifier.
-
-
StayDateRange
requiredCheck-in / Check-out Dates.
-
@Start
requiredCheck-in date. Format is YYYY-MM-DD
-
@End
requiredCheck-out date. Format is YYYY-MM-DD
-
-
RoomStayCandidates
required-
RoomStayCandidate
requiredUse multiple RoomStayCandidate elements to request availability for multiple rooms
-
GuestCounts
requiredA collection of Guest Counts associated with Room Stay. A child Guest Count element is required for each distinct age group.A collection of GuestCount by age group.
-
GuestCount
requiredA recurring element that identifies the number of guests and ages of the guests.
-
@AgeQualifyingCode
requiredDefines minimum age range or age category of a guest. Code based on: OC Age Categories definition
-
@Count
requiredNumber of guests of this type
-
@Age
optional/requiredRequired combined when it is combined with AgeQualifyingCode for children(8) or infant(7), optional otherwise.
-
-
-
-
-
-
-
-
-
Response
Response / selected OTA_HotelAvailRS elements
If there is availability for the requested dates, the response will be an OTA_HotelAvailRS
message containing
a single RoomStays
element with one RoomStay
element representing the cheapest available room combination
for each property. RoomStay
will be omitted for properties without availability.
Each RoomStay
element will contain the combination of available rooms for a property as a collection of RoomRate
elements. There will be one RoomRate
element for each room type / rate plan / guest count configuration, with a
NumberOfUnits
attribute to indicate how many rooms are available for that configuration.
Each RoomRate
will contain a Total
element with the price for that configuration. Amounts in Total
elements will
always be per unit. That is, if a RoomRate
element has a NumberOfUnits
count of 2, values in Total
element
should be multiplied by 2. The total sum of NumberOfUnits
for all RoomRate
elements will always match the number of
requested rooms.
The Total
element will also contain a HotelDiscount
element with a Percent
attribute, which will contain the discount percentage contractually agreed with the hotelier providing this room combination.
This discount is already applied to the total amount.
Also included is a RoomsLeft
element, with a Units
attribute, which refers to the remaining available rooms of this RoomRate
Each RoomStay
element will also contain a RatePlans
element, providing cancellation policies and meal
plan information.
Currency and amounts are as provided by properties, and no conversion is applied. If amounts are needed in another currency, conversion should be made by the API consumer.
If there is no availability, but the request was processed successfully, Success
will be the only child of
the OTA_HotelAvailRS
root element, with no other elements.
Nodes
-
OTA_HotelAvailRS
required-
Success
required (If the request was OK) -
RoomStays
required (If the request was OK & had availability)-
RoomStay
One or multiple room combinations will be retrieved.
-
RatePlans
-
RatePlan
-
@RatePlanCode
-
CancelPenalties
-
CancelPenalty
-
@NonRefundable
boolean
-
@PolicyCode
required if refundablePolicy code provided by the hotelier. This field is informative
-
PenaltyDescription
required if refundable-
Text
Penalty text description
-
-
-
-
MealsIncluded
-
@Breakfast
boolean - true if included
-
@Lunch
boolean - true if included
-
@Dinner
boolean - true if included
-
@MealPlanCodes
Refers to OC Meal Plan Type definition.
-
-
-
-
RoomRates
-
RoomRate
-
@RoomTypeCode
RoomType identifier
-
@NumberOfUnits
Number of Units available
-
@RatePlanCode
Rateplan identifier
-
RoomRateDescription
-
Text
Roomrate descriptive text
-
-
Total
Rate total information
-
@AmountAfterTax
The total amount including all associated taxes (e.g., sales tax, VAT, GST or any associated tax).
-
@CurrencyCode
-
@DecimalPlaces
Number of decimal places for the currency code specified.
-
TPA_Extensions
-
HotelDiscount
Discount negociated with property
-
@Percent
Percent of discount
-
-
HotelMarkup
Markup applied to rate
-
@Amount
-
@CurrencyCode
-
@DecimalPlaces
Number of decimal places for the currency code specified.
-
-
RoomsLeft
Rooms available
-
@Units
Number of rooms available (recommended to be shown at point of sale)
-
-
-
-
GuestCounts
A collection of Guest Counts associated with Room Stay.
A child Guest Count element is required for each distinct age group.
-
GuestCount
A recurring element that identifies the number of guests and ages of the them.
-
@AgeQualifyingCode
Defines minimum age range or age category of a guest. Code based on: OC Age Categories definition
-
@Count
Number of guests of this type
-
@Age
optional/requiredRequired when using AgeQualifyingCode for children(8), optional otherwise.
-
-
-
-
-
BasicPropertyInfo
Hotel information by RomRate
-
HotelCode
Property identifier
-
-
-
-
Errors
required (If the request was Not OK)
-
Action | Endpoint |
---|---|
single availability | POST /distributors/v1/GetSingleAvailability |
Contracts
Request | OTA2016B OTA_HotelAvailRQ.xsd |
Response | OTA2016B OTA_HotelAvailRS.xsd |
Examples
-Success
Request
<OTA_HotelAvailRQ CorrelationID="BasicSingleRQ" PrimaryLangID="en-GB" Version="5.000" xmlns="http://www.opentravel.org/OTA/2003/05">
<POS>
<Source ISOCountry="ES" >
<BookingChannel Type="7" >
<CompanyName CompanyShortName="OC.techteam" />
</BookingChannel>
<TPA_Extensions>
<Device Type="WEB-DESKTOP" />
<SalesEnvironment
Touchpoint="DYNPACK"
CustomerStatus="LOGGED-IN-NOT-PRIME"
/>
</TPA_Extensions>
</Source>
</POS>
<AvailRequestSegments>
<AvailRequestSegment>
<HotelSearchCriteria>
<Criterion>
<HotelRef HotelCode="222" />
<StayDateRange Start="2020-02-25" End="2020-02-29" />
<RoomStayCandidates>
<RoomStayCandidate>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2" />
</GuestCounts>
</RoomStayCandidate>
</RoomStayCandidates>
</Criterion>
</HotelSearchCriteria>
</AvailRequestSegment>
</AvailRequestSegments>
</OTA_HotelAvailRQ>
Response
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelAvailRS CorrelationID="BasicSingleRQ" PrimaryLangID="en-GB" Version="7.000"
xmlns="http://www.opentravel.org/OTA/2003/05">
<Success/>
<RoomStays>
<RoomStay>
<RatePlans>
<RatePlan RatePlanCode="DBL1.RATE1">
<CancelPenalties>
<CancelPenalty NonRefundable="true"/>
</CancelPenalties>
<MealsIncluded Breakfast="false" Lunch="false" Dinner="false" MealPlanCodes="14"/>
</RatePlan>
</RatePlans>
<RoomRates>
<RoomRate RoomTypeCode="DBL1" NumberOfUnits="999" RatePlanCode="DBL1.RATE1">
<RoomRateDescription>
<Text>1 Double bed with Ocean view</Text>
</RoomRateDescription>
<Total AmountAfterTax="22990" CurrencyCode="EUR" DecimalPlaces="2">
<TPA_Extensions>
<HotelDiscount Percent="30"/>
<RoomsLeft Units="999"/>
</TPA_Extensions>
</Total>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
<GuestCount AgeQualifyingCode="8" Count="1" Age="10"/>
</GuestCounts>
</RoomRate>
</RoomRates>
<BasicPropertyInfo HotelCode="222"/>
</RoomStay>
<RoomStay>
<RatePlans>
<RatePlan RatePlanCode="DBL1.RATE2">
<CancelPenalties>
<CancelPenalty NonRefundable="true"/>
</CancelPenalties>
<MealsIncluded Breakfast="false" Lunch="true" Dinner="false" MealPlanCodes="21"/>
</RatePlan>
</RatePlans>
<RoomRates>
<RoomRate RoomTypeCode="DBL1" NumberOfUnits="1" RatePlanCode="DBL1.RATE2">
<RoomRateDescription>
<Text>1 Double bed with Ocean view</Text>
</RoomRateDescription>
<Total AmountAfterTax="40000" CurrencyCode="EUR" DecimalPlaces="2">
<TPA_Extensions>
<HotelDiscount Percent="30"/>
<RoomsLeft Units="1"/>
</TPA_Extensions>
</Total>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
</GuestCounts>
</RoomRate>
</RoomRates>
<BasicPropertyInfo HotelCode="222"/>
</RoomStay>
</RoomStays>
</OTA_HotelAvailRS>
Status code: 200
-Bad Request
Response
<OTA_HotelAvailRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="5.000">
<Errors>
<Error Type="12" Code="450" ShortText="Invalid RQ format">line 21, column: 0, message: Element '{http://www.opentravel.org/OTA/2003/05}GuestCount', attribute 'Age': 'test' is not a valid value of the atomic type '{http://www.opentravel.org/OTA/2003/05}Numeric0to999'.
</Error>
</Errors>
</OTA_HotelAvailRS>
Status code: 400
-Internal Server Error
Response
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelAvailRS CorrelationID="CheckServerError" PrimaryLangID="en-GB" Version="7.000" xmlns="http://www.opentravel.org/OTA/2003/05">
<Errors>
<Error Type="13" Code="448" ShortText="Internal server error"/>
</Errors>
</OTA_HotelAvailRS>
Status code: 500
Check Availability (live)
This endpoint is provided as a last check before making a reservation.
This endpoint should only be used before making a reservation. Usage of this endpoint will be
monitored.
Request
Selected OTA_HotelAvailRQ elements
Criterion
should only have one StayDateRange
element and one RoomStayCandidates
element.
Only the first occurrence of each element will be processed. Additional elements will be ignored.
Only one AvailRequestSegments/AvailRequestSegment/HotelSearchCriteria/Criterion
element must be
provided.
An optional POS
element can be used to provide segmentation information (Country, brand, device).
If availability is requested for more than one room, provide one RoomStayCandidate
element for each
room, using a GuestCounts
element to provide the occupancy for that room.
Use the HotelCode
attribute of the HotelRef
element to provide the identifier of the target property
for the request.
Multiple HotelRef
elements can be used to request availability for multiple properties.
Nodes
-
OTA_HotelAvailRQ
required-
@CorrelationID
required -
@PrimaryLangID
optionalISO 639-1 for preferred language request.
-
@Version
required5.000
-
@xmlns
requiredhttp://www.opentravel.org/OTA/2003/05
-
POS
optionalPoint of Sale (POS) identifies the party or connection channel making the request.
-
Source
optional-
@ISOCountry
optionalISO 3166-1 alpha-2 Country Code from source
-
BookingChannel
optional-
@Type
optionalThe type of booking channel. Refer to OTA Code List Booking Channel Type (BCT).
-
CompanyName
optionalInformation to identify the company making the request
-
@CompanyShortName
optionalIdentifier for the company Name
-
-
-
TPA_Extensions
optional-
Device
optional-
@Type
optionalThe type of device. Refer to OC Device Type.
-
-
-
-
-
AvailRequestSegments
required-
AvailRequestSegment
required-
HotelSearchCriteria
required-
Criterion
required-
HotelRef
requiredUse multiple HotelRef elements to request availability from multiple properties
-
@HotelCode
requiredProperty identifier.
-
-
StayDateRange
requiredCheck-in / Check-out Dates.
-
@Start
requiredCheck-in date. Format is YYYY-MM-DD
-
@End
requiredCheck-out date. Format is YYYY-MM-DD
-
-
RoomStayCandidates
required-
RoomStayCandidate
requiredUse multiple RoomStayCandidate elements to request availability for multiple rooms
-
GuestCounts
requiredA collection of Guest Counts associated with Room Stay. A child Guest Count element is required for each distinct age group.A collection of GuestCount by age group.
-
GuestCount
requiredA recurring element that identifies the number of guests and ages of the guests.
-
@AgeQualifyingCode
requiredDefines minimum age range or age category of a guest. Code based on: OC Age Categories definition
-
@Count
requiredNumber of guests of this type
-
@Age
optional/requiredRequired combined when it is combined with AgeQualifyingCode for children(8) or infant(7), optional otherwise.
-
-
-
-
-
-
-
-
-
Response
Selected OTA_HotelAvailRS elements
If there is availability for the requested dates, the response will be an OTA_HotelAvailRS message
containing multiple RoomStays
elements to match the request.
RoomStay
will be omitted for properties without availability.
Each RoomStay
element will contain the combination of available rooms for a property as a collection
of RoomRate
elements. There will be one RoomRate
element for each room type / rate plan / guest
count configuration, with a NumberOfUnits
attribute to indicate how many rooms are available for
that configuration.
Each RoomRate
will contain a Total
element with the price for that configuration.
Amounts in Total
elements will always be per unit. That is, if a RoomRate
element has a NumberOfUnits
count of 2,
values in Total
element should be multiplied by 2. The total sum of NumberOfUnits
for all RoomRate
elements will always match the number of requested rooms.
The Total
element will also contain a HotelDiscount
element with a Percent
attribute, which will
contain the discount percentage contractually agreed with the hotelier providing this room combination.
This discount is already applied to the total amount.
Each RoomStay
element will also contain a RatePlans
element, providing cancellation policies and
meal plan information.
Currency and amounts are as provided by properties, and no conversion is applied. If amounts are
needed in another currency, conversion should be made by the API consumer.
If there is no availability, but the request was processed successfully, Success
will be the only
child of the OTA_HotelAvailRS
root element, with no other elements.
Nodes
-
OTA_HotelAvailRS
required-
Success
required (If the request was OK) -
RoomStays
required (If the request was OK & had availability)-
RoomStay
One or multiple room combinations will be retrieved.
-
RatePlans
-
RatePlan
-
@RatePlanCode
-
CancelPenalties
-
CancelPenalty
-
@NonRefundable
boolean
-
@PolicyCode
required if refundablePolicy code provided by the hotelier. This field is informative
-
PenaltyDescription
required if refundable-
Text
Penalty text description
-
-
-
-
MealsIncluded
-
@Breakfast
boolean - true if included
-
@Lunch
boolean - true if included
-
@Dinner
boolean - true if included
-
@MealPlanCodes
Refers to OC Meal Plan Type definition.
-
-
-
-
RoomRates
-
RoomRate
-
@RoomTypeCode
RoomType identifier
-
@NumberOfUnits
Number of Units available
-
@RatePlanCode
Rateplan identifier
-
RoomRateDescription
-
Text
Roomrate descriptive text
-
-
Total
Rate total information
-
@AmountAfterTax
The total amount including all associated taxes (e.g., sales tax, VAT, GST or any associated tax).
-
@CurrencyCode
-
@DecimalPlaces
Number of decimal places for the currency code specified.
-
TPA_Extensions
-
HotelDiscount
Discount negociated with property
-
@Percent
Percent of discount
-
-
HotelMarkup
Markup applied to rate
-
@Amount
-
@CurrencyCode
-
@DecimalPlaces
Number of decimal places for the currency code specified.
-
-
RoomsLeft
Rooms available
-
@Units
Number of rooms available (recommended to be shown at point of sale)
-
-
-
-
GuestCounts
A collection of Guest Counts associated with Room Stay.
A child Guest Count element is required for each distinct age group.
-
GuestCount
A recurring element that identifies the number of guests and ages of the them.
-
@AgeQualifyingCode
Defines minimum age range or age category of a guest. Code based on: OC Age Categories definition
-
@Count
Number of guests of this type
-
@Age
optional/requiredRequired when using AgeQualifyingCode for children(8), optional otherwise.
-
-
-
-
-
BasicPropertyInfo
Hotel information by RomRate
-
HotelCode
Property identifier
-
-
-
-
Errors
required (If the request was Not OK)
-
Action | Endpoint |
---|---|
check availability | POST /distributors/v1/CheckAvailability |
Contracts
Request | OTA2016B OTA_HotelAvailRQ.xsd |
Response | OTA2016B OTA_HotelAvailRS.xsd |
Examples
-Success
Request
<OTA_HotelAvailRQ CorrelationID="BasicCheckRQ" PrimaryLangID="en-GB" Version="5.000" xmlns="http://www.opentravel.org/OTA/2003/05">
<POS>
<Source ISOCountry="ES" >
<BookingChannel Type="7" >
<CompanyName CompanyShortName="OC.techteam" />
</BookingChannel>
<TPA_Extensions>
<Device Type="WEB-DESKTOP" />
</TPA_Extensions>
</Source>
</POS>
<AvailRequestSegments>
<AvailRequestSegment>
<HotelSearchCriteria>
<Criterion>
<HotelRef HotelCode="qatest0006"/>
<StayDateRange End="2020-02-16" Start="2020-02-14"/>
<RatePlanCandidates>
<RatePlanCandidate RPH="1" RatePlanCode="QA0005RT0001.Q2"/>
</RatePlanCandidates>
<RoomStayCandidates>
<RoomStayCandidate RatePlanCandidateRPH="1" RoomTypeCode="QA0005RT0001">
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
</GuestCounts>
</RoomStayCandidate>
</RoomStayCandidates>
</Criterion>
</HotelSearchCriteria>
</AvailRequestSegment>
</AvailRequestSegments>
</OTA_HotelAvailRQ>
Response
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelAvailRS CorrelationID="BasicCheckRQ" PrimaryLangID="en-GB" Version="7.000"
xmlns="http://www.opentravel.org/OTA/2003/05">
<Success/>
<RoomStays>
<RoomStay>
<RatePlans>
<RatePlan RatePlanCode="QA0005RT0001.Q2">
<CancelPenalties>
<CancelPenalty NonRefundable="true"/>
</CancelPenalties>
<MealsIncluded Breakfast="false" Lunch="true" Dinner="false" MealPlanCodes="21"/>
</RatePlan>
</RatePlans>
<RoomRates>
<RoomRate RoomTypeCode="QA0005RT0001" NumberOfUnits="1" RatePlanCode="QA0005RT0001.Q2">
<RoomRateDescription>
<Text>1 Double bed with Ocean view</Text>
</RoomRateDescription>
<Total AmountAfterTax="60000" CurrencyCode="EUR" DecimalPlaces="2">
<TPA_Extensions>
<HotelDiscount Percent="30"/>
</TPA_Extensions>
</Total>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
<GuestCount AgeQualifyingCode="8" Count="1" Age="10"/>
</GuestCounts>
</RoomRate>
</RoomRates>
<BasicPropertyInfo HotelCode="qatest0006"/>
</RoomStay>
<RoomStay>
<RatePlans>
<RatePlan RatePlanCode="QA0005RT0001.Q2">
<CancelPenalties>
<CancelPenalty NonRefundable="true"/>
</CancelPenalties>
<MealsIncluded Breakfast="false" Lunch="true" Dinner="false" MealPlanCodes="21"/>
</RatePlan>
</RatePlans>
<RoomRates>
<RoomRate RoomTypeCode="QA0005RT0001" NumberOfUnits="1" RatePlanCode="QA0005RT0001.Q2">
<RoomRateDescription>
<Text>1 Double bed with Ocean view</Text>
</RoomRateDescription>
<Total AmountAfterTax="40000" CurrencyCode="EUR" DecimalPlaces="2">
<TPA_Extensions>
<HotelDiscount Percent="30"/>
</TPA_Extensions>
</Total>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="2"/>
</GuestCounts>
</RoomRate>
</RoomRates>
<BasicPropertyInfo HotelCode="qatest0006"/>
</RoomStay>
</RoomStays>
</OTA_HotelAvailRS>
Status code: 200
-Bad Request
Response
<OTA_HotelAvailRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="5.000">
<Errors>
<Error Type="12" Code="450" ShortText="Invalid RQ format">line 7, column: 0, message: Element '{http://www.opentravel.org/OTA/2003/05}StayDateRange', attribute 'End': '2018/08/31' is not a valid value of the union type '{http://www.opentravel.org/OTA/2003/05}DateOrTimeOrDateTimeType'.
</Error>
</Errors>
</OTA_HotelAvailRS>
Status code: 400
-Internal Server Error
Response
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelAvailRS CorrelationID="ABC123" PrimaryLangID="en-GB" Version="7.000" xmlns="http://www.opentravel.org/OTA/2003/05">
<Errors>
<Error Type="13" Code="448" ShortText="Internal server error"/>
</Errors>
</OTA_HotelAvailRS>
Status code: 500
Reservation API
version 3.1.2
Make a Reservation
To make a reservation, send an OTA_HotelResRQ
message providing a HotelReservation
element with
RoomStays
, ResGuests
and ResGlobalInfo
elements. Only one HotelReservations
/HotelReservation
element must be provided.
The reservation will not be accomplished if another reservation with the same CorrelationID
was already sent
An optional POS
element can be used to provide segmentation information (Country, brand, device).
A reservation request must have a reference ID that identifies it on the API consumer side.
This ID should be placed in a HotelReservationID
element inside ResGlobalInfo
.
RoomStays
should contain one RoomStay
element for each room that will be booked.
Each RoomStay
element contains requested room type and rate plan codes as well as
guest counts for a single room.
ResGuests
should contain detailed information for each customer.
ResGlobalInfo
contains information that affects the whole reservation: property identifier,
check-in and check-out dates, reservation reference and reservation holder contact information.
ResGlobalInfo
can also contain an optional Total
element, which will be used to provide
the maximum amount at which a reservation should be made. If the calculated total
amount at time of reservation exceeds this amount, the reservation will not be
made and an error will be returned. The amount calculation is the same as
the one done in an availability request. This field allows to prevent making
reservations at a higher price than one obtained from a live availability
check, when a rate update from a supplier was received between an availability
check and a reservation request.
Rules for not allowing a reservation by price is that the amount given cannot be less than TotalHotelAmount - HotelDiscount
+ HotelMarkup
at booking time.
Otherwise the reservation will not be made.
If the reservation was made, an OTA_HotelResRS
response will contain both the reservation
reference provided by the API consumer (HotelReservationID
) as well as a unique reservation ID
created by ODIGEO Connect (UniqueID
). The response will also contain the amount at which
the reservation was made, in a ResGlobalInfo
/Total
element.
If the reservation was not possible, even if the response was successfully processed,
instead of a Success
element the root element will contain an Errors
/Error
element with an appropriate error code.
Request
Selected OTA_HotelResRQ elements
Nodes
-
OTA_HotelResRQ
required-
@CorrelationID
required -
@PrimaryLangID
optionalISO 639-1 for preferred language request.
-
@Version
required6.000
-
@xmlns
requiredhttp://www.opentravel.org/OTA/2003/05
-
POS
optionalPoint of Sale (POS) identifies the party or connection channel making the request.
-
Source
optional-
@ISOCountry
optionalISO 3166-1 alpha-2 Country Code from source
-
BookingChannel
optional-
@Type
optionalThe type of booking channel. Refer to OTA Code List Booking Channel Type (BCT).
-
CompanyName
optionalInformation to identify the company making the request
-
@CompanyShortName
optionalIdentifier for the company Name
-
-
-
TPA_Extensions
optional-
Device
optional-
@Type
optionalThe type of device. Refer to OC Device Type.
-
-
-
-
-
HotelReservations
required-
HotelReservation
required-
RoomStays
required-
RoomStay
required-
RoomRate
required-
@RatePlanCode
requiredRateplan identifier.
-
@RoomTypeCode
requiredRoomtype identifier.
-
-
GuestCounts
requiredA collection of Guest Counts associated with Room Stay. A child Guest Count element is required for each distinct age group.A collection of GuestCount by age group.
-
GuestCount
requiredA recurring element that identifies the number of guests and ages of the guests.
-
@AgeQualifyingCode
requiredDefines minimum age range or age category of a guest. Code based on: OC Age Categories definition
-
@Count
requiredNumber of guests of this type
-
@Age
optional/requiredRequired combined when it is combined with AgeQualifyingCode for children(8) or infant(7), optional otherwise.
-
-
-
ResGuests
requiredInformation about the guest who does the reservation
-
ResGuest
required-
Profiles
required-
ProfileInfo
requiredOne block for each guest
-
Profile
required-
Customer
required-
PersonName
required-
GivenName
required -
Surname
required
-
-
-
-
-
-
-
-
ResGlobalInfo
required-
TimeSpan
requiredCheck-in / Check-out Dates.
-
@Start
requiredCheck-in date. Format is YYYY-MM-DD
-
@End
requiredCheck-out date. Format is YYYY-MM-DD
-
-
Total
Reservation total information
-
@AmountAfterTax
The total amount including all associated taxes (e.g., sales tax, VAT, GST or any associated tax).
-
@CurrencyCode
-
@DecimalPlaces
Number of decimal places for the currency code specified.
-
-
HotelReservationIDs
The hotel confirmation number for which the booking rules are requested.
-
HotelReservationID
The HotelReservationID object contains various unique (ReservationID) and non unique (ConfirmationID, CancellationID) identifiers that the trading partners associate with a given reservation.
-
@ResID_Type
Defines the type of Reservation ID (e.g. reservation number, cancellation number). Refer to OpenTravel Code List Unique ID Type (UIT). We have to send 5 to indicate id from OTA
-
@ResID_Value
This is the actual value associated with ResID_Type as generated by the system that is the source of the ResID_Type. Currently to match external reservation id to the reservation making
-
-
-
Profiles
required-
ProfileInfo
requiredReservation holder contact information.
-
Profile
requiredOnly one required
-
Customer
required-
Telephone
required-
@PhoneNumber
required
-
-
Email
requiredEmail will be sanitized before creating a reservation, but not verified.
-
Address
requiredDetailed information on an address for the customer.
-
AddressLine
requiredDetailed information on an address for the customer.
-
CityName
required -
PostalCode
required -
StateProv
required -
CountryName
required@Code
optionalISO 3166-1 alpha-2 Country Code from source
-
-
-
-
-
-
BasicPropertyInfo
required-
HotelCode
requiredProperty code
-
-
-
-
-
-
-
Response
Response / selected OTA_HotelResRS elements
Nodes
-
OTA_HotelResRS
required-
Success
required (If the request was OK) -
HotelReservations
required (If the request was OK)-
HotelReservation
One or multiple room combinations will be retrieved.
-
UniqueID
To indicate Booking Id assigned to reservation
-
@Type
Defines the type of Reservation ID (e.g. reservation number, cancellation number). Refer to OpenTravel Code List Unique ID Type (UIT). 14 will be retrieved to indicate successfull reservation
-
@ID
Reservation ID assigned from bedbank
-
ResGlobalInfo
ResGlobalInfo is a container for various information that affects the Reservation as a whole. These include global comments, counts, reservation IDs, loyalty programs, and payment methods.
-
Total
Reservation total information
-
@AmountAfterTax
The total amount including all associated taxes (e.g., sales tax, VAT, GST or any associated tax).
-
@CurrencyCode
-
@DecimalPlaces
Number of decimal places for the currency code specified.
-
-
HotelReservationIDs
The hotel confirmation number for which the booking rules are requested.
-
HotelReservationID
The HotelReservationID object contains various unique (ReservationID) and non unique (ConfirmationID, CancellationID) identifiers that the trading partners associate with a given reservation.
-
@ResID_Type
Defines the type of Reservation ID (e.g. reservation number, cancellation number). Refer to OpenTravel Code List Unique ID Type (UIT).5 will be retrieved to indicate id comes from OTA
-
@ResID_Value
This is the actual value associated with ResID_Type as generated by the system that is the source of the ResID_Type. Currently to match external reservation id to the reservation making
-
-
-
BasicPropertyInfo
Hotel information by RomRate
-
HotelCode
Property identifier
-
-
-
-
-
-
Errors
required (If the request was Not OK)
-
Action | Endpoint |
---|---|
Reservation | POST /distributors/v1/DoReservation |
Contracts
Request | OTA2016B OTA_HotelResRQ.xsd |
Response | OTA2016B OTA_HotelResRS.xsd |
Examples
-Success
Request
<OTA_HotelResRQ xmlns="http://www.opentravel.org/OTA/2003/05" CorrelationID="basicReservation" PrimaryLangID="hi-IN" Version="6.000">
<HotelReservations>
<HotelReservation>
<RoomStays>
<RoomStay>
<RoomRates>
<RoomRate RatePlanCode="QA0004RT0001.QA0004RPNET0001" RoomTypeCode="QA0004RT0001"/>
</RoomRates>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="1"/>
</GuestCounts>
</RoomStay>
</RoomStays>
<ResGuests>
<ResGuest>
<Profiles>
<ProfileInfo>
<Profile>
<Customer>
<PersonName>
<GivenName>Andrés</GivenName>
<Surname>Lopéz</Surname>
</PersonName>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
</ResGuests>
<ResGlobalInfo>
<TimeSpan End="2020-02-15" Start="2020-02-13"/>
<Total AmountAfterTax="7306662" CurrencyCode="EUR" DecimalPlaces="1"/>
<HotelReservationIDs>
<HotelReservationID ResID_Type="5" ResID_Value="B000AR9FZE"/>
</HotelReservationIDs>
<Profiles>
<ProfileInfo>
<Profile>
<Customer>
<Telephone PhoneNumber="775-149-1602"/>
<Email>abagail.ryan@yahoo.com</Email>
<Address>
<AddressLine>09695 Schinner Mill</AddressLine>
<CityName>Friesenland</CityName>
<PostalCode>05768-6186</PostalCode>
<StateProv>Louisiana</StateProv>
<CountryName Code="TH"/>
</Address>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
<BasicPropertyInfo HotelCode="qatest0004"/>
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResRQ>
Response
<OTA_HotelResRS CorrelationID="basicReservation" PrimaryLangID="hi-IN" Version="6.000" xmlns="http://www.opentravel.org/OTA/2003/05">
<Success/>
<HotelReservations>
<HotelReservation>
<UniqueID Type="14" ID="8533be2b5c3eb69e"/>
<ResGlobalInfo>
<Total AmountAfterTax="7306662" CurrencyCode="EUR" DecimalPlaces="1"/>
<HotelReservationIDs>
<HotelReservationID ResID_Type="5" ResID_Value="B000AR9FZE"/>
</HotelReservationIDs>
<BasicPropertyInfo HotelCode="qatest0004"/>
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResRS>
Status code: 200
-Bad Request
Response
<OTA_HotelResRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="6.000">
<Errors>
<Error Type="12" Code="450" ShortText="Invalid RQ format">line 53, column: 0, message: Element '{http://www.opentravel.org/OTA/2003/05}AddressLine': [facet 'minLength'] The value has a length of '0'; this underruns the allowed minimum length of '1'.
</Error>
<Error Type="12" Code="450" ShortText="Invalid RQ format">line 53, column: 0, message: Element '{http://www.opentravel.org/OTA/2003/05}AddressLine': '' is not a valid value of the atomic type '{http://www.opentravel.org/OTA/2003/05}StringLength1to255'.
</Error>
</Errors>
</OTA_HotelResRS>
Status code: 400
-Internal Server Error
Response
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelResRS CorrelationID="ReservationServerError" xmlns="http://www.opentravel.org/OTA/2003/05" Version="6.000">
<Errors>
<Error Type="13" Code="448" ShortText="Internal server error"/>
</Errors>
</OTA_HotelResRS>
Status code: 500
Terms and Conditions
June 20, 2017
By using our Connectivity Services or API Specifications you agree to accept the Terms and Conditions and be bound by it. You shall not use any of the Services or API Specifications if you do not agree to be bound by these Terms and Conditions.
These Terms and Conditions between you and EnGrande S.L. and its affiliates (hereinafter together referred to “Odigeo Connect”) for Odigeo’s Connectivity Services and API Specifications may include other associated material that will be related to these Terms and Conditions.
Provisions of the Terms and Conditions
Built-to-obligations, Enhancements and Maintenance
-
The Odigeo Connect API Specifications can be found at the secure URL https://developers.odigeoconnect.com/api/distributors/.
-
You are allowed to make copies of the API Specifications for your own convenience. However, you acknowledge not to disclose, reproduce, summarize and/or distribute the API Specifications.
-
Odigeo Connect may change, enhance, suspend or discontinue the form and nature of any part of Connectivity Services or API Specifications at any time. In case of a change or other modification Odigeo Connect is not obliged but will use reasonable efforts to inform you about the implementation of such changes. You are required to use the most recent version of the API Specifications and to notify Odigeo Connect in advance before setting live any connectivity change or enhancement.
Licenses and Intellectual Property Rights
Odigeo Connect hereby grants to you under its intellectual property rights a personal, non-transferable, non-sub-licensable, non-exclusive, world-wide license to use Services and Specifications provided in these Terms and Conditions solely for internal use and not for distribution to third parties under the Terms and Conditions currently existing between the Parties.
As between the Parties, you acknowledge that Odigeo Connect owns all rights including all Intellectual Property Rights in the Content, in Access, in the Website and in any of its products and services, and that you do not acquire any right in or to the Content, Access and/or the Website, except as expressly granted in these Terms and Conditions.
Nothing in this Agreement grants to you any right in or to Odigeo Connect’s brand elements (for example, you may not use any of the other Odigeo Connect's brand elements in Google AdWords or any other form of search engine advertising, or register or attempt to register any brand element (including domain names) that is confusingly similar to the Odigeo Connect’s brand elements). All possible use of Odigeo Connect’s brand element shall inure Odigeo Connect's benefit.
Confidentiality
The Parties may receive Confidential Information from the other Party. Each Party agrees that they will not during and for 2 years after the term of the contractual relationship of the Parties disclose Confidential Information obtained from the other Party, except as legally required, and that it will reasonably protect Confidential Information received from the other Party from unauthorized use, access, or disclosure.
Indemnification
You agree that you will, at no cost to Odigeo Connect protect and defend the Odigeo Connect, hold Odigeo Connect harmless and indemnify Odigeo Connect and its officers, directors, employees and agents, against all claims, losses and damages, liabilities, costs and expenses (including reasonable legal costs), resulting or arising from or related to the misuse of the API Specification or Connectivity Services and/or a breach of these Terms and Conditions by you
Liability
Connectivity Services or API Specifications Content are provided on an "as is" and "as available" basis. Odigeo Connect excludes any liability, in particular any liability for indirect and consequential damages, including loss of profits, loss of data, business interruptions, additional costs and expenditures, and third party claims, for itself any of its directors, employees, members, representatives and other auxiliaries, resulting from any act or omission unless committed willfully or by gross negligence, regardless of the legal basis of such liability.
To the extent permitted by applicable law, any liability of Odigeo Connect for any indirect or consequential damage and for punitive or similar damages is excluded.
Nothing shall operate so as to exclude or limit the liability of either party for death or personal injury arising out of their own negligence, or for any other liability which cannot be excluded or limited by law
Term and Termination
The term of the agreed collaboration under these Terms and Condition between the Parties will commence by using the Connectivity Services or API Specifications, and continue in force until terminated by any of the Parties.
You may terminate this collaboration by discontinuing its use at any time. Without prejudice to any other rights, Odigeo Connect may cease providing Connectivity Services or API Specifications at any time and for any reason.
Upon termination for any reason, all license rights granted herein terminate, and you must immediately return to Odigeo Connect all Odigeo Connect property in your custody or control and delete other materials received as part of access, and cease to use all of Odigeo Connect's Brand Elements.
In case of termination all bookings made prior the termination remain honored and will perpetuate until made use of by the consumer
Severability
If any provision of these Terms and Conditions is held to be unenforceable, then that provision is to be construed either by modifying it to the minimum extent necessary to make it enforceable (if permitted by law) or disregarding it (if not). The rest of the Terms and Conditions is to remain in effect as written, and the unenforceable provision is to remain as written in any circumstances other than those in which it is held to be unenforceable. This applies to contractual omissions as well, intended or unintended.
Applicable law and jurisdiction
The terms and conditions are subject to the laws of Spain.
Subject to mandatory law, the exclusive place of jurisdiction for all disputes arising out of or in connection with this contractual relationship, and the place of fulfilment and the place of enforcement, is Barcelona, Spain