A video editing API does in code what a person does in a video editor: it trims and joins clips, places images and text, adds music, voice-overs and subtitles, and renders the result as an MP4. Instead of a timeline, you send a description of the video; instead of an export button, you get a URL.

It is one of several kinds of video APIs. Hosting and streaming APIs store and deliver videos you already have; AI generation APIs invent footage from a prompt. An editing API assembles a finished video from your own material and data, which is why it is the one used to make hundreds of videos from a template.

Get a free API key — 10 minutes of video included →


How it works

  1. Describe the video in JSON. A movie has scenes; each scene has elements (video clips, images, text, voice-overs, audio, HTML). Values that change from one video to the next go in variables.
  2. Send it to the API. One POST /v2/movies with your API key. The response returns a project ID straight away.
  3. Get the MP4. Poll GET /v2/movies?project=…, or let the API deliver it by webhook, FTP, SFTP, email or to your own Amazon S3 bucket.
curl -X POST https://api.json2video.com/v2/movies \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d @movie.json
{
  "success": true,
  "project": "JkGxEoPRF9EgRb32",
  "timestamp": "2026-10-18T10:49:52.924Z"
}

Rendering runs on our servers. There is nothing to install, no FFmpeg to maintain and no render farm to scale.


Edit existing videos: trim, join, music, subtitles

The most common job is editing footage you already have. This movie takes 20 seconds of an interview starting at 0:12, adds 8 seconds of muted b-roll with a fade, puts music underneath and transcribes the whole thing into subtitles:

{
  "resolution": "full-hd",
  "elements": [
    { "type": "audio", "src": "https://example.com/music.mp3", "volume": 0.3 },
    { "type": "subtitles", "language": "auto" }
  ],
  "scenes": [
    {
      "elements": [
        { "type": "video", "src": "https://example.com/interview.mp4", "seek": 12, "duration": 20 }
      ]
    },
    {
      "transition": { "style": "fade", "duration": 0.5 },
      "elements": [
        { "type": "video", "src": "https://example.com/b-roll.mp4", "seek": 3, "duration": 8, "muted": true },
        { "type": "text", "text": "Thanks for watching", "style": "003", "position": "bottom-left" }
      ]
    }
  ]
}

Elements in the movie-level elements array (here the music and the subtitles) run across every scene. seek sets where a clip starts and duration how long it plays.

Make videos from data: templates and variables

The second job is making many similar videos. Put the parts that change in variables and send the same template with different values, one request per video. This slideshow builds one scene per item in a list, so the same template works for 3 photos or 30:

{
  "resolution": "instagram-story",
  "variables": {
    "photos": [
      { "url": "https://example.com/front.jpg", "caption": "Front garden" },
      { "url": "https://example.com/bedroom.jpg", "caption": "Main bedroom" }
    ]
  },
  "scenes": [
    {
      "iterate": "photos",
      "duration": 4,
      "transition": { "style": "fade", "duration": 0.5 },
      "elements": [
        { "type": "image", "src": "{{url}}", "zoom": 2 },
        { "type": "text", "text": "{{caption}}", "style": "003", "position": "bottom-left" }
      ]
    }
  ]
}

Templates can also show or hide elements with conditions, compute values with expressions, and be saved in your account and rendered by ID with only the variables.


What you can put in a video

Element What it does
videoClips from any URL: trim, crop, resize, speed, loop, mute, chroma key, pan and zoom.
imagePhotos and graphics with zoom and pan (Ken Burns), position and size.
textTitles and captions with animated styles and any Google Font.
voiceText-to-speech voice-overs with Azure and ElevenLabs voices; the scene lasts as long as the voice.
subtitlesAutomatic subtitles transcribed from the audio, word-by-word styles, or your own SRT, VTT or ASS file.
audioMusic and sound effects with volume, fades and trimming.
htmlAny HTML and Tailwind CSS rendered as a layer: price tags, charts, lower thirds.
componentReady-made animated components from the component library.
audiogramAnimated waveforms for podcasts and audio clips.

Output: any size up to 4K, landscape, square or vertical, MP4. Transitions between scenes, a thumbnail for every render, and webhooks when it is done. See the full JSON reference.


What people build with it


Ways to use it


Comparing video editing APIs

Entry plans as of October 2026, checked on each vendor's pricing page. Prices per minute are for 1080p video on the entry plan.

API How you describe a video Entry price Per minute Voice-overs
JSON2VideoScenes and elements in JSON$49.95/mo, 200 min$0.25Included (Azure, ElevenLabs)
ShotstackTimeline of tracks and clips in JSON$39/mo, 250 min$0.16AI credits
CreatomateEditor templates or RenderScript JSON$54/mo, 2,000 creditsabout $1.00Your own ElevenLabs key
PlainlyAfter Effects templates$69/mo, 50 min$1.38Not built in
BannerbearEditor templates + workflows$49/mo, 1,000 creditsabout $6AI credits
RemotionReact code, rendered on your AWS LambdaFree up to 3 people; companies from $100/moabout $0.02 of Lambda compute + licenceBring your own
FFmpeg (self-hosted)Command-line filtersFree softwareYour serversBring your own

For AI coding agents, JSON2Video, Creatomate, Plainly and Shotstack (beta) all offer official MCP servers. The step-by-step setup is in video editing with Claude Code.

How to choose. For silent edits at very high volume, Shotstack is cheaper per minute. For full creative control with a React team, Remotion. For After Effects designs, Plainly. For images plus short animations, Bannerbear. JSON2Video fits best when videos are narrated, built from data with templates that adapt to the content, made from no-code tools or AI agents, or bought in one-off packs that never expire.


Pricing

One credit is one second of rendered video, at any resolution. Managed voice-overs and automatic subtitles use 0 credits today, and failed renders are not charged.

See all plans.

Start free →


Frequently asked questions

What is a video editing API?

An API that edits and renders videos from instructions sent by code: trimming and joining clips, adding images, text, music, voice-overs and subtitles, and exporting an MP4. It replaces manual work in a video editor when you need many videos or videos made automatically.

Is there a free video editing API?

JSON2Video's free account includes 600 credits (10 minutes of video, up to 60 seconds per video, watermarked) with no credit card. FFmpeg is free software, but you run and maintain it yourself.

Should I use FFmpeg or a video editing API?

FFmpeg is free and powerful, but you write filter graphs, handle fonts, voice-overs and subtitles yourself, and run the servers that render. An API is the faster path when you want templates, voice-overs and subtitles out of the box and no infrastructure. Our FFmpeg course covers the do-it-yourself route.

Can I add subtitles to an existing video with the API?

Yes. Put the video in a scene and add a subtitles element: the audio is transcribed automatically and the captions are burnt into the video, with word-by-word styles. You can also pass your own SRT, VTT or ASS file.

Which programming languages can I use?

Any language that can send an HTTPS request with JSON: Python, Node.js, PHP, Ruby, Go, Java or cURL. There are SDKs for Node.js and PHP, and no-code integrations for n8n and Make.

How long can a video be?

Up to 60 seconds per video on the free plan, and up to 30 minutes per video on every paid plan and credit pack.

Published on October 18th, 2026

Author
Joaquim Cardona
Joaquim Cardona Senior Internet business executive with more than 20 years of broad experience in Internet business, media sector, digital marketing, online video and mobile technologies.