Charter Boats
Charter Boats API
Pricing

Manage Seasonal Prices

Create, change and delete a boat's seasonal prices

Same in API v1.0 and v1.1

POST/boats/:id/pricesPATCH/boats/:id/prices/:priceIdDELETE/boats/:id/prices/:priceIdPOST/dashboard/pricing/bulk

Write the seasonal prices of a boat you set prices for yourself — a boat whose pricing_source is direct. A boat priced by MMK or Nausys takes its prices from that platform: every call here is refused (400) until you switch the boat to direct with Update Boat. Read the prices back with Seasonal Pricing.

After each write the boat's price range is recalculated; the bulk call also refreshes the weekly prices search shows.

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.

Create a price

POST /boats/:id/prices

FieldTypeRequiredDescription
namestringYesName of the season (e.g. High Season)
start_monthintegerYesFirst month, 1-12
start_dayintegerYesFirst day, 1-31
end_monthintegerYesLast month, 1-12
end_dayintegerYesLast day, 1-31
price_per_daynumberYesDaily rate
priorityintegerNoHigher wins where two prices cover the same date. Default 0

A price repeats every year and may wrap the year end (e.g. November 15 to January 15).

curl -X POST https://charter.boats/api/boats/550e8400-e29b-41d4-a716-446655440000/prices \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "High Season",
    "start_month": 7, "start_day": 1,
    "end_month": 8, "end_day": 31,
    "price_per_day": 900
  }'

The response is the created price, in the shape Seasonal Pricing lists.

Change a price

PATCH /boats/:id/prices/:priceId

Send any of name, start_month, start_day, end_month, end_day, price_per_day and priority; a field left out keeps its value. The same month and day ranges apply. The response is the price after the change.

Delete a price

DELETE /boats/:id/prices/:priceId

Answers { "success": true }. A date no price covers has no price, so it cannot be booked.

Set many weeks at once

POST /dashboard/pricing/bulk

The call behind the dashboard's pricing calendar: set one price on a date range of one or more boats in a single request.

FieldTypeRequiredDescription
entriesarrayYesOne entry per boat and range
entries[].boat_idstringYesBoat UUID — a boat of a company you are a member of
entries[].start_month / start_dayintegerYesFirst day of the range
entries[].end_month / end_dayintegerYesLast day of the range
entries[].price_per_daynumberYesDaily rate, rounded to the whole euro. An entry below 0 is skipped

Each entry becomes a price named Week M/D with priority 1. The boat's prices that overlap its range are trimmed, split around it, or removed when it covers them whole; afterwards neighbouring prices of the same rate are merged into one. Answers { "success": true }.

curl -X POST https://charter.boats/api/dashboard/pricing/bulk \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "entries": [
    { "boat_id": "550e8400-e29b-41d4-a716-446655440000", "start_month": 7, "start_day": 4, "end_month": 7, "end_day": 10, "price_per_day": 950 }
  ] }'

Errors

StatusMessage
400Name, start/end dates, and price are required
400Month must be between 1 and 12
400Day must be between 1 and 31
400No fields to update
400entries array required
400Boat … is priced by MMK (or Nausys) — switch its pricing source to Direct to edit its prices and extras
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
403No company membership — bulk call from an account in no company
403Boat … not in your company — bulk call
404Boat not found / Boat … not found
404Price not found
500Failed to create price / Failed to update price / Failed to delete price
500Failed removing replaced prices: … / Failed collapsing prices: … — bulk call

On this page