Add a password
Protect a video or playlist with a password. Change it when access needs to change.

Upload a video. Share a link, embed it on your site and see how it performs.
Free plan. No credit card.Share a link or embed it on your website. A clean player keeps the focus on your content, without ads.
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.
Put demos, lessons or client previews in a playlist. Share the collection from one page.
Create a playlistClient previews, lessons or team updates. Share each video with the access settings you need.
Protect 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.
From the first upload to the next update. Features vary by plan.
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.
Ask a question, capture interest or point viewers to their next step. Actions bring the interaction into your video or playlist.
Interactive demo. Responses are not saved; no navigation is performed.
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);
Practical pages for the jobs people hire vidnap to do — upload, share, protect and embed.
Drag and drop MP4, MOV or WEBM. Encode for the web and get a private or public link in seconds.
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.