Charter Boats
Charter Boats API
Boats

Update Boat

Edit an existing boat listing

Same in API v1.0 and v1.1

PATCH/boats/:id

Edit the details of a boat your company owns. Send only the fields you want to change; every field left out keeps its value. After every save the boat's completeness is checked again, so an update can publish a boat that became complete — or unpublish one that no longer is.

Authentication

Requires one of:

  • API key: X-API-Key header with your API key. This is the way to call it from your own systems.
  • Session: a signed-in charter.boats session — what the dashboard uses from the browser. Outside charter.boats a request without a key is stopped by bot protection (HTML 403), so integrations should use the key.

Either way, the account must be a member of the company that owns the boat. Changing pricing_source additionally needs an admin or owner of that company.

Path Parameters

ParameterTypeRequiredDescription
idstringYesBoat UUID (a slug is not accepted)

Request Body

FieldTypeDescription
titlestringBoat name/title
descriptionstringFull description, as plain text
boat_typestringcatamaran, sailboat, yacht, motorboat, gulet, rib, or other
manufacturer_idstringThe make — an id from List makes. An id no make carries is a 400
modelstringThe model, as you write it. A changed make or model is matched to our model list again, which is what the make and model search filters read
capacityintegerMaximum guests. Cannot be cleared — "" is a 400
cabinsintegerCabins
berthsintegerBerths
toiletsintegerToilets
rental_typestringbareboat, skippered or no_licence_needed — the values Import Boat takes. Anything else is a 400
min_charter_daysintegerShortest charter. Used when the boat's first check-in window (check_in_periods) sets no minimalReservationDuration
deposit_with_waivernumberThe security deposit when the guest takes the damage waiver. On a boat MMK or Nausys prices, the platform's sync writes it whenever the platform states one, over your value
length_ftnumberLength overall (LOA) in feet. On a boat priced from MMK or Nausys a changed length is pinned, so the next sync keeps your figure
yearintegerYear built
location_idintegerLocation id
instant_bookbooleanAllow instant booking. Refused (400) on boats with one-way (multi-port) availability, and on Nausys-priced boats whose operator has to approve each hold
skipperinteger|null0 = no skipper, 1 = always skippered, null = skipper is an optional add-on
security_depositnumberSecurity deposit amount
charter_dayinteger|nullCharter start weekday (0=Sun … 6=Sat)
check_in_periodsarray|nullCheck-in/out windows, stored as sent — the shape Get Boat returns (dateFrom, dateTo, checkInDays, checkOutDays, checkInTime, checkOutTime, minimalReservationDuration). Replaces the whole list. A boat needs this or charter_day to be published
checkin_timestring|nullCheck-in time (e.g. "17:00"). A window's own checkInTime comes first where one covers the date
checkout_timestring|nullCheck-out time (e.g. "09:00"). A window's own checkOutTime comes first where one covers the date
mmsiintegerThe boat's MMSI, for AIS tracking
flespi_imeistringIMEI of the boat's tracker
flespi_modem_modelstringModel of the boat's tracker
featuresarrayEquipment as canonical slugs — replaces the boat's own equipment list; [] clears it. Equipment that comes standard with the boat's model stays on the boat either way. See Feature Vocabulary
pricing_sourcestringdirect, mmk, or nausys — which platform prices the boat. Admin or owner only. Switching to mmk or nausys needs the boat to be linked to, and still listed by, that platform
copy_pricesbooleanWith a switch to direct: seed the boat's own seasons and extras from the platform it is leaving, replacing any it already has. Without it a boat switched to direct has no price of its own until you add one

Sending "" for a number field clears it (stored as null).

Fields not listed are ignored. So are fields a connected platform owns on a boat it prices — on an MMK-priced boat manufacturer_id, model, location_id, skipper and security_deposit, on a Nausys-priced boat manufacturer_id, model, location_id and skipper — which the platform's sync rewrites; they are skipped silently, not rejected. Switch pricing_source to direct to edit them. The four check-in fields are not among them: on a boat MMK or Nausys prices, a value you set is kept by later syncs.

Request

curl -X PATCH https://charter.boats/api/boats/550e8400-e29b-41d4-a716-446655440000 \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "capacity": 10,
    "location_id": 11336,
    "security_deposit": 2500
  }'

Response

The boat after the update, with the fields your dashboard's boat editor reads, plus:

FieldTypeDescription
is_publishedbooleanWhether the boat is published after this save
missingarrayWhat the boat still lacks to be published (empty when it is)
auto_unpublishedbooleantrue when this save took a published boat offline because it is no longer complete
skipped_feesarrayWith copy_prices, anything that could not be copied across (always present; usually empty)
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "BALI Catspace - Luxury Catamaran",
  "capacity": 10,
  "location_id": 11336,
  "security_deposit": 2500,
  "is_published": false,
  "missing": ["At least one image"],
  "auto_unpublished": false,
  "skipped_fees": []
}

Errors

StatusMessage
400Capacity is required
400rental_type must be one of: bareboat, skippered, no_licence_needed
400manufacturer_id not found
400Instant booking cannot be enabled for boats with multi-port availability. …
400Instant booking is not available for this boat: …
400pricing_source must be direct, mmk or nausys
400This boat is not linked to …
400… no longer lists this boat
401Invalid API key — a key that belongs to no account
401Invalid API key format — a malformed key
401Authentication required — no key and no signed-in session
403Not a company member — you don't belong to the boat's company
403Only the company owner can change the pricing source
404Boat not found

On this page