Skip to main content

Credits

1 credit = $0.01. New accounts start with 100 free credits ($1.00). Check your balance with GET /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:
A render today always has exactly one character (image, image_url, or character_id — the API accepts only one character source per render; see Render Video), so in practice this is $0.01 per finished second. For example, a 10-second finished video costs $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 with type=render (the default) costs $0.01 (1 credit) each, flat — independent of image size or name.

Character 3D

Creating a Character with type=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.25 price with $0.30 rather than adding a surcharge on top, and is on by default. type=all is billed for both outputs it produces (the $0.01 render plus the vsplat price above). model_precision, 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 with type=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 with type=glb extracts a 3D skeletal animation instead of (or in addition to) the 2D render, billed by the source video’s duration:
Any fractional remainder rounds up to the next whole second before the rate is applied — a 0.3-second clip is billed as 1 second ($0.05), and a 10.1-second clip is billed as 11 seconds ($0.55). 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 four MiniMax H3 modes — text-to-video, first-frame, first-and-last-frame, and reference-video/image — on one price, driven by duration_s and resolution:
duration_s (5–15, default 5) is rounded up to the next whole second before the rate is applied. resolution (480p, 768p, 1080p, 2k, or 4k, default 768p) sets the per-second rate — $0.01/second (1 credit) at every tier except 4k, which is $0.05/second (5 credits). quality (low for faster generation, high for higher fidelity) and aspect_ratio do not change the price — both quality tiers are billed at the same rate for a given resolution. enhance (an optional AI prompt-rewrite pass — see Generate Video (from Text)) also doesn’t affect price. Every generated video includes native audio at no extra cost. Supplying a first frame, last frame, and/or reference video/images costs the same as text-only generation for the same quality, resolution, and duration_s.

Character Animation

Using Viggle-Animate (POST /v1/videos, selected by character_image/character_image_url/character_image_urls together with a required driving_video/driving_video_url) dispatches to a separate backend, billed at 1 credit/second:
  • The service reserves the measured duration rounded up, at 1 credit ($0.01) per second. Use 5–16 seconds for planner/normal, or 5–60 seconds for agent; see the mode-specific limits.
  • Image-only requests are not supported. A request without a driving video is rejected with 400 INVALID_REQUEST and is not charged.
On ready, the charge is settled against the finished video’s duration at the same rate, capped at the reservation — settlement only ever refunds, never charges above what was reserved. There’s no caller-controlled duration_s/quality/resolution/aspect_ratio for this mode. watermark does not affect price.

Viggle Image

Generate Image (POST /v1/images) is billed per image, by resolution:
$0.01 (1 credit) per image at 1K, $0.02 (2 credits) per image at 2K, for n images (1–6) — for example, 2K with n=3 is $0.06 (6 credits). aspect_ratio, seed, and reference images don’t change the price, even though 2K with reference images produces a smaller size than text-only 2K. The whole amount is reserved when the job is created — 402 INSUFFICIENT_CREDITS if the balance can’t cover it, and no generation starts. A job either produces all n images and is charged, or fails and is refunded in full, even if some images had already been generated before it failed.

Scene Model

The scene model endpoints are billed per task, by what the task runs on the GPUs: quality, referenceImages, projection, fov, and the number of batches don’t change the price. The price is reserved when the task is submitted — 402 INSUFFICIENT_CREDITS if the balance can’t cover it, and nothing is queued; a submission refused with 409 because the session is busy is never charged. A task keeps its charge only when it finishes ready; one that ends failed or cancelled, including one that never left queued, is refunded in full. Every task reports its charge in credits. For example, the quick start — a pano from a prompt, one generate, and one reconstruct — costs $0.08 (8 credits).

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 per second of the source template’s duration, with a minimum of $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 Character Animation, the driving video’s measured 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 Character Animation, refined against the finished video’s duration but never above the reservation; for everything else, unchanged from the initial reservation). This is the only outcome that results in a net charge.
  • failed or cancelled — the reservation is released and no credits are charged. cancelled only applies to Renders and is not client-triggerable (see Async jobs and result availability), but it’s treated the same as failed for billing.
  • Retrying after a failed/cancelled outcome 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, a Motion export’s mixamo_url/metahuman_url/metahuman_body_url, and a generated image’s images[].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, or re-fetching Get Image). Generated images are deleted 24 hours after the job finishes. After that, Get Image still returns the job, but every images[].url is null — download images within that window. 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 its error object — code, retryable, and remediation in particular. Do not assume a failed request created a usable output. See Errors and recovery.