BYTETOOLS

Singapore Carpark Availability API

Free live carpark availability API for Singapore with no key: lots free and total lots for every HDB car park, refreshed each minute. Tested curl example and real response.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Singapore Carpark Availability API?

The data.gov.sg real-time transport API publishes live carpark availability for public car parks across Singapore with no API key. Each record gives a carpark number, an update timestamp and the number of lots available against total lots, refreshed roughly every minute.

This is one of the few genuinely real-time government feeds anyone can call without registering. The `update_datetime` on each carpark was seconds old when tested, and the whole national picture arrives in a single response — hundreds of car parks, each with free and total lots. For a parking app, a city dashboard or an occupancy study, that removes the entire data acquisition problem.

Two things to know before you build on it. Numbers come back as strings — `"lots_available": "31"` — so compute occupancy after casting, and guard against a total of zero rather than dividing blindly. And the feed identifies car parks by code (`HE12`, `RHM`, `BM29`) with no name or coordinates attached; you resolve those against the separate HDB Carpark Information dataset in the data.gov.sg datastore. Cache that lookup, because it changes rarely while this feed changes constantly.

Quick facts

Base URL
https://api.data.gov.sg/v1/transport
Authentication
No API key on the v1 real-time transport endpoints. Newer v2 endpoints on api-open.data.gov.sg do require a token, so stay on v1 for this feed.
Rate limit
No published limit, but the data only refreshes about once a minute — polling faster than that returns identical payloads.
Pricing
Free under the Singapore Open Data Licence.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Singapore Carpark Availability API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch live carpark availability across Singapore

GET https://api.data.gov.sg/v1/transport/carpark-availability

curl
curl 'https://api.data.gov.sg/v1/transport/carpark-availability'
JavaScript (fetch)
const res = await fetch("https://api.data.gov.sg/v1/transport/carpark-availability");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.data.gov.sg/v1/transport/carpark-availability", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "items": [
    {
      "timestamp": "2026-08-21T15:59:37+08:00",
      "carpark_data": [
        {
          "carpark_number": "HE12",
          "carpark_info": [
            {
              "lot_type": "C",
              "lots_available": "31",
              "total_lots": "105"
            }
          ],
          "update_datetime": "2026-08-21T15:59:06"
        },
        {
          "carpark_info": [
            {
              "total_lots": "583",
              "lot_type": "C",
              "lots_available": "115"
            }
          ],
          "update_datetime": "2026-08-21T15:58:56",
          "carpark_number": "HLM"
        },
        {
          "carpark_number": "RHM",
          "update_datetime": "2026-08-21T15:59:06",
          "carpark_info": [
            {
              "lots_available": "204",
              "total_lots": "329",
              "lot_type": "C"
            }
          ]
        },
        {
          "carpark_info": [
            {
              "lots_available": "0",
              "total_lots": "96",
              "lot_type": "C"
            }
          ],
          "update_datetime": "2026-08-21T15:59:15",
          "carpark_number": "BM29"
        },
        {
          "update_datetime": "2026-08-21T15:59:02",
          "carpark_number": "Q81",
          "carpark_info": [
            {
              "total_lots": "97",
              "lot_type": "C",
              "lots_available": "20"
            }
          ]
        },
        {
          "update_datetime": "2026-08-21T15:59:04",
          "carpark_number": "C20",
          "car

Parameters

ParameterTypeRequiredDescription
date_timequeryOptionalFetch the snapshot at a specific moment, in `YYYY-MM-DDTHH:mm:ss` local time. Omit for the latest. 2026-08-21T15:50:00

Response fields

itemsarray
One element per snapshot; a live call returns exactly one.
items[].timestampstring
When the snapshot was assembled, with a `+08:00` Singapore offset.
items[].carpark_dataarray
One entry per car park in the feed.
carpark_data[].carpark_numberstring
Carpark code such as `HE12`. Resolve to a name and coordinates via the HDB Carpark Information dataset.
carpark_data[].update_datetimestring
When that individual car park last reported, typically seconds old.
carpark_data[].carpark_infoarray
Lot counts, split by lot type.
carpark_info[].lot_typestring
`C` for cars, with separate types for motorcycles and heavy vehicles.
carpark_info[].lots_available / total_lotsstring
Both are strings, not integers. Cast before arithmetic and guard against a zero total.

What you can build with the Singapore Carpark Availability API

  • Show live parking availability in a Singapore navigation app
  • Log occupancy over time to find peak parking demand
  • Alert drivers when a specific car park drops below a threshold
  • Correlate parking occupancy with events or weather
  • Build a city operations dashboard with real-time civic data

Common errors and how to fix them

Occupancy calculates as NaN

Lot counts are strings.

Fix: Cast `lots_available` and `total_lots` to numbers first, and skip records where the total is zero.

Identical data on rapid polls

The feed refreshes about once a minute.

Fix: Poll no more often than every 60 seconds; anything faster wastes requests for no new information.

No name or location for a carpark code

This feed carries codes only.

Fix: Join against the HDB Carpark Information dataset in the datastore and cache the result.

401 on a similar-looking URL

The v2 API on api-open.data.gov.sg requires a token.

Fix: Use the v1 host `api.data.gov.sg` for this feed, which stays key-free.

Singapore Carpark Availability API — frequently asked questions

Is the Singapore carpark API really free with no key?

Yes. The v1 real-time transport endpoints on api.data.gov.sg are open. Only the newer v2 endpoints on api-open.data.gov.sg require a token.

How often does availability update?

Roughly once a minute. Individual `update_datetime` values were seconds old during testing, so the data is genuinely live rather than a periodic batch.

How do I find where a car park actually is?

The feed gives codes only. Look them up in the HDB Carpark Information dataset through the data.gov.sg datastore, which supplies addresses and coordinates, and cache that mapping since it rarely changes.

Can I get historical availability?

Partially — the `date_time` parameter retrieves a past snapshot, but there is no bulk historical export. If you need a long series, poll and store it yourself.

Tools that pair with this API

Singapore Carpark Availability is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.