Motion Styles
A motion style is how a whole video moves: how its starting slide, body slides and ending slide come in, and how the slides change. A video post takes one in videoSettings.motionStyle on generate and import: a built-in style’s name, such as "bold", or a saved style’s id. See Video Motion.
Saved styles belong to the workspace attached to your API key. They’re the same styles as Your styles 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 style never changes it.
List motion styles
GET https://embed-api.postnitro.ai/motion-style
Returns the 14 built-in styles, from the stillest to the liveliest, then the workspace’s saved styles, newest first.
Headers
embed-api-key: your-api-key-here(required)
Example Request
curl --location 'https://embed-api.postnitro.ai/motion-style' \
--header 'embed-api-key: pn-your-api-key'Response
{
"success": true,
"data": {
"styles": [
{ "id": "none", "name": "None", "builtIn": true, "summary": "Nothing moves; each slide holds for its reading time." },
{ "id": "minimal", "name": "Minimal", "builtIn": true, "summary": "Everything fades in together, with quick cross-fades." },
{ "id": "clean", "name": "Clean", "builtIn": true, "summary": "Gentle fades and rises, one after another." },
{
"id": "cmvozvvni001dv09njlrzgmvc",
"name": "Launch",
"builtIn": false,
"summary": "Starting slide: Typewriter · Body slides: Clean · Ending slide: Bold",
"createdAt": "2026-10-26T08:28:44.670Z",
"updatedAt": "2026-10-26T08:28:44.670Z"
}
]
}
}(The other 11 built-in styles are left out above.)
| Field | Type | Description |
|---|---|---|
id | string | The value to pass as videoSettings.motionStyle: a built-in style’s name, or a saved style’s id |
name | string | The style’s name, as the editor shows it |
builtIn | boolean | true for PostNitro’s styles, which can’t be changed or deleted |
summary | string | What it does, in a line. For a saved style, each kind of slide: a built-in style’s name, or its own animations, written as in Read a motion style |
createdAt, updatedAt | string | ISO-8601 times. Saved styles only |
Read a motion style
GET https://embed-api.postnitro.ai/motion-style/{id}
Returns one saved style, with its stored motion, or a built-in style by its name.
curl --location 'https://embed-api.postnitro.ai/motion-style/cmvozvvni001dv09njlrzgmvc' \
--header 'embed-api-key: pn-your-api-key'{
"success": true,
"data": {
"style": {
"id": "cmvozvvni001dv09njlrzgmvc",
"name": "Launch",
"builtIn": false,
"summary": "Starting slide: Typewriter · Body slides: title rise → description fade · Ending slide: Bold",
"motion": { "version": 1, "start": null, "kinds": { "...": "..." } },
"createdAt": "2026-10-26T08:28:44.670Z",
"updatedAt": "2026-10-26T08:28:44.670Z"
}
}
}A slide’s own animations read in order: → starts after the step before, & with it, and elements that move alike share a step (avatar,name,handle rise). A text’s split follows its preset (title typewriter/letter). After a ;, each emphasis and exit. motion is the style as the editor stores it; you don’t need it to use the style.
Save a motion style
POST https://embed-api.postnitro.ai/motion-style
Saves a style for the workspace, in one of two ways.
From a video
The whole motion of a video in your workspace, as Save as style keeps it in the editor: how each kind of slide moves, and how the slides change. designId is a video’s id: the designId Post Output gives a video post, or a video made in the editor.
curl --location 'https://embed-api.postnitro.ai/motion-style' \
--header 'Content-Type: application/json' \
--header 'embed-api-key: pn-your-api-key' \
--data '{
"name": "Launch",
"designId": "design123"
}'From built-in styles
A built-in style for each slide type, named as the import endpoint names them. body_slide covers body slides with a picture and without one. A slide type you leave out takes after the nearest one you give.
curl --location 'https://embed-api.postnitro.ai/motion-style' \
--header 'Content-Type: application/json' \
--header 'embed-api-key: pn-your-api-key' \
--data '{
"name": "Launch",
"slides": {
"starting_slide": "typewriter",
"body_slide": "clean",
"ending_slide": "bold"
}
}'Request Body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Up to 60 characters. Names needn’t be unique: use the style by its id |
designId | string | One of these | A video in your workspace, whose motion is saved |
slides | object | One of these | starting_slide, body_slide and ending_slide, each a built-in style’s name |
Response
{
"success": true,
"message": "Motion style created",
"data": {
"style": {
"id": "cmw1k3x9a0001v0lk2b7q8d4e",
"name": "Launch",
"builtIn": false,
"summary": "Starting slide: Typewriter · Body slides: Clean · Ending slide: Bold",
"motion": { "version": 1, "start": null, "kinds": { "...": "..." } },
"createdAt": "2026-10-29T10:00:00.000Z",
"updatedAt": "2026-10-29T10:00:00.000Z"
}
}
}The saved style comes back with its stored motion, as reading it gives it.
A workspace keeps up to 100 saved styles.
Change a motion style
PUT https://embed-api.postnitro.ai/motion-style/{id}
A new name, new motion (a designId or slides, as when saving), or both. New motion replaces the old whole. The response is as for saving, with "message": "Motion style updated". Videos already made with the style keep the motion they had.
curl --location --request PUT 'https://embed-api.postnitro.ai/motion-style/cmw1k3x9a0001v0lk2b7q8d4e' \
--header 'Content-Type: application/json' \
--header 'embed-api-key: pn-your-api-key' \
--data '{ "name": "Launch, slower", "slides": { "starting_slide": "typewriter", "body_slide": "cinematic", "ending_slide": "bold" } }'Delete a motion style
DELETE https://embed-api.postnitro.ai/motion-style/{id}
curl --location --request DELETE 'https://embed-api.postnitro.ai/motion-style/cmw1k3x9a0001v0lk2b7q8d4e' \
--header 'embed-api-key: pn-your-api-key'{
"success": true,
"message": "Motion style deleted",
"data": { "deleted": "cmw1k3x9a0001v0lk2b7q8d4e" }
}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 style not found. | No saved style with that id in your workspace (a sequence’s id included) |
404 | Design not found in this workspace. | designId isn’t one of your workspace’s designs |
422 | Built-in styles can't be changed or deleted. | PUT or DELETE on a built-in style’s name |
422 | Name is required | Saving without a name |
422 | Give the style's motion: … / … one way …, not more than one. | Saving with neither designId nor slides, or with both |
422 | Extra parameters passed in the body. | Any other field, steps included: steps make a sequence |
400 | That design isn't a video, so it has no motion to save. | designId is a carousel or an image |
400 | slides.<type>: not a slide type. … / slides.<type> must be a built-in style: … | A slide type or style name that doesn’t exist |
400 | There's no motion in it to save. | The video, or slides, gives nothing to save |
409 | A workspace keeps up to 100 of these. | The workspace already has 100 saved styles |