---
title: "JSON2Video Integration"
description: "JSON2Video renders finished MP4 videos from a Movie JSON document of scenes, text, voice, subtitles, HTML, and audiograms. Agents submit a movie, wait for the render, manage templates and media folders, and react when a render finishes."
url: https://flowrunner.ai/integrations/json2video
date_modified: 2026-09-04T19:38:13-07:00
---

# JSON2Video

[Media & Video](https://flowrunner.ai/integrations/category/media-video)

JSON2Video renders finished MP4 videos from a Movie JSON document of scenes, text, voice, subtitles, HTML, and audiograms. Agents submit a movie, wait for the render, manage templates and media folders, and react when a render finishes.

[Verified](https://flowrunner.ai/integrations/verified "What does verified mean?") · 1 trigger · 20 actions · API key · available

[JSON2Video website](https://json2video.com/) · [Platform Documentation](https://json2video.com/) · Capability data verified 2026-08-28

1.  A product goes live in the catalog and needs a short promo video
2.  Get Template returns the template's variables as a schema, so the agent learns what to fill in without opening an editor
3.  Create Movie submits the movie document with the product copy, images, and voice track bound to those variables
4.  Get Movie branches on the done and failed booleans, because the API answers the same way for pending, running, finished, and errored renders
5.  Upload Media From URL files the finished MP4 into durable storage before the render's retention window closes
6.  The channel owner gets the render with its expiry date stated plainly
7.  A marketer approves the cut before it is scheduled to the ad accounts

## What This Integration Enables

JSON2Video treats a video as a document. Scenes, text, images, voice, subtitles, HTML blocks, and audiograms are fields in a movie definition, which means a video is something a workflow can compose the same way it composes an email. FlowRunner agents submit a movie and collect the rendered MP4, save and duplicate templates, discover a template's variables as a schema, and manage the media library the renders draw their assets from.

Two behaviors decide whether a production workflow built on it holds up. Rendered videos are removed after a fixed retention window on every plan, downloading does not extend it, and an expired render returns an empty URL while keeping its history entry, so any flow that publishes a JSON2Video link into a page that must keep working is already broken and does not know it. And creating a movie is not idempotent: an identical submission creates a new project and renders again unless the cache absorbs it. Both are the sort of thing that makes automation look unreliable when it is really the retry logic that was never written. This connector surfaces both as data a flow can act on rather than as behavior a flow discovers in production.

### Without FlowRunner

**Video is a request queue**: Every variant is a ticket to a designer, so the number of videos a campaign can afford is the number a person can cut

**Renders expire quietly**: A URL is pasted into a page, works for a while, and then stops resolving with nothing to indicate why

**Retries cost twice**: A timed out render is resubmitted, and the first one was still running and still billing

### With FlowRunner

**Video is a document**: A movie is a JSON document, so a program composes it and a template makes the composition reusable

**Expiry is handled on purpose**: The workflow collects the file into storage it controls and records the retention date rather than trusting a link

**Retries are deliberate**: The flow branches on real completion booleans and knows a resubmission creates a new project rather than resuming one

## Use Case Scenarios

### One template, a catalog of promos

The promo template lives in JSON2Video with variables for headline, price, product shot, and voice line. When a product is published in [Shopify](https://flowrunner.ai/integrations/shopify), the agent reads the template's variable schema with Get Template, fills the values from the product record, and submits Create Movie. On completion it pulls the file, stores it durably, writes the storage URL back to the product row in [Airtable](https://flowrunner.ai/integrations/airtable), and posts the preview to the marketing channel in [Slack](https://flowrunner.ai/integrations/slack). The template is edited once; the catalog gets a video each.

### A render list that reconciles

Weekly, the agent calls List Movies with both dates set explicitly, because the default range covers only the current month and older work is invisible until the range is widened. It matches finished renders against the campaign plan in [Google Sheets](https://flowrunner.ai/integrations/google-sheets), flags any render that came back with a failure reason beside an otherwise successful looking response, and calls Get Retention Policy so the report states exactly how long each asset has left where it sits. Get Storage Info runs before any bulk upload, because when the account's storage is blocked every upload is rejected.

### Updating the template everything renders against

A brand refresh changes the lower third on every promo. The agent has the new movie definition ready and one operation that would apply it. That operation either creates a new template or replaces an existing one depending on a single parameter, and the listing it would check first does not include enough to compare against. So it assembles the comparison and hands it over.

## Human-in-Loop Highlight

Saving a template is two different operations wearing one name. Passing a template id switches it from creating a new template to overwriting an existing one, and every scheduled render, every campaign flow, and every other workflow pointed at that id resolves against whatever is now in that slot. Making it worse, the template listing omits each template's body, so an agent cannot diff what it is about to replace without a deliberate read first. So the brand refresh agent calls Get Template on the target, builds the comparison, and stops: "Template promo\_v3 is referenced by 6 scheduled flows. The change replaces the lower third and the outro card. Here is the current definition against the proposed one. Save over promo\_v3, or save as a new template and migrate the flows one at a time?" A marketer answers. Renders already running are unaffected either way, because they resolved the body when they started, but everything that runs tomorrow is decided by that one answer, and FlowRunner's [human-in-the-loop](https://flowrunner.ai/concepts/human-in-the-loop) step is what makes sure a person gave it.

Agent processes routinely

Detects exception requiring judgment

Clear match Continues automatically

Ambiguous Routes to human via preferred channel

Human decides

Agent resumes with decision

## Agent Capabilities

20 actions

### Movies

6

-   **Create Movie** Submits a movie document for rendering and returns the project immediately. Each call creates a new project even for an identical body, so a retry renders and bills again unless the cache absorbs it, and the cache is on unless a flow turns it off.
-   **Get Movie** Retrieves a render's state and result. The API answers the same way for pending, running, finished, and errored renders with the real state in the body, so this operation adds explicit done and failed booleans to branch on.
-   **Create Movie And Wait** Submits a movie and polls it to completion in one step. It returns a failed render rather than raising on it, because the reason is usually what the flow needs to branch on, and on timeout the render carries on so a later read can pick it up.
-   **List Movies** Lists renders over a date range. The default range covers only the current month and the range is capped, so older work stays invisible until both dates are set.
-   **Delete Movie** Frees a render's storage early while keeping its history entry, so usage records are not rewritten by a cleanup pass.
-   **Get Retention Policy** Returns the platform's retention windows as data. It calls nothing, and it exists because a video URL that silently stopped working after a week is the most common way a downstream integration breaks.

### Templates

6

-   **Save Template** Creates a reusable movie definition, or replaces an existing one when a template id is supplied. The parameter that decides which is why this operation carries this page's human gate.
-   **Duplicate Template** Copies a template, including a public template library entry, into the account so it can be modified without touching the original.
-   **Get Template** Retrieves a template. Requested as a schema it returns a description of the template's variables, which is how a flow discovers what a template expects without opening the editor.
-   **List Templates** Lists the account's templates. It omits each template's body, so a comparison still needs a deliberate read of the one being changed.
-   **Delete Template** Removes a template. Renders already running are unaffected, because they resolved the definition when they started.
-   **List Template Library** Lists the public template library, which is the starting point a workflow duplicates from rather than composing a movie from scratch.

### Media Library

8

-   **Get Storage Info** Returns the account's storage state. Worth reading before a bulk upload, because when storage is blocked every upload is rejected, and stored files above the free allowance bill on a recurring basis rather than once.
-   **Upload Media From URL** Runs the whole presigned upload exchange in one call, which it has to, because the presigned URL expires in a window too short to split across flow steps. Files above the platform's size limit are rejected.
-   **Create Media Folder** Creates a folder in the media library.
-   **Get Media File** Retrieves a media file's record. A file whose state reads as pending is a record whose bytes never arrived, which is what an abandoned upload leaves behind.
-   **List Media Folder** Lists the contents of a media library folder.
-   **Move Media File** Moves a file between folders. Moving a file into the temporary folder schedules its deletion, because everything in that folder is treated as temporary by lifecycle rules.
-   **Delete Media File** Removes a file from the media library.
-   **Delete Media Folder** Removes a folder from the media library.

## Triggers

1 triggers

### Event Triggers

1

-   **On Render Finished** Fires on newly finished renders, optionally filtered to succeeded or failed only. JSON2Video declares its webhook inside each movie's own definition rather than as a subscription, so there is nothing for a trigger to register and this one polls the render list instead. Its first pass records the current state and emits nothing, which matters here because the default listing window is the whole current month.

## Frequently Asked Questions

### What can FlowRunner do with JSON2Video?

FlowRunner agents can run Create Movie, Get Movie, and Create Movie And Wait in JSON2Video, plus 17 more actions.

### Does connecting JSON2Video to FlowRunner require OAuth?

No. JSON2Video connects to FlowRunner with an API key, no OAuth flow required.

### Can JSON2Video trigger a FlowRunner workflow automatically?

Yes. JSON2Video supports 1 trigger that can start a FlowRunner workflow automatically.

**Work at JSON2Video?** This integration exposes JSON2Video to AI agents on every FlowRunner plan, including through MCP, at no cost to you. [See what FlowRunner offers integration partners](https://flowrunner.ai/integrations/partners), including how to keep this page current.

---
Markdown version of https://flowrunner.ai/integrations/json2video. Site index: https://flowrunner.ai/llms.txt
