Flask documentation

All of these endpoints might change at any point in future updates. Please notify me on GitHub if you find mistakes in this documentation.

Download & General

GET /status

Get the current processing status, containing a list of active items, a list of finished items and the number of items in the queue.

In active_items, the text element contains the artist name and song title, as well as the download number. data contains a list of processes this item went through in the order shown below, each with a status (active, success, part_succ, not_found, failed, skipped, hide, ) and a message showing additional information in an active state, though sometimes formated as a python rich string.

Because this design is reused from the CLI, its not the most straightforward.

Status Codes:
Response Headers:
Response JSON Object:
  • active_items (dict) – Items currently being processed, with the SomeDL ID as key.

  • finished_items (dict) – Doct of completed items, with the SomeDL ID as key and the status as property.

  • items_in_queue (int) – Number of items waiting in the queue

Example request (JavaScript):

const res = await fetch("/status");
const data = await res.json();

Example response:

{
    "active_items": {
        "17806688160307190000001":  {
            "text": "4/0 Delain - Not Enough",
            "data": {
                "album": {
                    "message": "Nothing",
                    "status": "success"
                },
                "get_lyrics": {
                    "status": "skipped",
                    "message": "Nothing"
                },
                "musicbrainz": {
                    "status": "success",
                    "message": "Nothing"
                },
                "deezer": {
                    "status": "success",
                    "message": "Nothing"
                },
                "wait_queue": {
                    "status": "hide",
                    "message": "Nothing"
                },
                "downloading": {
                    "status": "success",
                    "message": "Nothing"
                },
                "albumart": {
                    "status": "success",
                    "message": "Nothing"
                },
                "addmetadata": {
                    "status": "success",
                    "message": "Nothing"
                }
            }
        },
        "17771447553066950000002": {
            "text": "5/0 The Warning - EVOLVE",
            "data": {
                "album": {
                    "status": "success",
                    "message": "Nothing"
                },
                "get_lyrics": {
                    "status": "skipped",
                    "message": "Nothing"
                },
                "musicbrainz": {
                    "status": "success",
                    "message": "Nothing"
                },
                "deezer": {
                    "status": "success",
                    "message": "Nothing"
                },
                "wait_queue": {
                    "status": "hide",
                    "message": "Nothing"
                },
                "downloading": {
                    "status": "active",
                    "message": "yt-dlp: Postprocessing  (Got 3.29MiB at [green]\u001b[0;32m3.83MiB/s\u001b[0m[/])"
                }
            }
        }
    },
    "finished_items": {
        "17806688160307190000001": "success",
        "17806688160354710000001": "success",
        "17806688160397410000001": "success"
    },
    "items_in_queue": 5
}
GET /get-queue

Get the download queue as well as the active items. Usually used after a page refresh.

The list queue contains the items that are currently being processed. The content of each item depends on how the song was requested. A download by search query adds the first entry to the queue, a download by URL or from the YouTube Search adds the second entry. The only entries that are guaranteed are somedl_id for all items, text_query for query search request tiems and song_title and artist_name for URL request items.

Status Codes:
Response Headers:
Response JSON Object:
  • active (dict) – same as in /status request.

  • queue (list) – List of the items in queue.

Example response:

{
    "active": {
        "17806688160307332000002": {
            "data": {},
            "text": "2/0 Delain - We Are The Others (Radio Version)"
        }
    },
    "queue": [
        {
            "somedl_id": "17806703611854036000001",
            "text_query": "delain - the cold",
            "video_type": "Search query",
            "video_type_original": "Search query"
        },
        {
            "album_id": "MPREb_fMsob6AXjNV",
            "album_name": "Ego",
            "artist_all_names": [
                "The Warning"
            ],
            "artist_id": "UCmZbBc8qMj0v9Q6dC-kw4Xg",
            "artist_name": "The Warning",
            "lyrics_id": "MPLYt_fMsob6AXjNV-1",
            "original_url_id": "u-BMzP-RLd4",
            "somedl_id": "17806707385822792000001",
            "song_id": "u-BMzP-RLd4",
            "song_title": "Ego",
            "song_title_clean": "Ego",
            "video_type": "MUSIC_VIDEO_TYPE_ATV",
            "video_type_original": "MUSIC_VIDEO_TYPE_ATV",
            "yt_url": "https://www.youtube.com/watch?v=u-BMzP-RLd4"
        }
    ]
}
POST /shutdown

