Discover/Go API
live

Go APIdataonline.bmkg.go.id

Retrieve Indonesian meteorological station metadata and data availability for rainfall, temperature, sunshine, wind, and humidity from the BMKG Data Online portal.

Endpoint health
verified 2d ago
get_kabupaten_kota
get_stations
get_data_availability
get_provinces
get_station_types
5/5 passing latest checkself-healing
Endpoints
5
Updated
26d ago

What is the Go API?

The BMKG Data Online API exposes 5 endpoints covering Indonesian weather station metadata and historical data availability across all 34 provinces. Use get_stations to list stations by province with WMO numbers, coordinates, and names, then call get_data_availability to query per-station availability grids and monthly availability percentages for parameters including rainfall, temperature extremes, sunshine duration, wind direction, and humidity.

Try it

No input parameters required.

api.parse.bot/scraper/a6470584-e907-40ae-a91f-59fe81046398/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/a6470584-e907-40ae-a91f-59fe81046398/get_station_types' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace dataonline-bmkg-go-id-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: BMKG Data Online SDK — Indonesian weather station metadata and data availability."""
from parse_apis.bmkg_data_online_api import BMKG, MetParameter, InvalidParameter

client = BMKG()

# List available station types.
for st in client.stationtypes.list(limit=5):
    print(st.type, st.name)

# List all provinces and print the first few.
for province in client.provinces.list(limit=5):
    print(province.id, province.name)

# Drill into one province's stations.
bali = client.province(id="17")
for station in bali.stations.list(limit=3):
    print(station.station_number, station.station_name, station.latitude, station.longitude)

# Check rainfall data availability for the first station.
station = bali.stations.list(limit=1).first()
if station:
    avail = station.data_availability(parameter=MetParameter.RAINFALL, province_id="17")
    print(avail.title, avail.year_now)
    for month in avail.chart[:3]:
        print(month.year, month.month, month.ketersediaan_data, month.count_data)

# List regencies within Bali.
for regency in bali.regencies.list(limit=3):
    print(regency.id, regency.name, regency.idrefprovince)

# Typed error handling: invalid parameter value.
try:
    manual_station = client.station(station_number="97230")
    manual_station.data_availability(parameter=MetParameter.SUNSHINE, province_id="17")
except InvalidParameter as exc:
    print(f"Invalid parameter: {exc}")

print("exercised: stationtypes.list / provinces.list / stations.list / data_availability / regencies.list")
All endpoints · 5 totalmissing one? ·

Retrieve the list of station types (Jenis Stasiun) available for filtering weather stations. Returns the station type codes and their display names as published in the BMKG portal filter dropdown.

Input

No input parameters required.

Response
{
  "type": "object",
  "fields": {
    "items": "array of station type objects each with id (integer), name (string display label), and type (string code)"
  },
  "sample": {
    "data": {
      "items": [
        {
          "id": 1,
          "name": "UPT",
          "type": "mkg"
        }
      ]
    },
    "status": "success"
  }
}

About the Go API

Station Discovery

Start with get_provinces to retrieve the full list of Indonesian provinces, each with an id and name. Pass a province_id to get_kabupaten_kota to drill down to regency and city level — each entry includes id, idrefprovince, and name. Use get_station_types at any point to get the classification labels (e.g. synoptic, climatological) available for filtering stations by their operational category.

Station Listings

get_stations accepts a province_id and returns an array of station objects. Each station carries a station_number (the WMO number used as the identifier in downstream queries), station_name, station_id, latitude, and longit (longitude). This station_number value is what you pass as station_id to the data availability endpoint.

Data Availability Queries

get_data_availability is the core query endpoint. It requires a station_id (WMO number), province_id, and parameter. Supported parameter values are rainfall, temp_avg, temp_max, temp_min, sunshine, and wind_d. The year input is optional — omitting it returns availability across all recorded years for that station and parameter. The response includes a data array of availability rows, a chart array with monthly ketersediaan_d (availability percentage) values per year and month, and station metadata fields alongside the status string.

Reliability & maintenanceVerified

The Go API is a managed, monitored endpoint for dataonline.bmkg.go.id — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when dataonline.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 dataonline.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.

