LLMAPI VIDEO

Video API reference

Explore endpoints, request parameters, task states and usage-based billing.

GETTING STARTED

Check the access method first

Customer API-key access is not yet available

Task endpoints currently use a website session for the llmapi.pro studio. Existing API keys cannot authenticate these video endpoints. This page documents the current web interface, not an available third-party server integration.

The model catalog is public. Creating tasks, reading balances and querying tasks require a website login. Creation uses your API-wallet balance rather than subscription quotas.

Read available models for free

curl --fail-with-body 'https://llmapi.pro/api/video/catalog'

Check enabled, models[].enabled and prices. Each cents value is CNY cents per second, with applicable discounts included.

Endpoints

https://llmapi.pro/api/video

Method / pathAuthenticationBehaviour
GET /catalogPublicRead models, resolutions, rates and availability. Free.
GET /balanceWebsite sessionRead total, frozen and available API-wallet balances.
POST /tasksWebsite sessionValidate, reserve the charge and create an asynchronous task; returns 202.
GET /tasks/:idWebsite sessionRead your task; its video URL is returned after success.
GET /tasksWebsite sessionYour 30 latest tasks, newest first.

Create once, then query by task ID

Use a fresh UUID as Idempotency-Key for each new creation. Reusing the key and payload returns the original task without a second charge; changing the payload returns 409. After a submission timeout, retry with the original key and payload.

JavaScript · Same-origin website session

const requestKey = crypto.randomUUID();
const payload = {
  "model": "MiniMax-H3",
  "prompt": "A quiet forest at dawn. A slow camera push, gentle wind, no cuts.",
  "resolution": "768P",
  "duration": 5,
  "ratio": "16:9"
};

// For a signed-in page on llmapi.pro only. Calling this reserves a charge.
// Reuse the same requestKey and payload when retrying after a network failure.
async function submitVideo() {
  const res = await fetch('/api/video/tasks', {
    method: 'POST', credentials: 'same-origin',
    headers: { 'Content-Type': 'application/json', 'Idempotency-Key': requestKey },
    body: JSON.stringify(payload)
  });
  const task = await res.json();
  if (!res.ok) throw new Error(task.error || 'request_failed');
  return task;
}
// Call submitVideo() only after reviewing the price. This page does not execute it.
Example 202 response
{
  "id": "00000000-0000-4000-8000-000000000001",
  "model": "MiniMax-H3",
  "mode": "text",
  "prompt": "A quiet forest at dawn. A slow camera push, gentle wind, no cuts.",
  "resolution": "768P",
  "duration": 5,
  "ratio": "16:9",
  "price_cny": 1.5,
  "state": "queued",
  "error_code": null,
  "refunded": false,
  "created_at": "2026-10-30T00:00:00.000Z",
  "video_url": null
}

Read task status and result

async function getVideo(taskId) {
  const res = await fetch('/api/video/tasks/' + encodeURIComponent(taskId), {
    credentials: 'same-origin', cache: 'no-store'
  });
  const task = await res.json();
  if (!res.ok) throw new Error(task.error || 'request_failed');
  return task;
}
// Poll every 10–15 seconds; stop at succeeded or failed.
// Only a succeeded task exposes video_url for playback or download.

queued → submitting → pending → succeeded / failed

queued means waiting, submitting means dispatching, and pending means generating. A submission error may still be under review; only failed is a terminal failure. Check refunded for the refund outcome. Download completed videos promptly.

Request parameters

FieldTypeRequiredRules
modelstringOptionalDefaults to MiniMax-H3; check catalog.models for availability.
promptstringRequired1–5000 characters after trimming.
resolutionstringRequiredMust match a price key for the selected model; case-sensitive.
durationintegerRequired4–15 seconds
ratiostringRequired16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 · source with a first frame
first_framestringOptionaldata:image/(png|jpeg|webp);base64,…
last_framestringOptionalSame format as first_frame; requires first_frame.

Models and resolution keys

MiniMax-H3 — 768P / 2K

seedance-2.0-mini — 480p / 720p

seedance-2.0 — 480p / 720p / 1080p / 4k

Images must be still PNG, JPEG or WebP Base64 Data URLs, not remote URLs. Each decoded image is limited to 2 MiB, at least 256 pixels per side, at most 16,777,216 pixels, and aspect ratio 0.4–2.5. First and last frames must match. Crop to the selected ratio before upload, within 1% tolerance. The request-body limit is 6 MB.

Unlisted fields are rejected. There is currently no seed, separate camera parameter, reference video, audio upload, priority tier or Context-IR. Express camera and sound intent in prompt.

Billing and common errors

Reserved charge = requested duration × final per-second rate. Failed tasks are refunded to the same API wallet. price_cny, balance_cny, frozen_cny and available_cny are in CNY yuan; cents in catalog.prices is in CNY cents. See rates and multipliers →

Each account can make up to 10 creation requests per minute, with at most two active tasks per billing account.

HTTPCommon errorAction
400invalid_* / unsupported_parameter / idempotency_key_requiredCheck parameters, images and the UUID request key.
401login_requiredSign in to the website; an ordinary API key is not a substitute.
402insufficient_balanceTop up the API wallet.
403invalid_originUse a signed-in same-origin page.
404task_not_foundCheck the task ID and owning account.
409idempotency_conflictRetry with the original payload; use a new key for new creations.
429too_many_requests / too_many_active_tasksRespect Retry-After, or wait for active tasks to finish.
503video_unavailable / model_unavailable / tasks_unavailableRetry later; preserve the request key when retrying creation.