# ServerEvent events

> 51 FeatherPanel plugin events on ServerEvent (49 emitted by the core): the event names, the arguments each listener gets, where they fire and a PHP listener for each.

Source: https://featherpanel.com/docs/plugins/events/server/

Part of the [plugin events reference](https://featherpanel.com/docs/plugins/events/). Listeners get the payload values as positional arguments in the order shown, cannot cancel the action, and must catch their own exceptions. 2 of these events are declared but no code emits them yet; they are marked not emitted.

## Setup

Import `ServerEvent` in your entry class and register listeners in `processEvents()`:

```php
<?php

namespace App\Addons\myplugin;

use App\App;
use App\Plugins\AppPlugin;
use App\Plugins\PluginEvents;
use App\Plugins\Events\Events\ServerEvent;

class MyPlugin implements AppPlugin
{
    public static function processEvents(PluginEvents $event): void
    {
        $event->on(ServerEvent::onServerAllocationCreated(), function ($userUuid, $serverUuid, $allocationId): void {
            App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:allocation:create ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'allocation_id' => $allocationId]));
        });
    }

    public static function pluginInstall(): void
    {
    }

    public static function pluginUninstall(): void
    {
    }
}
```

## `ServerEvent::onServerAllocationCreated()`

- Name: `featherpanel:server:allocation:create`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L27)

Docblock: string user uuid, string server uuid, int allocation id.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `allocation_id` | `$allocationId` | `int`from docblock |

When it fires (2 sites)

-   [`ServerAllocationController::autoAllocate`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerAllocationController.php#L893)[`POST /api/user/servers/{uuidShort}/allocations/auto`](https://featherpanel.com/docs/api/reference/user/server/allocations/#post-user-servers-uuidShort-allocations-auto)
-   [`AutoAllocateTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/AutoAllocateTool.php#L180)

```php
$event->on(ServerEvent::onServerAllocationCreated(), function ($userUuid, $serverUuid, $allocationId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:allocation:create ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'allocation_id' => $allocationId]));
});
```

## `ServerEvent::onServerAllocationUpdated()`

- Name: `featherpanel:server:allocation:update`
- not emitted
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L35)

Docblock: string user uuid, string server uuid, int allocation id.

```php
$event->on(ServerEvent::onServerAllocationUpdated(), function (...$args): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:allocation:update ' . json_encode($args));
});
```

No code emits this event yet, so the arguments are unknown. The listener accepts any.

## `ServerEvent::onServerBackupLocked()`

- Name: `featherpanel:server:backup:lock`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L91)

Docblock: string user uuid, string server uuid, string backup uuid.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `backup_uuid` | `$backupUuid` | `string` |

When it fires (1 site)

-   [`ServerBackupController::lockBackup`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerBackupController.php#L927)[`POST /api/user/servers/{uuidShort}/backups/{backupUuid}/lock`](https://featherpanel.com/docs/api/reference/user/server/backups/#post-user-servers-uuidShort-backups-backupUuid-lock)

```php
$event->on(ServerEvent::onServerBackupLocked(), function ($userUuid, $serverUuid, $backupUuid): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:backup:lock ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'backup_uuid' => $backupUuid]));
});
```

## `ServerEvent::onServerBackupUnlocked()`

- Name: `featherpanel:server:backup:unlock`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L99)

Docblock: string user uuid, string server uuid, string backup uuid.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `backup_uuid` | `$backupUuid` | `string` |

When it fires (1 site)

-   [`ServerBackupController::unlockBackup`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerBackupController.php#L1036)[`POST /api/user/servers/{uuidShort}/backups/{backupUuid}/unlock`](https://featherpanel.com/docs/api/reference/user/server/backups/#post-user-servers-uuidShort-backups-backupUuid-unlock)

```php
$event->on(ServerEvent::onServerBackupUnlocked(), function ($userUuid, $serverUuid, $backupUuid): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:backup:unlock ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'backup_uuid' => $backupUuid]));
});
```

## `ServerEvent::onServerCreated()`

- Name: `featherpanel:server:created`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L371)

Docblock: int server id, array server data, array created by.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server_id` | `$serverId` | `int`from docblock |
| 2 | `server_data` | `$serverData` | `array`from docblock |
| 3 | `created_by` | `$createdBy` | `array`from docblock |

When it fires (2 sites)

-   [`PterodactylImporterController::importServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/PterodactylImporterController.php#L1604)[`POST /api/admin/pterodactyl-importer/import-server`](https://featherpanel.com/docs/api/reference/admin/pterodactyl-importer/#post-admin-pterodactyl-importer-import-server)
-   [`ServersController::create`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/ServersController.php#L1272)[`PUT /api/admin/servers`](https://featherpanel.com/docs/api/reference/admin/servers/#put-admin-servers)

```php
$event->on(ServerEvent::onServerCreated(), function ($serverId, $serverData, $createdBy): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:created ' . json_encode(['server_id' => $serverId, 'server_data' => $serverData, 'created_by' => $createdBy]));
});
```

## `ServerEvent::onServerDeleted()`

- Name: `featherpanel:server:delete`
- emitted at 3 sites
- 2 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L163)

Docblock: string user uuid, string server uuid.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server` | `$server` | `string`from docblock |
| 2 | `deleted_by` | `$deletedBy` | `string`from docblock |

| Arguments passed | Emitted from |
| --- | --- |
| `server`, `deleted_by` | 
`ServersController::delete`

`ServerUserController::deleteServer`

 |
| `server`, `deleted_by`, `hard_delete` | 

`ServersController::hardDelete`

 |

When it fires (3 sites)

