---
title: Video Motion
description: How a video post made through the API moves - animated by default, in a built-in motion style, or with the styles and sequences saved in your workspace.
canonical: https://postnitro.ai/docs/embed/api/initiate/video-motion
---

# Video Motion

A video post (`postType: "VIDEO"`) moves the way a video made in the [video editor](https://postnitro.ai/docs/how-to/make-videos) does, and you don't have to ask: a request with no motion in it is animated for you. To choose how it moves, name a style, or use a style or sequence saved in your workspace.

| You send in `videoSettings` | Your video |
|-----------------------------|------------|
| Nothing (or no `videoSettings` at all) | Moves as its template does, when the template has motion; otherwise in the **Clean** style |
| `"motionStyle": "bold"` | Every slide in a [built-in style](#motion-styles) |
| `"motionStyle": "<saved style id>"` | Every slide in one of [your saved styles](#saved-styles-and-sequences) |
| `"sequenceId": "<saved sequence id>"` | A [saved sequence](#saved-styles-and-sequences)'s animations on every slide, over the style |

These go in `videoSettings` on [Generate](https://postnitro.ai/docs/embed/api/initiate/generate#video-posts) and [Import](https://postnitro.ai/docs/embed/api/initiate/import#video-posts). The saved design carries the motion, so the MP4 and the editor play the same thing, and the video runs as long as its motion takes: see [Length](#length).

## Examples

The smallest video request: no `videoSettings`, so it's animated as its template is, or in Clean.

```bash
curl --location 'https://embed-api.postnitro.ai/post/initiate/generate' \
--header 'Content-Type: application/json' \
--header 'embed-api-key: pn-your-api-key' \
--data '{
    "postType": "VIDEO",
    "responseType": "MP4",
    "templateId": "xtrnxgfgk9a08tmsz2601k1c",
    "brandId": "cmdhb8oe10006v0pmh6a4no6t",
    "presetId": "preset123",
    "aiGeneration": {
        "type": "text",
        "context": "Three habits that make remote teams faster"
    }
}'
```

A video in one of your saved styles, with a saved sequence's animations on every slide and music under it:

```json
"videoSettings": {
    "motionStyle": "cmvozvvni001dv09njlrzgmvc",
    "sequenceId": "cmvode5gk0003v0p6el1cbcho",
    "backgroundMusicId": "cmqi7jyir0003v0m91hxnyyaq"
}
```

`videoSettings` also takes the music's volume, `backgroundMusicVolume` ([Background music](https://postnitro.ai/docs/embed/api/initiate/import#background-music)), and a `voiceover` the AI writes and records ([Voiceover](https://postnitro.ai/docs/embed/api/initiate/voiceover)).

## Motion styles

`motionStyle` gives every slide a style's animations and timing, as [picking a motion style](https://postnitro.ai/docs/how-to/make-videos/pick-a-motion-style) does in the editor. [`GET /motion-style`](https://postnitro.ai/docs/embed/api/motion-styles#list-motion-styles) lists them, with your saved ones after.

| Style | What it looks like |
|-------|--------------------|
| `none` | Nothing moves; each slide holds for its reading time. |
| `minimal` | Everything fades in together, with quick cross-fades. |
| `clean` | Gentle fades and rises, one after another. The default. |
| `slideshow` | Slides swipe across while pictures slowly zoom. |
| `editorial` | Headlines and pictures wipe in, and pages wipe across. |
| `cinematic` | Slow blurs and fades that linger. |
| `luxe` | Letters gather slowly and the button glints. |
| `story` | One part at a time, with words popping in like captions. |
| `typewriter` | Text types itself in, with straight cuts. |
| `snap` | Everything zips in from the side, with quick slide changes. |
| `bold` | Pops and slides, pushing from slide to slide. |
| `playful` | Bouncing letters and springy text, with slides pushing up. |
| `kinetic` | Waves, jumps and turning slides, with a pulsing button. |
| `glitch` | Text glitches into place, with hard cuts. |

## Saved styles and sequences

Your workspace keeps the motion people save, shared by everyone in it:

- A **style** is a whole video's motion: how its starting slide, body slides and ending slide move, and how the slides change. `motionStyle` takes its id in place of a built-in style's name.
- A **sequence** is one slide's animations: what moves, in what order. `sequenceId` puts it on every slide, element by element. The elements it animates move its way; the others keep the style's animations, and each slide keeps its own length and transition. A step for an element a slide doesn't show, such as an image on a slide without one, is skipped. With no style, a sequence goes over the template's motion, or over Clean.

They're saved in the video editor (**Your styles** and **Your sequences** in Video), or through the API's [Motion Styles](https://postnitro.ai/docs/embed/api/motion-styles) and [Motion Sequences](https://postnitro.ai/docs/embed/api/motion-sequences) endpoints, which can also make them from a video you've already made. Pass them by id; names aren't taken, since two can share one.

A video keeps its own copy of the motion it was given: changing or deleting a saved style or sequence later doesn't change the videos already made with it.

## From a template

A video made from a template that has motion moves as the template does, with no `motionStyle` in the request. Each slide takes after the template slide it matches: the opening slide the template's first, the closing slide its last, and the others its content slides, with a picture or without one, as they have.

- A slide the template animates with a [motion style](#motion-styles) gets that style, fitted to its own words and pictures.
- A slide the template's author animated by hand gets a copy of its animations.

`motionStyle` replaces the template's motion, and a sequence goes over it. A video saved as a template in the editor keeps its motion, so its videos made through the API do too.

## Length

A video runs as long as its slides and motion take: each slide's animations and the time it takes to read, or, with a [voiceover](https://postnitro.ai/docs/embed/api/initiate/voiceover), as long as its narration needs. You don't set it. `videoDuration` is still accepted, so requests that send it keep working, but it isn't used.

A video can run at most 2:00. A longer one is still made, and its design saved:

- A `DESIGN` response completes as usual.
- An `MP4` fails with an error that gives its length, along with the design's `designId` and `editorUrl`, so you can shorten it in the editor, for example with fewer slides, and download it there. See [Post Output](https://postnitro.ai/docs/embed/api/post-output#when-a-video-is-too-long).

[Post Output](https://postnitro.ai/docs/embed/api/post-output)'s `duration` says how long a video runs, in seconds.

## What's checked

The style, the saved style's id and the sequence's id are checked when you make the request, before anything is generated or charged. An unknown one returns a `422` that says which, such as `videoSettings.sequenceId must be the id of one of your saved sequences.`

The `COMPOSE_MOTION` step in [Check Post Status](https://postnitro.ai/docs/embed/api/request-status) says how long the video runs. When a template's motion, or the default style, couldn't be applied, it says so there, and the video is made without it.

## Each slide's own motion

For a slide-by-slide say over the animations, `motion` gives each slide its own steps, transition and hold, with the editor's presets and custom keyframes. Most videos don't need it: a style or sequence saved in the editor gives the same control without writing it. See [Per-Slide Motion](https://postnitro.ai/docs/embed/api/initiate/video-motion-advanced).

## Scheduling

A video scheduled as a reel plays its design's motion and runs as long as it does. The scheduling API's [`postSettings`](https://postnitro.ai/docs/embed/api/schedule/platform-settings#postsettings) takes its music, `backgroundMusicId`; a `videoDuration` there is ignored too.
