Videos

Videos

You can manage the videos within your content library by making the following requests:

RequestDescription
POST /videosCreate a video
GET /videosReturn the details of all of the videos in your account
GET /videos/:idGet the details of a single video
PATCH /videos/:idUpdate a video
DELETE /videos/:idDelete a video
POST /videos/:id/tracksAdd a track (subtitles or captions)
DELETE /videos/:id/tracks/:idDelete a track (subtitles or captions)
POST /videos/:id/thumbnailAdd a new thumbnail image
POST /videos/:id/cardsAdd a card (a call-to-action)
PATCH /videos/:id/cards/:idUpdate a card (a call-to-action)
DELETE /videos/:id/cards/:idDelete a card (a call-to-action)
POST /videos/:id/gatesAdd a gate
PATCH /videos/:id/gates/:idUpdate a gate
DELETE /videos/:id/gates/:idDelete a gate
POST /videos/:id/hotspotsAdd a hotspot (clickable region)
PATCH /videos/:id/hotspots/:idUpdate a hotspot (clickable region
DELETE /videos/:id/hotspots/:idDelete a hotspot (clickable region

POST /videos

VOD (video on-demand)

You need to send us your video file. The value of input depends on your workflow: is your video file already online somewhere?

Yes

Send us its URL to save you uploading it again. Our system will attempt to pull the file from that. What that URL is of course depends on what service you are using. For example we wrote a guide how to get a URL from Dropbox.

No

Then you need to upload the file first. Using the API you need to request an upload ID (via a call to POST /uploads). Upload the video file to that upload URL, then send us a reference to it. Like this: vidbeo://uploads/UPLOAD-ID-GOES-HERE.

Required parameters

KeyTypeDescription
nameStringIts title (1-100 characters)
inputStringIts source file. Either a URL e.g. https://www.dropbox.com/my-video.mp4?dl=1 or a reference e.g vidbeo://uploads/abcde12345abcde12345a

Example request

We will pretend it's uploaded to https://www.example.com/video.mp4. So we can tell the system to fetch it from there without having to upload video.mp4 again:

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{"input":"https://www.example.com/video.mp4", "name":"New video"}' \
"https://api.vidbeo.com/v2/videos"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"type": "vod",
"name": "New video",
"description": "",
"outputs": [],
"thumbnail": "",
"sprite": "",
"duration": 0,
"privacy": "unlisted",
"tracks": [],
"categories": [],
"enabled": true,
"transcoder": "",
"spherical": false,
"projection": "",
"cards": [],
"gates": [],
"hotspots": [],
"progress": 0,
"status": "preparing",
"tags": [],
"created_by": "abcde12345abcde1234a",
"created_time": "2021-02-01T00:00:00.000Z",
"updated_by": "abcde12345abcde12345a",
"updated_time": "2021-02-01T00:00:00.000Z"
},
"links": null,
"errors": []
}

Example request

Here the video file is not already online. So we have to upload it.

  1. Request an upload ID. See POST /uploads
  2. Upload the file to that URL. See How do I upload to that URL
  3. Send that upload's ID in input like vidbeo://uploads/THE-ID-HERE
curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{"input":"vidbeo://uploads/abcde12345abcde12345a", "name":"New video"}' \
"https://api.vidbeo.com/v2/videos"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"type": "vod",
"name": "New video",
"description": "",
"outputs": [],
"thumbnail": "",
"sprite": "",
"duration": 0,
"privacy": "unlisted",
"tracks": [],
"categories": [],
"enabled": true,
"transcoder": "",
"spherical": false,
"projection": "",
"cards": [],
"gates": [],
"hotspots": [],
"progress": 0,
"status": "preparing",
"tags": [],
"created_by": "abcde12345abcde1234a",
"created_time": "2021-02-01T00:00:00.000Z",
"updated_by": "abcde12345abcde12345a",
"updated_time": "2021-02-01T00:00:00.000Z"
},
"links": null,
"errors": []
}

As you can see, in both cases the response structure is actually the same. Internally our system retrieves the file from the appropriate place.

The most important attribute returned is id. This is the unique identifier that this video has now been assigned. You can then use that, via GET /videos/:id to get the details of this video.

Your video file needs to be transcoded before it is available to watch online. Once it is picked up for processing, the system will attempt to download the source file from the provided input. If it can do so, it will verify the file. Assuming it is a supported format it will then be transcoded into various formats to make it suitable for delivery over the web. A thumbnail frame will be extracted to represent it too.