-   [`ServersController::delete`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/ServersController.php#L2169)[`DELETE /api/admin/servers/{id}`](https://featherpanel.com/docs/api/reference/admin/servers/#delete-admin-servers-id)
-   [`ServersController::hardDelete`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/ServersController.php#L2289)[`DELETE /api/admin/servers/{id}/hard`](https://featherpanel.com/docs/api/reference/admin/servers/#delete-admin-servers-id-hard)
-   [`ServerUserController::deleteServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php#L2539)[`DELETE /api/user/servers/{uuidShort}`](https://featherpanel.com/docs/api/reference/user/server/core/#delete-user-servers-uuidShort)

```php
$event->on(ServerEvent::onServerDeleted(), function ($server, $deletedBy, ...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:delete ' . json_encode(['server' => $server, 'deleted_by' => $deletedBy]));
});
```

## `ServerEvent::onServerFileCompressed()`

- Name: `featherpanel:server:file:compress`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L339)

Docblock: string user uuid, string server uuid, string file path.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `file_path` | `$filePath` | `string`from docblock |

When it fires (2 sites)

-   [`ServerFilesController::compressFiles`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L1531)[`POST /api/user/servers/{uuidShort}/compress-files`](https://featherpanel.com/docs/api/reference/user/server/files/#post-user-servers-uuidShort-compress-files)
-   [`CompressFilesTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/CompressFilesTool.php#L187)

```php
$event->on(ServerEvent::onServerFileCompressed(), function ($userUuid, $serverUuid, $filePath): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:file:compress ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'file_path' => $filePath]));
});
```

## `ServerEvent::onServerFileDecompressed()`

- Name: `featherpanel:server:file:decompress`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L347)

Docblock: string user uuid, string server uuid, string file path.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `file_path` | `$filePath` | `string`from docblock |

When it fires (2 sites)

-   [`ServerFilesController::decompressArchive`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L1644)[`POST /api/user/servers/{uuidShort}/decompress-archive`](https://featherpanel.com/docs/api/reference/user/server/files/#post-user-servers-uuidShort-decompress-archive)
-   [`DecompressArchiveTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/DecompressArchiveTool.php#L164)

```php
$event->on(ServerEvent::onServerFileDecompressed(), function ($userUuid, $serverUuid, $filePath): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:file:decompress ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'file_path' => $filePath]));
});
```

## `ServerEvent::onServerFilePermissionsChanged()`

- Name: `featherpanel:server:file:permissions`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L355)

Docblock: string user uuid, string server uuid, string file path, string permissions.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `file_path` | `$filePath` | `string`from docblock |
| 4 | `permissions` | `$permissions` | `array` |

When it fires (1 site)

-   [`ServerFilesController::changeFilePermissions`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L1863)[`POST /api/user/servers/{uuidShort}/change-permissions`](https://featherpanel.com/docs/api/reference/user/server/files/#post-user-servers-uuidShort-change-permissions)

```php
$event->on(ServerEvent::onServerFilePermissionsChanged(), function ($userUuid, $serverUuid, $filePath, $permissions): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:file:permissions ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'file_path' => $filePath, 'permissions' => $permissions]));
});
```

## `ServerEvent::onServerFilesCopied()`

- Name: `featherpanel:server:files:copy`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L331)

Docblock: string user uuid, string server uuid, array file paths.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `file_paths` | `$filePaths` | `array` |

When it fires (2 sites)

-   [`ServerFilesController::copyFiles`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L1316)[`POST /api/user/servers/{uuidShort}/copy-files`](https://featherpanel.com/docs/api/reference/user/server/files/#post-user-servers-uuidShort-copy-files)
-   [`CopyFilesTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/CopyFilesTool.php#L184)

```php
$event->on(ServerEvent::onServerFilesCopied(), function ($userUuid, $serverUuid, $filePaths): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:files:copy ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'file_paths' => $filePaths]));
});
```

## `ServerEvent::onServerLifecycleHookCompleted()`

- Name: `featherpanel:server:lifecycle-hook:completed`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L251)

Docblock: string user uuid, string server uuid, string power action, int hook id, string hook type.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `power_action` | `$powerAction` | `string` |
| 4 | `hook_id` | `$hookId` | `int`from docblock |
| 5 | `hook_type` | `$hookType` | `string`from docblock |

When it fires (1 site)

-   [`LifecycleHookExecutorService::executeHookPipeline`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Server/LifecycleHookExecutorService.php#L277) via `emitHookEvent()`

```php
$event->on(ServerEvent::onServerLifecycleHookCompleted(), function ($userUuid, $serverUuid, $powerAction, $hookId, $hookType): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:lifecycle-hook:completed ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'power_action' => $powerAction, 'hook_id' => $hookId, 'hook_type' => $hookType]));
});
```

## `ServerEvent::onServerLifecycleHookFailed()`

- Name: `featherpanel:server:lifecycle-hook:failed`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L259)

