🌟 Introduction
ZapCap is a REST API for programmatically adding high-quality animated subtitles to videos. Process videos in 48 languages with up to 99.9% transcription accuracy, and transform them using 20+ designer templates.
Quick example using jq and curl: Add animated subtitles to a video
# First, upload the video and get the ID
VIDEO_ID=$(curl -X POST "https://api.zapcap.ai/videos" \
-H "x-api-key: YOUR_API_KEY" \
-F "file=@video.mp4" | jq -r .id)
# Then create the task using the video ID
curl -X POST "https://api.zapcap.ai/videos/$VIDEO_ID/task" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "template_id",
"autoApprove": true
}'For complete examples in Node.js, Python, and curl, see our Caption a Video Guide
Why Choose ZapCap?
- High-Performance Processing: Process 4k videos in minutes
- Enterprise-Ready: Scale to thousands of videos with 99.9% uptime SLA
- Developer-First: Well-documented REST API with examples in multiple languages
- Production-Tested: Powers subtitle generation for Fortune 500 companies and leading content creators
🛠 Core Features
📝 Advanced Transcription Engine
- 99.9% accuracy across 48 languages
- Automatic punctuation and formatting
- Custom vocabulary handling
🎨 Powerful Template System
// Customize templates programmatically
{
"renderOptions": {
"subsOptions": {
"emoji": true,
"animation": true,
"emphasizeKeywords": true
},
"styleOptions": {
"fontSize": 46,
"fontColor": "#ffffff"
}
}
}
⚡ Built for Scale
- Asynchronous processing with webhooks
- Regional edge processing
- Automatic content delivery via CDN
🎯 Common Use Cases
1. Content Management Systems
Automatically generate subtitles when videos are uploaded to your CMS:
// Server-side webhook handler (Express.js)
app.post("/video-uploaded", async (req, res) => {
const { videoUrl } = req.body;
// Upload video to ZapCap
const uploadRes = await fetch("https://api.zapcap.ai/videos/url", {
method: "POST",
headers: {
"x-api-key": process.env.ZAPCAP_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ url: videoUrl }),
});
const { id: videoId } = await uploadRes.json();
// Create captioning task
await fetch(`https://api.zapcap.ai/videos/${videoId}/task`, {
method: "POST",
headers: {
"x-api-key": process.env.ZAPCAP_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
templateId: process.env.TEMPLATE_ID,
autoApprove: true,
}),
});
res.json({ status: "processing" });
});
2. Video Editing Platforms
Add a backend endpoint that your frontend calls:
// Server-side API route - never expose API keys to the client
app.post("/api/add-subtitles", async (req, res) => {
const { videoId, templateId } = req.body;
const response = await fetch(`https://api.zapcap.ai/videos/${videoId}/task`, {
method: "POST",
headers: {
"x-api-key": process.env.ZAPCAP_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ templateId, autoApprove: true }),
});
res.json(await response.json());
});
3. Multi-Language Distribution
Create translated versions of your video for different markets:
// Server-side batch translation
async function createTranslations(videoId, templateId, languages) {
const tasks = await Promise.all(
languages.map((language) =>
fetch(`https://api.zapcap.ai/videos/${videoId}/task`, {
method: "POST",
headers: {
"x-api-key": process.env.ZAPCAP_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
templateId,
translateTo: language,
autoApprove: true,
}),
}).then((res) => res.json())
)
);
return tasks;
}
// Usage: Create Spanish, French, and German versions
createTranslations(videoId, "template_id", ["es", "fr", "de"]);
🚀 Get Started
- Get your API key
- Follow our 5-minute quickstart
- Explore the full API reference