Charter Boats
Charter Boats API
Agent API

Agent Search

Dense agent search revealing platform, deeplinks, per-week availability, options, and commission preview

GET/agent/boats

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

ParameterTypeDescription
location_idintegerLocation to search (marina/city/region resolved server-side).
location_type + location_valuestringAlternative 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.
typestringBoat type(s), comma-separated: sailboat, catamaran, yacht, motorboat, gulet.
dstringCharter week as YYYY-MM-DD,YYYY-MM-DD (Saturday→Saturday). A single date does not availability-filter — always pass a range.
guestsintegerGuest count. Drives availability and folds per-person required extras into the quoted price.
priceMin / priceMaxnumberDaily-rate bounds (EUR).
cabins / berths / toiletsintegerMinimum counts.
lengthMin / lengthMaxnumberLength bounds (feet).
yearMin / yearMaxintegerBuild-year bounds.
rentalTypesstringComma-separated: bareboat, skippered.
featuresstringComma-separated equipment slugs.
manufacturerSlugstringManufacturer filter.
qstringFree-text match on boat title/model.

Request

# Requires an authenticated agent session (cookie); no API key.
curl "https://charter.boats/api/agent/boats?location_id=11336&d=2026-07-18,2026-07-25&guests=6" \
  -H "Cookie: <charter.boats session cookie>"

Response

{
  "boats": [
    {
      "id": "3a121be0-c1f8-4432-8e18-4a125b46da65",
      "slug": "beneteau-oceanis-40",
      "title": "Škuribanda",
      "model": "Oceanis 40",
      "boat_type": "sailboat",
      "year": 2006,
      "capacity": 8,
      "cabins": 3,
      "berths": 8,
      "heads": 2,
      "length_ft": 39.2,
      "brand": "Beneteau",
      "location": { "id": 11336, "name": "D-Marin Lefkas", "city": "Lefkada", "country": "Greece", "country_code": "GR" },
      "currency": "EUR",
      "images": ["https://.../1.jpg", "https://.../2.jpg"],
      "features": [{ "label": "Bimini", "slug": "bimini" }, { "label": "Autopilot", "slug": "autopilot" }, { "label": "Bow thruster", "slug": "bow_thruster" }],
      "deposit": 1500,
      "platform": "nausys",
      "price": {
        "amount": 3381,
        "unit": "week",
        "week_start": null,
        "discount_pct": 12,
        "required_extras": 465,
        "rental": "bareboat",
        "payment_terms": "50% now · 50% 30 days before"
      },
      "week": {
        "index": 24,
        "available": true,
        "price_per_day": 483,
        "discount_pct": 12,
        "charter_total": 3381,
        "required_extras": 465,
        "all_in": 3846
      },
      "commission_preview": { "estimate": 0, "gated": true, "exact": false },
      "links": {
        "reserve": "https://charter.boats/boats/beneteau-oceanis-40",
        "mmk": null,
        "nausys": "https://agencymanager.nausys.com/..."
      },
      "booked_12m_pct": 52,
      "options": [
        { "start": "2026-08-15", "end": "2026-08-22", "expires": "2026-07-20" }
      ],
      "activity": { "option": false, "booked": false, "last_option_at": null }
    }
  ],
  "total": 42,
  "agent": { "split_percent": 50, "commission_gated": true }
}

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

FieldTypeDescription
boats[].idstringBoat UUID
boats[].slugstring|nullURL slug
boats[].titlestringBoat name (falls back to model when the boat has no valid name)
boats[].modelstring|nullModel name
boats[].brandstring|nullManufacturer name
boats[].boat_typestringType of boat
boats[].year / capacity / cabins / berths / heads / length_ftnumber|nullSpecs. length_ft is length overall (LOA).
boats[].locationobject{ id, name, city, country, country_code }
boats[].currencystringCurrency code (operator's base currency, default EUR)
boats[].imagesstring[]Up to 5 gallery images, ordered with the same category-diverse logic as the boat detail hero
boats[].featuresobject[]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[].depositnumber|nullSecurity deposit
boats[].platformstringAgent-only. Source pricing platform: mmk, nausys, or direct. Marks the price-of-record deeplink.
boats[].priceobjectHeadline 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[].weekobjectSelected-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_previewobjectAgent-only. { estimate, gated, exact }. A rough pre-booking estimate; estimate is 0 while gated (agent has no prior booking). Never exact pre-booking.
boats[].linksobjectAgent-only. { reserve, mmk, nausys } deeplinks (a platform key is null when the boat isn't on it).
boats[].similarbooleantrue for nearby/flexible backfill boats (past the strict-match count) — the UI groups these under a "Similar boats" divider
boats[].booked_12m_pctnumberShare of the next 52 weeks that are booked
boats[].optionsarrayUpcoming holds (soonest first): { start, end, expires }
boats[].activityobjectSelected-week snapshot: { option, booked, last_option_at }
totalintegerTotal boats matching the filters (before result limit)
agentobjectThe calling agent's { split_percent, commission_gated }

On this page