Triggers a shutdown of the SomeDL CLI.

Response:

Status Codes:
  • 200 OK – Shutdown successfully triggered

Response Headers:

Example response:

{
    "message": "shutdown triggered"
}
POST /add

Request to download a list of search queries or URLs, similar to the CLI.

Request body:

{
    "input_list": ["Artist - Title", "Artist - Title"]
}

Behavior:

  • Expands input using generateSongList()

  • Adds each song to song_list_queue for download

Responses:

Status Codes:
Response Headers:
Response JSON Object:
  • song_list (list) – List of items to download, same as queue in /get-queue.

Success response (200):

{
    "song_list": [
        {
            "somedl_id": "17806724760830844000001",
            "text_query": "delain - not enough",
            "video_type": "Search query",
            "video_type_original": "Search query"
        },
        {
            "album_id": "MPREb_B9YcEZY20ip",
            "album_name": "Dark Waters",
            "artist_all_names": [
                "Delain"
            ],
            "artist_id": "UCPIXyGsEUrGIz7olJ1d7-Ig",
            "artist_name": "Delain",
            "lyrics_id": "MPLYt_B9YcEZY20ip-1",
            "original_url_id": "WOZOwTG9dmU",
            "somedl_id": "17806739333906158000001",
            "song_id": "WOZOwTG9dmU",
            "song_title": "Hideaway Paradise",
            "song_title_clean": "Hideaway Paradise",
            "video_type": "MUSIC_VIDEO_TYPE_ATV",
            "video_type_original": "MUSIC_VIDEO_TYPE_ATV",
            "yt_url": "https://www.youtube.com/watch?v=WOZOwTG9dmU"
        }
    ]
}

Error response (400):

{
    "error": "No item"
}

Error response (500):

{
    "error": "Failed to generate song list, internal server error"
}
GET /get-version

Returns SomeDL version.

Response:

Status Codes:
  • 200 OK – Shutdown successfully triggered

Response Headers:

Example response:

{
    "v": "1.5.0"
}
GET /get-history

Returns the download history of the current session.

Response:

Status Codes:
Response Headers:
Response JSON Object:
  • metadata_success_list (dict) – List of songs that were successfully downloaded

  • already_downloaded_list (dict) – List of songs that were already downloaded and thus skipped

  • failed_list (int) – List of songs that failed to download

Example response:

