Eat & Drink Bars Stay See Do Beaches Guides News Weather Map
Filter by area

The Lanta Guide API

Read-only JSON API. No authentication, no rate limits. Responses are UTF-8 encoded JSON. CORS headers are included on all responses so you can call from a browser directly.

Base URL: https://lanta.guide
Places
GET /api/places List places
ParameterTypeDefaultDescription
folderstringCategory: restaurants cafes bars resorts beaches diving tours wellness shopping cooking-classes services places markets mainland
areastringGeographic area, e.g. Klong Dao
limitinteger50Max results (max 200)
offsetinteger0Pagination offset
GET /api/places?folder=cafes&area=Klong+Khong&limit=2

[
  {
    "id": 42,
    "title": "Shanti Cafe",
    "folder": "cafes",
    "area": "Klong Khong",
    "lat": 7.481,
    "lng": 99.031,
    "description": "Chill beachside cafe with smoothie bowls…",
    "updated_at": "2025-11-02T08:12:00.000Z"
  }
]
GET /api/places/{id} Single place with full details
GET /api/places/42

{
  "id": 42,
  "title": "Shanti Cafe",
  "folder": "cafes",
  "folders": ["cafes", "wellness"],
  "area": "Klong Khong",
  "lat": 7.481,
  "lng": 99.031,
  "description": "Chill beachside cafe…",
  "photos": [
    "https://files.lanta.tv/places/42/photo1.jpg"
  ],
  "contacts": [
    { "type": "phone", "value": "+66812345678" },
    { "type": "url", "value": "https://facebook.com/shanticafe" }
  ],
  "hours": {
    "mon": "08:00–18:00",
    "tue": "08:00–18:00",
    "sat": "09:00–16:00",
    "sun": "closed"
  },
  "tags": ["breakfast", "vegan", "wifi"],
  "updated_at": "2025-11-02T08:12:00.000Z"
}
Guides
GET /api/articles List guides
ParameterTypeDefaultDescription
limitinteger20Max results (max 100)
offsetinteger0Pagination offset
GET /api/articles?limit=3

[
  {
    "id": 7,
    "title": "Best Beaches on Koh Lanta",
    "summary": "From the long stretch of Klong Dao to the sheltered…",
    "updated_at": "2025-10-15T00:00:00.000Z"
  }
]
GET /api/articles/{id} Single guide including full Markdown content
GET /api/articles/7

{
  "id": 7,
  "title": "Best Beaches on Koh Lanta",
  "summary": "From the long stretch of Klong Dao…",
  "content": "# Best Beaches on Koh Lanta\n\n## Klong Dao\n…",
  "updated_at": "2025-10-15T00:00:00.000Z"
}
News
GET /api/news List news posts
ParameterTypeDefaultDescription
limitinteger20Max results (max 100)
offsetinteger0Pagination offset
GET /api/news?limit=3

[
  {
    "id": 18,
    "title": "New ferry route opens for summer season",
    "created_at": "2025-11-10T09:00:00.000Z"
  }
]
GET /api/news/{id} Single news post including Markdown body
GET /api/news/18

{
  "id": 18,
  "title": "New ferry route opens for summer season",
  "body": "Starting 1 December, Andaman Wave Master will…",
  "created_at": "2025-11-10T09:00:00.000Z"
}
Search
GET /api/search Full-text search across places, guides, and news
ParameterTypeDefaultDescription
qstringrequiredSearch query (min 2 characters)
GET /api/search?q=diving

{
  "places": [
    { "id": 18, "title": "Lanta Diver", "area": "Saladan", "folder": "diving" },
    { "id": 31, "title": "Blue Planet Divers", "area": "Saladan", "folder": "diving" }
  ],
  "articles": [
    { "id": 3, "title": "Diving on Koh Lanta" }
  ],
  "news": []
}
Weather
GET /api/weather Current conditions, tides, and moon phase

Live weather from Open-Meteo (ECMWF model). Tides calculated from M2/S2/N2/K1/O1/P1/K2/Q1 harmonic constituents calibrated for the Koh Lanta area. Moon phase from an astronomical formula. Cached for 30 minutes.

GET /api/weather

{
  "temp": 31,
  "code": 1,
  "desc": "Mainly clear",
  "emoji": "🌤️",
  "wind": 12,
  "windDir": "SW",
  "humidity": 74,
  "uv": 8,
  "moon": {
    "phase": 0.42,
    "illum": 82,
    "name": "Waxing Gibbous",
    "emoji": "🌔",
    "next": "Full moon in 2 days"
  },
  "tide": {
    "current": 1.23,
    "next": { "time": "14:40", "high": true, "h": 1.87 }
  }
}
Navigation
GET /api/nav All published places for sidebar/map use

Returns all published places (id, title, folder, folders, area, lat, lng) plus a list of distinct areas. Results are cached for 5 minutes.

GET /api/nav

{
  "places": [
    {
      "id": 42,
      "title": "Shanti Cafe",
      "folder": "cafes",
      "folders": "[\"cafes\", \"wellness\"]",
      "area": "Klong Khong",
      "lat": 7.481,
      "lng": 99.031
    }
  ],
  "areas": ["Klong Dao", "Klong Khong", "Kantiang Bay"],
  "hasUntagged": false
}