Product Pricing
Manage pricing rules for a product. Products can have multiple pricing rules for different seasons or time intervals.
Endpointsโ
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/products/{id}/pricing | List pricing rules |
| GET | /v1/products/{id}/pricing/{pricingId} | Get pricing rule |
| POST | /v1/products/{id}/pricing | Add 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โ
| Structure | Description |
|---|---|
flat | Fixed price per interval (e.g., $50/day) |
schedule | Tiered 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 mode | Description |
|---|---|
total | Each row's price is the TOTAL price for that duration (e.g., interval: 3 at price: 70 means 3 days cost $70). Default. |
perUnit | Each 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:
interval | price | Reads as |
|---|---|---|
| 0.5 | 21 | Half day (rentals up to 12 hours): $21 flat |
| 1 | 28 | 1โ2 days: $28 per day |
| 3 | 26 | 3โ5 days: $26 per day |
| 6 | 22 | 6+ 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 thatseason_id). - The rule's
priceis that season's base price (stored as1for 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โ
| Unit | Description |
|---|---|
15min | 15 minutes |
halfHour | 30 minutes |
hour | 1 hour |
day | 1 day |
week | 1 week |
Seasonal Pricingโ
To apply different prices during specific seasons:
- First create seasons in your supplier settings
- Add pricing rules with
season_idto apply during that season - Add a pricing rule without
season_idas 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_structureof each pricing rule must match the product'sprice_structuresetting - If the product uses seasonal pricing (
price_applies: seasonal),season_idis required when adding pricing - If the product uses year-round pricing (
price_applies: yearRound),season_idmust not be provided price_structuremust beflatorschedulepricemust be a positive numberintervalmust be0.5(half-day price) or a number of 1 or moreinterval_unitsmust be one of:15min,halfHour,hour,day,week
Flat vs Schedule Pricingโ
| Type | Entries Allowed |
|---|---|
flat | One pricing rule per season (or one for year-round) |
schedule | Multiple 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.