# Plugin Manager endpoints (Admin API)

> 11 FeatherPanel Admin API endpoints from admin/plugin-manager.php: methods, paths, auth, permissions, rate limits, parameters and responses.

Source: https://featherpanel.com/docs/api/reference/admin/plugin-manager/

Defined in [`backend/app/routes/admin/plugin-manager.php`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php). Authentication used here: **Admin**. Read [Authentication](https://featherpanel.com/docs/api/authentication/) for how to send credentials and [Rate limits and errors](https://featherpanel.com/docs/api/rate-limits-and-errors/) for the response envelope.

Paths, methods, permissions and rate limits come from the route file. Summaries, parameters and response codes come from the OpenAPI annotations on the controllers; endpoints without annotations show only what the route file declares.

## Endpoints

### GET `/api/admin/plugin-manager`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-manager-list`
- Controller: [`PluginManagerController::getPlugins`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L25)

**Get all plugins** Retrieve a list of all installed plugins with their configuration, status, dependencies, and file information. Only available in developer mode.

```bash
curl -X GET "$PANEL_URL/api/admin/plugin-manager" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Plugins retrieved successfully · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `500` Internal server error - Failed to fetch plugins

### POST `/api/admin/plugin-manager`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-manager-create`
- Controller: [`PluginManagerController::createPlugin`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L35)

**Create new plugin** Create a new plugin with complete directory structure, configuration files, and example code. Only available in developer mode.

Request body: [`PluginCreate`](https://featherpanel.com/docs/api/schemas/#schema-plugincreate) (application/json)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `identifier` | string | yes | Plugin identifier |
| `name` | string | yes | Plugin name |
| `description` | string | no | Plugin description |
| `version` | string | no | Plugin version |
| `author` | string\[\] | no | Plugin authors |
| `flags` | string\[\] | no | Plugin flags |
| `dependencies` | string\[\] | no | Plugin dependencies |
| `requiredConfigs` | string\[\] | no | Required configuration keys |
| `configSchema` | object\[\] | no | Configuration schema |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `identifier` | string | Plugin identifier |
| `path` | string | Plugin directory path |
| `files_created` | object\[\] |  |
| `migration_result` | object |  |

```bash
curl -X POST "$PANEL_URL/api/admin/plugin-manager" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"identifier":"","name":"","description":"","version":"","author":[],"flags":[],"dependencies":[],"requiredConfigs":[],"configSchema":[]}'
```

Plugin events: [`featherpanel:admin:plugin_manager:plugin:created`](https://featherpanel.com/docs/plugins/events/plugin-manager/#plugin-created)

Responses: `201` Plugin created successfully · `400` Bad request - Missing required fields, invalid identifier, or validation errors · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `409` Conflict - Plugin already exists · `500` Internal server error - Failed to create plugin

### GET `/api/admin/plugin-manager/{identifier}`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-manager-get`
- Controller: [`PluginManagerController::getPluginDetails`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L46)

**Get plugin details** Retrieve detailed information about a specific plugin including configuration, status, dependencies, settings, and files. Only available in developer mode.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `identifier` | path | string | yes | Plugin identifier |

Response data: [`Plugin`](https://featherpanel.com/docs/api/schemas/#schema-plugin)

| Response `data` field | Type | Description |
| --- | --- | --- |
| `name` | string | Plugin name |
| `identifier` | string | Plugin identifier |
| `description` | string | Plugin description |
| `version` | string | Plugin version |
| `target` | string | Target FeatherPanel version |
| `author` | string\[\] | Plugin authors |
| `icon` | string | Plugin icon URL |
| `flags` | string\[\] | Plugin flags |
| `dependencies` | string\[\] | Plugin dependencies |
| `requiredConfigs` | string\[\] | Required configuration keys |
| `status` | string | Plugin status |
| `dependencies_met` | boolean | Whether dependencies are met |
| `required_configs_set` | boolean | Whether required configs are set |
| `settings` | object | Plugin settings |
| `config` | object\[\] | Plugin configuration schema |

```bash
curl -X GET "$PANEL_URL/api/admin/plugin-manager/$IDENTIFIER" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Plugin details retrieved successfully · `400` Bad request - Invalid plugin identifier · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `404` Plugin not found · `500` Internal server error - Failed to fetch plugin details

### PUT `/api/admin/plugin-manager/{identifier}`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-manager-update`
- Controller: [`PluginManagerController::updatePlugin`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L56)

**Update plugin configuration** Update an existing plugin's configuration including metadata, dependencies, and configuration schema. Only available in developer mode.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `identifier` | path | string | yes | Plugin identifier |

Request body: [`PluginUpdate`](https://featherpanel.com/docs/api/schemas/#schema-pluginupdate) (application/json)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no | Plugin name |
| `description` | string | no | Plugin description |
| `version` | string | no | Plugin version |
| `target` | string | no | Target FeatherPanel version |
| `author` | string\[\] | no | Plugin authors |
| `flags` | string\[\] | no | Plugin flags |
| `dependencies` | string\[\] | no | Plugin dependencies |
| `requiredConfigs` | string\[\] | no | Required configuration keys |
| `configSchema` | object\[\] | no | Configuration schema |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `identifier` | string | Plugin identifier |
| `config` | Plugin |  |

```bash
curl -X PUT "$PANEL_URL/api/admin/plugin-manager/$IDENTIFIER" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"","description":"","version":"","target":"","author":[],"flags":[],"dependencies":[],"requiredConfigs":[],"configSchema":[]}'
```

Plugin events: [`featherpanel:admin:plugin_manager:plugin:updated`](https://featherpanel.com/docs/plugins/events/plugin-manager/#plugin-updated)

Responses: `200` Plugin updated successfully · `400` Bad request - Invalid plugin identifier, invalid configuration, or validation errors · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `404` Plugin not found · `500` Internal server error - Failed to update plugin

### PATCH `/api/admin/plugin-manager/{identifier}`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-manager-update`
- Controller: [`PluginManagerController::updatePlugin`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L56)

**Update plugin configuration** Update an existing plugin's configuration including metadata, dependencies, and configuration schema. Only available in developer mode.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `identifier` | path | string | yes | Plugin identifier |

Request body: [`PluginUpdate`](https://featherpanel.com/docs/api/schemas/#schema-pluginupdate) (application/json)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no | Plugin name |
| `description` | string | no | Plugin description |
| `version` | string | no | Plugin version |
| `target` | string | no | Target FeatherPanel version |
| `author` | string\[\] | no | Plugin authors |
| `flags` | string\[\] | no | Plugin flags |
| `dependencies` | string\[\] | no | Plugin dependencies |
| `requiredConfigs` | string\[\] | no | Required configuration keys |
| `configSchema` | object\[\] | no | Configuration schema |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `identifier` | string | Plugin identifier |
| `config` | Plugin |  |

```bash
curl -X PATCH "$PANEL_URL/api/admin/plugin-manager/$IDENTIFIER" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"","description":"","version":"","target":"","author":[],"flags":[],"dependencies":[],"requiredConfigs":[],"configSchema":[]}'
```

Plugin events: [`featherpanel:admin:plugin_manager:plugin:updated`](https://featherpanel.com/docs/plugins/events/plugin-manager/#plugin-updated)

Responses: `200` Plugin updated successfully · `400` Bad request - Invalid plugin identifier, invalid configuration, or validation errors · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `404` Plugin not found · `500` Internal server error - Failed to update plugin

### PUT `/api/admin/plugin-manager/{identifier}/settings`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-manager-settings`
- Controller: [`PluginManagerController::updatePluginSettings`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L67)

**Update plugin settings** Update plugin-specific settings by providing key-value pairs. Only available in developer mode.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `identifier` | path | string | yes | Plugin identifier |

Request body: [`PluginSettingsUpdate`](https://featherpanel.com/docs/api/schemas/#schema-pluginsettingsupdate) (application/json)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `settings` | object | yes | Plugin settings key-value pairs |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `identifier` | string | Plugin identifier |
| `updated_settings` | string\[\] | List of updated setting keys |

```bash
curl -X PUT "$PANEL_URL/api/admin/plugin-manager/$IDENTIFIER/settings" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"settings":{}}'
```

Plugin events: [`featherpanel:admin:plugin_manager:settings:updated`](https://featherpanel.com/docs/plugins/events/plugin-manager/#plugin-settings-updated)

Responses: `200` Plugin settings updated successfully · `400` Bad request - Invalid plugin identifier or missing settings data · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `500` Internal server error - Failed to update plugin settings

### PATCH `/api/admin/plugin-manager/{identifier}/settings`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-manager-settings`
- Controller: [`PluginManagerController::updatePluginSettings`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L67)

**Update plugin settings** Update plugin-specific settings by providing key-value pairs. Only available in developer mode.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `identifier` | path | string | yes | Plugin identifier |

Request body: [`PluginSettingsUpdate`](https://featherpanel.com/docs/api/schemas/#schema-pluginsettingsupdate) (application/json)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `settings` | object | yes | Plugin settings key-value pairs |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `identifier` | string | Plugin identifier |
| `updated_settings` | string\[\] | List of updated setting keys |

```bash
curl -X PATCH "$PANEL_URL/api/admin/plugin-manager/$IDENTIFIER/settings" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"settings":{}}'
```

Plugin events: [`featherpanel:admin:plugin_manager:settings:updated`](https://featherpanel.com/docs/plugins/events/plugin-manager/#plugin-settings-updated)

Responses: `200` Plugin settings updated successfully · `400` Bad request - Invalid plugin identifier or missing settings data · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `500` Internal server error - Failed to update plugin settings

### GET `/api/admin/plugin-manager/flags`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-manager-flags`
- Controller: [`PluginManagerController::getAvailableFlags`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L78)

**Get available plugin flags** Retrieve a list of all available plugin flags that can be used when creating or updating plugins.

```bash
curl -X GET "$PANEL_URL/api/admin/plugin-manager/flags" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Available flags retrieved successfully · `401` Unauthorized · `403` Forbidden - Insufficient permissions · `500` Internal server error - Failed to fetch flags

### GET `/api/admin/plugin-manager/{identifier}/validate`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-manager-validate`
- Controller: [`PluginManagerController::validatePlugin`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L88)

**Validate plugin** Validate a plugin's configuration, dependencies, required configs, identifier, flags, and file structure. Only available in developer mode.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `identifier` | path | string | yes | Plugin identifier |

Response data: [`PluginValidation`](https://featherpanel.com/docs/api/schemas/#schema-pluginvalidation)

| Response `data` field | Type | Description |
| --- | --- | --- |
| `config_valid` | boolean | Whether plugin configuration is valid |
| `dependencies_met` | boolean | Whether dependencies are met |
| `required_configs_set` | boolean | Whether required configs are set |
| `identifier_valid` | boolean | Whether identifier is valid |
| `flags_valid` | boolean | Whether flags are valid |
| `files_exist` | boolean | Whether required files exist |
| `overall_valid` | boolean | Overall validation status |

```bash
curl -X GET "$PANEL_URL/api/admin/plugin-manager/$IDENTIFIER/validate" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Plugin validation completed · `400` Bad request - Invalid plugin identifier · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `404` Plugin not found · `500` Internal server error - Failed to validate plugin

### GET `/api/admin/plugin-tools/creation-options`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-creation-options`
- Controller: [`PluginManagerController::getPluginCreationOptions`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L100)

**Get plugin creation options** Retrieve available options for creating different types of plugin files including field definitions and validation rules. Only available in developer mode.

Response data: [`PluginCreationOptions`](https://featherpanel.com/docs/api/schemas/#schema-plugincreationoptions)

| Response `data` field | Type | Description |
| --- | --- | --- |
| `migration` | object |  |
| `cron` | object |  |
| `command` | object |  |
| `public_file` | object |  |

```bash
curl -X GET "$PANEL_URL/api/admin/plugin-tools/creation-options" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Plugin creation options retrieved successfully · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `500` Internal server error - Failed to get creation options

### POST `/api/admin/plugin-tools/create-file`

- Auth: Admin
- Permission: `admin.root`
- Route name: `admin-plugin-create-file`
- Controller: [`PluginManagerController::createPluginFile`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PluginManagerController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/plugin-manager.php#L110)

**Create plugin file** Create various types of plugin files including migrations, cron jobs, CLI commands, or upload public files. Only available in developer mode.

Request body: [`PluginFileCreate`](https://featherpanel.com/docs/api/schemas/#schema-pluginfilecreate) (multipart/form-data)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `plugin_id` | string | yes | Plugin identifier |
| `file_type` | string | yes | File type to create |
| `name` | string | no | File name (required for migration, cron, command) |
| `description` | string | no | File description |
| `schedule` | string | no | Schedule for cron jobs |
| `file` | string (binary) | no | File to upload (for public\_file type) |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `success` | boolean | Whether the operation was successful |
| `filename` | string | Created file name |
| `filepath` | string | Full file path |
| `type` | string | File type created |
| `original_name` | string | Original file name (for uploads) |
| `size` | integer | File size in bytes |

```bash
curl -X POST "$PANEL_URL/api/admin/plugin-tools/create-file" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -F "plugin_id=" \
  -F "file_type=" \
  -F "name=" \
  -F "description=" \
  -F "schedule=" \
  -F "file=@./file"
```

Plugin events: [`featherpanel:admin:plugin_manager:file:created`](https://featherpanel.com/docs/plugins/events/plugin-manager/#plugin-file-created)

Responses: `200` Plugin file created successfully · `400` Bad request - Missing required fields, invalid file type, or validation errors · `401` Unauthorized · `403` Forbidden - Developer mode not enabled or insufficient permissions · `404` Plugin not found · `500` Internal server error - Failed to create plugin file