{
    "metadata_success_list": [
        {
            "album_art": [
                {
                    "height": 60,
                    "url": "https://yt3.googleusercontent.com/S0y9a8Dv3SlLbxf0SAAfY4UmgHLHxto-77tyThyl0aQaFKVz8rrruDsdH72j_ibf6qJdGi2yh8r1rDfr=w60-h60-l90-rj",
                    "width": 60
                },
                {
                    "height": 120,
                    "url": "https://yt3.googleusercontent.com/S0y9a8Dv3SlLbxf0SAAfY4UmgHLHxto-77tyThyl0aQaFKVz8rrruDsdH72j_ibf6qJdGi2yh8r1rDfr=w120-h120-l90-rj",
                    "width": 120
                },
                {
                    "height": 226,
                    "url": "https://yt3.googleusercontent.com/S0y9a8Dv3SlLbxf0SAAfY4UmgHLHxto-77tyThyl0aQaFKVz8rrruDsdH72j_ibf6qJdGi2yh8r1rDfr=w226-h226-l90-rj",
                    "width": 226
                },
                {
                    "height": 544,
                    "url": "https://yt3.googleusercontent.com/S0y9a8Dv3SlLbxf0SAAfY4UmgHLHxto-77tyThyl0aQaFKVz8rrruDsdH72j_ibf6qJdGi2yh8r1rDfr=w544-h544-l90-rj",
                    "width": 544
                }
            ],
            "album_artist": "Gojira",
            "album_id": "MPREb_NXcXGpvbU9K",
            "album_name": "Magma",
            "artist_all_names": [
                "Gojira"
            ],
            "artist_id": "UCPdbkw3S_0ZSHAqlnxo9E_g",
            "artist_name": "Gojira",
            "date": "2016",
            "deezer_album_id": 13304751,
            "deezer_album_label": "Roadrunner Records",
            "deezer_album_name": "Magma",
            "deezer_artist_name": "Gojira",
            "deezer_genres": [
                "Heavy Metal"
            ],
            "deezer_isrc": "NLA321600033",
            "download_time": 19.918654441833496,
            "duration": 270,
            "filetype": "mp3",
            "label": {
                "id": "17806746083312502000002",
                "text": "2/0 Gojira - Stranded"
            },
            "mb_artist_mbid": "1c5efd53-d6b6-4d63-9d22-a15025cf5f07",
            "mb_artist_name": "Gojira",
            "mb_genres": "progressive metal",
            "metadata_time": 28.545751810073853,
            "somedl_id": "17806746083312502000002",
            "song_id": "zgychWIo6UA",
            "song_title": "Stranded",
            "song_title_clean": "Stranded",
            "text_query": "gojira - stranded",
            "total_time": "48.5 seconds",
            "track_count": 10,
            "track_pos": 4,
            "track_pos_counted": 4,
            "type": "Album",
            "video_type": "MUSIC_VIDEO_TYPE_ATV",
            "video_type_original": "Search query",
            "yt_url": "https://music.youtube.com/watch?v=zgychWIo6UA"
        }
    ],
    "already_downloaded_list": [
        {
            "album_id": "MPREb_iUk3tvhGHje",
            "album_name": "We Are The Others",
            "artist_all_names": [
                "Delain"
            ],
            "artist_id": "UCPIXyGsEUrGIz7olJ1d7-Ig",
            "artist_name": "Delain",
            "duration": 284,
            "label": {
                "id": "17806746083312340000001",
                "text": "1/0 Delain - Not Enough"
            },
            "somedl_id": "17806746083312340000001",
            "song_id": "oQ5DHtZU3RI",
            "song_title": "Not Enough",
            "song_title_clean": "Not Enough",
            "text_query": "delain not enough",
            "video_type": "MUSIC_VIDEO_TYPE_ATV",
            "video_type_original": "Search query",
            "yt_url": "https://music.youtube.com/watch?v=oQ5DHtZU3RI"
        }
    ],
    "failed_list": [
        {
            "album_art": [
                {
                    "height": 60,
                    "url": "https://yt3.googleusercontent.com/7ZsvBXfYxrHSAERxp-OX23Ew52oR9resSqGUaHOuiBf3xUF8YY71gldt_PMm29jtxYG3dw_WwYV9vaU=w60-h60-l90-rj",
                    "width": 60
                },
                {
                    "height": 120,
                    "url": "https://yt3.googleusercontent.com/7ZsvBXfYxrHSAERxp-OX23Ew52oR9resSqGUaHOuiBf3xUF8YY71gldt_PMm29jtxYG3dw_WwYV9vaU=w120-h120-l90-rj",
                    "width": 120
                },
                {
                    "height": 226,
                    "url": "https://yt3.googleusercontent.com/7ZsvBXfYxrHSAERxp-OX23Ew52oR9resSqGUaHOuiBf3xUF8YY71gldt_PMm29jtxYG3dw_WwYV9vaU=w226-h226-l90-rj",
                    "width": 226
                },
                {
                    "height": 544,
                    "url": "https://yt3.googleusercontent.com/7ZsvBXfYxrHSAERxp-OX23Ew52oR9resSqGUaHOuiBf3xUF8YY71gldt_PMm29jtxYG3dw_WwYV9vaU=w544-h544-l90-rj",
                    "width": 544
                }
            ],
            "album_artist": "Hämatom",
            "album_id": "MPREb_r7FwDjQUQDr",
            "album_name": "Die Liebe ist tot",
            "artist_all_names": [
                "Hämatom"
            ],
            "artist_id": "UC2UdnSVg1t2xQAgRbI74ETw",
            "artist_name": "Hämatom",
            "date": "2021",
            "deezer_album_id": 267181942,
            "deezer_album_label": "Anti Alles",
            "deezer_album_name": "Die Liebe ist tot",
            "deezer_artist_name": "Hämatom",
            "deezer_genres": [
                "Rock"
            ],
            "deezer_isrc": "FRX452148688",
            "duration": 224,
            "label": {
                "id": "17806746083312592000003",
                "text": "3/0 Hämatom - Liebe auf den ersten xxxx"
            },
            "mb_artist_mbid": "f10ad2fb-d81e-4075-9070-453f481b5fc9",
            "mb_artist_name": "Hämatom",
            "mb_genres": "neue deutsche härte",
            "metadata_time": 9.31917667388916,
            "somedl_id": "17806746083312592000003",
            "song_id": "G0rQKudItF4",
            "song_title": "Liebe auf den ersten xxxx",
            "song_title_clean": "Liebe auf den ersten xxxx",
            "text_query": "hämatom - liebe auf dem ersten xxxx",
            "track_count": 10,
            "track_pos": 4,
            "track_pos_counted": 4,
            "type": "Album",
            "video_type": "MUSIC_VIDEO_TYPE_ATV",
            "video_type_original": "Search query",
            "yt_url": "https://music.youtube.com/watch?v=G0rQKudItF4"
        }
    ]
}