Docblock: string user uuid, string server uuid, string power action, int hook id, string hook type, string error. (the emitter passes 7 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | not declared |
| 2 | `server_uuid` | `$serverUuid` | not declared |
| 3 | `power_action` | `$powerAction` | `string` |
| 4 | `hook_id` | `$hookId` | not declared |
| 5 | `hook_type` | `$hookType` | not declared |
| 6 | `step_id` | `$stepId` | not declared |
| 7 | `error` | `$error` | not declared |

When it fires (1 site)

-   [`LifecycleHookExecutorService::executeHookPipeline`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Server/LifecycleHookExecutorService.php#L261) via `emitHookEvent()`

```php
$event->on(ServerEvent::onServerLifecycleHookFailed(), function ($userUuid, $serverUuid, $powerAction, $hookId, $hookType, $stepId, $error): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:lifecycle-hook:failed ' . json_encode(['power_action' => $powerAction]));
});
```

## `ServerEvent::onServerLifecycleHookStarted()`

- Name: `featherpanel:server:lifecycle-hook:started`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L243)

Docblock: string user uuid, string server uuid, string power action, int hook id, string hook type.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `power_action` | `$powerAction` | `string` |
| 4 | `hook_id` | `$hookId` | `int`from docblock |
| 5 | `hook_type` | `$hookType` | `string`from docblock |

When it fires (1 site)

-   [`LifecycleHookExecutorService::executeHookPipeline`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Server/LifecycleHookExecutorService.php#L247) via `emitHookEvent()`

```php
$event->on(ServerEvent::onServerLifecycleHookStarted(), function ($userUuid, $serverUuid, $powerAction, $hookId, $hookType): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:lifecycle-hook:started ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'power_action' => $powerAction, 'hook_id' => $hookId, 'hook_type' => $hookType]));
});
```

## `ServerEvent::onServerLifecycleHookStepCompleted()`

- Name: `featherpanel:server:lifecycle-hook:step:completed`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L275)

Docblock: string user uuid, string server uuid, string power action, int hook id, int step id, string task type. (the emitter passes 7 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | not declared |
| 2 | `server_uuid` | `$serverUuid` | not declared |
| 3 | `power_action` | `$powerAction` | `string` |
| 4 | `hook_id` | `$hookId` | not declared |
| 5 | `hook_type` | `$hookType` | not declared |
| 6 | `step_id` | `$stepId` | not declared |
| 7 | `task_type` | `$taskType` | not declared |

When it fires (1 site)

-   [`LifecycleHookExecutorService::executeStep`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Server/LifecycleHookExecutorService.php#L321) via `emitHookEvent()`

```php
$event->on(ServerEvent::onServerLifecycleHookStepCompleted(), function ($userUuid, $serverUuid, $powerAction, $hookId, $hookType, $stepId, $taskType): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:lifecycle-hook:step:completed ' . json_encode(['power_action' => $powerAction]));
});
```

## `ServerEvent::onServerLifecycleHookStepFailed()`

- Name: `featherpanel:server:lifecycle-hook:step:failed`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L283)

Docblock: string user uuid, string server uuid, string power action, int hook id, int step id, string task type, string error. (the emitter passes 9 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | not declared |
| 2 | `server_uuid` | `$serverUuid` | not declared |
| 3 | `power_action` | `$powerAction` | `string` |
| 4 | `hook_id` | `$hookId` | not declared |
| 5 | `hook_type` | `$hookType` | not declared |
| 6 | `step_id` | `$stepId` | not declared |
| 7 | `task_type` | `$taskType` | not declared |
| 8 | `error` | `$error` | not declared |
| 9 | `continued` | `$continued` | not declared |

When it fires (1 site)

-   [`LifecycleHookExecutorService::executeStep`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Server/LifecycleHookExecutorService.php#L328) via `emitHookEvent()`

```php
$event->on(ServerEvent::onServerLifecycleHookStepFailed(), function ($userUuid, $serverUuid, $powerAction, $hookId, $hookType, $stepId, $taskType, $error, $continued): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:lifecycle-hook:step:failed ' . json_encode(['power_action' => $powerAction]));
});
```

## `ServerEvent::onServerLifecycleHookStepStarted()`

- Name: `featherpanel:server:lifecycle-hook:step:started`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L267)

Docblock: string user uuid, string server uuid, string power action, int hook id, int step id, string task type. (the emitter passes 8 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | not declared |
| 2 | `server_uuid` | `$serverUuid` | not declared |
| 3 | `power_action` | `$powerAction` | `string` |
| 4 | `hook_id` | `$hookId` | not declared |
| 5 | `hook_type` | `$hookType` | not declared |
| 6 | `step_id` | `$stepId` | not declared |
| 7 | `task_type` | `$taskType` | not declared |
| 8 | `sequence_id` | `$sequenceId` | not declared |

When it fires (1 site)

-   [`LifecycleHookExecutorService::executeStep`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Server/LifecycleHookExecutorService.php#L303) via `emitHookEvent()`

```php
$event->on(ServerEvent::onServerLifecycleHookStepStarted(), function ($userUuid, $serverUuid, $powerAction, $hookId, $hookType, $stepId, $taskType, $sequenceId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:lifecycle-hook:step:started ' . json_encode(['power_action' => $powerAction]));
});
```

## `ServerEvent::onServerPowerAction()`

- Name: `featherpanel:server:power:action`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L235)

Docblock: string user uuid, string server uuid, string action.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `action` | `$action` | `string` |

When it fires (2 sites)

-   [`ServerPowerController::sendPowerAction`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Power/ServerPowerController.php#L207)[`POST /api/user/servers/{uuidShort}/power/{action}`](https://featherpanel.com/docs/api/reference/user/server/power/#post-user-servers-uuidShort-power-action)
-   [`ServerPowerActionTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/ServerPowerActionTool.php#L219)

```php
$event->on(ServerEvent::onServerPowerAction(), function ($userUuid, $serverUuid, $action): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:power:action ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'action' => $action]));
});
```

## `ServerEvent::onServerReinstalled()`

- Name: `featherpanel:server:reinstall`
- emitted at 3 sites
- 2 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L155)

Docblock: string user uuid, string server uuid.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid`not at every site | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid`not at every site | `string`from docblock |

| Arguments passed | Emitted from |
| --- | --- |
| `user_uuid`, `server_uuid` | 
`ServerUserController::updateServer`

`ServerUserController::reinstallServer`

 |
| `server`, `updated_by` | 

`ServersController::update`

 |

When it fires (3 sites)

-   [`ServersController::update`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/ServersController.php#L1991)[`PATCH /api/admin/servers/{id}`](https://featherpanel.com/docs/api/reference/admin/servers/#patch-admin-servers-id)
-   [`ServerUserController::updateServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php#L1681)[`PUT /api/user/servers/{uuidShort}`](https://featherpanel.com/docs/api/reference/user/server/core/#put-user-servers-uuidShort)
-   [`ServerUserController::reinstallServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php#L1987)[`POST /api/user/servers/{uuidShort}/reinstall`](https://featherpanel.com/docs/api/reference/user/server/core/#post-user-servers-uuidShort-reinstall)

```php
$event->on(ServerEvent::onServerReinstalled(), function (...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:reinstall');
});
```

## `ServerEvent::onServerScheduleStatusToggled()`

- Name: `featherpanel:server:schedule:status:toggle`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L131)

Docblock: string user uuid, string server uuid, int schedule id.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `schedule_id` | `$scheduleId` | `int` |

When it fires (1 site)

-   [`ServerScheduleController::toggleScheduleStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerScheduleController.php#L686)[`POST /api/user/servers/{uuidShort}/schedules/{scheduleId}/toggle`](https://featherpanel.com/docs/api/reference/user/server/schedules/#post-user-servers-uuidShort-schedules-scheduleId-toggle)

```php
$event->on(ServerEvent::onServerScheduleStatusToggled(), function ($userUuid, $serverUuid, $scheduleId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:schedule:status:toggle ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'schedule_id' => $scheduleId]));
});
```

## `ServerEvent::onServerSuspended()`

- Name: `featherpanel:server:suspended`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L379)

Docblock: array server data, array suspended by.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server` | `$server` | `array`from docblock |
| 2 | `suspended_by` | `$suspendedBy` | `array` |

When it fires (2 sites)

-   [`ServersController::suspend`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/ServersController.php#L2678)[`POST /api/admin/servers/{id}/suspend`](https://featherpanel.com/docs/api/reference/admin/servers/#post-admin-servers-id-suspend)
-   [`SuspensionService::suspendIfNeeded`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/FeatherZeroTrust/SuspensionService.php#L114)

```php
$event->on(ServerEvent::onServerSuspended(), function ($server, $suspendedBy): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:suspended ' . json_encode(['server' => $server, 'suspended_by' => $suspendedBy]));
});
```

## `ServerEvent::onServerTaskStatusToggled()`

- Name: `featherpanel:server:task:status:toggle`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L195)

Docblock: string user uuid, string server uuid, int schedule id, int task id.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `schedule_id` | `$scheduleId` | `int` |
| 4 | `task_id` | `$taskId` | `int` |

When it fires (1 site)

-   [`TaskController::toggleTaskQueuedStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/TaskController.php#L887)[`PUT /api/user/servers/{uuidShort}/schedules/{scheduleId}/tasks/{taskId}/queue`](https://featherpanel.com/docs/api/reference/user/server/tasks/#put-user-servers-uuidShort-schedules-scheduleId-tasks-taskId-queue)

```php
$event->on(ServerEvent::onServerTaskStatusToggled(), function ($userUuid, $serverUuid, $scheduleId, $taskId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:task:status:toggle ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'schedule_id' => $scheduleId, 'task_id' => $taskId]));
});
```

## `ServerEvent::onServerTransferCancelled()`

- Name: `featherpanel:server:transfer:cancelled`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L427)

Docblock: array server data, array cancelled\_by.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server` | `$server` | `array`from docblock |
| 2 | `cancelled_by` | `$cancelledBy` | `array`from docblock |

When it fires (1 site)

-   [`ServersController::cancelTransfer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/ServersController.php#L3179)[`DELETE /api/admin/servers/{id}/transfer`](https://featherpanel.com/docs/api/reference/admin/servers/#delete-admin-servers-id-transfer)

```php
$event->on(ServerEvent::onServerTransferCancelled(), function ($server, $cancelledBy): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:transfer:cancelled ' . json_encode(['server' => $server, 'cancelled_by' => $cancelledBy]));
});
```

## `ServerEvent::onServerTransferCompleted()`

- Name: `featherpanel:server:transfer:completed`
- emitted at 2 sites
- 2 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L403)

Docblock: array server data, bool successful, int|null destination\_node\_id.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server` | `$server` | `array`from docblock |
| 2 | `successful` | `$successful` | `bool` |
| 3 | `destination_node_id` | `$destinationNodeId` | `int|null`from docblock |

| Arguments passed | Emitted from |
| --- | --- |
| `server`, `successful`, `destination_node_id` | 
`WingsTransferStatusController::setTransferStatus`

 |
| `server`, `successful`, `destination_node_id`, `old_node_id` | 

`WingsTransferStatusController::transferSuccess`

 |

When it fires (2 sites)

-   [`WingsTransferStatusController::setTransferStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Transfer/WingsTransferStatusController.php#L115)[`POST /api/remote/servers/{uuid}/transfer`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-servers-uuid-transfer)
-   [`WingsTransferStatusController::transferSuccess`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Transfer/WingsTransferStatusController.php#L277)[`POST /api/remote/servers/{uuid}/transfer/success`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-servers-uuid-transfer-success)

```php
$event->on(ServerEvent::onServerTransferCompleted(), function ($server, $successful, $destinationNodeId, ...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:transfer:completed ' . json_encode(['server' => $server, 'successful' => $successful, 'destination_node_id' => $destinationNodeId]));
});
```

## `ServerEvent::onServerTransferFailed()`

- Name: `featherpanel:server:transfer:failed`
- emitted at 2 sites
- 2 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L411)

Docblock: array server data, bool successful, string|null error.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server` | `$server` | `array`from docblock |
| 2 | `successful` | `$successful` | `bool` |
| 3 | `error` | `$error` | `string|null`from docblock |

| Arguments passed | Emitted from |
| --- | --- |
| `server`, `successful`, `error` | 
`WingsTransferStatusController::setTransferStatus`

 |
| `server`, `successful`, `error`, `source_node_id` | 

`WingsTransferStatusController::transferFailure`

 |

When it fires (2 sites)

-   [`WingsTransferStatusController::setTransferStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Transfer/WingsTransferStatusController.php#L152)[`POST /api/remote/servers/{uuid}/transfer`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-servers-uuid-transfer)
-   [`WingsTransferStatusController::transferFailure`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Transfer/WingsTransferStatusController.php#L393)[`POST /api/remote/servers/{uuid}/transfer/failure`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-servers-uuid-transfer-failure)

```php
$event->on(ServerEvent::onServerTransferFailed(), function ($server, $successful, $error, ...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:transfer:failed ' . json_encode(['server' => $server, 'successful' => $successful, 'error' => $error]));
});
```

## `ServerEvent::onServerTransferInitiated()`

- Name: `featherpanel:server:transfer:initiated`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L419)

Docblock: array server data, array source\_node, array destination\_node, array initiated\_by.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server` | `$server` | `array`from docblock |
| 2 | `source_node` | `$sourceNode` | `array`from docblock |
| 3 | `destination_node` | `$destinationNode` | `array`from docblock |
| 4 | `initiated_by` | `$initiatedBy` | `array` |

When it fires (1 site)

-   [`ServerTransferInitiator::initiate`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Servers/ServerTransferInitiator.php#L291)

```php
$event->on(ServerEvent::onServerTransferInitiated(), function ($server, $sourceNode, $destinationNode, $initiatedBy): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:transfer:initiated ' . json_encode(['server' => $server, 'source_node' => $sourceNode, 'destination_node' => $destinationNode, 'initiated_by' => $initiatedBy]));
});
```

## `ServerEvent::onServerTransferred()`

- Name: `featherpanel:server:transferred`
- not emitted
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L395)

Docblock: array server data, array transferred by.

```php
$event->on(ServerEvent::onServerTransferred(), function (...$args): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:transferred ' . json_encode($args));
});
```

No code emits this event yet, so the arguments are unknown. The listener accepts any.

## `ServerEvent::onServerUnsuspended()`

- Name: `featherpanel:server:unsuspended`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L387)

Docblock: array server data, array unsuspended by.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server` | `$server` | `array`from docblock |
| 2 | `unsuspended_by` | `$unsuspendedBy` | `array`from docblock |

When it fires (1 site)

-   [`ServersController::unsuspend`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/ServersController.php#L2872)[`POST /api/admin/servers/{id}/unsuspend`](https://featherpanel.com/docs/api/reference/admin/servers/#post-admin-servers-id-unsuspend)

```php
$event->on(ServerEvent::onServerUnsuspended(), function ($server, $unsuspendedBy): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:unsuspended ' . json_encode(['server' => $server, 'unsuspended_by' => $unsuspendedBy]));
});
```

## `ServerEvent::onServerUpdated()`

- Name: `featherpanel:server:update`
- emitted at 12 sites
- 6 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L147)

Docblock: string user uuid, string server uuid.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid`not at every site | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid`not at every site | `string`from docblock |

| Arguments passed | Emitted from |
| --- | --- |
| `user_uuid`, `server_uuid` | 
`ServerFirewallController::createRule`

`ServerFirewallController::updateRule`

`ServerFirewallController::deleteRule`

`ServerFirewallController::syncRules`

`UpdateServerTool::execute`

 |
| `user_uuid`, `server_uuid`, `hook_type`, `step_id`, `action` | 

`ServerLifecycleHookController::createStep`

`ServerLifecycleHookController::updateStep`

`ServerLifecycleHookController::deleteStep`

 |
| `server`, `updated_data`, `updated_by` | 

`ServersController::update`

 |
| `user_uuid`, `server_uuid`, `import_id` | 

`ServerImportController::importServer`

 |
| `user_uuid`, `server_uuid`, `hook_type`, `action` | 

`ServerLifecycleHookController::upsertHook`

 |
| `user_uuid`, `server_uuid`, `hook_type`, `step_id`, `sequence_id`, `action` | 

`ServerLifecycleHookController::updateStepSequence`

 |

When it fires (12 sites)

