Start a presigned video upload
curl --request POST \
--url http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url \
--header 'Content-Type: application/json' \
--data '
{
"filename": "drone-show.mp4",
"size_bytes": 123,
"content_type": "<string>"
}
'import requests
url = "http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url"
payload = {
"filename": "drone-show.mp4",
"size_bytes": 123,
"content_type": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({filename: 'drone-show.mp4', size_bytes: 123, content_type: '<string>'})
};
fetch('http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url', 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 => "8080",
CURLOPT_URL => "http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url",
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([
'filename' => 'drone-show.mp4',
'size_bytes' => 123,
'content_type' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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 := "http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url"
payload := strings.NewReader("{\n \"filename\": \"drone-show.mp4\",\n \"size_bytes\": 123,\n \"content_type\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url")
.header("Content-Type", "application/json")
.body("{\n \"filename\": \"drone-show.mp4\",\n \"size_bytes\": 123,\n \"content_type\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"filename\": \"drone-show.mp4\",\n \"size_bytes\": 123,\n \"content_type\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"file_id": "<string>",
"upload_id": "<string>",
"key": "<string>",
"part_size_bytes": 123,
"part_urls": [
"<string>"
],
"expires_in_seconds": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"type": "<string>",
"detail": "<string>",
"endpoint": "<string>",
"tier": "<string>",
"limit": 123,
"remaining": 123,
"window_seconds": 123,
"retry_after": 123,
"title": "Too Many Requests",
"status": 429,
"error_code": "rate_limit_exceeded",
"instance": "<string>"
}Ingestion
Start a presigned video upload
Start a multipart video upload (.mp4/.mov, ≤150MB). The client PUTs the
file to the returned presigned part URLs in part_size_bytes chunks — the
bytes go straight to S3, never through this API — then calls
/ingest/video/complete with the collected ETags. Nothing is ingested
until complete verifies the object and publishes the event.
POST
/
v1
/
custom-connectors
/
{connector_id}
/
ingest
/
video
/
upload-url
Start a presigned video upload
curl --request POST \
--url http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url \
--header 'Content-Type: application/json' \
--data '
{
"filename": "drone-show.mp4",
"size_bytes": 123,
"content_type": "<string>"
}
'import requests
url = "http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url"
payload = {
"filename": "drone-show.mp4",
"size_bytes": 123,
"content_type": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({filename: 'drone-show.mp4', size_bytes: 123, content_type: '<string>'})
};
fetch('http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url', 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 => "8080",
CURLOPT_URL => "http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url",
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([
'filename' => 'drone-show.mp4',
'size_bytes' => 123,
'content_type' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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 := "http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url"
payload := strings.NewReader("{\n \"filename\": \"drone-show.mp4\",\n \"size_bytes\": 123,\n \"content_type\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url")
.header("Content-Type", "application/json")
.body("{\n \"filename\": \"drone-show.mp4\",\n \"size_bytes\": 123,\n \"content_type\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/v1/custom-connectors/{connector_id}/ingest/video/upload-url")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"filename\": \"drone-show.mp4\",\n \"size_bytes\": 123,\n \"content_type\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"file_id": "<string>",
"upload_id": "<string>",
"key": "<string>",
"part_size_bytes": 123,
"part_urls": [
"<string>"
],
"expires_in_seconds": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"type": "<string>",
"detail": "<string>",
"endpoint": "<string>",
"tier": "<string>",
"limit": 123,
"remaining": 123,
"window_seconds": 123,
"retry_after": 123,
"title": "Too Many Requests",
"status": 429,
"error_code": "rate_limit_exceeded",
"instance": "<string>"
}Path Parameters
Body
application/json
Response
Successful Response
external_id the resulting event will carry; pass back on complete.
S3 multipart upload id; pass back on complete.
S3 key the video will land at.
Upload the file in consecutive chunks of this size (last part may be smaller).
Presigned PUT URLs, one per part, in part order. Collect each response's ETag.
Validity window of the presigned URLs.
Was this page helpful?