Jevrouter Video API · motion-control
minimax h3 · controlnet union
jev/minimax-h3/controlnet-union:video
MiniMax H3 Open Weights ControlNet Union generates a new video that follows the motion and composition of a source video. Pose, depth, edges, lines, scribble or grayscale structure is extracted from the source automatically and guides the output, optionally with reference images for the subject or style, with native stereo audio generated in the same pass. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Create an API keyOptions and pricing
Task: motion-control. Catalog base price: $0.3. The exact quote depends on your inputs; the catalog price is not a fixed per-task charge.
We reserve the quoted maximum before submission, settle the actual generation cost and release the remainder. Set jev.max_cost_usd to your maximum reservation. A quote above this limit is rejected before generation.
| Input field | Type | Required | Options / default |
|---|---|---|---|
seed | integer | No | See schema |
video | string | Yes | See schema |
prompt | string | Yes | See schema |
resolution | string | No | ["480p","540p","768p","1080p"] |
control_type | string | No | ["pose","depth","canny","soft_edge","lines","scribble","gray"] |
generate_audio | boolean | No | true |
control_strength | number | No | 1 |
reference_audios | array | No | See schema |
reference_images | array | No | See schema |
Complete input schema
{
"type": "object",
"required": [
"prompt",
"video"
],
"properties": {
"seed": {
"type": "integer",
"description": "The random seed to use for the generation. A negative value means a random seed will be used."
},
"video": {
"type": "string",
"description": "URL of the source video (up to 15 seconds are used). The control signal is extracted from it automatically and drives motion and composition; the output keeps its duration and aspect ratio."
},
"prompt": {
"type": "string",
"description": "Describe the output video. The source video's motion and composition are carried over through the selected control. Refer to reference inputs as <Picture 1>..<Picture 9> and <Audio 1>..<Audio 3>."
},
"resolution": {
"enum": [
"480p",
"540p",
"768p",
"1080p"
],
"type": "string",
"default": "480p",
"description": "Output video resolution. 768p is the model's native canvas; 480p is a faster, lower-cost tier; 540p is a mid tier at 1.5x the 480p price. 1080p is the highest-quality full-HD tier at 2x the 768p price (generation takes longer)."
},
"control_type": {
"enum": [
"pose",
"depth",
"canny",
"soft_edge",
"lines",
"scribble",
"gray"
],
"type": "string",
"default": "pose",
"description": "What to keep from the source video: pose (body, hand and face motion), depth (spatial layout), canny (precise edges), soft_edge (softer outlines), lines (straight lines, for architecture and interiors), scribble (loose sketch lines), gray (brightness structure, for recoloring).",
"x-ui-component": "select"
},
"generate_audio": {
"type": "boolean",
"default": true,
"description": "Whether to generate native audio. When set to false, the source video's audio track is preserved on the output instead."
},
"control_strength": {
"type": "number",
"default": 1,
"maximum": 2,
"minimum": 0,
"description": "How strongly the control signal constrains the output. Lower values give the prompt more freedom.",
"x-ui-component": "slider"
},
"reference_audios": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 3,
"description": "Optional reference audio URLs to guide audio generation. Refer to them in the prompt as <Audio 1>..<Audio 3>."
},
"reference_images": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 9,
"description": "Optional reference image URLs, e.g. the character to animate or a target style. Refer to them in the prompt as <Picture 1>..<Picture 9>."
}
},
"x-order-properties": [
"prompt",
"video",
"control_type",
"control_strength",
"reference_images",
"reference_audios",
"resolution",
"generate_audio",
"seed"
],
"additionalProperties": false
}Required fields and conditional rules come from the published schema. Catalog support does not mean every option has been independently tested by Jevrouter. Synchronous generation, base64 output and customer callbacks are unavailable.
1. Submit a video task
Allow this model on your Jevrouter key. Replace every placeholder below with a value of the correct type, set a USD limit, and supply any conditional fields required by the schema. Media inputs must use your own accessible URLs; this endpoint does not upload files.
curl https://api.jevrouter.io/v1/videos \
-H "Authorization: Bearer $JEVROUTER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: video-demo-001" \
-d @- <<'JSON'
{
"model": "jev/minimax-h3/controlnet-union:video",
"input": {
"video": "<video: provide string>",
"prompt": "<prompt: provide string>",
"resolution": "480p",
"control_type": "pose",
"generate_audio": true,
"control_strength": 1
},
"jev": {
"max_cost_usd": "YOUR_USD_LIMIT"
}
}
JSONSave data.id and data.urls.get. An accepted task continues even if you disconnect.
Let Jevrouter choose
Use jev/auto as the model and set task to motion-control. Your project must enable Auto, and both the project and key must allow Auto and the candidate models.
Auto checks the task type and all supplied input fields against each candidate. It compares live quotes for up to eight compatible candidates, shortlisted by catalog base price. It selects the lowest quote within that shortlist and your budget; this is not a quality ranking or a guarantee of the cheapest model in the entire catalog.
Use common options such as duration, resolution and aspect_ratio at the top level where available. Model-specific options belong in input and may narrow the pool. Unsupported options are rejected, never silently dropped. Without task, Auto defaults to text-to-video.
2. Check the result
curl https://api.jevrouter.io/v1/videos/REQUEST_ID \ -H "Authorization: Bearer $JEVROUTER_API_KEY"
Replace REQUEST_ID with your task ID. Wait at least three seconds between checks. Status progresses from queued to processing, then completed or failed. Results appear in data.outputs as media URLs or structured output objects.
If the submission response is lost, repeat the original request with the same idempotency key. A new key may create another billed task.
Results and billing
View the request in your dashboard or query /v1/requests/REQUEST_ID for reservation and settlement details. Results may be ready before the bill arrives.
Result links are retained for up to seven days and may expire earlier. Save your video while it is available. Anyone with a media URL may be able to access it. Cancellation and customer webhooks are not available.