The api.video web-service helps you put video on the web without the hassle. This documentation helps you use the corresponding NodeJS client.
Install:
npm install @api.video/nodejs-sdk
Usage:
const apiVideo = require('@api.video/nodejs-sdk');
// Create client for Production and authenticate
const client = new apiVideo.Client({ apiKey: 'xxx' });
// Create client for Sandbox and authenticate
const client = new apiVideo.ClientSandbox({ apiKey: 'xxx' });
// Create and upload a video ressource
let result = client.videos.upload('/path/to/video.mp4', {title: 'Course #4 - Part B'});
result.then(function(video) {
console.log(video.title);
}).catch(function(error) {
console.error(error);
});
// Update video properties
let result = client.videos.update('viXxxxXxxxXxxxxxxxXX', {description: 'Course #4 - Part B'});
result.then(function(video) {
console.log(video.description);
});
// Search video by tags filter and paginate results
let result = client.videos.search({currentPage: 1, pageSize: 25, tags: ['finance']});
result.then(function(videos) {
for (let x = 0; x < videos.length; x += 1) {
if (Object.prototype.hasOwnProperty.call(videos, x)) {
let video = videos[x];
console.log(video.title);
}
}
});
// Delete video ressource
let result = client.videos.delete('viXxxxXxxxXxxxxxxxXX');
result.then(function(statusCode) {
console.log(statusCode);
}).catch(function(error) {
console.error(error);
});
// Upload a video thumbnail
let result = client.videos.uploadThumbnail('/path/to/thumbnail.jpg', 'viXxxxXxxxXxxxxxxxXX');
result.then(function(video) {
console.log(video.title);
});
// Update video thumbnail by picking image with video timecode
let result = client.videos.updateThumbnailWithTimecode('viXxxxXxxxXxxxxxxxXX', '00:15:22.05');
result.then(function(video) {
console.log(video.title);
});
// Create players with default values
let result = client.players.create();
result.then(function(player) {
console.log(player.playerId);
});
// Get a player
let result = client.players.get('plXxxxXxxxXxxxxxxxXX');
result.then(function(player) {
console.log(player.playerId);
});
// Search a player with paginate results
let result = client.players.search({currentPage: 1, pageSize: 50});
result.then(function(players) {
for (let x = 0; x < players.length; x += 1) {
if (Object.prototype.hasOwnProperty.call(players, x)) {
let player = players[x];
console.log(player.playerId);
}
}
});
let properties = {
shapeMargin: 10,
shapeRadius: 3,
shapeAspect: "flat",
shapeBackgroundTop: "rgba(50, 50, 50, .7)",
shapeBackgroundBottom: "rgba(50, 50, 50, .8)",
text: "rgba(255, 255, 255, .95)",
link: "rgba(255, 0, 0, .95)",
linkHover: "rgba(255, 255, 255, .75)",
linkActive: "rgba(255, 0, 0, .75)",
trackPlayed: "rgba(255, 255, 255, .95)",
trackUnplayed: "rgba(255, 255, 255, .1)",
trackBackground: "rgba(0, 0, 0, 0)",
backgroundTop: "rgba(72, 4, 45, 1)",
backgroundBottom: "rgba(94, 95, 89, 1)",
backgroundText: "rgba(255, 255, 255, .95)",
enableApi: true,
enableControls: true,
forceAutoplay: false,
hideTitle: true,
forceLoop: true
};
let result = client.players.update('plXxxxXxxxXxxxxxxxXX', properties);
result.then(function(player) {
console.log(player.forceLoop);
});
// Upload a player logo
let result = client.players.uploadLogo('/path/to/logo.png', 'plXxxxXxxxXxxxxxxxXX', 'https://api.video');
result.then(function(player) {
console.log(player.logo);
});
let result = client.players.delete('plXxxxXxxxXxxxxxxxXX');
result.then(function(statusCode) {
console.log(statusCode);
}).catch(function(error) {
console.error(error);
});
// Upload video caption
let result = client.captions.upload('path/to/caption.vtt', {videoId: 'viXxxxXxxxXxxxxxxxXX', language: 'en'});
result.then(function(caption) {
console.log(caption.src);
});
// Get video caption by language
let result = client.captions.get('viXxxxXxxxXxxxxxxxXX', 'en');
result.then(function(caption) {
console.log(caption.src);
});
// Update the default caption language
let result = client.captions.updateDefault('viXxxxXxxxXxxxxxxxXX', 'en', true);
result.then(function(caption) {
console.log(caption.default);
});
//Delete caption by language
let result = client.captions.delete('viXxxxXxxxXxxxxxxxXX', 'en');
result.then(function(statusCode) {
console.log(statusCode);
}).catch(function(error) {
console.error(error);
});
// Upload video chapter
let result = client.chapters.upload('path/to/chapter.vtt', {videoId: 'viXxxxXxxxXxxxxxxxXX', language: 'en'});
result.then(function(chapter) {
console.log(chapter.src);
});
// Get video chapter by language
let result = client.chapters.get('viXxxxXxxxXxxxxxxxXX', 'en');
result.then(function(chapter) {
console.log(chapter.src);
});
//Delete chapter by language
let result = client.chapters.delete('viXxxxXxxxXxxxxxxxXX', 'en');
result.then(function(statusCode) {
console.log(statusCode);
}).catch(function(error) {
console.error(error);
});
// Create a live
let result = client.lives.create('This is a live');
result.then(function(live) {
console.log(live.name);
});
// Get video Analytics Data for the month of July 2018
let result = client.analyticsVideo.get('viXxxxXxxxXxxxxxxxXX', '2019-01');
result.then(function(analyticVideo) {
console.log(analyticVideo.data);
});
// Get live Analytics Data for the month of July 2018
let result = client.analyticsLive.get('liXxxxXxxxXxxxxxxxXX', '2019-01');
result.then(function(analyticLive) {
console.log(analyticLive.data);
});
// Get Analytics Session Events for a sessionId
let result = client.analyticsSessionEvent.get('psXxxxXxxxXxxxxxxxXX');
result.then(function(analyticSessionEvent) {
console.log(analyticSessionEvent.events);
});
// Generate a token for delegated upload
let result = client.tokens.generate();
result.then(function(token) {
console.log(token);
});
<?php
/*
*********************************
*********************************
* VIDEO *
*********************************
*********************************
*/
const client = new apiVideo.Client({ apiKey: 'xxx' });
// Show a video
client.videos.get(videoId);
// Show a video status
client.videos.getStatus(videoId);
// List or search videos
client.videos.search(parameters = {});
// Create video properties
client.videos.create(title, properties = {});
// Upload a video media file
// Create a video, if videoId is null
client.videos.upload(source, properties = {}, videoId = null);
// Create a video by downloading it from a third party
client.videos.download(source, title, properties = {});
// Update video properties
client.videos.update(videoId, properties);
// Set video public
client.videos.makePublic(videoId);
// Set video private
client.videos.makePrivate(videoId);
// Delete video (file and data)
client.videos.delete(videoId);
// Delegated upload (generate a token for someone to upload a video into your account)
result = client.tokens.generate(); // string(3): "xyz"
result.then(function(token) {
// ...then upload from anywhere without authentication:
// curl https://ws.api.video/upload?token=xyz -F [email protected]
});
/*
*********************************
* VIDEO THUMBNAIL *
*********************************
*/
// Upload a thumbnail for video
client.videos.uploadThumbnail(source, videoId);
// Update video's thumbnail by picking timecode
client.videos.updateThumbnailWithTimecode(videoId, timecode);
/*
*********************************
* VIDEO CAPTIONS *
*********************************
*/
// Get caption for a video
client.videos.captions.get(videoId, language);
// Get all captions for a video
client.videos.captions.getAll(videoId);
// Upload a caption file for a video (.vtt)
client.videos.captions.upload(source, properties);
// Set default caption for a video
client.videos.captions.updateDefault(videoId, language, isDefault);
// Delete video's caption
client.videos.captions.delete(videoId, language);
/*
*********************************
* VIDEO CHAPTERS *
*********************************
*/
// Get caption for a video
client.videos.chapters.get(videoId, language);
// Get all chapters for a video
client.videos.chapters.getAll(videoId);
// Upload a chapter file for a video (.vtt)
client.videos.chapters.upload(source, properties);
// Delete video's chapter
client.videos.chapters.delete(videoId, language);
/*
*********************************
* PLAYERS *
*********************************
*/
// Get a player
client.players.get(playerId);
// List players
client.players.search(parameters = {});
// Create a player
client.players.create(properties = {});
// Update player's properties
client.players.uploadLogo(source, playerId, link);
// Update player's properties
client.players.update(playerId, properties);
// Delete a player logo
client.players.deleteLogo(playerId);
// Delete a player
client.players.delete(playerId);
/*
*********************************
*********************************
* LIVE *
*********************************
*********************************
*/
// Show a live
client.lives.get(liveStreamId);
// List or search lives
client.lives.search(parameters = {});
// Create live properties
client.lives.create(name, properties = {});
// Update live properties
client.lives.update(liveStreamId, properties);
// Delete live (file and data)
client.lives.delete(liveStreamId);
/*
*********************************
* LIVE THUMBNAIL *
*********************************
*/
// Upload a thumbnail for live
client.lives.uploadThumbnail(source, liveStreamId);
/*
*********************************
* ANALYTICS *
*********************************
*/
// Get video analytics between period
client.analyticsVideo.get(videoId, period);
// Get live analytics between period
client.analyticsLive.get(liveStreamId, period);
// Get analytics session events
client.analyticsLive.get(sessionId, parameters);
Function | Parameters | Description | Required | Allowed Values |
---|---|---|---|---|
get | videoId(string) | Video identifier | ✔️ | - |
getStatus | videoId(string) | Video identifier | ✔️ | - |
search | - | - | - | - |
- | parameters(object) | Search parameters | ❌ |
|
create | - | - | - | - |
- | title(string) | Video title | ✔️ | - |
- | properties(object) | Video properties | ❌ |
|
upload | - | - | - | - |
- | source(string) | Video media file | ✔️ | - |
- | properties(object) | Video properties | ❌ |
|
- | videoId(string) | Video identifier | ❌ | - |
uploadThumbnail | - | - | - | - |
- | source(string) | Image media file | ✔️ | - |
- | videoId(string) | Video identifier | ✔️ | - |
updateThumbnailWithTimeCode | - | - | - | - |
- | videoId(string) | Video identifier | ✔️ | - |
- | timecode(string) | Video timecode | ✔️ | 00:00:00.00 (hours:minutes:seconds.frames) |
update | - | - | - | - |
- | videoId()string | Video identifier | ✔️ | - |
- | properties(object) | Video properties | ✔️ |
|
makePublic | videoId(string) | Video identifier | ✔️ | - |
makePrivate | videoId(string) | Video identifier | ✔️ | - |
delete | videoId(string) | Video identifier | ✔️ | - |
Function | Parameters | Description | Required | Allowed Values |
---|---|---|---|---|
get | playerId(string) | Player identifier | ✔️ | - |
create | properties(object) | Player properties | ❌ |
|
uploadLogo | - | - | - | - |
- | source(string) | Logo file | ✔️ | - |
- | playerId(string) | Player identifier | ✔️ | - |
- | link(string) | Logo link | ✔️ | - |
search | - | - | - | - |
- | parameters(object) | Search parameters | ❌ |
|
update | - | - | - | - |
- | playerId(string) | Player identifier | ✔️ | - |
- | properties(object) | Player properties | ✔️ |
|
deleteLogo | playerId(string) | Player identifier | ✔️ | - |
delete | playerId(string) | Player identifier | ✔️ | - |
Function | Parameters | Description | Required | Allowed Values |
---|---|---|---|---|
get | - | - | - | - |
- | videoId(string) | Video identifier | ✔️ | - |
- | language(string) | Language identifier | ✔️ | 2 letters (ex: en, fr) |
getAll | videoId(string) | Video identifier | ✔️ | - |
upload | - | - | - | - |
- | source(string) | Caption file | ✔️ | - |
- | properties(string) | Caption properties | ✔️ |
|
updateDefault | - (object) | - | - | - |
- | videoId | Video identifier | ✔️ | - |
- | language (string) | Language identifier | ✔️ | 2 letters (ex: en, fr) |
- | isDefault (string) | Set default language | ✔️ | true/false |
delete | - | - | - | - |
- | videoId | Video identifier | ✔️ | - |
- | language (string) | Language identifier | ✔️ | 2 letters (ex: en, fr) |
Function | Parameters | Description | Required | Allowed Values |
---|---|---|---|---|
get | - | - | - | - |
- | videoId(string) | Video identifier | ✔️ | - |
- | language(string) | Language identifier | ✔️ | 2 letters (ex: en, fr) |
getAll | videoId(string) | Video identifier | ✔️ | - |
upload | - | - | - | - |
- | source(string) | Chapter file | ✔️ | - |
- | properties(string) | Chapter properties | ✔️ |
|
delete | - | - | - | - |
- | videoId | Video identifier | ✔️ | - |
- | language (string) | Language identifier | ✔️ | 2 letters (ex: en, fr) |
Function | Parameters | Description | Required | Allowed Values |
---|---|---|---|---|
get | liveStreamId(string) | Live identifier | ✔️ | - |
search | - | - | - | - |
- | parameters(object) | Search parameters | ❌ |
|
create | - | - | - | - |
- | name(string) | Live name | ✔️ | - |
- | properties(object) | Live properties | ❌ |
|
uploadThumbnail | - | - | - | - |
- | source(string) | Image media file | ✔️ | - |
- | liveStreamId(string) | Live identifier | ✔️ | - |
update | - | - | - | - |
- | liveStreamId()string | Live identifier | ✔️ | - |
- | properties(object) | Live properties | ✔️ |
|
delete | liveStreamId(string) | Live identifier | ✔️ | - |
Function | Parameters | Description | Required | Allowed Values/Format |
---|---|---|---|---|
get | - | - | - | - |
- | videoId(string) | Video identifier | ✔️ | - |
- | period (string) | Period research | ❌ |
|
Function | Parameters | Description | Required | Allowed Values/Format |
---|---|---|---|---|
get | - | - | - | - |
- | liveStreamId(string) | Live identifier | ✔️ | - |
- | period (string) | Period research | ❌ |
|
Function | Parameters | Description | Required | Allowed Values/Format |
---|---|---|---|---|
get | - | - | - | - |
- | sessionId(string) | Session identifier | ✔️ | - |
- | parameters(array) | Search parameters | ❌ |
|
Function | Parameters | Description | Required | Allowed Values |
---|---|---|---|---|
generate | - | Token for delegated upload | - | - |
Function | Parameters | Description | Required | Allowed Values |
---|---|---|---|---|
- | - | - |
A full technical documentation is available on https://docs.api.video/
npm run test
You can also run a bunch of commands against your actual sandbox:
API_KEY=xxx npm run test:sandbox
Use the Sandbox API Key and not your production key.