View .md

Plugins endpoints (Admin API)

12 FeatherPanel Admin API endpoints from admin/plugins.php: methods, paths, auth, permissions, rate limits, parameters and responses.

Last synced from FeatherPanel 15b94e9 on .

On this page

Defined in backend/app/routes/admin/plugins.php. Authentication used here: Admin. Read Authentication for how to send credentials and 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/plugins

Auth: AdminPermission: admin.plugins.viewRoute name: admin-pluginsController: PluginsController::indexroute source

Get all installed plugins Retrieve a list of all installed plugins with their configuration, status, dependencies, and missing configurations.

Response data fieldTypeDescription
pluginsobject
curl -X GET "$PANEL_URL/api/admin/plugins" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

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

GET/api/admin/plugins/{identifier}/config

Auth: AdminPermission: admin.plugins.viewRoute name: admin-plugins-configController: PluginsController::getConfigroute source

Get plugin configuration Retrieve detailed configuration information for a specific plugin including settings and configuration schema.

ParameterInTypeRequiredDescription
identifierpathstringyesPlugin identifier
Response data fieldTypeDescription
configPluginInfo
pluginPluginInfo
settingsobjectPlugin settings key-value pairs
configSchemaobject[]Plugin configuration schema
curl -X GET "$PANEL_URL/api/admin/plugins/$IDENTIFIER/config" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Plugin configuration retrieved successfully · 400 Bad request - Invalid plugin identifier · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Plugin not found · 500 Internal server error - Failed to fetch plugin configuration

GET/api/admin/plugins/{identifier}/visibility

Auth: AdminPermission: admin.plugins.viewRoute name: admin-plugins-visibilityController: PluginsController::getVisibilityroute source

Get plugin frontend visibility controls List widgets, sidebar routes, public pages, and UI-pack entries that admins can hide for a plugin.

ParameterInTypeRequiredDescription
identifierpathstringyesPlugin identifier
curl -X GET "$PANEL_URL/api/admin/plugins/$IDENTIFIER/visibility" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Plugin visibility controls retrieved successfully · 404 Plugin not found

POST/api/admin/plugins/{identifier}/settings/set

Auth: AdminPermission: admin.plugins.manageRoute name: admin-plugins-settings-setController: PluginsController::setSettingsroute source

Set plugin setting Set a specific setting value for a plugin. Logs the activity and emits events for tracking.

ParameterInTypeRequiredDescription
identifierpathstringyesPlugin identifier

Request body: PluginSettingUpdate (application/json)

Body fieldTypeRequiredDescription
keystringyesSetting key
valuestringyesSetting value
Response data fieldTypeDescription
identifierstringPlugin identifier
keystringSetting key
valuestringSetting value
curl -X POST "$PANEL_URL/api/admin/plugins/$IDENTIFIER/settings/set" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"key":"","value":""}'

Plugin events: plugins:settings:update

Responses: 200 Plugin setting updated successfully · 400 Bad request - Invalid JSON, missing key/value, invalid plugin identifier, or a value that fails the conf.yml required/validation rules (PLUGIN_SETTING_INVALID) · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Plugin not found · 500 Internal server error - Failed to update setting

POST/api/admin/plugins/{identifier}/settings/remove

Auth: AdminPermission: admin.plugins.manageRoute name: admin-plugins-settings-removeController: PluginsController::removeSettingsroute source

Remove plugin setting Remove a specific setting from a plugin. Logs the activity and emits events for tracking.

ParameterInTypeRequiredDescription
identifierpathstringyesPlugin identifier

Request body: PluginSettingRemove (application/json)

Body fieldTypeRequiredDescription
keystringyesSetting key to remove
Response data fieldTypeDescription
identifierstringPlugin identifier
keystringRemoved setting key
curl -X POST "$PANEL_URL/api/admin/plugins/$IDENTIFIER/settings/remove" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"key":""}'

Plugin events: plugins:settings:delete

Responses: 200 Plugin setting removed successfully · 400 Bad request - Invalid JSON, missing key, or invalid plugin identifier · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Plugin not found · 500 Internal server error - Failed to remove setting

POST/api/admin/plugins/{identifier}/spell-restrictions

Auth: AdminPermission: admin.plugins.manageRoute name: admin-plugins-spell-restrictionsController: PluginsController::setSpellRestrictionsroute source

Set plugin spell restrictions for server sidebar Configure which server spells (server types) a plugin's sidebar items should be shown on. If empty, plugin shows on all server types. If set, plugin only shows on specified spell IDs.

ParameterInTypeRequiredDescription
identifierpathstringyesPlugin identifier
Body fieldTypeRequiredDescription
allowedOnlyOnSpellsinteger[]noArray of spell IDs where this plugin should be shown. Empty array means show on all spells.
Response data fieldTypeDescription
identifierstringPlugin identifier
allowedOnlyOnSpellsinteger[]Updated spell IDs
curl -X POST "$PANEL_URL/api/admin/plugins/$IDENTIFIER/spell-restrictions" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"allowedOnlyOnSpells":[]}'

