YourThailand
Zero authJSONCloudflare EdgeFree forever

Thailand Public API

Structured data for all 77 Thai provinces — geography, live weather, AQI, attractions, events, exchange rates, and more. No API key, no sign-up, no rate limit.

Base URLhttps://www.yourthailand.net

Province Data

GET
/api/provinces

Returns all 77 provinces with region, coordinates, budget tiers, best visit months, and descriptions.

Cache TTL:1 hour
Example response
[
  {
    "id": "chiang-mai",
    "name_en": "Chiang Mai",
    "name_th": "เชียงใหม่",
    "region": "north",
    "lat": 18.7883,
    "lng": 98.9853,
    "area_km2": 20107,
    "population": 1774507,
    "capital_city": "Chiang Mai",
    "best_months": ["November","December","January","February"],
    "budget_low": 900,
    "budget_mid": 2500,
    "budget_high": 7000,
    "cover_image": "https://...",
    "summary_en": "Thailand's cultural capital in the mountainous north..."
  },
  ...76 more
]
GET
/api/provinces/{id}

Returns full province data plus up to 20 top-rated attractions.

idpathrequiredProvince ID in kebab-case — e.g. chiang-mai, nakhon-ratchasima
Cache TTL:1 hour
Example response
{
  "id": "krabi",
  "name_en": "Krabi",
  "name_th": "กระบี่",
  "region": "south",
  "lat": 8.0863,
  "lng": 98.9063,
  "best_months": ["November","December","January","February","March"],
  "budget_low": 1200,
  "budget_mid": 3000,
  "budget_high": 9000,
  "attractions": [
    {
      "id": "railay-beach",
      "name_en": "Railay Beach",
      "category": "beach",
      "lat": 8.0115,
      "lng": 98.8380,
      "entry_fee": 0,
      "rating": 4.8
    },
    ...up to 19 more
  ]
}
GET
/api/search

Full-text search across provinces, attractions, and events. Minimum 2 characters.

qqueryrequiredSearch query (min 2 chars)
Cache TTL:15 min
Example response
[
  {
    "entity_id": "chiang-mai",
    "entity_type": "province",
    "province_id": null,
    "name_en": "Chiang Mai",
    "name_th": "เชียงใหม่"
  },
  {
    "entity_id": "doi-suthep",
    "entity_type": "attraction",
    "province_id": "chiang-mai",
    "name_en": "Doi Suthep Temple",
    "name_th": "ดอยสุเทพ"
  }
]

Live Data

GET
/api/weather/{province}

Current weather conditions and 5-day forecast for a province, powered by OpenWeatherMap.

provincepathrequiredProvince ID in kebab-case
Cache TTL:30 min
Example response
{
  "province_id": "bangkok",
  "temp_c": 33,
  "feels_like_c": 40,
  "humidity": 76,
  "description": "Partly cloudy",
  "icon": "02d",
  "wind_kph": 14,
  "rain_chance": 30,
  "forecast": [
    {
      "date": "2026-07-27",
      "temp_max_c": 34,
      "temp_min_c": 27,
      "description": "Moderate rain",
      "icon": "10d",
      "rain_chance": 75
    },
    ...4 more days
  ]
}
GET
/api/aqi/{province}

Air Quality Index (AQI) and pollutant breakdown for a province.

provincepathrequiredProvince ID in kebab-case
Cache TTL:1 hour
Example response
{
  "province": "chiang-mai",
  "aqi": 52,
  "category": "Moderate",
  "pm25": 18.4,
  "pm10": 31.2,
  "o3": 44.1,
  "no2": 9.8,
  "updated_at": "2026-07-26T10:00:00Z"
}
GET
/api/exchange

Live Thai Baht exchange rates for USD, EUR, GBP, JPY, SGD, AUD, and CNY, via Frankfurter.

Cache TTL:1 hour
Example response
[
  { "currency": "USD", "symbol": "$",  "thb": 33.85, "date": "2026-07-25" },
  { "currency": "EUR", "symbol": "€",  "thb": 37.12, "date": "2026-07-25" },
  { "currency": "GBP", "symbol": "£",  "thb": 43.60, "date": "2026-07-25" },
  { "currency": "JPY", "symbol": "¥",  "thb": 0.22,  "date": "2026-07-25" },
  { "currency": "SGD", "symbol": "S$", "thb": 25.40, "date": "2026-07-25" },
  { "currency": "AUD", "symbol": "A$", "thb": 21.90, "date": "2026-07-25" },
  { "currency": "CNY", "symbol": "¥",  "thb": 4.65,  "date": "2026-07-25" }
]

Content

GET
/api/events

Upcoming curated festivals and events in Thailand, ordered by start date. Add include=tat to merge cached official TAT Data Catalog events.

