---
title: "List your generations"
method: GET
path: "/v1/gallery"
tags: ["Gallery"]
---

# List your generations

`GET /v1/gallery`

## Request

- Base URL: `https://contentmaschine.ai/api`
- URL: `https://contentmaschine.ai/api/v1/gallery`
- 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`)

Lists everything you have created - images, videos, audio and text - newest first.
Each completed file-backed item includes a `file.download_url` you can fetch with the same Bearer token.
Text generations (captions, transcripts, etc.) include a `text` field.

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.

BREAKING CHANGES that landed on this response - see `x-breaking-changes`:
`item.uuid` is now the FILE uuid (the generation uuid moved to `generation_uuid`),
and `item.category` now reports the plural container vocabulary
(images|videos|audio|text|files) where it used to report image|video|text|other.

## Query parameters

- `category` 'all' | 'images' | 'videos' | 'audio' | 'text' | 'files' | 'image' | 'video'
- `status` 'completed'
- `limit` integer
- `offset` integer

## Response `200`

A page of gallery items

- object
  - `success` boolean
  - `data` object
    - `items` GalleryItem[]
      - `uuid` string, uuid: The FILE uuid. Use it with GET /v1/gallery/{uuid}, GET /v1/files/{uuid}/download and the other /v1/files routes. It was the GENERATION uuid before Phase 14 - see x-breaking-changes.
      - `generation_uuid` string, uuid, nullable: The generation that produced this item. This is what `uuid` used to carry.
      - `type` string: Specific generation type, e.g. image_generation, video_generation, caption_generation.
      - `category` 'images' | 'videos' | 'audio' | 'text' | 'files': The scope container this item belongs to. Same vocabulary as the read scopes (`images:read` reads `images`). Was singular (`image`/`video`) before Phase 14 - see x-breaking-changes.
      - `container` 'images' | 'videos' | 'audio' | 'text' | 'files': Identical value to `category`, named in the scope vocabulary. `category` is the field existing consumers read; `container` is the explicit synonym.
      - `status` 'completed' | 'generating' | 'failed'
      - `title` string, nullable
      - `created_at` string, date-time
      - `completed_at` string, date-time, nullable
      - `credits_used` number, nullable
      - `file` object, nullable: Present for completed file-backed items (images/videos). null otherwise.
        - `uuid` string
        - `download_url` string: Authenticated download path; accepts the same Bearer token.
        - `mime_type` string, nullable
        - `size_bytes` integer, nullable
        - `kind` string, nullable: image|video|document|…
      - `text` string, nullable: Text output for text generations (captions, transcripts, etc.).
    - `pagination` object
      - `total` integer
      - `limit` integer
      - `offset` integer
      - `has_more` boolean

## Other responses

- `400`: An unknown `category`, or a `status` other than `completed`. The message lists the valid values.
- `401`: Missing or invalid API key.
- `403`: The token holds neither images:read nor videos: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)