Control

POST /pause-download

Request pausing the download process.

Response:

Status Codes:
Response Headers:

Example response:

{
    "message": "Download paused"
}
POST /resume-download

Request resuming the download process.

Response:

Status Codes:
Response Headers:

Example response:

{
    "message": "Download resumed"
}
POST /clear-queue

Request clearing the download queue.

Response:

Status Codes:
Response Headers:

Example response:

{
    "message": "Queue cleared"
}
POST /remove-item

Request removing a specific item from the queue by somedl_id.

Request body:

{
    "somedl_id": "17806724760830844000001"
}

Response:

Status Codes:
Response Headers:

Example response:

{
    "message": "Item removed"
}

Setlist

POST /setlist-artist

Searching for a artist by search query on setlist.fm.

Request body:

Request JSON Object:
  • search_query (string) – Artist/Band name.

{
    "search_query": "Artist/Band name",
}

Responses:

Status Codes:
Response Headers:
Response JSON Object:
  • result (list) – List of artists.

Success response (200):

{
    "result": {
        "artist": [
            {
                "disambiguation": "Dutch symphonic metal band",
                "mbid": "3b0e8f01-3fd9-4104-9532-1e4b526ce562",
                "name": "Delain",
                "sortName": "Delain",
                "url": "https://www.setlist.fm/setlists/delain-1bd6fd7c.html"
            },
            {
                "disambiguation": "",
                "mbid": "0470ff3e-3354-4b2a-a46d-e3ea50bed60b",
                "name": "Delain feat. Rob van der Loo, Sander Zoer, Guus Eikens",
                "sortName": "Delain feat. Loo, Rob van der, Zoer, Sander, Eikens, Guus",
                "url": "https://www.setlist.fm/setlists/delain-feat-rob-van-der-loo-sander-zoer-guus-eikens-3bcdc0e4.html"
            }
        ],
        "itemsPerPage": 30,
        "page": 1,
        "total": 9,
        "type": "artists"
    }
}
POST /setlist-mbid

Searching for a setlist by mbid on setlist.fm.

Request body:

Request JSON Object:
  • mbid (string) – MusicBrainz ID of artist, aquired from /setlist-artist.

  • page (int) – Setlist page.

{
    "mbid": "Artist/Band name",
    "page": "1"
}

Responses:

Status Codes:
Response Headers:
Response JSON Object:
  • result (list) – List of setlists.

Success response (200):

