Search Listings

Searches the MLS listings the account may show and returns one page of rows, a sample of map pins and the total. Filters go in the query string.

GET/v1/search

Authentication

Public key?key=pk_…

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

Edge cache: public, s-maxage=3600, stale-while-revalidate=86400

Query Parameters

keystring
required

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

qstring
optional

Place to search: a city, ZIP code, building or development name, address or MLS number. Always send qtype with it.

qtypeenum
optional

What q is. city and postalCode search the area boundary, building and newdevelopment search a building, mlsNumber finds one listing, unit searches a unit number. adddress (sic) is the address type that autocomplete returns.

citypostalCodebuildingnewdevelopmentaddressadddressmlsNumberunitsearch
streetNumberstring
optional

Street number, exact match.

streetNamestring
optional

Street name, for example Brickell Bay Dr.

postalCodestring
optional

ZIP code.

unitNumberstring
optional

Unit number.

buildingNamestring
optional

Phrase match on the building name and the subdivision name.

pointsstring (pipe-separated)
optional

Map area as a polygon: lat,lng pairs separated by |, at least three different points. The polygon closes itself. Example: 25.9,-80.3|25.9,-80.1|25.7,-80.1|25.7,-80.3. Invalid points answer 400.

mapRepositionboolean
optional

Send 1 without points to search the whole MLS feed instead of its default map area.

statusstring
optional

Listing status. Active excludes Active Under Contract. Other MLS status strings are matched as written.

Default:Active
ActivePendingActive Under ContractClosed
groupenum
optional

sale or rent. When type is not sent, rent searches Residential Lease.

Default:sale
salerent
typestring
optional

MLS property type. Defaults to Residential, or Residential Lease when group=rent.

Default:Residential
ResidentialResidential LeaseResidential IncomeCommercial SaleCommercial LeaseLandLand/Boat DocksBusiness Opportunity
subtypesstring (CSV)
optional

Property subtypes, comma-separated. Examples: Single Family Residence, Condominium, Townhouse, Villa, Apartment.

minpricenumber
optional

Minimum list price in USD (monthly rent for rentals). Range filters take whole numbers, and min and max are swapped if min is larger.

maxpricenumber
optional

Maximum list price in USD.

minbedsnumber
optional

Minimum bedrooms. Use 0 for studios.

maxbedsnumber
optional

Maximum bedrooms.

minbathsnumber
optional

Minimum bathrooms (whole bathrooms).

maxbathsnumber
optional

Maximum bathrooms.

minareanumber
optional

Minimum living area in square feet. Use minarea, not minsqft: the minsqft and maxsqft params are accepted but do not filter.

maxareanumber
optional

Maximum living area in square feet.

minlotnumber
optional

Minimum lot size in square feet.

maxlotnumber
optional

Maximum lot size in square feet.

minyearnumber
optional

Minimum year built.

maxyearnumber
optional

Maximum year built.

minhoanumber
optional

Minimum association (HOA) fee in USD.

maxhoanumber
optional

Maximum association (HOA) fee in USD.

minGarageSpacesnumber
optional

Minimum garage spaces.

maxGarageSpacesnumber
optional

Maximum garage spaces.

maxDaysOnPandanumber
optional

Only listings entered in the last N days.

poolboolean
optional

Send 1 or true for a private pool.

waterboolean
optional

Send 1 or true for waterfront properties.

waterfrontFeaturesstring (CSV)
optional

Waterfront features, comma-separated. A listing matches when it has any of them.

BayCanalCanal FrontBridgeNo Fixed BridgesIntracoastalIntracoastal FrontLakeOcean AccessOcean FrontPointRiverSeawall
gatedboolean
optional

Send 1 or true for gated communities.

tennisCourtboolean
optional

Send 1 or true for a tennis court.

golfCourtboolean
optional

Send 1 or true for properties on a golf course.

boatDockboolean
optional

