Search Bootstrap

Returns the public account details and the first page of search results in one call. Use it to render a search page on the server.

GET/v1/search/bootstrap

Authentication

Public key?key=pk_…

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

Edge cache: no-store

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 Google 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.

cardsLocalestring
optional

Send any non-empty value, for example `en`, to also get `cards`: one display-ready card per listing row. It never filters the search.

Responses

200Success
application/json
applicationobject

Public subset of the account: id, site URL, MLS feeds, the legal `disclaimers` of each feed, logos, and the owner's public contact.

listingsobject

Same body as `GET /v1/search`: `{ data, query }`.

cardsarray

Only with `cardsLocale`: `{ id, feed, path, title, address, price, listPrice, beds, baths, livingArea, status, forSale, photos, coordinates, courtesy, videoUrl }` per row, formatted in English.

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

  • Accepts every filter of `GET /v1/search`.
  • The answer is not edge-cached. Cache it on your side, for example with a short revalidate time.
  • Render each `disclaimers[].text` and each card's `courtesy` line next to the listings. MLS rules require them.
Request
curl --request GET \
--url "https://api.pandaidx.com/v1/search/bootstrap?key={{public_key}}&q=Miami&qtype=city&minbeds=2&limit=3"
Response200 OK
{
"application": {
"_id": "6710a1b2c3d4e5f600000001",
"url": "https://www.example-realty.com",
"dataFeeds": [
"miamire"
],
"dataFeed": "miamire",
"disclaimers": [
{
"feed": "miamire",
"name": "MIAMI Association of REALTORS",
"logoUrl": "https://example.com/logos/miamire.jpeg",
"text": "IDX information is provided exclusively for personal, non-commercial use… Listing Information presented by"
}
],
"settings": {
"logo": "https://example.com/logo.png"
},
"user": {
"_id": "6710a1b2c3d4e5f600000002",
"name": "Jordan Example",
"email": "jordan@example.com",
"phones": [
"305-555-0142"
]
}
},
"listings": {
"data": {
"data": [
{
"_id": "6710a1b2c3d4e5f600000101",
"ListingId": "A11855701",
"OriginatingSystemKey": "miamire",
"ListPrice": 725000,
"BedroomsTotal": 2,
"City": "Miami",
"StandardStatus": "Active"
}
],
"mapData": [],
"total": 1842,
"bounds": false,
"pagination": {
"next": null,
"previous": null
}
},
"query": {
"status": "Active",
"group": "sale",
"offset": 0,
"limit": 24,
"sort": "-listprice",
"type": "Residential",
"label": "Residential"
}
}
}