Skip to content

Pricing Models

Project Expedition products use one of four pricing models. Understanding which model a product uses is essential for correct availability checks and bookings.

Overview

ModelDescriptionCommon Use Cases
By Person TypePrice varies by traveler categoryDay tours, walking tours, most activities
By Time BasedPrice based on durationPrivate chauffeur, equipment rentals
By OccupancyPrice based on group/room sizePrivate boat charters, multi-day trips
By APIDynamic pricing from supplierGo City passes, third-party tickets

Identifying the Pricing Model

Call /return_availability and check the pricing_rates array inside each time_with_description entry. The pricing_rate value in each entry tells you which traveler categories or duration options are available:

{
"availability": [{
"date": "2025-06-15",
"time_with_description": [{
"time": "7:00 am",
"description": "Morning Departure",
"price": 65.00,
"pricing_rates": [
{ "pricing_rate": "Adult", "min_age": 18, "max_age": 99, "min_quantity": 1, "max_quantity": 50 },
{ "pricing_rate": "Child", "min_age": 5, "max_age": 17, "min_quantity": 0, "max_quantity": 10 },
{ "pricing_rate": "Infant", "min_age": 0, "max_age": 4, "min_quantity": 0, "max_quantity": 5 }
]
}]
}]
}

The pricing_rate values indicate which parameters are valid for booking.


By Person Type (Most Common)

Price varies by traveler category: adults, children, seniors, students, infants.

Identifying

The pricing_rates array contains person-type entries such as "Adult", "Child", "Senior":

"pricing_rates": [
{ "pricing_rate": "Adult", "min_age": 18, "max_age": 99, "min_quantity": 1, "max_quantity": 50 },
{ "pricing_rate": "Child", "min_age": 5, "max_age": 17, "min_quantity": 0, "max_quantity": 10 },
{ "pricing_rate": "Senior", "min_age": 65, "max_age": 99, "min_quantity": 0, "max_quantity": 10 }
]

Example Product

Cliffs of Moher Day Trip (PE12031)

  • Adults: $65/person
  • Children (ages 5-12): $45/person
  • Senior (65+): $55/person

Availability Request

Terminal window
curl -H "access-token: YOUR_TOKEN" \
"https://apistage.projectexpedition.com/v1/return_availability?id=PE12031&date=2025-06-15&adults=2&children=1&currency=EUR"

Booking Request

{
"product_id": "PE12031",
"date": "2025-06-15",
"time": "7:00 am",
"adults": "John Smith,Jane Smith",
"children": "Tommy Smith",
"phone": "+1 555 123 4567"
}

By Time Based

Price determined by duration or time slot selection.

Identifying

The pricing_rates array contains time-based entries like "2 Hours", "4 Hours", etc.:

"pricing_rates": [
{ "pricing_rate": "2 Hours", "min_quantity": 1, "max_quantity": 1 },
{ "pricing_rate": "4 Hours", "min_quantity": 1, "max_quantity": 1 },
{ "pricing_rate": "8 Hours", "min_quantity": 1, "max_quantity": 1 }
]

Example Product

Private Chauffeur Service

  • 2 hours: $150
  • 4 hours: $280
  • 8 hours: $500

Availability Request

Terminal window
curl -H "access-token: YOUR_TOKEN" \
"https://apistage.projectexpedition.com/v1/return_availability?id=PE54321&date=2025-06-15&4_hours=1&currency=EUR"

Booking Request

{
"product_id": "PE54321",
"date": "2025-06-15",
"time": "9:00 am",
"4_hours": 1,
"adults": "John Smith,Jane Smith",
"phone": "+1 555 123 4567"
}

By Occupancy

Price based on total group size or room configuration.

Identifying

Look for quantity or room-type entries in the pricing_rates array.

Example Product

Private Boat Charter

  • Up to 6 passengers: $500 flat rate
  • 7-10 passengers: $750 flat rate

Availability Request

Terminal window
curl -H "access-token: YOUR_TOKEN" \
"https://apistage.projectexpedition.com/v1/return_availability?id=PE67890&date=2025-06-15&quantity=6&currency=EUR"

Booking Request

{
"product_id": "PE67890",
"date": "2025-06-15",
"time": "10:00 am",
"quantity": 6,
"adults": "John Smith,Jane Smith,Mike Jones,Sarah Jones,Tom Brown,Lisa Brown",
"phone": "+1 555 123 4567"
}

By API

Dynamic pricing from an external supplier. These products often have multiple time slots with different descriptions.

Identifying

The pricing_rates array may include singular entries like "Adult", "Child" and the product often requires description for time slot selection:

"pricing_rates": [
{ "pricing_rate": "Adult", "min_quantity": 1, "max_quantity": 20 },
{ "pricing_rate": "Child", "min_quantity": 0, "max_quantity": 10 }
]

Example Product

Go City Explorer Pass

  • Adult: Dynamic pricing
  • Child: Dynamic pricing
  • Multiple time slots: “Morning Departure”, “Afternoon Departure”

Availability Request

Terminal window
curl -H "access-token: YOUR_TOKEN" \
"https://apistage.projectexpedition.com/v1/return_availability?id=PE11111&date=2025-06-15&adult=2&child=1&description=Morning%20Departure"

Booking Request

{
"product_id": "PE11111",
"date": "2025-06-15",
"time": "9:00 am",
"adult": 2,
"child": 1,
"description": "Morning Departure",
"adults": "John Smith,Jane Smith",
"children": "Tommy Smith",
"phone": "+1 555 123 4567"
}

Understanding pricing_rates

The /return_availability response includes pricing_rates with detailed rate information inside each time_with_description entry:

"pricing_rates": [
{
"pricing_rate": "Adult",
"min_age": 18,
"max_age": 99,
"min_quantity": 1,
"max_quantity": 50
},
{
"pricing_rate": "Child",
"min_age": 5,
"max_age": 17,
"min_quantity": 0,
"max_quantity": 10
}
]

Use this to:

  • Display age requirements to customers
  • Validate booking quantities before submission
  • Show appropriate pricing options

Summary

When pricing_rate ContainsUse These Parameters
"Adult", "Child", "Senior" (person types)adults=N, children=N, etc., then names in booking
"2 Hours", "4 Hours" (durations)2_hours=1 (select that duration)
Quantity-based entriesquantity=N (total group size)
"Adult", "Child" (singular, API-priced)adult=N, often with description