provincequeryFilter by province ID
includequerySet to tat to merge cached official tourism events
Cache TTL:None
Example response
[
  {
    "id": "yi-peng-2026",
    "province_id": "chiang-mai",
    "name_en": "Yi Peng Lantern Festival",
    "name_th": "ยี่เป็ง",
    "category": "festival",
    "start_date": "2026-11-02",
    "end_date": "2026-11-03",
    "description": "Thousands of paper lanterns released into the night sky...",
    "lat": 18.7883,
    "lng": 98.9853
  }
]
GET
/api/tourism/events

Official tourism activities transformed from TAT Data Catalog. Low-detail records are excluded by default; use include_low_detail=1 only for audit.

provincequeryFilter by province ID
limitquery1-100 results, defaults to 50
refreshquerySet to 1 to fetch and rebuild the KV cache from the official source
include_low_detailquerySet to 1 to include official records with missing or very thin descriptions for audit/debugging
Cache TTL:5 min edge, 12 hour KV source cache
Example response
{
  "events": [
    {
      "id": "tat-119156",
      "source": "Tourism Authority of Thailand Data Catalog",
      "source_url": "https://datacatalog.tat.or.th/...",
      "license": "Open Data Common",
      "name_en": "Phuket Peranakan Festival",
      "name_th": "งานเทศกาลเพอรานากัน",
      "category": "festival",
      "start_date": "2026-08-01",
      "end_date": "2026-08-03",
      "province_id": "phuket",
      "province_name_th": "ภูเก็ต",
      "venue": "Phuket Old Town"
    }
  ],
  "excluded_low_detail_count": 12,
  "cache_status": "hit",
  "refreshed_at": "2026-07-30T10:00:00.000Z",
  "requires_refresh": false
}
GET
/api/tourism/attractions

Official tourist attraction listings transformed from TAT Data Catalog. Non-editorial, low-detail, Thai-only, or promotional-looking commercial records are excluded by default; use include_promotional=1 only for audit.

provincequeryFilter by province ID
limitquery1-100 results, defaults to 50
refreshquerySet to 1 to fetch and rebuild the KV cache from the official source
include_promotionalquerySet to 1 to include records flagged as non-editorial or promotional for audit/debugging
Cache TTL:5 min edge, 24 hour KV source cache
Example response
{
  "attractions": [
    {
      "id": "tat-attr-20260209152844001",
      "source": "Tourism Authority of Thailand Data Catalog",
      "license": "Open Data Common",
      "name_en": "Forest of Play Trang",
      "name_th": "Forest of Play Trang",
      "category": "park",
      "content_safety": {
        "editorial_status": "trusted",
        "promotional_score": 8,
        "signals": ["external contact"]
      },
      "category_label": "แหล่งท่องเที่ยวสำหรับกิจกรรมพิเศษ นันทนาการ และความสนใจพิเศษ",
      "province_id": "trang",
      "province_name_th": "ตรัง",
      "district": "ย่านตาขาว",
      "lat": 7.4439168,
      "lng": 99.6412968
    }
  ],
  "excluded_promotional_count": 0,
  "cache_status": "hit",
  "refreshed_at": "2026-07-30T10:00:00.000Z",
  "requires_refresh": false
}
GET
/api/tourism/restaurants

Official restaurant listings transformed from TAT Data Catalog. Low-quality or strongly promotional dining records are excluded by default; use include_low_quality=1 only for audit.

provincequeryFilter by province ID
limitquery1-100 results, defaults to 50
refreshquerySet to 1 to fetch and rebuild the KV cache from the official source
include_low_qualityquerySet to 1 to include restaurant records with thin details or promotional signals for audit/debugging
Cache TTL:5 min edge, 24 hour KV source cache
Example response
{
  "restaurants": [
    {
      "id": "tat-rest-20231121093638001",
      "source": "Tourism Authority of Thailand Data Catalog",
      "license": "Open Data Common",
      "name_en": "Kaosoy Nimman",
      "name_th": "ข้าวซอยนิมมาน",
      "category": "noodle",
      "food_types": ["Noodle", "Thai Food"],
      "province_id": "chiang-mai",
      "province_name_th": "เชียงใหม่",
      "district": "เมืองเชียงใหม่",
      "highlight": "ข้าวซอยนิมมานคือเป็นเส้นที่ทำกันสดๆ...",
      "recommended_food": null,
      "awards": {
        "michelin": null,
        "tat": null,
        "sha": null
      },
      "content_safety": {
        "editorial_status": "trusted",
        "quality_score": 12,
        "signals": ["external contact"]
      }
    }
  ],
  "excluded_low_quality_count": 40,
  "cache_status": "hit",
  "refreshed_at": "2026-07-30T10:30:00.000Z",
  "requires_refresh": false
}
GET
/api/tourism/accommodations

