Seasonal Pricing
Read a boat's seasonal pricing rules
/boats/:id/pricesRetrieve the seasonal pricing rules for a boat, ordered by priority (highest first), then by start month. Quotes we can't sell — one-way delivery legs, weeks quoted from another base, implausible partner-side prices — are left out.
Authentication
Send your API key in the X-API-Key header, as on every Operator API call — see Authentication.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Boat ID (UUID). A slug is not accepted |
Request
Response
Returns an array of price objects.
Response Fields
| Field | Type | Description |
|---|---|---|
id | string | Price ID (UUID) |
boat_id | string | Boat this price belongs to |
name | string | Price name |
start_month | integer | Start month (1-12) |
start_day | integer | Start day (1-31) |
end_month | integer | End month (1-12) |
end_day | integer | End day (1-31) |
price_per_day | number | Daily rate for this price |
priority | integer | Higher priority wins on overlaps (default: 0) |
original_price_per_day | number | null | Pre-discount price (if a discount applies) |
discount_percentage | number | null | Active discount percentage |
discount_name | string | null | Name of the discount |
valid_from_year | integer | null | Year the price starts applying |
valid_to_year | integer | null | Year the price stops applying |
product_name | string | null | Product/package variant this price belongs to (e.g. Bareboat, Crewed) |
created_at | string | ISO 8601 timestamp |
Prices can wrap around year boundaries (e.g., November 15 to January 15).
This endpoint is read-only. Seasonal prices are created and edited from the dashboard under your logged-in session — there is no keyed endpoint to write them. To compute the effective price for specific dates, use Resolve Pricing.
Price Resolution
When multiple prices overlap a date, the one with the highest priority value wins (the full tie-break rules are on Resolve Pricing). A date no price covers has no price, so it can't be booked — but a covered date is not necessarily free: prices say nothing about bookings. Check the calendar with Boat Availability.
Errors
| Status | Message |
|---|---|
400 | Boat ID must be a UUID |
404 | Boat not found |
500 | Failed to fetch prices |
A slug — or anything else that isn't UUID-shaped — answers 400, and a UUID no boat carries answers 404. Until 2026-09-15 the first was a 500 and the second an empty array (200 []), which read as "this boat publishes no seasons"; an empty array now means only that, for a boat that exists.