Credits
1 credit = **1.00). Check your balance withGET /v1/credits or manage billing in the Viggle Dashboard. If an operation can’t start because the account has insufficient credit, the API returns 402 with error.code: "INSUFFICIENT_CREDITS" — see Errors and recovery.
Pricing summary
Every other operation —
GET/DELETE/list/export on any resource, and POST /v1/renders/prepare — is free.
Video Remix
Video Remix (POST /v1/renders) is billed at $0.01 per character in the render, per second of finished output:
image, image_url, or character_id — the API accepts only one character source per render; see Render Video), so in practice this is 0.10 (10 credits). The per-character term is stated explicitly so the price is unambiguous if a render ever includes more than one character — it isn’t something you can request today.
Billing uses the video’s exact finished duration in seconds — fractional seconds are billed fractionally, there is no per-render minimum charge. The amount reserved when the render starts is an estimate based on the requested inputs; it’s finalized against the actual completed duration once the render reaches ready.
Character
Creating a reusable Character withtype=render (the default) costs $0.01 (1 credit) each, flat — independent of image size or name.
Character 3D
Creating a Character withtype=vsplat extracts a 3D Gaussian splat instead of (or in addition to) the 2D render:
enhance only affects the vsplat extraction — it replaces the 0.30 rather than adding a surcharge on top. type=all is billed for both outputs it produces (the $0.01 render plus the vsplat price above). model_precision, filter_low_quality, joint_set, and render_thumbnail don’t change the price. Once ready, download the extraction from Export 3D Character.
Motion
Creating a reusable Motion from a directly uploaded or URL-supplied video withtype=render (the default) has no separate preprocessing charge — you’re only billed later, when that Motion is used in a Video Remix.
Motion 3D
Creating a Motion withtype=glb extracts a 3D skeletal animation instead of (or in addition to) the 2D render, billed by the source video’s duration:
type=all is billed for both the glb extraction above and the (free) 2D render. enable_smoothing and target_fps don’t change the price. Once ready, download both the mixamo and metahuman skeletons from Export 3D Motion.
Text-to-Motion
Create Motion (from Text) —POST /v1/motions with a JSON text body — is a flat $0.10 (10 credits) per request, regardless of duration_seconds, guidance_scale, or smooth. This is a distinct price from the per-second Motion 3D glb extraction above; a text-generated Motion is always type: glb under the hood, but it is not billed by duration.
H3 Video
Generate Video (POST /v1/videos) covers all three MiniMax H3 modes — text-to-video, first-frame, and first-and-last-frame — on one price:
duration_s (3–15, default 5) is rounded up to the next whole second before the rate is applied. quality (low for faster generation, high for higher fidelity), resolution, and aspect_ratio do not change the price — both quality tiers and every supported resolution/aspect ratio are billed at the same $0.01/second rate. Every generated video includes native audio at no extra cost. Supplying a first frame and/or last frame image costs the same as text-only generation for the same quality and duration_s.
Import Motion
Import Motion —POST /v1/motions/import — copies a Viggle motion template into your account as your own reusable Motion. It’s billed at 0.01 (1 credit). This is unrelated to the Video Remix, Motion, and Motion 3D prices above — it doesn’t process any media of yours, it only clones an existing template.
Credit reservation and settlement
Every billable operation reserves credits when the asynchronous task is created, using an estimate (for Video Remix, the requested/expected duration; for everything else, the price is already fixed at request time). That reservation is then settled once the task reaches a terminal state:ready— the reservation is settled to the final price (for Video Remix, refined against the actual completed duration; for everything else, unchanged from the initial reservation). This is the only outcome that results in a net charge.failedorcancelled— the reservation is released and no credits are charged.cancelledonly applies to Renders and is not client-triggerable (see Async jobs and result availability), but it’s treated the same asfailedfor billing.- Retrying after a
failed/cancelledoutcome means submitting a new request. That new request opens its own, independent reservation — you are not double-charged for the earlier unsuccessful attempt, since it never settled.
This reservation/settlement behavior mirrors what the Legacy extraction endpoints documented explicitly (“reserved on create, settled on success, refunded on failure”). If your integration observes different behavior for a specific V1 resource, check
error.code and request_id and contact support.Result retention
Signed output URLs —video_url, alpha_url, vsplat_url, thumbnail_url, and glb_url — are valid for 1 hour from the moment they’re issued, and are re-signed with a fresh 1-hour window every time you read the endpoint that returns them (for example, re-fetching Get Video, or calling Export 3D Character / Export 3D Motion again).
Don’t cache a URL past the hour — a request against an expired one fails with RESULT_EXPIRED (400). Download completed output promptly and store it in your own system for anything beyond quick testing; if you need a link again later, re-request the same export/download/get endpoint for a freshly signed one rather than reusing the old URL. See Errors and recovery.
Failed jobs
If a job fails, inspect itserror object — code, retryable, and remediation in particular. Do not assume a failed request created a usable output. See Errors and recovery.