Official accommodation listings transformed from TAT Data Catalog. Low-quality, inactive, thin-detail, or strongly promotional stay records are excluded by default; use include_low_quality=1 only for audit.

provincequeryFilter by province ID
limitquery1-100 results, defaults to 50
refreshquerySet to 1 to fetch and rebuild the KV cache from the official source
include_low_qualityquerySet to 1 to include accommodation records with thin details or promotional signals for audit/debugging
Cache TTL:5 min edge, 24 hour KV source cache
Example response
{
  "accommodations": [
    {
      "id": "tat-acc-20260608110721001",
      "source": "Tourism Authority of Thailand Data Catalog",
      "license": "Open Data Common",
      "name_en": "Kamaliss MontAzure Phuket - MGallery Collection",
      "name_th": "คามาลิซ มอนท์อาชัวร์ ภูเก็ต - เอ็มแกลเลอรี คอลเลกชัน",
      "category": "hotel",
      "type_label": "โรงแรม",
      "province_id": "phuket",
      "province_name_th": "ภูเก็ต",
      "district": "กะทู้",
      "rooms": 150,
      "low_rate": 10000,
      "high_rate": 35000,
      "standards": {
        "star": 5,
        "sha": null,
        "tta": null,
        "green": null
      },
      "content_safety": {
        "editorial_status": "trusted",
        "quality_score": 18,
        "signals": ["rate range signal"]
      }
    }
  ],
  "excluded_low_quality_count": 40,
  "cache_status": "hit",
  "refreshed_at": "2026-07-30T11:00:00.000Z",
  "requires_refresh": false
}
GET
/api/tourism/sources

Known official tourism data sources discovered through GD Catalog and TAT Data Catalog, including resource IDs, update dates, licenses, and raw file sizes.

Cache TTL:1 hour
Example response
{
  "sources": [
    {
      "key": "events",
      "title": "Tourism Activities",
      "title_th": "ชุดข้อมูลกิจกรรมท่องเที่ยว",
      "catalog": "https://datacatalog.tat.or.th",
      "license": "Open Data Common",
      "last_updated_date": "2026-06-11",
      "primary_resource": {
        "format": "JSON",
        "size_bytes": 60620068
      }
    }
  ]
}
GET
/api/news

Latest Thailand headlines parsed from Bangkok Post RSS.

Cache TTL:15 min
Example response
[
  {
    "title": "Thailand extends visa-free stay for 93 countries",
    "link": "https://www.bangkokpost.com/...",
    "pubDate": "Sat, 26 Jul 2026 08:00:00 +0700",
    "description": "The Cabinet approved a permanent extension...",
    "category": "Thailand"
  }
]
GET
/api/advisory

Active Thailand weather advisories from Thai Meteorological Department CAP alerts, with seasonal fallback if the official feed is unavailable.

Cache TTL:30 min
Example response
[
  {
    "id": "tmd-tmd20260728171241-2-en",
    "level": "warning",
    "title": "Heavy Rain",
    "body": "The monsoon trough lies across the upper North and upper Northeast...",
    "link": "https://www.tmd.go.th/uploads/CAP/en/CAPTMD20260728171241_2.xml",
    "source": "Thai Meteorological Department",
    "source_url": "https://www.tmd.go.th/en/api/xml/CAP",
    "published_at": "Tue, 28 Jul 2026 10:04:00 +0700"
  }
]

Province IDs

Province IDs are kebab-case strings. Use them as path parameters in /api/provinces/{id}, /api/weather/{province}, etc.

North
chiang-maichiang-railampangmae-hong-sonnan
Northeast
buriramkhon-kaenloeinakhon-ratchasimaubon-ratchathaniudon-thani
Central
ayutthayabangkokkanchanaburinakhon-pathomphetchaburi
East
chanthaburichonburirayongtrat
South
krabinakhon-si-thammaratphang-ngaphuketsatunsongkhlasurat-thanitrang
West
ranongprachuap-khiri-khan

Full list of all 77 province IDs available at /api/provinces — each object contains the id field.

Caching & Limits

Responses are cached at the Cloudflare edge. Cache TTLs are listed per endpoint above.

There is no enforced rate limit, but please be considerate. If you are building something that queries all 77 provinces, fetch /api/provinces once and cache the result locally rather than making 77 individual requests.

All responses include standard CORS headers — the API is consumable directly from a browser.

Building with the API?

Get notified about the paid tier

Building something with this API? Leave your email and we’ll reach out when higher-limit and SLA-backed tiers are available. The free public API isn’t going away.

AI & Developer Tools

Questions or data issues? hello [at] yourthailand.net