Pricing
Seasonal Pricing
Read a boat's seasonal pricing rules
GET
/boats/:id/pricesRetrieve all seasonal pricing rules for a boat, ordered by priority (highest first), then by start month.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Boat ID (UUID) |
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, the one with the highest priority value wins. If no price covers a date, the date is considered unavailable.
Priority order:
- Date-specific overrides (highest)
- Seasonal pricing (by priority)
- No coverage = unavailable