Invisible video watermarking API

Send a short MP4 or MOV and a reference. You get the clip back with an invisible watermark in every frame, each one read back from the finished file.

Switch between the original and the watermarked frame, then look at the difference.

campaign-master.mp4frame 55 of 120
Watermarked frame. Five red bottle caps on a white surfaceAfter: the same frame of the delivered copy
120 of 120
frames returned the watermark after one more compression
48 of 48
frames of a 2-second cut returned it too
35.6 dB
median PSNR over every frame, after that compression
A real API result: one frame of a five-second, 640 × 360 clip, stored losslessly. The delivered copy is the API’s lossless output re-encoded once to an everyday H.264 profile, so the difference includes that encode. One clip, not a guarantee for every video. Fictional scenario; no affiliation with Coca-Cola.

What goes in. What comes back.

The video API takes short H.264 clips as files. It isn’t a streaming or live product, and it is strict about what it accepts so that every frame can be verified.

What you send

One clip per request, as an MP4 or MOV file.

  • One H.264 video track: progressive, 8-bit, 4:2:0
  • A constant frame rate from 1 to 60 fps
  • Even dimensions, square pixels, no rotation
  • No audio, or one mono or stereo AAC-LC track

What comes back

The same file type, with the watermark in every frame.

  • The same frame count and frame timing
  • Lossless H.264, which can be much larger than the file you sent
  • Your audio, copied packet for packet and not watermarked
  • A master, not a file every phone and browser can play: re-encode it for delivery

Refused

You get an error and no charge. Nothing is converted silently.

  • HEVC, ProRes, AV1, VP9 and other codecs
  • 10-bit, HDR and interlaced video
  • Variable frame rates and fragmented MP4
  • Extra tracks, subtitles and attachments

How long a clip can be

Three limits apply together: 240 frames, 1 megapixel per frame and 40 megapixels across the whole clip. The larger the frame, the shorter the clip.

Files go in at up to 20 MB and come back at up to 100 MB.

Longest clip by frame size
Frame sizeFrames24 fps30 fps
1920 × 1080Refused: over 1 megapixel per frame
1280 × 720431.8 s1.4 s
960 × 540773.2 s2.6 s
640 × 3601737.2 s5.8 s
480 × 27024010.0 s8.0 s

Checked after the final encode.

Saving a video changes its pixels a little, so a watermark that was fine before saving can be broken after it. Etchv builds the finished clip, then opens it again and reads the watermark back from every frame.

A frame the codec can’t keep above the quality floor fails early and names itself in the error.

The floor applies to the lossless file the API returns. The example above was re-encoded once more for the web, so its figures include that encode.

How clips are verified

Checked on the finished file

The file

  • Same container, same number of frames
  • Frame timing unchanged
  • Audio packets and their timing unchanged

Each frame

  • At least 35 dB PSNR against your original, color conversion and encoding included
  • The exact watermark read back from the frame
200
Every frame passed. You receive the clip.
422
A frame failed. You receive an error, never a clip.

Every frame answers for itself.

Send a clip to the detect endpoint and get a result for each frame. The clip counts as watermarked only when every frame returns the same watermark.

From a cut

Each frame carries the whole watermark, so you don’t need the whole clip. In the saved run above, a 2-second cut was sent on its own and every frame of it returned the watermark.

After a re-encode

The copy in that run had been re-encoded once to an everyday H.264 profile before it was checked. That is one clip at one high-quality setting, not a survival rate.

What isn’t promised

Detection reads H.264 MP4 and MOV files up to 95 MB, within the same frame limits, so a screen recording or a platform’s transcode often has to be cut and re-wrapped first. Heavier compression, resizing and cropping can remove the mark, and audio isn’t watermarked at all.

Saved run120 frames
  • 120 of 120frames of the delivered copy returned the watermark
  • 48 of 48frames of the cut returned it again, on their own

Lowest confidence on any frame: 0.991

How long it takes. What it costs.

Video watermarking is part of the Growth plan and above, and of the free trial.

Measured on the live API

  • EmbedCPU26.5 s
  • EmbedGPU, on Business and Enterprise13.0 s
  • DetectCPU4.9 s

Median time to finish one request at a time, measured September 29, 2026 on 5 short test clips of up to 60 frames. Each finished frame is saved, so a retried job only redoes what is missing. Across every published run, 750 of 750 video operations completed.

