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.
Province Data
/api/provincesReturns all 77 provinces with region, coordinates, budget tiers, best visit months, and descriptions.
▶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
]/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▶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
]
}/api/searchFull-text search across provinces, attractions, and events. Minimum 2 characters.
qqueryrequiredSearch query (min 2 chars)▶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
/api/weather/{province}Current weather conditions and 5-day forecast for a province, powered by OpenWeatherMap.
provincepathrequiredProvince ID in kebab-case▶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
]
}/api/aqi/{province}Air Quality Index (AQI) and pollutant breakdown for a province.
provincepathrequiredProvince ID in kebab-case▶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"
}/api/exchangeLive Thai Baht exchange rates for USD, EUR, GBP, JPY, SGD, AUD, and CNY, via Frankfurter.
▶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
/api/eventsUpcoming curated festivals and events in Thailand, ordered by start date. Add include=tat to merge cached official TAT Data Catalog events.
provincequeryFilter by province IDincludequerySet to tat to merge cached official tourism events▶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
}
]/api/tourism/eventsOfficial 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 IDlimitquery1-100 results, defaults to 50refreshquerySet to 1 to fetch and rebuild the KV cache from the official sourceinclude_low_detailquerySet to 1 to include official records with missing or very thin descriptions for audit/debugging▶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
}/api/tourism/attractionsOfficial 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 IDlimitquery1-100 results, defaults to 50refreshquerySet to 1 to fetch and rebuild the KV cache from the official sourceinclude_promotionalquerySet to 1 to include records flagged as non-editorial or promotional for audit/debugging▶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
}/api/tourism/restaurantsOfficial 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 IDlimitquery1-100 results, defaults to 50refreshquerySet to 1 to fetch and rebuild the KV cache from the official sourceinclude_low_qualityquerySet to 1 to include restaurant records with thin details or promotional signals for audit/debugging▶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
}/api/tourism/accommodationsOfficial 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 IDlimitquery1-100 results, defaults to 50refreshquerySet to 1 to fetch and rebuild the KV cache from the official sourceinclude_low_qualityquerySet to 1 to include accommodation records with thin details or promotional signals for audit/debugging▶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
}/api/tourism/sourcesKnown official tourism data sources discovered through GD Catalog and TAT Data Catalog, including resource IDs, update dates, licenses, and raw file sizes.
▶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
}
}
]
}/api/newsLatest Thailand headlines parsed from Bangkok Post RSS.
▶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"
}
]/api/advisoryActive Thailand weather advisories from Thai Meteorological Department CAP alerts, with seasonal fallback if the official feed is unavailable.
▶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.
chiang-maichiang-railampangmae-hong-sonnanburiramkhon-kaenloeinakhon-ratchasimaubon-ratchathaniudon-thaniayutthayabangkokkanchanaburinakhon-pathomphetchaburichanthaburichonburirayongtratkrabinakhon-si-thammaratphang-ngaphuketsatunsongkhlasurat-thanitrangranongprachuap-khiri-khanFull 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?
AI & Developer Tools
Questions or data issues? hello [at] yourthailand.net