Charter Boats
Charter Boats API
Pricing

Seasonal Pricing

Read a boat's seasonal pricing rules

GET/boats/:id/prices

Retrieve all seasonal pricing rules for a boat, ordered by priority (highest first), then by start month.

Path Parameters

ParameterTypeDescription
idstringBoat ID (UUID)

Request

curl https://charter.boats/api/boats/550e8400-e29b-41d4-a716-446655440000/prices

Response

Returns an array of price objects.

[
  {
    "id": "996b6261-29ab-4770-b203-2c0d2a7b7e43",
    "boat_id": "3a121be0-c1f8-4432-8e18-4a125b46da65",
    "name": "High Season 2026",
    "start_month": 9,
    "start_day": 19,
    "end_month": 10,
    "end_day": 10,
    "price_per_day": 150.11,
    "priority": 8,
    "created_at": "2026-04-26T03:09:24.113714+00:00",
    "discount_percentage": null,
    "discount_name": null,
    "original_price_per_day": null,
    "valid_from_year": 2026,
    "valid_to_year": 2026,
    "product_name": "Crewed"
  },
  {
    "id": "95e31374-b7b6-4853-92e5-db41e5ceecc5",
    "boat_id": "3a121be0-c1f8-4432-8e18-4a125b46da65",
    "name": "High Season 2026",
    "start_month": 7,
    "start_day": 11,
    "end_month": 8,
    "end_day": 1,
    "price_per_day": 213.31,
    "priority": 7,
    "created_at": "2026-05-29T15:08:19.279204+00:00",
    "discount_percentage": 43,
    "discount_name": "43% discount",
    "original_price_per_day": 355.5,
    "valid_from_year": 2026,
    "valid_to_year": 2026,
    "product_name": "Crewed"
  }
]

Response Fields

FieldTypeDescription
idstringPrice ID (UUID)
boat_idstringBoat this price belongs to
namestringPrice name
start_monthintegerStart month (1-12)
start_dayintegerStart day (1-31)
end_monthintegerEnd month (1-12)
end_dayintegerEnd day (1-31)
price_per_daynumberDaily rate for this price
priorityintegerHigher priority wins on overlaps (default: 0)
original_price_per_daynumber | nullPre-discount price (if a discount applies)
discount_percentagenumber | nullActive discount percentage
discount_namestring | nullName of the discount
valid_from_yearinteger | nullYear the price starts applying
valid_to_yearinteger | nullYear the price stops applying
product_namestring | nullProduct/package variant this price belongs to (e.g. Bareboat, Crewed)
created_atstringISO 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:

  1. Date-specific overrides (highest)
  2. Seasonal pricing (by priority)
  3. No coverage = unavailable

On this page