Create a media-library asset
Uploads a file to the workspace's media library and returns its permanent public URL. Send a multipart/form-data body with the bytes in the file part.
The file's contents determine its type, and the type determines its kind:
| Kind | Accepted formats | Maximum size |
|---|---|---|
| image | PNG, JPEG, GIF, WebP | 5 MB |
| video | MP4, WebM, QuickTime | 25 MB |
| audio | MP3, M4A, Ogg, WAV | 25 MB |
| document | 25 MB |
Images are re-encoded to remove embedded metadata and apply recorded rotation. Animated GIFs keep their animation, and WebP images become JPEG or PNG. Other files are stored byte-for-byte. Documents are downloads; other media displays inline. Asset bytes and URLs do not change. Upload new content as a new asset. A duplicate file returns the existing asset with 200 OK. An organization can retain at most 100,000 assets per region, including removed library entries whose URLs still serve. Reusing an existing asset does not use another slot.
Include each multipart field at most once. file is required. Optional name is a display name of up to 255 characters and defaults to the filename when omitted or empty after trimming; alt_text allows up to 1,000 characters; folder_id places a new asset in an existing folder. Omit folder_id for the library root. Each text part is limited to 8 KiB before trimming surrounding whitespace. Duplicate uploads retain the existing asset's metadata and folder.
See Manage media-library files for CLI and MCP use.
Request
- Base URL: https://us1.platform.bird.com
- URL: https://us1.platform.bird.com/v1/assets
- Auth: one of:
- HTTP bearer
- API key in cookie bird_session
Headers
Client-supplied key. On operations supporting request deduplication, a retained response is replayed for duplicate requests with the same key within the idempotency window (3 hours by default). This protection requires a workspace, organization, or staff-account scope. User-only and unscoped unauthenticated operations, streams, and operations with a separate replay contract do not use this response replay.
On a supported operation, if idempotency protection is unavailable before execution, the API returns 503 IdempotencyUnavailable (E01033) without executing this attempt. Retry with backoff using the same key and request. An operation that takes effect before its response is retained can still execute again on retry.
Two distinct 409 errors signal misuse:
- request_in_progress (E01004): The same key is currently being processed by a concurrent request. Wait briefly and retry. The lock expires within 30 seconds.
- idempotency_key_reuse (E01005): The same key has already completed against a different request body or method. Generate a new key.
Recommended key format is <event-type>/<entity-id> (for example welcome-user/usr_abc123).
Workspace context for the request. Required for dashboard authentication and master keys. Workspace keys and access tokens already identify their workspace; send that workspace or omit the header. A different one is rejected.
Organization context for the request. Required for dashboard authentication. An API key or access token carries its own organization, so send either that organization or no header at all; a different one is rejected.
Response
An asset with identical contents already existed and was returned unchanged.
Example response
{
"created_at": "2026-05-20T09:14:52Z",
"updated_at": "2026-05-25T16:42:01Z",
"id": "ast_01krdgeqcxet5s7t44vh8rt9mg",
"kind": "image",
"folder_id": "asf_01krdgeqcxet5s7t44vh8rt9mg"
}Changes
No recorded changes to this operation across all 2 revisions of this API.