View .md

FeatherOS endpoints (Client API: account)

14 FeatherPanel Client API: account endpoints from user/featheros.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/featheros.php. Authentication used here: Signed-in user. 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/featheros/state

Auth: Signed-in userDefault rate limit: 60 / minute (user-featheros)Route name: user-featheros-state-getController: FeatherOsController::getStateroute source

Get FeatherOS desktop state Saved desktop of the current user: open windows, desktop icon layout, dock, wallpaper and theme. state is null when nothing was saved yet.

curl -X GET "$PANEL_URL/api/user/featheros/state" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 State retrieved · 401 Unauthorized

PUT/api/user/featheros/state

Auth: Signed-in userDefault rate limit: 60 / minute (user-featheros)Route name: user-featheros-state-saveController: FeatherOsController::saveStateroute source

Save FeatherOS desktop state Replaces the saved desktop of the current user. Send {"state": {...}}. The document is opaque to the server but limited to 256 KiB.

curl -X PUT "$PANEL_URL/api/user/featheros/state" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 State saved · 400 Invalid state · 413 State too large

DELETE/api/user/featheros/state

Auth: Signed-in userDefault rate limit: 10 / minute (user-featheros)Route name: user-featheros-state-resetController: FeatherOsController::resetStateroute source

Reset FeatherOS desktop state Removes the saved desktop so the next visit starts with the default layout. Notes are kept.

curl -X DELETE "$PANEL_URL/api/user/featheros/state" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 State reset

POST/api/user/featheros/session/acquire

Auth: Signed-in userDefault rate limit: 60 / minute (user-featheros)Route name: user-featheros-session-acquireController: FeatherOsController::acquireSessionroute source

Acquire the single FeatherOS session lease Only one active FeatherOS instance is allowed per user. Pass force=true to take over another tab or device.

curl -X POST "$PANEL_URL/api/user/featheros/session/acquire" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Lease acquired · 409 Another session is active

POST/api/user/featheros/session/heartbeat

Auth: Signed-in userDefault rate limit: 120 / minute (user-featheros)Route name: user-featheros-session-heartbeatController: FeatherOsController::heartbeatSessionroute source

Renew the FeatherOS session lease

curl -X POST "$PANEL_URL/api/user/featheros/session/heartbeat" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Lease renewed · 409 Lease owned by another instance

POST/api/user/featheros/session/release

Auth: Signed-in userDefault rate limit: 60 / minute (user-featheros)Route name: user-featheros-session-releaseController: FeatherOsController::releaseSessionroute source

Release the FeatherOS session lease

curl -X POST "$PANEL_URL/api/user/featheros/session/release" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Lease released

GET/api/user/featheros/notes

Auth: Signed-in userDefault rate limit: 60 / minute (user-featheros)Route name: user-featheros-notes-listController: FeatherOsController::listNotesroute source

List FeatherOS notes

curl -X GET "$PANEL_URL/api/user/featheros/notes" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Notes retrieved

POST/api/user/featheros/notes

Auth: Signed-in userDefault rate limit: 30 / minute (user-featheros)Route name: user-featheros-notes-createController: FeatherOsController::createNoteroute source

Create a FeatherOS note Body: {"title": string, "content": string, "color"?: string, "pinned"?: bool}.

curl -X POST "$PANEL_URL/api/user/featheros/notes" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 201 Note created · 400 Invalid note · 409 Note limit reached

PUT/api/user/featheros/notes/{id}

Auth: Signed-in userDefault rate limit: 120 / minute (user-featheros)Route name: user-featheros-notes-updateController: FeatherOsController::updateNoteroute source

Update a FeatherOS note

ParameterInTypeRequiredDescription
idpathintegeryes
curl -X PUT "$PANEL_URL/api/user/featheros/notes/$ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Note updated · 404 Note not found

POST/api/user/featheros/wallpaper

Auth: Signed-in userDefault rate limit: 10 / minute (user-featheros)Route name: user-featheros-wallpaper-uploadController: FeatherOsController::uploadWallpaperroute source

Upload a custom FeatherOS wallpaper Accepts a JPEG, PNG, GIF or WebP image (max 8 MiB). Stored under /attachments/featheros-wallpapers/ and returned as a URL for the desktop state.

curl -X POST "$PANEL_URL/api/user/featheros/wallpaper" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Wallpaper uploaded · 400 Invalid file · 401 Unauthorized

DELETE/api/user/featheros/notes/{id}

Auth: Signed-in userDefault rate limit: 30 / minute (user-featheros)Route name: user-featheros-notes-deleteController: FeatherOsController::deleteNoteroute source

Delete a FeatherOS note

ParameterInTypeRequiredDescription
idpathintegeryes
curl -X DELETE "$PANEL_URL/api/user/featheros/notes/$ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Note deleted · 404 Note not found

GET/api/user/featheros/trash

Auth: Signed-in userDefault rate limit: 60 / minute (user-featheros)Route name: user-featheros-trash-listController: FeatherOsController::listTrashroute source

List FeatherOS trash entries

curl -X GET "$PANEL_URL/api/user/featheros/trash" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

POST/api/user/featheros/trash

Auth: Signed-in userDefault rate limit: 60 / minute (user-featheros)Route name: user-featheros-trash-registerController: FeatherOsController::registerTrashroute source

Register items moved into .featheros-trash

curl -X POST "$PANEL_URL/api/user/featheros/trash" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

POST/api/user/featheros/trash/forget

Auth: Signed-in userDefault rate limit: 60 / minute (user-featheros)Route name: user-featheros-trash-forgetController: FeatherOsController::forgetTrashroute source

Drop trash metadata after restore or permanent delete

curl -X POST "$PANEL_URL/api/user/featheros/trash/forget" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"