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_ids. 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
RateIDs as keys. - Each
RateIDcontains a map using one or moreDates as the key. - Finally, each
Datepoints to an array. Each array contains, for thatRateIDandDate:travelerTypeobject which is a structured description of the age, membership or role of the traveler this price is intended for.- An optional array of
startTimescontaining the times of the day. IfstartTimesis empty, this price is valid for the entire date. - All valid prices (
original,net,retail) with theircurrency - An optional array of
includedTaxesif 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", ] } ] }}Included Taxes
Operators have the ability to send not only the prices, but also the tax information depending on the country's requirements. Each entry should include the id, name, currency, and at least one price attribute (original, retail, or net). More than one price attribute may be provided if applicable as shown in example below.
If the Operator does not give any tax details, the includedTaxes object is not present.
Note: When includedTaxes is present, at least one of original, net or retail must be included, all of them may be provided if applicable.
Each includedTaxes object will contain the following fields:
| Field Name | Format | Required | Description |
|---|---|---|---|
id | string | No | A unique identifier for the tax or fee. Strongly recommended for internal reference and integration purposes. |
name | string | Available (required from supplier) | A short, descriptive name for the tax being applied (e.g., "VAT", "City Tax"). The name should be unique. If no tax id is provided, the system will use the combination of name and currency to identify uniqueness. |
currency | string | Available (required from supplier) | The currency code (ISO 4217 format) in which the tax amount is expressed (e.g., "USD", "EUR").
The currency must match the currency used for the item's price (original, net or retails). |
original | int64 | Optional - conditionally required from supplier | The amount of tax or fee applied to the original price. At least one of |
net | int64 | Optional - conditionally required from supplier | The amount of tax or fee applied to the net price. At least one of |
retail | int64 | Optional - conditionally required from supplier | The amount of tax or fee applied to the retail price. At least one of |
Examples
{ "783dba55-f9a8-4b82-a4c6-fe2cadad45d2": { "2021-04-05": [ { "id": "aefe688e-4b90-4e92-b6b6-23a660eaa3f8", "name": "Adult Rate", "net": { "amount": 10000, "currency": "USD" }, "original": { "amount": 12000, "currency": "USD" }, "retail": { "amount": 15000, "currency": "USD" }, "startTimes": [ "2021-04-05T14:30:00-06:00", "2021-04-05T16:30:00-06:00" ], "status": "ACTIVE", "travelerType": { "ageBand": "ADULT", "maxAge": 99, "minAge": 18, "modifier": "NONE", "name": "Adult", "title": "Adult (18+)", "description": "Price for a single adult traveler." }, "includedTaxes": [ { "id": "tax-001", "name": "VAT", "currency": "USD", "net": 800, "retail": 1000, }, { "id": "tax-002", "name": "City Tax", "currency": "USD", "net": 300, "retail": 500, } ], } ] }}