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

ActionWhat it does
Get 24-hour forecastGet 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 qualityGet 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 outlookGet NEA's weather outlook for Singapore for the next four days: the forecast, temperature and humidity ranges and wind for each day.
Get station readingsGet 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 forecastGet 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 indexGet 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

Atatdate 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

Atatdate 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

Atatdate 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

MeasuremeasuretextRequired
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.
Stationstationtext
Keep only stations whose name or ID contains this, e.g. Changi or S24. Leave it blank for every station.
Atatdate 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

Areaareatext
Keep only areas whose name contains this, e.g. Bedok. Leave it blank for all 47 areas.
Atatdate 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

Atatdate 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
}

On this page