You will see that its status attribute will update to be ready once the video has successfully transcoded, or error if this failed.

Live event

Live events work slightly differently.

Assuming your package/plan includes live streaming, you initiate a new live event by sending a type which should be event and not sending an input (as we assign you that URL: it can be discovered with a subsequent GET /videos/:id after a few moments).

Clips

We support clipping (currently limited to two minutes in duration).

Our system looks for two custom parameters in your input: vidbeo_clip_start and vidbeo_clip_end. These should be time-codes (HH:MM:SS). If both are provided, we will extract just that part of the video.

For example below we have a two-minute video in Dropbox but rather than the whole thing, we only want a ten-second clip from it between 00:00:10 and 00:00:20. Notice how we have added those two extra parameters to its input URL:

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{"input":"https://www.dropbox.com/s/madeupid/video.mp4?dl=1&vidbeo_clip_start=00:00:10&vidbeo_clip_end=00:00:20", "name":"Clip"}' \
"https://api.vidbeo.com/v2/videos"

Optional parameters

KeyTypeDescription
descriptionStringThe description to give to this video
privacyStringCurrently we support "private", "public" or "unlisted". If set as private, the viewer will need to provide either a cookie or JWT when requesting a landing page, embed code or HLS manifest URL. The default is "unlisted"
sphericalBooleanWas the video shot in 360?
projectionStringIf the video was shot in 360, the projection used: we currently only support "equirectangular" so please send that for now
tagsArrayAn array of up to ten lowercase, single-word, alphanumeric strings

GET /videos

Return the details of all of the videos in your account.

Example request

curl \
-H "Authorization: Bearer YOUR-API-KEY" \
"https://api.vidbeo.com/v2/videos"

Example response

{
"success": true,
"result": [
{
"id": "abcde12345abcde12345a",
"type": "vod",
"name": "Example video",
"description": "",
"outputs": [
{
"label": "hls_ts",
"url": "https://cdn.example.com/hls.m3u8"
}
],
"thumbnail": "https://cdn.example.com/thumbnail.jpg",
"sprite": "",
"duration": 123,
"privacy": "unlisted",
"tracks": [
{
"id": "abcde12345abcde12345a",
"kind": "captions",
"label": "English",
"language": "en",
"url": "https://cdn.example.com/captions.vtt"
}
],
"categories": [],
"enabled": true,
"transcoder": "",
"spherical": false,
"projection": "",
"cards": [],
"gates": [],
"hotspots": [],
"progress": 100,
"status": "ready",
"tags": [],
"created_by": "abcde12345abcde1234a",
"created_time": "2021-02-01T00:00:00.000Z",
"updated_by": "abcde12345abcde12345a",
"updated_time": "2021-02-01T00:00:00.000Z"
},
...
],
"links": {},
"errors": []
}

Optional parameters

NameTypeDefaultInformation
limitString25Maximum number to return
cursorString""Used to get the next page of results: if applicable we return this as part of the links.next URL

GET /videos/:id

Get the details of a single video.

Example request

curl \
-H "Authorization: Bearer YOUR-API-KEY" \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"type": "vod",
"name": "Example video",
"description": "",
"outputs": [
{
"label": "hls_ts",
"url": "https://cdn.example.com/hls.m3u8"
}
],
"thumbnail": "https://cdn.example.com/thumbnail.jpg",
"sprite": "",
"duration": 123,
"privacy": "unlisted",
"tracks": [
{
"id": "abcde12345abcde12345a",
"kind": "captions",
"label": "English",
"language": "en",
"url": "https://cdn.example.com/captions.vtt"
}
],
"categories": [],
"enabled": true,
"transcoder": "",
"spherical": false,
"projection": "",
"cards": [],
"gates": [],
"hotspots": [],
"progress": 100,
"status": "ready",
"tags": [],
"created_by": "abcde12345abcde1234a",
"created_time": "2021-02-01T00:00:00.000Z",
"updated_by": "abcde12345abcde12345a",
"updated_time": "2021-02-01T00:00:00.000Z"
},
"links": null,
"errors": []
}

Get the details of one video

Response format

