| GET | /api/keys | List API keys | Yes |
| POST | /api/keys | Create API key | Yes |
| DELETE | /api/keys/{id} | Delete API key | Yes |
| GET | /validateToken | Validate token | Yes |
| POST | /auth/login | User login | No |
| POST | /auth/logout | User logout | Yes |
| GET | /auth/sessions | Get active sessions | Yes |
| DELETE | /auth/sessions/{id} | Delete session | Yes |
| POST | /auth/change-password | Change password | Yes |
| GET | /auth/validate | Validate authentication | Yes |
| POST | /api/channels/search | Search YouTube for channels by free text | Yes |
| GET | /getchannels | Get channels list | Yes |
| POST | /updatechannels | Update channels | Yes |
| POST | /addchannelinfo | Add channel info | Yes |
| GET | /getchannelinfo/{channelId} | Get channel info | Yes |
| GET | /api/channels/{channelId}/tabs | Get channel tabs | Yes |
| GET | /api/channels/{channelId}/tab-stats | Get per-tab download stats | Yes |
| PATCH | /api/channels/{channelId}/tabs/{tabType}/auto-download | Update tab auto-download setting | Yes |
| POST | /api/channels/{channelId}/tabs/redetect | Force re-detection of a channel's available tabs | Yes |
| GET | /api/channels/{channelId}/settings | Get channel settings | Yes |
| PUT | /api/channels/{channelId}/settings | Update channel settings | Yes |
| GET | /api/channels/subfolders | Get all subfolders | Yes |
| GET | /api/channels/using-default-subfolder | Get channels using default subfolder | Yes |
| GET | /api/channels/using-global-file-structure | Get channels using the global file structure setting | Yes |
| GET | /api/channels/{channelId}/filter-preview | Preview title filter | Yes |
| GET | /getchannelvideos/{channelId} | Get channel videos | Yes |
| POST | /fetchallchannelvideos/{channelId} | Fetch all channel videos | Yes |
| GET | /api/channels/{channelId}/fetch-status | Check if a fetch operation is in progress for a channel | Yes |
| GET | /api/channels/{channelId}/download-all/preview | Preview a channel download-all run | Yes |
| POST | /api/channels/{channelId}/download-all | Download all videos for a channel tab | Yes |
| POST | /api/channels/{channelId}/videos/{youtubeId}/ignore | Ignore a video | Yes |
| POST | /api/channels/{channelId}/videos/{youtubeId}/unignore | Unignore a video | Yes |
| POST | /api/channels/{channelId}/videos/bulk-ignore | Bulk ignore videos | Yes |
| GET | /getconfig | Get application configuration | Yes |
| POST | /updateconfig | Update application configuration | Yes |
| POST | /api/config/filename-preview | Render a videoFilenamePrefix against a canned sample video | Yes |
| GET | /api/cookies/status | Get cookie file status | Yes |
| POST | /api/cookies/test | Test the active cookie file | Yes |
| POST | /api/cookies/upload | Upload cookie file | Yes |
| DELETE | /api/cookies | Delete cookie file | Yes |
| POST | /api/notifications/test | Send test notification | Yes |
| POST | /api/notifications/test-single | Send test notification to a single webhook | Yes |
| GET | /storage-status | Get storage status | Yes |
| GET | /api/health | Health check endpoint | No |
| GET | /api/db-status | Database status endpoint | No |
| GET | /getCurrentReleaseVersion | Get current release version | No |
| GET | /api/ytdlp/latest-version | Get yt-dlp version information | Yes |
| POST | /api/ytdlp/update | Update yt-dlp | Yes |
| GET | /api/jobs/video-activity | Get queued and downloading video activity | Yes |
| GET | /jobstatus/{jobId} | Get job status | Yes |
| GET | /runningjobs | Get running jobs | Yes |
| GET | /api/jobs/current-activity | Get current download activity | Yes |
| GET | /api/jobs/download-pause | Get the storage download pause state | Yes |
| POST | /api/jobs/terminate | Terminate current job | Yes |
| GET | /api/logs/download | Download the log files | Yes |
| POST | /api/maintenance/rescan-files | Kick off a manual filesystem rescan | Yes |
| GET | /api/maintenance/rescan-status | Get current rescan running state and last-run summary | Yes |
| GET | /api/mediaservers/watch-status | Get watch status sync state | Yes |
| POST | /api/mediaservers/watch-status/sync | Trigger a watch status sync now | Yes |
| GET | /api/playlists | List subscribed playlists | Yes |
| POST | /api/playlists | Subscribe to a playlist, restoring a soft-deleted one if present | Yes |
| GET | /api/playlists/{playlistId} | Get a playlist with download and sync counts | Yes |
| DELETE | /api/playlists/{playlistId} | Unsubscribe from a playlist (soft delete) | Yes |
| PATCH | /api/playlists/{playlistId} | Update playlist flags | Yes |
| POST | /api/playlists/addplaylistinfo | Fetch YouTube playlist info for a URL | Yes |
| GET | /api/playlists/{playlistId}/settings | Get per-playlist download settings | Yes |
| PUT | /api/playlists/{playlistId}/settings | Update per-playlist download settings | Yes |
| GET | /api/playlists/{playlistId}/videos | List playlist videos with download and watch overlay | Yes |
| POST | /api/playlists/{playlistId}/refresh | Refresh playlist videos from YouTube | Yes |
| POST | /api/playlists/{playlistId}/sync | Trigger media server playlist sync | Yes |
| GET | /api/playlists/{playlistId}/download-preview | Preview an explicit batch of existing playlist videos | Yes |
| POST | /api/playlists/{playlistId}/following | Start or resume following new playlist entries | Yes |
| POST | /api/playlists/{playlistId}/download-batch | Queue selected eligible existing videos without resetting following | Yes |
| POST | /api/playlists/{playlistId}/download | Queue downloads for playlist videos | Yes |
| POST | /api/playlists/{playlistId}/regenerate-m3u | Regenerate the playlist M3U file | Yes |
| POST | /api/playlists/{playlistId}/videos/{ytId}/ignore | Ignore a playlist video | Yes |
| POST | /api/playlists/{playlistId}/videos/{ytId}/unignore | Un-ignore a playlist video | Yes |
| GET | /getplexlibraries | Get Plex libraries | Yes |
| GET | /plex/server-identity | Get Plex server identity | Yes |
| GET | /refreshlibrary | Refresh Plex library | Yes |
| GET | /plex/auth-url | Get Plex auth URL | No |
| GET | /plex/check-pin/{pinId} | Check Plex PIN status | No |
| GET | /api/schedules | Get the live state and last run of every scheduled task | Yes |
| POST | /api/schedules/{key}/run | Run a scheduled task now | Yes |
| GET | /setup/status | Get setup status | No |
| POST | /setup/create-auth | Create initial authentication | No |
| GET | /api/subfolders | List subfolders with usage | Yes |
| POST | /api/subfolders | Create (register) a subfolder | Yes |
| DELETE | /api/subfolders/{name} | Delete a subfolder | Yes |
| POST | /api/subscriptions/preview/takeout | Preview channels from a Google Takeout CSV | Yes |
| POST | /api/subscriptions/preview/cookies | Preview channels by fetching subscriptions with cookies | Yes |
| POST | /api/subscriptions/imports | Start importing selected channels | Yes |
| GET | /api/subscriptions/imports | List recent import jobs | Yes |
| GET | /api/subscriptions/imports/active | Get the currently active import | Yes |
| GET | /api/subscriptions/imports/{jobId} | Get details of a specific import job | Yes |
| POST | /api/subscriptions/imports/{jobId}/cancel | Cancel an active import | Yes |
| GET | /api/videos/{youtubeId}/metadata | Get extended video metadata | Yes |
| GET | /api/videos/{youtubeId}/watch-status | Get per-media-server watch status for a video | Yes |
| GET | /api/videos/{youtubeId}/stream | Stream a downloaded video file | Yes |
| POST | /api/videos/search | Search YouTube by free text | Yes |
| POST | /api/videos/local-status | Read local metadata for up to 500 YouTube video IDs | Yes |
| GET | /getVideos | Get downloaded videos | Yes |
| POST | /api/videos/rating | Update video ratings | Yes |
| PATCH | /api/videos/{id}/protected | Toggle video protection | Yes |
| DELETE | /api/videos | Delete videos | Yes |
| POST | /api/auto-removal/dry-run | Auto-removal dry run | Yes |
| POST | /api/checkYoutubeVideoURL | Validate YouTube video URL | Yes |
| POST | /api/bulkEnrichVideos | Enrich a batch of YouTube video IDs with title + channel name | Yes |
| OPTIONS | /api/videos/download | CORS preflight for download endpoint | No |
| POST | /api/videos/download | Download a YouTube video | Yes |
| POST | /triggerspecificdownloads | Download specific videos | Yes |
| POST | /triggerchanneldownloads | Trigger channel downloads | Yes |
| POST | /testYoutubeApiKey | Validate a YouTube Data API v3 key | Yes |
| POST | /api/ytdlp/validate-args | Validate custom yt-dlp arguments | Yes |