A template with modifications
{
"template_id": "YOUR_TEMPLATE_ID_HERE",
"modifications": {
"Text-1": "This text is placed in the element Text-1",
"Video-1": "https://cdn.creatomate.com…/demo/video1.mp4"
},
"render_scale": 0.75,
"max_width": 1080,
"max_height": 1080,
"webhook_url": "https://example.com…/webhook",
"metadata": "Any text value"
} Create a render , read on Nov 7, 2026.
{
"input": "https://example.com/video1.mp4",
"filename": "video1-titled.mp4",
"resize": {
"width": 1080,
"height": 1080,
"fit": "contain",
"enlarge": false
},
"text": [
{
"text": "This text is placed in the element Text-1",
"font": "inter-bold",
"size": 44,
"position": "bottom"
}
],
"webhook_url": "https://example.com/webhook",
"metadata": {
"note": "Any text value"
}
} curl "$VIDEXO_API_URL/v1/transcode" \
-H "Authorization: Bearer $VIDEXO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": "https://example.com/video1.mp4",
"filename": "video1-titled.mp4",
"resize": {
"width": 1080,
"height": 1080,
"fit": "contain",
"enlarge": false
},
"text": [
{
"text": "This text is placed in the element Text-1",
"font": "inter-bold",
"size": 44,
"position": "bottom"
}
],
"webhook_url": "https://example.com/webhook",
"metadata": {
"note": "Any text value"
}
}' const response = await fetch(`${process.env.VIDEXO_API_URL}/v1/transcode`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VIDEXO_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"input": "https://example.com/video1.mp4",
"filename": "video1-titled.mp4",
"resize": {
"width": 1080,
"height": 1080,
"fit": "contain",
"enlarge": false
},
"text": [
{
"text": "This text is placed in the element Text-1",
"font": "inter-bold",
"size": 44,
"position": "bottom"
}
],
"webhook_url": "https://example.com/webhook",
"metadata": {
"note": "Any text value"
}
}),
});
const job = await response.json(); ffmpeg \
-i https://example.com/video1.mp4 \
-map 0:v:0 \
-vf "scale='min(iw,1080)':'min(ih,1080)':force_original_aspect_ratio=decrease:force_divisible_by=2,drawtext=expansion=none:fontfile=/opt/videxo/fonts/Inter-Bold.ttf:text=This text is placed in the element Text-1:fontsize=44:fontcolor=0xFFFFFF:x=(w-tw)/2:y=h-48-55:y_align=font" \
-c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
-map "0:a:0?" \
-c:a aac -b:a 128k -movflags +faststart \
video1-titled.mp4 POST /v1/transcode makes video1-titled.mp4: the clip scaled down to fit within 1080 by 1080, its shape kept and never enlarged, with the text at the bottom.
- Videxo stores no template. Where the text sits, its font and the frame are in the body, so your code holds what the template held.
metadatais a set of string pairs, not one value.max_widthandmax_heightbecomeresizewithenlarge: false.render_scalehas no equivalent: a size is set in pixels. Creatomate’s docs say it is ignored once a maximum is set, so nothing is lost here.