Search Boats (AI)
Search charter boats with fuzzy location matching, availability checking, and deal ranking
/ai/boatsSearch available charter boats by location, type, dates, capacity, and budget. Optimized for AI consumption with fuzzy location matching, availability bitmask filtering, and batch price resolution.
Authentication
No authentication required. Rate limited to 60 requests per 10 minutes (30 for Custom GPT clients).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
location | string | No | Destination name -- marina, city, island, region, or country. Fuzzy matched against location names, cities, states, and countries. |
search | string | No | Free-text match against boat title and model. |
boat_type | string | No | One of: sailboat, catamaran, yacht, motorboat, gulet |
manufacturer | string | No | Manufacturer name (fuzzy matched, e.g. Bali, Beneteau). |
guests | integer | No | Minimum guest capacity (1-50) |
date_from | string | No | Charter start date (YYYY-MM-DD). Enables availability filtering and a per-week price summary. Past dates are auto-corrected to the next matching future date. |
date_to | string | No | Charter end date (YYYY-MM-DD). Typical charters are 7 days (Saturday to Saturday). |
price_min | number | No | Minimum price per day in EUR. Ignored when dates are set (weekly prices are used instead). |
price_max | number | No | Maximum price per day in EUR. Ignored when dates are set. |
total_max | number | No | Maximum whole-trip total (charter + required extras) for the requested week. Requires date_from/date_to. |
cabins | integer | No | Minimum number of cabins |
length_min | number | No | Minimum length in feet |
year_min | integer | No | Minimum build year |
sort | string | No | Sort order: deals (default), price_low, price_high, newest |
limit | integer | No | Results to return (default: 5, max: 20) |
Request
Response
When no dates are passed, available is omitted, price_summary is null, required_extras is null, and inventory.by_type is only present when boat_type was not filtered.
Response Fields
| Field | Type | Description |
|---|---|---|
boats | array | Matching boats ranked by the selected sort order |
boats[].id | string | Boat UUID |
boats[].slug | string|null | URL slug |
boats[].url | string | Short link to the boat page (https://chrtr.me/<code>) |
boats[].title | string | Boat name |
boats[].boat_type | string | Type of boat |
boats[].manufacturer | string|null | Manufacturer name |
boats[].model | string|null | Model name |
boats[].location | string | Formatted location string (marina, city, country) |
boats[].year | integer|null | Build year |
boats[].length_ft | number|null | Length in feet |
boats[].capacity | integer|null | Maximum guests |
boats[].cabins | integer|null | Number of cabins |
boats[].toilets | integer|null | Number of heads/toilets |
boats[].skippered | boolean|string | true (skippered only), false (bareboat), or "optional" |
boats[].discounted_price_per_day | number | Daily rate in the boat's currency (already discounted) |
boats[].discount_percentage | number | Active discount percentage. 0 if none. |
boats[].discount_label | string|null | Discount description (e.g. "50% discount"). null when no discount. |
boats[].price_rank_percentile | number|null | Where this boat's daily rate sits within the matched inventory (0 = cheapest, 100 = most expensive) |
boats[].currency | string | Currency code (e.g. EUR) |
boats[].required_extras | object|null | Mandatory extras for the quoted week (per_day, per_booking, per_person, per_person_per_day). null when no dates provided. |
boats[].price_summary | string|null | Human-readable total breakdown for the quoted week. null when no dates provided. |
boats[].available | boolean | Only present when a date range was supplied — true if available for the requested week. |
boats[].checkinout_days | array | Allowed check-in/turnover weekday(s), e.g. ["Saturday"] |
boats[].instant_book | boolean | Whether the boat supports instant booking |
boats[].hero_image_url | string|null | Primary boat image URL |
inventory | object | Aggregate stats across all boats matching the filters (before limit) |
inventory.total_boats | integer | Total boats matching criteria |
inventory.discounted_price_per_day | object|null | { min, median, max } daily rates |
inventory.capacity | object|null | { min, max } guest capacity |
inventory.length_ft | object|null | { min, max } length |
inventory.by_type | object | Boat counts per type (only when boat_type not filtered) |
location_matched | object|null | The location the query resolved to (id, name, country) |
search_url | string | Link to full search results on charter.boats |
alternatives | array | Present only when strict results are insufficient — nearby/relaxed matches with match_score, matched, and missed fields added to each boat |
alternative_inventory | object | Present alongside alternatives — aggregate stats for the broadened search |
Location Matching
The location parameter is fuzzy-matched against the database in priority order:
- Exact name match (e.g., "Marina Zenta")
- City match (e.g., "Split" matches all marinas in Split)
- State/region match
- Country match (e.g., "Greece" or "Croatia")
When a city or marina is matched, boats from all locations in that city are included. For country/state matches, all locations in the region are searched.
Sort Orders
| Value | Description |
|---|---|
deals | Best discounts first, then lowest price (default) |
price_low | Cheapest per-day rate first |
price_high | Most expensive first |
newest | Newest build year first |
Boat Details
/ai/boats/{id}Full detail for a single boat: description, specs, 365-day pricing windows, authoritative bookable check-in/check-out slots, fees, discounts, and cancellation policy. The {id} accepts either a boat UUID or a chrtr.me short code.
Request
Response
Response Fields
| Field | Type | Description |
|---|---|---|
url | string|null | Short link to the boat page |
boat.id | string | Boat UUID |
boat.title | string | Boat name |
boat.description | string|null | Description (trimmed to ~500 chars) |
boat.boat_type | string|null | Type of boat |
boat.manufacturer | string|null | Manufacturer name |
boat.year | integer|null | Build year |
boat.length_ft | number|null | Length in feet |
boat.capacity | integer|null | Maximum guests |
boat.cabins | integer|null | Number of cabins |
boat.berths | integer|null | Number of berths |
boat.toilets | integer|null | Number of heads/toilets |
boat.instant_book | boolean | Whether instant booking is supported |
boat.rental_type | string|null | e.g. skippered, bareboat |
boat.charter_schedule | string|null | Human-readable check-in day/time and minimum nights |
boat.security_deposit | number|null | Security deposit amount |
boat.location | object | { name, city, country } (each may be null) |
boat.amenities | array | { name, category } entries (max 20) |
pricing.horizon_days | integer | Look-ahead window (365) |
pricing.currency | string | Currency code |
pricing.ranges | array | Contiguous available date windows with from, to, price_per_day (discount already applied) |
pricing.truncated | boolean | true if more than 30 ranges were dropped |
pricing.note | string | Guidance on how to read pricing |
bookable_slots.note | string | Guidance on quoting slots |
bookable_slots.slots | array | Authoritative { type, checkin, checkout, nights, base_price } slots (charter total only) |
bookable_slots.truncated | boolean | Whether the slot list was truncated |
fees.required | array | Mandatory { description, amount, period } fees |
fees.optional | array | Optional add-on fees |
discounts.note | string | Guidance on which discounts are pre-applied |
discounts.operator_seasonal | array | Seasonal discounts already baked into pricing.ranges |
discounts.operator_conditional_offers | array | Coupon-style offers (NOT pre-applied) with visibility, condition, remaining_uses |
discounts.agent_grants | array | Agent-granted discounts (NOT pre-applied) |
company.has_members | boolean | Whether the operator has staff members responding |
company.cancellation_policy | string | Plain-language cancellation policy |