---
title: "Create a folder in the media library"
method: POST
path: "/v1/asset-folders"
tags: ["asset-folders"]
---

# Create a folder in the media library

`POST /v1/asset-folders`

## Request

- Base URL: `https://us1.platform.bird.com`
- URL: `https://us1.platform.bird.com/v1/asset-folders`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `bird_session`

Creates a folder in the workspace's media library. Omit `parent_id` to create it
at the top level, or name another folder to nest it up to 10 levels deep.
A workspace supports up to 1,000 active folders and 10,000 retained folders,
including deleted folders. Deleting a folder frees an active slot but does
not release retained capacity.

Folders organize the library for the people browsing it. They are never part of
an asset's URL, so filing an asset, renaming a folder, or moving a whole branch
leaves every message that already embeds those assets rendering exactly as it did.

## Headers

- `Idempotency-Key` string
- `X-Workspace-Id` string
- `X-Organization-Id` string

## Request body

- AssetFolderCreate: The folder to create.
  - `name` string, required: The folder's display name. Must be unique among folders sharing the same parent, compared without regard to case. Cannot contain `/`.
  - `parent_id` string

## Response `201`

The created folder.

- AssetFolder: A folder in the workspace's media library. Folders organize assets for the people browsing them and never appear in an asset's URL, so moving an asset between folders leaves every message that already embeds it untouched.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `id` string, required
  - `name` string, required: The folder's display name. Unique among folders sharing the same parent, compared without regard to case.
  - `parent_id` string, required
  - `path` string, required: The folder's location written out from the top level, such as `/Marketing/Logos`. Provided so a caller can display a folder without walking its parents.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Insufficient permissions
- `404`: Resource not found
- `409`: Resource conflict
- `422`: The request has invalid field values, violates a business rule, or carries a query parameter the endpoint does not declare. Field validation errors use `type: validation_error` and include the affected fields in `details`. Business-rule errors identify the failed rule in `type`.
- `429`: Rate limit exceeded
- `500`: Internal server error
- `501`: The operation is not supported
- `503`: The service is temporarily unavailable. If `Retry-After` is present, wait for that delay before retrying; otherwise, retry with exponential backoff. Reuse the same idempotency key and request when retrying a mutation.

---

[API](https://skmtc.dev/messagebird/apis/bird-api.md) · [All operations](https://skmtc.dev/messagebird/apis/bird-api/llms.txt) · [OpenAPI document](https://skmtc.dev/messagebird/apis/bird-api/revisions/6dfce1179799?raw)
