Spatial search
The spatial search endpoints use PostGIS GIST indexes to return properties matching a geographic shape. Use these instead ofarea= filters when you have explicit map coordinates — they’re an order of magnitude faster on large queries.
Required scope: spatial:read
Cost: 1 request per call
Search within a viewport (bounding box)
Request
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
north | number | yes | Maximum latitude (top edge) |
south | number | yes | Minimum latitude (bottom edge) |
east | number | yes | Maximum longitude (right edge) |
west | number | yes | Minimum longitude (left edge) |
zoom | integer | no | Map zoom level (1–20). Triggers clustering when zoom < 14 and result count > 100. |
limit | integer | no | Max properties to return (default 100, max 500) |
filters | object | no | Same filter object as the properties endpoint |
Response
clustered is true, the response includes cluster centroids instead of individual properties — zoom in to see them.
Search within a drawn polygon
Request
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
polygon_coordinates | array | yes* | Array of [longitude, latitude] pairs. Min 3, max 20 vertices. First and last point should match (closed ring). |
polygon_wkt | string | yes* | Alternative: WKT-encoded polygon string |
limit | integer | no | Max properties (default 100, max 500) |
filters | object | no | Same filter object as the properties endpoint |
polygon_coordinates or polygon_wkt, not both.
Coordinates are[longitude, latitude](GeoJSON order), not[lat, lon]. This trips up most first-time users.
Search within a radius
radius_miles of a centre point. Equivalent to GET /api/v1/properties?lat=...&lon=...&radius_miles=... but slightly faster for large radii.
Request
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
lat | number | yes | Centre latitude |
lon | number | yes | Centre longitude |
radius_miles | number | yes | Search radius (max 25) |
limit | integer | no | Max properties (default 100, max 500) |
filters | object | no | Same filter object as the properties endpoint |
Response
Same shape as viewport search, plus adistance_meters field on each property: