Skip to main content
POST
Create a reusable motion asset
Send multipart/form-data with a driving video uploaded as a file or supplied by URL. type selects what gets produced: render (default) creates only the render-ready 2D Motion, glb creates only the 3D skeletal animation, and all produces both and is billed for both. This uses the same POST /v1/motions endpoint as Create Motion (from Text), but the content type and request fields are different.
Pricing (1 credit = $0.01): type=render has no separate preprocessing charge. type=glb costs 5 credits per second of source video, rounded up. type=all is billed for both. See Pricing and retention.

Request parameters

Send multipart/form-data. Provide exactly one of motion_video or motion_video_url. For reusable Motions, the service generates and stores the thumbnail internally from the source video. The following fields apply only when type is glb or all.
This is the complete public request contract. Staged video paths, intermediate and output locations, extraction templates, character PKLs, joint configuration, and tracking masks are managed by the service.

Response parameters

Returns 200 OK with a Motion object.

Examples

To also extract a 3D glb animation, add type=glb (or all to keep the render too):
cURL

Next step

Use Get Motion to poll the ID, then Export 3D Motion (for 3D/game engines) once its glb.status is ready.

Create Motion (from Text)

Generate a 3D Motion from a text prompt using the same endpoint with JSON.

Authorizations

Authorization
string
header
required

Server-side SDK clients use a project API key. Remote MCP clients use an OAuth access token. Never expose a project API key in browser code.

Headers

X-Request-Id
string

Optional caller-supplied correlation ID, up to 128 characters. The service returns the effective value in the response header for tracing and support.

Required string length: 1 - 128
X-Viggle-Source
string

Optional source-channel label, up to 128 characters, used to attribute traffic to an SDK, integration, product surface, or internal workflow.

Required string length: 1 - 128

Body

Supply the source video as exactly one of motion_video or motion_video_url. type selects what gets produced from it — see createMotion. The fields below type apply only when it is glb or all. This is the complete public contract; staged paths, output locations, extraction templates, character PKLs, joint configuration, and tracking masks are service-managed.

motion_video
file

Driving video uploaded directly. Supply exactly one of motion_video or motion_video_url.

motion_video_url
string<uri>

Publicly reachable URL of the driving video. Supply this instead of motion_video, and keep it accessible during ingestion.

name
string
default:""

Optional label for render or all. A glb-only Motion currently returns an empty name.

type
enum<string>
default:render

Outputs to produce: render for the reusable 2D Motion (no separate preprocessing charge), glb for only the 3D animation (5 credits per second of source video, rounded up), or all for both.

Available options:
render,
glb,
all
enable_smoothing
boolean
default:false

Whether to apply motion smoothing during 3D extraction. Applies only to type=glb or all and may reduce frame-to-frame jitter.

target_fps
number
default:30

Target extraction and GLB timeline frame rate. Omit to use the extraction service's 30 FPS default. The value must be greater than zero and applies only to type=glb or all.

Required range: x > 0
task_id
string

Client-supplied idempotency key for type=glb. For type=all, the service keys the companion extraction with the Motion ID. Use a unique, stable non-empty value when retrying the same creation request; reusing it for separate work causes a conflict.

Minimum string length: 1

Response

Motion queued.

A character or motion asset. Both resources share one wire shape.

progress is null in list responses. error is always null, including on a failed asset: read status to detect failure.

type reflects what was requested at creation. For characters it is render, vsplat, or all; for motions it is render, glb, or all. Assets created before type existed report render. vsplat and glb carry that extraction's own status — never download URLs, which come from GET /v1/characters/{character_id}/export or GET /v1/motions/{motion_id}/export instead — and are null unless type requested that extraction. On an all asset, the top-level status only reaches ready once both the 2D render and the 3D extraction have; if either fails, the top-level status is failed while the sub-object's own status still shows which one it was.

id
string
required

Public asset identifier. Character IDs normally begin with char_; Motion IDs normally begin with mot_.

Minimum string length: 1
status
enum<string>
required

Overall lifecycle of the asset. Use an asset for rendering or export only after the required capability becomes ready.

Available options:
queued,
processing,
ready,
failed,
cancelled
name
string
required

Display name supplied at creation or derived during import; it may be empty when a workflow does not accept a name.

progress
integer | null
required

Best-effort processing percentage from 0 through 100 on detail responses; null in list responses or when unavailable.

Required range: 0 <= x <= 100
capabilities
string[]
required

What the asset can be used for. video_render appears once the asset is ready.

created_at
string | null
required

ISO 8601 timestamp with a UTC offset, for example 2026-07-31T09:15:22+00:00.

completed_at
string | null
required

ISO 8601 timestamp with a UTC offset when all requested processing reached a terminal state; null while work is active.

error
object | null
required

Reserved top-level failure detail. It is currently always null; detect failure from status and inspect extraction sub-objects when applicable.

type
enum<string>
default:render
required

Work requested when the asset was created. render produces the 2D render-ready asset, vsplat/glb requests 3D output, and all requests both supported outputs.

Available options:
render,
vsplat,
glb,
all
vsplat
object | null
required

Character vsplat extraction status. Null for motions, and for characters whose type is render. The request parameters (model_precision, etc.) submitted at creation are not echoed back here — this is status only.

glb
object | null
required

Motion 3D animation extraction/generation status. Null for characters, and for motions whose type is render.