---
title: "Browse your books"
method: GET
path: "/api/books"
tags: ["books"]
---

# Browse your books

`GET /api/books`

## Request

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

**Access: read token.**

Filter the reading ledger by `status` or title/author substring `q`. Use `limit` and the returned `next_cursor` to page; stop when it is null. An invalid cursor returns 400.

## Query parameters

- `reader_id` integer, nullable
- `status` string, nullable
- `q` string, nullable
- `limit` integer, nullable
- `cursor` string, nullable

## Response `200`

Successful Response

- BooksPage
  - `books` Book[], required
    - `id` integer, required
    - `title` string, required
    - `author` string, required
    - `status` 'reading' | 'read' | 'owned' | 'to_read' | 'dnf', required
    - `rating` 'loved' | 'liked', nullable, required
    - `source` string, required
    - `reaction` string, required
    - `cover_url` string, nullable, required
    - `queue_position` integer, nullable
    - `pick_why` string, nullable
    - `kind` 'book' | 'series'
    - `series` string, nullable
  - `total` integer, required
  - `next_cursor` string, nullable, required

## Other responses

- `400`: Invalid input; see detail for the reason.
- `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)