{
    "result": {
        "itemsPerPage": 20,
        "page": 1,
        "setlist": [
            {
                "artist": {
                    "disambiguation": "Dutch symphonic metal band",
                    "mbid": "3b0e8f01-3fd9-4104-9532-1e4b526ce562",
                    "name": "Delain",
                    "sortName": "Delain",
                    "url": "https://www.setlist.fm/setlists/delain-1bd6fd7c.html"
                },
                "eventDate": "18-10-2025",
                "id": "5b59e7ec",
                "lastUpdated": "2025-10-19T07:37:47.657+0000",
                "sets": {
                    "set": [
                        {
                            "song": [
                                {
                                    "name": "The Cold"
                                },
                                {
                                    "name": "Suckerpunch"
                                },
                                {
                                    "name": "The Reaping"
                                },
                                {
                                    "name": "Dance With the Devil"
                                },
                                {
                                    "name": "Burning Bridges"
                                },
                                {
                                    "name": "Creatures"
                                },
                                {
                                    "name": "Stardust"
                                },
                                {
                                    "info": "Acoustic",
                                    "name": "Start Swimming"
                                },
                                {
                                    "name": "Underland"
                                },
                                {
                                    "name": "Get the Devil Out of Me"
                                },
                                {
                                    "name": "Your Body Is a Battleground",
                                    "with": {
                                        "disambiguation": "Italian-born singer based in Finland",
                                        "mbid": "1dc6c8c8-548f-4d1a-87ea-e557cb7064b9",
                                        "name": "Paolo Ribaldini",
                                        "sortName": "Ribaldini, Paolo",
                                        "url": "https://www.setlist.fm/setlists/paolo-ribaldini-13cac925.html"
                                    }
                                },
                                {
                                    "name": "Queen of Shadow",
                                    "with": {
                                        "disambiguation": "Italian-born singer based in Finland",
                                        "mbid": "1dc6c8c8-548f-4d1a-87ea-e557cb7064b9",
                                        "name": "Paolo Ribaldini",
                                        "sortName": "Ribaldini, Paolo",
                                        "url": "https://www.setlist.fm/setlists/paolo-ribaldini-13cac925.html"
                                    }
                                },
                                {
                                    "name": "The Gathering",
                                    "with": {
                                        "disambiguation": "Italian-born singer based in Finland",
                                        "mbid": "1dc6c8c8-548f-4d1a-87ea-e557cb7064b9",
                                        "name": "Paolo Ribaldini",
                                        "sortName": "Ribaldini, Paolo",
                                        "url": "https://www.setlist.fm/setlists/paolo-ribaldini-13cac925.html"
                                    }
                                },
                                {
                                    "name": "Don't Let Go"
                                },
                                {
                                    "name": "Moth to a Flame"
                                },
                                {
                                    "name": "Not Enough"
                                },
                                {
                                    "name": "Invictus",
                                    "with": {
                                        "disambiguation": "Italian-born singer based in Finland",
                                        "mbid": "1dc6c8c8-548f-4d1a-87ea-e557cb7064b9",
                                        "name": "Paolo Ribaldini",
                                        "sortName": "Ribaldini, Paolo",
                                        "url": "https://www.setlist.fm/setlists/paolo-ribaldini-13cac925.html"
                                    }
                                },
                                {
                                    "name": "We Are the Others"
                                },
                                {
                                    "cover": {
                                        "disambiguation": "",
                                        "mbid": "f7aad4fb-9286-4f60-aae8-5da5922f17cf",
                                        "name": "Hans Zimmer & Lisa Gerrard",
                                        "sortName": "Zimmer, Hans & Gerrard, Lisa",
                                        "url": "https://www.setlist.fm/setlists/hans-zimmer-and-lisa-gerrard-73d6b635.html"
                                    },
                                    "name": "Now We Are Free",
                                    "tape": true
                                }
                            ]
                        }
                    ]
                },
                "tour": {
                    "name": "One Last Dance with the Devil"
                },
                "url": "https://www.setlist.fm/setlist/delain/2025/leffe-stage-enschede-netherlands-5b59e7ec.html",
                "venue": {
                    "city": {
                        "coords": {
                            "lat": 52.218333,
                            "long": 6.895833
                        },
                        "country": {
                            "code": "NL",
                            "name": "Netherlands"
                        },
                        "id": "2756071",
                        "name": "Enschede",
                        "state": "Overijssel",
                        "stateCode": "15"
                    },
                    "id": "2bde9886",
                    "name": "Leffe Stage",
                    "url": "https://www.setlist.fm/venue/leffe-stage-enschede-netherlands-2bde9886.html"
                },
                "versionId": "g33660c71"
            },

        ],
        "total": 833,
        "type": "setlists"
    }
}

Settings

GET /settings-read

Returns current SomeDL settings. Also includes configuration options not in the config file.

Response:

Status Codes:
  • 200 OK – Successfull returned config

Response Headers:

Example response:

{
    "config": {
        "api": {
            "deezer": true,
            "genius": true,
            "genius_album_check": true,
            "genius_token": "",
            "genius_use_official": false,
            "max_retry": 3,
            "mb_retry_artist_name_only": false,
            "musicbrainz": true
        },
        "download": {
            "always_search_by_query": false,
            "check_if_file_exists": true,
            "cookies_from_browser": "",
            "cookies_path": "",
            "disable_download": false,
            "download_archive": "",
            "fetch_albums": false,
            "format": "m4a",
            "id3_version": 3,
            "include_other_artists": false,
            "include_singles": false,
            "number_downloaders": 1,
            "output": "{album_artist}/{album_artist} - {song}",
            "output_dir": "/home/chemgull/Documents/Coding/Python/SomeDL/downloads/downloads/",
            "prefer_playlist": false,
            "quality": 5,
            "queue_size": 2,
            "range": [],
            "sleep": 3,
            "sleep_warn": true,
            "strict_url_download": false,
            "sync_files": [
                "/home/chemgull/.config/SomeDL/myPlaylist3_sync.json"
            ]
        },
        "logging": {
            "config_version": 7,
            "download_report": 2,
            "level": "INFO",
            "log_level": 4
        },
        "metadata": {
            "album_artist": true,
            "artist_separator": "; ",
            "copyright": true,
            "cover_art_file": false,
            "cover_art_size": "l",
            "ffmpeg_metadata": false,
            "genre": true,
            "isrc": true,
            "lrc_file": false,
            "lyrics": false,
            "lyrics_fallback_source": "lrclib",
            "lyrics_id3_synced_uslt_fallback": true,
            "lyrics_source": "youtube",
            "lyrics_type": "plain",
            "multiple_artists": false,
            "synced_lyrics_metadata": true
        },
        "webui": {
            "browser": "chromium",
            "host": "127.0.0.1",
            "open_browser": false,
            "port": 5000
        }
    }
}
POST /settings-apply

Apply settings and save them to the config file.

Request body:

Request JSON Object:
  • settings (dict) – Settings dict.

  • update_active (bool) – Set true to also update configs of the current session and to false if you just want to modify the config file.

{
    "settings": {
        "api": {
            "musicbrainz": true,
            "genius": true,
            "genius_album_check": true,
            "deezer": true,
            "max_retry": 3
        },
        "metadata": {
            "lyrics": false,
            "copyright": true,
            "isrc": true,
            "genre": true,
            "album_artist": true,
            "multiple_artists": false,
            "artist_separator": "; ",
            "ffmpeg_metadata": false,
            "cover_art_file": false,
            "cover_art_size": "l",
            "lyrics_type": "plain",
            "synced_lyrics_metadata": true,
            "lrc_file": false,
            "lyrics_id3_synced_uslt_fallback": true,
            "lyrics_source": "youtube",
            "lyrics_fallback_source": "lrclib"
        },
        "download": {
            "format": "mp3",
            "quality": 5,
            "id3_version": 3,
            "output_dir": "/home/chemgull/Documents/Coding/Python/SomeDL/downloads/downloads/",
            "output": "{album_artist}/{album_artist} - {song}",
            "number_downloaders": 1,
            "queue_size": 2,
            "sleep": 3,
            "cookies_path": "",
            "cookies_from_browser": "",
            "prefer_playlist": false,
            "fetch_albums": false,
            "check_if_file_exists": true,
            "download_archive": "",
            "sync_files": [
                "/home/chemgull/.config/SomeDL/myPlaylist3_sync.json"
            ]
        },
        "logging": {
            "log_level": 4,
            "download_report": 2
        },
        "webui": {
            "host": "127.0.0.1",
            "port": 5000,
            "browser": "chromium",
            "open_browser": false
        }
    },
    "update_active": true
}

Response:

Status Codes:
Response Headers:

Example response:

{
    "message": "applied settings"
}

WebUI configs

GET /webui-load-config

Loads current webui configs.

Response:

Status Codes:
  • 200 OK – Successfull returned webui config

Response Headers:

Example response:

{
    "active_theme": "SomeDL Dark",
    "custom_themes": {
        "Another Theme": {
            "theme": "dark",
            "color-main": "#590058",
            "color-main-highlight": "#711196",
            "color-background": "#1e1c20",
            "color-background-highlight": "#2d2b2f",
            "color-button": "#0f0f0f",
            "color-border": "#767676",
            "color-text": "#FFFFFF",
            "color-dlbar-1": "#711196",
            "color-dlbar-2": "#ac3011"
        }
    }
}
POST /webui-save-config

Save webui theme configs.

Request body:

Request JSON Object:
  • webui_settings (dict) – Settings dict.

{
    "webui_settings": {
        "active_theme": "SomeDL Dark",
        "custom_themes": {
            "My theme": {
                "theme": "dark",
                "color-main": "#590058",
                "color-main-highlight": "#711196",
                "color-background": "#1e1c20",
                "color-background-highlight": "#2d2b2f",
                "color-button": "#0f0f0f",
                "color-border": "#767676",
                "color-text": "#FFFFFF",
                "color-dlbar-1": "#711196",
                "color-dlbar-2": "#ac3011"
            }
        }
    }
}

Response:

Status Codes:
Response Headers:

Example response:

{
    "message": "applied settings"
}