# Registered sale prices around 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}/closing-prices`

[Property Sourcing](/docs/property-sourcing) · [REST API](/docs/rest/property-sourcing). Send `Authorization: Bearer $CASAFARI_API_KEY`: a platform API key (`cf_sk_...`) from [the console](https://platform.casafari.com/console), or an OAuth access token; `X-API-Key` carries the key too. See [platform API keys](/docs/rest#platform-api-keys). Costs 5 tokens a call (1 token = EUR 0.04).

Over MCP: [`property-sourcing_get_closing_prices`](/docs/property-sourcing/get_closing_prices) (equivalent). See [MCP and REST compared](/docs/parity#property-sourcing).

## Description

Costs 5 tokens a call. Aggregated registered sale prices, not asking prices: the count and the median, p10, p90 and range per square metre of recent sales of similar homes (same type group, size within 30 percent of the living or total area; implausible rows such as parking spaces are left out and counted in excluded) around the property, with their source, and, for France and Poland only, the closest sales (sold date, price, price per m2, area, distance, type; never an address; Spain and Italy answer the summary alone). Spain, France, Italy and Poland; Portugal answers INE's official median per square metre for the nearest municipality (price_type says it is an area median); Italy answers the OMI quotation range of the home's zone from the Agenzia delle Entrate where there is one (price_type says it is a quotation range, not a closing price); another country answers 400 and is not billed. radius_m (100 to 5000, default 1500) months (1 to 60, default 24) narrow it; sales (0 to 25, default 10) sets the list length.

## Path parameters

- `property_id` (string, required)

## Query parameters

- `radius_m` (integer, optional): Radius around the property in metres. 100–5000; default 1500.
- `months` (integer, optional): How far back to look, in months. 1–60; default 24.
- `sales` (integer, optional): How many of the closest sales to list (0 for none): sold date, registered closing price, price per m2, area, distance, type; never an address. 0–25; default 10.

## Example request

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

```bash
curl "https://platform.casafari.com/v1/property-sourcing/properties/<property_id>/closing-prices" \
  -H "Authorization: Bearer $CASAFARI_API_KEY"
```

## Responses

### 200 Success.

Type: `object`.

### 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` (https://platform.casafari.com/errors/invalid-request, https://platform.casafari.com/errors/key-in-query)
- `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)
- `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)

## Related pages

- [Search properties (POST /v1/property-sourcing/searches)](/docs/rest/property-sourcing/search-properties)
- [Next page of a search (GET /v1/property-sourcing/searches/{cursor})](/docs/rest/property-sourcing/next-page-of-a-search)
- [Get a property (GET /v1/property-sourcing/properties/{property_id})](/docs/rest/property-sourcing/get-a-property)
- [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)
