JSON-to-video API · built for automation

JSON in,
rendered MP4 out.

SamAutomation is a deterministic video API. POST a JSON payload — media, voice-over, captions, settings — get back a task id, then poll or receive a webhook with the finished MP4. No editor, no human in the loop. Wire it into n8n, Make, or your backend.

JSON → MP4 in one call n8n & webhook ready X-API-Key auth
 POST /api/function/video-generation/mix-video
{
  "media_list": [{ "type":"image", "url":"https://cdn.example.com/frame.jpg", "duration":3 },
    { "type":"video", "url":"https://cdn.example.com/clip.mp4" }],
  "voice_url": "https://cdn.example.com/voice.mp3",
  "transcripts": [{ "words":"Ship faster", "start":0, "end":2 }],
  "settings": { "aspect_ratio":"9:16", "transition_type":"fade" }
}
200 task id → poll progress or get a webhook with the MP4
// quickstart

Quickstart: JSON in, MP4 out

The shortest path from payload to finished video — copy this, swap the key, run it.

// payload.json
{
  "media_list": [
    { "type":"image", "url":"https://cdn.example.com/frame.jpg", "duration":3 },
    { "type":"video", "url":"https://cdn.example.com/clip.mp4" }
  ],
  "voice_url": "https://cdn.example.com/voice.mp3",
  "transcripts": [{ "words":"Ship faster", "start":0, "end":2 }],
  "settings": { "aspect_ratio":"9:16", "transition_type":"fade" }
}
// cURL
curl -X POST https://samautomation.work/api/function/video-generation/mix-video \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data @payload.json
// Python requests
import requests
import json

payload = json.load(open("payload.json"))
response = requests.post(
  "https://samautomation.work/api/function/video-generation/mix-video",
  headers={"X-API-Key": "YOUR_API_KEY"},
  json=payload,
)
job = response.json()
// response, then poll
{ "data": { "id": "3ec95f88…", "progress_url": "…/progress/3ec95f88…" } }

curl -H "X-API-Key: YOUR_API_KEY" \
  https://samautomation.work/api/function/video-generation/progress/3ec95f88…

# repeat until:
{ "status": "completed", "output_url": "…/out.mp4" }
JSON to MP4 workflow showing payload, render status, webhook delivery and finished video download
The core workflow is payload to render status to webhook to MP4 download. Use this page when you need the request shape, progress route and production limits before wiring a JSON-to-video job into n8n or your backend.

Search intent this page owns

Recent GSC data shows this URL already catches pmvhaven api json video discovery endpoint, json 2 video and JSON-to-video API variants. The page should stay the owner for implementation intent: request shape, async status, webhook delivery, MP4 output and where a PMVHaven-style discovery endpoint fits in a production render stack.

// how it works

Submit, poll, deliver

Every render is asynchronous. You submit a job, the API hands back a task id, and you either poll progress or let a webhook push the finished video into your stack.

01

Submit JSON

POST your payload with X-API-Key to mix-video, simple-video or loop-video. Fields go at root or inside a data object.

02

Poll or webhook

Use the returned id on GET /progress/<id>, or add exports.callback_url and receive a signed video.completed callback.

03

Get the MP4

The terminal response carries output_url. Optionally deliver straight to email, FTP or SFTP via exports.destinations.

JSON in, MP4 out

Mix video, images, voice-over and captions from one payload. Deterministic, repeatable rendering built for backends — not a manual editor.

Async polling & webhooks

Submit, get a task id, poll /progress/<id> or receive a signed callback. Designed to run without a human in the loop.

Captions, baked in

Send transcripts with timed words and get burned-in subtitles for social — or pair a render with the AutoCaptions flow.

Reusable templates

Save a render as a template via the Templates API, then feed it new data with apply across n8n workflows and batch jobs.

n8n & Make.com workflows Social cutdowns at scale Programmatic ads Training & onboarding video
// submit a render, then poll
POST /api/function/video-generation/mix-video
# → { "data": { "id": "3ec95f88…",
# "progress_url": "…/progress/3ec95f88…" } }

