curl --request POST \
--url http://localhost:6699/api/v1/search/text \
--header 'Content-Type: application/json' \
--header 'X-License-Key: <api-key>' \
--data '
{
"query": "man pointing a finger",
"cache_dir": "<string>",
"media_paths": [
"<string>"
],
"max_results": 50,
"text_weight": 1,
"exclude": [
"<string>"
],
"search_all": false,
"people_filter": [
{
"cluster_job_name": "<string>",
"person_name": "<string>",
"cluster_id": "<string>"
}
],
"people_filter_mode": "and",
"metadata_filter_request": {
"scope": {
"mode": "paths",
"media_type": "any",
"media_paths": [
"<string>"
],
"hash_strs": [
"<string>"
],
"expected_count": 123
},
"filters": []
},
"segments_to_frame_indices": {}
}
'import requests
url = "http://localhost:6699/api/v1/search/text"
payload = {
"query": "man pointing a finger",
"cache_dir": "<string>",
"media_paths": ["<string>"],
"max_results": 50,
"text_weight": 1,
"exclude": ["<string>"],
"search_all": False,
"people_filter": [
{
"cluster_job_name": "<string>",
"person_name": "<string>",
"cluster_id": "<string>"
}
],
"people_filter_mode": "and",
"metadata_filter_request": {
"scope": {
"mode": "paths",
"media_type": "any",
"media_paths": ["<string>"],
"hash_strs": ["<string>"],
"expected_count": 123
},
"filters": []
},
"segments_to_frame_indices": {}
}
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({
query: 'man pointing a finger',
cache_dir: '<string>',
media_paths: ['<string>'],
max_results: 50,
text_weight: 1,
exclude: ['<string>'],
search_all: false,
people_filter: [
{cluster_job_name: '<string>', person_name: '<string>', cluster_id: '<string>'}
],
people_filter_mode: 'and',
metadata_filter_request: {
scope: {
mode: 'paths',
media_type: 'any',
media_paths: ['<string>'],
hash_strs: ['<string>'],
expected_count: 123
},
filters: []
},
segments_to_frame_indices: {}
})
};
fetch('http://localhost:6699/api/v1/search/text', 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/search/text",
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([
'query' => 'man pointing a finger',
'cache_dir' => '<string>',
'media_paths' => [
'<string>'
],
'max_results' => 50,
'text_weight' => 1,
'exclude' => [
'<string>'
],
'search_all' => false,
'people_filter' => [
[
'cluster_job_name' => '<string>',
'person_name' => '<string>',
'cluster_id' => '<string>'
]
],
'people_filter_mode' => 'and',
'metadata_filter_request' => [
'scope' => [
'mode' => 'paths',
'media_type' => 'any',
'media_paths' => [
'<string>'
],
'hash_strs' => [
'<string>'
],
'expected_count' => 123
],
'filters' => [
]
],
'segments_to_frame_indices' => [
]
]),
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/search/text"
payload := strings.NewReader("{\n \"query\": \"man pointing a finger\",\n \"cache_dir\": \"<string>\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"max_results\": 50,\n \"text_weight\": 1,\n \"exclude\": [\n \"<string>\"\n ],\n \"search_all\": false,\n \"people_filter\": [\n {\n \"cluster_job_name\": \"<string>\",\n \"person_name\": \"<string>\",\n \"cluster_id\": \"<string>\"\n }\n ],\n \"people_filter_mode\": \"and\",\n \"metadata_filter_request\": {\n \"scope\": {\n \"mode\": \"paths\",\n \"media_type\": \"any\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"hash_strs\": [\n \"<string>\"\n ],\n \"expected_count\": 123\n },\n \"filters\": []\n },\n \"segments_to_frame_indices\": {}\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/search/text")
.header("X-License-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"man pointing a finger\",\n \"cache_dir\": \"<string>\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"max_results\": 50,\n \"text_weight\": 1,\n \"exclude\": [\n \"<string>\"\n ],\n \"search_all\": false,\n \"people_filter\": [\n {\n \"cluster_job_name\": \"<string>\",\n \"person_name\": \"<string>\",\n \"cluster_id\": \"<string>\"\n }\n ],\n \"people_filter_mode\": \"and\",\n \"metadata_filter_request\": {\n \"scope\": {\n \"mode\": \"paths\",\n \"media_type\": \"any\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"hash_strs\": [\n \"<string>\"\n ],\n \"expected_count\": 123\n },\n \"filters\": []\n },\n \"segments_to_frame_indices\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:6699/api/v1/search/text")
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 \"query\": \"man pointing a finger\",\n \"cache_dir\": \"<string>\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"max_results\": 50,\n \"text_weight\": 1,\n \"exclude\": [\n \"<string>\"\n ],\n \"search_all\": false,\n \"people_filter\": [\n {\n \"cluster_job_name\": \"<string>\",\n \"person_name\": \"<string>\",\n \"cluster_id\": \"<string>\"\n }\n ],\n \"people_filter_mode\": \"and\",\n \"metadata_filter_request\": {\n \"scope\": {\n \"mode\": \"paths\",\n \"media_type\": \"any\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"hash_strs\": [\n \"<string>\"\n ],\n \"expected_count\": 123\n },\n \"filters\": []\n },\n \"segments_to_frame_indices\": {}\n}"
response = http.request(request)
puts response.read_body{
"matches": [
{
"frame_idx": "<string>",
"timestamp": "<string>",
"image": "aSDinaTvuI8gbWludGxpZnk=",
"scene_start_timestamp": "<string>",
"scene_end_timestamp": "<string>",
"original_index": 123,
"hash_str": "<string>",
"video_path": "<string>"
}
]
}Search by text query
Semantic visual search — finds moments in analyzed media that match a natural-language description. Analysis data must be loaded into memory first. Results are ordered best-first, but Jumper does not return similarity scores.
curl --request POST \
--url http://localhost:6699/api/v1/search/text \
--header 'Content-Type: application/json' \
--header 'X-License-Key: <api-key>' \
--data '
{
"query": "man pointing a finger",
"cache_dir": "<string>",
"media_paths": [
"<string>"
],
"max_results": 50,
"text_weight": 1,
"exclude": [
"<string>"
],
"search_all": false,
"people_filter": [
{
"cluster_job_name": "<string>",
"person_name": "<string>",
"cluster_id": "<string>"
}
],
"people_filter_mode": "and",
"metadata_filter_request": {
"scope": {
"mode": "paths",
"media_type": "any",
"media_paths": [
"<string>"
],
"hash_strs": [
"<string>"
],
"expected_count": 123
},
"filters": []
},
"segments_to_frame_indices": {}
}
'import requests
url = "http://localhost:6699/api/v1/search/text"
payload = {
"query": "man pointing a finger",
"cache_dir": "<string>",
"media_paths": ["<string>"],
"max_results": 50,
"text_weight": 1,
"exclude": ["<string>"],
"search_all": False,
"people_filter": [
{
"cluster_job_name": "<string>",
"person_name": "<string>",
"cluster_id": "<string>"
}
],
"people_filter_mode": "and",
"metadata_filter_request": {
"scope": {
"mode": "paths",
"media_type": "any",
"media_paths": ["<string>"],
"hash_strs": ["<string>"],
"expected_count": 123
},
"filters": []
},
"segments_to_frame_indices": {}
}
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({
query: 'man pointing a finger',
cache_dir: '<string>',
media_paths: ['<string>'],
max_results: 50,
text_weight: 1,
exclude: ['<string>'],
search_all: false,
people_filter: [
{cluster_job_name: '<string>', person_name: '<string>', cluster_id: '<string>'}
],
people_filter_mode: 'and',
metadata_filter_request: {
scope: {
mode: 'paths',
media_type: 'any',
media_paths: ['<string>'],
hash_strs: ['<string>'],
expected_count: 123
},
filters: []
},
segments_to_frame_indices: {}
})
};
fetch('http://localhost:6699/api/v1/search/text', 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/search/text",
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([
'query' => 'man pointing a finger',
'cache_dir' => '<string>',
'media_paths' => [
'<string>'
],
'max_results' => 50,
'text_weight' => 1,
'exclude' => [
'<string>'
],
'search_all' => false,
'people_filter' => [
[
'cluster_job_name' => '<string>',
'person_name' => '<string>',
'cluster_id' => '<string>'
]
],
'people_filter_mode' => 'and',
'metadata_filter_request' => [
'scope' => [
'mode' => 'paths',
'media_type' => 'any',
'media_paths' => [
'<string>'
],
'hash_strs' => [
'<string>'
],
'expected_count' => 123
],
'filters' => [
]
],
'segments_to_frame_indices' => [
]
]),
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/search/text"
payload := strings.NewReader("{\n \"query\": \"man pointing a finger\",\n \"cache_dir\": \"<string>\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"max_results\": 50,\n \"text_weight\": 1,\n \"exclude\": [\n \"<string>\"\n ],\n \"search_all\": false,\n \"people_filter\": [\n {\n \"cluster_job_name\": \"<string>\",\n \"person_name\": \"<string>\",\n \"cluster_id\": \"<string>\"\n }\n ],\n \"people_filter_mode\": \"and\",\n \"metadata_filter_request\": {\n \"scope\": {\n \"mode\": \"paths\",\n \"media_type\": \"any\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"hash_strs\": [\n \"<string>\"\n ],\n \"expected_count\": 123\n },\n \"filters\": []\n },\n \"segments_to_frame_indices\": {}\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/search/text")
.header("X-License-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"man pointing a finger\",\n \"cache_dir\": \"<string>\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"max_results\": 50,\n \"text_weight\": 1,\n \"exclude\": [\n \"<string>\"\n ],\n \"search_all\": false,\n \"people_filter\": [\n {\n \"cluster_job_name\": \"<string>\",\n \"person_name\": \"<string>\",\n \"cluster_id\": \"<string>\"\n }\n ],\n \"people_filter_mode\": \"and\",\n \"metadata_filter_request\": {\n \"scope\": {\n \"mode\": \"paths\",\n \"media_type\": \"any\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"hash_strs\": [\n \"<string>\"\n ],\n \"expected_count\": 123\n },\n \"filters\": []\n },\n \"segments_to_frame_indices\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:6699/api/v1/search/text")
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 \"query\": \"man pointing a finger\",\n \"cache_dir\": \"<string>\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"max_results\": 50,\n \"text_weight\": 1,\n \"exclude\": [\n \"<string>\"\n ],\n \"search_all\": false,\n \"people_filter\": [\n {\n \"cluster_job_name\": \"<string>\",\n \"person_name\": \"<string>\",\n \"cluster_id\": \"<string>\"\n }\n ],\n \"people_filter_mode\": \"and\",\n \"metadata_filter_request\": {\n \"scope\": {\n \"mode\": \"paths\",\n \"media_type\": \"any\",\n \"media_paths\": [\n \"<string>\"\n ],\n \"hash_strs\": [\n \"<string>\"\n ],\n \"expected_count\": 123\n },\n \"filters\": []\n },\n \"segments_to_frame_indices\": {}\n}"
response = http.request(request)
puts response.read_body{
"matches": [
{
"frame_idx": "<string>",
"timestamp": "<string>",
"image": "aSDinaTvuI8gbWludGxpZnk=",
"scene_start_timestamp": "<string>",
"scene_end_timestamp": "<string>",
"original_index": 123,
"hash_str": "<string>",
"video_path": "<string>"
}
]
}Authorizations
Jumper Pro license key passed via header
Body
Natural-language search query
"man pointing a finger"
Restrict search to these files (ignored if search_all is true)
Weight of text similarity (advanced)
Softly push down results that match these visual concepts.
Search across all loaded media instead of just media_paths
Only return matches containing these people. Each item needs cluster_job_name plus either person_name or cluster_id.
Show child attributes
Show child attributes
Match mode for multiple people. "and" requires every selected person in the same frame; "or" matches frames containing any selected person.
or, and Metadata filters to apply to a search. If scope is omitted, Jumper derives it
from the endpoint's search_all and media_paths values.
Show child attributes
Show child attributes
Media-path or media-hash keys mapped to half-open [start_frame, end_frame)
ranges, or lists of ranges, on Jumper's 1 FPS analysis grid. Keys must be
inside the selected media scope.
Show child attributes
Show child attributes
Response
Search results ordered by relevance
Show child attributes
Show child attributes
Was this page helpful?

