Searches the customer's properties applying filters and returns the matching IDs along with aggregations (number of properties by operation, type, zone, currency and price range). It is designed for the chat's guided flow: it allows showing counts like "Sale (150) · Rent (75)" without spending AI tokens, and without fetching the full detail of each property.
customerId is resolved from the access token. To get the detail of the properties found, take the propertyIds from the response and query GET /api/action/mapaprop-chat-ai-v1/properties (joining the IDs with a comma).
Even though it is a search with filters, this endpoint is GET, not POST: the filters are sent as query params, not as a body.
| Resource information | |
|---|---|
| Authentication | Required (API Token, Bearer) |
| HTTP Method | GET |
| Response | JSON |
| Version | 1 |
Resource URL
https://mapaprop.app/api/action/mapaprop-chat-ai-v1/search
Parameters
| Key | Type | Required | Description |
|---|---|---|---|
| operation | int | no | Operation ID. Constants |
| type | int | no | Property type ID. Constants |
| zone1 | int | no | State/province ID |
| zone2 | int | no | County ID |
| zone3 | int | no | City/neighborhood ID |
| priceMin | number | no | Minimum price |
| priceMax | number | no | Maximum price |
| currency | string | no | Currency code to filter by (e.g. USD) |
Only published properties of the authenticated account are searched. The search always caps at a maximum of 100 results internally (it is not pageable from this endpoint; to page through results, use the propertyIds returned together with properties).
Sample code
GET /api/action/mapaprop-chat-ai-v1/search?operation=1&type=1&zone1=1&priceMin=50000&priceMax=300000¤cy=USD HTTP/1.1
Host: mapaprop.app
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
Authorization: Bearer {access_token}
Response
| Object | Field | Type | Required | Description |
|---|---|---|---|---|
| Response | total | int | yes | Total number of properties matching the filters |
| propertyIds | Array of int | yes | IDs of the matching properties (up to 100) | |
| aggregations | Aggregations | yes | Breakdown of the results | |
| Aggregations | operations | Array of OperationCount | yes | Number of properties by operation, within the filtered result |
| types | Array of TypeCount | yes | Number of properties by type, within the filtered result | |
| states | Array of ZoneCount | yes | Number of properties by state/province (zone1) | |
| counties | Array of ZoneCount | yes | Number of properties by county (zone2) | |
| cities | Array of ZoneCount | yes | Number of properties by city/neighborhood (zone3) | |
| currencies | Array of CurrencyStats | yes | Number and price statistics by currency | |
| priceRanges | Array of PriceRange | no | Price ranges with number of properties by currency (only if there is data) | |
| OperationCount | id | int | yes | Operation ID |
| description | string | yes | Translated description of the operation | |
| count | int | yes | Number of properties with that operation | |
| TypeCount | id | int | yes | Property type ID |
| description | string | yes | Translated description of the type | |
| count | int | yes | Number of properties with that type | |
| ZoneCount | id | int | yes | Zone ID |
| count | int | yes | Number of properties in that zone | |
| CurrencyStats | currency | string | yes | Currency code |
| count | int | yes | Number of properties in that currency | |
| priceMin | int | no | Minimum price in that currency | |
| priceMax | int | no | Maximum price in that currency | |
| priceAvg | int | no | Average price in that currency | |
| PriceRange | currency | string | yes | Currency of the range |
| label | string | yes | Label of the range | |
| count | int | yes | Number of properties in that range | |
| from | int | no | Lower bound (absent in the first range) | |
| to | int | no | Upper bound (absent in the last range) |
Sample response
{
"total": 18,
"propertyIds": [2600144, 2600145, 2600150, 2600151],
"aggregations": {
"operations": [
{ "id": 1, "description": "Venta", "count": 18 }
],
"types": [
{ "id": 1, "description": "Departamento", "count": 12 },
{ "id": 2, "description": "Casa", "count": 6 }
],
"states": [
{ "id": 1, "count": 18 }
],
"counties": [
{ "id": 46, "count": 10 }
],
"cities": [],
"currencies": [
{ "currency": "USD", "count": 18, "priceMin": 55000, "priceMax": 295000, "priceAvg": 165000 }
],
"priceRanges": [
{ "currency": "USD", "label": "50000-100000", "count": 5, "from": 50000, "to": 100000 },
{ "currency": "USD", "label": "100000-300000", "count": 13, "from": 100000, "to": 300000 }
]
}
}
If operation, type, zone1, zone2, zone3, priceMin or priceMax are sent with a non-numeric value, the service responds HTTP 400 with {"error": "INVALID_NUMBER", "description": "..."}, where the description is specific to the field (e.g. "Operation must be a number", "PriceMin must be a number").
Unlike GET /api/action/mapaprop-chat-ai-v1/config, the aggregations of this endpoint do not include description in states/counties/cities (only id and count).