GET /api/function/video-generation/progress/3ec95f88…
# → { "status": "completed",
# "output_url": "…/out.mp4" }

# or let the webhook push it to your stack
"exports": { "callback_url": "https://your.app/hooks/video" }
// renderers

Four ways to render

Pick the endpoint that matches the job. All share the same auth, async pattern and exports delivery — they differ in how they assemble the timeline.

POST /video-generation/mix-video

Mix video

Compose a media_list of clips and images with voice-over, background music and timed captions into one MP4 — the deterministic way to create a video from photos at scale.

  • Requires media_list
  • Optional voice_url, background_url, transcripts
  • Transitions & aspect ratio via settings
POST /video-generation/simple-video

Simple video

The fastest path: a list of video / image items, validated settings, an MP4 out. Ideal for slideshow-style output.

  • Per item type + url
  • Strict settings enum/range validation
  • Image duration control
POST /video-generation/loop-video

Loop video

Loop media to a target duration over a background track — great for ambient, music or always-on screens.

  • Top-level type: "LoopVideo"
  • Needs data.media_list + background_url
  • Optional data.duration
POST /render/advanced-video

Advanced renderer

Structured output settings, main clips, backgrounds, audio mixing, preview mode and template merging for full control.

  • Structured clip + caption model
  • Audio mixing & preview mode
  • Progress via /advanced-video/progress/<id>
// payload contract

One predictable schema

Core endpoints accept either a root payload or a nested data object. Media items are simple; settings are validated against a fixed matrix so renders stay deterministic. See JSON2Video alternatives for a provider comparison.

Media & settings

Each media item needs a type and a publicly reachable http or https url. Images take an optional duration; extra keys pass through to renderer-level logic.

  • aspect_ratio9:16, 16:9, 1:1
  • transition_typefade, wipe, zoom, slide, glitch
  • output_qualitylow, medium, high
  • Numeric ranges (volumes, fades, fps 15–60) validated per request
  • Create endpoints run at rate limit 5/m per API user
// accepted envelope shapes
{ "media_list": [], "settings": {…} }

{
  "data": {
    "media_list": [
      { "type":"image", "url":"https://cdn.example.com/frame.jpg", "duration":3 },
      { "type":"video", "url":"https://cdn.example.com/clip.mp4" }
    ],
    "settings": { "aspect_ratio":"16:9" }
  }
}
EndpointRequiredOptional
POST /video-generation/mix-video media_list (non-empty) voice_url, background_url, transcripts, settings, exports
POST /video-generation/simple-video media_list, per item type + url settings (validated), exports
POST /video-generation/loop-video type = "LoopVideo", data.media_list, data.background_url data.duration, data.settings, data.exports
// captions

Burned-in captions from a transcript

Send timed words alongside your render and SamAutomation bakes social-ready subtitles into the MP4 — no separate subtitle service. Need more control or styling? Route the output through the AutoCaptions flow.

Transcript contract

Each entry carries words, start and end so caption timing is interpreted correctly against the rendered timeline.

  • words — the caption text for the cue
  • start / end — cue timing in seconds
  • Pair render jobs with AutoCaptions for TikTok / Shorts / Reels styling
// transcripts in a mix-video payload
"transcripts": [
  { "words": "Welcome to SamAutomation",
    "start": 0.0, "end": 2.0 },
  { "words": "JSON in, video out",
    "start": 2.0, "end": 4.0 }
]
// templates & delivery

Save once, render many

Store a render preset with the Templates API, then apply it with fresh data from any workflow. Pair it with exports to deliver finished videos straight to a webhook, FTP/SFTP, or email.

Templates API

  • POST /api/templates/ — create a preset
  • GET /api/templates/list/ — list yours + public
  • POST /api/templates/<id>/apply/ — render with new data
  • PUT / DELETE /api/templates/<id>/ — manage presets
// deliver on completion
"exports": {
  "callback_url": "https://hooks.example.com/done",
  "callback_secret": "your-shared-secret",
  "destinations": [
    { "type":"email", "to":["ops [at] example.com"] },
    { "type":"sftp", "host":"files.example.com",
      "username":"deploy", "path":"/incoming/" }
  ]
}
# signed: X-Samautomation-Signature, event video.completed
// automation

