# Read a brief from a file

> **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://platform.casafari.com/v1/claro/brief/file`

[Claro AI](/docs/claro) · [REST API](/docs/claro#rest-api). Send `Authorization: Bearer $CASAFARI_API_KEY`: a platform API key or OAuth access token, metered in platform units; see [platform sign-in](/docs/rest#platform-api-keys) and [Claro AI](/docs/claro#keys). On the platform this is `POST https://platform.casafari.com/v1/claro/brief/file`; `POST /v1/brief/file` 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: [`brief_from_file`](/docs/claro/brief_from_file) (equivalent). See [MCP and REST compared](/docs/parity#claro-ai).

## Description

The premises requirements a file states: a site brief, a location profile or a requirements sheet, as a PDF, a photo or scan (JPG, PNG, WebP, HEIC), a Word, Excel or PowerPoint file (or OpenDocument), or text. Each requirement keeps the file's own words as `quote`; where the text can be read here (Office and text files) a requirement whose quote is not in it is dropped, and `quotes_checked` is true. For PDFs and images it is false. `brief` is the requirements joined in plain words, ready for POST /v1/search after the customer has checked it. Nothing is searched here. Multipart, the file in the field `file`, up to 10 MB (413 above that). Accepted: .pdf,.jpg,.jpeg,.png,.webp,.heic,.heif,.txt,.md,.csv,.tsv,.html,.htm,.rtf,.json,.xml,.docx,.xlsx,.pptx,.odt,.ods,.odp. Counted against the account's daily calls like a search. The file is not stored. Over MCP (no multipart), the tool `brief_from_file` takes the file as JSON: `{"content_base64": "TG9jYWwgZW4gTWFkcmlk…", "media_type": "text/plain", "filename": "perfil.txt"}`, with the same limits, checks and answer.

## Request body

Content type `multipart/form-data`. Required. Type: `object`.

- `file` (string (binary), required)

## Example request

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

```bash
curl -X POST "https://platform.casafari.com/v1/claro/brief/file" \
  -H "Authorization: Bearer $CASAFARI_API_KEY" \
  -F "file=@brief.pdf"
```

## Responses

### 200 The brief the file states

Type: `object`.

- `brief` (string, required): The requirements in plain words, joined with '; ' (at most 1,500 characters).
- `requirements` (object[], required) at most 30 items.
  - `requirement` (string, required)
  - `quote` (string, required): The file's own words that state it.
- `quotes_checked` (boolean, required): True when each quote was checked against the file's text (Office and text files).

Example from the API description (long arrays shortened):

```json
{
  "brief": "Madrid; rent; 120-250 m²; smoke extraction",
  "requirements": [
    {
      "requirement": "Madrid",
      "quote": "Local en Madrid"
    },
    {
      "requirement": "rent",
      "quote": "en alquiler"
    }
  ],
  "quotes_checked": true
}
```

### 400 Invalid request

Type: `object`.

- `error` (object, optional)
  - `code` (string, required)
  - `message` (string, required)

### 401 Missing or invalid key

Type: `object`.

- `error` (object, optional)
  - `code` (string, required)
  - `message` (string, required)

### 403 No access

Type: `object`.

- `error` (object, optional)
  - `code` (string, required)
  - `message` (string, required)

### 413 File larger than the limit

Type: `object`.

- `error` (object, optional)
  - `code` (string, required)
  - `message` (string, required)

### 429 Rate limited

Type: `object`.

- `error` (object, optional)
  - `code` (string, required)
  - `message` (string, required)

## Related pages

- [Search commercial premises (POST /v1/search)](/docs/rest/claro/search-premises)
- [Refine a search (POST /v1/search/refine)](/docs/rest/claro/refine-search)
- [Get one premises (GET /v1/premises/{id})](/docs/rest/claro/get-premises)
- [Compare premises (POST /v1/compare)](/docs/rest/claro/compare-premises)
- [Claro AI: all its MCP tools and REST operations](/docs/claro)
- [Connect Claro to an MCP client](/docs/claro/connect)
- [MCP vs REST API compared](/docs/parity)
