Charter Boats
Charter Boats API
Points of Interest

Search POIs

Find points of interest near a location or coordinates

Endpoint

GET /pois/search

Description

Search for points of interest (restaurants, shops, fuel stations, etc.) near a location. Supports three search modes: by location ID, by coordinates with radius, or by geographic region (country, state, city).

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

Query Parameters

Use one of the three search modes:

Mode 1: By Location ID

ParameterTypeRequiredDescription
location_idnumberYesLocation ID to find nearby POIs
categorystringNoFilter by POI category
minRatingnumberNoMinimum rating filter
limitnumberNoMax results (default: 50, max: 200)

Mode 2: By Coordinates

ParameterTypeRequiredDescription
latnumberYesLatitude
lonnumberYesLongitude
radiusnumberNoSearch radius in km (default: 1, max: 10)
categorystringNoFilter by POI category
minRatingnumberNoMinimum rating filter
limitnumberNoMax results (default: 50, max: 200)

Mode 3: By Region

ParameterTypeRequiredDescription
location_typestringYesOne of: country, state, city, municipality
location_valuestringYesRegion name or country code
country_codestringNoISO country code (narrows state/city/municipality results)
categorystringNoFilter by POI category
qstringNoFilter by name (matches name or name_en)
minRatingnumberNoMinimum rating filter
limitnumberNoMax results (default: 50, max: 200)
offsetnumberNoPagination offset (default: 0)

Example Requests

By Location

curl "https://charter.boats/api/pois/search?location_id=11336&category=parking"

By Coordinates

curl "https://charter.boats/api/pois/search?lat=38.83&lon=20.71&radius=2"

By Country

curl "https://charter.boats/api/pois/search?location_type=country&location_value=gr&category=restaurant&limit=20"

Example Response (Location Mode)

{
  "pois": [
    {
      "id": "c72f95e7-5fc1-4b5e-ab47-be494a849858",
      "osm_id": 1122536808,
      "name": "Parking",
      "name_en": null,
      "category": "parking",
      "subcategory": "parking",
      "lat": 38.8285667,
      "lon": 20.7114899,
      "address": null,
      "city": null,
      "country": null,
      "phone": null,
      "website": null,
      "opening_hours": null,
      "is_seasonal": false,
      "description": null,
      "cuisine": null,
      "image_url": null,
      "image_attribution": null,
      "rating": null,
      "nearest_location_name": "D-Marin Lefkas",
      "poi_id": "c72f95e7-5fc1-4b5e-ab47-be494a849858",
      "distance_meters": 39,
      "walking_time_minutes": 1,
      "location_name": "D-Marin Lefkas"
    }
  ],
  "total": 1,
  "location_id": 11336
}

Example Response (Region Mode)

{
  "pois": [
    {
      "id": "ffeb0e30-47de-4c5b-a0e3-9c5bba7acdf9",
      "osm_id": 8838655415,
      "name": "Delfini Hotel Appartments",
      "name_en": null,
      "category": "restaurant",
      "subcategory": "restaurant",
      "lat": 36.9951066,
      "lon": 24.675694,
      "address": null,
      "city": null,
      "country": null,
      "phone": null,
      "website": null,
      "opening_hours": null,
      "is_seasonal": false,
      "description": "The restaurant at Delfini Hotel serves up a free breakfast buffet...",
      "cuisine": null,
      "image_url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/01/ef/75/f9/getlstd-property-photo.jpg",
      "image_attribution": null,
      "rating": 9.8,
      "is_active": true,
      "nearest_location_name": "Sifnos",
      "poi_id": "ffeb0e30-47de-4c5b-a0e3-9c5bba7acdf9",
      "distance_meters": 663,
      "location_name": "Sifnos"
    }
  ],
  "total": 20,
  "hasMore": true,
  "location_type": "country",
  "location_value": "gr"
}

Ratings are on a 0–10 scale (e.g. 9.8), not 0–5. The total field is the size of the returned page, not the global count.

Response Fields

FieldTypeDescription
poisarrayList of POIs
totalnumberNumber of POIs in this response (page size, not a global count)
hasMorebooleanWhether more results exist (region mode with pagination)
location_idnumberEchoed location ID (location mode)
radius_kmnumberEchoed search radius (coordinate mode)
location_typestringEchoed location type (region mode)
location_valuestringEchoed location value (region mode)

POI Fields

FieldTypeDescription
idstringPOI ID (UUID)
poi_idstringSame as id (convenience alias)
osm_idnumber|nullOpenStreetMap ID
namestringPOI name (local language)
name_enstring|nullEnglish name
categorystringPOI category
subcategorystring|nullMore specific category
latnumberLatitude
lonnumberLongitude
addressstring|nullStreet address
citystring|nullCity
countrystring|nullCountry
phonestring|nullPhone number
websitestring|nullWebsite URL
opening_hoursstring|nullOpening hours (OSM format)
is_seasonalboolean|nullWhether the business is seasonal
descriptionstring|nullDescription (markdown)
cuisinestring|nullCuisine type (restaurants only)
image_urlstring|nullImage URL
image_attributionstring|nullImage attribution text
ratingnumber|nullRating on a 0–10 scale
is_activebooleanActive flag (present in region mode only)
nearest_location_namestring|nullName of the nearest charter location
location_namestring|nullSame nearest-location name (convenience alias)
distance_metersnumber|nullDistance from the reference location
walking_time_minutesnumber|nullEstimated walking time (location mode only)

Error Responses

400 Bad Request

{
  "statusCode": 400,
  "message": "Either q, location_id, or lat/lon coordinates required"
}

An invalid category value also returns 400 (Invalid category: <value>).

On this page