---
title: Motion Sequences API - Saved Slide Animations
description: List, save, change and delete the motion sequences in your PostNitro workspace - one slide's animations, which a video post puts on every slide by id.
canonical: https://postnitro.ai/docs/embed/api/motion-sequences
---

# Motion Sequences

A motion sequence is one slide's animations: what moves, how, and in what order. A video post takes one in `videoSettings.sequenceId` on [generate](https://postnitro.ai/docs/embed/api/initiate/generate#video-posts) and [import](https://postnitro.ai/docs/embed/api/initiate/import#video-posts), and puts it on every slide, element by element, over the [motion style](https://postnitro.ai/docs/embed/api/motion-styles). The elements it animates move its way; the others keep the style's animations; each slide keeps its own length and transition. See [Saved styles and sequences](https://postnitro.ai/docs/embed/api/initiate/video-motion#saved-styles-and-sequences).

Sequences belong to the workspace attached to your API key. They're the same as **Your sequences** in the video editor: one saved here shows up there, and the other way round.

> **Reading is open to every key; saving, changing and deleting need an active paid plan.** A cancelled plan counts until it ends. Without one, those calls return `402`. A video already made keeps its own copy of its motion, so changing or deleting a sequence never changes it.

## List motion sequences

**GET** `https://embed-api.postnitro.ai/motion-sequence`

Returns the workspace's saved sequences, newest first.

#### Headers
- `embed-api-key: your-api-key-here` (required)

```bash
curl --location 'https://embed-api.postnitro.ai/motion-sequence' \
--header 'embed-api-key: pn-your-api-key'
```

#### Response

```json
{
    "success": true,
    "data": {
        "sequences": [
            {
                "id": "cmvode5gk0003v0p6el1cbcho",
                "name": "Big title",
                "builtIn": false,
                "summary": "title typewriter/letter → description fade; cta pulse (emphasis, repeating)",
                "createdAt": "2026-10-25T21:59:06.021Z",
                "updatedAt": "2026-10-25T21:59:06.021Z"
            }
        ]
    }
}
```

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | The value to pass as `videoSettings.sequenceId` |
| `name` | string | The sequence's name, as the editor shows it |
| `builtIn` | boolean | Always `false`: there are no built-in sequences |
| `summary` | string | Its animations in order: `→` starts after the step before, `&` with it, elements that move alike share a step, and after a `;` each emphasis and exit |
| `createdAt`, `updatedAt` | string | ISO-8601 times |

An empty list returns `200` with `"sequences": []`.

## Read a motion sequence

**GET** `https://embed-api.postnitro.ai/motion-sequence/{id}`

Returns one sequence, with its stored `motion`: the steps as the editor stores them. You don't need it to use the sequence.

```json
{
    "success": true,
    "data": {
        "sequence": {
            "id": "cmvode5gk0003v0p6el1cbcho",
            "name": "Big title",
            "builtIn": false,
            "summary": "title typewriter/letter → description fade; cta pulse (emphasis, repeating)",
            "motion": { "version": 1, "duration": "auto", "steps": ["..."] },
            "createdAt": "2026-10-25T21:59:06.021Z",
            "updatedAt": "2026-10-25T21:59:06.021Z"
        }
    }
}
```

## Save a motion sequence

**POST** `https://embed-api.postnitro.ai/motion-sequence`

Saves a sequence for the workspace, in one of two ways.

#### From a video's slide

One slide's animations, as **Save this sequence** keeps them in the editor. `designId` is a video in your workspace (the `designId` [Post Output](https://postnitro.ai/docs/embed/api/post-output) gives a video post, or a video made in the editor), and `slide` is its number, counted from 1.

```bash
curl --location 'https://embed-api.postnitro.ai/motion-sequence' \
--header 'Content-Type: application/json' \
--header 'embed-api-key: pn-your-api-key' \
--data '{
    "name": "Big title",
    "designId": "design123",
    "slide": 2
}'
```

#### From steps

The steps by element name, as [per-slide motion](https://postnitro.ai/docs/embed/api/initiate/video-motion-advanced#steps) writes them: `element` and `preset`, with any of the other step fields.

```bash
curl --location 'https://embed-api.postnitro.ai/motion-sequence' \
--header 'Content-Type: application/json' \
--header 'embed-api-key: pn-your-api-key' \
--data '{
    "name": "Big title",
    "steps": [
        { "element": "title", "preset": "typewriter" },
        { "element": "description", "preset": "fade" },
        { "element": "cta", "preset": "pulse", "repeat": "until-end" }
    ]
}'
```

A sequence keeps animations only: the slide it goes on keeps its own length and transition. Steps for the brand's `avatar`, `name` and `handle` are kept too, and play wherever a slide shows them.

#### Request Body

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Up to 60 characters. Names needn't be unique: use the sequence by its `id` |
| `designId` | string | One of these | A video in your workspace, with `slide` |
| `slide` | number | With `designId` | The slide whose animations are saved, counted from 1 |
| `steps` | array | One of these | The steps, by element name |

#### Response

```json
{
    "success": true,
    "message": "Motion sequence created",
    "data": {
        "sequence": {
            "id": "cmw1k7m2c0003v0lk9f5x1r8t",
            "name": "Big title",
            "builtIn": false,
            "summary": "title typewriter/letter → description fade; cta pulse (emphasis, repeating)",
            "motion": { "version": 1, "duration": "auto", "steps": ["..."] },
            "createdAt": "2026-10-29T10:00:00.000Z",
            "updatedAt": "2026-10-29T10:00:00.000Z"
        }
    }
}
```

The saved sequence comes back with its stored `motion`, as [reading it](#read-a-motion-sequence) gives it.

A workspace keeps up to 100 saved sequences.

## Change a motion sequence

**PUT** `https://embed-api.postnitro.ai/motion-sequence/{id}`

A new `name`, new steps (a `designId` and `slide`, or `steps`, as when saving), or both. New steps replace the old whole. The response is as for saving, with `"message": "Motion sequence updated"`.

```bash
curl --location --request PUT 'https://embed-api.postnitro.ai/motion-sequence/cmw1k7m2c0003v0lk9f5x1r8t' \
--header 'Content-Type: application/json' \
--header 'embed-api-key: pn-your-api-key' \
--data '{ "name": "Big title, typed" }'
```

## Delete a motion sequence

**DELETE** `https://embed-api.postnitro.ai/motion-sequence/{id}`

```json
{
    "success": true,
    "message": "Motion sequence deleted",
    "data": { "deleted": "cmw1k7m2c0003v0lk9f5x1r8t" }
}
```

## Errors

| Status | Message | When |
|--------|---------|------|
| `402` | `Saving motion styles and sequences needs an active paid plan.` | Saving, changing or deleting with a plan that is expired or past due. A cancelled plan can until it ends. A key without API credits, such as a free plan's, gets the API's usual `402` before this |
| `404` | `Motion sequence not found.` | No saved sequence with that id in your workspace (a style's id included) |
| `404` | `Design not found in this workspace.` | `designId` isn't one of your workspace's designs |
| `422` | `Name is required` | Saving without a `name` |
| `422` | `Give the sequence's motion: …` / `… one way …, not more than one.` | Saving with neither `designId` nor `steps`, or with both |
| `422` | `slide must be the slide's number, counted from 1` | `slide` isn't a whole number from 1 |
| `422` | `Extra parameters passed in the body.` | Any other field, `slides` included: built-in styles by slide type make a [style](https://postnitro.ai/docs/embed/api/motion-styles) |
| `400` | `slide must be one of the design's slides, from 1 to <n>.` | The video has no such slide |
| `400` | `Slide <n> has no animations to save.` | That slide doesn't move |
| `400` | `That design isn't a video, so it has no motion to save.` | `designId` is a carousel or an image |
| `400` | `steps.<n>.<field>: …` | A step that can't be used, and where it is, such as `steps.0.element: …` |
| `400` | `There are no animations in it to save.` | `steps` is empty |
| `409` | `A workspace keeps up to 100 of these.` | The workspace already has 100 saved sequences |
