Manage Seasonal Prices
Create, change and delete a boat's seasonal prices
Same in API v1.0 and v1.1
/boats/:id/pricesPATCH/boats/:id/prices/:priceIdDELETE/boats/:id/prices/:priceIdPOST/dashboard/pricing/bulkWrite 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-Keyheader 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
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Name of the season (e.g. High Season) |
start_month | integer | Yes | First month, 1-12 |
start_day | integer | Yes | First day, 1-31 |
end_month | integer | Yes | Last month, 1-12 |
end_day | integer | Yes | Last day, 1-31 |
price_per_day | number | Yes | Daily rate |
priority | integer | No | Higher 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).
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.
| Field | Type | Required | Description |
|---|---|---|---|
entries | array | Yes | One entry per boat and range |
entries[].boat_id | string | Yes | Boat UUID — a boat of a company you are a member of |
entries[].start_month / start_day | integer | Yes | First day of the range |
entries[].end_month / end_day | integer | Yes | Last day of the range |
entries[].price_per_day | number | Yes | Daily 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 }.
Errors
| Status | Message |
|---|---|
400 | Name, start/end dates, and price are required |
400 | Month must be between 1 and 12 |
400 | Day must be between 1 and 31 |
400 | No fields to update |
400 | entries array required |
400 | Boat … is priced by MMK (or Nausys) — switch its pricing source to Direct to edit its prices and extras |
401 | Invalid API key — a key that belongs to no account |
401 | Invalid API key format — a malformed key |
401 | Authentication required — no key and no signed-in session |
403 | Not a company member — you don't belong to the boat's company |
403 | No company membership — bulk call from an account in no company |
403 | Boat … not in your company — bulk call |
404 | Boat not found / Boat … not found |
404 | Price not found |
500 | Failed to create price / Failed to update price / Failed to delete price |
500 | Failed removing replaced prices: … / Failed collapsing prices: … — bulk call |