Charter Boats
Charter Boats API
Boats

Get Boat

Get detailed information about a specific boat

GET/boats/:id

Retrieve complete details for a single boat, including location, images, amenities, reviews, seasonal pricing, and calculated ratings.

Authentication

No authentication required for server-side requests — this is a public read endpoint. (A key is only needed for cross-origin calls made from a browser on another domain; see Authentication.)

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe boat's UUID or slug

Request

# By UUID
curl https://charter.boats/api/boats/3a121be0-c1f8-4432-8e18-4a125b46da65
 
# By slug
curl https://charter.boats/api/boats/beneteau-oceanis-393-kuribanda

Response

{
  "id": "3a121be0-c1f8-4432-8e18-4a125b46da65",
  "slug": "beneteau-oceanis-393-kuribanda",
  "title": "Škuribanda",
  "boat_type": "sailboat",
  "mmsi": null,
  "capacity": 8,
  "length_ft": 39.2,
  "year": 2006,
  "cabins": 3,
  "crew_cabins": 0,
  "berths": 8,
  "toilets": 2,
  "specs": {
    "beam": 3.96,
    "draft": 1.9,
    "engine_desc": "Volvo 56 hp",
    "transit_log": 270,
    "fuel_capacity": 150,
    "water_capacity": 500
  },
  "description": null,
  "pricing_source": "mmk",
  "price_per_day": 144.83,
  "original_price_per_day": 314.29,
  "discount_percentage": 50,
  "discount_label": "50% discount",
  "price_from": 144.83,
  "price_to": 250.17,
  "charter_day": 6,
  "check_in_periods": [
    {
      "dateTo": "31.12.2099",
      "dateFrom": "01.01.2020",
      "checkInDays": [6],
      "checkInTime": "17:00",
      "checkOutDays": [6],
      "checkOutTime": "09:00",
      "minimalReservationDuration": 7
    }
  ],
  "checkin_time": "17:00:00",
  "checkout_time": "09:00:00",
  "min_charter_days": 7,
  "instant_book": true,
  "security_deposit": 1500,
  "deposit_with_waiver": null,
  "seo_released_at": null,
  "company_id": "e33847d2-aaf3-4edf-b672-23dc8239cae9",
  "location_id": 23048,
  "model": "Oceanis 393",
  "updated_at": "2026-06-05T15:15:26.805217+00:00",
  "manufacturer_id": "1c0513d4-45a3-46e9-80eb-b891e12652d8",
  "rental_type": "skippered",
  "average_rating": null,
  "review_count": 0,
  "import_source": "mmk",
  "is_published": true,
  "photo_descriptions": {
    "deck": "Relax on the spacious aft deck, perfect for sunbathing or scenic views.",
    "cockpit": "Well-equipped helm offers easy navigation and comfortable control."
  },
  "seo_variant": "A",
  "has_valid_name": true,
  "has_multi_port": false,
  "avail_weeks": 201433088,
  "best_internal_discount_pct": 0,
  "company": {
    "base_currency": "EUR",
    "cancel_refund_days": 30,
    "cancel_refund_percent": 50,
    "terms_guest": {
      "insurance_requirements": "All vessels covered with Kasko insurance...",
      "damage_liability": "Client liable for all damage...",
      "license_requirements": "Client must have original navigation licenses..."
    }
  },
  "manufacturer": {
    "id": "1c0513d4-45a3-46e9-80eb-b891e12652d8",
    "name": "Beneteau",
    "slug": "beneteau",
    "logo_url": null
  },
  "location": {
    "id": 23048,
    "lat": 43.500449,
    "lon": 16.460425,
    "city": "Split",
    "name": "Marina Zenta",
    "phone": null,
    "state": null,
    "rating": 3.7,
    "country": "Croatia",
    "website": null,
    "capacity": null,
    "image_url": "https://...",
    "max_draft": null,
    "neighbors": null,
    "max_length": null,
    "description": "Marina Zenta sits just a short walk from Split's city center...",
    "vhf_channel": null,
    "country_code": "hr",
    "municipality": "Grad Split"
  },
  "images": [
    {
      "id": "0b0ba49e-185c-4c38-b5a4-621b4951819f",
      "url": "https://pub-1d6bb2ea901f4e66a126571a99715069.r2.dev/boats/3a121be0-c1f8-4432-8e18-4a125b46da65/images/1772350897275_0b0ba49e.jpg",
      "category": "outside",
      "is_active": true,
      "is_primary": true,
      "sort_order": 0
    }
  ],
  "videos": [],
  "amenities": [],
  "reviews": [],
  "prices": [
    {
      "id": "95e31374-b7b6-4853-92e5-db41e5ceecc5",
      "name": "High Season 2026",
      "source": "mmk",
      "start_month": 7,
      "start_day": 11,
      "end_month": 8,
      "end_day": 1,
      "product_name": "Crewed",
      "discount_name": "43% discount",
      "price_per_day": 213.31,
      "valid_to_year": 2026,
      "valid_from_year": 2026,
      "discount_percentage": 43,
      "original_price_per_day": 355.5
    }
  ],
  "best_price": 144.83,
  "best_source": "mmk",
  "best_currency": "EUR",
  "internal_discount_pct": null,
  "lowest_price_per_day": 144.83,
  "mmk_products": [
    { "name": "Bareboat", "isDefault": false },
    { "name": "Crewed", "isDefault": true }
  ],
  "avail_weeks_anchor": "2026-03-28"
}

