List Condos

Returns the condo directory: an area picker, building cards, and the landing rows with the first buildings per area. Filter by area, price, size, features or map viewport.

GET/v1/condos

Authentication

Public key?key=pk_…

Public key in the `key` query parameter. No OAuth, no secret.

Edge cache: 5 s

Query Parameters

keystring
required

The site's public key (pk_…). It selects the account. Safe to ship to the browser.

areastring
optional

One area, as a slug (`miami-beach`) or a name. Ignored when `city` is sent.

citystring
optional

Comma-separated city names, matched as OR. Up to 20 values.

qstring
optional

Building name. Results are ranked by relevance. Trimmed to 120 characters.

statusenum
optional

Only buildings with live listings of this kind. It also switches the price filter and the price sorts to the rent ranges when set to `forRent`.

forSaleforRent
minPricenumber
optional

USD. The building's lowest asking price must be at least this value.

maxPricenumber
optional

USD. The building's highest asking price must be at most this value.

minBedsnumber
optional

The building's smallest unit must have at least this many bedrooms.

maxBedsnumber
optional

The building's largest unit must have at most this many bedrooms.

minBathsnumber
optional

The building's smallest unit must have at least this many bathrooms.

maxBathsnumber
optional

The building's largest unit must have at most this many bathrooms.

minSqftnumber
optional

Minimum living area in square feet.

maxSqftnumber
optional

Maximum living area in square feet.

typesstring
optional

Comma-separated property subtypes, such as `Condominium,Townhouse`. Matched as OR.

featuresstring
optional

Comma-separated building features. A building must have all of them. Allowed values: `petFriendly`, `waterfront`, `gated`, `seniorCommunity`, `community`.

minYearnumber
optional

Earliest year built.

maxYearnumber
optional

Latest year built.

minStoriesnumber
optional

Minimum number of stories.

maxStoriesnumber
optional

Maximum number of stories.

minUnitsnumber
optional

Minimum number of units.

maxUnitsnumber
optional

Maximum number of units.

bboxstring
optional

Map viewport as `south,west,north,east` in decimal degrees. South must be below north and west below east.

sortenum
optional

Sort order. Numeric sorts drop buildings without that value. A `q` search always ranks by relevance.

Default:buildingName
buildingName-buildingNamenewestminPrice-minPricemaxPrice-maxPriceminBedsminBathsyearBuilt-yearBuilt
pinsstring
optional

Send `1` to also return `pins`: every matching building that has coordinates, up to 500, with no pagination. Any other value returns `pins: null`.

pagenumber
optional

Page number, starting at 1. Values above 500 are clamped to 500.

Default:1
pageSizenumber
optional

Items per page. Values above 60 are clamped to 60.

Default:24

Responses

200Success
application/json
areasarray

Every area with at least one building. Use it as an area picker.

filtersobject

Every filter as applied: `area`, `cities`, `q`, `status`, `minPrice`, `maxPrice`, `minBeds`, `maxBeds`, `minBaths`, `maxBaths`, `minSqft`, `maxSqft`, `types`, `features`, `minYear`, `maxYear`, `minStories`, `maxStories`, `minUnits`, `maxUnits`, `bbox` and `sort`. Unset values are `null` or `[]`. The example shows a subset.

groupsarray

Landing rows with the first buildings of each area. Only filled on page 1 with no filter and the default sort, otherwise `[]`. Each row is `{ area, slug, totalCount, buildings }`.

buildingsarray

Building cards for the requested page.

pinsarray | null

Map pins when `pins=1`: `{ id, slug, kind, name, path, location, image, price }`. Otherwise `null`.

totalnumber

Buildings matching the filters.

pagenumber
pageSizenumber
totalPagesnumber

Errors

400`status` is not `forSale` or `forRent`, `sort` is unknown, `features` has an unknown value, `bbox` is malformed, or a numeric filter is not a non-negative integer.
401Missing or invalid public key.
403The account has no active subscription. The body also carries `code: "TENANT_INACTIVE"`.
500Unexpected server error.

Notes

  • Building data is shared Panda data, not per account. Only listings inside a building come from your MLS feeds.
  • Open a card with its `slug` in Get Building, or in Get New Development when `kind` is `newdevelopment`.
  • Amenity and view filters of the website are not available on this endpoint. Use the directory buildings endpoint for them.
Request
curl --request GET \
--url "https://api.pandaidx.com/v1/condos?key={{public_key}}&city=Miami"
Response200 OK
{
"areas": [
{
"id": "62d07150ca8676650f0eaf90",
"query": "MIAMI BEACH",
"name": "Miami Beach",
"slug": "miami-beach",
"path": "/area/miami-beach",
"image": null,
"state": "FL",
"buildingCount": 214
}
],
"filters": {
"area": null,
"cities": [
"Miami"
],
"q": null,
"status": null,
"minPrice": null,
"sort": "buildingName"
},
"groups": [],
"buildings": [
{
"id": "6a0b2f4e8c1d3a0012ab34c1",
"slug": "ocean-drive-tower--miami-beach",
"kind": "building",
"name": "Ocean Drive Tower",
"path": "/condos/ocean-drive-tower--miami-beach",
"city": "Miami Beach",
"image": "https://media.pandaidx.com/buildings/ocean-drive-tower/cover.jpg",
"price": {
"from": 485000,
"to": 2250000
},
"beds": {
"from": 0,
"to": 3
},
"activeListings": {
"forSale": 12,
"forRent": 9,
"pending": 2,
"sold": 5
}
}
],
"pins": null,
"total": 96,
"page": 1,
"pageSize": 24,
"totalPages": 4
}