-   [`ServersController::update`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/ServersController.php#L2026)[`PATCH /api/admin/servers/{id}`](https://featherpanel.com/docs/api/reference/admin/servers/#patch-admin-servers-id)
-   [`ServerFirewallController::createRule`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerFirewallController.php#L296) via `emitEvent()`[`POST /api/user/servers/{uuidShort}/firewall`](https://featherpanel.com/docs/api/reference/user/server/firewall/#post-user-servers-uuidShort-firewall)
-   [`ServerFirewallController::updateRule`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerFirewallController.php#L445) via `emitEvent()`[`PUT /api/user/servers/{uuidShort}/firewall/{ruleId}`](https://featherpanel.com/docs/api/reference/user/server/firewall/#put-user-servers-uuidShort-firewall-ruleId)
-   [`ServerFirewallController::deleteRule`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerFirewallController.php#L557) via `emitEvent()`[`DELETE /api/user/servers/{uuidShort}/firewall/{ruleId}`](https://featherpanel.com/docs/api/reference/user/server/firewall/#delete-user-servers-uuidShort-firewall-ruleId)
-   [`ServerFirewallController::syncRules`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerFirewallController.php#L761) via `emitEvent()`[`POST /api/user/servers/{uuidShort}/firewall/sync`](https://featherpanel.com/docs/api/reference/user/server/firewall/#post-user-servers-uuidShort-firewall-sync)
-   [`ServerImportController::importServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerImportController.php#L218) via `emitEvent()`[`POST /api/user/servers/{uuidShort}/import`](https://featherpanel.com/docs/api/reference/user/server/import/#post-user-servers-uuidShort-import)
-   [`ServerLifecycleHookController::upsertHook`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerLifecycleHookController.php#L125) via `emitEvent()`[`PUT /api/user/servers/{uuidShort}/lifecycle-hooks/{hookType}`](https://featherpanel.com/docs/api/reference/user/server/lifecycle-hooks/#put-user-servers-uuidShort-lifecycle-hooks-hookType)
-   [`ServerLifecycleHookController::createStep`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerLifecycleHookController.php#L223) via `emitEvent()`[`POST /api/user/servers/{uuidShort}/lifecycle-hooks/{hookType}/steps`](https://featherpanel.com/docs/api/reference/user/server/lifecycle-hooks/#post-user-servers-uuidShort-lifecycle-hooks-hookType-steps)
-   [`ServerLifecycleHookController::updateStep`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerLifecycleHookController.php#L322) via `emitEvent()`[`PUT /api/user/servers/{uuidShort}/lifecycle-hooks/{hookType}/steps/{stepId}`](https://featherpanel.com/docs/api/reference/user/server/lifecycle-hooks/#put-user-servers-uuidShort-lifecycle-hooks-hookType-steps-stepId)
-   [`ServerLifecycleHookController::updateStepSequence`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerLifecycleHookController.php#L381) via `emitEvent()`[`PUT /api/user/servers/{uuidShort}/lifecycle-hooks/{hookType}/steps/{stepId}/sequence`](https://featherpanel.com/docs/api/reference/user/server/lifecycle-hooks/#put-user-servers-uuidShort-lifecycle-hooks-hookType-steps-stepId-sequence)
-   [`ServerLifecycleHookController::deleteStep`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerLifecycleHookController.php#L431) via `emitEvent()`[`DELETE /api/user/servers/{uuidShort}/lifecycle-hooks/{hookType}/steps/{stepId}`](https://featherpanel.com/docs/api/reference/user/server/lifecycle-hooks/#delete-user-servers-uuidShort-lifecycle-hooks-hookType-steps-stepId)
-   [`UpdateServerTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/UpdateServerTool.php#L165)

```php
$event->on(ServerEvent::onServerUpdated(), function (...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:server:update');
});
```

## `ServerEvent::onServerAllocationDeleted()`

- Name: `featherpanel:user:server:allocation:deleted`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L43)

Docblock: string user uuid, string server uuid, int allocation id.

Same event name as `ServerAllocationEvent::onServerAllocationDeleted()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `allocation_id` | `$allocationId` | `int` |

When it fires (2 sites)

-   [`ServerAllocationController::deleteAllocation`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerAllocationController.php#L274)[`DELETE /api/user/servers/{uuidShort}/allocations/{allocationId}`](https://featherpanel.com/docs/api/reference/user/server/allocations/#delete-user-servers-uuidShort-allocations-allocationId)
-   [`DeleteAllocationTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/DeleteAllocationTool.php#L181)

```php
$event->on(ServerEvent::onServerAllocationDeleted(), function ($userUuid, $serverUuid, $allocationId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:allocation:deleted ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'allocation_id' => $allocationId]));
});
```

## `ServerEvent::onServerBackupCreated()`

- Name: `featherpanel:user:server:backup:created`
- emitted at 3 sites
- 3 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L75)

Docblock: string user uuid, string server uuid, string backup uuid.

Same event name as `ServerBackupEvent::onServerBackupCreated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `backup_uuid` | `$backupUuid` | `string`from docblock |

| Arguments passed | Emitted from |
| --- | --- |
| `user_uuid`, `server_uuid`, `backup_uuid` | 
`ServerBackupController::createBackup`

 |
| `user_uuid`, `server_uuid`, `backup_uuid`, `type` | 

`ServerBackupController::createFullBackup`

 |
| `user_uuid`, `server_uuid`, `backup_uuid`, `backup_data` | 

`CreateBackupTool::execute`

 |

When it fires (3 sites)

-   [`ServerBackupController::createBackup`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerBackupController.php#L537)[`POST /api/user/servers/{uuidShort}/backups`](https://featherpanel.com/docs/api/reference/user/server/backups/#post-user-servers-uuidShort-backups)
-   [`ServerBackupController::createFullBackup`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerBackupController.php#L1758)
-   [`CreateBackupTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/CreateBackupTool.php#L240)

```php
$event->on(ServerEvent::onServerBackupCreated(), function ($userUuid, $serverUuid, $backupUuid, ...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:backup:created ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'backup_uuid' => $backupUuid]));
});
```

## `ServerEvent::onServerBackupDeleted()`

- Name: `featherpanel:user:server:backup:deleted`
- emitted at 3 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L107)

Docblock: string user uuid, string server uuid, string backup uuid.

Same event name as `ServerBackupEvent::onServerBackupDeleted()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `backup_uuid` | `$backupUuid` | `string` |

When it fires (3 sites)

-   [`ServerBackupController::deleteBackup`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerBackupController.php#L1187)[`DELETE /api/user/servers/{uuidShort}/backups/{backupUuid}`](https://featherpanel.com/docs/api/reference/user/server/backups/#delete-user-servers-uuidShort-backups-backupUuid)
-   [`ServerBackupController::bulkDeleteBackups`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerBackupController.php#L1379)[`DELETE /api/user/servers/{uuidShort}/backups/bulk-delete`](https://featherpanel.com/docs/api/reference/user/server/backups/#delete-user-servers-uuidShort-backups-bulk-delete)
-   [`DeleteBackupTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/DeleteBackupTool.php#L207)

```php
$event->on(ServerEvent::onServerBackupDeleted(), function ($userUuid, $serverUuid, $backupUuid): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:backup:deleted ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'backup_uuid' => $backupUuid]));
});
```

## `ServerEvent::onServerBackupRestored()`

- Name: `featherpanel:user:server:backup:restored`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L83)

Docblock: string user uuid, string server uuid, string backup uuid.

Same event name as `ServerBackupEvent::onServerBackupRestored()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `backup_uuid` | `$backupUuid` | `string` |

When it fires (1 site)

-   [`ServerBackupController::restoreBackup`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerBackupController.php#L821)[`POST /api/user/servers/{uuidShort}/backups/{backupUuid}/restore`](https://featherpanel.com/docs/api/reference/user/server/backups/#post-user-servers-uuidShort-backups-backupUuid-restore)

```php
$event->on(ServerEvent::onServerBackupRestored(), function ($userUuid, $serverUuid, $backupUuid): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:backup:restored ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'backup_uuid' => $backupUuid]));
});
```

## `ServerEvent::onServerDatabaseCreated()`

- Name: `featherpanel:user:server:database:created`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L51)

Docblock: string user uuid, string server uuid, int database id.

Same event name as `ServerDatabaseEvent::onServerDatabaseCreated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `database_id` | `$databaseId` | `int`from docblock |