Performance benchmarks

Credits for video

1
credit per 24 frames watermarked, about a second: a 120-frame clip is five credits
1
credit per clip checked, whatever its length, found or not
0
for refused or failed clips, retries with the same idempotency key and result downloads
3×
credits on GPU, or the standard rate if the request runs on CPU instead
Plans and credits

Two requests. Then collect the result.

Most clips take longer than the 20-second wait of a direct request, so send them as jobs and fetch the result, or take a signed webhook.

RequestPOST /watermarks/videos/async
curl --fail-with-body https://api.etchv.com/watermarks/videos/async \
  -H "X-API-Key: $ETCHV_API_KEY" \
  -H "Idempotency-Key: delivery_0084" \
  -F 'file=@teaser.mp4' \
  -F 'data={"delivery":"delivery_0084"}'

# Then, when the job has succeeded:
curl --fail-with-body https://api.etchv.com$RESULT_URL \
  -H "X-API-Key: $ETCHV_API_KEY" \
  -D response-headers.txt \
  --output teaser-watermarked.mp4
Response202 · application/json
{
  "request_id": "req_0123…cdef",
  "status": "queued",
  "operation": "embed",
  "status_url": "/watermarks/jobs/req_0123…cdef",
  "result_url": "/watermarks/jobs/req_0123…cdef/result",
  "frame_count": 120,
  "credits": 5
}
RequestPOST /watermarks/videos/detect
curl --fail-with-body https://api.etchv.com/watermarks/videos/detect \
  -H "X-API-Key: $ETCHV_API_KEY" \
  -F 'file=@found-clip.mp4'
Response200 · application/json
{
  "watermarked": true,
  "watermark_id": "ea112880a8774fd1a251…b57654f3",
  "confidence": 0.99,
  "units": [
    { "index": 0, "watermarked": true, "confidence": 0.99,
      "watermark_id": "ea112880a8774fd1a251…b57654f3" },
    { "index": 1, "watermarked": true, "confidence": 0.99,
      "watermark_id": "ea112880a8774fd1a251…b57654f3" }
  ]
}

For clips that leave early.

Today the API takes preview-size clips: a few seconds at 360p, a second or two at 720p. That covers more work than it sounds.

  • Advertising

    Teasers before they air

    A teaser cut goes to the agency, the media partner and the client for approval. Each of them gets a different copy.

    The watermark leads toRecipient’s copy
  • Product launches

    Reveal clips under embargo

    A few seconds of a new product reach press and retail partners days early. A clip that appears online points to one delivery.

    The watermark leads toDelivery record
  • VFX and animation

    Shots out for review

    Review proxies of single shots travel between vendors and reviewers long before the film does. Every reviewer’s shot carries its own watermark.

    The watermark leads toVendor and version
  • Games

    Footage for press

    Embargoed gameplay moments go to press and creators ahead of a reveal. Each outlet’s clip is its own copy.

    The watermark leads toOutlet and embargo
  • Generative video

    Clips with a record

    Most generated clips are a few seconds long. Mark each one as it is made and keep the model, prompt reference and owner in your own record.

    The watermark leads toGeneration record
  • Sports and events

    Highlights for partners

    A goal, a finish, a reveal: preview-size highlights sent to rights partners each carry that partner’s own watermark.

    The watermark leads toPartner feed

Design a recipient attribution workflow

Every frame.
The same watermark.

Start with 200 free credits: enough to watermark about 200 seconds of video.

7 days · 200 credits · No card required

Your privacy, your choice

We use essential cookies to keep Etchv working. Optional analytics helps us improve the site. Analytics is on by default; you can turn it off in preferences. PostHog loads only if you accept all. Privacy policy

ETCHV

Privacy preferences

Choose what you allow on this browser. Analytics is enabled by default. You can turn it off, and change your choice at any time.

Essential

Always active

Supports secure sign-in, account sessions, site security, and remembering your privacy choice. These are needed for Etchv to work.

Analytics

Helps us understand visits and improve the website using page-view and device statistics, which do not use cookies. PostHog also measures visits and campaigns and may set cookies; it loads only after you save a choice with analytics on. Turning this off stops future analytics events.

We do not load advertising scripts. Meeting calendars load only when you open them. These preferences do not change your account, watermarking requests, or asset storage.

Your choice is remembered for 180 days on this browser. Privacy policy