{ "openapi": "3.0.3", "info": { "title": "FPP API", "description": "Falcon Player (FPP) REST API", "version": "1.0" }, "servers": [ { "url": "/", "description": "Local FPP instance" } ], "tags": [ { "name": "backups" }, { "name": "cape" }, { "name": "channel" }, { "name": "configfile" }, { "name": "dir" }, { "name": "effects" }, { "name": "email" }, { "name": "events" }, { "name": "file" }, { "name": "files" }, { "name": "git" }, { "name": "help" }, { "name": "media" }, { "name": "network" }, { "name": "options" }, { "name": "playlist" }, { "name": "playlists" }, { "name": "plugin" }, { "name": "proxies" }, { "name": "proxy" }, { "name": "remoteAction" }, { "name": "remotes" }, { "name": "schedule" }, { "name": "scripts" }, { "name": "sequence" }, { "name": "settings" }, { "name": "statistics" }, { "name": "system" }, { "name": "testmode" }, { "name": "time" } ], "paths": { "/api/backups/configuration": { "post": { "tags": [ "backups" ], "summary": "backups/configuration", "description": "Generates a new JSON settings backup for all settings areas. If an alternate backup location has been set, the backup is also copied to that location.", "requestBody": { "content": { "text/plain": { "schema": { "type": "string" }, "example": "The describing comment to be added to the backup" } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "success": true, "backup_file_path": "/home/fpp/media/config/backups/FPP_all-backup_v6_20230124212305.json", "copied_to_usb": true } } } } } } }, "/api/backups/configuration/list": { "get": { "tags": [ "backups" ], "summary": "backups/configuration/list", "description": "Returns a list of JSON configuration backups stored locally, or \u2014 if `jsonConfigBackupUSBLocation` is set \u2014 a combined list from local storage and the configured USB device.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "backup_alternative_location": false, "backup_filedirectory": "/home/fpp/media/config/backups", "backup_filename": "FPP_all-backup_v6_20230124212305.json", "backup_comment": "FPP Settings - Disable Scheduler setting was set to ( 0 ).", "backup_time": "Tue Jan 24 21:23:05 2023", "backup_time_unix": "1674559385" }, { "backup_alternative_location": true, "backup_filedirectory": "/mnt/tmp/Automatic_Backups/config/backups", "backup_filename": "FPP_all-backup_v6_20230124210519.json", "backup_comment": "Schedule was modified.", "backup_time": "Tue Jan 24 21:05:19 2023", "backup_time_unix": "1674558319" } ] } } } } } }, "/api/backups/configuration/list/{DeviceName}": { "parameters": [ { "name": "DeviceName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "backups" ], "summary": "backups/configuration/list/{DeviceName}", "description": "Returns a list of JSON configuration files on a specified alternate storage device. Available devices can be obtained from `/backups/devices`, or the currently configured device is stored in the `jsonConfigBackupUSBLocation` setting.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "FPP_all-backup_v6_20230114025351.json", "FPP_all-backup_v6_20230114025354.json", "FPP_all-backup_v6_20230114214459.json", "FPP_all-backup_v6_20230114215622.json" ] } } } } } }, "/api/backups/configuration/restore/{Directory}/{BackupFilename}": { "parameters": [ { "name": "Directory", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "BackupFilename", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "backups" ], "summary": "backups/configuration/restore/{Directory}/{BackupFilename}", "description": "Restores the specified JSON backup. `Directory` is either `JsonBackups` (local) or `JsonBackupsAlternate` (configured alternate device). `GET /api/backups/configuration/list` can be used to obtain valid directory and filename combinations.", "requestBody": { "content": { "text/plain": { "schema": { "type": "string" }, "example": "all" } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Success": true, "Message": { "success": true, "message": { "channelInputs": { "VALID_DATA": true, "ATTEMPT": true, "SUCCESS": true } } } } } } } } } }, "/api/backups/configuration/{Directory}/{BackupFilename}": { "parameters": [ { "name": "Directory", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "BackupFilename", "in": "path", "required": true, "schema": { "type": "string" } } ], "delete": { "tags": [ "backups" ], "summary": "backups/configuration/{Directory}/{BackupFilename}", "description": "Deletes a specific JSON backup. `Directory` is either `JsonBackups` (local) or `JsonBackupsAlternate` (configured alternate device). `GET /api/backups/configuration/list` can be used to obtain valid directories and filenames.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "file": "FPP_all-backup_v6_20230124210514.json", "dir": "JsonBackupsAlternate" } } } } } }, "get": { "tags": [ "backups" ], "summary": "backups/configuration/{Directory}/{BackupFilename}", "description": "Downloads a specific JSON backup. `Directory` is either `JsonBackups` (local) or `JsonBackupsAlternate` (configured alternate device). `GET /api/backups/configuration/list` can be used to obtain valid directories and filenames.", "responses": { "200": { "description": "Contents of the specified JSON Settings backup as a download" }, "404": { "description": "HTTP 404", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "File Not Found", "file": "FPP_all-backup_v6_20230124210514.json", "dir": "JsonBackups" } } } } } } }, "/api/backups/devices": { "get": { "tags": [ "backups" ], "summary": "backups/devices", "description": "Returns a list of devices (e.g. USB drives, SSDs) attached to the system that can be used for backups.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "name": "sda1", "size": 7.5, "model": "Cruzer Blade", "vendor": "SanDisk" } ] } } } } } }, "/api/backups/devices/mount/{DeviceName}/{MountLocation}": { "parameters": [ { "name": "DeviceName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "MountLocation", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "backups" ], "summary": "backups/devices/mount/{DeviceName}/{MountLocation}", "description": "Mounts the specified device to `/mnt/{MountLocation}` (defaults to `/mnt/api_mount`).", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "Device (sda1) mounted at (/mnt/api_mount)", "MountLocation": "/mnt/api_mount" } } } } } } }, "/api/backups/devices/unmount/{DeviceName}/{MountLocation}": { "parameters": [ { "name": "DeviceName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "MountLocation", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "backups" ], "summary": "backups/devices/unmount/{DeviceName}/{MountLocation}", "description": "Unmounts the drive at `/mnt/{MountLocation}` (defaults to `/mnt/api_mount`).", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "Device (sda1) unmounted from (/mnt/api_mount)", "MountLocation": "/mnt/api_mount" } } } } } } }, "/api/backups/list": { "get": { "tags": [ "backups" ], "summary": "backups/list", "description": "Returns a list of full system backup files stored in the local `backups/` directory.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "/", "FPPDevP4", "FPPDevP4_2026_05_02" ] } } } } } }, "/api/backups/list/{DeviceName}": { "parameters": [ { "name": "DeviceName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "backups" ], "summary": "backups/list/{DeviceName}", "description": "Returns a list of full system backup files stored on the specified device (e.g. a USB drive).", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "/", "FPPDevP4", "FPPDevP4_2026_05_02" ] } } } } } }, "/api/cape": { "get": { "tags": [ "cape" ], "summary": "cape", "description": "Returns the cape information for the currently detected hardware cape (from `cape-info` settings).", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "id": "K16A-Bv1", "name": "K16A-B", "description": "K16A-B is a cape for the BeagleBone Black...", "version": "1.0", "designer": "Daniel Kulp", "vendor": { "name": "Kulp Lights", "url": "https://kulplights.com/", "email": "sales@kulplights.com", "image": "https://kulplights.com/images/kulplights_small.png" }, "provides": [ "strings" ], "serialNumber": "XXXXXXXXXXXXXX", "validEepromLocation": true, "verifiedKeyId": "dk", "cs": "yfNvfkLTR1gbKbVGjH4DEg", "eepromLocation": "/sys/bus/i2c/devices/2-0050/eeprom", "modules": [ "gpio_pcf857x", "pcm5102a", "lm75" ], "i2cDevices": [ "pca9675 0x20", "pcf8523 0x68", "lm75 0x48" ], "defaultSettings": { "LEDDisplayType": "1", "piRTC": "4", "showAllOptions": "0" } } } } }, "404": { "description": "HTTP 404", "content": { "application/json": { "schema": { "type": "object" }, "example": { "id": "No Cape!" } } } } } } }, "/api/cape/eeprom/sign/{key}/{order}": { "parameters": [ { "name": "key", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "order", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "cape" ], "summary": "cape/eeprom/sign/{key}/{order}", "description": "Signs the cape EEPROM by sending its data to the FalconPlayer.com signing API using the provided `key` and order ID.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "EEPROM Signed." } } } } } } }, "/api/cape/eeprom/signingData": { "post": { "tags": [ "cape" ], "summary": "cape/eeprom/signingData", "description": "Accepts a signed EEPROM data payload and writes it back to the cape EEPROM. Accepts either a multipart file upload (`signingPacket`) or a raw JSON body.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "key": "ABCD-1234", "orderID": "42", "serial": "1000000012345678", "eeprom": "" } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "EEPROM Signed." } } } } } } }, "/api/cape/eeprom/signingData/{key}/{order}": { "parameters": [ { "name": "key", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "order", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "cape" ], "summary": "cape/eeprom/signingData/{key}/{order}", "description": "Returns the cape EEPROM signing data payload for use with an external signing service.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "key": "ABCD-1234", "orderID": "42", "serial": "1000000012345678", "eeprom": "" } } } } } } }, "/api/cape/eeprom/signingFile/{key}/{order}": { "parameters": [ { "name": "key", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "order", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "cape" ], "summary": "cape/eeprom/signingFile/{key}/{order}", "description": "Downloads the cape EEPROM signing data as a binary file attachment.", "responses": { "200": { "description": "Binary file download containing the signing data JSON" } } } }, "/api/cape/eeprom/voucher": { "post": { "tags": [ "cape" ], "summary": "cape/eeprom/voucher", "description": "Redeems a voucher code against the FalconPlayer.com signing API to obtain a signing `key` and order ID.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "voucher": "XXXX-XXXX-XXXX-XXXX", "first_name": "John", "last_name": "Doe", "email": "john@example.com", "password": "secret" } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "", "key": "ABCD-1234", "order": "42" } } } } } } }, "/api/cape/options": { "get": { "tags": [ "cape" ], "summary": "cape/options", "description": "Returns a list of available cape EEPROM options for the current platform.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "--None--", "F16-B", "F32-B", "F4-B", "F8-B", "F8-Bv2", "RGB-123" ] } } } } } }, "/api/cape/panel": { "get": { "tags": [ "cape" ], "summary": "cape/panel", "description": "Returns a list of available LED panel cape configuration `key` values.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [] } } } } } }, "/api/cape/panel/{key}": { "parameters": [ { "name": "key", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "cape" ], "summary": "cape/panel/{key}", "description": "Returns the LED panel cape configuration JSON for the specified `key`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": {} } } } } } }, "/api/cape/strings": { "get": { "tags": [ "cape" ], "summary": "cape/strings", "description": "Returns a list of available string cape configuration `key` values.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "F16v3-strings", "F8v2-strings" ] } } } } } }, "/api/cape/strings/{key}": { "parameters": [ { "name": "key", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "cape" ], "summary": "cape/strings/{key}", "description": "Returns the string cape configuration JSON for the specified `key`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "name": "K16A-B", "longName": "K16A-B", "pinoutVersion": "1.x", "numSerial": 0, "supportsSmartReceivers": true, "outputs": [ { "pin": "P8-45" } ], "groups": [ { "start": 1, "count": 16 } ], "serial": [] } } } }, "404": { "description": "HTTP 404", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "Not Found!" ] } } } } } }, "/api/channel/input/stats": { "delete": { "tags": [ "channel" ], "summary": "channel/input/stats", "description": "Resets the E1.31/DDP channel input statistics counters. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } }, "get": { "tags": [ "channel" ], "summary": "channel/input/stats", "description": "Returns the E1.31 or DDP statistics for inbound packets. Returns a meaningful error if the connection to `fppd` fails. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "universes": [ { "bytesReceived": "325632", "errors": "1", "id": 1, "packetsReceived": "636", "startChannel": 1 } ] } } } } } } }, "/api/channel/output/processors": { "get": { "tags": [ "channel" ], "summary": "channel/output/processors", "description": "Returns the current configuration of any output processors.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "outputProcessors": [ { "type": "Brightness", "active": 0, "description": "", "start": 1, "count": 10, "brightness": 50, "gamma": 1 } ], "status": "OK" } } } } } }, "post": { "tags": [ "channel" ], "summary": "channel/output/processors", "description": "Overwrites the output processor settings file with a new configuration and returns the saved configuration.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "outputProcessors": [ { "type": "Brightness", "active": 0, "description": "", "start": 1, "count": 10, "brightness": 50, "gamma": 1 } ] } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "outputProcessors": [ { "type": "Brightness", "active": 0, "description": "", "start": 1, "count": 10, "brightness": 50, "gamma": 1 } ], "status": "OK" } } } } } } }, "/api/channel/output/{file}": { "parameters": [ { "name": "file", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "channel" ], "summary": "channel/output/{file}", "description": "Returns the current configuration of the specified output file in JSON format. Common values of `{file}` include `universeOutputs`, `universeInputs`, `co-other`, `dmxInputs`, `co-pwm`, and `co-bbbStrings`. Supports an optional `?ip=` query parameter to fetch from a remote FPP instance.", "responses": { "404": { "description": "HTTP 404", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "ERROR: File not found" } } } } } }, "post": { "tags": [ "channel" ], "summary": "channel/output/{file}", "description": "Overwrites the specified output configuration file with the `POST` body and returns the saved configuration.", "requestBody": { "content": { "text/plain": { "schema": { "type": "string" }, "example": "Format varies based on file" } } }, "responses": { "200": { "description": "Format varies based on file" } } } }, "/api/configfile": { "get": { "tags": [ "configfile" ], "summary": "configfile", "description": "Returns a list of config files in `/home/fpp/media/config` or an optional subdirectory.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Path": "", "ConfigFiles": [ "File1", "File2", "File3" ] } } } } } } }, "/api/configfile/**": { "delete": { "tags": [ "configfile" ], "summary": "configfile/**", "description": "Deletes a config file from `/home/fpp/media/config`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } }, "get": { "tags": [ "configfile" ], "summary": "configfile/**", "description": "Returns the contents of a specific config file, or a directory listing if the path resolves to a directory.", "responses": { "200": { "description": "(Raw config file contents)" } } }, "post": { "tags": [ "configfile" ], "summary": "configfile/**", "description": "Uploads or overwrites a config file in `/home/fpp/media/config`, creating any necessary subdirectories. Accepts a multipart file upload or raw `POST` body.", "requestBody": { "content": { "text/plain": { "schema": { "type": "string" }, "example": "(Raw config file contents)" } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/dir/{DirName}/{SubDir}": { "parameters": [ { "name": "DirName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "SubDir", "in": "path", "required": true, "schema": { "type": "string" } } ], "delete": { "tags": [ "dir" ], "summary": "dir/{DirName}/{SubDir}", "description": "Deletes an empty subdirectory from the specified media directory.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "subdir": "mySubDir", "dir": "sequences" } } } } } }, "post": { "tags": [ "dir" ], "summary": "dir/{DirName}/{SubDir}", "description": "Creates a subdirectory inside the specified media directory.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "subdir": "mySubDir", "dir": "sequences" } } } } } } }, "/api/effects": { "get": { "tags": [ "effects" ], "summary": "effects", "description": "Returns a list of effect (`*.eseq`) files available in the effects directory.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "rainbow", "twinkle" ] } } } } } }, "/api/effects/ALL": { "get": { "tags": [ "effects" ], "summary": "effects/ALL", "description": "Returns a combined list of all effect (`*.eseq`) files from both the effects directory and the sequences directory.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "rainbow", "twinkle", "MySequence" ] } } } } } }, "/api/email/configure": { "post": { "tags": [ "email" ], "summary": "email/configure", "description": "Configures outbound email using the existing settings.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/email/test": { "post": { "tags": [ "email" ], "summary": "email/test", "description": "Sends a test email using the existing settings.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/events": { "get": { "tags": [ "events" ], "summary": "events", "description": "Returns a map of all event (`*.fevt`) files, keyed by event ID (filename without extension).", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "1_1": { "name": "My Event", "effect": "rainbow", "startChannel": 1 } } } } } } } }, "/api/events/{eventId}": { "parameters": [ { "name": "eventId", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "events" ], "summary": "events/{eventId}", "description": "Returns the contents of a specific event file. If `{eventId}` is `ids`, returns a map of event IDs to display names.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "name": "My Event", "effect": "rainbow", "startChannel": 1 } } } } } } }, "/api/events/{eventId}/trigger": { "parameters": [ { "name": "eventId", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "events" ], "summary": "events/{eventId}/trigger", "description": "Triggers the specified event by sending a `Trigger Event` command to `fppd`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/file/info/{plugin}/{ext}/**": { "parameters": [ { "name": "plugin", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "ext", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "file" ], "summary": "file/info/{plugin}/{ext}/**", "description": "Returns plugin-specific file info for the specified file path. The plugin name, extension category, and file path are read from route parameters. The metadata command is defined in the plugin's `pluginInfo.json`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": {} } } } } } }, "/api/file/move/{fileName}": { "parameters": [ { "name": "fileName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "file" ], "summary": "file/move/{fileName}", "description": "Moves the specified file from the `uploads` directory to the correct media subfolder based on its extension, returning a status of `OK` or an error message if not successful.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/file/onUpload/{ext}/**": { "parameters": [ { "name": "ext", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "file" ], "summary": "file/onUpload/{ext}/**", "description": "Notifies any plugin that has registered an `onUpload` handler for the given file extension. `:ext` is the extension category and `**` is the file path.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/file/{DirName}": { "parameters": [ { "name": "DirName", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "file" ], "summary": "file/{DirName}", "description": "Handles chunked file uploads via `PATCH` (TUS-style). A `POST` to the same route initiates the session and returns a unique upload ID. Each `PATCH` request delivers a chunk identified by `Upload-Name`, `Upload-Offset`, and `Upload-Length` headers; when all chunks arrive, the file is assembled.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "file": "block_driveways.xbkp", "dir": "uploads", "size": 1048576 } } } } } } }, "/api/file/{DirName}/**": { "parameters": [ { "name": "DirName", "in": "path", "required": true, "schema": { "type": "string" } } ], "delete": { "tags": [ "file" ], "summary": "file/{DirName}/**", "description": "Deletes the specified file or directory from a media directory. Validates the resolved path against the allowed base directory to prevent path traversal.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "file": "block_driveways.xbkp", "dir": "uploads" } } } } } }, "get": { "tags": [ "file" ], "summary": "file/{DirName}/**", "description": "Downloads the specified file from a media directory. Supports optional query params: `?tail=N` (return last N lines), `?play=1` (set playback content type), `?attach=1` (force attachment download for images).", "responses": { "200": { "description": "The File Contents" }, "404": { "description": "File does not exist." } } } }, "/api/file/{DirName}/copy/{source}/{dest}": { "parameters": [ { "name": "DirName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "source", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "dest", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "file" ], "summary": "file/{DirName}/copy/{source}/{dest}", "description": "Copies the specified file from `:source` to `:dest` within the given directory.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "success", "original": "test.py", "new": "test2.py" } } } } } } }, "/api/file/{DirName}/rename/{source}/{dest}": { "parameters": [ { "name": "DirName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "source", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "dest", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "file" ], "summary": "file/{DirName}/rename/{source}/{dest}", "description": "Renames the specified file from `:source` to `:dest` within the given directory.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "success", "original": "test.py", "new": "test2.py" } } } } } } }, "/api/file/{DirName}/tailfollow/**": { "parameters": [ { "name": "DirName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "file" ], "summary": "file/{DirName}/tailfollow/**", "description": "Streams the tail of a log file using Server-Sent Events (SSE). Only works for files in the `logs` directory. Accepts optional `?lines=N` query param (default 50, max 500). Sends a heartbeat comment every 30 seconds to keep the connection alive, and wraps `tail` in a 300-second timeout.", "responses": { "200": { "description": "Server-sent event stream of new log lines as they are appended" }, "403": { "description": "Tail follow is only allowed for log files." }, "404": { "description": "File not found: " } } } }, "/api/file/{DirName}/{Name}": { "parameters": [ { "name": "DirName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Name", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "file" ], "summary": "file/{DirName}/{Name}", "description": "Uploads a file to the specified media directory. Supports optional query params `bs` (block size) and `sb` (start block) for fragment uploads on systems with large file requirements.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "file": "beepbeep.fseq", "dir": "sequences" } } } } } } }, "/api/files/zip/{DirNames}": { "parameters": [ { "name": "DirNames", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "files" ], "summary": "files/zip/{DirNames}", "description": "Downloads all files in the specified directory (or comma-separated list of directories) as a zip archive. `logs` and `config` are handled specially to include system log and config files.", "responses": { "200": { "description": "A Zip file" } } } }, "/api/files/{DirName}": { "parameters": [ { "name": "DirName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "files" ], "summary": "files/{DirName}", "description": "Returns a list of files in the specified media directory. Supports `?nameOnly=1` to return a flat array of filenames.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "ok", "files": [ { "name": "Christmas Every Day.mp3", "mtime": "09/23/20 07:47 PM", "sizeBytes": 7929000, "sizeHuman": "7.56MB", "playtimeSeconds": "03m:46s" } ] } } } } } } }, "/api/git/branches": { "get": { "tags": [ "git" ], "summary": "git/branches", "description": "Returns an array of branches available to switch to, filtering out obsolete version branches and Dependabot branches.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "master", "v7.3", "v7.2", "v7.1", "v7.0" ] } } } } } }, "/api/git/originLog": { "get": { "tags": [ "git" ], "summary": "git/originLog", "description": "Returns a list of commits present in the `origin` (GitHub) but not in the local repository.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "rows": [ { "hash": "95ccb370e45272d8aed76aabfa55e60d489a8280", "author": "GithubUser1", "msg": "Use our SaveJsonToString() when generating MQTT warnings JSON message." }, { "hash": "2fad5ad941baea49edaab834429343b42981bcc5", "author": "GithubUser2", "msg": "Move Playlist initialization into main() via Player::Init()" } ] } } } } } } }, "/api/git/releases/os/{All}": { "parameters": [ { "name": "All", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "git" ], "summary": "git/releases/os/{All}", "description": "Returns lists of `.fppos` files available locally or on GitHub for the current platform. If the `{All}` path parameter is `\"all\"`, returns all releases regardless of platform.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "downloaded": [ "Pi-v4.4.fppos", "Pi-5.0-alpha1.fppos" ], "files": [ { "tag": "5.1", "release_name": "5.1", "filename": "Pi-5.1.1.fppos", "url": "https://github.com/FalconChristmas/fpp/releases/download/5.1/Pi-5.1.1.fppos", "asset_id": 42917234, "downloaded": false, "size": 0, "prerelease": false } ] } } } } } } }, "/api/git/releases/sizes": { "get": { "tags": [ "git" ], "summary": "git/releases/sizes", "description": "Returns release asset size information from the GitHub `FalconChristmas/fpp` releases API.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "BBB-nightly_2026-05.fppos,1161494528", "BBB-10.0-alpha_2026-02.fppos,884658176" ] } } } } } }, "/api/git/reset": { "get": { "tags": [ "git" ], "summary": "git/reset", "description": "Performs a hard reset on the current branch, discarding any local changes.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "log": [ "HEAD is now at a1b65d43 Git Reset moved - #944", "Entering 'external/RF24'", "HEAD is now at ebc3abe Fix typo, missing space." ] } } } } } } }, "/api/git/status": { "get": { "tags": [ "git" ], "summary": "git/status", "description": "Returns the status of the local git branch, including any dirty files.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "log": "On branch master\nYour branch is up to date with 'origin/master'." } } } } } } }, "/api/help": { "get": { "tags": [ "help" ], "summary": "help", "description": "Returns an HTML page listing all available FPP API endpoints and their descriptions.", "responses": { "200": { "description": "" } } } }, "/api/media": { "get": { "tags": [ "media" ], "summary": "media", "description": "Returns a list of media files (includes both music and video files).", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "Frosty.mp4", "Jingle_Bells.mp3" ] } } } } } }, "/api/media/{MediaName}/duration": { "parameters": [ { "name": "MediaName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "media" ], "summary": "media/{MediaName}/duration", "description": "Returns the duration of a media item.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "1min_720p29_2014-10-01.mp4": { "duration": 60.010666666667 } } } } }, "404": { "description": "Not found: {MediaName}" } } } }, "/api/media/{MediaName}/meta": { "parameters": [ { "name": "MediaName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "media" ], "summary": "media/{MediaName}/meta", "description": "Returns metadata for a specific media file.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "programs": [], "streams": [ { "index": 0, "codec_name": "h264", "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", "profile": "High", "codec_type": "video", "codec_time_base": "500/29971" } ] } } } } } } }, "/api/network/dns": { "get": { "tags": [ "network" ], "summary": "network/dns", "description": "Returns the current DNS configuration. If not configured, `status` will be `Not Configured`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "DNS1": "192.168.50.1", "DNS2": "192.168.1.1", "status": "OK" } } } } } }, "post": { "tags": [ "network" ], "summary": "network/dns", "description": "Updates the DNS configuration.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "DNS1": "192.168.50.1", "DNS2": "192.168.1.1" } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "DNS": { "DNS1": "192.168.50.1", "DNS2": "192.168.1.1" } } } } } } } }, "/api/network/gateway": { "get": { "tags": [ "network" ], "summary": "network/gateway", "description": "Returns the currently configured default gateway IP address. May be empty when using DHCP.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "GATEWAY": "192.168.1.1" } } } } } }, "post": { "tags": [ "network" ], "summary": "network/gateway", "description": "Saves the default gateway IP address to the `gateway` configuration file.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "GATEWAY": "192.168.1.1" } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "GATEWAY": "192.168.1.1" } } } } } } }, "/api/network/interface": { "get": { "tags": [ "network" ], "summary": "network/interface", "description": "Returns detailed information about network interfaces, their IP addresses, and Wi-Fi signal strength.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "ifindex": 2, "ifname": "wlan0", "flags": [ "BROADCAST", "MULTICAST", "UP", "LOWER_UP" ], "mtu": 1500, "operstate": "UP", "addr_info": [ { "family": "inet", "local": "192.168.50.146", "prefixlen": 24 } ], "wifi": { "interface": "wlan0", "link": 52, "level": -58, "noise": -256, "desc": "good" } } ] } } } } } }, "/api/network/interface/add/{interface}": { "parameters": [ { "name": "interface", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "network" ], "summary": "network/interface/add/{interface}", "description": "Creates a new blank DHCP interface configuration file for the specified network interface (e.g. `eth1`, `wlan0`).", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "New Blank Interface created" } } } } } } }, "/api/network/interface/{interface}": { "parameters": [ { "name": "interface", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "network" ], "summary": "network/interface/{interface}", "description": "Retrieves the current network interface configuration.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "INTERFACE": "eth0", "PROTO": "static", "ADDRESS": "192.168.1.149", "NETMASK": "255.255.255.0", "status": "OK", "CurrentAddress": "192.168.1.149", "CurrentNetmask": "255.255.255.0" } } } } } }, "post": { "tags": [ "network" ], "summary": "network/interface/{interface}", "description": "Updates the saved configuration for the specified `{interface}` but does not restart the network.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "INTERFACE": "eth0", "PROTO": "static", "ADDRESS": "192.168.1.149", "NETMASK": "255.255.255.0", "GATEWAY": "192.168.1.1" } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/network/interface/{interface}/apply": { "parameters": [ { "name": "interface", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "network" ], "summary": "network/interface/{interface}/apply", "description": "Applies the networking settings for the specified `{interface}` at the OS level and restarts the interface.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "output": [] } } } } } } }, "/api/network/persistentNames": { "delete": { "tags": [ "network" ], "summary": "network/persistentNames", "description": "Removes interface persistent names by deleting systemd `.link` files and restoring any USB ethernet adapter config files back to `eth*` names.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } }, "post": { "tags": [ "network" ], "summary": "network/persistentNames", "description": "Creates interface persistent names by writing systemd `.link` files that pin each interface's name to its MAC address.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "interfaceCnt": 2 } } } } } } }, "/api/network/wifi/scan/{interface}": { "parameters": [ { "name": "interface", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "network" ], "summary": "network/wifi/scan/{interface}", "description": "Returns information about Wi-Fi networks discoverable via the specified `{interface}`. Networks without an SSID may appear in the list.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "networks": [ { "lastSeen": "0 ms ago", "freq": 2437, "signal": "-61.00 dBm", "SSID": "Christmas" } ] } } } } } } }, "/api/network/wifi/strength": { "get": { "tags": [ "network" ], "summary": "network/wifi/strength", "description": "Returns signal strength information for wireless network interfaces.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "interface": "wlan0", "link": 45, "level": -65, "noise": -256 } ] } } } } } }, "/api/options/{SettingName}": { "parameters": [ { "name": "SettingName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "options" ], "summary": "options/{SettingName}", "description": "Returns the available options for the specified setting. Supports `AudioMixerDevice`, `AudioOutput`, `AudioInput`, and other platform-specific option sets.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Dummy": "0" } } } } } } }, "/api/playlist/{PlaylistName}": { "parameters": [ { "name": "PlaylistName", "in": "path", "required": true, "schema": { "type": "string" } } ], "delete": { "tags": [ "playlist" ], "summary": "playlist/{PlaylistName}", "description": "Delete the playlist named {PlaylistName}.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } }, "get": { "tags": [ "playlist" ], "summary": "playlist/{PlaylistName}", "description": "Get the playlist named `{PlaylistName}` in FPP JSON format. If `?mergeSubs=1` is specified, sub-playlists are recursively merged into the parent sections.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "name": "UploadTest", "globalPauseBetweenSequencesMS": 5000, "mainPlaylist": [ { "type": "pause", "enabled": 1, "playOnce": 0, "duration": 8 } ], "playlistInfo": { "total_duration": 8, "total_items": 1 } } } } } } }, "post": { "tags": [ "playlist" ], "summary": "playlist/{PlaylistName}", "description": "Update/Insert the playlist named {PlaylistName}.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "name": "UploadTest", "globalPauseBetweenSequencesMS": 5000, "mainPlaylist": [ { "type": "pause", "enabled": 1, "playOnce": 0, "duration": 8 } ], "playlistInfo": { "total_duration": 8, "total_items": 1 } } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "name": "UploadTest", "globalPauseBetweenSequencesMS": 5000, "mainPlaylist": [ { "type": "pause", "enabled": 1, "playOnce": 0, "duration": 8 } ], "playlistInfo": { "total_duration": 8, "total_items": 1 } } } } } } } }, "/api/playlist/{PlaylistName}/start": { "parameters": [ { "name": "PlaylistName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "playlist" ], "summary": "playlist/{PlaylistName}/start", "description": "Start the playlist named `{PlaylistName}`. The optional query parameter `scheduleProtected` (`true`/`false`) prevents the scheduler from stopping this playlist. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/playlist/{PlaylistName}/start/{Repeat}": { "parameters": [ { "name": "PlaylistName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Repeat", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "playlist" ], "summary": "playlist/{PlaylistName}/start/{Repeat}", "description": "Start the playlist named `{PlaylistName}` with repeat mode. The optional query parameter `scheduleProtected` (`true`/`false`) prevents the scheduler from stopping this playlist. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/playlist/{PlaylistName}/start/{Repeat}/{ScheduleProtected}": { "parameters": [ { "name": "PlaylistName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Repeat", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "ScheduleProtected", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "playlist" ], "summary": "playlist/{PlaylistName}/start/{Repeat}/{ScheduleProtected}", "description": "Start the playlist named `{PlaylistName}` with repeat mode and schedule protection. When `{ScheduleProtected}` is `true`, the scheduler cannot stop this playlist. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/playlist/{PlaylistName}/{SectionName}/item": { "parameters": [ { "name": "PlaylistName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "SectionName", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "playlist" ], "summary": "playlist/{PlaylistName}/{SectionName}/item", "description": "Insert an item into the `{SectionName}` section of playlist `{PlaylistName}`.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "type": "pause", "enabled": 1, "playOnce": 0, "duration": 8 } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/playlists": { "get": { "tags": [ "playlists" ], "summary": "playlists", "description": "Get list of playlist names.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "Playlist_1", "Playlist_2", "Playlist_3" ] } } } } }, "post": { "tags": [ "playlists" ], "summary": "playlists", "description": "Insert a new playlist.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "name": "UploadTest", "globalPauseBetweenSequencesMS": 5000, "mainPlaylist": [ { "type": "pause", "enabled": 1, "playOnce": 0, "duration": 8 } ], "playlistInfo": { "total_duration": 8, "total_items": 1 } } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "name": "UploadTest", "globalPauseBetweenSequencesMS": 5000, "mainPlaylist": [ { "type": "pause", "enabled": 1, "playOnce": 0, "duration": 8 } ], "playlistInfo": { "total_duration": 8, "total_items": 1 } } } } } } } }, "/api/playlists/pause": { "get": { "tags": [ "playlists" ], "summary": "playlists/pause", "description": "Pause the currently running playlist. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/playlists/playable": { "get": { "tags": [ "playlists" ], "summary": "playlists/playable", "description": "Get a combined list of playlist names and `*.fseq` sequence filenames that are playable.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "Playlist_1", "Playlist_2", "MySequence.fseq" ] } } } } } }, "/api/playlists/resume": { "get": { "tags": [ "playlists" ], "summary": "playlists/resume", "description": "Resume a previously paused playlist. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/playlists/stop": { "get": { "tags": [ "playlists" ], "summary": "playlists/stop", "description": "Immediately stop the currently running playlist. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/playlists/stopgracefully": { "get": { "tags": [ "playlists" ], "summary": "playlists/stopgracefully", "description": "Gracefully stop the currently running playlist. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/playlists/stopgracefullyafterloop": { "get": { "tags": [ "playlists" ], "summary": "playlists/stopgracefullyafterloop", "description": "Gracefully stop the currently running playlist after completion of the current loop. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/playlists/validate": { "get": { "tags": [ "playlists" ], "summary": "playlists/validate", "description": "Returns a list of all playlists with any validation errors, total item counts, and total duration.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "name": "Test1", "description": "User entered playlist description", "valid": true, "messages": [], "total_duration": 10, "total_items": 3, "version": 4, "leadIn_items": 0, "mainPlaylist_items": 3, "leadOut_items": 0 } ] } } } } } }, "/api/plugin": { "get": { "tags": [ "plugin" ], "summary": "plugin", "description": "Get list of installed plugins.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "fpp-brightness", "fpp-matrixtools", "fpp-vastfmt" ] } } } } }, "post": { "tags": [ "plugin" ], "summary": "plugin", "description": "Install a new plugin. The request body is a `pluginInfo.json` structure with `branch` and `sha` fields added to specify which branch and commit to install.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "repoName": "fpp-matrixtools", "name": "MatrixTools", "author": "Chris Pinkham (CaptainMurdoch)", "srcURL": "https://github.com/cpinkham/fpp-matrixtools.git", "branch": "master", "sha": "" } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/plugin/fetchInfo": { "post": { "tags": [ "plugin" ], "summary": "plugin/fetchInfo", "description": "Server-side proxy for fetching a `pluginInfo.json` from a remote URL. Used to retrieve plugin repository info without CORS issues, and to authenticate against private GitHub repositories using credentials configured on the Developer settings page.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "url": "https://example.com/pluginInfo.json", "useCredentials": 1 } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": {} } } } } } }, "/api/plugin/headerIndicators": { "get": { "tags": [ "plugin" ], "summary": "plugin/headerIndicators", "description": "Returns header indicator data (e.g., notification badges) from all installed plugins that define a `headerIndicators.php` file.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "pluginName": "fpp-matrixtools", "label": "1", "color": "red" } ] } } } } } }, "/api/plugin/{RepoName}": { "parameters": [ { "name": "RepoName", "in": "path", "required": true, "schema": { "type": "string" } } ], "delete": { "tags": [ "plugin" ], "summary": "plugin/{RepoName}", "description": "Uninstall plugin {RepoName}.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } }, "get": { "tags": [ "plugin" ], "summary": "plugin/{RepoName}", "description": "Get `pluginInfo.json` for installed plugin `{RepoName}`. An additional `updatesAvailable` field indicates whether the plugin has commits that have been fetched but not yet merged.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "repoName": "fpp-matrixtools", "name": "MatrixTools", "author": "Chris Pinkham (CaptainMurdoch)", "srcURL": "https://github.com/cpinkham/fpp-matrixtools.git", "updatesAvailable": 0, "versions": [ { "minFPPVersion": 0, "maxFPPVersion": 0, "branch": "master", "sha": "" } ] } } } } } } }, "/api/plugin/{RepoName}/settings/{SettingName}": { "parameters": [ { "name": "RepoName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "SettingName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "plugin" ], "summary": "plugin/{RepoName}/settings/{SettingName}", "description": "Returns the value of setting `{SettingName}` from plugin `{RepoName}`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "SettingName": "SettingValue" } } } } } }, "post": { "tags": [ "plugin" ], "summary": "plugin/{RepoName}/settings/{SettingName}", "description": "Sets `{SettingName}` for plugin `{RepoName}` and returns the updated value.", "requestBody": { "content": { "text/plain": { "schema": { "type": "string" }, "example": "SettingValue" } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "SettingName": "SettingValue" } } } } } } }, "/api/plugin/{RepoName}/updates": { "parameters": [ { "name": "RepoName", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": [ "plugin" ], "summary": "plugin/{RepoName}/updates", "description": "Check plugin `{RepoName}` for available updates by running `git fetch` in the plugin directory and checking for any unmerged commits.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "", "updatesAvailable": 1 } } } } } } }, "/api/plugin/{RepoName}/upgrade": { "parameters": [ { "name": "RepoName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "plugin" ], "summary": "plugin/{RepoName}/upgrade", "description": "Pull in git updates for plugin `{RepoName}`. Supports an optional `?stream=true` query parameter for streaming output.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/proxies": { "delete": { "tags": [ "proxies" ], "summary": "proxies", "description": "Deletes all proxy entries by writing an empty `proxy-config.conf` and triggering an Apache graceful reload.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [] } } } } }, "get": { "tags": [ "proxies" ], "summary": "proxies", "description": "Returns the list of IP addresses this FPP instance can proxy.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "host": "192.168.1.2", "description": "Mega Tree" }, { "host": "192.168.1.146", "description": "Yard" }, { "host": "192.168.1.148", "description": "Left House" } ] } } } } }, "post": { "tags": [ "proxies" ], "summary": "proxies", "description": "Replaces the proxy list with the submitted array of `host`/`description` objects, validates each entry, and triggers an Apache graceful reload.", "requestBody": { "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "host": "192.168.1.2", "description": "Mega Tree" } ] } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "host": "192.168.1.2", "description": "Mega Tree" }, { "host": "192.168.1.146", "description": "Yard" }, { "host": "192.168.1.148", "description": "Left House" } ] } } }, "400": { "description": "HTTP 400", "content": { "application/json": { "schema": { "type": "object" }, "example": { "error": "No valid proxies provided" } } } } } } }, "/api/proxies/{ProxyIp}": { "parameters": [ { "name": "ProxyIp", "in": "path", "required": true, "schema": { "type": "string" } } ], "delete": { "tags": [ "proxies" ], "summary": "proxies/{ProxyIp}", "description": "Removes a single IP address from the FPP proxy list.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [] } } } } }, "post": { "tags": [ "proxies" ], "summary": "proxies/{ProxyIp}", "description": "Adds a single IP address to the FPP proxy list if it does not already exist.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "host": "192.168.1.2", "description": "Mega Tree" } ] } } } } } }, "/api/proxy/{Ip}/{urlPart}": { "parameters": [ { "name": "Ip", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "urlPart", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "proxy" ], "summary": "proxy/{Ip}/{urlPart}", "description": "Fetches a URL on a remote FPP instance via server-side proxy to avoid CSP restrictions.", "responses": { "400": { "description": "HTTP 400", "content": { "application/json": { "schema": { "type": "object" }, "example": { "error": "Invalid IP address" } } } }, "502": { "description": "HTTP 502", "content": { "application/json": { "schema": { "type": "object" }, "example": { "error": "Failed to fetch proxied URL" } } } } } } }, "/api/remoteAction": { "get": { "tags": [ "remoteAction" ], "summary": "remoteAction", "description": "Proxies a named action to a remote FPP instance by IP address. Supported actions: `listUpgrades`, `reboot`, `restartFppd`, `upgradeOS`.", "responses": { "400": { "description": "HTTP 400", "content": { "application/json": { "schema": { "type": "object" }, "example": { "error": "Invalid action given: badaction" } } } } } } }, "/api/remotes": { "get": { "tags": [ "remotes" ], "summary": "remotes", "description": "Returns the list of known remote FPP systems from `fppd` multiSync discovery.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "192.168.1.10": "192.168.1.10 - remote-fpp", "192.168.1.11": "192.168.1.11" } } } } } } }, "/api/schedule": { "get": { "tags": [ "schedule" ], "summary": "schedule", "description": "Returns the current FPP schedule configuration from `schedule.json`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "day": 7, "enabled": 0, "endDate": "2099-12-31", "endTime": "23:00:00", "playlist": "Main Show", "repeat": 1, "startDate": "2014-01-01", "startTime": "17:00:00", "stopType": 0 } ] } } } } }, "post": { "tags": [ "schedule" ], "summary": "schedule", "description": "Saves the new schedule configuration to `schedule.json`.", "requestBody": { "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "day": 7, "enabled": 0, "endDate": "2099-12-31", "endTime": "23:00:00", "playlist": "Main Show", "repeat": 1, "startDate": "2014-01-01", "startTime": "17:00:00", "stopType": 0 } ] } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ { "day": 7, "enabled": 0, "endDate": "2099-12-31", "endTime": "23:00:00", "playlist": "Main Show", "repeat": 1, "startDate": "2014-01-01", "startTime": "17:00:00", "stopType": 0 } ] } } }, "404": { "description": "Unable to open schedule.json for writing." } } } }, "/api/schedule/reload": { "post": { "tags": [ "schedule" ], "summary": "schedule/reload", "description": "Sends a reload command to `fppd` to re-read the schedule configuration. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/scripts": { "get": { "tags": [ "scripts" ], "summary": "scripts", "description": "Returns a list of currently installed scripts.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "script1.sh", "script2.sh" ] } } } } } }, "/api/scripts/installRemote/{category}/{filename}": { "parameters": [ { "name": "category", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "filename", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "scripts" ], "summary": "scripts/installRemote/{category}/{filename}", "description": "Installs a remote script from the script repository.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/scripts/viewRemote/{category}/{filename}": { "parameters": [ { "name": "category", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "filename", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "scripts" ], "summary": "scripts/viewRemote/{category}/{filename}", "description": "Returns the source code of a remote script from the script repository.", "responses": { "200": { "description": "The content of the script as a string" } } } }, "/api/scripts/{scriptName}": { "parameters": [ { "name": "scriptName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "scripts" ], "summary": "scripts/{scriptName}", "description": "Returns the source code of an installed script.", "responses": { "200": { "description": "The content of the script as a string" } } }, "post": { "tags": [ "scripts" ], "summary": "scripts/{scriptName}", "description": "Writes the `POST` request body to the file specified by `{scriptName}`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "scriptName": "test.py", "scriptBody": "#!/usr/bin/python\n\nprint(\"hi There Matt!\");\n" } } } } } } }, "/api/scripts/{scriptName}/run": { "parameters": [ { "name": "scriptName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "scripts" ], "summary": "scripts/{scriptName}/run", "description": "Runs a locally installed script.", "responses": { "200": { "description": "The output of the script as a String" } } } }, "/api/sequence": { "get": { "tags": [ "sequence" ], "summary": "sequence", "description": "Returns a list of all `*.fseq` sequence files.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "GreatestShow", "StPatricksDay", "Valentine" ] } } } } } }, "/api/sequence/current/step": { "get": { "tags": [ "sequence" ], "summary": "sequence/current/step", "description": "If the sequence was paused via `sequence/current/togglePause`, steps the sequence forward one frame. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/sequence/current/stop": { "get": { "tags": [ "sequence" ], "summary": "sequence/current/stop", "description": "Stops the currently playing sequence. Only valid if the sequence was started via `/api/sequence/{SequenceName}/start/{startSecond}`. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/sequence/current/togglePause": { "get": { "tags": [ "sequence" ], "summary": "sequence/current/togglePause", "description": "Pauses or resumes the currently playing sequence. Only valid if the sequence was started via `/api/sequence/{SequenceName}/start/{startSecond}`. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/sequence/{SequenceName}": { "parameters": [ { "name": "SequenceName", "in": "path", "required": true, "schema": { "type": "string" } } ], "delete": { "tags": [ "sequence" ], "summary": "sequence/{SequenceName}", "description": "Deletes the named `*.fseq` sequence file.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } }, "get": { "tags": [ "sequence" ], "summary": "sequence/{SequenceName}", "description": "Downloads the `*.fseq` file for the named sequence.", "responses": { "200": { "description": "(Raw FSEQ file data)" }, "404": { "description": "Not found: {SequenceName}" } } }, "post": { "tags": [ "sequence" ], "summary": "sequence/{SequenceName}", "description": "Uploads a new `*.fseq` sequence file.", "requestBody": { "content": { "text/plain": { "schema": { "type": "string" }, "example": "(Raw FSEQ file data)" } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Status": "OK", "Message": "" } } } } } } }, "/api/sequence/{SequenceName}/meta": { "parameters": [ { "name": "SequenceName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "sequence" ], "summary": "sequence/{SequenceName}/meta", "description": "Returns metadata from the `*.fseq` file for the named sequence.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Name": "GreatestShow.fseq", "Version": "2.0", "ID": "1553194098754908", "StepTime": 25, "NumFrames": 10750, "MaxChannel": 84992, "ChannelCount": 84992 } } } }, "404": { "description": "Not found: {SequenceName}" } } } }, "/api/sequence/{SequenceName}/start/{startSecond}": { "parameters": [ { "name": "SequenceName", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "startSecond", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "sequence" ], "summary": "sequence/{SequenceName}/start/{startSecond}", "description": "Starts the given sequence at the specified time frame. Only intended for testing. In most situations, use the \"Start Playlist\" command from the command API and pass the sequence name as the playlist name. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "SequenceName": "single_line.fseq", "startSecond": "9" } } } } } } }, "/api/settings": { "get": { "tags": [ "settings" ], "summary": "settings", "description": "Returns the `settings.json` metadata file as a JSON list of settings.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "settingGroups": { "BBBLeds": { "description": "BeagleBone LEDs", "platforms": [ "BeagleBone Black" ], "settings": [ "BBBLeds0", "BBBLeds1", "BBBLeds2", "BBBLeds3", "BBBLedPWR" ] } }, "settings": { "alwaysTransmit": {} } } } } } } } }, "/api/settings/{SettingName}": { "parameters": [ { "name": "SettingName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "settings" ], "summary": "settings/{SettingName}", "description": "Get info about a particular setting, including its current `value`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "name": "AudioFormat", "description": "Audio Output Format", "tip": "The Audio Format generated by the decoder ", "level": 1, "restart": 2, "default": 0, "type": "select", "options": { "Default": 0, "MP3": 1, "Ogg": 2, "Flac": 3 } } } } } } }, "put": { "tags": [ "settings" ], "summary": "settings/{SettingName}", "description": "Sets the value for a specific setting.", "requestBody": { "content": { "text/plain": { "schema": { "type": "string" }, "example": "0" } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/settings/{SettingName}/jsonValueUpdate": { "parameters": [ { "name": "SettingName", "in": "path", "required": true, "schema": { "type": "string" } } ], "put": { "tags": [ "settings" ], "summary": "settings/{SettingName}/jsonValueUpdate", "description": "Updates a sub-value held as JSON within a setting's value. Only valid for settings stored as JSON.", "requestBody": { "content": { "text/plain": { "schema": { "type": "string" }, "example": "raw json of hierarchy to update" } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/statistics/usage": { "delete": { "tags": [ "statistics" ], "summary": "statistics/usage", "description": "Deletes the cached statistics file.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } }, "get": { "tags": [ "statistics" ], "summary": "statistics/usage", "description": "Returns the statistics file that will be shared with the development team if sharing statistics is enabled. A cached file is returned unless it is more than 2 hours old or `?force=1` is passed, in which case it is regenerated.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "uuid": "6ba176e7-da7f-49f4-8b27-edb5bd9ff616", "systemInfo": { "mqtt": { "configured": true, "connected": true }, "fppdStatus": "running", "fppdMode": "player", "fppdUptimeSeconds": 3436, "wifiInterfaceCount": 0, "platform": "Debian", "version": "4.x-master-914-gebda8520", "majorVersion": 4, "minorVersion": 1000, "typeId": 1, "branch": "master", "osVersion": "v3.0", "Kernel": "4.19.0-6-amd64", "osRelease": "Debian GNU/Linux 10 (buster)", "channelRanges": "0-103", "utilization": { "CPU": 2.2, "Memory": 15.9, "Uptime": "7 days" } }, "capeInfo": { "type": "None" }, "files": { "sequences": { "cnt": 2, "bytes": 19025632 } }, "models": { "count": 0 } } } } } } }, "post": { "tags": [ "statistics" ], "summary": "statistics/usage", "description": "Transmits the statistics payload to the remote stats server configured in the `statsPublishUrl` setting.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "uuid": "M2-xxxxxxxx-f67f-930d-56ee-7xxxxxxxxxx" } } } } } } }, "/api/system/fppd/restart": { "get": { "tags": [ "system" ], "summary": "system/fppd/restart", "description": "Restarts the `fppd` process. Pass `?quick=1` to reload some configuration without a full restart.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/system/fppd/skipBootDelay": { "post": { "tags": [ "system" ], "summary": "system/fppd/skipBootDelay", "description": "Skips the current boot delay by creating a skip flag file, allowing FPP startup to proceed immediately.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "message": "Boot delay skip requested" } } } } } } }, "/api/system/fppd/start": { "get": { "tags": [ "system" ], "summary": "system/fppd/start", "description": "Starts the `fppd` process (if it isn't already running).", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/system/fppd/stop": { "get": { "tags": [ "system" ], "summary": "system/fppd/stop", "description": "Stops the `fppd` process if it is running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/system/info": { "get": { "tags": [ "system" ], "summary": "system/info", "description": "Returns basic information about the system.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "HostName": "FPPPi", "HostDescription": "", "Platform": "Raspberry Pi", "Variant": "Pi 4", "Mode": "player", "Version": "6.0", "Branch": "master", "OSVersion": "v2022-02", "OSRelease": "Raspbian GNU/Linux 11 (bullseye)", "channelRanges": "1545-84479", "majorVersion": 6, "minorVersion": 1000, "typeId": 13, "uuid": "M1-10000000AAAAAAA", "Utilization": { "CPU": 0.12, "Memory": 1.96, "Uptime": "11 days" }, "Kernel": "5.10.92-v7l+", "LocalGitVersion": "b998f65", "RemoteGitVersion": "ed62c12", "UpgradeSource": "github.com", "IPs": [ "192.168.3.84" ] } } } } } } }, "/api/system/packages": { "get": { "tags": [ "system" ], "summary": "system/packages", "description": "Returns a list of all installed and available OS package names via `apt list --all-versions`.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array" }, "example": [ "apache2", "ffmpeg", "php" ] } } } } } }, "/api/system/packages/info/{packageName}": { "parameters": [ { "name": "packageName", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "system" ], "summary": "system/packages/info/{packageName}", "description": "Returns description, dependencies, and installation status for the specified OS package.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "Description": "The FFmpeg multimedia framework", "Depends": "libavcodec58, libavformat58", "Installed": "Yes" } } } } } } }, "/api/system/reboot": { "get": { "tags": [ "system" ], "summary": "system/reboot", "description": "Reboots the operating system.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/system/releaseNotes/{version}": { "parameters": [ { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "tags": [ "system" ], "summary": "system/releaseNotes/{version}", "description": "Returns release notes for the specified FPP version tag from the GitHub releases API.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "draft": false, "prerelease": false, "body": "...", "published_at": "2026-01-08T03:09:40Z" } } } } } } }, "/api/system/shutdown": { "get": { "tags": [ "system" ], "summary": "system/shutdown", "description": "Executes a clean shutdown of the operating system.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/system/status": { "get": { "tags": [ "system" ], "summary": "system/status", "description": "Returns `fppd`, network, current playlist, schedule, utilization, host, version, and MQTT status. Pass an optional array of IP addresses (e.g. `&ip[]=192.168.0.1&ip[]=192.168.0.2`) to query remote instances instead.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "fppd": "running", "status": 1, "status_name": "playing", "mode": 2, "mode_name": "player", "current_playlist": { "count": "4", "playlist": "Test1", "type": "pause", "index": "2" }, "volume": 70, "wifi": [], "interfaces": [] } } } } } } }, "/api/system/updateStatus": { "get": { "tags": [ "system" ], "summary": "system/updateStatus", "description": "Returns the current FPP update/upgrade status, including whether a newer version is available, the current commit, and any major version or end-of-life warnings.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "branchUpgradeAvailable": false, "branchUpgradeTarget": "", "branchUpgradeVersion": "", "isMajorVersionUpgrade": false, "commitUpdateAvailable": false, "remoteCommit": "ece480e86b7dd8f2d013248e8f99bb0e8baac197", "currentBranch": "master", "localCommit": "ece480e86", "isEndOfLife": false, "latestMajorVersion": 9 } } } } } } }, "/api/system/volume": { "get": { "tags": [ "system" ], "summary": "system/volume", "description": "Returns the current volume if `fppd` is running, or the `Volume` setting value if not.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "method": "FPPD", "volume": 70 } } } } } }, "post": { "tags": [ "system" ], "summary": "system/volume", "description": "Sets the system volume. The new level should be passed as a JSON body.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "volume": 34 } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK", "volume": 34 } } } } } } }, "/api/testmode": { "get": { "tags": [ "testmode" ], "summary": "testmode", "description": "Returns the current Test Mode state for this instance. Requires: `fppd` to be running.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "mode": "RGBChase", "subMode": "RGBChase-RGB", "cycleMS": 1000, "colorPattern": "FF000000FF000000FF", "enabled": 1, "channelSet": "1-520", "channelSetType": "channelRange" } } } } } }, "post": { "tags": [ "testmode" ], "summary": "testmode", "description": "Sets the current Test Mode configuration on this instance. Requires: `fppd` to be running.", "requestBody": { "content": { "application/json": { "schema": { "type": "object" }, "example": { "mode": "RGBChase", "subMode": "RGBChase-RGB", "cycleMS": 1000, "colorPattern": "FF000000FF000000FF", "enabled": 1, "channelSet": "1-520", "channelSetType": "channelRange" } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "status": "OK" } } } } } } }, "/api/time": { "get": { "tags": [ "time" ], "summary": "time", "description": "Returns the current system time as a formatted string.", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object" }, "example": { "time": "Tue Apr 02 08:06:34 EDT 2019" } } } } } } } } }