Manage Fees
Add, change and delete a boat's fees and extras
Same in API v1.0 and v1.1
/boats/:id/feesPATCH/boats/:id/fees/:feeIdDELETE/boats/:id/fees/:feeIdWrite the fees and extras of a boat you set prices for yourself — a boat whose pricing_source is direct. A boat priced by MMK or Nausys takes its fees from that platform: every call here is refused (400) until you switch the boat to direct with Update Boat. Read the fees back with List Boat Fees (raw=true returns every row).
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.
Add a fee
POST /boats/:id/fees
| Field | Type | Required | Description |
|---|---|---|---|
description | string | Yes | The fee's name, as guests read it |
amount | number | Yes | The amount in euros, or the percentage when amount_is_percentage is true |
period | string | Yes | per_booking, per_day, per_person, per_person_per_day, per_person_per_night, per_person_per_week, per_week or one_way. A percentage must be per_booking |
required | boolean | No | true (default) — every guest pays it; false — an extra the guest may choose |
calculation_type | string | No | Where it is paid: separate_payment (default — at the marina), advance_payment (charged at checkout) or included_in_price |
amount_is_percentage | boolean | No | amount is a percentage |
percentage_base | string | No | What a percentage is taken of: empty for the charter price, DAILY_PRICE, or CLIENT_PRICE_WITH_EXTRAS_ADVANCE_PAYMENT. Only with amount_is_percentage |
category | string | No | Stored as sent |
on_request | boolean | No | Available on request |
valid_from / valid_to | string | No | Dates (YYYY-MM-DD) the fee applies between; a charter is priced by the window it starts in |
min_persons / max_persons | integer | No | The crew sizes the row applies to. Empty for no limit |
min_duration / max_duration | integer | No | The charter lengths the row applies to. Empty for no limit |
New fees are added after the boat's existing ones. The response is the created fee plus warnings: advice about rows that overlap it (same crew size or dates). A warning never stops the save.
Change a fee
PATCH /boats/:id/fees/:feeId
Send any field of the table above, or sort_order; a field left out keeps its value. The rules are checked against the fee as it will be after the change, so raising min_persons above the stored max_persons is refused. A fee turned back into a flat amount loses its percentage_base. The response is the fee plus warnings.
Delete a fee
DELETE /boats/:id/fees/:feeId
Answers { "success": true }.
Errors
| Status | Message |
|---|---|
400 | Description, amount, and period are required |
400 | Period must be one of: … |
400 | Collection must be one of: advance_payment, separate_payment, included_in_price |
400 | A percentage fee must be "per booking" … / A percentage fee cannot be charged per person … |
400 | Only a percentage fee can say what it is a percentage of |
400 | A percentage can be taken … — a percentage_base you cannot choose |
400 | min_persons must be a whole number of guests, or empty for no limit (and the same for the other three bounds) |
400 | Guests from must not be greater than guests to / Nights from must not be greater than nights to |
400 | No fields to update |
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 |
404 | Boat not found |
404 | Fee not found |
500 | Failed to create fee / Failed to update fee / Failed to delete fee |