Offer operations

Offer is an individual bookable entry in our system. They are returned by dates search request. Each offer is uniquely identified by two components:

  • Tour operator code (expressed as TourOperator in response)
  • Offer hash code (expressed as HashCode in response)

Those two entries together give you a unique way of identifying every offer in our system and to do actions on that offer.

Examples of actions would be:

  • Check of offer availability
  • Register a booking on that offer
  • Register an option (if Tour Operator supports it)

Endpoint for every specific offer is at: /offer/<TourOperator>/<HashCode>/<action>.

Basic information

Sending GET request without any action will return information about that hash code as you would execute search request but target exactly that offer:

For example: /offer/SON/5d732c3c1b55244a4f066f5fbf831b77:1576886400:1/

This would return the same output as dates request, but without paging or filtering information. In response, an additional field is present called connection, which is the connection name that this request was routed to.

Example response:

{
    "Products": [
        {
            "Product": {
                "OfferName": "Dunajski val\u010dek in vonj po cimetu ter sladkih dobrotah",
                "GiataID": 3331586590492,
                "Picture": {
                    "Thumbnail": "http:\/\/ors.si\/giata-pics3\/3331586590492\/thumb.jpg",
                    "Full": "http:\/\/ors.si\/giata-pics3\/3331586590492\/full.jpg"
                },
                "Location": {
                    "RegionGroupID": "572",
                    "RegionGroupName": "Austria",
                    "RegionID": 701,
                    "RegionName": "Vienna & vicinity"
                }
            },
            "OfferID": 0
        }
    ],
    "Dates": [
        {
            "OfferID": 0,
            "StartDate": "2019-12-21",
            "EndDate": "2019-12-21",
            "TourOperator": "SON",
            "TourOperatorName": "Son\u010dek",
            "ProductCode": "8947",
            "ProductName": "Dunajski val\u010dek in vonj po cimetu ter sladkih dobrotah",
            "ServiceCode": "35915",
            "Duration": 1,
            "HashCode": "5d732c3c1b55244a4f066f5fbf831b77:1576886400:1",
            "OfferSubType": "trip",
            "Price": 35
        }
    ],
    "Connection": "sellit"
}

Request structure

When performing check, booking or any other operation on offer you will have to provide a list of services, passenger names and any other information required.

Request structure looks like:

typedef Request = struct{
    # Requested language
    Language   string

    # Number of adults and age of children. This field is not
    # required when Travellers field is populated
    AdultCount  int
    ChildrenAge array{int}

    # Detailed list of travelers. This field is
    # required for booking.
    Travelers array{struct{
        # Type of passenger. Type determines sex or other property of
        # passenger. Available types are:
        #   - H : Male
        #   - F : Female
        #   - K : Children (generally up to 18 yr)
        #   - B : Baby (generally up to 2 yr)
        PassengerType string

        # Passenger first name
        FirstName     string

        # Passenger last name
        LastName      string

        # Passenger age (when the birth date is provided, this field can be
        # skipped). Note that some tour operators require a birth
        # date not just age.
        Age           int

        # Passenger birth date (Y-m-d format)
        BirthDate     string
    }}

    # Any additional comments
    Comments string

    # Customer information
    Customer  struct{
        Address   string
        ZIPCode   string
        City      string
        Telephone string
        Mobile    string
        Email     string
        FirstName string
        LastName  string
        Country   string
        Sex       string
    }
}

Response structure

For all actions, responses are structured the same way, both when creating booking and accessing already existing booking:

typedef Response = struct{
    # Status code contains resulting status after an operation
    StatusCode struct{
        # Status of the operation. Statuses are the following:
        #  - 0 : Offer is not available
        #  - 1 : Offer is free (available to book)
        #  - 2 : Offer is on request. When the offer is on request, booking
        #        is still possible, but customer must wait for a confirmation
        #        from the tour operator.
        #  - 3 : Communication error (something went wrong when communicating
        #        with tour operator system)
        #  - 4 : Offer is sold out (same as status 0)
        #  - 5 : Booking is not possible, check the detailed description
        #        and corresponding Info fields for description of a problem.
        Status int

        # Detailed status code
        ID     int

        # Detailed status description
        Text   string
    }

    # Contains pricing information
    Price struct{
        # Currency price is being calculated in (usually EUR)
        Currency       string

        # Total price. This is the price the customer has to pay.
        TotalPrice     float

        # Price per person. This field is not always present.
        PricePerPerson float

        # Total amount of discounts applied. This field is not
        # always present.
        Discounts      float
    }

    Operator struct{
        # Booking code generated internally by our system
        BookingCode       string

        # Booking code generated by tour operator system
        RemoteBookingCode string

        # Action code performed on this operation
        Action            string

        # Tour operator code
        TourOperator      string

        # Agenture number for this agency
        Agenture          string

        # Hash code of offer that this operation was performed on
        HashCode          string
    }

    # Offer description that is provided by a tour operator
    ServiceDesc array{struct{
        # Additional data provided by tour operator
        map{string => string}

        # List of services this description is applicable to
        Services array{int}
    }}

    # Contains same structure as when requesting
    # basic information on offer.
    OfferInfo DatesResponse

    # Customer information
    Customer  struct{
        Address   string
        ZIPCode   string
        City      string
        Telephone string
        Mobile    string
        Email     string
        FirstName string
        LastName  string
        Country   string
        Sex       string
    }

    # Human readable multiline text returned by the tour operator.
    # This text usually includes a summary of the offer being booked
    # with additional notes provided by the tour operator
    Info      array{string}

    # Detailed list of travelers
    Travelers map{
        # Key is an passenger sequential ID (starting at 1!)
        string => struct{
            # Type of passenger. Type determines sex or other property of
            # passenger. Available types are:
            #   - H : Male
            #   - F : Female
            #   - K : Children (generally up to 18 yr)
            #   - B : Baby (generally up to 2 yr)
            PassengerType string

            # Passenger first name
            FirstName     string

            # Passenger last name
            LastName      string

            # Passenger age
            Age           int

            # Passenger birth date
            BirthDate     string

            # Passenger price. This field can be empty
            Price         float
        }
    }

    # Services are the structures that describe what
    # is contained in the offer
    Services   map{
        # Key is service sequential ID (starting at 1!)
        string => struct{
            # Marker field for service manipulation. Usually empty
            MarkerField        string

            # Service type. This denotes what type of service is requested
            # (eg. H is for Hotel, F is for flight, EX is for extras, etc...)
            Type               string

            # Service code (usually product code)
            Code               string

            # Additional service paramaters (usually service code)
            Paramaters         string

            # Additional optional paramaters
            OptionalParamaters string

            # Service allocation parameter (usually empty)
            Allocation         string

            # Number of items requested
            Count              string

            # Travellers on this service. Value is an IDs of travelers
            # as provided in Travellers map (eg: "1,2" would mean that
            # travelers with ID 1 and 2 use this service)
            Travelers          string

            # Service starting date
            StartDate          string

            # Service ending date
            EndDate            string

            # Service status (eg. OK - Booked, XX - canceled)
            Status             string

            # Service price (can be empty)
            Price              float
        }
    }

    # Connection name this request was routed to
    Connection string
}

Example response:

{
    "RequestID": "d17c4dcc-5dfca0935db6b834652972",
    "StatusCode": {
        "Status": 1,
        "ID": 206,
        "Text": "Rezervacija na vpra\u0161anje (RQ)"
    },
    "Price": {
        "Currency": "EUR",
        "TotalPrice": "1698",
        "PricePerPerson": "849"
    },
    "Operator": {
        "BookingCode": "20191220121834240",
        "RemoteBookingCode": "5528139",
        "Action": "BA",
        "TourOperator": "PALM",
        "Agenture": "707967",
        "HashCode": "2a60da391139a406eaa6f65b16388a66"
    },
    "ServiceDesc": [
        {
            "Type": "hotel",
            "StartDate": "2020-02-08",
            "EndDate": "2020-02-15",
            "HotelCode": "126017",
            "ServiceCode": "ZIHUR00120",
            "Services": [
                1,
                2
            ]
        }
    ],
    "OfferInfo": {
        "Products": [
            {
                "Product": {
                    "OfferName": "The Cascades Golf Resort 5*",
                    "GiataID": 36600,
                    "Picture": {
                        "Thumbnail": "http:\/\/ors.si\/giata-pics\/36600\/thumb.jpg",
                        "Full": "http:\/\/ors.si\/giata-pics\/36600\/full.jpg"
                    },
                    "RecommendationPercentage": 91,
                    "Location": {
                        "LocationName": "Safaga",
                        "LocationID": 8,
                        "RegionGroupID": "651",
                        "RegionGroupName": "Egipt",
                        "RegionID": 1031,
                        "RegionName": "Rde\u010de morje",
                        "Latitude": 26.858973568496,
                        "Longitude": 33.992836475372
                    },
                    "Facts": {
                        "ben": "v bli\u017eini pla\u017ee (cca. 100-500m)",
                        "chf": "dru\u017eini prijazno",
                        "clb": "klub hotel",
                        "ani": "animacijski program",
                        "spt": "bogata \u0161portna ponudba",
                        "wel": "bogata wellness ponudba",
                        "pol": "bazen",
                        "wms": "masa\u017ea",
                        "wth": "thalasso",
                        "wcu": "cure application",
                        "wsn": "steam bath (tur\u0161ka kopel)",
                        "wbf": "beauty farm",
                        "sws": "vodni \u0161porti",
                        "sbs": "\u0161porti z \u017eogo",
                        "sgl": "golf",
                        "sae": "aerobika",
                        "sfr": "fitness",
                        "stn": "tenis",
                        "sdv": "potapljanje",
                        "sth": "ostale \u0161portne aktivnosti",
                        "wifi": "wifi",
                        "air": "klima",
                        "park": "parkiri\u0161\u010de"
                    }
                },
                "OfferID": 0
            }
        ],
        "Dates": [
            {
                "OfferID": 0,
                "StartDate": "2020-02-08",
                "EndDate": "2020-02-15",
                "TourOperator": "PALM",
                "TourOperatorName": "Palma",
                "ProductCode": "126017",
                "ProductName": "The Cascades Golf Resort 5*",
                "ServiceCode": "ZIHUR00120",
                "Duration": 7,
                "HashCode": "2a60da391139a406eaa6f65b16388a66",
                "OfferSubType": "catalog",
                "Price": 849,
                "ServiceType": "AI",
                "ServiceName": "all inclusive",
                "RoomType": "DZ",
                "RoomName": "dvoposteljna soba",
                "ArrivalAirport": "HRG",
                "ArrivalAirportName": "Hurgada",
                "DepartureAirport": "LJU",
                "DepartureAirportName": "Ljubljana",
                "RoomDetails": "standard, stranski pogled na morje, standard, vse vklju\u010deno"
            }
        ]
    },
    "Customer": {
        "Address": "Fake street",
        "ZIPCode": "SI-12345",
        "City": "Fake city",
        "Telephone": "038640637987",
        "Email": "fake.news@ors.si",
        "FirstName": "Fake",
        "LastName": "News",
        "Sex": "H"
    },
    "Info": [
        "H 126017 ZIHUR00120: ",
        "  The Cascades Golf Resort 5*",
        "  Product code: 126017",
        "  Service code: ZIHUR00120",
        "  Period: 08.02.2020 - 15.02.2020",
        "  Meal: all inclusive",
        "  Details: standard, stranski pogled na morje, standard, vse vklju\u010deno",
        "  --------------------------------------------------------------",
        "  Price breakdown",
        "   * Odrasla oseba .. 1 x 849 : 849",
        "   * Odrasla oseba .. 1 x 849 : 849",
        "   Total: 1698",
        "  --------------------------------------------------------------",
        "  Supplements (bookable with action TD):",
        "   * vizum z asistenco lokalnega partnerja 30 EUR",
        "   * ZUNANJE PARKIRNO MESTO P1\/P2 30 EUR",
        "  --------------------------------------------------------------",
        "  Flight Info:",
        "  *  Typ Dep                 Arr              Flight    ",
        "  => O   08.02. 19:30 LJU .. 09.02. 00:30 HRG UJ-6381   ",
        "  <= V   15.02. 15:00 HRG .. 15.02. 18:15 LJU UJ-6380   ",
        "  These timetables are informative and can be changed.",
        "  You will be notified of the exact timetables 5-7 days before departure with the final travel notice.",
        "",
        "Request ID: d17c4dcc-5dfca0935db6b834652972",
        "CRS powered by ORS"
    ],
    "Travelers": {
        "1": {
            "PassengerType": "H",
            "FirstName": "OTHCCSC",
            "LastName": "UDEDWXY",
            "Age": "201274",
            "BirthDate": "1974-12-20",
            "Price": "849"
        },
        "2": {
            "PassengerType": "H",
            "FirstName": "UGZDKBW",
            "LastName": "IEXRCIV",
            "Age": "201274",
            "BirthDate": "1974-12-20",
            "Price": "849"
        }
    },
    "Services": {
        "1": {
            "Type": "H",
            "Code": "126017",
            "Paramaters": "ZIHUR00120",
            "StartDate": "08022020",
            "EndDate": "15022020",
            "Status": "OK",
            "Price": "1698"
        },
        "2": {
            "Type": "F",
            "Code": "LJU HRG",
            "Paramaters": "ZIHUR00120",
            "StartDate": "08022020",
            "EndDate": "15022020",
            "Status": "OK"
        }
    },
    "Connection": "turist"
}