← Home
DEVELOPERS

Published · Updated

Video Editing API

Programmatic video editing means producing edited video from code instead of from a person operating a timeline. Three architectures answer to that name — template renderers, headless NLE and ffmpeg pipelines, and agentic tool registries — and they solve different problems. Choosing the wrong one is the expensive mistake in this category, so this page describes all three, names the real products in each, and says plainly which one Valmera is.

READ THIS BEFORE YOU SIGN UP

Valmera does not publish a conventional REST video editing API. It publishes a Model Context Protocol (MCP) server: you drive it from a model rather than from your own code, and slow operations return a job id plus a wait_for_job tool instead of a webhook.

If you came here for an endpoint you can POST an edit specification to from a queue worker, Valmera is not that and the products below are. If you came here because you have recordings that need judgement rather than a template that needs filling, keep reading — the shape is different on purpose.

See the Tool Registry Before You Commit

108 tools, published and documented. 50 free credits on signup, no card.

Start free →
See pricing →

The Three Architectures

Everything sold as a video editing API is one of three shapes. The difference is not the feature list. It is who composes the specification, and whether anything in the system ever looks at your footage.

Three architectures for programmatic video editingA template renderer takes a data row into a fixed template and specification, and renders an MP4; you compose the specification and the system never watches the footage. A headless NLE or ffmpeg pipeline takes your code into a filter graph and renders an MP4; you own every operation and the timeline logic. An agentic registry takes your stated intent into an agent holding editing tools, which renders an MP4 and then looks at the frames it produced, feeding that back into the agent before it decides it is done.TEMPLATE RENDERERHEADLESS NLEAGENTIC REGISTRYDATA ROWTEMPLATE + SPECMP4YOUR CODEFILTER GRAPHMP4INTENTAGENT + TOOLSMP4you compose the spec —it never watches the footageShotstack · Creatomateyou own every operationand the timeline logicffmpeg · MoviePy · Remotionit watches, then composesthe spec — and re-checks itValmera
Template rendererHeadless NLEAgentic registry
What you sendA template id plus a row of dataA timeline your code computedA described outcome, in English
Who decides the cutsNobody — the template is fixedYour code, from rules you wroteThe agent, from the footage
Reads the source footage
Where the transcript comes fromYou supply or buy oneYou run ASR yourselfIndexed on upload, word-level
Deterministic — same input, same bytes
Marginal cost per videoPer render minuteYour own computePer unit of AI work done
Right answer for10,000 near-identical videosA pipeline you fully controlOne recording that needs judgement
ExamplesShotstack, Creatomate, JSON2Videoffmpeg, MoviePy, Remotion, EditlyValmera

The row that decides most evaluations is deterministic. A template renderer and an ffmpeg pipeline are pure functions: same input, same bytes, testable in CI. An agent is not, because a model chooses the cut points. If you need reproducibility, stop reading and buy a renderer — that is not a limitation you can work around, it is the definition of the thing.

The Incumbents, Described Fairly

Three products own the term "video editing API" and deserve to. All three are real, documented, asynchronous JSON render services with published pricing. Facts below were read from each vendor's own documentation and pricing pages on 5 August 2026.

ShotstackCreatomateJSON2Video
Spec shapeEdit JSON: timeline → tracks → clips → assetsTemplate id + modifications objectMovie JSON: scenes → elements
Render endpointPOST api.shotstack.io/edit/v1/renderPOST api.creatomate.com/v2/rendersPOST api.json2video.com/v2/movies
Authx-api-key headerAuthorization: Bearerx-api-key header
RenderingAsync — poll the render id, or take a webhook callbackAsync — poll the render idAsync — poll GET /v2/movies
Entry price$0.30/min pay-as-you-go on a $75 minimum credit purchase, or $39/mo at $0.20/minFree trial, 50 credits, no cardFree 600 credits; Hobby $16.95/mo ($203.40/yr)
Metered byRender minutes — 1 credit = 1 minute at any resolutionRender creditsRender credits — ~1 per second of HD output, 4x at 4K
Also shipsIngest and Serve APIs; a Studio SDK for embedding an editorVisual template editor; CSV bulk; Zapier / MakeTemplate library; server-side voiceover, subtitles and transitions
MCP serverYes — remote at mcp.shotstack.io (OAuth), or local via npx with an API keyNone published by the vendorNone published by the vendor
Decides an edit from your content

