---
title: "List workspace creatives"
method: GET
path: "/workspaces/{workspace}/admin/creatives"
tags: ["Creative"]
---

# List workspace creatives

`GET /workspaces/{workspace}/admin/creatives`

## Request

- Base URL: `https://plainrouter.com/api/v1`
- URL: `https://plainrouter.com/api/v1/workspaces/{workspace}/admin/creatives`
- Auth: HTTP bearer

Read complete workspace creative rows within the shared MCP byte budget. Continue with next_cursor as cursor in the same workspace.

## Path parameters

- `workspace` integer, required

## Query parameters

- `cursor` integer
- `per_page` integer
- `page` integer

## Response `200`

Bounded rows; no nested history is included in rule summaries. Result projections share the 80,000-byte MCP JSON budget; defaults are bounded, next_cursor continues complete rows, and oversized single rows are explicitly refused. Plan creative continuation uses the read endpoint; proposal continuation uses the batch read endpoint.

- object
  - `creatives` object, required: Complete projection rows are paged within 80,000 JSON bytes, accounting for both MCP representations. Defaults are bounded. Follow next_cursor with the same scope and filters. One oversized row is explicitly refused; fields are never silently clipped.
    - `data` object[]
      - `id` string, required
      - `fingerprint` string, required
      - `type` 'image' | 'video', required
      - `mime_type` string, required
      - `byte_size` integer, required
      - `width` integer, nullable, required
      - `height` integer, nullable, required
      - `aspect_ratio` number, nullable, required
      - `duration_ms` integer, nullable, required
      - `original_filename` string, nullable
      - `source_ref` string, nullable, required
      - `tags` union, required: Stored tags, including provenance when supplied. An empty map is returned as an empty array. Existing creatives keep their original tags.
        - object
        - string[]
      - `status` 'draft' | 'approved' | 'retired', required
      - `created_at` string, nullable, required
      - `updated_at` string, nullable, required
    - `total` integer
    - `per_page` integer
    - `next_cursor` integer, nullable
    - `truncated` boolean
    - `continuation` string

## Other responses

- `401`: Invalid or missing Server secret.
- `403`: The workspace grant does not authorize this operation, or the token cannot access this workspace. Returns message.
- `404`: A disabled Creative surface or missing workspace returns the api_route_not_found envelope with error, request and resources.
- `422`: JSON booleans in integer inputs, including workspace selectors, return message plus errors mapping field names to arrays of messages. Numeric strings retain their existing validation and coercion.

---

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