owntone-server/README_JSON_API.md

13 KiB

forked-daapd API Endpoint Reference

Available API endpoints:

Player

Method Endpoint Description
GET /api/player Get player status
PUT /api/player/play, /api/player/pause, /api/player/stop Start, pause or stop playback
PUT /api/player/next, /api/player/prev Skip forward or backward
PUT /api/player/shuffle Set shuffle mode
PUT /api/player/consume Set consume mode
PUT /api/player/repeat Set repeat mode
PUT /api/player/volume Set master volume or volume for a specific output

Get player status

Endpoint

GET /api/player

Response

Key Type Value
state string play, pause or stop
repeat string off, all or single
consume boolean true if consume mode is enabled
shuffle boolean true if shuffle mode is enabled
volume integer Master volume in percent (0 - 100)
item_id integer The current playing queue item id
item_length_ms integer Total length in milliseconds of the current queue item
item_progress_ms integer Progress into the current queue item in milliseconds

Example

curl -X GET "http://localhost:3689/api/player"
{
  "state": "pause",
  "repeat": "off",
  "consume": false,
  "shuffle": false,
  "volume": 50,
  "item_id": 269,
  "item_length_ms": 278093,
  "item_progress_ms": 3674
}

Control playback

Start or resume, pause, stop playback.

Endpoint

PUT /api/player/play
PUT /api/player/pause
PUT /api/player/stop

Response

On success returns the HTTP 204 No Content success status response code.

Example

curl -X PUT "http://localhost:3689/api/player/play"
curl -X PUT "http://localhost:3689/api/player/pause"
curl -X PUT "http://localhost:3689/api/player/stop"

Skip tracks

Skip forward or backward

Endpoint

PUT /api/player/next
PUT /api/player/prev

Response

On success returns the HTTP 204 No Content success status response code.

Example

curl -X PUT "http://localhost:3689/api/player/next"
curl -X PUT "http://localhost:3689/api/player/prev"

Set shuffle mode

Enable or disable shuffle mode

Endpoint

PUT /api/player/shuffle

Query parameters

Parameter Value
state The new shuffle state, should be either true or false

Response

On success returns the HTTP 204 No Content success status response code.

Example

curl -X PUT "http://localhost:3689/api/player/shuffle?state=true"

Set consume mode

Enable or disable consume mode

Endpoint

PUT /api/player/consume

Query parameters

Parameter Value
state The new consume state, should be either true or false

Response

On success returns the HTTP 204 No Content success status response code.

Example

curl -X PUT "http://localhost:3689/api/player/consume?state=true"

Set repeat mode

Change repeat mode

Endpoint

PUT /api/player/repeat

Query parameters

Parameter Value
state The new repeat mode, should be either off, all or single

Response

On success returns the HTTP 204 No Content success status response code.

Example

curl -X PUT "http://localhost:3689/api/player/repeat?state=all"

Set volume

Change master volume or volume of a specific output.

Endpoint

PUT /api/player/volume

Query parameters

Parameter Value
volume The new volume (0 - 100)
output_id (Optional) If an output id is given, only the volume of this output will be changed. If parameter is omited, the master volume will be changed.

Response

On success returns the HTTP 204 No Content success status response code.

Example

curl -X PUT "http://localhost:3689/api/player/volume?volume=50"
curl -X PUT "http://localhost:3689/api/player/volume?volume=50&output_id=0"

Outputs / Speakers

Method Endpoint Description
GET /api/outputs Get a list of available outputs
PUT /api/outputs/set Set enabled outputs
GET /api/outputs/{id} Get an output
PUT /api/outputs/{id} Change an output (enable/disable or volume)

Get a list of available outputs

Endpoint

GET /api/outputs

Response

Key Type Value
outputs array Array of output objects

output object

Key Type Value
id string Output id
name string Output name
type string Type of the output: AirPlay, Chromecast, ALSA, Pulseaudio, fifo
selected boolean true if output is enabled
has_password boolean true if output is password protected
requires_auth boolean true if output requires authentication
needs_auth_key boolean true if output requires an authorization key (device verification)
volume integer Volume in percent (0 - 100)