Note on the company block. The live response carries a company object. The documented API contract exposes only the cancellation- and guest-terms fields shown above (base_currency, cancel_refund_days, cancel_refund_percent, terms_guest). Operator identity fields are not part of the documented contract and should not be relied upon.

Response Fields

FieldTypeDescription
idstringUnique boat identifier (UUID)
slugstringURL-friendly identifier
titlestringBoat name
boat_typestringyacht, catamaran, sailboat, motorboat, rib, or other
mmsistring|nullMaritime MMSI number, if known
capacityintegerMaximum guests
length_ftnumberLength overall (LOA) in feet — see the note below
yearintegerYear built
cabinsinteger|nullNumber of cabins
crew_cabinsinteger|nullNumber of crew cabins
berthsinteger|nullNumber of berths
toiletsinteger|nullNumber of toilets
specsobject|nullExtra specs (beam, draft, engine_desc, fuel_capacity, water_capacity, transit_log, …)
descriptionstring|nullFull description
pricing_sourcestringActive pricing source: direct, nausys, or mmk
price_per_daynumberEffective daily rate
original_price_per_daynumber|nullPrice before discount
discount_percentagenumber|nullActive discount percentage
discount_labelstring|nullDiscount label text
price_fromnumber|nullLowest seasonal price
price_tonumber|nullHighest seasonal price
charter_dayinteger|nullPreferred charter start weekday (0=Sun … 6=Sat)
check_in_periodsarray|nullRaw check-in/out windows from the source platform
checkin_timestring|nullCheck-in time (e.g. 17:00:00)
checkout_timestring|nullCheck-out time (e.g. 09:00:00)

length_ft is length overall (LOA), the figure charter platforms and manufacturers advertise — not hull length, which runs shorter. For boats priced from a connected platform it is the length of the boat's model, so sister ships of the same model report the same figure rather than each platform's per-hull number. Boats you manage directly keep whatever length you set.

| min_charter_days | integer|null | Minimum charter duration in days | | instant_book | boolean | Whether instant booking is enabled | | security_deposit | number|null | Security deposit amount | | deposit_with_waiver | number|null | Reduced deposit when a damage waiver is taken | | seo_released_at | string|null | Timestamp the detail page was released for indexing | | company_id | string | Operator company UUID | | location_id | integer | Location ID | | model | string|null | Boat model name | | updated_at | string | ISO 8601 last-updated timestamp | | manufacturer_id | string|null | Manufacturer UUID | | rental_type | string | bareboat, skippered, cabin, or flotilla | | average_rating | number|null | Average review rating (1-5) | | review_count | integer | Total number of reviews | | import_source | string|null | Source platform the boat was imported from | | is_published | boolean | Whether the listing is published | | photo_descriptions | object|null | AI-generated per-category photo captions | | seo_variant | string|null | SEO copy variant label | | has_valid_name | boolean|null | Whether the boat has a human-readable name | | has_multi_port | boolean | Whether the boat rotates between marinas seasonally | | avail_weeks | integer | Packed availability bitmask, relative to avail_weeks_anchor | | best_internal_discount_pct | number | Best internal discount percentage available | | company | object | Cancellation/guest-terms fields only (see note above) | | manufacturer | object|null | { id, name, slug, logo_url } | | location | object | Marina/location details (see below) | | images | array | Active images with id, url, category, is_active, is_primary, sort_order | | videos | array | Boat videos | | amenities | array | Amenity objects | | reviews | array | Reviews with id, rating, comment, created_at | | prices | array | Seasonal pricing rows filtered to the active pricing source | | best_price | number | Best available daily price | | best_source | string | Pricing source for best_price | | best_currency | string | Currency code (e.g. EUR) | | internal_discount_pct | number|null | Internal discount percentage when applicable | | lowest_price_per_day | number | Lowest effective per-day price after any internal discount | | mmk_products | array|null | MMK product variants with name and isDefault (MMK boats only) | | avail_weeks_anchor | string|null | Anchor date (YYYY-MM-DD) for decoding avail_weeks |

Company Object

FieldTypeDescription
base_currencystringDefault currency (e.g. EUR)
cancel_refund_percentnumber|nullRefund percentage under the cancellation policy
cancel_refund_daysnumber|nullDays before charter that the refund window applies
terms_guestobject|nullGuest-facing terms: insurance_requirements, damage_liability, license_requirements

Location Object

FieldTypeDescription
idintegerLocation ID
namestringMarina/location name
citystring|nullCity
municipalitystring|nullMunicipality
statestring|nullState/region
countrystring|nullCountry name
country_codestring|nullISO country code (lowercase)
latnumber|nullLatitude
lonnumber|nullLongitude
websitestring|nullMarina website
phonestring|nullContact phone
image_urlstring|nullMarina image
ratingnumber|nullMarina rating
capacitynumber|nullBerth capacity
max_draftnumber|nullMaximum draft (m)
max_lengthnumber|nullMaximum vessel length (m)
vhf_channelstring|nullVHF hailing channel
neighborsarray|nullNearby location IDs
descriptionstring|nullMarina description

Errors

StatusMessage
400Boat ID is required
404Boat not found

On this page