Skip to main content

Product Pricing

Manage pricing rules for a product. Products can have multiple pricing rules for different seasons or time intervals.

Endpointsโ€‹

MethodEndpointDescription
GET/v1/products/{id}/pricingList pricing rules
GET/v1/products/{id}/pricing/{pricingId}Get pricing rule
POST/v1/products/{id}/pricingAdd pricing rule
PATCH/v1/products/{id}/pricing/{pricingId}Update pricing rule
DELETE/v1/products/{id}/pricing/{pricingId}Delete pricing rule

Authenticationโ€‹

All pricing endpoints require an API key with products:read scope for GET requests, and products:write scope for POST/PATCH/DELETE requests.

Price Structure Typesโ€‹

StructureDescription
flatFixed price per interval (e.g., $50/day)
scheduleTiered pricing based on duration

Schedule Rate Modesโ€‹

The product's pricing.rate_mode (set via schedule_rate_mode on the product) controls how schedule rows are read:

Rate modeDescription
totalEach row's price is the TOTAL price for that duration (e.g., interval: 3 at price: 70 means 3 days cost $70). Default.
perUnitEach row's price is a per-unit (per day/hour/week) rate that applies from that duration on. The total is rate ร— duration, and the rate band is picked by the whole rental length.

perBooking charges the single year-round schedule amount once per rented unit for the whole booking. A three-day rental of two units at 10 each costs 20. Supply one schedule row and omit an additional-time charge. The quoted duration and inventory hold still cover the actual pickup and return times.

perUnit example โ€” daily rates that get cheaper for longer rentals:

intervalpriceReads as
0.521Half day (rentals up to 12 hours): $21 flat
1281โ€“2 days: $28 per day
3263โ€“5 days: $26 per day
6226+ days: $22 per day

A 4-day rental costs 4 ร— $26 = $104. A 10-day rental costs 10 ร— $22 = $220. The top band's rate extends to any rental length, so no additional charge is needed in perUnit mode.

An interval of 0.5 is the half-day price (a flat total for rentals up to 12 hours, day unit only). It is valid in both rate modes and never participates in tier stacking.

For template-priced products (uses_template: true) the pricing object also includes template_id, base_price, and price_basis: price means the template tiers are exact prices (and base_price is stored as 1); multiplier means tiers multiply the product's base_price.

Seasonal templatesโ€‹

A product can point each season at its own pricing template. In that case price_applies is seasonal, uses_seasonal_templates is true, and the product-level template_id/base_price are null โ€” each season's template lives on its pricing rule instead:

  • Every pricing rule carries a pricing_template_id (the template chosen for that season_id).
  • The rule's price is that season's base price (stored as 1 for exact-price templates).
  • A booking is split into contiguous same-season runs and each run is priced on that season's template + base, so a booking spanning seasons (e.g. weekend + weekday) mixes โ€” each portion billed at its own season's rate, with multi-day tier discounts preserved per run. A booking whose dates fall in no season returns a "No season applies for the selected date." error.
"pricing": {
"applies": "seasonal",
"uses_template": false,
"uses_seasonal_templates": true,
"rules": [
{ "season_id": 12, "pricing_template_id": 3, "price": 80.0, "interval_units": "day" },
{ "season_id": 15, "pricing_template_id": 7, "price": 50.0, "interval_units": "day" }
]
}

Interval Unitsโ€‹

UnitDescription
15min15 minutes
halfHour30 minutes
hour1 hour
day1 day
week1 week

Seasonal Pricingโ€‹

To apply different prices during specific seasons:

  1. First create seasons in your supplier settings
  2. Add pricing rules with season_id to apply during that season
  3. Add a pricing rule without season_id as the default/base price

When calculating prices, the system uses seasonal pricing if the booking dates fall within a season, otherwise it uses the base pricing.

Validation Rulesโ€‹

  • Pricing rules must match the product's structure - The price_structure of each pricing rule must match the product's price_structure setting
  • If the product uses seasonal pricing (price_applies: seasonal), season_id is required when adding pricing
  • If the product uses year-round pricing (price_applies: yearRound), season_id must not be provided
  • price_structure must be flat or schedule
  • price must be a positive number
  • interval must be 0.5 (half-day price) or a number of 1 or more
  • interval_units must be one of: 15min, halfHour, hour, day, week

Flat vs Schedule Pricingโ€‹

TypeEntries Allowed
flatOne pricing rule per season (or one for year-round)
scheduleMultiple pricing rules with different intervals

For flat pricing, if you need to change the price, use PATCH to update the existing rule or DELETE it first before adding a new one.