---
title: "List library items (transcriptions, uploads, documents)"
method: GET
path: "/v1/library"
tags: ["Library"]
---

# List library items (transcriptions, uploads, documents)

`GET /v1/library`

## Request

- Base URL: `https://contentmaschine.ai/api`
- URL: `https://contentmaschine.ai/api/v1/library`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://contentmaschine.ai/api/oauth/authorize`, token URL `https://contentmaschine.ai/api/oauth/token`)

The Library view: the things the gallery does not cover. Items are filtered to the
containers your token can read. A token holding no readable container gets an empty
list with a 200, never a 403 - the route gate already ran and this is a view filter,
not an access denial.

`counts` holds the real totals of your library per item type, independent of `limit`,
`offset` and `type`. It only counts items in containers your token can read, so it cannot
leak the existence of the others. `pagination.has_more` tells whether more items follow
this page, measured BEFORE container filtering. With `type=all` the three item types are
merged, newest change first, and paged as one list.

The route-level scope is an any-of list (`text:read`, `audio:read`, `files:read`) and
is a coarse pre-filter, not the boundary. The per-item container check is.

## Query parameters

- `type` 'all' | 'transcription' | 'upload' | 'document'
- `limit` integer
- `offset` integer

## Response `200`

The filtered page.

- object
  - `success` boolean
  - `data` object
    - `items` object[]
    - `counts` object: Real totals per item type (total, transcriptions, uploads, documents), limited to the containers the token can read.
    - `pagination` object
      - `limit` integer
      - `offset` integer
      - `has_more` boolean
  - `timestamp` string, date-time

## Other responses

- `400`: Invalid `type`. The message lists the valid values.
- `401`: Missing or invalid API key.
- `403`: The token holds none of text:read, audio:read, files:read.
- `default`: Any other error. Every failure this API emits uses the same envelope; branch on `error.type`, never on `error.message`, and quote `error.correlation_id` to support.

---

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