When it fires (2 sites)

-   [`ServerDatabaseController::createServerDatabase`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerDatabaseController.php#L493)[`POST /api/user/servers/{uuidShort}/databases`](https://featherpanel.com/docs/api/reference/user/server/databases/#post-user-servers-uuidShort-databases)
-   [`CreateDatabaseTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/CreateDatabaseTool.php#L189)

```php
$event->on(ServerEvent::onServerDatabaseCreated(), function ($userUuid, $serverUuid, $databaseId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:database:created ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'database_id' => $databaseId]));
});
```

## `ServerEvent::onServerDatabaseDeleted()`

- Name: `featherpanel:user:server:database:deleted`
- emitted at 3 sites
- 2 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L67)

Docblock: string user uuid, string server uuid, int database id.

Same event name as `ServerDatabaseEvent::onServerDatabaseDeleted()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `database_id` | `$databaseId` | `int` |

| Arguments passed | Emitted from |
| --- | --- |
| `user_uuid`, `server_uuid`, `database_id` | 
`ServerDatabaseController::deleteServerDatabase`

`DeleteDatabaseTool::execute`

 |
| `user_uuid`, `server_uuid`, `database_id`, `bulk` | 

`ServerDatabaseController::bulkDeleteServerDatabases`

 |

When it fires (3 sites)

-   [`ServerDatabaseController::deleteServerDatabase`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerDatabaseController.php#L757)[`DELETE /api/user/servers/{uuidShort}/databases/{databaseId}`](https://featherpanel.com/docs/api/reference/user/server/databases/#delete-user-servers-uuidShort-databases-databaseId)
-   [`ServerDatabaseController::bulkDeleteServerDatabases`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerDatabaseController.php#L922)[`DELETE /api/user/servers/{uuidShort}/databases/bulk-delete`](https://featherpanel.com/docs/api/reference/user/server/databases/#delete-user-servers-uuidShort-databases-bulk-delete)
-   [`DeleteDatabaseTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/DeleteDatabaseTool.php#L192)

```php
$event->on(ServerEvent::onServerDatabaseDeleted(), function ($userUuid, $serverUuid, $databaseId, ...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:database:deleted ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'database_id' => $databaseId]));
});
```

## `ServerEvent::onServerDatabaseUpdated()`

- Name: `featherpanel:user:server:database:updated`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L59)

Docblock: string user uuid, string server uuid, int database id.

Same event name as `ServerDatabaseEvent::onServerDatabaseUpdated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `database_id` | `$databaseId` | `int` |

When it fires (2 sites)

-   [`ServerDatabaseController::updateServerDatabase`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerDatabaseController.php#L637)[`PATCH /api/user/servers/{uuidShort}/databases/{databaseId}`](https://featherpanel.com/docs/api/reference/user/server/databases/#patch-user-servers-uuidShort-databases-databaseId)
-   [`UpdateDatabaseTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/UpdateDatabaseTool.php#L180)

```php
$event->on(ServerEvent::onServerDatabaseUpdated(), function ($userUuid, $serverUuid, $databaseId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:database:updated ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'database_id' => $databaseId]));
});
```

## `ServerEvent::onServerDirectoryCreated()`

- Name: `featherpanel:user:server:directory:created`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L299)

Docblock: string user uuid, string server uuid, string directory path.

Same event name as `ServerFilesEvent::onServerDirectoryCreated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `directory_path` | `$directoryPath` | `string`from docblock |

When it fires (2 sites)

-   [`ServerFilesController::createDirectory`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L1406)[`POST /api/user/servers/{uuidShort}/create-directory`](https://featherpanel.com/docs/api/reference/user/server/files/#post-user-servers-uuidShort-create-directory)
-   [`CreateDirectoryTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/CreateDirectoryTool.php#L157)

```php
$event->on(ServerEvent::onServerDirectoryCreated(), function ($userUuid, $serverUuid, $directoryPath): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:directory:created ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'directory_path' => $directoryPath]));
});
```

## `ServerEvent::onServerFileRenamed()`

- Name: `featherpanel:user:server:file:renamed`
- emitted at 2 sites
- 2 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L323)

Docblock: string user uuid, string server uuid, string old path, string new path.

Same event name as `ServerFilesEvent::onServerFileRenamed()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `root` | `$root`not at every site | `string`from docblock |
| 4 | `files` | `$files`not at every site | `string`from docblock |

| Arguments passed | Emitted from |
| --- | --- |
| `user_uuid`, `server_uuid`, `root`, `files` | 
`ServerFilesController::renameFileOrFolder`

 |
| `user_uuid`, `server_uuid`, `file_path`, `new_path` | 

`RenameFileTool::execute`

 |

When it fires (2 sites)

-   [`ServerFilesController::renameFileOrFolder`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L807)[`PUT /api/user/servers/{uuidShort}/rename`](https://featherpanel.com/docs/api/reference/user/server/files/#put-user-servers-uuidShort-rename)
-   [`RenameFileTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/RenameFileTool.php#L174)

```php
$event->on(ServerEvent::onServerFileRenamed(), function ($userUuid, $serverUuid, ...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:file:renamed ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid]));
});
```

## `ServerEvent::onServerFileWritten()`

- Name: `featherpanel:user:server:file:saved`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L315)

Docblock: string user uuid, string server uuid, string file path.

Same event name as `ServerFilesEvent::onServerFileSaved()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `file_path` | `$filePath` | `string`from docblock |