Built for n8n, Make & backends

Because every render is a plain HTTP call with a task id and a webhook, it drops cleanly into no-code workflows. Submit from an HTTP Request node, wait on the callback, then publish or deliver. Or import ready-made n8n video workflows.

Trigger

Kick off from a schedule, form, RSS item or upstream event in n8n or Make.com.

Render

HTTP Request node POSTs the JSON payload with X-API-Key and captures data.id.

Publish

A webhook node catches video.completed, then your flow posts to social, storage or email.

n8n media URL checklist

The API only accepts the final media URL in media_list[].url. If n8n sends an unresolved expression as plain text, the request is rejected before rendering starts.

  • Use Expression mode in the HTTP Request node when you pull a URL from a previous node.
  • Open the n8n execution output and confirm the final body contains a real https://... URL.
  • Make sure the media URL is publicly reachable; signed or private URLs must still be downloadable by the renderer.
// wrong: expression sent as text
{
  "media_list": [
    { "type":"video", "url":"={{ $('Code in JavaScript2').item.json.videoUrl }}", "duration":60 }
  ]
}

// correct: resolved request body
{
  "media_list": [
    { "type":"video", "url":"https://cdn.example.com/rendered-product-video.mp4", "duration":60 }
  ]
}
API responseWhat it meansFix
media_list[0].url must be a valid HTTP(S) URLn8n sent an unresolved expression, a relative path, or another non-URL value.Switch the field to Expression mode or build the request body in a Code node.
Invalid payload shapeThe request body is not a JSON object, or data is not an object.Send an object such as {"media_list":[...]}, not a JSON string.
// add-on

No source footage? Generate it on the same key.

Your SamAutomation API key also drives the unified AI job flow. Generate clips and images when you don't have source media, then composite them with JSON-to-video — same auth, same async job pattern.

AI video & image generation

Call GET /api/ai/models and POST /api/ai/jobs across 48 active models in the live catalog. Poll /api/ai/jobs/<id> for result URLs, exactly like a JSON-to-video render.

AI API docs →
// faq

Common questions

The practical answers developers reach for before wiring a JSON-to-video job into production.

How do I submit a JSON-to-video request?

POST to mix-video, simple-video or loop-video with the X-API-Key header and a JSON body containing media_list and optional settings. You get back a task id and a progress_url.

How do I track render progress?

Use the task id from the create response on GET /api/function/video-generation/progress/<id> until the status is completed or failed — or add exports.callback_url and receive a signed webhook instead of polling.

Can I deliver completed videos to webhooks, FTP/SFTP, or email?

Yes. Add the optional exports object with a callback_url and up to five destinations of type email, ftp or sftp. Webhooks are signed with X-Samautomation-Signature.

Can I use the same key for AI video and image jobs?

Yes. The same SamAutomation API key works for the JSON-to-video endpoints and for the AI job endpoints such as /api/ai/models and /api/ai/jobs. See the AI docs.

What transcript format should I send for captions?

Use transcripts entries with words, start and end fields so caption timing is interpreted correctly against the rendered timeline.

JSON describes the video; a renderer creates the file

A JSON file is not a video. It is text that can describe scenes, images, captions, audio, timing, transitions, and output settings. A renderer reads that data and creates an MP4, WebM, GIF, or another media file.

A basic JSON file example might contain {"scenes":[{"text":"Hello","duration":3}],"format":"mp4"}. JSON stands for JavaScript Object Notation. It is still widely used for APIs and automation, so JSON is not obsolete. JSON for beginners is usually manageable because the format only uses objects, arrays, keys, values, and a few strict punctuation rules.

To turn JSON into video, validate the JSON, map each field to a supported video element, send the job to a rendering engine, poll its status, and download the finished file. The same process answers how to turn JSON into MP4 and how to convert JSON code to a video.

Use the JSON-to-video workflow and schema examples to build a render request your chosen engine can actually process.

