Go APIbmkg.go.id ↗
Access BMKG Indonesia data: village weather forecasts, earthquakes, marine forecasts, air quality, METAR/TAF, and more via 25 structured endpoints.
What is the Go API?
The BMKG API exposes 25 endpoints covering Indonesia's official meteorology, climatology, and geophysics data — from village-level 10-day weather forecasts to realtime earthquake catalogues. Use search_weather_locations to find a village code, then pass it to get_weather_forecast for hourly temperature, humidity, wind speed, and cloud cover. The same surface includes marine and port forecasts, high-wave warnings, aviation METAR/TAF, air-quality readings, and seismic bulletins.
curl -X GET 'https://api.parse.bot/scraper/14d37ac3-44d2-4d6b-ba48-f4fe3ea92fe8/search_weather_locations?query=kemayoran' \ -H 'X-API-Key: $PARSE_API_KEY'
Searches BMKG's administrative location index (province / regency / district / village) by free text and returns matching villages with their location_code, the key used by get_weather_forecast. One round trip; typically up to 10 matches, ordered by the site. An empty list means no village matched.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Free-text place name (village, district, regency or province), e.g. a district name. |
{
"type": "object",
"fields": {
"count": "number of locations returned",
"query": "echo of the search text",
"locations": "array of matching villages: location_code (adm4 village code), province_code, regency_code, district_code, province, regency, district, village, latitude, longitude, timezone (IANA)"
},
"sample": {
"data": {
"count": 1,
"query": "kemayoran",
"locations": [
{
"regency": "Kota Adm. Jakarta Pusat",
"village": "Kemayoran",
"district": "Kemayoran",
"latitude": -6.1647214778,
"province": "DKI Jakarta",
"timezone": "Asia/Jakarta",
"longitude": 106.8453837867,
"regency_code": "31.71",
"district_code": "31.71.03",
"location_code": "31.71.03.1001",
"province_code": "31"
}
]
},
"status": "success"
}
}About the Go API
Weather Forecasts and Warnings
Start with search_weather_locations, which accepts a free-text place name and returns up to 10 matching villages, each with a location_code in NN.NN.NN.NNNN adm4 format. Feed that code into get_weather_forecast to retrieve roughly 10 days of 1–3-hourly entries per day: temperature_c, humidity_pct, wind_direction, wind_speed_kmh, cloud_cover_pct, and a weather description in Indonesian. The location object includes the village's time_zone (WIB, WITA, or WIT), coordinates, and full administrative hierarchy. For province-level hazards, list_weather_warnings returns active early-warning bulletins; get_weather_warning fetches the full text, infographic URL, and validity window for a specific province. get_extreme_weather_outlook gives a 3-day outlook broken down by category (moderate-heavy rain, strong wind, etc.) and province.
Marine, Port, and Aviation Weather
list_marine_areas returns roughly 375 named sea areas. get_marine_forecast for any area_code delivers daily entries with wind direction, speed and gust in knots, significant wave height in metres, wave category, and current speed. list_ports covers about 659 ports with coordinates; get_port_forecast adds visibility in km and tidal height in metres on top of the marine fields. For aviation, list_airports lists ~137 Indonesian airports by ICAO code; get_airport_weather returns the latest raw METAR string, the latest raw TAF string, and an hourly aerodrome forecast with visibility_km, temperature_c, dew_point_c, and pressure_hpa. list_high_wave_warnings provides the current national bulletin with wave categories (sedang 1.25–2.5 m through ekstrem >6 m) broken out by coastal region.
Earthquakes and Seismic Bulletins
list_realtime_earthquakes returns the 200 most recent auto-located events with event_id, time_utc, latitude, longitude, depth_km, magnitude, and area. list_earthquakes serves three distinct InaTEWS-reviewed bulletins selected via the category parameter: m5 (magnitude 5.0+ events), felt (events reported by the public, including MMI intensities per locality in the felt field), and tsunami_potential (events that triggered a warning). Each bulletin contains up to 30 events.
Air Quality and Other Environmental Data
list_pm25_stations gives the latest hourly PM2.5 reading and air-quality category from ~27 automatic stations. get_pm25_station returns today's full hourly series for one station. list_air_pollutant_monthly supports four pollutant values — so2, no2, spm, and rain_ph — returning station-level monthly readings with published regulatory thresholds where available. get_surface_ozone delivers daily mean, max, and min ozone statistics for the latest published month. Additional endpoints cover drought warnings, lightning strikes, sunrise/sunset tables, weather-modification (cloud-seeding) operation history filterable by year, tropical cyclone tracks from TCWC Jakarta, and BMKG publications.
The Go API is a managed, monitored endpoint for bmkg.go.id — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bmkg.go.id changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official bmkg.go.id API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build an Indonesia travel app that pulls village-level hourly forecasts via get_weather_forecast for any destination.
- Monitor active province-level storm warnings using list_weather_warnings and get_weather_warning for alerting systems.
- Display realtime seismic activity on a map using list_realtime_earthquakes with magnitude, depth, and epicentre fields.
- Track Indonesian port and sea-area wave heights via get_port_forecast and get_marine_forecast for maritime logistics.
- Integrate raw METAR and TAF strings from get_airport_weather into flight-planning or dispatch tooling for Indonesian airports.
- Analyse PM2.5 trends across BMKG stations using list_pm25_stations and get_pm25_station for environmental reporting.
- Query the cloud-seeding operation history via list_weather_modification_operations filtered by year for research datasets.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.