# Get a property

> **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. Every property is one record with its full price and market history. [How the property graph is built](/docs/property-graph).

`GET https://platform.casafari.com/v1/property-sourcing/properties/{property_id}`

[Property Sourcing](/docs/property-sourcing) · [REST API](/docs/rest/property-sourcing). Send `Authorization: Bearer $CASAFARI_API_KEY`: a platform API key or OAuth access token; see [platform sign-in](/docs/rest#platform-api-keys). Costs 10 units (1 unit = EUR 0.04).

Over MCP: none; this product is REST only.

## Description

One property by its `prop_` id: the search result's fields plus bathrooms, areas, construction year, energy rating, condition, features, address, description and status. `expand=listings` adds every listing merged into the property (where it is advertised, by which agency, at what price, its references) and `listings_count`; `expand=history` adds its dated price and status changes. A seller's contact details are never returned. 10 units.

## Path parameters

- `property_id` (string, required): A `prop_` id from a search or from resolve.

## Query parameters

- `expand` (string, optional): Comma-separated: `listings`, `history`, or both.
- `operation` (string, optional): `sale` or `rent`: which price and status to show. Default: sale, or rent when the property is only for rent. Values: `sale`, `rent`.

## Example request

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

```bash
curl "https://platform.casafari.com/v1/property-sourcing/properties/prop_7Hq2pZk1vY0sW4nB8cR3tL" \
  -H "Authorization: Bearer $CASAFARI_API_KEY"
```

## Responses

### 200 The property.

Type: `any`.

Example with sample values (ids and figures are illustrative):

```json
{
  "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": 2,
  "matched_tags": null,
  "bathrooms": 2,
  "total_area_sqm": 105,
  "plot_area_sqm": null,
  "construction_year": 1972,
  "energy_rating": "E",
  "condition": "good",
  "features": [
    "terrace",
    "elevator"
  ],
  "address": null,
  "description": "Sample description.",
  "status": "active",
  "listings": [
    {
      "source": "Sample agency website",
      "agency": "Sample agency",
      "url": "https://agency.example/listing/123",
      "price": {
        "amount": 425000,
        "currency": "EUR"
      },
      "status": "active",
      "active": true,
      "first_seen": "2026-09-28",
      "references": [
        "REF-123"
      ]
    },
    {
      "source": "Sample portal",
      "agency": "Sample agency",
      "url": "https://portal.example/ad/456",
      "price": {
        "amount": 425000,
        "currency": "EUR"
      },
      "status": "active",
      "active": true,
      "first_seen": "2026-09-30",
      "references": [
        "REF-123"
      ]
    }
  ],
  "history": [
    {
      "date": "2026-09-28",
      "event": "new",
      "action": null,
      "operation": "sale",
      "old_value": null,
      "new_value": 439000,
      "source": "Sample agency website",
      "agency": "Sample agency"
    },
    {
      "date": "2026-10-09",
      "event": "price_change",
      "action": "decrease",
      "operation": "sale",
      "old_value": 439000,
      "new_value": 425000,
      "source": "Sample agency website",
      "agency": "Sample agency"
    }
  ]
}
```

### 400 Unknown `expand` or `operation` value (`invalid_request`).

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

### 401 Missing or unknown API key or token.

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

### 402 No units left to fund the call (`payment_required`).

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

### 403 The account is not entitled to this property's country (`not_entitled`).

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

### 404 No property has this id (`not_found`).

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

## Related pages

- [Search properties (POST /v1/property-sourcing/searches)](/docs/rest/property-sourcing/search-properties)
- [Search properties by description (POST /v1/property-sourcing/searches/describe)](/docs/rest/property-sourcing/search-properties-by-description)
- [Next page of a search (GET /v1/property-sourcing/searches/{cursor})](/docs/rest/property-sourcing/next-page-of-a-search)
- [Resolve a link or reference to its property (POST /v1/property-sourcing/properties/resolve)](/docs/rest/property-sourcing/resolve-a-link-or-reference-to-its-property)
- [Property Sourcing REST API: all operations](/docs/rest/property-sourcing)
- [How to get a bearer token for the Casafari REST API](/docs/rest)
- [MCP vs REST API compared](/docs/parity)
