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.
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 'https://api.data.gov.sg/v1/transport/carpark-availability'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);import requests
res = requests.get("https://api.data.gov.sg/v1/transport/carpark-availability", timeout=20)
res.raise_for_status()
print(res.json()){
"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",
"carParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date_time | query | Optional | Fetch 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
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
Timestamp Converter
Convert timestamps to human-readable dates and dates back to timestamps. Auto-detects seconds vs milliseconds, shows local, UTC and ISO 8601 formats.
Time Zone Converter
Convert any date and time between world time zones. See UTC offsets, daylight saving handled automatically, and compare multiple zones at once.
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.