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, motion_video_url, or video_url. Prefer motion_video_url in new integrations. The following compatibility fields apply to the reusable 2D Motion created by type=render or all; they have no effect on a glb-only request. The following fields apply only when type is glb or all.
Worker payload fields such as extraction/output paths, templates, character PKLs, and tracking masks remain service-managed and are not accepted as public request parameters.

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, motion_video_url, or the backward-compatible video_url alias. 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.

video_url
string<uri>
deprecated

Backward-compatible alias for motion_video_url. Do not send both URL fields.

name
string
default:""

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

model
enum<string>

Optional 2D preprocessing model used by type=render or all. It has no effect on a glb-only request. Omit to use the service default.

Available options:
V3,
v3,
V3_Preview,
V4,
v4,
V4_Preview,
V4_BaseSG
thumbnail_path
string

Optional existing thumbnail URI/path for the reusable 2D Motion created by type=render or all. It has no effect on type=glb.

thumbnail_url
string<uri>
deprecated

Multipart-only backward-compatible alias for thumbnail_path. Do not send both fields.

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:25

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

Required range: x > 0
smooth_velocity_threshold
number
default:0.12

Velocity threshold used by temporal smoothing. Applies only when enable_smoothing=true.

Required range: x >= 0
apply_std_joints
boolean
default:true

Whether dynamic extraction applies standard-joint normalization.

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.