Charter Boats
Charter Boats API
Fees

Manage Fees

Add, change and delete a boat's fees and extras

Same in API v1.0 and v1.1

POST/boats/:id/feesPATCH/boats/:id/fees/:feeIdDELETE/boats/:id/fees/:feeId

Write 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-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.

Add a fee

POST /boats/:id/fees

FieldTypeRequiredDescription
descriptionstringYesThe fee's name, as guests read it
amountnumberYesThe amount in euros, or the percentage when amount_is_percentage is true
periodstringYesper_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
requiredbooleanNotrue (default) — every guest pays it; false — an extra the guest may choose
calculation_typestringNoWhere it is paid: separate_payment (default — at the marina), advance_payment (charged at checkout) or included_in_price
amount_is_percentagebooleanNoamount is a percentage
percentage_basestringNoWhat a percentage is taken of: empty for the charter price, DAILY_PRICE, or CLIENT_PRICE_WITH_EXTRAS_ADVANCE_PAYMENT. Only with amount_is_percentage
categorystringNoStored as sent
on_requestbooleanNoAvailable on request
valid_from / valid_tostringNoDates (YYYY-MM-DD) the fee applies between; a charter is priced by the window it starts in
min_persons / max_personsintegerNoThe crew sizes the row applies to. Empty for no limit
min_duration / max_durationintegerNoThe 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.

curl -X POST https://charter.boats/api/boats/550e8400-e29b-41d4-a716-446655440000/fees \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "description": "Final cleaning", "amount": 150, "period": "per_booking" }'

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

StatusMessage
400Description, amount, and period are required
400Period must be one of: …
400Collection must be one of: advance_payment, separate_payment, included_in_price
400A percentage fee must be "per booking" … / A percentage fee cannot be charged per person …
400Only a percentage fee can say what it is a percentage of
400A percentage can be taken … — a percentage_base you cannot choose
400min_persons must be a whole number of guests, or empty for no limit (and the same for the other three bounds)
400Guests from must not be greater than guests to / Nights from must not be greater than nights to
400No fields to update
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
404Boat not found
404Fee not found
500Failed to create fee / Failed to update fee / Failed to delete fee

On this page