Charter Boats
Charter Boats API
Boats

Boat Availability

Which nights a boat can't be sold for over a date range, or whether one date is free

GET/boats/availability

The 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

ParameterTypeRequiredDescription
boat_idstringYesBoat UUID (a slug is not accepted)
startstringWith endRange start, YYYY-MM-DD
endstringWith startRange end, YYYY-MM-DD (inclusive)
datestringInstead of start/endA 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 AB − 1 is in blockedDates.

Range mode

curl "https://charter.boats/api/boats/availability?boat_id=3a121be0-c1f8-4432-8e18-4a125b46da65&start=2026-09-19&end=2026-10-10" \
  -H "X-API-Key: YOUR_API_KEY"
{
  "blockedDates": ["2026-09-12", "2026-09-13", "…", "2026-10-01", "2026-10-02"],
  "noPricingDates": [],
  "changeoverDates": ["2026-09-19", "2026-09-26", "2026-10-03"],
  "optionedDates": [],
  "start": "2026-09-19",
  "end": "2026-10-10"
}
FieldTypeDescription
blockedDatesstring[]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 startend can appear — filter to your range
noPricingDatesstring[]The subset of blockedDates blocked only because no season prices that night
changeoverDatesstring[]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
optionedDatesarrayNights 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, endstringEcho 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

curl "https://charter.boats/api/boats/availability?boat_id=3a121be0-c1f8-4432-8e18-4a125b46da65&date=2026-10-17" \
  -H "X-API-Key: YOUR_API_KEY"
{
  "available": false,
  "date": "2026-10-17",
  "conflicts": { "bookings": 0, "blocks": 0, "external": 1 }
}
FieldTypeDescription
availablebooleanNo booking, block or synced event occupies that night
datestringEcho of the request
conflictsobjectHow 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

StatusMessage
400boat_id is required
400date or start/end range is required

On this page