v1 API

VideoCurrent API

Use a native asynchronous task contract for all four MiniMax H3 generation modes. The API and website share the same account credits and private media. Download the OpenAPI schema.

Authentication

Create an API key in Account. Send it as a Bearer token. The full key is shown once and stored as a hash.

Authorization: Bearer vc_YOUR_KEY

Upload an asset

POST /v1/assets accepts image metadata and returns a short-lived signed PUT URL. Upload the JPEG, PNG, or WebP directly to that URL, then call POST /v1/assets/{id}/complete. The confirmed asset ID can be used as a first or last frame.

Create a video

POST /v1/videos requires a unique Idempotency-Key. It returns HTTP 202 with a task ID, status, and locked credit price.

cURL

curl https://api.videocurrent.com/v1/videos \
  -H "Authorization: Bearer vc_YOUR_KEY" \
  -H "Idempotency-Key: campaign-shot-12" \
  -H "Content-Type: application/json" \
  -d '{"mode":"text_to_video","prompt":"A precise dolly shot through mist"}'

JavaScript

const response = await fetch("https://api.videocurrent.com/v1/videos", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VIDEOCURRENT_API_KEY}`,
    "Idempotency-Key": crypto.randomUUID(),
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ mode: "text_to_video", prompt: "A precise dolly shot through mist" })
});
const video = await response.json();

Python

import os, uuid, requests

response = requests.post(
    "https://api.videocurrent.com/v1/videos",
    headers={
        "Authorization": f"Bearer {os.environ['VIDEOCURRENT_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={"mode": "text_to_video", "prompt": "A precise dolly shot through mist"},
)
video = response.json()
ModeRequired fields
text_to_videoprompt
first_frameprompt, first_frame_asset_id
last_frameprompt, last_frame_asset_id
first_last_frameprompt, both asset IDs

Task states

queuedrunningretrying or reconcilingfinalizingcompleted / failed.

Use GET /v1/videos/{id} to retrieve current state and a short-lived result URL.

Webhooks

Create and revoke endpoints with POST /v1/webhooks and DELETE /v1/webhooks/{id}. The signing secret is shown once. Verify X-VideoCurrent-Signature against timestamp.raw_body before parsing JSON. Event types are video.completed, video.failed, and video.canceled.

Errors

Every error returns a stable code, an English message, and a request_id for support.

{"code":"insufficient_credits","message":"Add credits to create this video.","request_id":"..."}