Agent API
Agent Search
Dense agent search revealing platform, deeplinks, per-week availability, options, and commission preview
GET
/agent/boatsThe dense "one boat per line" agent feed. It reuses the same matching and value-ordering as the consumer search, then re-fetches each match with agent-only columns and enriches it for the requested week.
Authentication
Logged-in session as an active agent. Returns 401 when not logged in, 403 when the session has no active agent profile. See the Agent API overview.
Query Parameters
Accepts the same parameters as the consumer search. All are optional; with none, it returns the value-ranked default set.
| Parameter | Type | Description |
|---|---|---|
location_id | integer | Location to search (marina/city/region resolved server-side). |
location_type + location_value | string | Alternative to location_id — e.g. location_type=text&location_value=Lefkada. Named sailing regions (Dalmatia, the Dodecanese) resolve too. Add country_code to scope. A value that matches no known place returns an empty result set rather than boats from elsewhere. |
type | string | Boat type(s), comma-separated: sailboat, catamaran, yacht, motorboat, gulet. |
d | string | Charter week as YYYY-MM-DD,YYYY-MM-DD (Saturday→Saturday). A single date does not availability-filter — always pass a range. |
guests | integer | Guest count. Drives availability and folds per-person required extras into the quoted price. |
priceMin / priceMax | number | Daily-rate bounds (EUR). |
cabins / berths / toilets | integer | Minimum counts. |
lengthMin / lengthMax | number | Length bounds (feet). |
yearMin / yearMax | integer | Build-year bounds. |
rentalTypes | string | Comma-separated: bareboat, skippered. |
features | string | Comma-separated equipment slugs. |
manufacturerSlug | string | Manufacturer filter. |
q | string | Free-text match on boat title/model. |
Request
Response
When no d week is passed, price.unit is "day" (amount is the daily rate), week.index is -1, and week.available is null.
Response Fields
| Field | Type | Description |
|---|---|---|
boats[].id | string | Boat UUID |
boats[].slug | string|null | URL slug |
boats[].title | string | Boat name (falls back to model when the boat has no valid name) |
boats[].model | string|null | Model name |
boats[].brand | string|null | Manufacturer name |
boats[].boat_type | string | Type of boat |
boats[].year / capacity / cabins / berths / heads / length_ft | number|null | Specs. length_ft is length overall (LOA). |
boats[].location | object | { id, name, city, country, country_code } |
boats[].currency | string | Currency code (operator's base currency, default EUR) |
boats[].images | string[] | Up to 5 gallery images, ordered with the same category-diverse logic as the boat detail hero |
boats[].features | object[] | Equipment & amenities: { label, slug } — label is the display spelling matching the detail page, slug the canonical filterable feature (or null for non-canonical items) |
boats[].deposit | number|null | Security deposit |
boats[].platform | string | Agent-only. Source pricing platform: mmk, nausys, or direct. Marks the price-of-record deeplink. |
boats[].price | object | Headline price: amount + unit (week when a date is set, else day), discount_pct, required_extras, rental (bareboat/skippered/skipper optional), payment_terms. When the requested week has no price (a similar backfill boat matched via ±1-week flexibility), the price comes from the nearest adjacent available week and week_start carries that week's Saturday (null otherwise). |
boats[].week | object | Selected-week detail: index, available, price_per_day, discount_pct, charter_total, required_extras, all_in. index=-1 / available=null when no week is set. |
boats[].commission_preview | object | Agent-only. { estimate, gated, exact }. A rough pre-booking estimate; estimate is 0 while gated (agent has no prior booking). Never exact pre-booking. |
boats[].links | object | Agent-only. { reserve, mmk, nausys } deeplinks (a platform key is null when the boat isn't on it). |
boats[].similar | boolean | true for nearby/flexible backfill boats (past the strict-match count) — the UI groups these under a "Similar boats" divider |
boats[].booked_12m_pct | number | Share of the next 52 weeks that are booked |
boats[].options | array | Upcoming holds (soonest first): { start, end, expires } |
boats[].activity | object | Selected-week snapshot: { option, booked, last_option_at } |
total | integer | Total boats matching the filters (before result limit) |
agent | object | The calling agent's { split_percent, commission_gated } |