curl --request POST \
--url https://api.cloudglue.dev/v1/collections/{collection_id}/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"file_id": "<string>",
"segmentation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"metadata": {}
}
'import requests
url = "https://api.cloudglue.dev/v1/collections/{collection_id}/videos"
payload = {
"file_id": "<string>",
"segmentation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"metadata": {}
}
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({
file_id: '<string>',
segmentation_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
metadata: {}
})
};
fetch('https://api.cloudglue.dev/v1/collections/{collection_id}/videos', 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/collections/{collection_id}/videos",
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([
'file_id' => '<string>',
'segmentation_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'metadata' => [
]
]),
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/collections/{collection_id}/videos"
payload := strings.NewReader("{\n \"file_id\": \"<string>\",\n \"segmentation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"metadata\": {}\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/collections/{collection_id}/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"file_id\": \"<string>\",\n \"segmentation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudglue.dev/v1/collections/{collection_id}/videos")
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 \"file_id\": \"<string>\",\n \"segmentation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"collection_id": "<string>",
"file_id": "<string>",
"object": "collection_file",
"added_at": 123,
"file": {
"id": "<string>",
"uri": "<string>",
"bytes": 123,
"created_at": 123,
"filename": "<string>",
"metadata": {},
"media_info": {
"duration_seconds": 123,
"width": 123,
"height": 123,
"sample_rate": 123,
"channels": 123,
"bitrate": 123,
"format": "<string>",
"has_audio": true
},
"video_info": {
"duration_seconds": 123,
"height": 123,
"width": 123,
"format": "<string>",
"has_audio": true
},
"thumbnail_url": "<string>",
"source_metadata": {
"source_type": "grain",
"grain_recording_id": "<string>",
"title": "<string>",
"start_datetime": "2023-11-07T05:31:56Z",
"end_datetime": "2023-11-07T05:31:56Z",
"duration_ms": 123,
"grain_url": "<string>",
"thumbnail_url": "<string>",
"tags": [
"<string>"
],
"teams": [
{
"id": "<string>",
"name": "<string>"
}
],
"meeting_type": {
"id": "<string>",
"name": "<string>",
"scope": "<string>"
},
"participants": [
{
"id": "<string>",
"name": "<string>",
"email": "<string>",
"confirmed_attendee": true,
"hs_contact_id": "<string>"
}
],
"highlights": [
{}
],
"ai_summary": {
"text": "<string>"
},
"ai_action_items": [
{
"timestamp_ms": 123,
"text": "<string>",
"assignee": {
"id": "<string>",
"name": "<string>",
"user_id": "<string>"
}
}
],
"ai_template_sections": [
{}
],
"calendar_event": {
"ical_uid": "<string>"
},
"hubspot": {
"hubspot_company_ids": [
"<string>"
],
"hubspot_deal_ids": [
"<string>"
]
}
}
},
"segmentation": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"file_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"segmentation_config": {
"uniform_config": {
"window_seconds": 60.5,
"hop_seconds": 60.5
},
"shot_detector_config": {
"threshold": 123,
"min_seconds": 300.3,
"max_seconds": 300.5,
"fill_gaps": true
},
"manual_config": {
"segments": [
{
"start_time": 123,
"end_time": 123
}
]
},
"narrative_config": {
"prompt": "<string>",
"number_of_chapters": 2,
"min_chapters": 2,
"max_chapters": 2
},
"keyframe_config": {
"frames_per_segment": 4,
"max_width": 2232
},
"start_time_seconds": 1,
"end_time_seconds": 1
}
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Add Video to Collection
DEPRECATED: Use POST /collections/{collection_id}/media instead.
Add a video to a collection. This endpoint is deprecated - use the /media endpoint which supports both video and audio files.
curl --request POST \
--url https://api.cloudglue.dev/v1/collections/{collection_id}/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"file_id": "<string>",
"segmentation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"metadata": {}
}
'import requests
url = "https://api.cloudglue.dev/v1/collections/{collection_id}/videos"
payload = {
"file_id": "<string>",
"segmentation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"metadata": {}
}
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({
file_id: '<string>',
segmentation_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
metadata: {}
})
};
fetch('https://api.cloudglue.dev/v1/collections/{collection_id}/videos', 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/collections/{collection_id}/videos",
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([
'file_id' => '<string>',
'segmentation_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'metadata' => [
]
]),
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/collections/{collection_id}/videos"
payload := strings.NewReader("{\n \"file_id\": \"<string>\",\n \"segmentation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"metadata\": {}\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/collections/{collection_id}/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"file_id\": \"<string>\",\n \"segmentation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudglue.dev/v1/collections/{collection_id}/videos")
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 \"file_id\": \"<string>\",\n \"segmentation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"collection_id": "<string>",
"file_id": "<string>",
"object": "collection_file",
"added_at": 123,
"file": {
"id": "<string>",
"uri": "<string>",
"bytes": 123,
"created_at": 123,
"filename": "<string>",
"metadata": {},
"media_info": {
"duration_seconds": 123,
"width": 123,
"height": 123,
"sample_rate": 123,
"channels": 123,
"bitrate": 123,
"format": "<string>",
"has_audio": true
},
"video_info": {
"duration_seconds": 123,
"height": 123,
"width": 123,
"format": "<string>",
"has_audio": true
},
"thumbnail_url": "<string>",
"source_metadata": {
"source_type": "grain",
"grain_recording_id": "<string>",
"title": "<string>",
"start_datetime": "2023-11-07T05:31:56Z",
"end_datetime": "2023-11-07T05:31:56Z",
"duration_ms": 123,
"grain_url": "<string>",
"thumbnail_url": "<string>",
"tags": [
"<string>"
],
"teams": [
{
"id": "<string>",
"name": "<string>"
}
],
"meeting_type": {
"id": "<string>",
"name": "<string>",
"scope": "<string>"
},
"participants": [
{
"id": "<string>",
"name": "<string>",
"email": "<string>",
"confirmed_attendee": true,
"hs_contact_id": "<string>"
}
],
"highlights": [
{}
],
"ai_summary": {
"text": "<string>"
},
"ai_action_items": [
{
"timestamp_ms": 123,
"text": "<string>",
"assignee": {
"id": "<string>",
"name": "<string>",
"user_id": "<string>"
}
}
],
"ai_template_sections": [
{}
],
"calendar_event": {
"ical_uid": "<string>"
},
"hubspot": {
"hubspot_company_ids": [
"<string>"
],
"hubspot_deal_ids": [
"<string>"
]
}
}
},
"segmentation": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"file_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"segmentation_config": {
"uniform_config": {
"window_seconds": 60.5,
"hop_seconds": 60.5
},
"shot_detector_config": {
"threshold": 123,
"min_seconds": 300.3,
"max_seconds": 300.5,
"fill_gaps": true
},
"manual_config": {
"segments": [
{
"start_time": 123,
"end_time": 123
}
]
},
"narrative_config": {
"prompt": "<string>",
"number_of_chapters": 2,
"min_chapters": 2,
"max_chapters": 2
},
"keyframe_config": {
"frames_per_segment": 4,
"max_width": 2232
},
"start_time_seconds": 1,
"end_time_seconds": 1
}
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The ID of the collection to add the video file to
Body
File association parameters
- Option 1
- Option 2
The ID of the file to add to the collection
Segmentation job id to use. If not provided will use default to uniform 20s segmentation. Cannot be provided together with segmentation_config.
Configuration for video segmentation. Cannot be provided together with segmentation_id.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
User metadata stored on the file (merged into the file's metadata and included in the indexed metadata doc). Only supported when adding to metadata collections; other collection types take metadata via the Files endpoints.
Response
Successful file addition
ID of the collection
ID of the file
Object type, always 'collection_file'
collection_file Unix timestamp in milliseconds when the file was added to the collection
Overall processing status of the file in this collection
pending, processing, completed, failed, not_applicable The file object
Show child attributes
Show child attributes
Segmentation information for this file in the collection. Only present when the file has been segmented.
Show child attributes
Show child attributes