When it fires (2 sites)

-   [`ServerFilesController::writeFile`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L722)[`POST /api/user/servers/{uuidShort}/write-file`](https://featherpanel.com/docs/api/reference/user/server/files/#post-user-servers-uuidShort-write-file)
-   [`WriteFileTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/WriteFileTool.php#L173)

```php
$event->on(ServerEvent::onServerFileWritten(), function ($userUuid, $serverUuid, $filePath): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:file:saved ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'file_path' => $filePath]));
});
```

## `ServerEvent::onServerFileUploaded()`

- Name: `featherpanel:user:server:file:uploaded`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L363)

Docblock: string user uuid, string server uuid, string file path.

Same event name as `ServerFilesEvent::onServerFileUploaded()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `file_path` | `$filePath` | `string`from docblock |

When it fires (1 site)

-   [`ServerFilesController::uploadFile`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L2523)[`POST /api/user/servers/{uuidShort}/upload-file`](https://featherpanel.com/docs/api/reference/user/server/files/#post-user-servers-uuidShort-upload-file)

```php
$event->on(ServerEvent::onServerFileUploaded(), function ($userUuid, $serverUuid, $filePath): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:file:uploaded ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'file_path' => $filePath]));
});
```

## `ServerEvent::onServerFilesDeleted()`

- Name: `featherpanel:user:server:files:deleted`
- emitted at 3 sites
- 2 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L291)

Docblock: string user uuid, string server uuid.

Same event name as `ServerFilesEvent::onServerFilesDeleted()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |

| Arguments passed | Emitted from |
| --- | --- |
| `user_uuid`, `server_uuid` | 
`ServerFilesController::deleteFiles`

`ServerFilesController::wipeAllFiles`

 |
| `user_uuid`, `server_uuid`, `files` | 

`DeleteFilesTool::execute`

 |

When it fires (3 sites)

-   [`ServerFilesController::deleteFiles`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L902)[`DELETE /api/user/servers/{uuidShort}/delete-files`](https://featherpanel.com/docs/api/reference/user/server/files/#delete-user-servers-uuidShort-delete-files)
-   [`ServerFilesController::wipeAllFiles`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L1174)[`POST /api/user/servers/{uuidShort}/wipe-all-files`](https://featherpanel.com/docs/api/reference/user/server/files/#post-user-servers-uuidShort-wipe-all-files)
-   [`DeleteFilesTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/DeleteFilesTool.php#L174)

```php
$event->on(ServerEvent::onServerFilesDeleted(), function ($userUuid, $serverUuid, ...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:files:deleted ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid]));
});
```

## `ServerEvent::onServerPullProcessDeleted()`

- Name: `featherpanel:user:server:pull:deleted`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L307)

Docblock: string user uuid, string server uuid, string pull id.

Same event name as `ServerFilesEvent::onServerPullProcessDeleted()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `pull_id` | `$pullId` | `string` |

When it fires (1 site)

-   [`ServerFilesController::deletePullProcess`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/Files/ServerFilesController.php#L2127)[`DELETE /api/user/servers/{uuidShort}/delete-pull-process/{pullId}`](https://featherpanel.com/docs/api/reference/user/server/files/#delete-user-servers-uuidShort-delete-pull-process-pullId)

```php
$event->on(ServerEvent::onServerPullProcessDeleted(), function ($userUuid, $serverUuid, $pullId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:pull:deleted ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'pull_id' => $pullId]));
});
```

## `ServerEvent::onServerScheduleCreated()`

- Name: `featherpanel:user:server:schedule:created`
- emitted at 3 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L115)

Docblock: string user uuid, string server uuid, int schedule id.

Same event name as `ServerScheduleEvent::onServerScheduleCreated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `schedule_id` | `$scheduleId` | `int`from docblock |

When it fires (3 sites)

-   [`CreateScheduleTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/CreateScheduleTool.php#L330)
-   [`ServerScheduleController::createSchedule`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerScheduleController.php#L422)[`POST /api/user/servers/{uuidShort}/schedules`](https://featherpanel.com/docs/api/reference/user/server/schedules/#post-user-servers-uuidShort-schedules)
-   [`ServerScheduleController::importSchedule`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerScheduleController.php#L1332)[`POST /api/user/servers/{uuidShort}/schedules/import`](https://featherpanel.com/docs/api/reference/user/server/schedules/#post-user-servers-uuidShort-schedules-import)

```php
$event->on(ServerEvent::onServerScheduleCreated(), function ($userUuid, $serverUuid, $scheduleId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:schedule:created ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'schedule_id' => $scheduleId]));
});
```

## `ServerEvent::onServerScheduleDeleted()`

- Name: `featherpanel:user:server:schedule:deleted`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L139)

Docblock: string user uuid, string server uuid, int schedule id.

Same event name as `ServerScheduleEvent::onServerScheduleDeleted()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `schedule_id` | `$scheduleId` | `int` |

When it fires (2 sites)

-   [`DeleteScheduleTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/DeleteScheduleTool.php#L168)
-   [`ServerScheduleController::deleteSchedule`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerScheduleController.php#L786)[`DELETE /api/user/servers/{uuidShort}/schedules/{scheduleId}`](https://featherpanel.com/docs/api/reference/user/server/schedules/#delete-user-servers-uuidShort-schedules-scheduleId)

```php
$event->on(ServerEvent::onServerScheduleDeleted(), function ($userUuid, $serverUuid, $scheduleId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:schedule:deleted ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'schedule_id' => $scheduleId]));
});
```

## `ServerEvent::onServerScheduleUpdated()`

- Name: `featherpanel:user:server:schedule:updated`
- emitted at 3 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L123)

Docblock: string user uuid, string server uuid, int schedule id.

Same event name as `ServerScheduleEvent::onServerScheduleUpdated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `schedule_id` | `$scheduleId` | `int` |

When it fires (3 sites)

-   [`UpdateScheduleTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/UpdateScheduleTool.php#L216)
-   [`ServerScheduleController::updateSchedule`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerScheduleController.php#L590)[`PUT /api/user/servers/{uuidShort}/schedules/{scheduleId}`](https://featherpanel.com/docs/api/reference/user/server/schedules/#put-user-servers-uuidShort-schedules-scheduleId)
-   [`ServerScheduleController::runNow`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerScheduleController.php#L1036)[`POST /api/user/servers/{uuidShort}/schedules/{scheduleId}/run`](https://featherpanel.com/docs/api/reference/user/server/schedules/#post-user-servers-uuidShort-schedules-scheduleId-run)

```php
$event->on(ServerEvent::onServerScheduleUpdated(), function ($userUuid, $serverUuid, $scheduleId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:schedule:updated ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'schedule_id' => $scheduleId]));
});
```

## `ServerEvent::onServerSubuserCreated()`

- Name: `featherpanel:user:server:subuser:created`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L211)

Docblock: string user uuid, string server uuid, int subuser id.

Same event name as `ServerSubuserEvent::onServerSubuserCreated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `subuser_id` | `$subuserId` | `int`from docblock |