Last verified
2d ago
Latest check
5/5 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Map all active BMKG synoptic stations per province using station_number, latitude, and longitude from get_stations.
  • Identify years with high rainfall data completeness at a given station using chart ketersediaan_d values from get_data_availability.
  • Build a province-to-regency navigation tree by chaining get_provinces and get_kabupaten_kota.
  • Assess historical temperature data gaps at a specific WMO station before committing to a climate analysis pipeline.
  • Enumerate available station types via get_station_types to filter for climatological versus synoptic observations.
  • Compare multi-year sunshine duration availability across stations in the same province for solar energy feasibility studies.
  • Detect periods of missing wind direction data at a coastal station by querying get_data_availability with parameter wind_d.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does BMKG provide an official developer API for this data?+
BMKG does not publish a documented public REST API for the Data Online portal at dataonline.bmkg.go.id. Official data downloads are available through the portal's web interface, but there is no formally versioned developer API with published authentication and endpoint documentation.
What does get_data_availability actually return, and how are availability figures expressed?+
It returns a data array of availability rows for the requested station and parameter, plus a chart array where each entry contains year, month, and ketersediaan_d — the monthly data availability as a percentage. Station metadata is also included in the response alongside the status field. Omitting the year parameter returns all available years for that station-parameter combination.
Does the API return the actual meteorological measurements, such as daily rainfall totals or temperature readings?+
Not currently. The API covers station metadata (names, WMO numbers, coordinates, province and regency associations) and data availability grids — it does not return the underlying measurement values themselves. You can fork this API on Parse and revise it to add an endpoint that retrieves the actual observation records.
Can I retrieve stations across all provinces in a single call?+
The get_stations endpoint requires a province_id and returns stations for one province at a time. It does not support a nationwide query in a single call. You can fork this API on Parse and revise it to add a batch or all-provinces endpoint that loops over the province list.
How current is the data availability information returned by the API?+
The availability data reflects what is recorded in the BMKG Data Online portal at the time of the request. BMKG updates its portal on its own schedule, and there is no real-time or sub-daily refresh guarantee. Treat the availability percentages as a reflection of the portal's current ingestion state rather than a live instrument feed.
Page content last updated . Spec covers 5 endpoints from dataonline.bmkg.go.id.
Related APIs in WeatherSee all →
forecast.weather.gov API
Get National Weather Service station metadata plus the latest and recent weather observations (temperature, wind, pressure, humidity, and METAR text) for a specified station ID.
wunderground.com API
Access real-time weather conditions, multi-day forecasts, and detailed historical weather data from thousands of personal and airport weather stations worldwide. Search and retrieve current observations, hourly history, and monthly records to power your weather applications and analysis.
hydro.chmi.cz API
Monitor real-time water conditions across 562+ Czech river stations by accessing live water levels, flow rates, temperatures, and flood alerts. Search and track specific stations to get detailed hydrological data and historical time series information from the Czech Hydrometeorological Institute.
meteo.pl API
Get detailed weather forecasts with temperature, pressure, wind, precipitation, and cloud data for any location using multiple weather models (UM, GFS) from Poland's Institute of Meteorology and Water Management. Search locations and access available forecasts to plan ahead with comprehensive meteorological information.
weatherspark.com API
Get historical weather data, current METAR reports, and monthly climate summaries for any location by searching WeatherSpark's comprehensive weather database. Access detailed weather insights including temperature trends, precipitation patterns, and atmospheric conditions to power weather-dependent applications and analysis.
global-warming.org API
Access real-time climate and environmental data including temperature, CO2, methane, nitrous oxide levels, arctic sea ice coverage, and ocean warming metrics. Browse climate news updates and explore detailed information on deforestation trends through an integrated environmental monitoring platform.
bom.gov.au API
Get accurate weather forecasts for Australian cities with temperature, precipitation, UV index, and conditions from the Bureau of Meteorology. Search for any location and retrieve multi-day forecasts to plan your activities with confidence.
metoffice.gov.uk API
Access detailed UK weather forecasts, real-time lightning tracking, and weather warnings from the Met Office. Search locations to retrieve hourly, daily, regional, and long-range predictions, and monitor storm activity with spot forecasts across any geographic area.