location | STRING | Required | Free-text Singapore location: `Orchard`, `Tampines`, `D9`, `Ang Mo Kio MRT`, a condo project name, street or address. |
query_type | STRING | Optional | Advanced — skip the autocomplete hop by passing a suggestion's `type` straight from [/autocomplete](https://realtyapi.io/dashboard?tab=playground&api=99co&endpoint=autocomplete): `district`, `zone`, `subzone`, `region`, `school`, `subway_station`, `cluster`, `street`, `address`, `city`. Use together with `query_ids`; when set, `location` is ignored. |
query_ids | STRING | Optional | Advanced — the autocomplete suggestion's `id`, e.g. `dtdistrict09` (D9 – Orchard / River Valley) or `sg-mrt-orchard`. Requires `query_type`. |
query_coords | STRING | Optional | Advanced — `lat,lng` of the autocomplete suggestion. Needed for point-type scopes (`subway_station`, `cluster`, `street`, `address`), e.g. `1.3041,103.8322`. |
radius_max | NUMBER | Optional | Advanced — search radius in metres around `query_coords`. |
sortOrder | ENUM | Optional | 99.co supports only the `distance` sort (synonym: `nearest`) on this endpoint, and it needs a point location to measure from. Any other value falls back to the default relevance sort. Values: distance, nearest |
searchType | ENUM | Optional | Listing type. Default: `For_Sale`. 99.co Singapore has no Sold bucket on this endpoint. Values: For_Sale, For_Rent |
page | NUMBER | Optional | Page number. Default: `1`. |
resultCount | NUMBER | Optional | Results per page. Default: `30`, maximum: `60`. |
propertySegment | ENUM | Optional | Market segment. Default: `residential`. Switching to `commercial` changes the `propertyType` vocabulary and unlocks the commercial-only filters (`leaseTerm`, `fittings`, `tenanted`). Values: residential, commercial |
propertyType | ENUM | Optional | Property category bucket. Default: `all`.
- Residential: `hdb`, `condo`, `landed` (friendly aliases resolve too: `apartment` → condo, `house`/`bungalow` → landed, `flat` → hdb)
- Commercial (only when `propertySegment=commercial`): `retail`, `office`, `industrial`, `land` (`shop`/`shophouse` → retail, `factory`/`warehouse` → industrial) Values: all, hdb, condo, landed, retail, office, industrial, land |
condoSubType | STRING | Optional | Condo sub-types, comma-separated multi-select. Values: `condo`, `walkup`, `apartment`, `executive_condo` (or `ec`), `serviced_apartment`. Only applies when `propertyType=condo`. Example: `executive_condo,condo`. |
landedSubType | STRING | Optional | Landed-house sub-types, comma-separated multi-select. Values: `terrace`, `corner_terrace`, `semi_detached`, `bungalow`, `good_class_bungalow` (or `gcb`), `shophouse`, `conservation_house`, `townhouse`, `cluster_house`, `land`. Only applies when `propertyType=landed`. |
hdbSubType | STRING | Optional | HDB flat models in 99.co's raw token form, comma-separated (e.g. `hdb_3_a`, `hdb_4_a`, `hdb_executive`). Only applies when `propertyType=hdb`. |
priceRange | STRING | Optional | **Possible Inputs:**
- For Minimum Price: `min:500000`
- For Maximum Price: `max:1500000`
- For a Price Range: `min:500000,max:1500000`
Prices are in SGD. When `searchType=For_Rent` this is monthly rent. |
floorAreaRange | STRING | Optional | Interior floor area range in square feet.
- For Minimum: `min:700`
- For Maximum: `max:1500`
- For a Range: `min:700,max:1500` |
landSizeRange | STRING | Optional | Land size range in square feet (landed homes and land plots).
- For Minimum: `min:2000`
- For Maximum: `max:10000`
- For a Range: `min:2000,max:10000` |
completionYearRange | STRING | Optional | Year-of-completion (TOP) range.
- Completed after: `min:2010`
- Completed before: `max:2024`
- For a Range: `min:2010,max:2024` |
bedrooms | STRING | Optional | Bedroom counts, comma-separated multi-select of exact values: `3` or `2,3,4` (use `any` to reset). Maps to 99.co's `rooms` filter. |
bathrooms | STRING | Optional | Bathroom counts, comma-separated multi-select of exact values: `2` or `2,3`. |
rentalType | ENUM | Optional | `For_Rent` only — `unit` = whole unit, `room` = room rental. Default: `all`. Values: all, unit, room |
roomType | ENUM | Optional | Room rentals only (`rentalType=room`) — `master` or `common` room. Default: `any`. Values: any, master, common |
propertyStatus | STRING | Optional | Sale-listing status, comma-separated multi-select: `resale`, `new_launch`, `subsale`. Example: `new_launch,subsale`. |
floorLevel | STRING | Optional | Floor level, comma-separated multi-select: `ground`, `low`, `mid`, `high`, `top`, `penthouse`. |
furnishing | STRING | Optional | Furnishing, comma-separated multi-select: `unfurnished`, `partial`, `fully`. |
tenure | STRING | Optional | Tenure, comma-separated multi-select: `freehold`, `leasehold` (the 99–103-year bucket; `99` and `103` work too), `999`, `9999`, `110`, `60`, `30`. |
buildingAge | ENUM | Optional | Maximum building age in years. 99.co supports `5`, `10` or `20` only. Values: 5, 10, 20 |
views | STRING | Optional | View tags, comma-separated (forwarded to 99.co's `composite_views`), e.g. `sea_view,city_view`. |
amenities | STRING | Optional | Feature/amenity tags, comma-separated (forwarded to 99.co's `features_and_amenities`), e.g. `swimming_pool,gym`. |
availability | STRING | Optional | `For_Rent` only — period of availability, e.g. `immediate`. |
keywords | STRING | Optional | Free-text keyword filter, e.g. a project name like `The Cairnhill`. |
hasFloorPlan | BOOLEAN | Optional | Set `true` to return only listings that include a floor plan. |
sameAgencyOnly | BOOLEAN | Optional | Set `true` to return only listings from the same agency. |
leaseTerm | ENUM | Optional | Commercial only (`propertySegment=commercial`) — lease term. Default: `any`. Values: any, short, flexible, one_year, two_years, three_years, four_years, five_or_more_years |
fittings | ENUM | Optional | Commercial only — fit-out state of the unit. Default: `any`. Values: any, fitted, partially_fitted, bare |
tenanted | ENUM | Optional | Commercial only — whether the unit is currently tenanted. Default: `any`. Values: any, true, false |