curl --request POST \
--url https://api.vidbeo.com/v2/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": "vidbeo://uploads/abcde12345abcdee12345a",
"type": "vod",
"name": "Example",
"description": "Example description",
"enabled": false,
"player": "abcde12345abcdee12345a",
"transcoder": "abcde12345abcdee12345a",
"privacy": "private",
"password": "Example123",
"spherical": false,
"projection": "equirectangular",
"language": "en-US",
"tags": [
"example"
],
"categories": [
"sport"
],
"scheduled_time": "2026-01-01T00:00:00.000Z",
"clip": false,
"clip_from": "abcde12345abcde12345a",
"clip_start": "00:00:30",
"clip_end": "00:02:30"
}
'import requests
url = "https://api.vidbeo.com/v2/videos"
payload = {
"input": "vidbeo://uploads/abcde12345abcdee12345a",
"type": "vod",
"name": "Example",
"description": "Example description",
"enabled": False,
"player": "abcde12345abcdee12345a",
"transcoder": "abcde12345abcdee12345a",
"privacy": "private",
"password": "Example123",
"spherical": False,
"projection": "equirectangular",
"language": "en-US",
"tags": ["example"],
"categories": ["sport"],
"scheduled_time": "2026-01-01T00:00:00.000Z",
"clip": False,
"clip_from": "abcde12345abcde12345a",
"clip_start": "00:00:30",
"clip_end": "00:02:30"
}
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({
input: 'vidbeo://uploads/abcde12345abcdee12345a',
type: 'vod',
name: 'Example',
description: 'Example description',
enabled: false,
player: 'abcde12345abcdee12345a',
transcoder: 'abcde12345abcdee12345a',
privacy: 'private',
password: 'Example123',
spherical: false,
projection: 'equirectangular',
language: 'en-US',
tags: ['example'],
categories: ['sport'],
scheduled_time: '2026-01-01T00:00:00.000Z',
clip: false,
clip_from: 'abcde12345abcde12345a',
clip_start: '00:00:30',
clip_end: '00:02:30'
})
};
fetch('https://api.vidbeo.com/v2/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.vidbeo.com/v2/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([
'input' => 'vidbeo://uploads/abcde12345abcdee12345a',
'type' => 'vod',
'name' => 'Example',
'description' => 'Example description',
'enabled' => false,
'player' => 'abcde12345abcdee12345a',
'transcoder' => 'abcde12345abcdee12345a',
'privacy' => 'private',
'password' => 'Example123',
'spherical' => false,
'projection' => 'equirectangular',
'language' => 'en-US',
'tags' => [
'example'
],
'categories' => [
'sport'
],
'scheduled_time' => '2026-01-01T00:00:00.000Z',
'clip' => false,
'clip_from' => 'abcde12345abcde12345a',
'clip_start' => '00:00:30',
'clip_end' => '00:02:30'
]),
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.vidbeo.com/v2/videos"
payload := strings.NewReader("{\n \"input\": \"vidbeo://uploads/abcde12345abcdee12345a\",\n \"type\": \"vod\",\n \"name\": \"Example\",\n \"description\": \"Example description\",\n \"enabled\": false,\n \"player\": \"abcde12345abcdee12345a\",\n \"transcoder\": \"abcde12345abcdee12345a\",\n \"privacy\": \"private\",\n \"password\": \"Example123\",\n \"spherical\": false,\n \"projection\": \"equirectangular\",\n \"language\": \"en-US\",\n \"tags\": [\n \"example\"\n ],\n \"categories\": [\n \"sport\"\n ],\n \"scheduled_time\": \"2026-01-01T00:00:00.000Z\",\n \"clip\": false,\n \"clip_from\": \"abcde12345abcde12345a\",\n \"clip_start\": \"00:00:30\",\n \"clip_end\": \"00:02:30\"\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.vidbeo.com/v2/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": \"vidbeo://uploads/abcde12345abcdee12345a\",\n \"type\": \"vod\",\n \"name\": \"Example\",\n \"description\": \"Example description\",\n \"enabled\": false,\n \"player\": \"abcde12345abcdee12345a\",\n \"transcoder\": \"abcde12345abcdee12345a\",\n \"privacy\": \"private\",\n \"password\": \"Example123\",\n \"spherical\": false,\n \"projection\": \"equirectangular\",\n \"language\": \"en-US\",\n \"tags\": [\n \"example\"\n ],\n \"categories\": [\n \"sport\"\n ],\n \"scheduled_time\": \"2026-01-01T00:00:00.000Z\",\n \"clip\": false,\n \"clip_from\": \"abcde12345abcde12345a\",\n \"clip_start\": \"00:00:30\",\n \"clip_end\": \"00:02:30\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vidbeo.com/v2/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 \"input\": \"vidbeo://uploads/abcde12345abcdee12345a\",\n \"type\": \"vod\",\n \"name\": \"Example\",\n \"description\": \"Example description\",\n \"enabled\": false,\n \"player\": \"abcde12345abcdee12345a\",\n \"transcoder\": \"abcde12345abcdee12345a\",\n \"privacy\": \"private\",\n \"password\": \"Example123\",\n \"spherical\": false,\n \"projection\": \"equirectangular\",\n \"language\": \"en-US\",\n \"tags\": [\n \"example\"\n ],\n \"categories\": [\n \"sport\"\n ],\n \"scheduled_time\": \"2026-01-01T00:00:00.000Z\",\n \"clip\": false,\n \"clip_from\": \"abcde12345abcde12345a\",\n \"clip_start\": \"00:00:30\",\n \"clip_end\": \"00:02:30\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"type": "vod",
"name": "Example",
"description": "Example description",
"outputs": [
{
"label": "hls",
"url": "https://example.com/path/to/file.m3u8"
}
],
"thumbnail": "https://example.com/path/to/file.jpg",
"sprite": "https://example.com/path/to/file.jpg",
"duration": 30,
"privacy": "private",
"tracks": [
{
"id": "abcde12345abcde12345a",
"language": "en-US",
"label": "English",
"kind": "subtitles",
"url": "<string>"
}
],
"categories": [
"example"
],
"enabled": true,
"player": "abcde12345abcdee12345a",
"transcoder": "abcde12345abcde12345a",
"content_rating": "all",
"spherical": false,
"projection": "equirectangular",
"language": "en-US",
"cards": [
{
"id": "abcde12345abcde12345a",
"name": "Example",
"show_at": "00:00:05",
"hide_at": "00:00:05",
"skip": false,
"top_text": "Example text",
"bottom_text": "Example text",
"link": "https://example.com"
}
],
"gates": [
{
"id": "abcde12345abcde12345a",
"name": "Example",
"show_at": "00:00:05",
"skip": false,
"top_text": "Example text",
"bottom_text": "Example text",
"fields": [
{
"label": "Email",
"value": "email"
}
],
"connect_service_id": "abcde12345abcde12345a",
"connect_list_id": "abcde"
}
],
"hotspots": [
{
"id": "abcde12345abcde12345a",
"name": "Example",
"show_at": "00:00:05",
"hide_at": "00:00:05",
"x": 25,
"y": 25,
"action": "link",
"link": "https://example.com",
"target": "_parent",
"opacity": "translucent"
}
],
"chapters": [
{
"id": "abcde12345abcde12345a",
"name": "Example",
"start": "00:00:05"
}
],
"page_url": "https://example.com/page",
"progress": 100,
"status": "ready",
"draft": true,
"tags": [
"example"
],
"scheduled_time": "2026-01-01T00:00:00.000Z",
"clip": false,
"clip_from": "abcde12345abcde12345a",
"clip_start": "00:00:30",
"clip_end": "00:01:30",
"created_by": "abcde12345abcde12345a",
"created_time": "2026-01-01T00:00:00.000Z",
"updated_by": "abcde12345abcde12345a",
"updated_time": "2026-01-01T00:00:00.000Z",
"input": "vidbeo://uploads/abcde12345abcdee12345a"
},
"links": {},
"errors": []
}{
"success": false,
"result": {},
"links": {},
"errors": [
{
"message": "Invalid data sent"
}
]
}{
"success": false,
"result": {},
"links": {},
"errors": [
{
"message": "Forbidden"
}
]
}{
"success": false,
"result": {},
"links": {},
"errors": [
{
"message": "Too many requests"
}
]
}{
"success": false,
"result": {},
"links": {},
"errors": [
{
"message": "Internal server error"
}
]
}Create video
Create a new video
curl --request POST \
--url https://api.vidbeo.com/v2/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": "vidbeo://uploads/abcde12345abcdee12345a",
"type": "vod",
"name": "Example",
"description": "Example description",
"enabled": false,
"player": "abcde12345abcdee12345a",
"transcoder": "abcde12345abcdee12345a",
"privacy": "private",
"password": "Example123",
"spherical": false,
"projection": "equirectangular",
"language": "en-US",
"tags": [
"example"
],
"categories": [
"sport"
],
"scheduled_time": "2026-01-01T00:00:00.000Z",
"clip": false,
"clip_from": "abcde12345abcde12345a",
"clip_start": "00:00:30",
"clip_end": "00:02:30"
}
'import requests
url = "https://api.vidbeo.com/v2/videos"
payload = {
"input": "vidbeo://uploads/abcde12345abcdee12345a",
"type": "vod",
"name": "Example",
"description": "Example description",
"enabled": False,
"player": "abcde12345abcdee12345a",
"transcoder": "abcde12345abcdee12345a",
"privacy": "private",
"password": "Example123",
"spherical": False,
"projection": "equirectangular",
"language": "en-US",
"tags": ["example"],
"categories": ["sport"],
"scheduled_time": "2026-01-01T00:00:00.000Z",
"clip": False,
"clip_from": "abcde12345abcde12345a",
"clip_start": "00:00:30",
"clip_end": "00:02:30"
}
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({
input: 'vidbeo://uploads/abcde12345abcdee12345a',
type: 'vod',
name: 'Example',
description: 'Example description',
enabled: false,
player: 'abcde12345abcdee12345a',
transcoder: 'abcde12345abcdee12345a',
privacy: 'private',
password: 'Example123',
spherical: false,
projection: 'equirectangular',
language: 'en-US',
tags: ['example'],
categories: ['sport'],
scheduled_time: '2026-01-01T00:00:00.000Z',
clip: false,
clip_from: 'abcde12345abcde12345a',
clip_start: '00:00:30',
clip_end: '00:02:30'
})
};
fetch('https://api.vidbeo.com/v2/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.vidbeo.com/v2/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([
'input' => 'vidbeo://uploads/abcde12345abcdee12345a',
'type' => 'vod',
'name' => 'Example',
'description' => 'Example description',
'enabled' => false,
'player' => 'abcde12345abcdee12345a',
'transcoder' => 'abcde12345abcdee12345a',
'privacy' => 'private',
'password' => 'Example123',
'spherical' => false,
'projection' => 'equirectangular',
'language' => 'en-US',
'tags' => [
'example'
],
'categories' => [
'sport'
],
'scheduled_time' => '2026-01-01T00:00:00.000Z',
'clip' => false,
'clip_from' => 'abcde12345abcde12345a',
'clip_start' => '00:00:30',
'clip_end' => '00:02:30'
]),
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.vidbeo.com/v2/videos"
payload := strings.NewReader("{\n \"input\": \"vidbeo://uploads/abcde12345abcdee12345a\",\n \"type\": \"vod\",\n \"name\": \"Example\",\n \"description\": \"Example description\",\n \"enabled\": false,\n \"player\": \"abcde12345abcdee12345a\",\n \"transcoder\": \"abcde12345abcdee12345a\",\n \"privacy\": \"private\",\n \"password\": \"Example123\",\n \"spherical\": false,\n \"projection\": \"equirectangular\",\n \"language\": \"en-US\",\n \"tags\": [\n \"example\"\n ],\n \"categories\": [\n \"sport\"\n ],\n \"scheduled_time\": \"2026-01-01T00:00:00.000Z\",\n \"clip\": false,\n \"clip_from\": \"abcde12345abcde12345a\",\n \"clip_start\": \"00:00:30\",\n \"clip_end\": \"00:02:30\"\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.vidbeo.com/v2/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": \"vidbeo://uploads/abcde12345abcdee12345a\",\n \"type\": \"vod\",\n \"name\": \"Example\",\n \"description\": \"Example description\",\n \"enabled\": false,\n \"player\": \"abcde12345abcdee12345a\",\n \"transcoder\": \"abcde12345abcdee12345a\",\n \"privacy\": \"private\",\n \"password\": \"Example123\",\n \"spherical\": false,\n \"projection\": \"equirectangular\",\n \"language\": \"en-US\",\n \"tags\": [\n \"example\"\n ],\n \"categories\": [\n \"sport\"\n ],\n \"scheduled_time\": \"2026-01-01T00:00:00.000Z\",\n \"clip\": false,\n \"clip_from\": \"abcde12345abcde12345a\",\n \"clip_start\": \"00:00:30\",\n \"clip_end\": \"00:02:30\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vidbeo.com/v2/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 \"input\": \"vidbeo://uploads/abcde12345abcdee12345a\",\n \"type\": \"vod\",\n \"name\": \"Example\",\n \"description\": \"Example description\",\n \"enabled\": false,\n \"player\": \"abcde12345abcdee12345a\",\n \"transcoder\": \"abcde12345abcdee12345a\",\n \"privacy\": \"private\",\n \"password\": \"Example123\",\n \"spherical\": false,\n \"projection\": \"equirectangular\",\n \"language\": \"en-US\",\n \"tags\": [\n \"example\"\n ],\n \"categories\": [\n \"sport\"\n ],\n \"scheduled_time\": \"2026-01-01T00:00:00.000Z\",\n \"clip\": false,\n \"clip_from\": \"abcde12345abcde12345a\",\n \"clip_start\": \"00:00:30\",\n \"clip_end\": \"00:02:30\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"type": "vod",
"name": "Example",
"description": "Example description",
"outputs": [
{
"label": "hls",
"url": "https://example.com/path/to/file.m3u8"
}
],
"thumbnail": "https://example.com/path/to/file.jpg",
"sprite": "https://example.com/path/to/file.jpg",
"duration": 30,
"privacy": "private",
"tracks": [
{
"id": "abcde12345abcde12345a",
"language": "en-US",
"label": "English",
"kind": "subtitles",
"url": "<string>"
}
],
"categories": [
"example"
],
"enabled": true,
"player": "abcde12345abcdee12345a",
"transcoder": "abcde12345abcde12345a",
"content_rating": "all",
"spherical": false,
"projection": "equirectangular",
"language": "en-US",
"cards": [
{
"id": "abcde12345abcde12345a",
"name": "Example",
"show_at": "00:00:05",
"hide_at": "00:00:05",
"skip": false,
"top_text": "Example text",
"bottom_text": "Example text",
"link": "https://example.com"
}
],
"gates": [
{
"id": "abcde12345abcde12345a",
"name": "Example",
"show_at": "00:00:05",
"skip": false,
"top_text": "Example text",
"bottom_text": "Example text",
"fields": [
{
"label": "Email",
"value": "email"
}
],
"connect_service_id": "abcde12345abcde12345a",
"connect_list_id": "abcde"
}
],
"hotspots": [
{
"id": "abcde12345abcde12345a",
"name": "Example",
"show_at": "00:00:05",
"hide_at": "00:00:05",
"x": 25,
"y": 25,
"action": "link",
"link": "https://example.com",
"target": "_parent",
"opacity": "translucent"
}
],
"chapters": [
{
"id": "abcde12345abcde12345a",
"name": "Example",
"start": "00:00:05"
}
],
"page_url": "https://example.com/page",
"progress": 100,
"status": "ready",
"draft": true,
"tags": [
"example"
],
"scheduled_time": "2026-01-01T00:00:00.000Z",
"clip": false,
"clip_from": "abcde12345abcde12345a",
"clip_start": "00:00:30",
"clip_end": "00:01:30",
"created_by": "abcde12345abcde12345a",
"created_time": "2026-01-01T00:00:00.000Z",
"updated_by": "abcde12345abcde12345a",
"updated_time": "2026-01-01T00:00:00.000Z",
"input": "vidbeo://uploads/abcde12345abcdee12345a"
},
"links": {},
"errors": []
}{
"success": false,
"result": {},
"links": {},
"errors": [
{
"message": "Invalid data sent"
}
]
}{
"success": false,
"result": {},
"links": {},
"errors": [
{
"message": "Forbidden"
}
]
}{
"success": false,
"result": {},
"links": {},
"errors": [
{
"message": "Too many requests"
}
]
}{
"success": false,
"result": {},
"links": {},
"errors": [
{
"message": "Internal server error"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Either a full URL we can fetch the video file from, or a reference to a previously completed upload
"vidbeo://uploads/abcde12345abcdee12345a"
What kind of video is this?
vod, stream "vod"
The title of the video
1 - 100"Example"
A short description for the video
200"Example description"
Should the video be immediately available to watch when ready?
false
If the video should be presented in a custom player, its ID
"abcde12345abcdee12345a"
If the video should be transcoded using a custom profile, its ID
"abcde12345abcdee12345a"
If authenticated, the viewer will need to provide either a cookie or JWT when requesting a landing page, embed code or HLS manifest URL
public, private, password, authenticated "private"
If you set the value of privacy as password you will need to send that password. This value should be at least 8 characters. It should contain at least one letter and at least one number
8 - 20"Example123"
Is the video in 360?
false
For 360 videos we currently support equirectangular
equirectangular "equirectangular"
The audio language
af-ZA, ar-AE, ar-SA, cy-GB, da-DK, de-CH, de-DE, en-AU, en-GB, en-IE, en-IN, en-US, es-ES, es-US, fa-IR, fr-CA, fr-FR, ga-IE, gd-GB, he-IL, hi-IN, id-ID, it-IT, ja-JP, ko-KR, ms-MY, nl-NL, pt-BR, pt-PT, ru-RU, ta-IN, te-IN, tr-TR, zh-CN "en-US"
An array of up to ten tags
10["example"]
An array of up to five categories
5["sport"]
If the video should appear in a content feed at a later time, when should that be?
"2026-01-01T00:00:00.000Z"
Is this video a clip from another video?
false
If this video is a clip, which video was it taken from?
"abcde12345abcde12345a"
If this video is a clip, when in the parent video does it start?
"00:00:30"
If this video is a clip, when in the parent video does it end?
"00:02:30"