Send 1 or true for communities with boating.

penthouseboolean
optional

Send 1 or true for penthouses.

seniorCommunityenum
optional

1 shows only senior communities. exclude hides them.

1exclude
seasonalRentalsboolean
optional

Send 1 or true for short-term leases.

petsAllowedboolean
optional

Send 1 or true for rentals that allow pets.

furnishedboolean
optional

Send 1 or true for furnished rentals.

shortSalesboolean
optional

Send 1 or true for short sales.

agentstring
optional

MLS agent ID of the listing agent. IDs with or without the MLS prefix match.

brokersstring
optional

MLS office ID of the listing office.

sortenum
optional

Sort order. -listdate sorts by close date when status=Closed.

Default:-listprice
-listpricelistprice-listdatebedsbaths
offsetnumber
optional

Number of rows to skip.

Default:0
limitnumber
optional

Rows per page. Values above 100 are capped at 100.

Default:24
cursorstring
optional

The cursor from data.pagination, sent together with that page's offset and the same filters. Faster than a deep offset. Expires after 5 minutes.

Responses

200Success
application/json
dataobject

The page of results. Absent when the search cannot run.

queryobject

The parsed search the server ran, with defaults filled in (status, group, limit, sort, type, label, and the default map points).

Errors

400Invalid map area (points), or an address in q that could not be resolved.
401Missing or invalid public key.
403The account is not active. The body also has code: "TENANT_INACTIVE".
404The key's account does not exist or has no MLS data feed.
500Internal Server Error.

Notes

  • Without q or points, results stay inside the default map area of the account's MLS feed. Send mapReposition=1 to search the whole feed.
  • Always send qtype with q. If q matches no known area, building or MLS number and has no qtype, the place filter is skipped and the default search runs.
  • Page with offset and limit (max 100), or send the cursor and offset from data.pagination. Use POST /v1/search for long queries such as polygons.
  • Rows follow the MLS display rules: street fields are removed when InternetAddressDisplayYN is false. Show the feed disclaimers from /v1/search/bootstrap next to listings.
Request
curl --request GET \
--url "https://api.pandaidx.com/v1/search?key={{public_key}}&q=Miami&qtype=city&minbeds=2&limit=3"
Response200 OK
{
"data": {
"data": [
{
"_id": "6710a1b2c3d4e5f600000101",
"ListingId": "A11855701",
"OriginatingSystemKey": "miamire",
"ListPrice": 725000,
"LivingArea": 1180,
"BedroomsTotal": 2,
"BathroomsTotalInteger": 2,
"StreetNumber": "1200",
"StreetName": "Brickell Bay Dr",
"UnitNumber": "2504",
"City": "Miami",
"StateOrProvince": "FL",
"PostalCode": "33131",
"StandardStatus": "Active",
"PropertyType": "Residential",
"PropertySubType": "Condominium",
"ListOfficeName": "Example Realty Group",
"image": "https://example.com/photos/A11855701/1.jpg",
"Location": {
"coordinates": [
-80.1892,
25.7651
]
}
}
],
"mapData": [
{
"_id": "6710a1b2c3d4e5f600000101",
"ListingId": "A11855701",
"OriginatingSystemKey": "miamire",
"ListPrice": 725000,
"Location": {
"coordinates": [
-80.1892,
25.7651
]
}
}
],
"total": 1842,
"bounds": false,
"pagination": {
"next": {
"offset": 24,
"cursor": "{\"token\":\"…\",\"direction\":\"after\",\"key\":\"…\",\"offset\":24,\"pageSize\":24,\"expiresAt\":1760400300000}"
},
"previous": null
}
},
"query": {
"status": "Active",
"group": "sale",
"offset": 0,
"limit": 24,
"mapLimit": 250,
"sort": "-listprice",
"points": false,
"mapReposition": true,
"minbeds": 2,
"type": "Residential",
"label": "Residential"
}
}