# Get locations (v1)

> **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).

`POST https://api.casafari.com/api/v1/references/locations`

[References](/docs/references) · [REST API](/docs/rest/references). Send `Authorization: Bearer $CASAFARI_TOKEN`; see [how to get a token](/docs/rest#get-a-token).

Over MCP: no tool does this. See [MCP and REST compared](/docs/parity#references).

## Description

Returns a list of all possible locations with user restrictions.

## Request body

Content type `application/json`. Optional. Type: `object`.

- `name` (string, optional): Location name to search.
- `coordinates` (object[], optional): Limit search to locations within a closed polygon. First and last points must match. at least 4 items.
  - `latitude` (number, required): Latitude. -90–90.
  - `longitude` (number, required): Longitude. -180–180.
- `zip_codes` (string[], optional): List of zip codes to filter by. at most 15 items.
- `lang` (string, optional): Language to use for the location names in the response. (When the provided language is not supported, the results will be returned in English.)

## Example request

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

```bash
curl -X POST "https://api.casafari.com/api/v1/references/locations" \
  -H "Authorization: Bearer $CASAFARI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "ferreiras",
  "coordinates": [
    {
      "longitude": -8.183479,
      "latitude": 37.1404
    },
    {
      "longitude": -8.18482,
      "latitude": 37.13909
    },
    {
      "longitude": -8.1854,
      "latitude": 37.13805
    },
    {
      "longitude": -8.21646,
      "latitude": 37.11383
    },
    {
      "longitude": -8.183479,
      "latitude": 37.1404
    }
  ],
  "lang": "pt"
}'
```

## Responses

### 200 OK

Type: `object`.

- `locations` (object[], required): List of location objects.
  - `location_id` (integer, required): ID of the location.
  - `name` (string, required): Name of the location.
  - `parent_id` (integer, required): ID of the parent level location.
  - `administrative_level` (string, required): Location administrative level.
  - `locations_structure` (object[], required): Information about all the parent locations, starting from the top-most level - country.
    - `location_id` (integer, required): Location ID, as returned by the POST /api/v1/references/locations endpoint.
    - `name` (string, required): Location name.
    - `administrative_level` (string, required): Location administrative level.
    - `zip_codes` (string[], optional): The location zip codes. default [].
    - `level` (integer, required): Location level as number.

Example from the API description (long arrays shortened):

```json
{
  "locations": [
    {
      "location_id": 1603,
      "name": "Ferreiras",
      "parent_id": 1602,
      "administrative_level": "Freguesia",
      "locations_structure": [
        {
          "location_id": 499,
          "name": "Portugal",
          "administrative_level": "País",
          "zip_codes": [
            "1200-224"
          ],
          "level": 1
        },
        {
          "location_id": 1597,
          "name": "Faro",
          "administrative_level": "Distrito",
          "zip_codes": [],
          "level": 2
        }
      ]
    }
  ]
}
```

### 401 Unauthorized

Type: `object`.

- `detail` (string, optional): Description of the error encountered.

### 403 Forbidden

Type: `object`.

- `detail` (string, optional): Description of the error encountered.

## Questions about this

- [What are the References operations for?](/docs/faq/what-is-references)
- [How do I turn a place name into a location id?](/docs/faq/location-ids)
