Add a password
Protect a video or playlist with a password. Change it when access needs to change.
Upload or record a video. Share a link, embed it on your site and see how it performs.
Free plan. No credit card.
Client previews, lessons or team updates. Share each video with the access settings you need.
How it worksProtect a video or playlist with a password. Change it when access needs to change.
Give members of a saved audience their own access links.
Set which websites may embed your videos.
Add a video file or capture your screen or camera in your browser.
Choose a cover, add chapters and set who can watch.
Send the link or copy the embed code for your website.
From the first recording to the next update. Features vary by plan.
Capture your screen, camera or both for demos, walkthroughs and updates.
Replace a video without changing the link or embed you've already shared.
Track views, watch time and where viewers stop watching.
Upload and manage videos through the API, or connect a compatible AI tool through MCP.
0:24
1:08
0:42Put demos, lessons or client previews in a playlist. Share the collection from one page.
Turn a playlist into a vertical viewing experience. Share a link or embed it on your site. Your audience just presses play.
Tap the sides to explore. The videos play on repeat.
Add video uploads to your app or workflow. Send the file, let Vidnap process it, then share or embed the result.
Available on plans with API access.
import { createReadStream } from 'node:fs';
import { stat } from 'node:fs/promises';
import { basename } from 'node:path';
import { randomUUID } from 'node:crypto';
const file = './video.mp4';
const token = process.env.VIDNAP_API_TOKEN;
if (!token) throw new Error('Set VIDNAP_API_TOKEN');
const { size } = await stat(file);
if (size <= 0 || size >= 100_000_000) {
throw new Error('Use an MP4 under 100 MB for this example');
}
async function api(path, body) {
const response = await fetch(`https://api.vidnap.com/v1${path}`, {
method: body ? 'POST' : 'GET',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: body ? JSON.stringify(body) : undefined,
});
if (!response.ok) throw new Error(await response.text());
return response.json();
}
const upload = await api('/uploads/init', {
filename: basename(file), mimeType: 'video/mp4', size,
clientOperationId: randomUUID(),
});
if (!upload.uploadUrl) throw new Error('Direct upload URL missing');
const transfer = await fetch(upload.uploadUrl, {
method: 'PUT',
headers: { 'Content-Type': 'video/mp4', 'Content-Length': String(size) },
body: createReadStream(file),
duplex: 'half',
});
if (!transfer.ok) throw new Error(await transfer.text());
await transfer.arrayBuffer();
await api('/uploads/complete', { uploadId: upload.uploadId });
const status = await api(`/uploads/${encodeURIComponent(upload.uploadId)}`);
console.log(status);
Choose the storage, tools and limits that fit your work.
Yes. Create an account without a credit card. The Free plan has its own storage, upload and retention limits.
Public videos play from a link or embed without a vidnap account. Protected videos require the password or access you set.
Yes, on plans with 4K enabled. Upload size, storage and processing limits depend on your plan.
Yes. Copy the embed code for a video or playlist. Plans with domain restrictions let you choose which websites can use the player.
Compare the plans above for storage, upload limits and tools such as 4K, analytics and API access.
Upload a file. Get a link you can share.