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 required

    Date is required in ISO8601 expressed in UTC format.

Response

JSEND message with the properties list or failure details.

Nodes

  • status required

    Success 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 required

        Property identifier. Alphanumeric code with a maximum length of 16 characters

      • status required

        Event that triggered the change of the property (created/modified/closed).

      • date required

        UTC 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 required

    Success if everything was ok, fail or error, otherwise

  • data required
    • resources required (if the response was successful)

      Properties attributes

      • propertyId required

        Property identifier. Alphanumeric code with a maximum length of 16 characters

      • brandId optional

        Some properties might have a related brand identifier

      • chainId optional

        Some properties might belong to a Chain

      • externalIdentifiers optional

        External list of ids

        • tripadvisorId optional

          Mapping to Tripadvisor

        • bookingId optional

          Mapping to Booking

        • eanId optional

          Mapping to ean

        • epsRapidId optional

          Mapping to epsRapid

        • hotelbedsId optional

          Mapping to Hotelbeds

      • name required

        Property name

      • description required

        Array of property descriptions in different languages

        • locale required

          ISO 639-1 for preferred language code

        • content required

          Description of the property with a maximum of 4000 characters

      • latitude required

        Latitude in decimal format, up to 8 decimal numbers, must comply with coordinate requirements

      • longitude required

        Longitude in decimal format, up to 8 decimal numbers, must comply with coordinate requirements

      • rating required

        Rating from 0 to 5 related to the quality of the property.

      • address required

        Property location details

        • street required

          Alphanumeric field with a max. of 255 characters

        • postalCode required

          Alphanumeric field with a max. of 20 characters

        • stateProvince required

          Alphanumeric field with a max. of 512 characters

        • cityCode required

          Numeric field mapping with city with a max. of 10 characters corresponding with GeoNames ID

      • accommodationType required

        String indicating Accommodation type, see glossary definition

      • checkInOut optional

        Check In/Out Property time specific information

        • checkInStart required

          Check in time starts (hh:mm:ss)

        • checkInFinish required

          Check in time ends (hh:mm:ss)

        • checkOutStart required

          Check out time starts (hh:mm:ss)

        • checkOutFinish required

          Check out time ends (hh:mm:ss)

      • reception optional

        Reception information

        • receptionOnSite required

          boolean

        • receptionCode required

          String, maximum length of 255 characters

        • receptionPhone required

          String, maximum length of 45 characters

        • receptionEmail optional

          String (email format), maximum length of 255 characters

        • receptionAddress required

          String, maximum length of 255 characters

        • reception24h required

          boolean

        • receptionTimeFrom required

          Reception Opens at time (hh:mm:ss)

        • receptionTimeTo required

          Reception Closes at time (hh:mm:ss)

      • nearbyPOIs optional

        List of Points Of Interest (POI)

        • id required

          integer (max characters 11) GeoNames POI identifier

        • name required

          string describing POI

        • coordinates required

          Coordinates for the POI

        • distance required

          Distance to property in meters (Decimal value of

        • type required

          string detailing the characteristics of a POI

      • media required

        List of media related to property

        • images required

          List of images related to property

          • id required

            String identifying the image

          • fullSizeUrl required

            String with the url of the image in big format

          • thumbnailUrl required

            String with the url of the image in reduced format

          • main required

            boolean to flag if it is the main picture

      • building required

        Building property information

        • flors required

          numeric value to describe number of flors (max 5 length)

        • lift required

          boolean to state whether if exists or not

        • yearBuilt required

          numeric value to describe Year of construction (max 5)

        • lastRenewal required

          numeric value to describe Year of renewal (max 5)

      • facilities required

        List 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 successful

    List of data with property rooms information

    • type required

      room will be return as value

    • id required

      Internal Unique Identifier for a room

    • attributes required

      Object providing information about the room

      • code required

        Code identifier to be used in future availability/reservation calls, string from 1 to 16 characters

    • relationships required

      Object providing room relation with other resources

      • images required

        Object with dataset of image list

        • data required

          Main node of the data list

          • type required

            Right now only image resource type is allowed

          • id required

            Image identifier, string 36 characters

  • included required

    List of extended resources information linked to rooms

    • type required

      image or imageTransformation will be return as value

    • id required

      StringImage or imageTransformation identifier

    • attributes required

      Object providing information about the image or imageTransformation

      • isMain required for image resources

        boolean, indicates whether is the main image or not

      • type required for imageTransformation resources

        string, values will be a limited set: FULL_SIZE,THUMBNAIL. Indicates the transformation applied to the image

      • url required for imageTransformation resources

        string, valid url where the image is

      • width required for imageTransformation resources

        numeric value, relates to width in pixels for the image

      • height required for imageTransformation resources

        numeric value, relates to height in pixels for the image

    • relationships required for image resources, empty otherwise

      Object providing image relation with other resources

      • imageTransformations required

        Object with dataset of imageTransformation list related to the image parent resource

        • data required

          Main node of the data list

          • type required

            Right now only imageTransformation resource type is allowed

          • id required

            ImageTransformation identifier, string 36 characters

  • errors required if request fails

    List of data with error information

    • status required

      string, Code identifier of the failure

    • detail optional

      string, Extended message with the information of the failure

    • title required

      string, 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

      Request Unique Identifier

    • @PrimaryLangID optional

      ISO 639-1 for preferred language request.

    • @Version required

      5.000

    • @xmlns required

      http://www.opentravel.org/OTA/2003/05

    • POS optional

      Point of Sale (POS) identifies the party or connection channel making the request.

    • AvailRequestSegments required

      • AvailRequestSegment required

        • HotelSearchCriteria required

          • Criterion required

            • HotelRef required

              Use multiple HotelRef elements to request availability from multiple properties

              • @HotelCode required

                Property identifier.

            • StayDateRange required

              Check-in / Check-out Dates.

              • @Start required

                Check-in date. Format is YYYY-MM-DD

              • @End required

                Check-out date. Format is YYYY-MM-DD

            • RoomStayCandidates required

              • RoomStayCandidate required

                Use multiple RoomStayCandidate elements to request availability for multiple rooms

                • GuestCounts required

                  A 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 required

                    A recurring element that identifies the number of guests and ages of the guests.

                    • @AgeQualifyingCode required

                      Defines minimum age range or age category of a guest. Code based on: OC Age Categories definition

                    • @Count required

                      Number of guests of this type

                    • @Age optional/required

                      Required 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 refundable

                  Policy 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

                Currency Iso Code

              • @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

                • 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/required

                  Required when using AgeQualifyingCode for children(8), optional otherwise.

        • BasicPropertyInfo

          Hotel information by RomRate

          • HotelCode

            Property identifier

    • Errors required (If the request was Not OK)
      • Error

        Description of the error (Multiple tags Error can be retrieved).

        • @Type

          Error type, see glossary

        • @Code

          Error code, see glossary

        • @ShortText

          Short description of the error

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

      Request Unique Identifier

    • @PrimaryLangID optional

      ISO 639-1 for preferred language request.

    • @Version required

      5.000

    • @xmlns required

      http://www.opentravel.org/OTA/2003/05

    • POS optional

      Point of Sale (POS) identifies the party or connection channel making the request.

    • AvailRequestSegments required

      • AvailRequestSegment required

        • HotelSearchCriteria required

          • Criterion required

            • HotelRef required

              Only one HotelRef element will be required for this call, if there are more elements only the first will be used

              • @HotelCode required

                Property identifier.

            • StayDateRange required

              Check-in / Check-out Dates.

              • @Start required

                Check-in date. Format is YYYY-MM-DD

              • @End required

                Check-out date. Format is YYYY-MM-DD

            • RoomStayCandidates required

              • RoomStayCandidate required

                Use multiple RoomStayCandidate elements to request availability for multiple rooms

                • GuestCounts required

                  A 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 required

                    A recurring element that identifies the number of guests and ages of the guests.

                    • @AgeQualifyingCode required

                      Defines minimum age range or age category of a guest. Code based on: OC Age Categories definition

                    • @Count required

                      Number of guests of this type

                    • @Age optional/required

                      Required 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 refundable

                  Policy 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

                Currency Iso Code

              • @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

                • 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/required

                  Required when using AgeQualifyingCode for children(8), optional otherwise.

        • BasicPropertyInfo

          Hotel information by RomRate

          • HotelCode

            Property identifier

    • Errors required (If the request was Not OK)
      • Error

        Description of the error (Multiple tags Error can be retrieved).

        • @Type

          Error type, see glossary

        • @Code

          Error code, see glossary

        • @ShortText

          Short description of the error

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

      Request Unique Identifier

    • @PrimaryLangID optional

      ISO 639-1 for preferred language request.

    • @Version required

      5.000

    • @xmlns required

      http://www.opentravel.org/OTA/2003/05

    • POS optional

      Point of Sale (POS) identifies the party or connection channel making the request.

      • Source optional

        • @ISOCountry optional

          ISO 3166-1 alpha-2 Country Code from source

        • BookingChannel optional

          • CompanyName optional

            Information to identify the company making the request

            • @CompanyShortName optional

              Identifier for the company Name

        • TPA_Extensions optional

          • Device optional

    • AvailRequestSegments required

      • AvailRequestSegment required

        • HotelSearchCriteria required

          • Criterion required

            • HotelRef required

              Use multiple HotelRef elements to request availability from multiple properties

              • @HotelCode required

                Property identifier.

            • StayDateRange required

              Check-in / Check-out Dates.

              • @Start required

                Check-in date. Format is YYYY-MM-DD

              • @End required

                Check-out date. Format is YYYY-MM-DD

            • RoomStayCandidates required

              • RoomStayCandidate required

                Use multiple RoomStayCandidate elements to request availability for multiple rooms

                • GuestCounts required

                  A 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 required

                    A recurring element that identifies the number of guests and ages of the guests.

                    • @AgeQualifyingCode required

                      Defines minimum age range or age category of a guest. Code based on: OC Age Categories definition

                    • @Count required

                      Number of guests of this type

                    • @Age optional/required

                      Required 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 refundable

                  Policy 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

                Currency Iso Code

              • @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

                • 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/required

                  Required when using AgeQualifyingCode for children(8), optional otherwise.

        • BasicPropertyInfo

          Hotel information by RomRate

          • HotelCode

            Property identifier

    • Errors required (If the request was Not OK)
      • Error

        Description of the error (Multiple tags Error can be retrieved).

        • @Type

          Error type, see glossary

        • @Code

          Error code, see glossary

        • @ShortText

          Short description of the error

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

      Request Unique Identifier

    • @PrimaryLangID optional

      ISO 639-1 for preferred language request.

    • @Version required

      6.000

    • @xmlns required

      http://www.opentravel.org/OTA/2003/05

    • POS optional

      Point of Sale (POS) identifies the party or connection channel making the request.

      • Source optional

        • @ISOCountry optional

          ISO 3166-1 alpha-2 Country Code from source

        • BookingChannel optional

          • CompanyName optional

            Information to identify the company making the request

            • @CompanyShortName optional

              Identifier for the company Name

        • TPA_Extensions optional

          • Device optional

    • HotelReservations required

      • HotelReservation required

        • RoomStays required

          • RoomStay required

            • RoomRate required

              • @RatePlanCode required

                Rateplan identifier.

              • @RoomTypeCode required

                Roomtype identifier.

            • GuestCounts required

              A 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 required

                A recurring element that identifies the number of guests and ages of the guests.

                • @AgeQualifyingCode required

                  Defines minimum age range or age category of a guest. Code based on: OC Age Categories definition

                • @Count required

                  Number of guests of this type

                • @Age optional/required

                  Required combined when it is combined with AgeQualifyingCode for children(8) or infant(7), optional otherwise.

            • ResGuests required

              Information about the guest who does the reservation

              • ResGuest required

                • Profiles required

                  • ProfileInfo required

                    One block for each guest

                    • Profile required

                      • Customer required

                        • PersonName required

                          • GivenName required

                          • Surname required

            • ResGlobalInfo required

              • TimeSpan required

                Check-in / Check-out Dates.

                • @Start required

                  Check-in date. Format is YYYY-MM-DD

                • @End required

                  Check-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

                  Currency Iso Code

                • @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 required

                  Reservation holder contact information.

                  • Profile required

                    Only one required

                    • Customer required

                      • Telephone required

                        • @PhoneNumber required

                      • Email required

                        Email will be sanitized before creating a reservation, but not verified.

                      • Address required

                        Detailed information on an address for the customer.

                        • AddressLine required

                          Detailed information on an address for the customer.

                        • CityName required

                        • PostalCode required

                        • StateProv required

                        • CountryName required

              • BasicPropertyInfo required

                • HotelCode required

                  Property 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

                Currency Iso Code

              • @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)
      • Error

        Description of the error (Multiple tags Error can be retrieved).

        • @Type

          Error type, see glossary

        • @Code

          Error code, see glossary

        • @ShortText

          Short description of the error

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

  1. The Odigeo Connect API Specifications can be found at the secure URL https://developers.odigeoconnect.com/api/distributors/.

  2. 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.

  3. 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