Platform

Casafari is the AI agent-native real estate data intelligence platform. The most complete property index in Europe: a deduplicated, cleaned property graph of residential and commercial property, for sale and for rent, in 16 countries.The most complete property index in Europe: a deduplicated, cleaned property graph.

How the graph is built

Claro AI · REST API

What premises ask in a place

POSThttps://platform.casafari.com/v1/claro/market
API key65 parameters

Send Authorization: Bearer $CASAFARI_API_KEY: a platform API key or OAuth access token, metered in platform tokens; see platform sign-in and Claro AI. On the platform this is POST https://platform.casafari.com/v1/claro/market; POST /v1/market is Claro's own path, which the platform adds /claro to. The platform forwards the call to Claro unchanged: Claro's Claro-Version header and its error bodies ({"error":{"code","message"}}, with rate_limited and quota_reached on a 429) pass through.

Over MCP: market_snapshot (equivalent). MCP and REST compared.

Description

What commercial premises of a kind ask in a place anywhere in Spain or Germany (one country per search; Spain unless Germany is asked), from every active property of that kind and place (each unit counted once): the asking price per m² as a distribution with its median and middle half, by size band, by district or town, and for one town or province the monthly average over three years with the change in a year, the properties on the market and their days on the market (Casafari Area Insights). Ask in plain words (question: "what does retail rent for in Chamberí?") or send criteria as data (place, types, operation, optional size range); other criteria are ignored. Asking prices, not agreed ones; at least 10 properties or no figures. Returns the criteria as understood and insights: charts as data, each with a one-sentence answer, its count, scope, source and date.

Request body

Content type application/json. Required. Type: object.

questionstring
The question in plain words, any language: "what do offices rent for in Valencia?"
criteriaobject
Criteria as data. Hard criteria (operation, cities, types, price, area) exclude properties outside them; the rest exclude only properties that state the opposite, and each result says which were met and which the property does not state.
54 properties
operationstring
rent sale either
countrystring
The one country the search is in: es (Spain, the default) or de (Germany). Cities and provinces are that country's; counts never mix countries.
es de
citiesstring[]
Towns or cities in the search's country by name or slug ("valencia", "Palma"; with country de: "München", "koln"). Leave out for the whole country.
provincesstring[]
Provinces in Spain, or Länder with country de ("bayern", "nordrhein-westfalen"); a property must be in one of them.
68 allowed valuesa-coruna alava albacete alicante almeria asturias avila badajoz barcelona burgos caceres cadiz cantabria castellon ceuta ciudad-real cordoba cuenca girona granada guadalajara guipuzcoa huelva huesca islas-baleares jaen la-rioja las-palmas leon lleida lugo madrid malaga melilla murcia navarra ourense palencia pontevedra salamanca santa-cruz-de-tenerife segovia sevilla soria tarragona teruel toledo valencia valladolid vizcaya zamora zaragoza baden-wurttemberg bayern berlin brandenburg bremen hamburg hessen mecklenburg-vorpommern niedersachsen nordrhein-westfalen rheinland-pfalz saarland sachsen sachsen-anhalt schleswig-holstein thuringen
districtsstring[]
Named districts or neighbourhoods in the cities (Centro, Malasaña, Chamberí, Eixample, Gràcia, Poblenou...). A property outside them is out; one that does not state its district stays, marked not stated.
typesstring[]
hotel retail warehouse industrial office other_commercial
area_minnumber
area_maxnumber
price_minnumber
EUR: a month for rent, the total for a sale; applies to each operation without its own rent_/sale_ limit.
price_maxnumber
rent_price_minnumber
EUR a month; compared only with rents.
rent_price_maxnumber
EUR a month; compared only with rents. With sale_price_max, operation "either" keeps a property whose rent or sale price fits its own limit.
sale_price_minnumber
EUR total; compared only with sale prices.
sale_price_maxnumber
price_m2_minnumber
EUR per m² of the property's area (a month for rent); a property with no stated area is "not stated".
price_m2_maxnumber
rent_price_m2_minnumber
rent_price_m2_maxnumber
sale_price_m2_minnumber
sale_price_m2_maxnumber
street_levelboolean
frontage_min_mnumber
Facade length (fachada) in metres.
frontage_max_mnumber
floors_minnumber
Number of floors (plantas) the premises has.
floors_maxnumber
ceiling_min_mnumber
smoke_extractionboolean
cornerboolean
shop_windowboolean
open_planboolean
step_freeboolean
loading_accessboolean
licencestring
food_service retail office gym none
licence_activitiesstring[]
Activities its licence sentence must name, in Spanish or Catalan: cafetería, panadería, restaurante...
transfer_price_minnumber
Transfer fee (traspaso) in EUR; met when its stated range overlaps.
transfer_price_maxnumber
business_transferboolean
true: only business transfers (traspasos); false: none.
business_typesstring[]
Uses its text says it suits, in English: restaurant, cafe, gym...
keywordsstring[][]
Groups of phrases; a property meets a group when its text holds any phrase. Write phrases as Spanish agencies do.
exclude_keywordsstring[]
Leave out properties whose text holds any of these.
footfall_minnumber
Minimum footfall index within a 5-minute walk (an index of pedestrian activity that compares places; not a head count). Needs location data access.
pop_walk10_minnumber
Residents within a 10-minute walk. Needs location data access.
pop_drive10_minnumber
Residents within a 10-minute drive. Needs location data access.
transit_minnumber
Stations and stops within a 5-minute walk. Needs location data access.
competitors_maxobject[]
At most this many places of a kind within a 5-minute walk (gyms: 10). Needs location data access.
2 properties
kindstringrequired
restaurants fast_food cafes shops supermarkets gyms
maxnumberrequired
own_stores_away_mnumber
No store from your own list (upload it with PUT /v1/stores) within this many metres of the premises, straight-line, 1-1,000. Needs an exact pin.
competitors_near_maxobject[]
At most max businesses of a segment (or of the named chains) within within_m straight-line metres (1-1,000), from Overture Maps places. A property with an approximate pin gets no verdict.
4 properties
segmentstringrequired
gym burger fast_food coffee bakery pharmacy supermarket fashion pizza
within_mnumberrequired
maxnumberrequired
chainsstring[]
Only these brands count (rivals or your own), e.g. Burger King, Basic-Fit. Matched on Overture brand and name.
spending_per_resident_minnumber
Spending power a resident a year (EUR) within a 10-minute walk. Needs location data access.
high_income_share_minnumber
% of households within a 10-minute walk with net income above 40,162 EUR a year. Needs location data access.
age_shares_minobject[]
Minimum % of residents within a 10-minute walk in an age band. Needs location data access.
2 properties
bandstringrequired
0_14 15_29 30_44 45_59 60p
min_pctnumberrequired
meaningstring
A wish no field holds, in any language; ranks results, never filters.
sortstring
supply_gap ranks where residents per similar place is highest (residents within a 10-minute walk / (places within gap_radius_m, 600 m by default, + 1)); needs gap_segment or one competitors_near_max segment. Needs location data access; unscored properties go last.
best price_asc price_desc area_desc footfall_desc supply_gap
gap_segmentstring
The business kind the supply_gap sort counts.
gym burger fast_food coffee bakery pharmacy supermarket fashion pizza
gap_radius_minteger
Radius in metres in which the supply_gap sort counts similar places: 600 (default) or 300 (about a 5-minute walk). Only with sort supply_gap.
300 600
langstring
Language of the text the answer writes (titles, notes, labels, reasons, error messages): en (default) or de (German). Place names, agency names, property titles and quotes from a property's own text stay as written.
en de
default "en"

