# Upload media

> Start a media upload (image, GIF or video). Returns a mediaId and an upload URL; PUT the file bytes there, then call media.complete_upload. Video works too.

`media.create_upload` · write

- **MCP tool:** `upload_media`. Loaded by default in MCP clients.
- **REST:** `POST /v1/media/create-upload`
- **CLI:** `xholic media create-upload`
- **Scope:** `write`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `originalFilename` | string ≤ 255 chars | Yes |  |
| `mimeType` | string ≤ 100 chars | Yes |  |
| `byteSize` | integer ≤ 536870912 | Yes |  |
| `kind` | "IMAGE" \\| "VIDEO" | Yes |  |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |
