Get Started
Integrate this model into your application with a few lines of code.
You need an API key to use this model.
Example request
A complete request you can copy and run in your language of choice.
# The media URL below is a placeholder. Point it at your own publicly
# reachable file before running this.
# 1. Submit
SUBMIT=$(curl -sS --fail-with-body https://api.nunchux.ai/v1/klingai/videos/motion-control \
-H "Authorization: Bearer $NUNCHUX_API_KEY" \
-H "Content-Type: application/json" \
-H "User-Agent: YourApp/1.0" \
-d '{
"model_name": "kling-v3",
"prompt": "Apply the reference video'\''s motion gracefully to the elven dancer, preserving her silver robes, luminescent flowers and forest-waterfall backdrop, soft volumetric light following her movements, painterly Ghibli atmosphere, no words should be generated.",
"mode": "std",
"image_url": "https://example.com/example.jpg",
"video_url": "https://example.com/example.mp4",
"input_video_seconds": 5,
"character_orientation": "image"
}') || { echo "submit failed: $SUBMIT" >&2; exit 1; }
TASK=$(jq -er '.data.task_id' <<<"$SUBMIT") || { echo "no task id in: $SUBMIT" >&2; exit 1; }
# 2. Poll until the task reaches a terminal status
DELAY=5
TERMINAL=0
for _ in $(seq 1 90); do
RESP=$(curl -sS https://api.nunchux.ai/v1/klingai/videos/motion-control/$TASK \
-H "Authorization: Bearer $NUNCHUX_API_KEY" \
-H "User-Agent: YourApp/1.0")
STATUS=$(jq -r '.data.task_status' <<<"$RESP")
case "$STATUS" in succeed|failed) TERMINAL=1; break ;; esac
sleep "$DELAY"; DELAY=$(( DELAY * 2 > 30 ? 30 : DELAY * 2 ))
done
[ "$TERMINAL" = 1 ] || { echo "timed out (last status: $STATUS)" >&2; exit 1; }
# 3. Check for failure
[ "$STATUS" = "succeed" ] || { echo "Kling: status $STATUS, not succeed: $(jq -c '.data.task_status_msg // empty' <<<"$RESP")" >&2; exit 1; }
# 4. Download
curl -sSL -o kling.mp4 "$(jq -r '.data.task_result.videos[0].url' <<<"$RESP")"