Choosing a JSON-to-video converter

The best JSON-to-video converter is the one that supports your required inputs and gives you a predictable output. Check its schema, timeline controls, caption support, media storage, callback options, error messages, and output formats before comparing headline prices.

OptionGood fitMain limitation
Hosted JSON-to-video APIAutomated production without managing render serversUsage limits and provider-specific schemas
Open-source renderer from GitHubCustom logic and local controlYou maintain rendering, queues, codecs, and storage
Browser-based JSON video editorTesting a template by handOften less suitable for batch automation
Lottie JSON to videoRendering vector animation dataLottie JSON is an animation format, not a general video timeline

A JSON video player or JSON video HTML page normally reads a manifest and plays referenced media. It does not make arbitrary JSON behave like an MP4. A JSON video download should therefore mean downloading the rendered media, not renaming the source file.

Start with a reusable JSON video template if your videos share the same layout but use different text, images, or audio.

Free APIs, testing limits, and pricing models

A free JSON-to-video API usually means a trial, limited credits, a restricted test environment, or self-hosted software. It rarely means unlimited rendering. Check whether the free tier allows downloads, removes watermarks, accepts external media, and permits commercial use.

JSON2Video pricing and similar API pricing may be charged per execution, operation, render minute, credit, storage period, or output type. Rates change, so confirm the current pricing page before designing your unit economics. A JSON2Video API key is normally created inside the provider account and must stay on your server, not in browser JavaScript or a public GitHub repository.

The same caution applies to a free video API for developers, a free video API for testing, a video editing API free tier, an API video generator, and a free text-to-video API. Video streaming APIs and VOD APIs solve a different job: they upload, process, store, secure, or deliver video on demand rather than generate a timeline from JSON.

Compare the available AI video API integration patterns before tying your JSON schema to one provider.

Sora storyboards and structured prompts

Fields such as n_frames, image_urls, and aspect_ratio can appear in community examples, wrappers, or exported storyboard data. Do not assume they form a universal Sora or Sora 2 Pro schema. Match every field against the documentation for the exact API, app, repository, or automation you use.

A safe storyboard object could store a scene ID, prompt, reference image URLs, frame or duration data, and an aspect ratio. The recommended aspect ratio depends on the destination: choose the output shape first, then keep reference images, storyboard frames, and the renderer consistent.

There is no reason to download an APK, unknown executable, or shared Sora API demo key just to inspect JSON. Treat offers for a free Sora 2 API key with care. Use the provider's official account and Sora API documentation where access is available, because authentication, model names, accepted fields, and limits can change.

You can use JSON prompting to keep scene instructions consistent. Veo 3 or another model may still require that object to be translated into the provider's accepted request format. For working patterns, see the structured text-to-video examples.

Images, models, and reference assets

Image generation models can supply storyboard frames, backgrounds, product shots, or character references before the video render starts. Flux is one model family used for image generation. The best AI image generator for realistic photos depends on prompt control, reference-image support, licensing, output consistency, and the API you can automate.

An AI image model download is different from an online AI image generator. A local model needs compatible weights, software, hardware, and a licence that permits your intended use. A free model or free generator may still restrict output size, queue priority, commercial use, or API access.

“Civic AI image generator” is not specific enough to identify one standard model or API. Confirm the exact product name and its official documentation before sending prompts or credentials. Keep generated image URLs accessible to the renderer for the full job, or upload the files to storage you control.

YouTube JSON integration and authentication

YouTube Data API v3 is the main public API for reading and managing supported YouTube resources such as videos, channels, playlists, and comments. You create credentials in Google Cloud. An API key can handle permitted public-data requests; OAuth authentication is required when a request acts for a user or changes account data.

The API uses quota. Access may be free within the assigned quota, but quotas, policies, and eligible methods can change. Read the current YouTube API v3 documentation instead of treating an old “YouTube API key free” tutorial as a permanent rule.

A YouTube JSON integration usually sends or receives metadata, IDs, status data, and upload settings. It does not download a YouTube video merely because a response is JSON. There is no general public product called the YouTube Studio API that mirrors every Studio feature; use the documented YouTube APIs and supported OAuth scopes.

