curl --request POST \
--url https://api.cloudglue.dev/v1/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"collections": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"query": "<string>",
"criterion_name": "<string>",
"source_image": {
"url": "<string>",
"base64": "<string>"
},
"limit": 2,
"filter": {
"metadata": [
{
"path": "<string>",
"valueText": "<string>",
"valueTextArray": [
"<string>"
]
}
],
"video_info": [
{
"valueText": "<string>",
"valueTextArray": [
"<string>"
]
}
],
"file": [
{
"valueText": "<string>",
"valueTextArray": [
"<string>"
]
}
],
"source_metadata": [
{
"path": "<string>",
"valueText": "<string>",
"valueTextArray": [
"<string>"
]
}
]
},
"threshold": 123,
"group_by_key": "file",
"search_modalities": [],
"label_filters": [
"<string>"
]
}
'import requests
url = "https://api.cloudglue.dev/v1/search"
payload = {
"collections": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"query": "<string>",
"criterion_name": "<string>",
"source_image": {
"url": "<string>",
"base64": "<string>"
},
"limit": 2,
"filter": {
"metadata": [
{
"path": "<string>",
"valueText": "<string>",
"valueTextArray": ["<string>"]
}
],
"video_info": [
{
"valueText": "<string>",
"valueTextArray": ["<string>"]
}
],
"file": [
{
"valueText": "<string>",
"valueTextArray": ["<string>"]
}
],
"source_metadata": [
{
"path": "<string>",
"valueText": "<string>",
"valueTextArray": ["<string>"]
}
]
},
"threshold": 123,
"group_by_key": "file",
"search_modalities": [],
"label_filters": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
collections: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
query: '<string>',
criterion_name: '<string>',
source_image: {url: '<string>', base64: '<string>'},
limit: 2,
filter: {
metadata: [{path: '<string>', valueText: '<string>', valueTextArray: ['<string>']}],
video_info: [{valueText: '<string>', valueTextArray: ['<string>']}],
file: [{valueText: '<string>', valueTextArray: ['<string>']}],
source_metadata: [{path: '<string>', valueText: '<string>', valueTextArray: ['<string>']}]
},
threshold: 123,
group_by_key: 'file',
search_modalities: [],
label_filters: ['<string>']
})
};
fetch('https://api.cloudglue.dev/v1/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cloudglue.dev/v1/search",
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([
'collections' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'query' => '<string>',
'criterion_name' => '<string>',
'source_image' => [
'url' => '<string>',
'base64' => '<string>'
],
'limit' => 2,
'filter' => [
'metadata' => [
[
'path' => '<string>',
'valueText' => '<string>',
'valueTextArray' => [
'<string>'
]
]
],
'video_info' => [
[
'valueText' => '<string>',
'valueTextArray' => [
'<string>'
]
]
],
'file' => [
[
'valueText' => '<string>',
'valueTextArray' => [
'<string>'
]
]
],
'source_metadata' => [
[
'path' => '<string>',
'valueText' => '<string>',
'valueTextArray' => [
'<string>'
]
]
]
],
'threshold' => 123,
'group_by_key' => 'file',
'search_modalities' => [
],
'label_filters' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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 := "https://api.cloudglue.dev/v1/search"
payload := strings.NewReader("{\n \"collections\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"query\": \"<string>\",\n \"criterion_name\": \"<string>\",\n \"source_image\": {\n \"url\": \"<string>\",\n \"base64\": \"<string>\"\n },\n \"limit\": 2,\n \"filter\": {\n \"metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"video_info\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"file\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"source_metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"threshold\": 123,\n \"group_by_key\": \"file\",\n \"search_modalities\": [],\n \"label_filters\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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("https://api.cloudglue.dev/v1/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"collections\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"query\": \"<string>\",\n \"criterion_name\": \"<string>\",\n \"source_image\": {\n \"url\": \"<string>\",\n \"base64\": \"<string>\"\n },\n \"limit\": 2,\n \"filter\": {\n \"metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"video_info\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"file\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"source_metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"threshold\": 123,\n \"group_by_key\": \"file\",\n \"search_modalities\": [],\n \"label_filters\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudglue.dev/v1/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"collections\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"query\": \"<string>\",\n \"criterion_name\": \"<string>\",\n \"source_image\": {\n \"url\": \"<string>\",\n \"base64\": \"<string>\"\n },\n \"limit\": 2,\n \"filter\": {\n \"metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"video_info\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"file\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"source_metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"threshold\": 123,\n \"group_by_key\": \"file\",\n \"search_modalities\": [],\n \"label_filters\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "search",
"scope": "file",
"results": [
{
"type": "file",
"file_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"collection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"score": 123,
"filename": "<string>",
"summary": "<string>",
"generated_title": "<string>",
"thumbnail_url": "<string>",
"tag": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"value": "<string>",
"label": "<string>"
}
}
],
"total": 123,
"limit": 123,
"query": "<string>",
"group_by_key": "file",
"group_count": 123,
"search_modalities": [
"general_content"
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Search Content
Search for videos or video segments in collections to find relevant videos or moments/clips in a video
curl --request POST \
--url https://api.cloudglue.dev/v1/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"collections": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"query": "<string>",
"criterion_name": "<string>",
"source_image": {
"url": "<string>",
"base64": "<string>"
},
"limit": 2,
"filter": {
"metadata": [
{
"path": "<string>",
"valueText": "<string>",
"valueTextArray": [
"<string>"
]
}
],
"video_info": [
{
"valueText": "<string>",
"valueTextArray": [
"<string>"
]
}
],
"file": [
{
"valueText": "<string>",
"valueTextArray": [
"<string>"
]
}
],
"source_metadata": [
{
"path": "<string>",
"valueText": "<string>",
"valueTextArray": [
"<string>"
]
}
]
},
"threshold": 123,
"group_by_key": "file",
"search_modalities": [],
"label_filters": [
"<string>"
]
}
'import requests
url = "https://api.cloudglue.dev/v1/search"
payload = {
"collections": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"query": "<string>",
"criterion_name": "<string>",
"source_image": {
"url": "<string>",
"base64": "<string>"
},
"limit": 2,
"filter": {
"metadata": [
{
"path": "<string>",
"valueText": "<string>",
"valueTextArray": ["<string>"]
}
],
"video_info": [
{
"valueText": "<string>",
"valueTextArray": ["<string>"]
}
],
"file": [
{
"valueText": "<string>",
"valueTextArray": ["<string>"]
}
],
"source_metadata": [
{
"path": "<string>",
"valueText": "<string>",
"valueTextArray": ["<string>"]
}
]
},
"threshold": 123,
"group_by_key": "file",
"search_modalities": [],
"label_filters": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
collections: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
query: '<string>',
criterion_name: '<string>',
source_image: {url: '<string>', base64: '<string>'},
limit: 2,
filter: {
metadata: [{path: '<string>', valueText: '<string>', valueTextArray: ['<string>']}],
video_info: [{valueText: '<string>', valueTextArray: ['<string>']}],
file: [{valueText: '<string>', valueTextArray: ['<string>']}],
source_metadata: [{path: '<string>', valueText: '<string>', valueTextArray: ['<string>']}]
},
threshold: 123,
group_by_key: 'file',
search_modalities: [],
label_filters: ['<string>']
})
};
fetch('https://api.cloudglue.dev/v1/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cloudglue.dev/v1/search",
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([
'collections' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'query' => '<string>',
'criterion_name' => '<string>',
'source_image' => [
'url' => '<string>',
'base64' => '<string>'
],
'limit' => 2,
'filter' => [
'metadata' => [
[
'path' => '<string>',
'valueText' => '<string>',
'valueTextArray' => [
'<string>'
]
]
],
'video_info' => [
[
'valueText' => '<string>',
'valueTextArray' => [
'<string>'
]
]
],
'file' => [
[
'valueText' => '<string>',
'valueTextArray' => [
'<string>'
]
]
],
'source_metadata' => [
[
'path' => '<string>',
'valueText' => '<string>',
'valueTextArray' => [
'<string>'
]
]
]
],
'threshold' => 123,
'group_by_key' => 'file',
'search_modalities' => [
],
'label_filters' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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 := "https://api.cloudglue.dev/v1/search"
payload := strings.NewReader("{\n \"collections\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"query\": \"<string>\",\n \"criterion_name\": \"<string>\",\n \"source_image\": {\n \"url\": \"<string>\",\n \"base64\": \"<string>\"\n },\n \"limit\": 2,\n \"filter\": {\n \"metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"video_info\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"file\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"source_metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"threshold\": 123,\n \"group_by_key\": \"file\",\n \"search_modalities\": [],\n \"label_filters\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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("https://api.cloudglue.dev/v1/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"collections\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"query\": \"<string>\",\n \"criterion_name\": \"<string>\",\n \"source_image\": {\n \"url\": \"<string>\",\n \"base64\": \"<string>\"\n },\n \"limit\": 2,\n \"filter\": {\n \"metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"video_info\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"file\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"source_metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"threshold\": 123,\n \"group_by_key\": \"file\",\n \"search_modalities\": [],\n \"label_filters\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudglue.dev/v1/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"collections\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"query\": \"<string>\",\n \"criterion_name\": \"<string>\",\n \"source_image\": {\n \"url\": \"<string>\",\n \"base64\": \"<string>\"\n },\n \"limit\": 2,\n \"filter\": {\n \"metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"video_info\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"file\": [\n {\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ],\n \"source_metadata\": [\n {\n \"path\": \"<string>\",\n \"valueText\": \"<string>\",\n \"valueTextArray\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"threshold\": 123,\n \"group_by_key\": \"file\",\n \"search_modalities\": [],\n \"label_filters\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "search",
"scope": "file",
"results": [
{
"type": "file",
"file_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"collection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"score": 123,
"filename": "<string>",
"summary": "<string>",
"generated_title": "<string>",
"thumbnail_url": "<string>",
"tag": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"value": "<string>",
"label": "<string>"
}
}
],
"total": 123,
"limit": 123,
"query": "<string>",
"group_by_key": "file",
"group_count": 123,
"search_modalities": [
"general_content"
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Search parameters
Search scope - 'file' searches at file level (requires collections with enable_summary=true), 'segment' searches at segment level, 'face' searches for faces in videos using image matching, 'moment' searches moments produced by find-moments criteria in moments collections
file, segment, face, moment List of collection IDs to search within.
For text search (scope='file' or 'segment'): All collections must be of collection_type 'media-descriptions', 'rich-transcripts', 'metadata', or 'entities'. For file-level search, 'media-descriptions' and 'rich-transcripts' collections must have 'enable_summary: true' in their config. 'metadata' collections only support scope='file'. 'entities' collections are searchable at the scope matching their extraction level: file-level extraction (enable_video_level_entities or enable_metadata_mode) supports scope='file' only, segment-level extraction (enable_segment_level_entities) supports scope='segment' only.
For face search (scope='face'): All collections must be of collection_type 'face-analysis'.
For moment search (scope='moment'): All collections must be of collection_type 'moments'.
1Text search query to find relevant content (required for scope='file', 'segment', or 'moment')
1Narrow moment search to one criterion by name (scope='moment' only)
Source image for face search (required for scope='face')
Show child attributes
Show child attributes
Maximum number of search results to return (applies to total items across groups when grouping)
x >= 1Show child attributes
Show child attributes
Minimum score threshold to filter results. Can be any real number.
Group results by file. Cannot be used with scope="file" or scope="moment" — grouped moment search is not supported and returns a 400. When specified, results are grouped by file_id.
file Sort order for results. Default: "score". When group_by_key is specified, can also use "item_count" to sort by number of items per group.
score, item_count Specifies the type(s) of search to execute. When multiple modalities are specified, a hybrid search is executed that combines results from each modality.
Available modalities:
general_content: baseline for matching the content of the search item (file/segment) based on visual or spoken content similarity to provided short natural language query stringspeech_lexical: performs keyword based search (e.g. query ofpresidentmatchingpresidentorpresidentialstrings) and exact match (e.g. specifically find mentions of"Barack Obama"or"Donald Trump") against speech content present in search itemocr_lexical: performs keyword based search and exact match against screen text content present in search itemtag_semantic: performs basic word semantic similarity search against tag values associated with search items (e.g.query=animalexpected to match tags with value containingdogorcat)tag_lexical: performs keyword based search and exact match against tag values associated with search itemsdoc_lexical: performs keyword based search and exact match against file-level documents (generated summaries, metadata-collection docs, and entity-collection docs). Only applicable when searchscope=file.
Only applicable when search scope=file or scope=segment.
5general_content, speech_lexical, ocr_lexical, tag_semantic, tag_lexical, doc_lexical Filter eligible search items by presence of one or more labels in the provided list (otherwise all tags will be considered in search response). Only supported for tag_semantic and tag_lexical search modalities
Response
Successful search results
ID of the search response
Object type, always 'search'
search The search scope that was used
file, segment, face, moment Array of search results ranked by relevance score
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
Show child attributes
Show child attributes
Total number of results returned. When group_by_key is specified, this represents the total number of items across all groups (not the number of groups).
The limit that was applied to the search
The search query that was executed (for text search) or the source image URL/base64 indicator (for face search)
The key used for grouping results. Only present when group_by_key was specified in the request and results are grouped.
file Number of groups in the results. Only present when group_by_key is specified.
Specifies the type(s) of search to execute. When multiple modalities are specified, a hybrid search is executed that combines results from each modality.
Available modalities:
general_content: baseline for matching the content of the search item (file/segment) based on visual or spoken content similarity to provided short natural language query stringspeech_lexical: performs keyword based search (e.g. query ofpresidentmatchingpresidentorpresidentialstrings) and exact match (e.g. specifically find mentions of"Barack Obama"or"Donald Trump") against speech content present in search itemocr_lexical: performs keyword based search and exact match against screen text content present in search itemtag_semantic: performs basic word semantic similarity search against tag values associated with search items (e.g.query=animalexpected to match tags with value containingdogorcat)tag_lexical: performs keyword based search and exact match against tag values associated with search itemsdoc_lexical: performs keyword based search and exact match against file-level documents (generated summaries, metadata-collection docs, and entity-collection docs). Only applicable when searchscope=file.
Only applicable when search scope=file or scope=segment.
5general_content, speech_lexical, ocr_lexical, tag_semantic, tag_lexical, doc_lexical