REST Endpoints
All endpoints expect/produce JSON unless noted. Authorization header required if password configured.
Players
Create Player
POST /v0/players
Body:
{
"id": "string", // unique player id you choose
"uri": "string", // direct or resolvable URI
"metadata": { "any": "json" } // optional arbitrary JSON
}Responses:
- 201 Created
{ "id": "<id>" } - 409 Conflict (duplicate id)
- 403 Forbidden (blocked URI)
- 400 Bad Request (invalid data)
List Players
GET /v0/players
Returns array of players each containing:
{
"id": "player1",
"track": {
"encoded": "base64identifier",
"info": {
"identifier": "original-or-direct-uri",
"isSeekable": false,
"author": "",
"length": 0,
"isStream": true,
"position": 2000,
"title": "derived title",
"uri": "direct-uri-or-source",
"artworkUrl": null,
"isrc": null,
"sourceName": "http|file|direct",
},
"pluginInfo": {},
"userData": {
/* metadata JSON */
},
},
}Delete Player
DELETE /v0/players/{id} -> 204 or 404.
Play / Pause
POST /v0/players/{id}/play -> 204 POST /v0/players/{id}/pause -> 204
Skip
POST /v0/players/{id}/skip -> 204 (Triggers TrackEnd + next selection logic).
Queue
Enqueue
POST /v0/players/{id}/queue
{ "uri": "string", "metadata": { "any": "json" } }-> 201 { "trackId": "uuid" }
Get Queue
GET /v0/players/{id}/queue Returns array of queued track items:
[{ "id": "uuid", "uri": "string", "metadata": { ... } }]Loop Mode
Set
PATCH /v0/players/{id}/loop
{ "mode": "none" | "track" | "queue" }-> 204
Filters
Update Volume & EQ
PATCH /v0/players/{id}/filters
{
"volume": 1.0, // 0.0 - 5.0
"eq": [
{ "band": 0, "gain_db": -3.0 },
{ "band": 5, "gain_db": 4.5 }
]
}-> 204
Metadata
Merge or Replace
PATCH /v0/players/{id}/metadata
{ "merge": true, "value": { "album": "Example" } }-> 204
Resolver
Resolve URL (Manual)
GET /v0/resolve?url=<encoded> -> 200 body = direct path/URL or 400.
Requires resolver enabled and allowed source.
Track Helpers
Load Tracks
GET /v0/loadtracks?identifier=<id>
Returns either:
{
"loadType": "track",
"data": {
/* TrackOut */
}
}Or:
{ "loadType": "empty", "data": {} }Decode Track
GET /v0/decodetrack?encodedTrack=<b64> -> TrackOut or 400.
Decode Multiple
POST /v0/decodetracks Body: ["base64", "base64"] -> list of TrackOut objects.
Info
Info
GET /info
{ "version": "x.y.z", "buildTime": 1712345678900 }Version
GET /version -> plain text or JSON version (implementation detail).
Errors
| Code | Meaning |
|---|---|
| 400 | Bad input / invalid base64 / resolver disabled |
| 401 | Missing or wrong password |
| 403 | URI blocked by source patterns |
| 404 | Player not found |
| 409 | Player id already exists |
| 500 | Internal error |
