Platform
Get started

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

Search commercial plots (Germany)

POSThttps://platform.casafari.com/v1/claro/plots/search
Germany, commercial plotsAPI key17 parameters

Send Authorization: Bearer $CASAFARI_API_KEY: a platform API key or OAuth access token, metered in platform units; see platform sign-in and Claro AI. On the platform this is POST https://platform.casafari.com/v1/claro/plots/search; POST /v1/plots/search 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: search_plots (equivalent). MCP and REST compared.

Description

Find plots of land for sale or rent in Germany for a commercial building, from Casafari's property graph. Plots only, never premises: counts and results come from a separate set, one result per plot however many agencies advertise it (the others in also_listed_by). Criteria are data: Länder (regions), municipalities, postcodes, plot type, operation, plot area, sale price and price per m², keywords in the property's own words, and commercial_use, how far the property's own text says a commercial building can go on the plot. Levels: zoned_commercial (GE, GI, MK, MU stated), zoned_mixed_or_special (MI, SO, MD stated: check the plan), commercial_use_stated (commercial use stated as allowed or suitable, no class: read the quote), building_land_use_not_stated, residential_only_stated, zoned_leisure_special (SO for recreation), not_building_land_stated, not_stated. The default is the first three; send "all" or any list to widen it. Each result gives its level with the quote it rests on and, for a stated class, zoning_source (a Flächennutzungsplan is not binding), the facts read from the text (zoning class, serviced, B-Plan, §34/§35, building permit, GRZ, GFZ), an excerpt and the agency's link. The level is what the property's text says, not a zoning check; coordinates are approximate.

Request body

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

criteriaobject
13 properties
regionsstring[]
Länder by name or slug: "Bayern", "nordrhein-westfalen".
municipalitiesstring[]
Towns or cities as the property's data names them: "München", "Leipzig".
zipcodesstring[]
Postcodes or their first digits: "80331", "04".
plot_typesstring[]
building_plot (Grundstück) or rural_plot (agricultural, forest and other land).
building_plot rural_plot
operationstring
sale rent either
plot_area_minnumber
m²; a plot that states no area is out.
plot_area_maxnumber
sale_price_minnumber
EUR total.
sale_price_maxnumber
sale_price_m2_maxnumber
EUR per m² of plot area.
commercial_usestring | string[]
Levels to keep; default zoned_commercial, zoned_mixed_or_special, commercial_use_stated.
servicedboolean
true: drop plots whose text says they are not serviced (unerschlossen); plots that do not say stay.
keywordsstring[]
Words or phrases the property's text must contain, all of them: "Gleisanschluss", "Autobahn".
limitinteger
1–50default 20
offsetinteger
Results to skip, for the next page.
≥ 0default 0
sortstring
commercial_use newest price_asc area_desc price_m2_asc
default "commercial_use"

Example request

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

curl
curl -X POST "https://platform.casafari.com/v1/claro/plots/search" \
  -H "Authorization: Bearer $CASAFARI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "criteria": {
    "regions": [
      "<regions>"
    ]
  }
}'

Responses

200 Search commercial plots (Germany)

No body.

Example from the API description
JSON
{
  "scope": "plots",
  "country": "de",
  "count": 1,
  "returned": 1,
  "offset": 0,
  "criteria": {
    "regions": [
      "bayern"
    ],
    "plot_area_min": 2000
  },
  "note": "Plots only, never premises.",
  "results": [
    {
      "id": "pm_Qw7rT2xLmN8bV4cZ1aYs0e",
      "title": "Gewerbegrundstück im Gewerbegebiet Nord",
      "plot_type": "building_plot",
      "country": "de",
      "region": "Bayern",
      "municipality": "Ingolstadt",
      "zipcode": "85055",
      "location_precision": "approximate",
      "coordinates": {
        "lat": 48.79,
        "lon": 11.45,
        "precision": "approximate"
      },
      "for_sale": true,
      "for_rent": false,
      "sale_eur": 1200000,
      "rent_eur_month": null,
      "plot_area_m2": 6000,
      "sale_eur_per_m2": 200,
      "commercial_use": {
        "level": "zoned_commercial",
        "meaning": "The plot's text states a commercial zoning class: GE, GI, MK or MU (Gewerbe-, Industrie-, Kerngebiet, urbanes Gebiet).",
        "evidence": "Das Grundstück liegt im Gewerbegebiet (GE)",
        "facts_read": true
      },
      "facts_from_text": {
        "zoning_class": "GE",
        "serviced": true
      },
      "excerpt": "Voll erschlossenes Gewerbegrundstück, ca. 6.000 m², direkte Anbindung an die A9.",
      "agency": {
        "name": "Muster Immobilien",
        "listing_url": "https://muster-immobilien.de/expose/1"
      },
      "agency_links": [
        {
          "name": "Muster Immobilien",
          "listing_url": "https://muster-immobilien.de/expose/1"
        }
      ]
    }
  ]
}

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.