curl --request POST \
--url http://localhost:6699/api/v1/watch-folders \
--header 'Content-Type: application/json' \
--header 'X-License-Key: <api-key>' \
--data '
{
"folder_path": "<string>",
"cache_dir": "<string>",
"enabled": true,
"enable_visual_analysis": true,
"enable_audio_analysis": false,
"enable_face_analysis": false,
"audio_language": "english",
"audio_channels": [],
"qwen_model_variant": "auto",
"detect_speakers": true,
"cluster_job_name": "<string>",
"face_eps": 0.48,
"face_min_samples": 5,
"excluded_extensions": [
"<string>"
],
"excluded_filename_globs": [
"<string>"
],
"excluded_folder_globs": [
"<string>"
],
"metadata_filter_request": {
"filters": []
}
}
'import requests
url = "http://localhost:6699/api/v1/watch-folders"
payload = {
"folder_path": "<string>",
"cache_dir": "<string>",
"enabled": True,
"enable_visual_analysis": True,
"enable_audio_analysis": False,
"enable_face_analysis": False,
"audio_language": "english",
"audio_channels": [],
"qwen_model_variant": "auto",
"detect_speakers": True,
"cluster_job_name": "<string>",
"face_eps": 0.48,
"face_min_samples": 5,
"excluded_extensions": ["<string>"],
"excluded_filename_globs": ["<string>"],
"excluded_folder_globs": ["<string>"],
"metadata_filter_request": { "filters": [] }
}
headers = {
"X-License-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-License-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
folder_path: '<string>',
cache_dir: '<string>',
enabled: true,
enable_visual_analysis: true,
enable_audio_analysis: false,
enable_face_analysis: false,
audio_language: 'english',
audio_channels: [],
qwen_model_variant: 'auto',
detect_speakers: true,
cluster_job_name: '<string>',
face_eps: 0.48,
face_min_samples: 5,
excluded_extensions: ['<string>'],
excluded_filename_globs: ['<string>'],
excluded_folder_globs: ['<string>'],
metadata_filter_request: {filters: []}
})
};
fetch('http://localhost:6699/api/v1/watch-folders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "6699",
CURLOPT_URL => "http://localhost:6699/api/v1/watch-folders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'folder_path' => '<string>',
'cache_dir' => '<string>',
'enabled' => true,
'enable_visual_analysis' => true,
'enable_audio_analysis' => false,
'enable_face_analysis' => false,
'audio_language' => 'english',
'audio_channels' => [
],
'qwen_model_variant' => 'auto',
'detect_speakers' => true,
'cluster_job_name' => '<string>',
'face_eps' => 0.48,
'face_min_samples' => 5,
'excluded_extensions' => [
'<string>'
],
'excluded_filename_globs' => [
'<string>'
],
'excluded_folder_globs' => [
'<string>'
],
'metadata_filter_request' => [
'filters' => [
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-License-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:6699/api/v1/watch-folders"
payload := strings.NewReader("{\n \"folder_path\": \"<string>\",\n \"cache_dir\": \"<string>\",\n \"enabled\": true,\n \"enable_visual_analysis\": true,\n \"enable_audio_analysis\": false,\n \"enable_face_analysis\": false,\n \"audio_language\": \"english\",\n \"audio_channels\": [],\n \"qwen_model_variant\": \"auto\",\n \"detect_speakers\": true,\n \"cluster_job_name\": \"<string>\",\n \"face_eps\": 0.48,\n \"face_min_samples\": 5,\n \"excluded_extensions\": [\n \"<string>\"\n ],\n \"excluded_filename_globs\": [\n \"<string>\"\n ],\n \"excluded_folder_globs\": [\n \"<string>\"\n ],\n \"metadata_filter_request\": {\n \"filters\": []\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-License-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:6699/api/v1/watch-folders")
.header("X-License-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"folder_path\": \"<string>\",\n \"cache_dir\": \"<string>\",\n \"enabled\": true,\n \"enable_visual_analysis\": true,\n \"enable_audio_analysis\": false,\n \"enable_face_analysis\": false,\n \"audio_language\": \"english\",\n \"audio_channels\": [],\n \"qwen_model_variant\": \"auto\",\n \"detect_speakers\": true,\n \"cluster_job_name\": \"<string>\",\n \"face_eps\": 0.48,\n \"face_min_samples\": 5,\n \"excluded_extensions\": [\n \"<string>\"\n ],\n \"excluded_filename_globs\": [\n \"<string>\"\n ],\n \"excluded_folder_globs\": [\n \"<string>\"\n ],\n \"metadata_filter_request\": {\n \"filters\": []\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:6699/api/v1/watch-folders")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["X-License-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"folder_path\": \"<string>\",\n \"cache_dir\": \"<string>\",\n \"enabled\": true,\n \"enable_visual_analysis\": true,\n \"enable_audio_analysis\": false,\n \"enable_face_analysis\": false,\n \"audio_language\": \"english\",\n \"audio_channels\": [],\n \"qwen_model_variant\": \"auto\",\n \"detect_speakers\": true,\n \"cluster_job_name\": \"<string>\",\n \"face_eps\": 0.48,\n \"face_min_samples\": 5,\n \"excluded_extensions\": [\n \"<string>\"\n ],\n \"excluded_filename_globs\": [\n \"<string>\"\n ],\n \"excluded_folder_globs\": [\n \"<string>\"\n ],\n \"metadata_filter_request\": {\n \"filters\": []\n }\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"watch_folder": {
"id": "<string>",
"folder_path": "<string>",
"enabled": true,
"enable_visual_analysis": true,
"enable_audio_analysis": true,
"enable_face_analysis": true,
"audio_language": "<string>",
"audio_channels": [
2
],
"qwen_model_variant": "faster",
"detect_speakers": true,
"speaker_count": 1,
"cluster_job_name": "<string>",
"face_eps": 123,
"face_min_samples": 123,
"cache_dir": "<string>",
"excluded_extensions": [
"<string>"
],
"excluded_filename_globs": [
"<string>"
],
"excluded_folder_globs": [
"<string>"
],
"metadata_filter_request": {
"filters": []
},
"created_at": 123,
"last_poll_time": 123,
"files_analyzed_count": 123
}
}Create a watch folder
Adds a new folder to be automatically analyzed when new media files appear. Creating an enabled folder saves its configuration; start the watch-folder service separately if it is stopped. The folder and any explicit cache_dir must exist on disk. Exclusion glob patterns are matched against the filename only, not the full path.
curl --request POST \
--url http://localhost:6699/api/v1/watch-folders \
--header 'Content-Type: application/json' \
--header 'X-License-Key: <api-key>' \
--data '
{
"folder_path": "<string>",
"cache_dir": "<string>",
"enabled": true,
"enable_visual_analysis": true,
"enable_audio_analysis": false,
"enable_face_analysis": false,
"audio_language": "english",
"audio_channels": [],
"qwen_model_variant": "auto",
"detect_speakers": true,
"cluster_job_name": "<string>",
"face_eps": 0.48,
"face_min_samples": 5,
"excluded_extensions": [
"<string>"
],
"excluded_filename_globs": [
"<string>"
],
"excluded_folder_globs": [
"<string>"
],
"metadata_filter_request": {
"filters": []
}
}
'import requests
url = "http://localhost:6699/api/v1/watch-folders"
payload = {
"folder_path": "<string>",
"cache_dir": "<string>",
"enabled": True,
"enable_visual_analysis": True,
"enable_audio_analysis": False,
"enable_face_analysis": False,
"audio_language": "english",
"audio_channels": [],
"qwen_model_variant": "auto",
"detect_speakers": True,
"cluster_job_name": "<string>",
"face_eps": 0.48,
"face_min_samples": 5,
"excluded_extensions": ["<string>"],
"excluded_filename_globs": ["<string>"],
"excluded_folder_globs": ["<string>"],
"metadata_filter_request": { "filters": [] }
}
headers = {
"X-License-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-License-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
folder_path: '<string>',
cache_dir: '<string>',
enabled: true,
enable_visual_analysis: true,
enable_audio_analysis: false,
enable_face_analysis: false,
audio_language: 'english',
audio_channels: [],
qwen_model_variant: 'auto',
detect_speakers: true,
cluster_job_name: '<string>',
face_eps: 0.48,
face_min_samples: 5,
excluded_extensions: ['<string>'],
excluded_filename_globs: ['<string>'],
excluded_folder_globs: ['<string>'],
metadata_filter_request: {filters: []}
})
};
fetch('http://localhost:6699/api/v1/watch-folders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "6699",
CURLOPT_URL => "http://localhost:6699/api/v1/watch-folders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'folder_path' => '<string>',
'cache_dir' => '<string>',
'enabled' => true,
'enable_visual_analysis' => true,
'enable_audio_analysis' => false,
'enable_face_analysis' => false,
'audio_language' => 'english',
'audio_channels' => [
],
'qwen_model_variant' => 'auto',
'detect_speakers' => true,
'cluster_job_name' => '<string>',
'face_eps' => 0.48,
'face_min_samples' => 5,
'excluded_extensions' => [
'<string>'
],
'excluded_filename_globs' => [
'<string>'
],
'excluded_folder_globs' => [
'<string>'
],
'metadata_filter_request' => [
'filters' => [
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-License-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:6699/api/v1/watch-folders"
payload := strings.NewReader("{\n \"folder_path\": \"<string>\",\n \"cache_dir\": \"<string>\",\n \"enabled\": true,\n \"enable_visual_analysis\": true,\n \"enable_audio_analysis\": false,\n \"enable_face_analysis\": false,\n \"audio_language\": \"english\",\n \"audio_channels\": [],\n \"qwen_model_variant\": \"auto\",\n \"detect_speakers\": true,\n \"cluster_job_name\": \"<string>\",\n \"face_eps\": 0.48,\n \"face_min_samples\": 5,\n \"excluded_extensions\": [\n \"<string>\"\n ],\n \"excluded_filename_globs\": [\n \"<string>\"\n ],\n \"excluded_folder_globs\": [\n \"<string>\"\n ],\n \"metadata_filter_request\": {\n \"filters\": []\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-License-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:6699/api/v1/watch-folders")
.header("X-License-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"folder_path\": \"<string>\",\n \"cache_dir\": \"<string>\",\n \"enabled\": true,\n \"enable_visual_analysis\": true,\n \"enable_audio_analysis\": false,\n \"enable_face_analysis\": false,\n \"audio_language\": \"english\",\n \"audio_channels\": [],\n \"qwen_model_variant\": \"auto\",\n \"detect_speakers\": true,\n \"cluster_job_name\": \"<string>\",\n \"face_eps\": 0.48,\n \"face_min_samples\": 5,\n \"excluded_extensions\": [\n \"<string>\"\n ],\n \"excluded_filename_globs\": [\n \"<string>\"\n ],\n \"excluded_folder_globs\": [\n \"<string>\"\n ],\n \"metadata_filter_request\": {\n \"filters\": []\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:6699/api/v1/watch-folders")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["X-License-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"folder_path\": \"<string>\",\n \"cache_dir\": \"<string>\",\n \"enabled\": true,\n \"enable_visual_analysis\": true,\n \"enable_audio_analysis\": false,\n \"enable_face_analysis\": false,\n \"audio_language\": \"english\",\n \"audio_channels\": [],\n \"qwen_model_variant\": \"auto\",\n \"detect_speakers\": true,\n \"cluster_job_name\": \"<string>\",\n \"face_eps\": 0.48,\n \"face_min_samples\": 5,\n \"excluded_extensions\": [\n \"<string>\"\n ],\n \"excluded_filename_globs\": [\n \"<string>\"\n ],\n \"excluded_folder_globs\": [\n \"<string>\"\n ],\n \"metadata_filter_request\": {\n \"filters\": []\n }\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"watch_folder": {
"id": "<string>",
"folder_path": "<string>",
"enabled": true,
"enable_visual_analysis": true,
"enable_audio_analysis": true,
"enable_face_analysis": true,
"audio_language": "<string>",
"audio_channels": [
2
],
"qwen_model_variant": "faster",
"detect_speakers": true,
"speaker_count": 1,
"cluster_job_name": "<string>",
"face_eps": 123,
"face_min_samples": 123,
"cache_dir": "<string>",
"excluded_extensions": [
"<string>"
],
"excluded_filename_globs": [
"<string>"
],
"excluded_folder_globs": [
"<string>"
],
"metadata_filter_request": {
"filters": []
},
"created_at": 123,
"last_poll_time": 123,
"files_analyzed_count": 123
}
}Authorizations
Raw Jumper Pro license key on every authenticated request, without a Bearer prefix
Body
Absolute path to the folder to watch
Existing Analysis folder. Omitted or null uses the app's default Analysis folder.
Include this folder when the watch-folder service is running.
1-based channels to transcribe. Empty uses the default downmix to mono.
x >= 1auto, faster, more_accurate Expected speaker count. Auto is stored as null.
1, 2, 3, 4 Direct folder name for the face collection; required when face analysis is enabled.
File extensions to skip, normalized to lowercase with a leading dot
Case-insensitive glob patterns matched against the filename only
Case-insensitive folder glob patterns under the watched folder. Patterns with slashes match relative folder paths segment by segment.
Metadata filters applied to candidate files before analysis. Scope is the watched folder's candidate files; a supplied scope field is ignored. An empty filters array or null clears the filters.
Show child attributes
Show child attributes
Was this page helpful?

