Search properties
https://platform.casafari.com/v1/property-sourcing/searchesSend Authorization: Bearer $CASAFARI_API_KEY: a platform API key or OAuth access token; see platform sign-in. Costs 100 units per page (1 unit = EUR 0.04).
Over MCP: none; this product is REST only.
Description
Structured search of the property graph: one request body for every country. Name the places with location_ids (find them with GET /v1/locations/search), then filter by property type, price, price per m², bedrooms, bathrooms, living and plot area and features, and sort. Each result is one property, however many listings advertise it, with an opaque prop_ id. next is a URL for the following page (valid for one hour, bound to your account) or null. Plain-language phrases go to POST /v1/property-sourcing/searches/describe. 100 units per page.
Request body
Content type application/json. Required. Type: object.
location_idsinteger[]requiredcountrystringoperationstringsale renttypesstring[]priceobject2 properties
minintegermaxintegerprice_per_sqmobject2 properties
minintegermaxintegerbedroomsobject2 properties
minintegermaxintegerbathroomsobject2 properties
minintegermaxintegerliving_area_sqmobject2 properties
minintegermaxintegerplot_area_sqmobject2 properties
minintegermaxintegerfeaturesstring[]balcony elevator garage garden parking storage swimming_pool terrace rental_license furniture no_elevator rented_out life_annuity business_transfer smoke_outletexclude_featuresstring[]balcony elevator garage garden parking storage swimming_pool terrace rental_license furniture no_elevator rented_out life_annuity business_transfer smoke_outletsortstringnewest oldest recently_updated price_asc price_desc price_per_sqm_asc price_per_sqm_desc largestpage_sizeintegerExample request
Placeholders only: replace the token and the values with your own.
curl -X POST "https://platform.casafari.com/v1/property-sourcing/searches" \
-H "Authorization: Bearer $CASAFARI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"location_ids": [
12345
],
"country": "ES",
"operation": "sale",
"types": [
"apartment"
],
"price": {
"max": 450000
},
"bedrooms": {
"min": 2
},
"features": [
"terrace",
"elevator"
],
"sort": "newest",
"page_size": 25
}'Responses
200 One page of properties.
Type: object.
Show the response shape (21 fields)
resultsobject[]10 properties
idstringprop_....typestringnullableoperationstringsale rentpriceobject3 properties
amountnumbernullablecurrencystringnullableper_sqmnumbernullablebedroomsnumbernullableliving_area_sqmnumbernullablelocationobject3 properties
idintegernullablenamestringnullablecoordinatesobjectnullable2 properties
latnumberlonnumberfirst_seenstringnullablelistings_countintegernullablematched_tagsstring[]nullabletotalintegernullablenextstringnullableExample with sample values (ids and figures are illustrative)
{
"results": [
{
"id": "prop_7Hq2pZk1vY0sW4nB8cR3tL",
"type": "apartment",
"operation": "sale",
"price": {
"amount": 425000,
"currency": "EUR",
"per_sqm": 4474
},
"bedrooms": 3,
"living_area_sqm": 95,
"location": {
"id": 12345,
"name": "Sample district",
"coordinates": {
"lat": 39.462,
"lon": -0.376
}
},
"first_seen": "2026-09-28",
"listings_count": null,
"matched_tags": null
}
],
"total": 312,
"next": "https://platform.casafari.com/v1/property-sourcing/searches/cur_SAMPLE"
}400 Invalid request: the problem names each field to fix (`invalid_request`), or `page_size` is over the plan's limit (`page_depth_exceeded`).
Type: object.
Show the response shape (10 fields)
typestringtitlestringstatusintegerdetailstringinstancestringcodestringrequest_idstringerrorsobject[]2 properties
fieldstringmessagestring401 Missing or unknown API key or token.
Type: object.
Show the response shape (10 fields)
typestringtitlestringstatusintegerdetailstringinstancestringcodestringrequest_idstringerrorsobject[]2 properties
fieldstringmessagestring402 No units left to fund the call (`payment_required`, with `reason` and an `upgrade_url`).
Type: object.
Show the response shape (10 fields)
typestringtitlestringstatusintegerdetailstringinstancestringcodestringrequest_idstringerrorsobject[]2 properties
fieldstringmessagestring403 The account is not entitled to this product or country (`not_entitled`).
Type: object.
Show the response shape (10 fields)
typestringtitlestringstatusintegerdetailstringinstancestringcodestringrequest_idstringerrorsobject[]2 properties
fieldstringmessagestring429 A request limit of the plan was reached (`request_limit_reached`, with `window` and `Retry-After`).
Type: object.
Show the response shape (10 fields)
typestringtitlestringstatusintegerdetailstringinstancestringcodestringrequest_idstringerrorsobject[]2 properties
fieldstringmessagestring