---
title: "List workspace media-library assets"
canonical: "https://bird.com/docs/api/reference/list-assets"
---

# List workspace media-library assets

`GET /v1/assets`

Returns a cursor page of the workspace's media-library assets, most recently created first. Filters can narrow results by media type, name, deletion status, or folder placement.

## Code samples

**TypeScript**

```ts
for await (const asset of bird.assets.list({ kind: "image" })) {
  console.log(asset.id, asset.url);
}
```

Examples: [TypeScript](/docs/api/reference/list-assets.ts.md) · [Python](/docs/api/reference/list-assets.py.md) · [Go](/docs/api/reference/list-assets.go.md) · [PHP](/docs/api/reference/list-assets.php.md) · [CLI](/docs/api/reference/list-assets.cli.md) · [MCP](/docs/api/reference/list-assets.mcp.md) · [cURL](/docs/api/reference/list-assets.curl.md)

## Example response `200`

```json
{
  "data": [
    {
      "created_at": "2026-05-20T09:14:52Z",
      "updated_at": "2026-05-25T16:42:01Z",
      "id": "ast_01krdgeqcxet5s7t44vh8rt9mg",
      "kind": "image",
      "folder_id": "asf_01krdgeqcxet5s7t44vh8rt9mg"
    }
  ],
  "next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
  "prev_cursor": null,
  "refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}
```

## Query parameters

- `sort` (string)

  Field to sort by. Defaults to `created_at`.

  Possible values: `created_at`
- `kind` (string)

  Return only assets in this category. This groups exact `content_type` values into images, video, audio, and documents.

  Possible values: `image`, `video`, `audio`, `document`
- `content_type` (string)

  Return only assets stored with this media type.

  Possible values: `image/png`, `image/jpeg`, `image/gif`, `video/mp4`, `video/webm`, `video/quicktime`, `audio/mpeg`, `audio/mp4`, `audio/ogg`, `audio/wav`, `application/pdf`
- `deleted` (string)

  Whether to include assets that have been removed from the library. Removed assets keep serving at their original URL, so they remain listable.

  Possible values: `exclude`, `include`, `only`
- `q` (string): A case-insensitive substring match against the asset's name.
- `folder_id` (string): Return only the assets filed directly in this folder. Subfolders are not included, and a folder that does not exist matches nothing. Cannot be combined with `root_only`.
- `root_only` (boolean): Return only the assets at the top level of the library, filed in no folder. Cannot be combined with `folder_id`.
- `order` (string)

  Sort direction. Defaults to `desc`, which sorts from newest to oldest or largest to smallest, depending on the selected sort field.

  Possible values: `asc`, `desc`
- `limit` (integer): Maximum number of items to return per page.
- `starting_after` (string): Cursor from the `next_cursor` field of a previous list response. Returns items immediately after the cursor position in the current sort order.
- `ending_before` (string): Cursor from the `prev_cursor` or `refresh_cursor` field of a previous list response. Returns items immediately before the cursor position in the current sort order. `prev_cursor` returns the preceding page. `refresh_cursor` anchors at the first row of that response, which on a newest-first sort is how to fetch the items that have appeared since.
- `include_total` (boolean): When true, the response includes a `total` field with the total number of items matching the request's filters across all pages.

## Response body

- `data` (array of object, required)
- `data.created_at` (string, required)
- `data.updated_at` (string, required)
- `data.id` (string, required)
- `data.url` (string, required): The asset's permanent public URL. Safe to embed or link in sent messages; for a document the usable form is a link.
- `data.thumbnail_url` (nullable string, required): A small preview of the asset, for rendering a picker or a grid. Intended for your own interfaces rather than for embedding in messages. Null for every kind but `image`: generating a preview of a video, an audio file, or a document would mean rendering its contents, which the library does not do. Show an icon for the `kind` instead.
- `data.name` (string, required): The asset's display name. Defaults to the uploaded file's name.
- `data.content_type` (string, required): The stored file's media type, determined from its contents.
- `data.kind` (string, required)

  The category a media-library asset's type falls into. Use it to group or filter a
  mixed library.

  - `image`: covers PNG, JPEG, and GIF.
  - `video`: covers MP4, WebM, and QuickTime.
  - `audio`: covers MP3, M4A, Ogg, and WAV.
  - `document`: covers PDF.

  Possible values (may grow over time): `image`, `video`, `audio`, `document`
- `data.size_bytes` (integer, required): The stored file's size in bytes. Images are re-encoded on upload, so for those this can differ from the size of the file you sent. Every other kind is stored byte-for-byte.
- `data.width` (nullable integer, required): The stored image's width in pixels. Null for every kind but `image`.
- `data.height` (nullable integer, required): The stored image's height in pixels. Null for every kind but `image`.
- `data.alt_text` (nullable string, required): Default alternative text describing the asset, carried along whenever it is placed. Most mail clients block images by default, so for an image this is often the only thing a recipient reads.
- `data.folder_id` (nullable string, required): The folder the asset is filed in, or null when it sits at the top level of the library. Filing an asset never changes its URL.
- `data.deleted_at` (nullable string, required): When the asset was removed from the library, or null if it is still listed. A removed asset keeps serving at its original URL.
- `next_cursor` (nullable string, required): Cursor for the next page. Pass back as `starting_after` to advance forward. `null` when no next page exists.
- `prev_cursor` (nullable string, required): Cursor for the previous page. Pass back as `ending_before` to step backward. `null` when no previous page exists.
- `refresh_cursor` (nullable string, required): Refresh anchor, the first row of this response. Pass back as `ending_before` to fetch what precedes it in the current sort order. On a newest-first sort those are the items that have appeared since; on any other sort they are the items that sort earlier, so refreshing such a list means re-fetching it instead. Non-`null` whenever `data` is non-empty; `null` only on an empty page. Distinct from `prev_cursor`.
- `total` (nullable integer): Total number of items matching the request's filters across all pages. Present only when `include_total=true` was passed; otherwise `null`.

## Related resources

- [Should I use a Bird SDK or call the API directly?](/explained/platform/should-i-use-an-sdk-or-call-the-api-directly) (answer)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=api-basics)