KeyTypeDescription
idStringThe unique identifier given to this video
typeStringThis can be "vod" (the default) or "event" (if live streaming is included in your package)
nameStringThe name given to this video
descriptionStringThe description given to this video
inputStringFor a 'vod', either an upload ID or the URL to fetch the file from. For a live 'event', the URL to ingest the stream from. This field may not be returned as it may contain authentication data
outputsArrayURLs for the generated versions of the uploaded video file, once it has been processed. A combination of .mpd, .m3u8 and .mp4
thumbnailStringIf one is available, a .jpg image, extracted at source size
spriteStringIf one is available, a .jpg image that contains a grid of preview images used for seeking
durationNumberThe video's duration, in seconds
privacyStringAccsss to the video. Either "public", "private" or "unlisted"
tracksArrayAny captions or subtitles, each as an object
categoriesArrayAn optional array of categories (selected from those listed within categories)
enabledBooleanA video can be temporarily disabled to block access to it rather than deleting it
transcoderStringSet if a custom profile was used to transcode the video's files
sphericalBooleanIs this video filmed in 360 degress
projectionStringIf this video is 360, what projction is used? Assumed "equirectangular"
cardsArrayInterctive content: each element is an object containing the details of a single card
gatesArrayInterctive content: each element is an object containing the details of a single gate
hotspotsArrayInterctive content: each element is an object containing the details of a single hotspot
progressIntFor a vod: the percentage transcoded (will be 0 initially, then 100 once completed)
statusStringFor a vod: this can be either "preparing", "processing", "ready" or "error". A live event also includes "live"
tagsArrayEach element is a lowercase alphanumeric string
created_byStringThe ID of the user who created it (if known)
created_timeStringThe date and time it was created
updated_byStringThe ID of the user who last modified it (if known)
updated_timeStringThe date and time it was last modified

PATCH /videos/:id

Update a video.

The body of the request should contain one, or more, attributes that you would like to update for the video. Please be very careful when making changes to existing items to avoid losing data, particularly if a particular key has sub-keys.

Some fields can only be set by the system while others will be rejected/ignored:

  • input This can not be updated once sent (in the initial POST). The system may update it: for example internally translating a sent upload ID to a file URL.
  • outputs This is managed by the system. The system may update it, for example as new files become available during processing/archiving.
  • progress This is managed by the system: it indicates the percentage progress of the current operation (generally when transcoding).
  • status This is managed by the system: it indicates the status of the current operation.
  • sprite This is managed by the system: a sprite may be generated as part of the transcoding process.

Some of the video's fields are updated using separate API endpoints to make them easier to manage (for example when adding interactive content).

Example request

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X PATCH \
-d '{"name":"New name"}' \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"type": "vod",
"name": "New name",
"description": "",
"outputs": [
{
"label": "hls_ts",
"url": "https://cdn.example.com/hls.m3u8"
}
],
"thumbnail": "https://cdn.example.com/thumbnail.jpg",
"sprite": "",
"duration": 123,
"privacy": "unlisted",
"tracks": [
{
"id": "abcde12345abcde12345a",
"kind": "captions",
"label": "English",
"language": "en",
"url": "https://cdn.example.com/captions.vtt"
}
],
"categories": [],
"enabled": true,
"transcoder": "",
"spherical": false,
"projection": "",
"cards": [],
"gates": [],
"hotspots": [],
"progress": 100,
"status": "ready",
"tags": [],
"created_by": "abcde12345abcde1234a",
"created_time": "2021-02-01T00:00:00.000Z",
"updated_by": "abcde12345abcde12345a",
"updated_time": "2021-02-01T00:00:00.000Z"
},
"links": null,
"errors": []
}

DELETE /videos/:id

Delete a video.

Example request

curl \
-H "Authorization: Bearer YOUR-API-KEY" \
-X DELETE \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {},
"links": null,
"errors": []
}

POST /videos/:id/tracks

Add a track (subtitles or captions).

Currently tracks are only supported for video on-demand (of type 'vod').

The subtitles/captions must be the standard WebVTT format (a .vtt file). To save time, please make sure the .vtt file is valid before uploading it. You can paste its content into a free online validator such as https://quuz.org/webvtt/ to make sure.

This endpoint does not currently support pull ingest from a URL. And so you will first need to upload your .vtt to us before you can add it as a track:

  1. Request an upload ID. See POST /uploads
  2. Upload the .vtt file to that URL. See How do I upload to that URL
  3. Send that upload's ID in url like vidbeo://uploads/THE-ID-HERE

Example request

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{"label": "English", "language": "en", "kind": "captions", "url": "vidbeo://uploads/abcde12345abcde12345a"}' \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/tracks"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"label": "English",
"language": "en",
"kind": "captions",
"url": "https://www.example.com/english.vtt"
},
"links": null,
"errors": []
}

Required parameters

Note: You can get the language code from https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes.

