Use case · E-commerce localization

Localize your product video ads for every market

One source video. Captioned and translated per market. Backend API

You shot one hero product video. Now it needs captions in the language of every market you sell into — same brand, same styling, same product name spelled right. ZapCap is the caption-rendering and translation API that turns one master clip into a localized MP4 per market, without a render farm.

One source → many markets · brand-name hints · per-minute billing
The problem

One ad, a dozen markets, a localization bottleneck

Your catalog video ads convert — in the language they were shot in. Every new market means re-captioning, re-translating, and re-rendering the same source clip while keeping the brand name and product spelling intact. Done by hand, it never keeps pace with the merchandising calendar.

  • Translation drift — agency turnaround, inconsistent terminology, product names mangled.
  • Re-render per market — the same master clip exported by hand, market by market.
  • Brand consistency — caption font, colour, and placement must match across every locale.
  • Script-correct rendering — caption wrapping stays readable per market, with CJK / Thai detail covered in multilingual rendering.
  • Catalog scale — new SKUs and new drops mean the same work, again, on a deadline.
  • Storage & delivery — finished localized MP4s, organised per market, ready for ad managers.
Reference architecture

Where ZapCap sits in your localization pipeline

Drop the API behind your asset pipeline. Marketing uploads one master clip; your backend fans out one render task per target market and collects the finished files.

Your assets
Master product video
Target markets list
Source clip in your CDN
Your backend
Localization job runner
Holds ZAPCAP_API_KEY (server-only)
/webhooks/zapcap handler
ZapCap
POST /videos
Task per market · translateTo
Localized renderUrl
Brand-name accuracy: pass approved spelling hints via dictionary; for fully verbatim ad copy, supply your own approved transcript via the transcript param rather than relying on ASR.
Backend integration

One upload, one task per market

Upload the master clip once, then fan out a render task per target market with translateTo. Each task comes back as its own localized MP4 via webhook.

WEBHOOK PAYLOAD
{
  "eventId":      "evt_8kQ2...",
  "taskId":       "tsk_2hP4...",
  "event":        "render.completed",
  "renderUrl":    "https://cdn.zapcap.../de.mp4",
  "transcriptUrl":"https://cdn.zapcap.../de.json"
}
  • Map taskId → market when you create each task.
  • Verify the x-signature header before fetching renderUrl.
  • Dedupe webhook deliveries on eventId.
1// Localize one master clip across your target markets
2const KEY = process.env.ZAPCAP_KEY;
3const ZAP = (path, body) =>
4 fetch(`https://api.zapcap.ai${path}`, {
5 method: 'POST',
6 headers: { 'x-api-key': KEY, 'Content-Type': 'application/json' },
7 body: JSON.stringify(body),
8 }).then(r => r.json());
9 
10const TEMPLATE = "<TEMPLATE_UUID>"; // from GET /templates — your brand caption preset
11const MARKETS = ['es', 'de', 'fr', 'zh']; // language codes, e.g. zh (not zh-CN)
12 
13export async function localize(masterUrl, brandTerms) {
14 // 1. upload the master clip once
15 const video = await ZAP('/videos/url', { url: masterUrl });
16 
17 // 2. one render task per market
18 for (const lang of MARKETS) {
19 const task = await ZAP(`/videos/${video.id}/task`, {
20 templateId: TEMPLATE,
21 translateTo: lang,
22 dictionary: brandTerms, // transcription hints: brand + product names
23 notification: {
24 type: 'webhook',
25 notificationsFor: ['render'],
26 recipient: 'https://shop.example.com/hooks/zapcap',
27 },
28 });
29 // map taskId -> market so the webhook can file the right MP4
30 await db.localizations.create({ id: task.taskId, market: lang, status: 'processing' });
31 }
32}
State machine

Lifecycle of one localized render

Each market is its own task with its own lifecycle. Track them independently and assemble the localized set as each one completes.

pending
transcribing
transcriptionCompleted
rendering
completed
In your dashboard
Show a per-market grid — "DE ready, FR rendering, ZH queued" — so marketing sees the localization set fill in.
On webhook
File the renderUrl under the right market and notify the ad-ops owner that the localized cut is ready to upload.
On failure
Re-create the task for that single market only; the other localized renders are unaffected.
Launch checklist

Before you localize your first campaign

A short list to keep a multi-market caption rollout from drifting off-brand. Asset pipeline, terminology, and delivery in one place.

  • One brand caption preset Pick a templateId from GET /templates and reuse it across every market.
  • Brand terms in your dictionary Feed product and brand names so transcription spells them right before translation.
  • Approved transcript path for hero copy For verbatim ad lines, supply your own transcript instead of relying on ASR.
  • Target-market list as code Drive the fan-out from a single source of truth, not a spreadsheet.
  • Per-market storage convention File each renderUrl by market so ad-ops can find the right cut.
  • Webhook signature verified Check x-signature on every payload; dedupe on eventId.
  • Credit-balance check before a campaign fan-out A dozen markets is a dozen renders — confirm balance before queueing.
Build vs buy

The localization stack, honestly

Build it yourself

In-house localization pipeline

  • 1Translation vendor wiring — turnaround, terminology control, review loops.
  • 2Caption layout engine — per-market line breaks, safe zones, and readable wrapping.
  • 3Brand style enforcement — font, colour, placement consistent per market.
  • 4Render workers — ffmpeg / libass, autoscaling for campaign spikes.
  • 5Per-market job tracking — one source clip, many parallel outputs.
  • 6Output storage — organised per market, expiry, cleanup.
  • 7Billing meter — per-minute counters across the catalog.
Use ZapCap

Localization as a primitive

  • 1POST /videos — upload the master once.
  • 2translateTo per task — one localized render per market.
  • 3Webhook handler — verify, file by market, notify ad-ops.
When ZapCap isn't the right answer: if you need to assemble whole video ads from data-driven templates or product feeds, a broader video automation API (Creatomate, Shotstack, Bannerbear) likely fits better. See our honest alternatives comparisons.
Customer · Anonymized

A DTC e-commerce brand replaced manual per-market caption work with the ZapCap API and localizes each new product video from a single master clip

One source upload now fans out into a localized MP4 per market through a webhook handler, instead of an agency ticket and a manual export per locale. Captions stay on-brand because every market uses the same caption preset.

1 master
Source clip per campaign
per market
One localized render each
~0 lines
Of ffmpeg / render infra
per-minute
Billing passes through cleanly

For e-commerce teams

Pass your brand and product names through the dictionary param — these are transcription hints, so the source transcript gets them right before anything is translated. For ad lines that must stay verbatim, supply your own approved transcript via the transcript param instead of relying on automatic transcription.

Localize one video for every market

Backend-only API, webhook-native, from $0.10/min base usage pricing. One master clip in, a localized MP4 per market out.