Files
unshackle/api/endpoints/index.html
T
2026-07-02 15:20:50 +00:00

2256 lines
99 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Configuration reference for unshackle">
<link rel="canonical" href="https://docs.unshackle.dev/api/endpoints/">
<link rel="prev" href="../authentication/">
<link rel="next" href="../endpoint-map/">
<link rel="icon" href="../../assets/favicon.svg">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
<title>Endpoints - unshackle</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.484c7ddc.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#endpoints" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="unshackle" class="md-header__button md-logo" aria-label="unshackle" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m800-274-80-80v-206H514l-80-80h166v-80q0-50-34.5-85T481-840q-50 0-84 34.5T363-720v9l-73-73q22-61 75-98.5T481-920q83 0 141 58.5T680-720v80h40q33 0 56.5 23.5T800-560v286Zm20 246-62-62q-11 5-20 7.5T720-80H240q-33 0-56.5-23.5T160-160v-400q0-25 14.5-46t37.5-30L28-820l56-56L876-84l-56 56ZM686-160 539-309q-11 11-25.5 17t-31.5 6q-33 0-56.5-23.5T402-366q0-17 6-31.5t17-25.5L286-560h-46v400h446ZM486-360Zm131-97Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
unshackle
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Endpoints
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1M8 13h8v-2H8zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4a5 5 0 0 0 5-5 5 5 0 0 0-5-5"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="indigo" aria-label="Switch to system preference" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to system preference" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5M7 15a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/unshackle-dl/unshackle" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../.." class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item">
<a href="../../CREATING_A_SERVICE/" class="md-tabs__link">
Creating a Service
</a>
</li>
<li class="md-tabs__item">
<a href="../../SERVICE_CONFIG/" class="md-tabs__link">
Configuration
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../../API/" class="md-tabs__link">
REST API
</a>
</li>
<li class="md-tabs__item">
<a href="../../DEBUG_LOGGING/" class="md-tabs__link">
Reference
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="unshackle" class="md-nav__button md-logo" aria-label="unshackle" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m800-274-80-80v-206H514l-80-80h166v-80q0-50-34.5-85T481-840q-50 0-84 34.5T363-720v9l-73-73q22-61 75-98.5T481-920q83 0 141 58.5T680-720v80h40q33 0 56.5 23.5T800-560v286Zm20 246-62-62q-11 5-20 7.5T720-80H240q-33 0-56.5-23.5T160-160v-400q0-25 14.5-46t37.5-30L28-820l56-56L876-84l-56 56ZM686-160 539-309q-11 11-25.5 17t-31.5 6q-33 0-56.5-23.5T402-366q0-17 6-31.5t17-25.5L286-560h-46v400h446ZM486-360Zm131-97Z"/></svg>
</a>
unshackle
</label>
<div class="md-nav__source">
<a href="https://github.com/unshackle-dl/unshackle" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../CREATING_A_SERVICE/" class="md-nav__link">
<span class="md-ellipsis">
Creating a Service
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Configuration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Configuration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../SERVICE_CONFIG/" class="md-nav__link">
<span class="md-ellipsis">
Service Integration & Auth
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DOWNLOAD_CONFIG/" class="md-nav__link">
<span class="md-ellipsis">
Download & Processing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../OUTPUT_CONFIG/" class="md-nav__link">
<span class="md-ellipsis">
Output & Naming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../SUBTITLE_CONFIG/" class="md-nav__link">
<span class="md-ellipsis">
Subtitles
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DRM_CONFIG/" class="md-nav__link">
<span class="md-ellipsis">
DRM & CDM
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../NETWORK_CONFIG/" class="md-nav__link">
<span class="md-ellipsis">
Network & Proxy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../GLUETUN/" class="md-nav__link">
<span class="md-ellipsis">
Gluetun VPN
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../ADVANCED_CONFIG/" class="md-nav__link">
<span class="md-ellipsis">
Advanced & System
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
<span class="md-ellipsis">
REST API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
REST API
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../API/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../quick-start/" class="md-nav__link">
<span class="md-ellipsis">
Quick Start
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../authentication/" class="md-nav__link">
<span class="md-ellipsis">
Authentication
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Endpoints
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Endpoints
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#get-apihealth" class="md-nav__link">
<span class="md-ellipsis">
GET /api/health
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apiservices" class="md-nav__link">
<span class="md-ellipsis">
GET /api/services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apisearch" class="md-nav__link">
<span class="md-ellipsis">
POST /api/search
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apilist-titles" class="md-nav__link">
<span class="md-ellipsis">
POST /api/list-titles
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apilist-tracks" class="md-nav__link">
<span class="md-ellipsis">
POST /api/list-tracks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apidownload" class="md-nav__link">
<span class="md-ellipsis">
POST /api/download
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apidownloadjobs" class="md-nav__link">
<span class="md-ellipsis">
GET /api/download/jobs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apidownloadjobsjob_id" class="md-nav__link">
<span class="md-ellipsis">
GET /api/download/jobs/{job_id}
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#delete-apidownloadjobsjob_id" class="md-nav__link">
<span class="md-ellipsis">
DELETE /api/download/jobs/{job_id}
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apidownloadjobsclear-finished" class="md-nav__link">
<span class="md-ellipsis">
POST /api/download/jobs/clear-finished
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apidownloadjobsjob_idretry" class="md-nav__link">
<span class="md-ellipsis">
POST /api/download/jobs/{job_id}/retry
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apidownloadjobsjob_idpriority" class="md-nav__link">
<span class="md-ellipsis">
POST /api/download/jobs/{job_id}/priority
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apiprofiles" class="md-nav__link">
<span class="md-ellipsis">
GET /api/profiles
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apiconfig" class="md-nav__link">
<span class="md-ellipsis">
GET /api/config
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apihistory" class="md-nav__link">
<span class="md-ellipsis">
GET /api/history
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#delete-apihistoryjob_id" class="md-nav__link">
<span class="md-ellipsis">
DELETE /api/history/{job_id}
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apimaintenanceclear-cache" class="md-nav__link">
<span class="md-ellipsis">
POST /api/maintenance/clear-cache
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apimaintenanceclear-temp" class="md-nav__link">
<span class="md-ellipsis">
POST /api/maintenance/clear-temp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apimaintenancerefresh-services" class="md-nav__link">
<span class="md-ellipsis">
POST /api/maintenance/refresh-services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apienvcheck" class="md-nav__link">
<span class="md-ellipsis">
GET /api/env/check
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../endpoint-map/" class="md-nav__link">
<span class="md-ellipsis">
Endpoint Map
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../download-job-lifecycle/" class="md-nav__link">
<span class="md-ellipsis">
Download Job Lifecycle
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../remote-service-sessions/" class="md-nav__link">
<span class="md-ellipsis">
Remote Service Sessions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../client-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Client Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../error-responses/" class="md-nav__link">
<span class="md-ellipsis">
Error Responses
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../DEBUG_LOGGING/" class="md-nav__link">
<span class="md-ellipsis">
Debug Logging
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#get-apihealth" class="md-nav__link">
<span class="md-ellipsis">
GET /api/health
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apiservices" class="md-nav__link">
<span class="md-ellipsis">
GET /api/services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apisearch" class="md-nav__link">
<span class="md-ellipsis">
POST /api/search
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apilist-titles" class="md-nav__link">
<span class="md-ellipsis">
POST /api/list-titles
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apilist-tracks" class="md-nav__link">
<span class="md-ellipsis">
POST /api/list-tracks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apidownload" class="md-nav__link">
<span class="md-ellipsis">
POST /api/download
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apidownloadjobs" class="md-nav__link">
<span class="md-ellipsis">
GET /api/download/jobs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apidownloadjobsjob_id" class="md-nav__link">
<span class="md-ellipsis">
GET /api/download/jobs/{job_id}
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#delete-apidownloadjobsjob_id" class="md-nav__link">
<span class="md-ellipsis">
DELETE /api/download/jobs/{job_id}
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apidownloadjobsclear-finished" class="md-nav__link">
<span class="md-ellipsis">
POST /api/download/jobs/clear-finished
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apidownloadjobsjob_idretry" class="md-nav__link">
<span class="md-ellipsis">
POST /api/download/jobs/{job_id}/retry
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apidownloadjobsjob_idpriority" class="md-nav__link">
<span class="md-ellipsis">
POST /api/download/jobs/{job_id}/priority
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apiprofiles" class="md-nav__link">
<span class="md-ellipsis">
GET /api/profiles
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apiconfig" class="md-nav__link">
<span class="md-ellipsis">
GET /api/config
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apihistory" class="md-nav__link">
<span class="md-ellipsis">
GET /api/history
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#delete-apihistoryjob_id" class="md-nav__link">
<span class="md-ellipsis">
DELETE /api/history/{job_id}
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apimaintenanceclear-cache" class="md-nav__link">
<span class="md-ellipsis">
POST /api/maintenance/clear-cache
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apimaintenanceclear-temp" class="md-nav__link">
<span class="md-ellipsis">
POST /api/maintenance/clear-temp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#post-apimaintenancerefresh-services" class="md-nav__link">
<span class="md-ellipsis">
POST /api/maintenance/refresh-services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-apienvcheck" class="md-nav__link">
<span class="md-ellipsis">
GET /api/env/check
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="endpoints">Endpoints<a class="headerlink" href="#endpoints" title="Permanent link">&para;</a></h1>
<h2 id="get-apihealth">GET /api/health<a class="headerlink" href="#get-apihealth" title="Permanent link">&para;</a></h2>
<p>Health check with version and update information. Always reachable without auth.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>curl<span class="w"> </span>http://localhost:8786/api/health
</span></code></pre></div>
<div class="language-json highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="p">{</span>
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="nt">&quot;status&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;ok&quot;</span><span class="p">,</span>
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="nt">&quot;version&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;4.0.0&quot;</span><span class="p">,</span>
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="nt">&quot;update_check&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span><span class="nt">&quot;update_available&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
</span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span><span class="nt">&quot;current_version&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;4.0.0&quot;</span><span class="p">,</span>
</span><span id="__span-1-7"><a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="w"> </span><span class="nt">&quot;latest_version&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
</span><span id="__span-1-8"><a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-1-9"><a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="p">}</span>
</span></code></pre></div>
<hr />
<h2 id="get-apiservices">GET /api/services<a class="headerlink" href="#get-apiservices" title="Permanent link">&para;</a></h2>
<p>List all available streaming services (filtered by the effective allowlist for the caller).</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>curl<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span>http://localhost:8786/api/services
</span></code></pre></div>
<p>Returns <code>{"services": [...]}</code>. Each entry has <code>tag</code>, <code>aliases</code>, <code>geofence</code>, <code>title_regex</code>, <code>url</code> (from <code>cli.short_help</code>), <code>help</code> (full docstring), and <code>cli_params</code> describing the service-level Click parameters.</p>
<hr />
<h2 id="post-apisearch">POST /api/search<a class="headerlink" href="#post-apisearch" title="Permanent link">&para;</a></h2>
<p>Search for titles from a streaming service.</p>
<p><strong>Required parameters:</strong>
| Parameter | Type | Description |
| --- | --- | --- |
| <code>service</code> | string | Service tag |
| <code>query</code> | string | Search query |</p>
<p><strong>Optional parameters:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>profile</code> | string | <code>null</code> | Profile for credentials/cookies |
| <code>proxy</code> | string | <code>null</code> | Proxy URI or country code |
| <code>no_proxy</code> | boolean | <code>false</code> | Disable all proxy use |</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span>http://localhost:8786/api/search<span class="w"> </span><span class="se">\</span>
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span><span class="se">\</span>
</span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;Content-Type: application/json&quot;</span><span class="w"> </span><span class="se">\</span>
</span><span id="__span-3-4"><a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">&#39;{&quot;service&quot;: &quot;EXAMPLE1&quot;, &quot;query&quot;: &quot;example show&quot;}&#39;</span>
</span></code></pre></div>
<div class="language-json highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="p">{</span>
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span><span class="nt">&quot;results&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="p">{</span>
</span><span id="__span-4-4"><a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;abc123def456&quot;</span><span class="p">,</span>
</span><span id="__span-4-5"><a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="w"> </span><span class="nt">&quot;title&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Example Show&quot;</span><span class="p">,</span>
</span><span id="__span-4-6"><a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
</span><span id="__span-4-7"><a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a><span class="w"> </span><span class="nt">&quot;label&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;TV Show&quot;</span><span class="p">,</span>
</span><span id="__span-4-8"><a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://example.com/show/abc123def456&quot;</span>
</span><span id="__span-4-9"><a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-4-10"><a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a><span class="w"> </span><span class="p">],</span>
</span><span id="__span-4-11"><a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a><span class="w"> </span><span class="nt">&quot;count&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span>
</span><span id="__span-4-12"><a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a><span class="p">}</span>
</span></code></pre></div>
<hr />
<h2 id="post-apilist-titles">POST /api/list-titles<a class="headerlink" href="#post-apilist-titles" title="Permanent link">&para;</a></h2>
<p>Get available titles (seasons/episodes/movies) for a service and title ID. Disabled in <code>--remote-only</code> mode.</p>
<p><strong>Required parameters:</strong>
| Parameter | Type | Description |
| --- | --- | --- |
| <code>service</code> | string | Service tag |
| <code>title_id</code> | string | Title ID or URL |</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span>http://localhost:8786/api/list-titles<span class="w"> </span><span class="se">\</span>
</span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span><span class="se">\</span>
</span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;Content-Type: application/json&quot;</span><span class="w"> </span><span class="se">\</span>
</span><span id="__span-5-4"><a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">&#39;{&quot;service&quot;: &quot;EXAMPLE1&quot;, &quot;title_id&quot;: &quot;abc123def456&quot;}&#39;</span>
</span></code></pre></div>
<hr />
<h2 id="post-apilist-tracks">POST /api/list-tracks<a class="headerlink" href="#post-apilist-tracks" title="Permanent link">&para;</a></h2>
<p>Get video, audio, and subtitle tracks for a title. Disabled in <code>--remote-only</code> mode.</p>
<p><strong>Required parameters:</strong>
| Parameter | Type | Description |
| --- | --- | --- |
| <code>service</code> | string | Service tag |
| <code>title_id</code> | string | Title ID or URL |</p>
<p><strong>Optional parameters:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>wanted</code> | array | all | Episode filter (e.g., <code>["S01E01"]</code>) |
| <code>profile</code> | string | <code>null</code> | Profile for credentials/cookies |
| <code>proxy</code> | string | <code>null</code> | Proxy URI or country code |
| <code>no_proxy</code> | boolean | <code>false</code> | Disable all proxy use |</p>
<p>Returns video, audio, and subtitle tracks with codec, bitrate, resolution, language, and DRM information.</p>
<hr />
<h2 id="post-apidownload">POST /api/download<a class="headerlink" href="#post-apidownload" title="Permanent link">&para;</a></h2>
<p>Start a download job. Returns immediately with a job ID (HTTP 202). Disabled in <code>--remote-only</code> mode.</p>
<p><strong>Required parameters:</strong>
| Parameter | Type | Description |
| --- | --- | --- |
| <code>service</code> | string | Service tag |
| <code>title_id</code> | string | Title ID or URL |</p>
<p><strong>Quality and codec parameters:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>quality</code> | array[int] | best | Resolution(s) (e.g., <code>[1080, 2160]</code>) |
| <code>vcodec</code> | string or array | any | Video codec(s): <code>H264</code>, <code>H265</code>/<code>HEVC</code>, <code>VP9</code>, <code>AV1</code>, <code>VC1</code>, <code>VP8</code> |
| <code>acodec</code> | string or array | any | Audio codec(s): <code>AAC</code>, <code>AC3</code>, <code>EC3</code>, <code>AC4</code>, <code>OPUS</code>, <code>FLAC</code>, <code>ALAC</code>, <code>DTS</code>, <code>OGG</code> |
| <code>vbitrate</code> | int | highest | Video bitrate in kbps |
| <code>abitrate</code> | int | highest | Audio bitrate in kbps |
| <code>range</code> | array[string] | <code>["SDR"]</code> | Color range(s): <code>SDR</code>, <code>HDR10</code>, <code>HDR10+</code>, <code>HLG</code>, <code>DV</code>, <code>HYBRID</code> |
| <code>channels</code> | float | any | Audio channels (e.g., <code>5.1</code>, <code>7.1</code>) |
| <code>no_atmos</code> | boolean | <code>false</code> | Exclude Dolby Atmos tracks |
| <code>split_audio</code> | boolean | <code>null</code> | Create separate output per audio codec |
| <code>sub_format</code> | string | <code>null</code> | Output subtitle format: <code>SRT</code>, <code>VTT</code>, <code>ASS</code>, <code>SSA</code>, <code>TTML</code> |</p>
<p><strong>Episode selection:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>wanted</code> | array[string] | all | Episodes (e.g., <code>["S01E01", "S01E02-S01E05"]</code>) |
| <code>latest_episode</code> | boolean | <code>false</code> | Download only the most recent episode |</p>
<p><strong>Language parameters:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>lang</code> | array[string] | <code>["orig"]</code> | Language for video and audio (<code>orig</code> = original) |
| <code>v_lang</code> | array[string] | <code>[]</code> | Language override for video tracks only |
| <code>a_lang</code> | array[string] | <code>[]</code> | Language override for audio tracks only |
| <code>s_lang</code> | array[string] | <code>["all"]</code> | Language for subtitles |
| <code>require_subs</code> | array[string] | <code>[]</code> | Required subtitle languages (skip if missing) |
| <code>forced_subs</code> | boolean | <code>false</code> | Include forced subtitle tracks |
| <code>exact_lang</code> | boolean | <code>false</code> | Exact language matching (no variants) |</p>
<p><strong>Track selection:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>video_only</code> | boolean | <code>false</code> | Only download video tracks |
| <code>audio_only</code> | boolean | <code>false</code> | Only download audio tracks |
| <code>subs_only</code> | boolean | <code>false</code> | Only download subtitle tracks |
| <code>chapters_only</code> | boolean | <code>false</code> | Only download chapters |
| <code>no_video</code> | boolean | <code>false</code> | Skip video tracks |
| <code>no_audio</code> | boolean | <code>false</code> | Skip audio tracks |
| <code>no_subs</code> | boolean | <code>false</code> | Skip subtitle tracks |
| <code>no_chapters</code> | boolean | <code>false</code> | Skip chapters |
| <code>audio_description</code> | boolean | <code>false</code> | Include audio description tracks |</p>
<p><strong>Output and tagging:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>tag</code> | string | <code>null</code> | Override group tag |
| <code>repack</code> | boolean | <code>false</code> | Add REPACK tag to filename |
| <code>tmdb_id</code> | int | <code>null</code> | Use specific TMDB ID for tagging |
| <code>imdb_id</code> | string | <code>null</code> | Use specific IMDB ID (e.g., <code>tt1375666</code>) |
| <code>animeapi_id</code> | string | <code>null</code> | Anime database ID via AnimeAPI (e.g., <code>mal:12345</code>) |
| <code>enrich</code> | boolean | <code>false</code> | Override show title and year from external source |
| <code>no_folder</code> | boolean | <code>false</code> | Disable folder creation for TV shows |
| <code>no_source</code> | boolean | <code>false</code> | Remove source tag from filename |
| <code>no_mux</code> | boolean | <code>false</code> | Do not mux tracks into container |
| <code>output_dir</code> | string | <code>null</code> | Override output directory |</p>
<p><strong>Download behavior:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>profile</code> | string | <code>null</code> | Profile for credentials/cookies |
| <code>proxy</code> | string | <code>null</code> | Proxy URI or country code |
| <code>no_proxy</code> | boolean | <code>false</code> | Disable all proxy use |
| <code>no_proxy_download</code> | boolean | <code>false</code> | Bypass proxy for segment downloads only. Manifest, license, and auth still use proxy |
| <code>workers</code> | int | <code>null</code> | Max threads per track download |
| <code>downloads</code> | int | <code>1</code> | Concurrent track downloads |
| <code>slow</code> | boolean or string | <code>null</code> | Add randomized delay between titles. <code>true</code> = 60-120s, or <code>"MIN-MAX"</code> string (e.g., <code>"20-40"</code>). Min must be &gt;= 20 |
| <code>best_available</code> | boolean | <code>false</code> | Continue if requested quality unavailable |
| <code>worst</code> | boolean | <code>false</code> | Select the lowest bitrate track within the specified quality. Requires <code>quality</code> |
| <code>skip_dl</code> | boolean | <code>false</code> | Skip download, only get decryption keys |
| <code>export</code> | boolean | <code>false</code> | Export manifest, track URLs, keys, and subtitles to JSON in the exports directory |
| <code>cdm_only</code> | boolean | <code>null</code> | Only use CDM (<code>true</code>) or only vaults (<code>false</code>) |
| <code>no_cache</code> | boolean | <code>false</code> | Bypass title cache |
| <code>reset_cache</code> | boolean | <code>false</code> | Clear title cache before fetching |</p>
<p><strong>Example:</strong></p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span>http://localhost:8786/api/download<span class="w"> </span><span class="se">\</span>
</span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span><span class="se">\</span>
</span><span id="__span-6-3"><a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;Content-Type: application/json&quot;</span><span class="w"> </span><span class="se">\</span>
</span><span id="__span-6-4"><a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">&#39;{</span>
</span><span id="__span-6-5"><a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a><span class="s1"> &quot;service&quot;: &quot;EXAMPLE1&quot;,</span>
</span><span id="__span-6-6"><a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a><span class="s1"> &quot;title_id&quot;: &quot;abc123def456&quot;,</span>
</span><span id="__span-6-7"><a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a><span class="s1"> &quot;wanted&quot;: [&quot;S01E01&quot;],</span>
</span><span id="__span-6-8"><a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a><span class="s1"> &quot;quality&quot;: [1080, 2160],</span>
</span><span id="__span-6-9"><a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a><span class="s1"> &quot;vcodec&quot;: [&quot;H265&quot;],</span>
</span><span id="__span-6-10"><a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a><span class="s1"> &quot;acodec&quot;: [&quot;AAC&quot;, &quot;EC3&quot;],</span>
</span><span id="__span-6-11"><a id="__codelineno-6-11" name="__codelineno-6-11" href="#__codelineno-6-11"></a><span class="s1"> &quot;range&quot;: [&quot;HDR10&quot;, &quot;SDR&quot;],</span>
</span><span id="__span-6-12"><a id="__codelineno-6-12" name="__codelineno-6-12" href="#__codelineno-6-12"></a><span class="s1"> &quot;split_audio&quot;: true,</span>
</span><span id="__span-6-13"><a id="__codelineno-6-13" name="__codelineno-6-13" href="#__codelineno-6-13"></a><span class="s1"> &quot;lang&quot;: [&quot;en&quot;]</span>
</span><span id="__span-6-14"><a id="__codelineno-6-14" name="__codelineno-6-14" href="#__codelineno-6-14"></a><span class="s1"> }&#39;</span>
</span></code></pre></div>
<div class="language-json highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="p">{</span>
</span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="w"> </span><span class="nt">&quot;job_id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;504db959-80b0-446c-a764-7924b761d613&quot;</span><span class="p">,</span>
</span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="w"> </span><span class="nt">&quot;status&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;queued&quot;</span><span class="p">,</span>
</span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="w"> </span><span class="nt">&quot;created_time&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2026-02-27T18:00:00.000000&quot;</span>
</span><span id="__span-7-5"><a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="p">}</span>
</span></code></pre></div>
<hr />
<h2 id="get-apidownloadjobs">GET /api/download/jobs<a class="headerlink" href="#get-apidownloadjobs" title="Permanent link">&para;</a></h2>
<p>List all download jobs with optional filtering and sorting. Disabled in <code>--remote-only</code> mode.</p>
<p><strong>Query parameters:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>status</code> | string | all | Filter by status: <code>queued</code>, <code>downloading</code>, <code>completed</code>, <code>failed</code>, <code>cancelled</code> |
| <code>service</code> | string | all | Filter by service tag |
| <code>sort_by</code> | string | <code>created_time</code> | Sort field: <code>created_time</code>, <code>started_time</code>, <code>completed_time</code>, <code>progress</code>, <code>status</code>, <code>service</code> |
| <code>sort_order</code> | string | <code>desc</code> | Sort order: <code>asc</code>, <code>desc</code> |
| <code>full</code> | string | <code>false</code> | <code>true</code> to include full job details per job (parameters, timestamps, <code>output_files</code>, error fields) |</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>curl<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span><span class="s2">&quot;http://localhost:8786/api/download/jobs?status=completed&quot;</span>
</span></code></pre></div>
<hr />
<h2 id="get-apidownloadjobsjob_id">GET /api/download/jobs/{job_id}<a class="headerlink" href="#get-apidownloadjobsjob_id" title="Permanent link">&para;</a></h2>
<p>Get detailed information about a specific download job including progress, parameters, and error details.</p>
<div class="language-json highlight"><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="p">{</span>
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="w"> </span><span class="nt">&quot;job_id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;504db959-80b0-446c-a764-7924b761d613&quot;</span><span class="p">,</span>
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="w"> </span><span class="nt">&quot;status&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;downloading&quot;</span><span class="p">,</span>
</span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a><span class="w"> </span><span class="nt">&quot;created_time&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2026-02-27T18:00:00.000000&quot;</span><span class="p">,</span>
</span><span id="__span-9-5"><a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="w"> </span><span class="nt">&quot;service&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;EXAMPLE1&quot;</span><span class="p">,</span>
</span><span id="__span-9-6"><a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a><span class="w"> </span><span class="nt">&quot;title_id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;abc123def456&quot;</span><span class="p">,</span>
</span><span id="__span-9-7"><a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a><span class="w"> </span><span class="nt">&quot;title&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Example Show&quot;</span><span class="p">,</span>
</span><span id="__span-9-8"><a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a><span class="w"> </span><span class="nt">&quot;progress&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">74.9</span><span class="p">,</span>
</span><span id="__span-9-9"><a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a><span class="w"> </span><span class="nt">&quot;phase&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;downloading video 1080p SDR&quot;</span><span class="p">,</span>
</span><span id="__span-9-10"><a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a><span class="w"> </span><span class="nt">&quot;current_title&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;S01E04&quot;</span><span class="p">,</span>
</span><span id="__span-9-11"><a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a><span class="w"> </span><span class="nt">&quot;completed_tracks&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span>
</span><span id="__span-9-12"><a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a><span class="w"> </span><span class="nt">&quot;total_tracks&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">13</span><span class="p">,</span>
</span><span id="__span-9-13"><a id="__codelineno-9-13" name="__codelineno-9-13" href="#__codelineno-9-13"></a><span class="w"> </span><span class="nt">&quot;active_tracks&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;video 1080p SDR&quot;</span><span class="p">],</span>
</span><span id="__span-9-14"><a id="__codelineno-9-14" name="__codelineno-9-14" href="#__codelineno-9-14"></a><span class="w"> </span><span class="nt">&quot;track_progress&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
</span><span id="__span-9-15"><a id="__codelineno-9-15" name="__codelineno-9-15" href="#__codelineno-9-15"></a><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;label&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;video 1080p SDR&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;progress&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">74.9</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;speed&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;DASH 265.5 MB/s&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-9-16"><a id="__codelineno-9-16" name="__codelineno-9-16" href="#__codelineno-9-16"></a><span class="w"> </span><span class="p">],</span>
</span><span id="__span-9-17"><a id="__codelineno-9-17" name="__codelineno-9-17" href="#__codelineno-9-17"></a><span class="w"> </span><span class="nt">&quot;segments_done&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">75.0</span><span class="p">,</span>
</span><span id="__span-9-18"><a id="__codelineno-9-18" name="__codelineno-9-18" href="#__codelineno-9-18"></a><span class="w"> </span><span class="nt">&quot;segments_total&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">100.0</span><span class="p">,</span>
</span><span id="__span-9-19"><a id="__codelineno-9-19" name="__codelineno-9-19" href="#__codelineno-9-19"></a><span class="w"> </span><span class="nt">&quot;speed&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;DASH 265.5 MB/s&quot;</span><span class="p">,</span>
</span><span id="__span-9-20"><a id="__codelineno-9-20" name="__codelineno-9-20" href="#__codelineno-9-20"></a><span class="w"> </span><span class="nt">&quot;parameters&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-9-21"><a id="__codelineno-9-21" name="__codelineno-9-21" href="#__codelineno-9-21"></a><span class="w"> </span><span class="nt">&quot;started_time&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2026-02-27T18:00:01.000000&quot;</span><span class="p">,</span>
</span><span id="__span-9-22"><a id="__codelineno-9-22" name="__codelineno-9-22" href="#__codelineno-9-22"></a><span class="w"> </span><span class="nt">&quot;completed_time&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
</span><span id="__span-9-23"><a id="__codelineno-9-23" name="__codelineno-9-23" href="#__codelineno-9-23"></a><span class="w"> </span><span class="nt">&quot;output_files&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
</span><span id="__span-9-24"><a id="__codelineno-9-24" name="__codelineno-9-24" href="#__codelineno-9-24"></a><span class="w"> </span><span class="s2">&quot;/downloads/Example.Show.S01E01.mkv&quot;</span><span class="p">,</span>
</span><span id="__span-9-25"><a id="__codelineno-9-25" name="__codelineno-9-25" href="#__codelineno-9-25"></a><span class="w"> </span><span class="s2">&quot;/downloads/Example.Show.S01E02.mkv&quot;</span><span class="p">,</span>
</span><span id="__span-9-26"><a id="__codelineno-9-26" name="__codelineno-9-26" href="#__codelineno-9-26"></a><span class="w"> </span><span class="s2">&quot;/downloads/Example.Show.S01E03.mkv&quot;</span>
</span><span id="__span-9-27"><a id="__codelineno-9-27" name="__codelineno-9-27" href="#__codelineno-9-27"></a><span class="w"> </span><span class="p">],</span>
</span><span id="__span-9-28"><a id="__codelineno-9-28" name="__codelineno-9-28" href="#__codelineno-9-28"></a><span class="w"> </span><span class="nt">&quot;error_message&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
</span><span id="__span-9-29"><a id="__codelineno-9-29" name="__codelineno-9-29" href="#__codelineno-9-29"></a><span class="w"> </span><span class="nt">&quot;error_details&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
</span><span id="__span-9-30"><a id="__codelineno-9-30" name="__codelineno-9-30" href="#__codelineno-9-30"></a><span class="p">}</span>
</span></code></pre></div>
<p><strong>Progress fields:</strong></p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>progress</code></td>
<td>number</td>
<td>Overall progress for the title currently downloading, 0–100. Resets per episode on multi-episode jobs</td>
</tr>
<tr>
<td><code>phase</code></td>
<td>string</td>
<td>Human-readable current step, e.g. <code>downloading video 1080p SDR</code>, <code>muxing</code></td>
</tr>
<tr>
<td><code>title</code></td>
<td>string</td>
<td>Human-readable show/movie name, available once the download starts</td>
</tr>
<tr>
<td><code>current_title</code></td>
<td>string</td>
<td><code>SxxEyy</code> code of the episode downloading now (episodic jobs only)</td>
</tr>
<tr>
<td><code>completed_tracks</code> / <code>total_tracks</code></td>
<td>int</td>
<td>Track counts for the current title</td>
</tr>
<tr>
<td><code>active_tracks</code></td>
<td>array[string]</td>
<td>Labels of tracks downloading now</td>
</tr>
<tr>
<td><code>track_progress</code></td>
<td>array</td>
<td>Per-track <code>{label, progress, speed}</code> for each concurrently active track</td>
</tr>
<tr>
<td><code>segments_done</code> / <code>segments_total</code></td>
<td>number</td>
<td>Segment counts of the track downloading now</td>
</tr>
<tr>
<td><code>speed</code></td>
<td>string</td>
<td>Transfer speed of the track downloading now</td>
</tr>
<tr>
<td><code>output_files</code></td>
<td>array[string]</td>
<td>Final file paths, appended as each title finishes muxing</td>
</tr>
</tbody>
</table>
<p>The list endpoint (<code>GET /api/download/jobs</code>) returns the same progress fields per job but omits <code>parameters</code>, timestamps, <code>output_files</code>, and error details.</p>
<hr />
<h2 id="delete-apidownloadjobsjob_id">DELETE /api/download/jobs/{job_id}<a class="headerlink" href="#delete-apidownloadjobsjob_id" title="Permanent link">&para;</a></h2>
<p>Cancel a queued or running download job, or remove a finished one.</p>
<ul>
<li><code>queued</code> / <code>downloading</code> job: cancelled, returns <code>200</code> with <code>{"status": "success", "message": "Job cancelled"}</code>.</li>
<li><code>completed</code> / <code>failed</code> / <code>cancelled</code> job: removed from the manager entirely, returns <code>204</code> (no body).</li>
<li>Unknown job: <code>404</code>.</li>
</ul>
<hr />
<h2 id="post-apidownloadjobsclear-finished">POST /api/download/jobs/clear-finished<a class="headerlink" href="#post-apidownloadjobsclear-finished" title="Permanent link">&para;</a></h2>
<p>Remove all <code>completed</code>, <code>failed</code>, and <code>cancelled</code> jobs from the manager. Disabled in <code>--remote-only</code> mode.</p>
<div class="language-json highlight"><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="p">{</span><span class="w"> </span><span class="nt">&quot;removed&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="p">}</span>
</span></code></pre></div>
<hr />
<h2 id="post-apidownloadjobsjob_idretry">POST /api/download/jobs/{job_id}/retry<a class="headerlink" href="#post-apidownloadjobsjob_idretry" title="Permanent link">&para;</a></h2>
<p>Enqueue a new job reusing a finished job's service, title, and original (unredacted) parameters. Only allowed on <code>completed</code>, <code>failed</code>, or <code>cancelled</code> jobs — returns <code>409</code> otherwise, <code>404</code> if unknown. The original job is left in place.</p>
<p>Creation-time authorization is re-applied at retry time: the job's service must pass the caller's service allowlist (otherwise <code>400</code> invalid service), and jobs whose original parameters carried a <code>cdm</code> override or per-job credentials return <code>403</code> if <code>serve.cdm_overrides</code> / <code>serve.allow_job_credentials</code> no longer permit them.</p>
<p>Returns <code>202</code> with the same shape as <code>POST /api/download</code>:</p>
<div class="language-json highlight"><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="p">{</span>
</span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="w"> </span><span class="nt">&quot;job_id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;b7e9c1f2-...&quot;</span><span class="p">,</span>
</span><span id="__span-11-3"><a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="w"> </span><span class="nt">&quot;status&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;queued&quot;</span><span class="p">,</span>
</span><span id="__span-11-4"><a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a><span class="w"> </span><span class="nt">&quot;created_time&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2026-02-27T18:00:00.000000&quot;</span>
</span><span id="__span-11-5"><a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a><span class="p">}</span>
</span></code></pre></div>
<hr />
<h2 id="post-apidownloadjobsjob_idpriority">POST /api/download/jobs/{job_id}/priority<a class="headerlink" href="#post-apidownloadjobsjob_idpriority" title="Permanent link">&para;</a></h2>
<p>Move a <code>queued</code> job to the front of the download queue so a worker picks it up next. Returns <code>409</code> if the job is not queued, <code>404</code> if unknown.</p>
<div class="language-json highlight"><pre><span></span><code><span id="__span-12-1"><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="p">{</span><span class="w"> </span><span class="nt">&quot;job_id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;504db959-...&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;position&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;front&quot;</span><span class="w"> </span><span class="p">}</span>
</span></code></pre></div>
<hr />
<h2 id="get-apiprofiles">GET /api/profiles<a class="headerlink" href="#get-apiprofiles" title="Permanent link">&para;</a></h2>
<p>List named credential profiles per service, usable as the <code>profile</code> parameter on search/list/download. Only services whose credentials are configured as a <code>profile-name: credential</code> mapping appear (a <code>default</code> key is included if present); a service with a single plain (unnamed) credential is omitted entirely. Filtered by the caller's service allowlist. Disabled in <code>--remote-only</code> mode.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>curl<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span>http://localhost:8786/api/profiles
</span></code></pre></div>
<div class="language-json highlight"><pre><span></span><code><span id="__span-14-1"><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="p">{</span><span class="w"> </span><span class="nt">&quot;profiles&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;EXAMPLE1&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;default&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;uk&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;us&quot;</span><span class="p">],</span><span class="w"> </span><span class="nt">&quot;EXAMPLE2&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;alice&quot;</span><span class="p">]</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">}</span>
</span></code></pre></div>
<hr />
<h2 id="get-apiconfig">GET /api/config<a class="headerlink" href="#get-apiconfig" title="Permanent link">&para;</a></h2>
<p>Read-only, redacted view of the effective server configuration for a UI settings page. Secrets (<code>api_secret</code>, <code>users</code>, credentials, tokens) are never included; secret-looking keys inside <code>dl</code> are masked with <code>***</code>. Disabled in <code>--remote-only</code> mode.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-15-1"><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>curl<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span>http://localhost:8786/api/config
</span></code></pre></div>
<div class="language-json highlight"><pre><span></span><code><span id="__span-16-1"><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="p">{</span>
</span><span id="__span-16-2"><a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a><span class="w"> </span><span class="nt">&quot;config&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-16-3"><a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a><span class="w"> </span><span class="nt">&quot;dl&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;lang&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;orig&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;sub_format&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;srt&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;downloads&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">12</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-16-4"><a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a><span class="w"> </span><span class="nt">&quot;serve&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-16-5"><a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a><span class="w"> </span><span class="nt">&quot;max_concurrent_downloads&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span>
</span><span id="__span-16-6"><a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a><span class="w"> </span><span class="nt">&quot;job_retention_hours&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">24</span><span class="p">,</span>
</span><span id="__span-16-7"><a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a><span class="w"> </span><span class="nt">&quot;history_limit&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span>
</span><span id="__span-16-8"><a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a><span class="w"> </span><span class="nt">&quot;services&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
</span><span id="__span-16-9"><a id="__codelineno-16-9" name="__codelineno-16-9" href="#__codelineno-16-9"></a><span class="w"> </span><span class="nt">&quot;remote_only&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
</span><span id="__span-16-10"><a id="__codelineno-16-10" name="__codelineno-16-10" href="#__codelineno-16-10"></a><span class="w"> </span><span class="nt">&quot;cdm_overrides&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
</span><span id="__span-16-11"><a id="__codelineno-16-11" name="__codelineno-16-11" href="#__codelineno-16-11"></a><span class="w"> </span><span class="nt">&quot;allow_job_credentials&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span>
</span><span id="__span-16-12"><a id="__codelineno-16-12" name="__codelineno-16-12" href="#__codelineno-16-12"></a><span class="w"> </span><span class="p">},</span>
</span><span id="__span-16-13"><a id="__codelineno-16-13" name="__codelineno-16-13" href="#__codelineno-16-13"></a><span class="w"> </span><span class="nt">&quot;directories&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-16-14"><a id="__codelineno-16-14" name="__codelineno-16-14" href="#__codelineno-16-14"></a><span class="w"> </span><span class="nt">&quot;downloads&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/srv/downloads&quot;</span><span class="p">,</span>
</span><span id="__span-16-15"><a id="__codelineno-16-15" name="__codelineno-16-15" href="#__codelineno-16-15"></a><span class="w"> </span><span class="nt">&quot;temp&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/srv/temp&quot;</span><span class="p">,</span>
</span><span id="__span-16-16"><a id="__codelineno-16-16" name="__codelineno-16-16" href="#__codelineno-16-16"></a><span class="w"> </span><span class="nt">&quot;cache&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/srv/cache&quot;</span>
</span><span id="__span-16-17"><a id="__codelineno-16-17" name="__codelineno-16-17" href="#__codelineno-16-17"></a><span class="w"> </span><span class="p">},</span>
</span><span id="__span-16-18"><a id="__codelineno-16-18" name="__codelineno-16-18" href="#__codelineno-16-18"></a><span class="w"> </span><span class="nt">&quot;services&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;EXAMPLE1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;EXAMPLE2&quot;</span><span class="p">]</span>
</span><span id="__span-16-19"><a id="__codelineno-16-19" name="__codelineno-16-19" href="#__codelineno-16-19"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-16-20"><a id="__codelineno-16-20" name="__codelineno-16-20" href="#__codelineno-16-20"></a><span class="p">}</span>
</span></code></pre></div>
<table>
<thead>
<tr>
<th>Field</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>dl</code></td>
<td>Default <code>dl</code> parameters from the config file (redacted)</td>
</tr>
<tr>
<td><code>serve.services</code></td>
<td>Global service allowlist, or <code>null</code> when all services are allowed</td>
</tr>
<tr>
<td><code>serve.cdm_overrides</code></td>
<td>Permitted per-request CDM device names (list), <code>true</code>, or <code>null</code></td>
</tr>
<tr>
<td><code>services</code></td>
<td>Available service tags, filtered by the caller's allowlist</td>
</tr>
</tbody>
</table>
<hr />
<h2 id="get-apihistory">GET /api/history<a class="headerlink" href="#get-apihistory" title="Permanent link">&para;</a></h2>
<p>Persistent download history. Every job that reaches a terminal state (<code>completed</code>, <code>failed</code>, <code>cancelled</code>) is appended as one JSON line to <code>api_history.jsonl</code> in the cache directory, surviving restarts and job cleanup. Only the newest <code>serve.history_limit</code> entries are retained (default <code>100</code>, <code>0</code> for unlimited; see Advanced Config). Newest first. Corrupt lines are skipped; a missing file yields an empty list. Entries are filtered by the caller's service allowlist. Disabled in <code>--remote-only</code> mode.</p>
<p><strong>Query parameters:</strong>
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| <code>limit</code> | int | <code>100</code> | Maximum entries returned (must be &gt;= 1) |
| <code>service</code> | string | all | Filter by service tag (case-insensitive) |</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-17-1"><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>curl<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span><span class="s2">&quot;http://localhost:8786/api/history?limit=50&amp;service=EXAMPLE1&quot;</span>
</span></code></pre></div>
<div class="language-json highlight"><pre><span></span><code><span id="__span-18-1"><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="p">{</span>
</span><span id="__span-18-2"><a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a><span class="w"> </span><span class="nt">&quot;history&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
</span><span id="__span-18-3"><a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a><span class="w"> </span><span class="p">{</span>
</span><span id="__span-18-4"><a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a><span class="w"> </span><span class="nt">&quot;job_id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;504db959-80b0-446c-a764-7924b761d613&quot;</span><span class="p">,</span>
</span><span id="__span-18-5"><a id="__codelineno-18-5" name="__codelineno-18-5" href="#__codelineno-18-5"></a><span class="w"> </span><span class="nt">&quot;service&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;EXAMPLE1&quot;</span><span class="p">,</span>
</span><span id="__span-18-6"><a id="__codelineno-18-6" name="__codelineno-18-6" href="#__codelineno-18-6"></a><span class="w"> </span><span class="nt">&quot;title_id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;abc123def456&quot;</span><span class="p">,</span>
</span><span id="__span-18-7"><a id="__codelineno-18-7" name="__codelineno-18-7" href="#__codelineno-18-7"></a><span class="w"> </span><span class="nt">&quot;title&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Example Show&quot;</span><span class="p">,</span>
</span><span id="__span-18-8"><a id="__codelineno-18-8" name="__codelineno-18-8" href="#__codelineno-18-8"></a><span class="w"> </span><span class="nt">&quot;status&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;completed&quot;</span><span class="p">,</span>
</span><span id="__span-18-9"><a id="__codelineno-18-9" name="__codelineno-18-9" href="#__codelineno-18-9"></a><span class="w"> </span><span class="nt">&quot;created_time&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2026-02-27T18:00:00.000000&quot;</span><span class="p">,</span>
</span><span id="__span-18-10"><a id="__codelineno-18-10" name="__codelineno-18-10" href="#__codelineno-18-10"></a><span class="w"> </span><span class="nt">&quot;completed_time&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2026-02-27T18:12:34.000000&quot;</span><span class="p">,</span>
</span><span id="__span-18-11"><a id="__codelineno-18-11" name="__codelineno-18-11" href="#__codelineno-18-11"></a><span class="w"> </span><span class="nt">&quot;output_files&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;/downloads/Example.Show.S01E01.mkv&quot;</span><span class="p">],</span>
</span><span id="__span-18-12"><a id="__codelineno-18-12" name="__codelineno-18-12" href="#__codelineno-18-12"></a><span class="w"> </span><span class="nt">&quot;parameters&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;wanted&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;S01E01&quot;</span><span class="p">],</span><span class="w"> </span><span class="nt">&quot;quality&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">1080</span><span class="p">],</span><span class="w"> </span><span class="nt">&quot;skip_dl&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-18-13"><a id="__codelineno-18-13" name="__codelineno-18-13" href="#__codelineno-18-13"></a><span class="w"> </span><span class="nt">&quot;error_message&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
</span><span id="__span-18-14"><a id="__codelineno-18-14" name="__codelineno-18-14" href="#__codelineno-18-14"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-18-15"><a id="__codelineno-18-15" name="__codelineno-18-15" href="#__codelineno-18-15"></a><span class="w"> </span><span class="p">],</span>
</span><span id="__span-18-16"><a id="__codelineno-18-16" name="__codelineno-18-16" href="#__codelineno-18-16"></a><span class="w"> </span><span class="nt">&quot;count&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span>
</span><span id="__span-18-17"><a id="__codelineno-18-17" name="__codelineno-18-17" href="#__codelineno-18-17"></a><span class="p">}</span>
</span></code></pre></div>
<p><code>error_message</code> is redacted with the same secret-scrubbing applied to job responses. <code>parameters</code> is the redacted download selection the job ran with (quality/vcodec/range/wanted/skip_dl, etc.). <code>completed_time</code> is <code>null</code> for jobs cancelled while still queued.</p>
<hr />
<h2 id="delete-apihistoryjob_id">DELETE /api/history/{job_id}<a class="headerlink" href="#delete-apihistoryjob_id" title="Permanent link">&para;</a></h2>
<p>Remove a single history entry by <code>job_id</code> (the file is rewritten without it). Returns <code>204</code> on success, <code>404</code> if no matching entry exists or it falls outside the caller's service allowlist. Corrupt lines in the history file are preserved.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-19-1"><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>curl<span class="w"> </span>-X<span class="w"> </span>DELETE<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span><span class="s2">&quot;http://localhost:8786/api/history/504db959-80b0-446c-a764-7924b761d613&quot;</span>
</span></code></pre></div>
<hr />
<h2 id="post-apimaintenanceclear-cache">POST /api/maintenance/clear-cache<a class="headerlink" href="#post-apimaintenanceclear-cache" title="Permanent link">&para;</a></h2>
<p>Delete the contents of the cache directory (the directory is recreated empty). <code>freed_bytes</code> is best effort. This also removes <code>api_history.jsonl</code>, so persistent download history is cleared. Returns <code>409</code> with the active job ids if any job is currently downloading, since in-flight jobs may be reading the cache. Disabled in <code>--remote-only</code> mode.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-20-1"><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span>http://localhost:8786/api/maintenance/clear-cache
</span></code></pre></div>
<div class="language-json highlight"><pre><span></span><code><span id="__span-21-1"><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a><span class="p">{</span><span class="w"> </span><span class="nt">&quot;cleared&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;freed_bytes&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1234567</span><span class="w"> </span><span class="p">}</span>
</span></code></pre></div>
<hr />
<h2 id="post-apimaintenanceclear-temp">POST /api/maintenance/clear-temp<a class="headerlink" href="#post-apimaintenanceclear-temp" title="Permanent link">&para;</a></h2>
<p>Same as clear-cache, for the temp directory. Also refuses with <code>409</code> while any job is downloading — active workers write segment files under temp.</p>
<div class="language-json highlight"><pre><span></span><code><span id="__span-22-1"><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a><span class="p">{</span><span class="w"> </span><span class="nt">&quot;cleared&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;freed_bytes&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">}</span>
</span></code></pre></div>
<hr />
<h2 id="post-apimaintenancerefresh-services">POST /api/maintenance/refresh-services<a class="headerlink" href="#post-apimaintenancerefresh-services" title="Permanent link">&para;</a></h2>
<p>Force-sync (git pull, hard reset to upstream) every service repo configured in <code>directories.services</code>. <code>refreshed</code> is <code>true</code> when all repos synced (or none are configured). Disabled in <code>--remote-only</code> mode.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-23-1"><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span>http://localhost:8786/api/maintenance/refresh-services
</span></code></pre></div>
<div class="language-json highlight"><pre><span></span><code><span id="__span-24-1"><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a><span class="p">{</span>
</span><span id="__span-24-2"><a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a><span class="w"> </span><span class="nt">&quot;refreshed&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
</span><span id="__span-24-3"><a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a><span class="w"> </span><span class="nt">&quot;repos&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
</span><span id="__span-24-4"><a id="__codelineno-24-4" name="__codelineno-24-4" href="#__codelineno-24-4"></a><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;spec&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://github.com/example/services&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;updated&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;changes&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;~ EXAMPLE1 (modified)&quot;</span><span class="p">]</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-24-5"><a id="__codelineno-24-5" name="__codelineno-24-5" href="#__codelineno-24-5"></a><span class="w"> </span><span class="p">]</span>
</span><span id="__span-24-6"><a id="__codelineno-24-6" name="__codelineno-24-6" href="#__codelineno-24-6"></a><span class="p">}</span>
</span></code></pre></div>
<p>An empty <code>changes</code> array means the repo was already up to date. A repo that failed to sync has <code>updated: false</code> (and flips <code>refreshed</code> to <code>false</code>).</p>
<hr />
<h2 id="get-apienvcheck">GET /api/env/check<a class="headerlink" href="#get-apienvcheck" title="Permanent link">&para;</a></h2>
<p>Install status of the binaries <code>unshackle env check</code> inspects (FFmpeg, MKVToolNix, shaka-packager, etc.). <code>version</code> is a best-effort probe and may be <code>null</code> even when installed. Disabled in <code>--remote-only</code> mode.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-25-1"><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>curl<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;X-Secret-Key: </span><span class="nv">$KEY</span><span class="s2">&quot;</span><span class="w"> </span>http://localhost:8786/api/env/check
</span></code></pre></div>
<div class="language-json highlight"><pre><span></span><code><span id="__span-26-1"><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a><span class="p">{</span>
</span><span id="__span-26-2"><a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a><span class="w"> </span><span class="nt">&quot;checks&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
</span><span id="__span-26-3"><a id="__codelineno-26-3" name="__codelineno-26-3" href="#__codelineno-26-3"></a><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;FFmpeg&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;installed&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;version&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;7.1.0&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;required&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-26-4"><a id="__codelineno-26-4" name="__codelineno-26-4" href="#__codelineno-26-4"></a><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mp4decrypt&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;installed&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;version&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;required&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-26-5"><a id="__codelineno-26-5" name="__codelineno-26-5" href="#__codelineno-26-5"></a><span class="w"> </span><span class="p">]</span>
</span><span id="__span-26-6"><a id="__codelineno-26-6" name="__codelineno-26-6" href="#__codelineno-26-6"></a><span class="p">}</span>
</span></code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../authentication/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Authentication">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Authentication
</div>
</div>
</a>
<a href="../endpoint-map/" class="md-footer__link md-footer__link--next" aria-label="Next: Endpoint Map">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Endpoint Map
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["content.code.annotate", "content.code.copy", "content.tooltips", "navigation.footer", "navigation.indexes", "navigation.sections", "navigation.tabs", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
</body>
</html>