BMKG Weather Forecast
Geophysics · 1 endpoint
Three-day forecast at three-hour steps for any Indonesian village, with temperature, rainfall, wind, and visibility.
Base URL
Endpoint
Snippet
Request — cURL
v1
curl https://api.diraz.ae/v1/weather/bmkg/forecast \
-H "Authorization: Bearer drz_live_…"Query parameters
- adm4string · required
- Village-level administrative code, e.g. `31.71.03.1001` for Kemayoran, Jakarta Pusat.
- max_ageinteger (seconds) · optional
- Ask for data no older than this. Clamped to the product's own floor, so it can narrow the window but never force a refresh on every call.Default: 300
- limitinteger · optional
- Return only the first N forecast steps.Default: all
Example response
200 OK
v1
{
"data": {
"location": {
"province_code": "31",
"regency_code": "31.71",
"district_code": "31.71.03",
"village_code": "31.71.03.1001",
"province": "DKI Jakarta",
"regency": "Kota Adm. Jakarta Pusat",
"district": "Kemayoran",
"village": "Kemayoran",
"latitude": -6.1647214778,
"longitude": 106.8453837867,
"timezone": "Asia/Jakarta"
},
"forecast": [
{
"at": "2026-08-18T18:00:00.000Z",
"local_time": "2026-08-19 01:00:00",
"temperature_c": 28,
"humidity_percent": 73,
"weather_code": 1,
"weather": "Cerah",
"weather_en": "Sunny",
"cloud_cover_percent": 28,
"precipitation_mm": 0.1,
"wind_speed_kmh": 4.9,
"wind_from": "E",
"wind_degrees": 119,
"visibility_m": 12352
}
]
},
"meta": {
"request_id": "req_7Q2fK4mZ",
"as_of": "2026-08-18T17:05:15.000Z",
"age_seconds": 42,
"next_update_at": "2026-08-18T17:35:15.000Z"
}
}- location
- Full administrative hierarchy, coordinates, and timezone.
- forecast[].at
- Step time, ISO 8601 UTC.
- forecast[].local_time
- The same moment in the location's own timezone.
- forecast[].temperature_c
- Temperature in Celsius.
- forecast[].weather
- Condition in Indonesian; `weather_en` carries English.
- forecast[].precipitation_mm
- Rainfall expected in the period.
- forecast[].wind_speed_kmh
- Wind speed; `wind_from` is the compass origin.
Errors
401 Unauthorized
v1
{
"error": {
"code": "UNAUTHORIZED",
"message": "The API key is invalid, expired, or revoked."
},
"meta": {
"request_id": "req_7Q2fK4mZ"
}
}Every failure carries a stable machine-readable code before the human message, and the same meta.request_id the successful responses carry. Quote it and we can find your exact request.
Errors are free
Nothing on this page is billed. You are charged for a 2xx and nothing else — a rejected key, a bad parameter, a rate limit, or an outage on our side all cost you zero. Retry without watching the meter.
- UNAUTHORIZEDHTTP 401
- Missing, malformed, expired, or revoked API key.
- FORBIDDENHTTP 403
- The key is valid but lacks the scope this product needs.
- VALIDATION_ERRORHTTP 422
- A query parameter is the wrong type or out of range.
- RATE_LIMITEDHTTP 429
- Rate limit exhausted. `Retry-After` says how long to wait.
- SERVICE_UNAVAILABLEHTTP 503
- No data recent enough to serve. Carries `Retry-After`, and is never billed.
- Status
- Operational
- Category
- Geophysics
- Scope
- market:read
- Rate limit
- 120 requests / 60s per key
- Pricing
- 1 credit / request
- BMKG Weather Forecast
1/1 passing
Every response is timestamped. as_of is when the data was published, age_seconds how old that is now, and next_update_at when newer data is expected.
Three shapes to handle:
- Up to date200
The data is inside its published window. The overwhelming majority of requests.
- Delayeddelayed: true
Newer data is late. You still get the most recent there is, flagged so you can decide whether to use it.
- Unavailable503
Nothing recent enough to serve. Carries Retry-After, and is never billed.