View .md

Schedules endpoints (Client API: game servers)

11 FeatherPanel Client API: game servers endpoints from user/server/schedules.php: methods, paths, auth, permissions, rate limits, parameters and responses.

Last synced from FeatherPanel 15b94e9 on .

On this page

Defined in backend/app/routes/user/server/schedules.php. Authentication used here: Server access. 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/user/servers/{uuidShort}/schedules

Auth: Server accessDefault rate limit: 30 / minute (user-server-schedules)Route name: session-server-schedulesController: ServerScheduleController::getSchedulesroute source

Get server schedules Retrieve all schedules for a specific server that the user owns or has subuser access to.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
pagequeryintegernoPage number for pagination
per_pagequeryintegernoNumber of records per page
searchquerystringnoSearch term to filter schedules by name
Response data fieldTypeDescription
dataServerSchedule[]
paginationSchedulePagination
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Server schedules retrieved successfully · 400 Bad request - Missing or invalid UUID short · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server not found · 500 Internal server error - Failed to retrieve schedules

POST/api/user/servers/{uuidShort}/schedules

Auth: Server accessDefault rate limit: 10 / minute (user-server-schedules)Route name: session-server-create-scheduleController: ServerScheduleController::createScheduleroute source

Create schedule Create a new schedule for a server with cron expression validation and next run time calculation.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID

Request body: ScheduleCreateRequest (application/json) · Response data: ScheduleCreateResponse

Body fieldTypeRequiredDescription
namestringyesSchedule name
cron_day_of_weekstringyesCron day of week expression
cron_monthstringyesCron month expression
cron_day_of_monthstringyesCron day of month expression
cron_hourstringyesCron hour expression
cron_minutestringyesCron minute expression
timezonestringnoIANA timezone the cron expression is authored in (default: "UTC")
is_activebooleannoWhether schedule is active
only_when_onlinebooleannoWhether to run only when server is online
Response data fieldTypeDescription
idintegerCreated schedule ID
namestringSchedule name
next_run_atstring (date-time)Next scheduled run time
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"","cron_day_of_week":"","cron_month":"","cron_day_of_month":"","cron_hour":"","cron_minute":"","timezone":"","is_active":false,"only_when_online":false}'

Plugin events: featherpanel:user:server:schedule:created

Responses: 201 Schedule created successfully · 400 Bad request - Missing required fields, invalid cron expression, or invalid request body · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server not found · 500 Internal server error - Failed to create schedule

GET/api/user/servers/{uuidShort}/schedules/{scheduleId}

Auth: Server accessRoute name: session-server-get-scheduleController: ServerScheduleController::getScheduleroute source

Get specific schedule Retrieve details of a specific schedule for a server that the user owns or has subuser access to.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
scheduleIdpathintegeryesSchedule ID

Response data: ServerSchedule

Response data fieldTypeDescription
idintegerSchedule ID
server_idintegerServer ID
namestringSchedule name
cron_day_of_weekstringCron day of week expression
cron_monthstringCron month expression
cron_day_of_monthstringCron day of month expression
cron_hourstringCron hour expression
cron_minutestringCron minute expression
timezonestringIANA timezone the cron expression is authored in (e.g. "Europe/Paris", "UTC")
is_activebooleanWhether schedule is active
is_processingbooleanWhether schedule is currently processing
only_when_onlinebooleanWhether to run only when server is online
next_run_atstring (date-time)Next scheduled run time
created_atstring (date-time)Creation timestamp
updated_atstring (date-time)Last update timestamp
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules/$SCHEDULE_ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Schedule details retrieved successfully · 400 Bad request - Missing or invalid parameters · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server or schedule not found · 500 Internal server error - Failed to retrieve schedule

PUT/api/user/servers/{uuidShort}/schedules/{scheduleId}

Auth: Server accessDefault rate limit: 10 / minute (user-server-schedules)Route name: session-server-update-scheduleController: ServerScheduleController::updateScheduleroute source

Update schedule Update an existing schedule with new cron expression validation and next run time recalculation.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
scheduleIdpathintegeryesSchedule ID

Request body: ScheduleUpdateRequest (application/json)

Body fieldTypeRequiredDescription
namestringnoSchedule name
cron_day_of_weekstringnoCron day of week expression
cron_monthstringnoCron month expression
cron_day_of_monthstringnoCron day of month expression
cron_hourstringnoCron hour expression
cron_minutestringnoCron minute expression
timezonestringnoIANA timezone the cron expression is authored in
is_activebooleannoWhether schedule is active
only_when_onlinebooleannoWhether to run only when server is online
Response data fieldTypeDescription
messagestringSuccess message
curl -X PUT "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules/$SCHEDULE_ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"","cron_day_of_week":"","cron_month":"","cron_day_of_month":"","cron_hour":"","cron_minute":"","timezone":"","is_active":false,"only_when_online":false}'

Plugin events: featherpanel:user:server:schedule:updated

Responses: 200 Schedule updated successfully · 400 Bad request - Invalid cron expression or invalid request body · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server or schedule not found · 500 Internal server error - Failed to update schedule

