Pricing
Price Schedule is a connectivity feature offered by Redeam, allowing operators to set specific daily price points for tours and attractions rather than static pricing for all dates.
Within the transaction flow you will need to retrieve supplier, products and rate objects regardless of the pricing type. At the time of availability & traveler type selection you will need to check both the Availabilities and Price Schedule endpoints to ensure that there is availability AND a valid price for that date and traveler type.
Please note that Get Price Schedule needs to be implemented in conjunction with the Get Rates call.
The Get Rates call uses the product_id
and the supplier_id
which returns a list of available rates with their rate_id
s. The rate_id
can be used in the price schedule call to get details of a specific rate. It should also be stored and used when creating a hold for cross reference.
Please note that if the price schedule is utilized for a product, the call to get a price should be the price schedule call.
The data from both of Availability and Price Schedule endpoints must be used together in order to determine which dates/times are available to be booked, and what traveler types / prices are available at those times.
For example, availabilities are checked for the Product 1 Rate A, which utilized Redeam’s Price Schedule feature, and contains a RatePrice for an Adult traveler. When checking availability, Rate A is available at various times on June 23rd and June 24th. However, upon checking the Price Schedule for Rate A, an Adult price is only visible on June 23rd. Therefore, Rate A is only bookable for an adult on June 23rd using the price on the Price Schedule.
Summary / Outline Booking Flow
Supplier, Product and Rate are selected as normal.
Availabilities endpoint is queried to determine when the product may be booked
Price Schedule endpoint is queried to determine when specific traveler types are available & at what price point
- The response contains nested map as follows
- The top-level map uses
RateID
s as keys. - Each
RateID
contains a map using one or moreDate
s as the key. - Finally, each
Date
points to an array. Each array contains, for thatRateID
andDate
:travelerType
object which is a structured description of the age, membership or role of the traveler this price is intended for.- An optional array of
startTimes
containing the times of the day. IfstartTimes
is empty, this price is valid for the entire date. - All valid prices (
original
,net
,retail
) with theircurrency
- An optional array of
includedTaxes
if any taxes or additional fees are included in the prices
- The top-level map uses
- The response contains nested map as follows
A hold is created using the selected supplier, product, rate, price & availability.
A booking is placed with the selected supplier, product, rate, price, availability & hold.
- If a RatePrice is present on the Price Schedule, this should be used above all else.
- It is an error to use the PriceId of a RatePrice if a price for the requested time & traveler type is present on the Price Schedule.
Start Times
Price Schedule may contain an array of startTimes
if a operator has various timeslots in a day. If there are different prices for different times of day, price schedule can provide that level of granularity (as shown in example below).
{
"9010149b-537f-4417-884c-39970b1dc9bb": {
"2023-08-17": [
{
"id": "d4fa23b4-6b9c-4407-b642-bc678bd3c00a",
"name": "ADULT",
"net": {
"amount": 5405,
"currency": "USD"
},
"original": {
"amount": 0,
"currency": "USD"
},
"retail": {
"amount": 5405,
"currency": "USD"
},
"travelerType": {
"ageBand": "ADULT",
"maxAge": 100,
"minAge": 13,
"name": "ADULT"
},
"startTimes": [
"2023-08-17T12:00:00-04:00",
"2023-08-17T13:00:00-04:00",
"2023-08-17T14:00:00-04:00",
]
},
{
"id": "d4fa23b4-6b9c-4407-b642-bc678bd3c00a",
"name": "ADULT",
"net": {
"amount": 4405,
"currency": "USD"
},
"original": {
"amount": 0,
"currency": "USD"
},
"retail": {
"amount": 4405,
"currency": "USD"
},
"travelerType": {
"ageBand": "ADULT",
"maxAge": 100,
"minAge": 13,
"name": "ADULT"
},
"startTimes": [
"2023-08-17T19:00:00-04:00",
"2023-08-17T20:00:00-04:00",
"2023-08-17T21:00:00-04:00",
]
}
]
}
}
Taxes
Operators have the ability to send not only the prices, but also the tax information depending on the country's requirements. If tax amounts are required to be detailed, the includingTaxes
object followed by the name
, retail
and net
attributes can be used as shown in above example.
If the Operator does not give any tax details, the includedTaxes
object is not present.