Strapi plugin logo for Media Library Handler

Media Library Handler

Plugin for handling media library (dirs/files manipulation) through api in Strapi.

strapi-plugin-media-library-handler

Plugin for handling media library (dirs/files manipulation) through api in Strapi.


npm-url

Features

  • Manage folders and files through API.
  • Easy integration with Strapi projects.

Installation

npm i strapi-plugin-media-library-handler

Compatibility

Plugin is compatible with Strapi 5.0.0 and above.

Media & Folder Management API

Configuration

No additional configuration needed, the plugin is automatically enabled after installation.

Generate API Token (with proper permissions for Media section) which would be provided as Authorization header to each API call.

Folders

Create Folder

Create a new folder.

1POST {STRAPI_BASE_URL}/api/media/folders
2Content-Type: application/json

Request Body

1{
2  "name": "My New Folder",
3  "parentId": 123
4}

Response (201)

1{
2  "id": 456,
3  "name": "My New Folder",
4  "parent": null,
5  "createdAt": "2025-05-05T12:34:56.789Z",
6  ...
7}

Errors

  • 400 Bad Request – validation failed.
  • 500 Internal Server Error – unexpected error.

List Folders

Retrieve folders, with optional search and sorting.

1GET {STRAPI_BASE_URL}/api/media/folders?parentId=123&_q=term&sort=name:asc&sort=createdAt:desc

Query Parameters

  • parentId (integer) — optional, filter by parent folder (omit or null for root)
  • _q (string) — optional, full-text search string
  • sort (string) — optional, repeatable. Format: field:asc|desc.

Response (200)

1[
2  {
3    "id": 123,
4    "name": "Root Folder",
5    "children": { "count": 2 },
6    "files":    { "count": 5 },
7    ...
8  }
9]

Get Folder

Get a specific folder by its ID, including nested parents up to 5 levels.

1GET {STRAPI_BASE_URL}/api/media/folders/:id

Path Parameter

  • id (integer) — required, positive folder ID.

Response (200)

1{
2  "id": 123,
3  "name": "Nested Folder",
4  "parent": {
5    "id": 50,
6    "name": "Parent 1",
7    "parent": {
8      "id": 10,
9      "name": "Parent 2"
10      ...
11    }
12  },
13  "children": { "count": 0 },
14  "files":    { "count": 3 },
15  ...
16}

Errors

  • 400 Bad Request – invalid or missing ID.
  • 404 Not Found – folder not found.

Update Folder

Update an existing folder’s name and/or parent.

1PUT {STRAPI_BASE_URL}/api/media/folders/:id
2Content-Type: application/json

Path Parameter

  • id (integer) — required.

Request Body

1{
2  "name": "Renamed Folder",
3  "parentId": 999          
4}

Response (200)

1{
2  "id": 123,
3  "name": "Renamed Folder",
4  "parent": 999,
5  ...
6}

Errors

  • 400 Bad Request – validation failure.
  • 404 Not Found – folder doesn’t exist.

Delete Folder

Delete a single folder.

1DELETE {STRAPI_BASE_URL}/api/media/folders/:id

Path Parameter

  • id (integer) — required.

Response (200)

1[
2  {
3    "id": 123,
4    "name": "Deleted Folder",
5    ...
6  }
7]

Bulk Delete

Delete multiple files and folders in one call.

1POST {STRAPI_BASE_URL}/api/media/bulk-delete
2Content-Type: application/json

Request Body

1{
2  "fileIds":   [1, 2, 3],
3  "folderIds": [10, 11, 12]
4}

Response (200)

1{
2  "deletedFiles":   [ { ... } ],
3  "deletedFolders": [ { ... }]
4}

Bulk Move

Move multiple files and folders to a target folder.

1POST {STRAPI_BASE_URL}/api/media/bulk-move
2Content-Type: application/json

Request Body

1{
2  "fileIds":        [1, 2, 3],
3  "folderIds":      [10, 11, 12],
4  "targetFolderId": 99           
5}

Response (200)

1{
2  "movedFiles":   [ { ... } ],
3  "movedFolders": [ { ... } ]
4}

Get Folder Structure

Retrieve the entire nested folder tree.

1GET {STRAPI_BASE_URL}/api/media/folders-structure

Response (200)

1[
2  {
3    "id": 1,
4    "name": "Root",
5    "children": [
6      { "id": 2, "name": "Child A", "children": [ { ... } ] },
7      ...
8    ]
9  }
10]

Media Files

Upload Media File

Upload a file to a folder.

1POST {STRAPI_BASE_URL}/api/media/files
2Content-Type: multipart/form-data

Form Data

  • file (file) — required.
  • folderId (integer) — optional.
  • alternativeText (string) — optional.
  • caption (string) — optional.
  • skipIfExist (string) — optional, will skip if there is already file existing with same filename, caption and alternativeText (no matter the folderId).

Response (200)

1{
2  "data": [
3    {
4      "id": 321,
5      "name": "image.png",
6      "url": "/uploads/image.png",
7      "folder": 99,
8      ...
9    }
10  ]
11}

Update Media File

Update file metadata (name, alt text, caption, or folder).

1POST {STRAPI_BASE_URL}/api/media/files/:id
2Content-Type: application/json

Path Parameter

  • id (integer) — required.

Request Body

1{
2  "name":            "newname.png",
3  "alternativeText": "An example", 
4  "caption":         "Caption text",
5  "folderId":        99             
6}

Response (200)

1{
2  "data": {
3    "id": 321,
4    "name": "newname.png",
5    "alternativeText": "An example",
6    "caption": "Caption text",
7    "folder": 99,
8    ...
9  }
10}

List Media Files

Retrieve files, with optional search by name, caption or alternativeText, and sorting.

1GET {STRAPI_BASE_URL}/api/media/files?name=some_term&sort=createdAt:desc

Query Parameters

  • name (string) — optional, filter by filename
  • caption (string) — optional, filter by caption
  • alternativeText (string) — optional, filter by alternativeText
  • sort (string) — optional, repeatable. Format: field:asc|desc.

Response (200)

1[
2  {
3    "id": 42,
4    "name": "filename.png",
5    "alternativeText": "marketing_contributors_other_internal",
6    "caption": "some random caption",
7    "folder": {
8      "id": 159,
9      "name": "Base dir"
10    },
11    "createdAt": "2025-04-20T11:22:33.444Z",
12    ...
13  },
14]

Get Media File

Get file metadata (name, alt text, caption, folder, etc).

1GET {STRAPI_BASE_URL}/api/media/files/:id

Path Parameter

  • id (integer) — required.

Response (200)

1{
2  "data": {
3    "id": 321,
4    "name": "newname.png",
5    "alternativeText": "An example",
6    "caption": "Caption text",
7    "folder": 99,
8    "formats": {
9      ...
10    }
11    ...
12  }
13}

Delete Media File

Delete a single media file.

1DELETE {STRAPI_BASE_URL}/api/media/files/:id

Path Parameter

  • id (integer) — required.

Response (200)

1[
2  {
3    "id": 123,
4    "name": "Deleted File",
5    ...
6  }
7]

Error Handling

  • 400 Bad Request: validation errors, missing/invalid params.
  • 404 Not Found: resource not found.
  • 500 Internal Server Error: unexpected server error.

License

This project is licensed under the MIT.

Install now

npm install strapi-plugin-media-library-handler

STATS

1 GitHub star39 weekly downloads

Last updated

25 days ago

Strapi Version

>=5.0.0

Author

github profile image for SamirH
SamirH

Useful links

Create your own plugin

Check out the available plugin resources that will help you to develop your plugin or provider and get it listed on the marketplace.