Skip to main content
Version: /v2

Start Composite Merge — Timestamp Watermark - API

Mode: timestampLive ticking clock — 1 video second = 1 wall second
Recorded 2026-05-05 10:00:00 IST
PREVIEW · composite-merge.mp4
Required
startTime
Default position
top-right
Clock advances
1s video = 1s clock
Start a composite-merge transcoding job and burn a live ticking clock onto the output. The clock starts at watermark.startTime and advances in real time (1 second of video = 1 second on the clock). Same endpoint as Start Composite Merge — the only difference is the watermark body parameter is set to type: "timestamp".

HTTP method and endpoint

POST

|

https://api.videosdk.live/v2/transcodings/merge
Headers Parameters

values: YOUR_TOKEN_WITHOUT_ANY_PREFIX

This will be a JWT token generate using VideoSDK ApiKey and Secret.

Note that the token will not include any prefix such as "Basic " or "Bearer ". Just pass a token as value.

You can generate a new token by refering this Guide: Generate Auth token

REQUIRED

values: application/json

This is usefull for json body parameters, so that VideoSDK servers can understand that the incoming body parameter will be a JSON string.

Body Parameters
REQUIRED
Array of participant recordingIds to merge. Must be a non-empty array of unique IDs that belong to the requesting user.
Must be the literal string timestamp for this variant.
Clock origin. Auto-detected by format: 13-digit number = epoch ms, 10-digit number = epoch seconds, anything else parsed as ISO 8601. Examples: 1746439200000, 1746439200, "2026-05-05T10:00:00".

defaultValue: top-right

Allowed: top-left | top-right | bottom-left | bottom-right | center.

defaultValue: 20

Pixels from edge (>= 0). Ignored when position is center.

defaultValue: 24

Pixels.

defaultValue: white

FFmpeg color name (white, red, yellow, …) or #RRGGBB hex.

defaultValue: black@0.3

"color@alpha" (e.g. "black@0.3", "white@0.5") or "none" to disable the background box.

defaultValue: ""

Text prepended to the clock value.

defaultValue: ""

Text appended to the clock value.

defaultValue: "%Y-%m-%d %H:%M:%S"

strftime format string. Common tokens: %Y 4-digit year, %m month (01–12), %d day (01–31), %b short month name, %a short day name, %H hour (00–23), %M minute (00–59), %S second (00–59), %p AM/PM, %Z timezone name.

POST
|
https://api.videosdk.live/v2/transcodings/merge
import fetch from 'node-fetch';
const options = {
method: "POST",
headers: {
"Authorization": "$YOUR_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
"recordingIds": [
"6697685c6eaaaac67ea18130",
"6697685c6eaaaac67ea18131"
],
"webhookUrl": "https://www.example.com/",
"watermark": {
"type": "timestamp",
"startTime": "2026-05-05T10:00:00",
"textConfig": {
"position": "top-right",
"margin": 20,
"fontSize": 24,
"color": "white",
"background": "black@0.3",
"prefix": "Recorded ",
"suffix": " IST",
"format": "%Y-%m-%d %H:%M:%S"
}
}
}),
};
const url= `https://api.videosdk.live/v2/transcodings/merge`;
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
RESPONSE
{
"id": "665fcf7f2abe9a2807e42700",
"recordingIds": [
"6697685c6eaaaac67ea18130",
"6697685c6eaaaac67ea18131"
],
"roomId": "abcd-efgh-ijkl",
"sessionId": "6847c231fbaa8b416bc87014",
"status": "processing",
"task": "composite-merge",
"startedAt": "2025-06-10T05:45:02.730Z"
}

Got a Question? Ask us on discord