Responses: 200 Spell restrictions updated successfully · 400 Bad request - Invalid JSON or invalid plugin identifier · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Plugin not found · 500 Internal server error - Failed to update spell restrictions

POST/api/admin/plugins/{identifier}/uninstall

Auth: AdminPermission: admin.plugins.manageRoute name: admin-plugins-uninstallController: PluginsController::uninstallroute source

Uninstall addon Completely remove an addon from the system including its files, public assets, and database migrations. Calls the plugin uninstall hook if available.

ParameterInTypeRequiredDescription
identifierpathstringyesAddon identifier to uninstall
Response data fieldTypeDescription
messagestringSuccess message
curl -X POST "$PANEL_URL/api/admin/plugins/$IDENTIFIER/uninstall" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Addon uninstalled successfully · 400 Bad request - Invalid addon identifier · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Addon not found · 500 Internal server error - Failed to uninstall addon

GET/api/admin/plugins/{identifier}/export

Auth: AdminPermission: admin.plugins.manageRoute name: admin-plugins-exportController: PluginsController::exportroute source

Export addon Export an installed addon as a password-protected .fpa file for backup or distribution purposes.

ParameterInTypeRequiredDescription
identifierpathstringyesAddon identifier to export
curl -X GET "$PANEL_URL/api/admin/plugins/$IDENTIFIER/export" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Addon exported successfully · 400 Bad request - Invalid addon identifier · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Addon not found · 500 Internal server error - Failed to export addon

POST/api/admin/plugins/upload/install

Auth: AdminPermission: admin.plugins.manageRoute name: admin-plugins-upload-installController: PluginsController::uploadInstallroute source

Install addon from uploaded file Upload and install an addon from a .fpa file. Extracts the password-protected archive and installs the addon.

Body fieldTypeRequiredDescription
filestring (binary)yesAddon .fpa file to upload
Response data fieldTypeDescription
identifierstringInstalled addon identifier
curl -X POST "$PANEL_URL/api/admin/plugins/upload/install" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -F "file=@./file"

Responses: 201 Addon installed successfully · 400 Bad request - No file uploaded, file upload error, or invalid file type · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 409 Conflict - Addon already installed · 422 Unprocessable Entity - Failed to extract addon package or migrations failed · 500 Internal server error - Failed to install addon

POST/api/admin/plugins/upload/install-url

Auth: AdminPermission: admin.plugins.manageRoute name: admin-plugins-upload-install-urlController: PluginsController::uploadInstallFromUrlroute source

Install addon from URL Download and install an addon from a remote URL. Downloads the file and extracts the password-protected archive.

Request body: UrlInstall (application/json)

Body fieldTypeRequiredDescription
urlstring (uri)yesURL to download addon from
Response data fieldTypeDescription
identifierstringInstalled addon identifier
curl -X POST "$PANEL_URL/api/admin/plugins/upload/install-url" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"url":""}'

Responses: 201 Addon installed successfully · 400 Bad request - Invalid URL format · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 409 Conflict - Addon already installed · 422 Unprocessable Entity - Failed to extract addon package or migrations failed · 500 Internal server error - Failed to install addon or download file from URL

POST/api/admin/plugins/{identifier}/resync-symlinks

Auth: AdminPermission: admin.plugins.manageRoute name: admin-plugins-resync-symlinksController: PluginsController::resyncSymlinksroute source

Resync plugin symlinks Recreate symlinks for plugin public assets and frontend components without reinstalling the plugin. Useful when symlinks are broken or missing.

ParameterInTypeRequiredDescription
identifierpathstringyesPlugin identifier to resync symlinks for
Response data fieldTypeDescription
identifierstringPlugin identifier
public_assetsbooleanWhether public assets symlink was created
frontend_componentsbooleanWhether frontend components symlink was created
curl -X POST "$PANEL_URL/api/admin/plugins/$IDENTIFIER/resync-symlinks" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Symlinks resynced successfully · 400 Bad request - Invalid plugin identifier · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Plugin not found · 500 Internal server error - Failed to resync symlinks

GET/api/admin/plugins/previously-installed

Auth: AdminPermission: admin.plugins.viewRoute name: admin-plugins-previously-installedController: CloudPluginsController::getPreviouslyInstalledroute source

Get previously installed plugins Retrieve a list of plugins that were previously installed (including uninstalled ones) to help users restore them after FeatherPanel updates.

Response data fieldTypeDescription
pluginsobject[]
curl -X GET "$PANEL_URL/api/admin/plugins/previously-installed" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Previously installed plugins retrieved successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 500 Internal server error