Skip to content

POST /v1/renders

Video is a JSON document.

Describe scenes, text, voiceover and subtitles in one declarative document. POST it to the API and get back a rendered MP4. No timelines to click through, nothing hidden from your code.

300 free trial credits included. No credit card required.

{
  "schema": "v1",
  "preset": "9:16",
  "scenes": [
    {
      "id": "intro",
      "duration": "voice",
      "background": "#09090b",
      "elements": [
        {
          "id": "headline",
          "type": "text",
          "text": "Ship videos from code",
          "font": "Space Grotesk",
          "fontSize": 96,
          "fontWeight": 700,
          "position": "center",
          "animation": {
            "preset": "slide-in-up"
          }
        },
        {
          "id": "voiceover",
          "type": "voice",
          "text": "Automotion turns a JSON document into a finished video.",
          "voiceId": "Joanna",
          "language": "en-US"
        },
        {
          "id": "captions",
          "type": "subtitles"
        }
      ]
    }
  ]
}
Drag the wipe — the document on the left is exactly what renders on the right.

movie.schema.json

Docs generated from the schema that validates you

The reference is built from the same strict schema the API runs on every request. Every field, default and error code in the docs is the one you will actually hit — the docs cannot drift, because they are the schema.

  • Exact JSON-path errors

    Rejections point at the field: scenes[2].elements[0].src, with a link to that error's doc page.

  • Strict by design

    Unknown keys are rejected, defaults are documented, and the JSON Schema export powers editor autocomplete.

  • Versioned documents

    Every document declares its schema version, so a render that works today still works next year.

editor.sync

An editor that never hides the JSON

The visual editor and the document are two views of the same state. Click an element on the canvas and its JSON path lights up; edit the JSON and the preview updates. What you ship to the API is exactly what you saw — no lossy export step.

  • Bidirectional selection

    Canvas, timeline and JSON stay in lockstep — selection works in both directions.

  • The document is the truth

    The editor state is the request body. Copy it out, template it, or commit it to git.

  • Frame-accurate preview

    Scrub the timeline and preview the exact frames the renderer will produce.

movie.variables

Built for videos you make more than once

Faceless shorts at scale

Generate vertical videos with AI voiceover and word-timed subtitles from scripts — hundreds a day, no editor in the loop.

Data-driven marketing video

One template, a row of data per customer. Swap names, prices and images through typed variables and render personalized videos on demand.

Slideshows from anything

Turn product photos, listings or reports into clean animated slideshows with transitions and music — straight from your backend.

quickstart

Your first render is one request away

This is the same quickstart as the docs — the document below is validated against the real schema in our test suite.

curl
curl -X POST https://api.automotion.dev/v1/renders \
  -H "Authorization: Bearer am_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "movie": {
    "schema": "v1",
    "preset": "9:16",
    "scenes": [
      {
        "id": "intro",
        "duration": "voice",
        "background": "#09090b",
        "elements": [
          {
            "id": "headline",
            "type": "text",
            "text": "Ship videos from code",
            "font": "Space Grotesk",
            "fontSize": 96,
            "fontWeight": 700,
            "position": "center",
            "animation": {
              "preset": "slide-in-up"
            }
          },
          {
            "id": "voiceover",
            "type": "voice",
            "text": "Automotion turns a JSON document into a finished video.",
            "voiceId": "Joanna",
            "language": "en-US"
          },
          {
            "id": "captions",
            "type": "subtitles"
          }
        ]
      }
    ]
  }
}'
render.ts
import { Automotion } from "@automotion/sdk";

const client = new Automotion({ apiKey: process.env.AUTOMOTION_API_KEY });

const render = await client.renders.create({ movie });
// → { id: "rnd_…", status: "queued" } — poll or receive a webhook,
//   then download the finished MP4 from render.url.

Render your first video in minutes

Sign up, grab an API key, and POST your first document. Your 300 trial credits need no credit card.