Search properties
https://platform.casafari.com/v1/property-sourcing/searchesSend Authorization: Bearer $CASAFARI_API_KEY: a platform API key (cf_sk_...) from the console, or an OAuth access token; X-API-Key carries the key too. See platform API keys. Costs 50 tokens a call (1 token = EUR 0.04).
The platform's OpenAPI file leaves the shape open; what is shown comes from the same definitions the platform publishes elsewhere: request: the MCP tool property-sourcing_search's input; response 200: the hub's fragment from the platform's contract.
Over MCP: property-sourcing_search (equivalent). See MCP and REST compared.
Description
Costs 50 tokens a call. Each page is a call. Page size: page_size in the body, at most 100 (a Free plan account is capped lower). One search reaches at most 1000 results. A structured search: location_ids (from Location Lookup), country, operation (sale or rent), types, price, price_per_sqm, bedrooms, bathrooms, living_area_sqm, plot_area_sqm, features, exclude_features, below_market_pct (percent below our market value), days_on_market, private, exclusive, rental_yield (rent only), first_seen_after, changed_after, sort and page_size. Each result's id is a prop_ id and carries days_on_market, market_value, below_market and seller flags. Prices are asking prices.
Request body
Content type application/json. Optional. Type: object.
location_idsinteger[]requiredcountrystring^[A-Za-z]{2}$operationstringsale renttypesstring[]^[a-z][a-z_]*$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 Success.
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"
}Errors
Every error is an application/problem+json body (RFC 9457) with type (a page that explains it), title, status, detail (what to do), instance, code and request_id (what to quote to support). A 402 carries an upgrade_url, a 429 a Retry-After header. The codes each status can carry:
- 400
invalid_request,key_in_query,page_depth_exceeded(https://platform.casafari.com/errors/invalid-request, https://platform.casafari.com/errors/key-in-query, https://platform.casafari.com/errors/page-depth-exceeded) - 401
unauthorized,invalid_credential,credential_revoked,token_expired(https://platform.casafari.com/errors/unauthorized, https://platform.casafari.com/errors/invalid-credential, https://platform.casafari.com/errors/credential-revoked, https://platform.casafari.com/errors/token-expired) - 402
payment_required(https://platform.casafari.com/errors/payment-required) - 403
insufficient_scope,not_entitled,account_suspended(https://platform.casafari.com/errors/insufficient-scope, https://platform.casafari.com/errors/not-entitled, https://platform.casafari.com/errors/account-suspended) - 404
not_found(https://platform.casafari.com/errors/not-found) - 405
method_not_allowed(https://platform.casafari.com/errors/method-not-allowed) - 409
conflict(https://platform.casafari.com/errors/conflict) - 413
payload_too_large(https://platform.casafari.com/errors/payload-too-large) - 415
unsupported_media_type(https://platform.casafari.com/errors/unsupported-media-type) - 422
validation_failed(https://platform.casafari.com/errors/validation-failed) - 429
rate_limited,daily_limit_reached,request_limit_reached,usage_limit_reached(https://platform.casafari.com/errors/rate-limited, https://platform.casafari.com/errors/daily-limit-reached, https://platform.casafari.com/errors/request-limit-reached, https://platform.casafari.com/errors/usage-limit-reached) - 500
internal_error(https://platform.casafari.com/errors/internal-error) - 502
upstream_error(https://platform.casafari.com/errors/upstream-error) - 503
capacity_exhausted,unavailable(https://platform.casafari.com/errors/capacity-exhausted, https://platform.casafari.com/errors/unavailable) - 504
upstream_timeout(https://platform.casafari.com/errors/upstream-timeout)