How to create & upload a video
The concept of creating and uploading a video is pretty simple:
- Create a video object: Think about it as a box or shell for the video. Once you've created a video object, it's an empty shell, however, it has an id and assets.
- Upload a video: Now you can upload your video into that object.
A tutorial for uploading a video with curl can be found here
A more visual representation can be found below:

Important things to know
All qualities encoding: The video object will include up to 6 responsive video streams from 240p to 4K
Video size: There's no file size limitation but the files will be compressed to fit delivery needs (4k max def with x264 + aac at 60fps max )
Highest quality encoding by default: Mp4 encoded versions are created at the highest quality (max 4K) by default.
360° videos support: Panoramic videos are videos recorded in 360°. You can toggle this after your 360° video upload.
Video Access Management: When creating a video object, it can be either private or public. The feature allows you to change it later by updating the video object.
Progressive Upload: Ability to upload videos in a progressive manner while they are being recorded.
Progressive video upload & uploading large videos ⏫
Some videos you might upload could be very large in size. We made sure that this is addressed and that there's a convenient way to upload large videos while breaking them into chunks. Please be sure to read the guide on how to make progressive video upload.
Video Access Management 🔒
The video object will be created as public by default. If you want to make the video private, you just need to create a private video object or update it later. You can read all about Private Videos here
- Searchable parameters: title, description, tags and metadata
$ curl https://ws.api.video/videos \
-H 'Authorization: Bearer {access_token} \
-d '{"title" : "My video", "description" : "so many details", "mp4Support" : true }'
Create a video from a URL 🔗
You can also create a video directly from a video hosted on a third-party server by giving its URI in source parameter:
$ curl https://ws.api.video/videos \
-H 'Authorization: Bearer {access_token} \
-d '{"source":"http://uri/to/video.mp4", "title":"My video"}'
In this case, the service will respond 202 Accepted and ingest the video asynchronously.
Track users with Dynamic Metadata 🔍
Metadata values can be a key:value where the values are predefined, but Dynamic metadata allows you to enter any value for a defined key. To defined a dynamic metadata pair use:
"metadata":[{"dynamicKey": "__dynamicKey__"}]
The double underscore on both sides of the value allows any variable to be added for a given video session. Added the the url you might have:
<iframe type="text/html" src="https://embed.api.video/vod/vi6QvU9dhYCzW3BpPvPsZUa8?metadata[classUserName]=Doug" width="960" height="320" frameborder="0" scrollling="no"></iframe>
This video session will be tagged as watched by Doug - allowing for in-depth analysis on how each viewer interacts with the videos.
Resources
-
Full list of tutorials that demonstrate this endpoint.