Example

curl -X GET "http://localhost:3689/api/outputs"
{
  "outputs": [
    {
      "id": "123456789012345",
      "name": "kitchen",
      "type": "AirPlay",
      "selected": true,
      "has_password": false,
      "requires_auth": false,
      "needs_auth_key": false,
      "volume": 0
    },
    {
      "id": "0",
      "name": "Computer",
      "type": "ALSA",
      "selected": true,
      "has_password": false,
      "requires_auth": false,
      "needs_auth_key": false,
      "volume": 19
    },
    {
      "id": "100",
      "name": "daapd-fifo",
      "type": "fifo",
      "selected": false,
      "has_password": false,
      "requires_auth": false,
      "needs_auth_key": false,
      "volume": 0
    }
  ]
}

Set enabled outputs

Set the enabled outputs by passing an array of output ids. forked-daapd enables all outputs with the given ids and disables the remaining outputs.

Endpoint

PUT /api/outputs/set

Body parameters

Parameter Type Value
outputs array Array of output ids

Response

On success returns the HTTP 204 No Content success status response code.

Example

curl -X PUT "http://localhost:3689/api/outputs/set" --data "{\"outputs\":[\"198018693182577\",\"0\"]}"

Get an output

Get an output

Endpoint

GET /api/outputs/{id}

Path parameters

Parameter Value
id Output id

Response

On success returns the HTTP 200 OK success status response code. With the response body holding the output object.

Example

curl -X GET "http://localhost:3689/api/outputs/0"
{
  "id": "0",
  "name": "Computer",
  "type": "ALSA",
  "selected": true,
  "has_password": false,
  "requires_auth": false,
  "needs_auth_key": false,
  "volume": 3
}

Change an output

Enable or disable an output and change its volume.

Endpoint

PUT /api/outputs/{id}

Path parameters

Parameter Value
id Output id

Body parameters

Parameter Type Value
selected boolean (Optional) true to enable and false to disable the output
volume integer (Optional) Volume in percent (0 - 100)

Response

On success returns the HTTP 204 No Content success status response code.

Example

curl -X PUT "http://localhost:3689/api/outputs/0" --data "{\"selected\":true, \"volume\": 50}"

Server info

Method Endpoint Description
GET /api/config Get configuration information

Config

Endpoint

GET /api/config

Response

Key Type Value
version string forked-daapd server version
websocket_port integer Port number for the websocket (or 0 if websocket is disabled)
buildoptions array Array of strings indicating which features are supported by the forked-daapd server

Example

curl -X GET "http://localhost:3689/api/config"
{
  "websocket_port": 3688,
  "version": "25.0",
  "buildoptions": [
    "ffmpeg",
    "iTunes XML",
    "Spotify",
    "LastFM",
    "MPD",
    "Device verification",
    "Websockets",
    "ALSA"
  ]
}

Push notifications

If forked-daapd was built with websocket support, forked-daapd exposes a websocket at localhost:3688 to inform clients of changes (e. g. player state or library updates). The port depends on the forked-daapd configuration and can be read using the /api/config endpoint.

After connecting to the websocket, the client should send a message containing the event types it is interested in. After that forked-daapd will send a message each time one of the events occurred.

Message

Key Type Value
notify array Array of event types

Event types

Type Description
update Library update started or finished
outputs An output was enabled or disabled
player Player state changes
options Playback option changes (shuffle, repeat, consume mode)
volume Volume changes
queue Queue changes

Example

curl --include \
     --no-buffer \
     --header "Connection: Upgrade" \
     --header "Upgrade: websocket" \
     --header "Host: localhost:3688" \
     --header "Origin: http://localhost:3688" \
     --header "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" \
     --header "Sec-WebSocket-Version: 13" \
     --header "Sec-WebSocket-Protocol: notify" \
     http://localhost:3688/ \
     --data "{ \"notify\": [ \"player\" ] }"
{ 
  "notify": [
    "player"
  ]
}