---
title: "Upload media asset"
method: POST
path: "/v1/media/upload"
tags: ["Media"]
---

# Upload media asset

`POST /v1/media/upload`

Upload a media file and create a media asset. Requires a private API key. Maximum file size is 5 MiB.

## Response `201`

Media asset uploaded successfully

- MediaResponse
  - `media` Media, required
    - `id` string, required
    - `name` string, required
    - `url` string, uri, required
    - `alt` string, nullable, required
    - `size` integer, required — File size in bytes
    - `mimeType` string, nullable, required
    - `width` integer, nullable, required
    - `height` integer, nullable, required
    - `duration` integer, nullable, required — Duration in milliseconds
    - `blurHash` string, nullable, required
    - `type` 'image' | 'video' | 'audio' | 'document', required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required

## Other responses

- `400` — Invalid upload request
- `403` — Public API key used for write operation
- `413` — File exceeds the upload size limit
- `500` — Server error

---

[API](https://skmtc.dev/marblecms/apis/marble-api.md) · [All operations](https://skmtc.dev/marblecms/apis/marble-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/marblecms/marble-api/revisions/ce3a22722c0e/schema)