KeyTypeDescription
labelStringA short label that will be shown in the player, like "English"
languageStringThe two-letter international code for the language, like "en"
kindStringEither "captions" or "subtitles"
urlStringThe upload ID of your .vtt file

DELETE /videos/:id/tracks/:id

Delete a track (subtitles or captions).

The first :id is the ID of the video. The second :id is the ID of the track to delete from it.

Example request

curl \
-H "Authorization: Bearer YOUR-API-KEY" \
-X DELETE \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/tracks/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {},
"links": null,
"errors": []
}

POST /videos/:id/thumbnail

Add a new thumbnail image.

Note: For video on-demand, our system will automatically set the initial thumbnail image for you as part of the transcoding process.

If you want to replace it with your own, the image must be a JPEG (the extension .jpg) and be under 100KB in size. We recommend using one that is the same dimensions of the video, normally 1280x720 or 1920x1080.

This endpoint does not currently support pull ingest from a URL. And so you will first need to upload your .jpg to us before you can add it as a thumbnail:

  1. Request an upload ID. See POST /uploads
  2. Upload the .jpg file to that URL. See How do I upload to that URL
  3. Send that upload's ID in url like vidbeo://uploads/THE-ID-HERE

Example request

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{"url": "vidbeo://uploads/abcde12345abcde12345a"}' \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/thumbnail"

Example response

{
"success": true,
"result": {
"url": "https://www.example.com/frame.jpg"
},
"links": null,
"errors": []
}

Required parameters

KeyTypeDescription
urlStringThe upload ID of your .jpg file

DELETE /videos/:id/thumbnail

Note: It is not possible to remove a thumbnail as we felt there was no need to ever do that. So if you do upload the wrong image, simply send another request to replace it with a different image.

If you really don't want any thumbnail image, you could replace it with a black rectangle .jpg.

POST /videos/:id/cards

Add a card (a call-to-action).

Currently cards are only supported for video on-demand (of type 'vod').

We position the card in the top-right corner of the video. Since the video needs to be embedded at a sufficiently large size to see the card, they generally only work on desktops. The card will appear at the chosen time in seconds, and appear until the chosen time in seconds (unless skipped by the viewer).

The icon, if used, comes from the Material Icons. Simply enter the name of one from their list. For example "place".

Example request

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{"name": "A card", "at": 10, "until": 20, "skip": true, "top_text": "Visit our site", "bottom_text": "Find out more", "link": "https://www.example.com", "link_text": "Visit", "icon": "place"}' \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/cards"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"name": "A card",
"at": 10,
"until": 20,
"skip": true,
"top_text": "Visit our site",
"bottom_text": "Find out more",
"link": "https://www.example.com",
"link_text": "Visit",
"icon": "place"
},
"links": null,
"errors": []
}

Required parameters

We require all the parameters to be sent, even if empty:

KeyTypeDescription
nameStringA short label for the card
atIntThe time in seconds the card should appear
untilIntThe time in seconds the card should disappear if not manually skipped
skipBooleanShould the player add a cross icon to let the viewer skip it?
top_textStringA few words of main text at the top of the card
bottom_textStringSome smaller sub text
linkStringThe URL viewers will be taken to if they click the card
link_textStringA short label for the card's button
iconStringThe name of an icon from the Material set to show at the top of the card

PATCH /videos/:id/cards/:id

Update a card (call-to-action).

Example request

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X PATCH \
-d '{"at": 5, "until": 10}' \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/cards/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"name": "A card",
"at": 5,
"until": 10,
"skip": true,
"top_text": "Visit our site",
"bottom_text": "Find out more",
"link": "https://www.example.com",
"link_text": "Visit",
"icon": "place"
},
"links": null,
"errors": []
}

DELETE /videos/:id/cards/:id

Delete a card (call-to-action).

The first :id is the ID of the video. The second :id is the ID of the card to delete from it.

Example request

curl \
-H "Authorization: Bearer YOUR-API-KEY" \
-X DELETE \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/cards/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {},
"links": null,
"errors": []
}

POST /videos/:id/gates

Add a gate.

A gate covers the video. Since the video needs to be embedded at a sufficiently large size for the gate's form fields to be usable, they generally only work on desktops. The gate will appear at the chosen time in seconds. So for a pre-roll gate, enter 0.

We currently support adding form inputs to ask for one or more of these:

  • email
  • first_name
  • last_name
  • telephone

Those must be passed as strings, in an array called fields. As shown below.