Example request

Placeholders only: replace the token and the values with your own.

curl
curl -X POST "https://platform.casafari.com/v1/claro/market" \
  -H "Authorization: Bearer $CASAFARI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "question": "<question>"
}'

Responses

200 What premises ask in a place

No body.

Example from the API description (long arrays shortened)
JSON
{
  "criteria": {
    "operation": "rent",
    "cities": [
      "madrid"
    ],
    "districts": [
      "Chamberí"
    ],
    "types": [
      "retail"
    ]
  },
  "insights": [
    {
      "id": "market",
      "kind": "histogram",
      "title": "Retail premises for rent in Chamberí, Madrid ask a median of €21.0/m² a month; the middle half ask €17.2/m²–€26.4/m² (52 with a stated rent and size).",
      "n": 38,
      "scope": "retail premises for rent in Centro, 100–400 m² (half to twice this size), each unit counted once",
      "source": "Claro properties on the market; asking rents, not agreed ones",
      "as_of": "2026-10-13",
      "unit": "eur_m2_month",
      "bins": [
        {
          "from": 10,
          "to": 15,
          "n": 6
        },
        {
          "from": 15,
          "to": 20,
          "n": 9
        }
      ],
      "open_high": true,
      "median": 21.5,
      "p25": 17.8,
      "p75": 27
    }
  ],
  "notes": []
}

400 Invalid request

Type: object.

Show the response shape (3 fields)
errorobject
2 properties
codestringrequired
messagestringrequired

401 Missing or invalid key

Type: object.

Show the response shape (3 fields)
errorobject
2 properties
codestringrequired
messagestringrequired

403 No access

Type: object.

Show the response shape (3 fields)
errorobject
2 properties
codestringrequired
messagestringrequired

429 Rate limited

Type: object.

Show the response shape (3 fields)
errorobject
2 properties
codestringrequired
messagestringrequired

Tip: add .md to any URL to read it as Markdown.