Boat Availability
Which nights a boat can't be sold for over a date range, or whether one date is free
/boats/availabilityThe boat's calendar: bookings, owner blocks and synced partner events, plus the nights no season prices. This is the check to run before quoting dates found through List Boats — search results are a discovery set, and Resolve Pricing prices a range without looking at the calendar at all.
Authentication
Send your API key in the X-API-Key header, as on every Operator API call — see Authentication.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
boat_id | string | Yes | Boat UUID (a slug is not accepted) |
start | string | With end | Range start, YYYY-MM-DD |
end | string | With start | Range end, YYYY-MM-DD (inclusive) |
date | string | Instead of start/end | A single date, YYYY-MM-DD |
Send either start + end (range mode) or date (single-date mode). Range mode is the one to use: it is the same calculation the boat page's calendar and the booking flow run.
Nights, not days
Every date here is a night. A charter occupies the nights from its check-in up to but not including its check-out day — the boat is handed back in the morning and can sail again the same afternoon. So a check-in day is occupied, and a check-out day is free for the next guest. A stay from A to B is possible when none of the nights A … B − 1 is in blockedDates.
Range mode
| Field | Type | Description |
|---|---|---|
blockedDates | string[] | Nights the boat cannot be sold: occupied by a booking, a block or a synced partner event, or not covered by any season of the boat's active pricing source. Unordered. An event that straddles the range contributes all of its nights, so dates outside start–end can appear — filter to your range |
noPricingDates | string[] | The subset of blockedDates blocked only because no season prices that night |
changeoverDates | string[] | Check-out days of existing bookings, blocks and events — the day one charter ends and the next can begin. Such a night is never blocked for lack of a season; it is in blockedDates only when another booking or event occupies it |
optionedDates | array | Nights held by another party's option (a temporary hold that may lapse): { date, expiry }, expiry a YYYY-MM-DD or null. Usually empty — while the waiting-list feature is off, options are reported in blockedDates like any other hold |
start, end | string | Echo of the request |
A night in neither blockedDates nor optionedDates is free and priced. Whether a particular stay can be booked also depends on the boat's check-in days and minimum stay (charter_day, check_in_periods on Get Boat) — most charter boats are sold Saturday to Saturday, a week at a time.
Single-date mode
| Field | Type | Description |
|---|---|---|
available | boolean | No booking, block or synced event occupies that night |
date | string | Echo of the request |
conflicts | object | How many bookings, owner blocks and synced partner events (external) overlap it |
This mode checks the calendar only — it does not check pricing, so available: true does not mean the night can be sold. Prefer range mode.
Errors
| Status | Message |
|---|---|
400 | boat_id is required |
400 | date or start/end range is required |