When it fires (2 sites)

-   [`SubuserController::createSubuser`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/SubuserController.php#L427)[`POST /api/user/servers/{uuidShort}/subusers`](https://featherpanel.com/docs/api/reference/user/server/subusers/#post-user-servers-uuidShort-subusers)
-   [`SubuserInviteController::accept`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/SubuserInviteController.php#L162)

```php
$event->on(ServerEvent::onServerSubuserCreated(), function ($userUuid, $serverUuid, $subuserId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:subuser:created ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'subuser_id' => $subuserId]));
});
```

## `ServerEvent::onServerSubuserDeleted()`

- Name: `featherpanel:user:server:subuser:deleted`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L227)

Docblock: string user uuid, string server uuid, int subuser id.

Same event name as `ServerSubuserEvent::onServerSubuserDeleted()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `subuser_id` | `$subuserId` | `int` |

When it fires (1 site)

-   [`SubuserController::deleteSubuser`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/SubuserController.php#L731)[`DELETE /api/user/servers/{uuidShort}/subusers/{subuserId}`](https://featherpanel.com/docs/api/reference/user/server/subusers/#delete-user-servers-uuidShort-subusers-subuserId)

```php
$event->on(ServerEvent::onServerSubuserDeleted(), function ($userUuid, $serverUuid, $subuserId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:subuser:deleted ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'subuser_id' => $subuserId]));
});
```

## `ServerEvent::onServerSubuserUpdated()`

- Name: `featherpanel:user:server:subuser:updated`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L219)

Docblock: string user uuid, string server uuid, int subuser id.

Same event name as `ServerSubuserEvent::onServerSubuserUpdated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `subuser_id` | `$subuserId` | `int` |

When it fires (1 site)

-   [`SubuserController::updateSubuser`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/SubuserController.php#L630)[`PATCH /api/user/servers/{uuidShort}/subusers/{subuserId}`](https://featherpanel.com/docs/api/reference/user/server/subusers/#patch-user-servers-uuidShort-subusers-subuserId)

```php
$event->on(ServerEvent::onServerSubuserUpdated(), function ($userUuid, $serverUuid, $subuserId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:subuser:updated ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'subuser_id' => $subuserId]));
});
```

## `ServerEvent::onServerTaskCreated()`

- Name: `featherpanel:user:server:task:created`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L171)

Docblock: string user uuid, string server uuid, int schedule id, int task id.

Same event name as `ServerTaskEvent::onServerTaskCreated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `schedule_id` | `$scheduleId` | `int` |
| 4 | `task_id` | `$taskId` | `int`from docblock |

When it fires (2 sites)

-   [`CreateTaskTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/CreateTaskTool.php#L239)
-   [`TaskController::createTask`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/TaskController.php#L451)[`POST /api/user/servers/{uuidShort}/schedules/{scheduleId}/tasks`](https://featherpanel.com/docs/api/reference/user/server/tasks/#post-user-servers-uuidShort-schedules-scheduleId-tasks)

```php
$event->on(ServerEvent::onServerTaskCreated(), function ($userUuid, $serverUuid, $scheduleId, $taskId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:task:created ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'schedule_id' => $scheduleId, 'task_id' => $taskId]));
});
```

## `ServerEvent::onServerTaskDeleted()`

- Name: `featherpanel:user:server:task:deleted`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L203)

Docblock: string user uuid, string server uuid, int schedule id, int task id.

Same event name as `ServerTaskEvent::onServerTaskDeleted()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `schedule_id` | `$scheduleId` | `int` |
| 4 | `task_id` | `$taskId` | `int` |

When it fires (2 sites)

-   [`DeleteTaskTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/DeleteTaskTool.php#L192)
-   [`TaskController::deleteTask`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/TaskController.php#L1014)[`DELETE /api/user/servers/{uuidShort}/schedules/{scheduleId}/tasks/{taskId}`](https://featherpanel.com/docs/api/reference/user/server/tasks/#delete-user-servers-uuidShort-schedules-scheduleId-tasks-taskId)

```php
$event->on(ServerEvent::onServerTaskDeleted(), function ($userUuid, $serverUuid, $scheduleId, $taskId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:task:deleted ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'schedule_id' => $scheduleId, 'task_id' => $taskId]));
});
```

## `ServerEvent::onServerTaskSequenceUpdated()`

- Name: `featherpanel:user:server:task:sequence:updated`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L187)

Docblock: string user uuid, string server uuid, int schedule id, int task id.

Same event name as `ServerTaskEvent::onServerTaskSequenceUpdated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `schedule_id` | `$scheduleId` | `int` |
| 4 | `task_id` | `$taskId` | `int` |

When it fires (1 site)

-   [`TaskController::updateTaskSequence`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/TaskController.php#L772)[`PUT /api/user/servers/{uuidShort}/schedules/{scheduleId}/tasks/{taskId}/sequence`](https://featherpanel.com/docs/api/reference/user/server/tasks/#put-user-servers-uuidShort-schedules-scheduleId-tasks-taskId-sequence)

```php
$event->on(ServerEvent::onServerTaskSequenceUpdated(), function ($userUuid, $serverUuid, $scheduleId, $taskId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:task:sequence:updated ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'schedule_id' => $scheduleId, 'task_id' => $taskId]));
});
```

## `ServerEvent::onServerTaskUpdated()`

- Name: `featherpanel:user:server:task:updated`
- emitted at 2 sites
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/ServerEvent.php#L179)

Docblock: string user uuid, string server uuid, int schedule id, int task id.

Same event name as `ServerTaskEvent::onServerTaskUpdated()`. A listener on either method receives the emits of both.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `user_uuid` | `$userUuid` | `string`from docblock |
| 2 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 3 | `schedule_id` | `$scheduleId` | `int` |
| 4 | `task_id` | `$taskId` | `int` |

When it fires (2 sites)

-   [`UpdateTaskTool::execute`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Services/Chatbot/Tools/UpdateTaskTool.php#L270)
-   [`TaskController::updateTask`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/TaskController.php#L640)[`PUT /api/user/servers/{uuidShort}/schedules/{scheduleId}/tasks/{taskId}`](https://featherpanel.com/docs/api/reference/user/server/tasks/#put-user-servers-uuidShort-schedules-scheduleId-tasks-taskId)

```php
$event->on(ServerEvent::onServerTaskUpdated(), function ($userUuid, $serverUuid, $scheduleId, $taskId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:user:server:task:updated ' . json_encode(['user_uuid' => $userUuid, 'server_uuid' => $serverUuid, 'schedule_id' => $scheduleId, 'task_id' => $taskId]));
});
```