Shotstack is the most editor-shaped of the three. Its Edit JSON is a real timeline — an array of tracks, each holding clips, each clip wrapping an asset, positioned by start and length, with a soundtrack alongside and an output block for format and size. The asset catalogue is wide: video, image, audio, text, title, HTML, luma-matte and chromakey assets, rich captions with word-level animation, and generative text-to-image, image-to-video and text-to-speech assets. You POST that to https://api.shotstack.io/edit/v1/render with an x-api-key header, and either poll the render id or register a callback URL. Alongside the Edit API it publishes an Ingest API and a Serve API, plus a Studio SDK for embedding editing into your own app, so it is closer to a platform than an endpoint.

Creatomate optimises for the case where a non-developer designs the video and a developer only supplies the data. You build a template in its visual editor, then POST a template_id and a modifications object to https://api.creatomate.com/v2/renders under an Authorization: Bearer header, overriding text, colours and media URLs by element name — dot notation reaches individual properties, and an empty object removes an element outright. It leans hard on no-code distribution — CSV bulk import, Zapier and Make — which is the correct instinct for marketing automation and a genuine differentiator against the more code-first alternatives.

JSON2Video models a video as scenes containing elements and takes it at POST https://api.json2video.com/v2/movies behind an x-api-key header, returning a project id you poll on GET /v2/movies. Voiceover (Azure and ElevenLabs text-to-speech), automatic subtitles and scene transitions are all handled server-side, and it distributes through Make, Zapier, n8n and Node/PHP SDKs.

Worth being blunt about one thing, because it undercuts the obvious pitch: having an MCP server is not the difference. Shotstack ships a native one, and it is not a lesser integration than Valmera's — its own docs give both a remote streamable-HTTP endpoint at https://mcp.shotstack.io/ behind OAuth and a local stdio build you run with npx -y @shotstack/shotstack-mcp-server and a SHOTSTACK_API_KEY. Creatomate and JSON2Video publish no MCP server of their own as of 5 August 2026, though third-party community servers for JSON2Video exist on npm. What differs is what the tools reach. Shotstack's compose a render specification out of assets you name — the same job its REST endpoint does, with a model typing the JSON instead of you. That is still an agent writing a spec for supplied assets, not an agent watching a recording you made. Valmera's tools reach an editor that has already indexed your footage, so they take instructions about content the model has seen rather than parameters it was handed. That is the whole distinction; the transport is not.

When a Template Renderer Is the Right Answer

Most of the time. If you can write the edit down before you have seen the footage, a template encodes it and a renderer executes it faster and cheaper than any agent will. The canonical cases are all volume cases: personalised video ads keyed off a customer record, property listings assembled from photos and a price, sports highlight cards generated from a stats feed, e-commerce product videos generated per SKU, weekly reports rendered from a dashboard, localised variants of a single creative across forty markets. In every one of those, the creative decision was made once by a human and the API's job is faithful repetition — exactly what a per-render-minute cost model is designed for, and exactly what an A/B test across hundreds of variants needs.

It stops working the moment the interesting decision lives inside the footage. A template cannot know that the second take was the good one, that the guest talked over the host for eleven seconds, that the answer worth clipping starts mid-sentence four minutes before the question you searched for, or that the speaker drifted out of frame and the crop needs to follow them. Those are not parameters. They are judgements about specific material, and the only way to make them is to read the material — which is what the third architecture is for.

What Valmera Publishes Instead

Valmera is an agentic video editor. Its programmatic surface is a remote Model Context Protocol server at https://entrepreneur-bot-backend.onrender.com/mcp, served over streamable HTTP with OAuth 2.1, dynamic client registration and PKCE — so in a client that speaks OAuth the client registers itself, the user signs in, and there is no token to copy or key to rotate. Point any compliant MCP client at it: the Claude app as a connector, Claude Code with a bearer token, or your own. The setup guide covers the first two.

What the server exposes is 108 tools — 97 editing tools plus 11 session tools for projects, uploads, indexing, rendering, export and download. Critically, these are not re-declared for MCP. The editing engine publishes one registry and the connector serves it verbatim, so a model in your session receives exactly what Valmera's in-house agent receives: same names, same schemas, same refusals. There is no second tool list that can drift out of date with the first, which is the failure mode of every product that bolts an agent interface onto an existing API after the fact.

The tools write to an edit decision list (EDL), never to pixels. That is what makes every operation reversible, keeps your original upload untouched, and lets the final export come from the original file at source quality while previews render from a fast proxy. Uploads are accepted up to 14 GB or 3 hours in MP4, MOV, MKV or WebM — a hard, checkable ceiling that is worth demanding of anything you integrate, because almost nothing in this category publishes one.

The Call Shape: Fast Tools and Job Ids

Two things behave differently, and knowing which is which is most of what integrating against this feels like. Tools that only rewrite the decision list answer inline in one round trip. Tools that have to move pixels — preview renders, final exports, region repainting — hand back a job id, and you call wait_for_job. Nothing fabricates a completion it has not got.

How Valmera's MCP tools return: inline answers and job idsAn MCP client calls two kinds of tool. Fast tools such as cut_silences, add_captions and get_transcript return the new program state inline in a single round trip. Slow tools such as render_preview, export_final and erase_region return a job id immediately; the client then calls wait_for_job, which polls until the work is done, after which download_url yields the finished MP4. There is no webhook callback.MCP CLIENTFAST TOOLSANSWER INLINESLOW TOOLS{ job_id }wait_for_jobClaude app ·Claude Code ·your owncut_silences · add_captionsget_transcript · add_zoomthe new program state,in one round triprender_preview · export_finalerase_regionimmediatelyblocksdownload_url · the finished MP4polls — there is no webhook

A Worked Example

Take one concrete job: an 80-minute two-person podcast recording that needs the dead air and filler words gone, captions burned in, music underneath, and a vertical cut for Shorts. Here is what that looks like in each architecture.

As a render API call

Faithful to Shotstack's published Edit schema, trimmed for length:

POST https://api.shotstack.io/edit/v1/render
x-api-key: <your key>

{
  "timeline": {
    "tracks": [{
      "clips": [
        { "asset": { "type": "video", "src": ".../ep114.mp4" },
          "start": 0,    "length": 41.8, "trim": 12.4 },
        { "asset": { "type": "video", "src": ".../ep114.mp4" },
          "start": 41.8, "length": 63.1, "trim": 58.9 }
      ]
    }]
  },
  "output": { "format": "mp4",
              "size": { "width": 1080, "height": 1920 } }
}

The API will render that perfectly. The problem is every number in it. Where does 12.4 come from? You ran ASR, or a silence detector, or a shot detector, and wrote the code that turned its output into trim points and lengths — for all several hundred cuts an 80-minute recording produces. The renderer executed your decisions; it did not make any. That work is the actual job, and it is the part the API does not do.

As an MCP session

Same job, driven by a model holding Valmera's registry. Tool names are the live ones; parameters are on the tool reference.

create_project            → project id
upload_start / upload_finish
index_status              → word-level transcript + speaker
                            labels, silences, shot boundaries,
                            labeled frame tiles          [once]

cut_silences              → dead air gone, snapped to words
remove_filler_words       → um, uh, er, hmm
add_captions              → burned in, timed to the NEW edit
add_music / set_music_fit → ducked under speech
auto_reframe              → 9:16, crop aimed at the speaker

render_preview            → { job_id }
wait_for_job              → preview ready
look_at(output_times=[…]) → the agent inspects its own frames

export_final              → { job_id }
wait_for_job → download_url
                          → MP4 from the ORIGINAL file

Note what is absent. No timestamps. Nothing in that session computed a trim point, because the index already holds word-level timestamps with speaker labels, every measured silence, and shot boundaries — produced once at upload and reused by every request afterwards. That is why a request against a three-hour file is not three hours of work, and it is the reason the ordering matters: captions are timed against the edited program rather than the raw stringout, and the music is fitted to a length nothing knew until the cuts landed.

The look_at call is the part with no equivalent in a render API. The agent is handed real frames out of the preview it just produced and reads them, so a caption sitting over a face gets caught and re-aimed before you ever see it. A renderer cannot do this, not because it is worse software but because nothing in its architecture is capable of having an opinion about its own output.

How to Edit Video Programmatically with Valmera

  1. 1
    Connect an MCP client
    Add https://entrepreneur-bot-backend.onrender.com/mcp as a connector in the Claude app, attach it to Claude Code with a bearer token, or point your own MCP client at it. Auth is OAuth 2.1 with dynamic client registration and PKCE, so a client that speaks OAuth registers itself and you simply sign in.
  2. 2
    Create a project and upload the footage
    create_project, then upload_start and upload_finish. Up to 14 GB or 3 hours per video in MP4, MOV, MKV or WebM. Poll index_status until indexing completes — a word-level transcript with speaker labels, detected silences, shot boundaries and labeled frame tiles. This cost is paid once and reused by every later call.
  3. 3
    Call editing tools, then wait on the render
    Editing tools rewrite the edit decision list and answer inline. render_preview and export_final return a job id — call wait_for_job, then download_url. The export renders from your original file at source quality; the preview came from a proxy.

Indexing dominates the first call on a long upload and reports progress throughout. Every request after it reads the index, so the second edit on a three-hour file is not slower than the second edit on a three-minute one.

What This Is Not — Eight Specific Limits

A tool that will not name its edges is asking you to find them in production. Here are Valmera's, stated as a developer would need them stated.

There is no REST endpoint for editing

You cannot POST an edit spec from your backend and get a render id. The MCP server is the whole programmatic surface. If your architecture is a queue worker in Python or Node that needs to emit a video without a model in the loop, Valmera is the wrong tool and a template renderer is the right one.

There is no webhook to register

Slow operations — preview renders, exports, pixel repainting — return a job id, and you call wait_for_job. There is no callback URL, because there is no REST surface to register one against. Your client waits; it is not notified.

There is no client SDK

No npm or PyPI package to install, because the client is an MCP client. Any compliant one works — the Claude app, Claude Code, or your own implementation against the MCP specification. That is a real dependency, and it is worth checking your stack has one before you plan around it.

Output is not deterministic

The same footage and the same sentence will not produce byte-identical files across runs, because a model chooses the cut points. For regression-testing a render pipeline, that is disqualifying. For editing a recording, it is the entire point.

One deliverable per request

No batch output. Turning one podcast into ten Shorts is ten directed requests, not one call returning ten files. An automated clipper does that in a single pass and does it better.

Metering does not match high-volume rendering

Credits are charged in proportion to the AI work actually done, not per render minute. For one recording that needs judgement, that is cheaper than paying a human. For ten thousand renders of a fixed template, per-minute rendering is dramatically cheaper and you should buy that instead.

No project-file interchange

No SRT or VTT import or export — captions are burned into the picture. No EDL, XML or AAF export to Premiere, DaVinci Resolve or Final Cut. Valmera is a pipeline, not a stage inside someone else's.

No team seats and no service accounts

Auth is a user account via OAuth. There are no organisation seats, no per-project API keys to rotate, and no machine identity separate from a person. Sole-operator and single-workspace automation is the shape this fits.

Feature-level gaps are on the tool reference in full, but the short list: no whole-video text-to-video generation, no true crossfade or dissolve, no per-cut transition choice, no motion-tracked overlays, no custom font uploads, no multi-cam sync, no audio denoise or per-speaker levelling, no AI music generation, and no direct publishing to YouTube or TikTok. English is the best-tested transcription path. The agent refuses out-of-scope requests rather than faking them — every reply is verified server-side against the edit decisions actually recorded, so it cannot report an edit it did not make.

How to Choose

One question separates these cleanly: can you write the edit down before you see the footage?

  • Yes, and I need thousands of them. Template renderer. Shotstack if you want a real timeline model and a platform around it; Creatomate if a designer owns the template and you only supply data; JSON2Video if scene-and-element JSON with built-in voiceover fits your content. Per-minute metering is the right cost model and you should not fight it.
  • Yes, and I want to own the stack. ffmpeg, or MoviePy, Remotion or Editly over it. Cheapest at volume, unlimited in what it can express, and you carry the timeline logic, the ASR and the render capacity. For a rule-based pipeline in a team that already runs ffmpeg, this usually wins.
  • No — the decisions are in the recording. An agentic registry. The work is watching the footage and choosing, and no specification you write in advance contains that. This is talking-head video, podcasts, screen recordings, course modules, interviews and social cutdowns from real material.
  • No, and I need frame-level authority over the result. A traditional NLE — Premiere, DaVinci Resolve, Final Cut. Multi-cam sync, node-based colour, keyframed compositing and motion tracking are all things an agent does not do and a template cannot express.

A note on the category's direction. In "It's time for agentic video editing" (Justine Moore, a16z, 21 January 2026), the work a video agent takes on is split into five parts — Process, Orchestrate, Polish, Adapt and Optimize. Only Orchestrate, coordinating several models into one output, is something a render API can serve today; the other four require reading the material. That is the structural reason these architectures are converging on the agentic end rather than the templating end, and the reason incumbents are adding agent interfaces on top of their render endpoints rather than the reverse.

Using Both

These are not mutually exclusive and the split is often obvious. A media team with a weekly show and a performance-marketing function typically wants both: a renderer generating hundreds of ad variants from a spreadsheet on autopilot, and an agent cutting the actual episode where the judgement lives. They meet at the file — Valmera exports H.264 MP4 you download, and a renderer takes URLs, so the output of one is a valid input to the other.

What does not compose is project state. There is no EDL, XML or AAF interchange in either direction, and captions are burned into the picture rather than delivered as a sidecar file, so a B-roll pass or an aspect ratio variant done in one tool cannot be re-opened in the other. Plan the handoff at the rendered file, not at the timeline.

Frequently Asked Questions

A video editing API is an interface that produces edited video from code rather than from a person operating a timeline. In practice the term covers three quite different architectures. A template renderer takes a JSON specification — a timeline of tracks, clips and assets, or a template id plus a row of data — and returns a rendered file; Shotstack, Creatomate and JSON2Video are the established examples. A headless NLE or ffmpeg pipeline is one you build yourself, where your code computes the timeline and a library executes it. An agentic tool registry exposes editing operations as tools a model calls, so the specification is composed by the model after it has read the footage rather than by you in advance. They are not competitors so much as answers to different questions, and picking the wrong one is the most expensive mistake in this category.
Valmera does not publish a conventional REST video editing API. It publishes a Model Context Protocol (MCP) server: you drive it from a model rather than from your own code, and slow operations return a job id plus a wait_for_job tool instead of a webhook. The endpoint is https://entrepreneur-bot-backend.onrender.com/mcp, served over streamable HTTP with OAuth 2.1, dynamic client registration and PKCE. It exposes 108 tools — 97 editing tools plus 11 session tools for projects, uploads, indexing, rendering, export and download — and it is the same registry Valmera's own in-house agent uses, not a re-declared subset, so there is no second list that can drift out of date. If what you need is a REST endpoint you POST an edit specification to, Valmera does not have one and is not planning to pretend otherwise.
It depends entirely on whether the edit is known in advance. If you are producing thousands of near-identical videos from structured data — personalised ads, property listings, sports highlight cards, data-driven social posts — a template renderer is correct, and Shotstack, Creatomate and JSON2Video are all real, mature products with genuine track records. If you need total control over the operations and are willing to own the timeline logic, ffmpeg or a library over it will beat every hosted option on cost and flexibility. If the input is one real recording and the interesting work is deciding what to keep, no template can encode that judgement and an agentic tool registry such as Valmera's MCP server is the only shape that fits. The honest test: can you write the edit down before you see the footage? If yes, buy a renderer.
A REST API is called by your code, which means your code must already know the correct arguments. An MCP server is called by a model, which means the arguments can be decided after looking at the material — and the server publishes tool schemas and descriptions so the model can discover what is available without you hard-coding a client. The practical differences for a developer are concrete: authentication is OAuth against a user account rather than a static API key on a service; there is no request-and-response pairing you control, because the model chooses how many calls to make; and long operations return a job id you wait on rather than firing a webhook. It is a genuinely different integration shape, not a REST API with a different name on it.
Yes, and for many pipelines you should. ffmpeg is free, runs anywhere, and every hosted rendering product is ultimately a managed interface over it or something like it. What you take on is real: computing every timestamp yourself, running your own ASR if you need a transcript, sourcing shot boundaries, managing render capacity, and owning the filter graphs when they break. Hosted renderers sell you the operations side of that; an agentic editor sells you the decisions side. If your team already runs ffmpeg comfortably and the edit is rule-based, staying there is usually the right call.
Separate the two kinds of scale first, because they need opposite tools. Volume scale is many outputs from one known recipe — thousands of renders that differ only by data. That is a template renderer, metered per render minute, and it is a solved problem. Judgement scale is many recordings each needing decisions about what to keep, where to cut and what to emphasise. No recipe covers that, because the answer lives in the footage. Valmera addresses the second: the agent indexes each upload once into a word-level transcript with speaker labels, detected silences, shot boundaries and labeled frame tiles it actually looks at, then edits against that index. Attempting volume scale with an agent is slow and expensive; attempting judgement scale with a template is simply impossible.
Valmera's export renders from the original uploaded file at source quality. Previews render from a smaller, faster proxy, which is why they appear quickly, but the proxy is never the deliverable. The original upload is never modified — the agent edits an edit decision list rather than pixels, so every operation is versioned and anything cut can be restored. This is worth asking of any programmatic editing service you are evaluating, because a pipeline that quietly re-encodes your master through an intermediate is losing quality you cannot get back.
The incumbents meter output length. Shotstack publishes $0.30 per minute pay-as-you-go on a $75 minimum credit purchase, or $39/month at $0.20 per minute, where one credit equals one minute of video at any resolution. JSON2Video starts free with 600 credits and its cheapest subscription is Hobby at $16.95/month, or $203.40 billed yearly, where a credit is roughly one second of HD output and 4K consumes four times as many. Creatomate offers a 50-credit full-featured trial with no card. Those figures were read from each vendor's own pricing page on 5 August 2026 and are the kind of thing that moves. Valmera meters AI work instead of render length, which makes it cheap for a single considered edit and poor value for bulk template rendering. Free accounts get 50 one-time credits with no card. Creator is $30/month for 2,000 credits, Pro $50/month for 4,000, and Frontier $100/month for 10,000 on a stronger model; paid plans open with a 3-day trial. A three-hour recording does not cost more to index than to edit repeatedly, because indexing happens once and every later request reuses it.

Drive It From Your Own Client

108 tools over MCP, OAuth 2.1, no key to store. 50 free credits on signup, no card required.

Start free →
See pricing →

Related Articles

Valmera MCP Server
The connector itself — endpoint, transport, OAuth flow, and what a session can and cannot do.
MCP Tool Reference
All 108 tools, what each one does and what it refuses. The parameter reference for everything on this page.
Video Editing MCP Servers Compared
Every MCP server that edits video, compared on tool surface, auth and scope — including where another one is the better answer.
Agentic Video Editor
The category page: what makes an editor agentic, and the loop that separates it from an automated one.
Claude Video Editor
What Claude can and cannot do with video on its own, and exactly how MCP closes the gap.