curl --request POST \
--url https://api.vidbeo.com/v2/players \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Example",
"aspectratio": "16:9",
"autoplay": false,
"colour": "#ff0000",
"controls": false,
"buttons": "play,progress,volume,time,cc,settings,fullscreen,main_play",
"dnt": false,
"keyboard": false,
"loop": false,
"muted": false,
"playsinline": false,
"preload": false,
"quality": "highest",
"title": false,
"track": "en-US"
}
'import requests
url = "https://api.vidbeo.com/v2/players"
payload = {
"name": "Example",
"aspectratio": "16:9",
"autoplay": False,
"colour": "#ff0000",
"controls": False,
"buttons": "play,progress,volume,time,cc,settings,fullscreen,main_play",
"dnt": False,
"keyboard": False,
"loop": False,
"muted": False,
"playsinline": False,
"preload": False,
"quality": "highest",
"title": False,
"track": "en-US"
}
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({
name: 'Example',
aspectratio: '16:9',
autoplay: false,
colour: '#ff0000',
controls: false,
buttons: 'play,progress,volume,time,cc,settings,fullscreen,main_play',
dnt: false,
keyboard: false,
loop: false,
muted: false,
playsinline: false,
preload: false,
quality: 'highest',
title: false,
track: 'en-US'
})
};
fetch('https://api.vidbeo.com/v2/players', 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/players",
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([
'name' => 'Example',
'aspectratio' => '16:9',
'autoplay' => false,
'colour' => '#ff0000',
'controls' => false,
'buttons' => 'play,progress,volume,time,cc,settings,fullscreen,main_play',
'dnt' => false,
'keyboard' => false,
'loop' => false,
'muted' => false,
'playsinline' => false,
'preload' => false,
'quality' => 'highest',
'title' => false,
'track' => 'en-US'
]),
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/players"
payload := strings.NewReader("{\n \"name\": \"Example\",\n \"aspectratio\": \"16:9\",\n \"autoplay\": false,\n \"colour\": \"#ff0000\",\n \"controls\": false,\n \"buttons\": \"play,progress,volume,time,cc,settings,fullscreen,main_play\",\n \"dnt\": false,\n \"keyboard\": false,\n \"loop\": false,\n \"muted\": false,\n \"playsinline\": false,\n \"preload\": false,\n \"quality\": \"highest\",\n \"title\": false,\n \"track\": \"en-US\"\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/players")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Example\",\n \"aspectratio\": \"16:9\",\n \"autoplay\": false,\n \"colour\": \"#ff0000\",\n \"controls\": false,\n \"buttons\": \"play,progress,volume,time,cc,settings,fullscreen,main_play\",\n \"dnt\": false,\n \"keyboard\": false,\n \"loop\": false,\n \"muted\": false,\n \"playsinline\": false,\n \"preload\": false,\n \"quality\": \"highest\",\n \"title\": false,\n \"track\": \"en-US\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vidbeo.com/v2/players")
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 \"name\": \"Example\",\n \"aspectratio\": \"16:9\",\n \"autoplay\": false,\n \"colour\": \"#ff0000\",\n \"controls\": false,\n \"buttons\": \"play,progress,volume,time,cc,settings,fullscreen,main_play\",\n \"dnt\": false,\n \"keyboard\": false,\n \"loop\": false,\n \"muted\": false,\n \"playsinline\": false,\n \"preload\": false,\n \"quality\": \"highest\",\n \"title\": false,\n \"track\": \"en-US\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"name": "Example",
"aspectratio": "16:9",
"autoplay": false,
"colour": "#ff0000",
"controls": false,
"buttons": "play,progress,fullscreen",
"dnt": false,
"keyboard": false,
"loop": false,
"muted": false,
"playsinline": false,
"preload": false,
"quality": "highest",
"title": false,
"track": "en-US",
"created_by": "abcde12345abcde12345a",
"created_time": "2026-01-01T00:00:00.000Z",
"updated_by": "abcde12345abcde12345a",
"updated_time": "2026-01-01T00:00:00.000Z"
},
"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 player
Create a new player
curl --request POST \
--url https://api.vidbeo.com/v2/players \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Example",
"aspectratio": "16:9",
"autoplay": false,
"colour": "#ff0000",
"controls": false,
"buttons": "play,progress,volume,time,cc,settings,fullscreen,main_play",
"dnt": false,
"keyboard": false,
"loop": false,
"muted": false,
"playsinline": false,
"preload": false,
"quality": "highest",
"title": false,
"track": "en-US"
}
'import requests
url = "https://api.vidbeo.com/v2/players"
payload = {
"name": "Example",
"aspectratio": "16:9",
"autoplay": False,
"colour": "#ff0000",
"controls": False,
"buttons": "play,progress,volume,time,cc,settings,fullscreen,main_play",
"dnt": False,
"keyboard": False,
"loop": False,
"muted": False,
"playsinline": False,
"preload": False,
"quality": "highest",
"title": False,
"track": "en-US"
}
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({
name: 'Example',
aspectratio: '16:9',
autoplay: false,
colour: '#ff0000',
controls: false,
buttons: 'play,progress,volume,time,cc,settings,fullscreen,main_play',
dnt: false,
keyboard: false,
loop: false,
muted: false,
playsinline: false,
preload: false,
quality: 'highest',
title: false,
track: 'en-US'
})
};
fetch('https://api.vidbeo.com/v2/players', 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/players",
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([
'name' => 'Example',
'aspectratio' => '16:9',
'autoplay' => false,
'colour' => '#ff0000',
'controls' => false,
'buttons' => 'play,progress,volume,time,cc,settings,fullscreen,main_play',
'dnt' => false,
'keyboard' => false,
'loop' => false,
'muted' => false,
'playsinline' => false,
'preload' => false,
'quality' => 'highest',
'title' => false,
'track' => 'en-US'
]),
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/players"
payload := strings.NewReader("{\n \"name\": \"Example\",\n \"aspectratio\": \"16:9\",\n \"autoplay\": false,\n \"colour\": \"#ff0000\",\n \"controls\": false,\n \"buttons\": \"play,progress,volume,time,cc,settings,fullscreen,main_play\",\n \"dnt\": false,\n \"keyboard\": false,\n \"loop\": false,\n \"muted\": false,\n \"playsinline\": false,\n \"preload\": false,\n \"quality\": \"highest\",\n \"title\": false,\n \"track\": \"en-US\"\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/players")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Example\",\n \"aspectratio\": \"16:9\",\n \"autoplay\": false,\n \"colour\": \"#ff0000\",\n \"controls\": false,\n \"buttons\": \"play,progress,volume,time,cc,settings,fullscreen,main_play\",\n \"dnt\": false,\n \"keyboard\": false,\n \"loop\": false,\n \"muted\": false,\n \"playsinline\": false,\n \"preload\": false,\n \"quality\": \"highest\",\n \"title\": false,\n \"track\": \"en-US\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vidbeo.com/v2/players")
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 \"name\": \"Example\",\n \"aspectratio\": \"16:9\",\n \"autoplay\": false,\n \"colour\": \"#ff0000\",\n \"controls\": false,\n \"buttons\": \"play,progress,volume,time,cc,settings,fullscreen,main_play\",\n \"dnt\": false,\n \"keyboard\": false,\n \"loop\": false,\n \"muted\": false,\n \"playsinline\": false,\n \"preload\": false,\n \"quality\": \"highest\",\n \"title\": false,\n \"track\": \"en-US\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"name": "Example",
"aspectratio": "16:9",
"autoplay": false,
"colour": "#ff0000",
"controls": false,
"buttons": "play,progress,fullscreen",
"dnt": false,
"keyboard": false,
"loop": false,
"muted": false,
"playsinline": false,
"preload": false,
"quality": "highest",
"title": false,
"track": "en-US",
"created_by": "abcde12345abcde12345a",
"created_time": "2026-01-01T00:00:00.000Z",
"updated_by": "abcde12345abcde12345a",
"updated_time": "2026-01-01T00:00:00.000Z"
},
"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
A short name for the player
1 - 40"Example"
Its aspect ratio. Currently we only support the most common 16:9 ratio
16:9 "16:9"
Should the player try to play on-load (many browsers block this, though setting muted as true can help)?
false
Its accent colour, used for the main play button
^#[a-zA-Z0-9]{6}$"#ff0000"
Whether controls should be shown
false
If you only want a subset of the controls shown, provide a comma-separated string of the ones to include
"play,progress,volume,time,cc,settings,fullscreen,main_play"
Should the player send analytics events?
false
Support keyboard controls
false
Should the video automatically loop and restart when it ends?
false
Should the video be muted on-load?
false
If supported, should the video play inline (as opposed to immediately going fullscreen)
false
If supported, should we buffer a small amount of video on-load to improve performance?
false
We try and pick the best quality (based on the connection speed) but you can force it
highest, lowest "highest"
Should the video title be shown on-load?
false
If subtitles are available, this sets the language of the one to show on-load
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"