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 festivals and events in Thailand, ordered by start date.
provincequeryFilter by province ID▶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/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 travel advisories for Thailand (seasonal warnings, safety notices).
▶Example response
[
{
"id": "monsoon-2026-07",
"level": "info",
"title": "Monsoon Season",
"body": "Heavy afternoon rains across Thailand through October. Southern Andaman coast sees the most rainfall.",
"link": null
}
]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? [email protected]