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
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
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
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
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
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
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
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
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}
Update a FeatherOS note
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes |
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
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}
Delete a FeatherOS note
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes |
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
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
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
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"