---
title: "Get your reading portrait"
method: GET
path: "/api/portrait"
tags: ["portrait"]
---

# Get your reading portrait

`GET /api/portrait`

## Request

- Base URL: `https://leafle.org` (the document declares no server; this is the origin it was published from)
- URL: `https://leafle.org/api/portrait`
- Auth: HTTP bearer

**Access: read token.**

Returns the reader's taste portrait. `ready: false` means there is not yet enough synthesised reading evidence to show one.

## Query parameters

- `reader_id` integer, nullable

## Response `200`

Successful Response

- Portrait: GET /api/portrait and POST /api/portrait/refine. ``{"ready": false}`` until the reader has a real taste model; when ready, every field below is present (the builder fills them all), so the omit-None base only trims the not-ready shape.
  - `ready` boolean, required
  - `prose` string, nullable
  - `thesis` string, nullable
  - `threads` PortraitThread[], nullable
    - `id` string, required
    - `label` string, required
    - `weight` string, required
  - `themes_and_moods` string, nullable
  - `favourite_authors` string[], nullable
  - `keystones` BookRef[], nullable
    - `title` string, required
    - `author` string, required
  - `reading_lately` BookRef[], nullable
    - `title` string, required
    - `author` string, required
  - `total_books` integer, nullable
  - `illustration` boolean, nullable
  - `refreshing` boolean, nullable

## Other responses

- `401`: Missing or unusable credential.
- `403`: Insufficient token scope or the reader is outside your account.
- `422`: Validation Error

---

[API](https://skmtc.dev/leafle/apis/leafle-api.md) · [All operations](https://skmtc.dev/leafle/apis/leafle-api/llms.txt) · [OpenAPI document](https://skmtc.dev/leafle/apis/leafle-api/revisions/f2e56cb74495?raw)