DELETE/api/user/servers/{uuidShort}/schedules/{scheduleId}

Auth: Server accessRoute name: session-server-delete-scheduleController: ServerScheduleController::deleteScheduleroute source

Delete schedule Delete a schedule. Schedules that are currently processing can also be deleted (e.g. to clear stuck schedules).

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
scheduleIdpathintegeryesSchedule ID
Response data fieldTypeDescription
messagestringSuccess message
curl -X DELETE "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules/$SCHEDULE_ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Plugin events: featherpanel:user:server:schedule:deleted

Responses: 200 Schedule deleted successfully · 400 Bad request - Missing parameters · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server or schedule not found · 500 Internal server error - Failed to delete schedule

POST/api/user/servers/{uuidShort}/schedules/{scheduleId}/toggle

Auth: Server accessDefault rate limit: 10 / minute (user-server-schedules)Route name: session-server-toggle-schedule-statusController: ServerScheduleController::toggleScheduleStatusroute source

Toggle schedule status Toggle the active status of a schedule (enable/disable).

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
scheduleIdpathintegeryesSchedule ID

Response data: ScheduleToggleResponse

Response data fieldTypeDescription
is_activebooleanNew active status
statusstringStatus description
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules/$SCHEDULE_ID/toggle" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Plugin events: featherpanel:server:schedule:status:toggle

Responses: 200 Schedule status toggled successfully · 400 Bad request - Missing or invalid parameters · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server or schedule not found · 500 Internal server error - Failed to toggle schedule status

GET/api/user/servers/{uuidShort}/schedules/active

Auth: Server accessDefault rate limit: 30 / minute (user-server-schedules)Route name: session-server-active-schedulesController: ServerScheduleController::getActiveSchedulesroute source

Get active schedules Retrieve all active schedules for a specific server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
Response data fieldTypeDescription
dataServerSchedule[]
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules/active" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Active schedules retrieved successfully · 400 Bad request - Missing or invalid UUID short · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server not found · 500 Internal server error - Failed to retrieve active schedules

GET/api/user/servers/{uuidShort}/schedules/due

Auth: Server accessDefault rate limit: 30 / minute (user-server-schedules)Route name: session-server-due-schedulesController: ServerScheduleController::getDueSchedulesroute source

Get due schedules Retrieve schedules that are due to run for a specific server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
Response data fieldTypeDescription
dataServerSchedule[]
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules/due" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Due schedules retrieved successfully · 400 Bad request - Missing or invalid UUID short · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server not found · 500 Internal server error - Failed to retrieve due schedules

POST/api/user/servers/{uuidShort}/schedules/{scheduleId}/run

Auth: Server accessDefault rate limit: 10 / minute (user-server-schedules)Route name: session-server-run-schedule-nowController: ServerScheduleController::runNowroute source

Run schedule now Trigger a schedule to run on the next cron tick by setting its next run time to the past. The schedule must not already be processing.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
scheduleIdpathintegeryesSchedule ID
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules/$SCHEDULE_ID/run" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Plugin events: featherpanel:user:server:schedule:updated

Responses: 200 Schedule queued to run on next cron tick · 400 Bad request - Schedule is already processing or has no tasks · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server or schedule not found · 500 Internal server error - Failed to queue schedule

GET/api/user/servers/{uuidShort}/schedules/{scheduleId}/export

Auth: Server accessDefault rate limit: 30 / minute (user-server-schedules)Route name: session-server-export-scheduleController: ServerScheduleController::exportScheduleroute source

Export schedule Export a schedule and all its tasks as a JSON payload that can be imported into another server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
scheduleIdpathintegeryesSchedule ID
Response data fieldTypeDescription
namestringSchedule name
cron_minutestring
cron_hourstring
cron_day_of_monthstring
cron_monthstring
cron_day_of_weekstring
is_activeboolean
only_when_onlineboolean
tasksobject[]
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules/$SCHEDULE_ID/export" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Schedule exported successfully · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server or schedule not found

POST/api/user/servers/{uuidShort}/schedules/import

Auth: Server accessDefault rate limit: 10 / minute (user-server-schedules)Route name: session-server-import-scheduleController: ServerScheduleController::importScheduleroute source

Import schedule Import a schedule and its tasks from a previously exported JSON payload.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
Body fieldTypeRequiredDescription
namestringnoSchedule name (overrides exported name)
cron_minutestringno
cron_hourstringno
cron_day_of_monthstringno
cron_monthstringno
cron_day_of_weekstringno
is_activebooleanno
only_when_onlinebooleanno
tasksobject[]no
Response data fieldTypeDescription
idintegerCreated schedule ID
namestringSchedule name
tasks_importedintegerNumber of tasks imported
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/schedules/import" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"","cron_minute":"","cron_hour":"","cron_day_of_month":"","cron_month":"","cron_day_of_week":"","is_active":false,"only_when_online":false,"tasks":[]}'

Plugin events: featherpanel:user:server:schedule:created

Responses: 201 Schedule imported successfully · 400 Bad request - Missing required fields, invalid cron expression, or invalid task data · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server not found · 500 Internal server error - Failed to import schedule