Example request

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{"name": "A gate", "at": 10, "skip": true, "top_text": "Please enter your email", "bottom_text": "", "checkbox_text": "", "fields": ["email"]}' \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/gates"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"name": "A gate",
"at": 10,
"skip": true,
"top_text": "Please enter your email",
"bottom_text": "",
"checkbox_text": "",
"fields": ["email"]
},
"links": null,
"errors": []
}

Required parameters

We require all the parameters to be sent, even if empty:

KeyTypeDescription
nameStringA short label for the card
atIntThe time in seconds the gate should appear (0 for pre-roll)
skipBooleanShould the player add a cross icon to let the viewer skip it?
top_textStringA few words of main text at the top of the gate
bottom_textStringSome smaller sub text
checkbox_textStringIf you would like an opt-in checkbox, what should its label be?
fieldsArrayAn array of fields to ask for. One or more from "email" "first_name" "last_name" "telephone"

PATCH /videos/:id/gates/:id

Update a gate.

Example request

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X PATCH \
-d '{"at": 5}' \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/gates/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"name": "A gate",
"at": 5,
"skip": true,
"top_text": "Please enter your email",
"bottom_text": "",
"checkbox_text": "",
"fields": ["email"]
},
"links": null,
"errors": []
}

DELETE /videos/:id/gates/:id

Delete a gate.

The first :id is the ID of the video. The second :id is the ID of the gate to delete from it.

Example request

curl \
-H "Authorization: Bearer YOUR-API-KEY" \
-X DELETE \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/gates/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {},
"links": null,
"errors": []
}

POST /videos/:id/hotspots

Add a hotspot (otherwise known as a clickable region or clickable video).

Currently hotspots are only supported for video on-demand (of type 'vod') as they need content with a defined duration.

The icon, if used, comes from the Material Icons. Simply enter the name of one. For example "place".

The x and y are percentages (since we don't know what size the video will ultimately be embedded at, we can't use pixels). So values of 50 for both will put the hotspot in the centre of the video.

The pitch and yaw values come into play for 360 video (since a two-dimensional x and y position would not make sense for a spherical video). The pitch and yaw values use PI. If your video is not in 360, simply send 0 for those as they are not used.

If you would like this clickable region to be invisible, send 0 for opacity. Normally we show a translucent circle.

Example request

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{"name": "Buy this", "at": 10, "until": 20, "x": 25, "y": 25, "pitch": 0, "yaw": 0, "link": "https://www.example.com", "icon": "shopping_basket", "opacity": 0.5}' \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/hotspots"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"name": "Buy this",
"at": 10,
"until": 20,
"x": 25,
"y": 25,
"pitch": 0,
"yaw": 0,
"link": "https://www.example.com",
"icon": "shopping_basket",
"opacity": 0.5
},
"links": null,
"errors": []
}

Required parameters

We require all these parameters to be sent, even if empty:

KeyTypeDescription
nameStringA short label for the hotspot
atIntThe time in seconds the hotspot should appear
untilIntThe time in seconds the hotspot should disappear
xIntA value between 0 and 100 for where the hotspot should be horizontally positioned (we suggest 25-75)
yIntA value between 0 and 100 for where the hotspot should be vertically positioned (we suggest 25-75)
pitchFloatA value between -PI and PI for where the hotspot should be positioned
yawFloatA value between -PI and PI for where the hotspot should be positioned
linkStringThe URL viewers will be taken to if they click the hotspot
iconStringThe name of an icon from the Material set to show on it, if wanted
opacityFloatA value between 0 and 1 (0 meaning invisible)

PATCH /videos/:id/hotspots/:id

Update a hotspot.

Example request

curl \
-g \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-X PATCH \
-d '{"at": 5}' \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/hotspots/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {
"id": "abcde12345abcde12345a",
"name": "Buy this",
"at": 5,
"until": 20,
"x": 25,
"y": 25,
"pitch": 0,
"yaw": 0,
"link": "https://www.example.com",
"icon": "shopping_basket",
"opacity": 0.5
},
"links": null,
"errors": []
}

DELETE /videos/:id/hotspots/:id

Delete a hotspot.

The first :id is the ID of the video. The second :id is the ID of the hotspot to delete from it.

Example request

curl \
-H "Authorization: Bearer YOUR-API-KEY" \
-X DELETE \
"https://api.vidbeo.com/v2/videos/abcde12345abcde12345a/hotspots/abcde12345abcde12345a"

Example response

{
"success": true,
"result": {},
"links": null,
"errors": []
}