---
title: "Move media between folders"
method: POST
path: "/api/v1/workspaces/{workspace_id}/media/move"
tags: ["📁 Content Library"]
---

# Move media between folders

`POST /api/v1/workspaces/{workspace_id}/media/move`

## Request

- Base URL: `https://api.contentstudio.io`
- URL: `https://api.contentstudio.io/api/v1/workspaces/{workspace_id}/media/move`
- Auth: API key in header `X-API-Key`

Moves the given media into a folder. Pass folder_id=null to move items to Uncategorized. Note that moving an archived item also restores it from the archive, matching the behaviour of the web app. Reversible.

## Path parameters

- `workspace_id` string, required

## Request body

- object
  - `media_ids` string[], required
  - `folder_id` string, nullable: Destination folder; null moves to Uncategorized

## Response `200`

Media moved. Assets already in the destination are reported under `skipped` rather than failing the request, so a repeated call is a safe no-op.

- object
  - `status` boolean
  - `message` string
  - `moved` integer: Assets whose folder actually changed
  - `skipped` integer: Assets already in the destination folder

## Other responses

- `401`: Unauthorized - API key missing or invalid
- `403`: Forbidden - No access to workspace. Workspace access refusals return `error_code` `WORKSPACE_ACCESS_DENIED`, `WORKSPACE_INVITATION_PENDING`, `WORKSPACE_LOCKED`, `PERMISSION_DENIED`.
- `404`: Media or destination folder not found (MEDIA_NOT_FOUND / FOLDER_NOT_FOUND)
- `422`: Validation error (VALIDATION_ERROR)
- `429`: Too many requests

## Changes

- **2026-09-22** `ad0b687289a3`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/contentstudio/apis/contentstudio-api-v1/changes/api/v1/workspaces/:workspace_id/media/move/post.md)

---

[API](https://skmtc.dev/contentstudio/apis/contentstudio-api-v1.md) - [All operations](https://skmtc.dev/contentstudio/apis/contentstudio-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/contentstudio/apis/contentstudio-api-v1/revisions/2ce09d50369c?raw)