The “YouTube 7 second rule” is usually creator advice about winning attention early, not a YouTube Data API rule. Test the opening against your own retention data rather than treating seven seconds as a platform requirement.

Unknown endpoints, downloads, and safe debugging

Paths such as api/v1/videos/2feg6qaem3a, api/v1/videos/we7kakwjow8, api/v2/video/683936.json, and api/v2/yourbroad/videos.json look like provider-specific endpoints or example identifiers. They are not standard JSON-to-video routes. Find the owning service before sending credentials or assuming the response contains a downloadable file.

The same applies to phrases such as “support json like video pvuv example.” If it came from an error, repository, or network request, inspect the surrounding code and response headers. A real download response may provide a signed media URL, job asset, or binary body. A status endpoint may return JSON only.

For a JSON-to-video GitHub project or JSON2Video alternative, check the licence, recent maintenance, supported codecs, queue handling, and whether examples still match the current release. Never commit API keys. A JSON2Video review is useful only when it tests the same render type, volume, and failure handling you need.

JSON can also describe audio jobs, but JSON to MP3 still needs an audio source or text-to-speech step plus an encoder. JSON itself contains instructions or data; it does not become playable media without processing.

Questions people ask

Can a JSON file be a video?

No. JSON is a text format that can describe a video timeline or reference media files. A renderer must turn those instructions into an MP4, WebM, GIF, or another playable format.

How can I convert JSON code to a video?

Use a renderer whose schema matches your JSON. Submit the validated payload, wait for the render job, then download the output URL or file returned by the service.

Is there a free JSON-to-video API?

Some services offer trial credits, limited test tiers, or self-hosted code. Check watermarks, download rights, render limits, and commercial-use terms because free access and rates can change.

What does JSON2Video cost?

There is no single fixed price shared by every JSON-to-video service. Providers may charge per execution, operation, render minute, credit, storage period, or output type, and their rates change.

Can I create a video using JSON prompting?

Yes, if an application translates the JSON into supported scenes, prompts, assets, and render settings. The model itself may accept a different schema, so validate the payload against its current documentation.

Can I use JSON prompts in Veo 3?

You can store structured Veo prompts in JSON inside your own workflow. Your integration must then convert that structure into the exact request fields accepted by the current Veo interface or API.

What are n_frames, image_urls, and aspect_ratio in a Sora storyboard?

They are descriptive field names seen in some examples, wrappers, or exported data, not a guaranteed universal Sora schema. Check the exact repository or API documentation before using them in Python, JavaScript, or a production request.

Can I get a free Sora 2 API key?

Do not trust shared demo keys, APK downloads, or keys posted on GitHub or Reddit. Use the official provider account and current documentation for access, authentication, and limits.

Is YouTube's API free?

YouTube Data API v3 uses quota assigned through Google Cloud. Requests may be available without a direct per-request charge within that quota, but current limits, policies, and billing conditions should be checked in the official documentation.

Which API is used by YouTube integrations?

YouTube Data API v3 handles many video, channel, playlist, and comment operations. Uploading and account-level actions can also require OAuth and other documented YouTube API methods.

What is a VOD API?

A video-on-demand API manages tasks such as upload, encoding, storage, playback, access control, or delivery. It normally does not generate a complete video from a creative JSON timeline.

What can I convert a JSON file to?

JSON can be transformed into CSV, XML, database records, HTML, configuration objects, or media-job instructions. The possible output depends on the meaning of its fields and the software reading them.

Is JSON difficult to learn?

The basic syntax is small: objects, arrays, keys, strings, numbers, booleans, and null values. Most errors come from missing quotes, commas, or brackets, so a validator catches many beginner mistakes.

Can JSON be converted directly to MP3?

Not by simple file conversion. The JSON must point to audio, contain synthesis instructions, or provide text for speech generation, after which an audio tool can encode the result as MP3.

Render your first video today

One key for deterministic JSON-to-video and AI generation. Documented endpoints, webhook delivery, ready for your pipeline.