Singapore Weather (data.gov.sg)
App · 6 actions
Live weather for Singapore from NEA via data.gov.sg: readings from every weather station (temperature, rainfall, humidity and wind), the two-hour, 24-hour and four-day forecasts, the UV index and air quality (PSI and PM2.5) by region. No account or API key required.
Actions
| Action | What it does |
|---|---|
| Get 24-hour forecast | Get NEA's forecast for Singapore for the next 24 hours: the general outlook, temperature and humidity ranges, wind, and the forecast for the north, south, east, west and centre of the island in six-hour periods. |
| Get air quality | Get Singapore's air quality for the north, south, east, west and centre of the island: the 24-hour PSI, hourly and 24-hour PM2.5, PM10, ozone, carbon monoxide, sulphur dioxide and nitrogen dioxide, with NEA's health band for the highest PSI. |
| Get four-day outlook | Get NEA's weather outlook for Singapore for the next four days: the forecast, temperature and humidity ranges and wind for each day. |
| Get station readings | Get the latest reading from each of Singapore's weather stations for one measure: air temperature, rainfall, humidity, wind speed or wind direction, with each station's name and position and the island-wide average, lowest and highest. |
| Get two-hour forecast | Get NEA's two-hour weather forecast for each of Singapore's 47 forecast areas, such as Bedok or Jurong West, with the period it covers. |
| Get UV index | Get Singapore's UV index: the latest hourly value with its category (Low, Moderate, High, Very high or Extreme) and every hour so far today. |
Get 24-hour forecast
Get NEA's forecast for Singapore for the next 24 hours: the general outlook, temperature and humidity ranges, wind, and the forecast for the north, south, east, west and centre of the island in six-hour periods. No API key required.
Inputs
- At
atdate and time - A past moment to look up instead of the latest data, in Singapore time. Leave it blank for the latest. A day on its own means the end of that day.
Outputs
forecasttext- The general forecast, e.g. 'Thundery Showers'.
forecast_codetext- NEA's code for it, e.g. 'TL'.
humidity_highnumber- The highest relative humidity, in %.
humidity_lownumber- The lowest relative humidity, in %.
issued_attext- When NEA issued this data, in Singapore time (ISO 8601).
periodslist- The forecast for each region in six-hour periods, earliest first.
temperature_highnumber- The highest temperature, in °C.
temperature_lownumber- The lowest temperature, in °C.
valid_fromtext- When the forecast starts (ISO 8601).
valid_periodtext- The period in words, e.g. '0 AM 17 Oct to 0 AM 18 Oct'.
valid_totext- When the forecast ends (ISO 8601).
wind_directiontext- Where the wind comes from, e.g. 'SSE'.
wind_speed_highnumber- The highest wind speed, in km/h.
wind_speed_lownumber- The lowest wind speed, in km/h.
Example output
{
"forecast": "Thundery Showers",
"forecast_code": "TL",
"humidity_high": 95.0,
"humidity_low": 60.0,
"issued_at": "2026-10-16T23:40:46+08:00",
"periods": [
{
"central": "Cloudy",
"east": "Cloudy",
"end": "2026-10-17T06:00:00+08:00",
"north": "Cloudy",
"period": "Midnight to 6 am 17 Oct",
"south": "Cloudy",
"start": "2026-10-17T00:00:00+08:00",
"west": "Cloudy"
},
{
"central": "Cloudy",
"east": "Thundery Showers",
"end": "2026-10-17T18:00:00+08:00",
"north": "Thundery Showers",
"period": "Midday to 6 pm 17 Oct",
"south": "Cloudy",
"start": "2026-10-17T12:00:00+08:00",
"west": "Thundery Showers"
}
],
"temperature_high": 34.0,
"temperature_low": 25.0,
"valid_from": "2026-10-17T00:00:00+08:00",
"valid_period": "0 AM 17 Oct to 0 AM 18 Oct",
"valid_to": "2026-10-18T00:00:00+08:00",
"wind_direction": "SSE",
"wind_speed_high": 15.0,
"wind_speed_low": 5.0
}Get air quality
Get Singapore's air quality for the north, south, east, west and centre of the island: the 24-hour PSI, hourly and 24-hour PM2.5, PM10, ozone, carbon monoxide, sulphur dioxide and nitrogen dioxide, with NEA's health band for the highest PSI. Useful for haze alerts. No API key required.
Inputs
- At
atdate and time - A past moment to look up instead of the latest data, in Singapore time. Leave it blank for the latest. A day on its own means the end of that day.
Outputs
highest_psinumber- The highest 24-hour PSI of any region.
issued_attext- When NEA issued this data, in Singapore time (ISO 8601).
psi_bandtext- NEA's health band for the highest PSI: 'Good' (0-50), 'Moderate' (51-100), 'Unhealthy' (101-200), 'Very unhealthy' (201-300) or 'Hazardous' (above 300).
regionslist- One record per region: north, south, east, west and central.
summarytext- One readable line, e.g. '24-hour PSI 48-55 (Moderate)'.
timestamptext- The hour the readings are for (ISO 8601).
Example output
{
"highest_psi": 148,
"issued_at": "2026-10-17T02:30:34+08:00",
"psi_band": "Unhealthy",
"regions": [
{
"co_8h_max": 2,
"latitude": 1.41803,
"longitude": 103.82,
"no2_1h_max": 24,
"o3_8h_max": 51,
"pm10_24h": 123,
"pm25_1h": 73,
"pm25_24h": 101,
"psi_24h": 148,
"region": "north",
"so2_24h": 6
}
],
"summary": "24-hour PSI 148 (Unhealthy)",
"timestamp": "2026-10-17T02:00:00+08:00"
}Get four-day outlook
Get NEA's weather outlook for Singapore for the next four days: the forecast, temperature and humidity ranges and wind for each day. No API key required.
Inputs
- At
atdate and time - A past moment to look up instead of the latest data, in Singapore time. Leave it blank for the latest. A day on its own means the end of that day.
Outputs
countnumber- How many days were returned.
dayslist- One forecast per day, earliest first.
issued_attext- When NEA issued this data, in Singapore time (ISO 8601).
Example output
{
"count": 1,
"days": [
{
"date": "2026-10-17",
"day": "Saturday",
"forecast": "Thundery Showers",
"forecast_code": "TL",
"humidity_high": 95.0,
"humidity_low": 60.0,
"summary": "Afternoon thundery showers",
"temperature_high": 34.0,
"temperature_low": 25.0,
"wind_direction": "SSE",
"wind_speed_high": 15.0,
"wind_speed_low": 5.0
}
],
"issued_at": "2026-10-16T16:50:46+08:00"
}Get station readings
Get the latest reading from each of Singapore's weather stations for one measure: air temperature, rainfall, humidity, wind speed or wind direction, with each station's name and position and the island-wide average, lowest and highest. Narrow it to one station by name or ID. No API key required.
Inputs
- Measure
measuretextRequired - What to read from the stations.One of:
air_temperature(Air temperature (°C)),rainfall(Rainfall in the last 5 minutes (mm)),relative_humidity(Relative humidity (%)),wind_speed(Wind speed (knots)),wind_direction(Wind direction (degrees)). Default:air_temperature. - Station
stationtext - Keep only stations whose name or ID contains this, e.g. Changi or S24. Leave it blank for every station.
- At
atdate and time - A past moment to look up instead of the latest data, in Singapore time. Leave it blank for the latest. A day on its own means the end of that day.
Outputs
averagenumber- The average across the stations returned. Empty when none reported.
countnumber- How many stations reported.
maximumnumber- The highest reading returned.
measuretext- The measure read, e.g. 'air_temperature'.
minimumnumber- The lowest reading returned.
readingslist- One reading per station, by station name.
timestamptext- When the readings were taken, in Singapore time (ISO 8601).
unittext- The unit of every value: '°C', 'mm' (rain in the last 5 minutes), '%', 'knots' or 'degrees' (where the wind comes from).
Example output
{
"average": 28.0,
"count": 2,
"maximum": 28.4,
"measure": "air_temperature",
"minimum": 27.6,
"readings": [
{
"latitude": 1.3793,
"longitude": 103.85,
"station_id": "S109",
"station_name": "Ang Mo Kio Avenue 5",
"value": 28.4
},
{
"latitude": 1.2504,
"longitude": 103.8275,
"station_id": "S60",
"station_name": "Artillery Avenue (Sentosa)",
"value": 27.6
}
],
"timestamp": "2026-10-17T02:23:00+08:00",
"unit": "\u00b0C"
}Get two-hour forecast
Get NEA's two-hour weather forecast for each of Singapore's 47 forecast areas, such as Bedok or Jurong West, with the period it covers. Narrow it to one area by name. No API key required.
Inputs
- Area
areatext - Keep only areas whose name contains this, e.g. Bedok. Leave it blank for all 47 areas.
- At
atdate and time - A past moment to look up instead of the latest data, in Singapore time. Leave it blank for the latest. A day on its own means the end of that day.
Outputs
countnumber- How many areas were returned.
forecastslist- One forecast per area, in NEA's order.
issued_attext- When NEA issued this data, in Singapore time (ISO 8601).
valid_fromtext- When the forecast period starts (ISO 8601).
valid_periodtext- The period in words, e.g. '2.00 am to 4.00 am'.
valid_totext- When the forecast period ends (ISO 8601).
Example output
{
"count": 1,
"forecasts": [
{
"area": "Bedok",
"forecast": "Cloudy",
"latitude": 1.321,
"longitude": 103.924
}
],
"issued_at": "2026-10-17T02:07:28+08:00",
"valid_from": "2026-10-17T02:00:00+08:00",
"valid_period": "2.00 am to 4.00 am",
"valid_to": "2026-10-17T04:00:00+08:00"
}Get UV index
Get Singapore's UV index: the latest hourly value with its category (Low, Moderate, High, Very high or Extreme) and every hour so far today. No API key required.
Inputs
- At
atdate and time - A past moment to look up instead of the latest data, in Singapore time. Leave it blank for the latest. A day on its own means the end of that day.
Outputs
categorytext- Its category: 'Low' (0-2), 'Moderate' (3-5), 'High' (6-7), 'Very high' (8-10) or 'Extreme' (11 and up).
countnumber- How many hourly values were returned.
hourtext- The hour the latest value is for (ISO 8601).
hourlylist- Every hourly value so far, earliest first.
issued_attext- When NEA issued this data, in Singapore time (ISO 8601).
uv_indexnumber- The latest hourly UV index. Empty when NEA has none.
Example output
{
"category": "High",
"count": 2,
"hour": "2026-10-16T13:00:00+08:00",
"hourly": [
{
"hour": "2026-10-16T12:00:00+08:00",
"value": 5.0
},
{
"hour": "2026-10-16T13:00:00+08:00",
"value": 6.0
}
],
"issued_at": "2026-10-16T13:11:06+08:00",
"uv_index": 6.0
}