VidMage

VidMage is an AI video and image creation platform for creators. Turn your ideas and images into videos and fresh visuals.

Open the creator tools
Explore APIs
AI Video APIsAI Image APIsAI Audio APIsAI 3D APIsAI Face Swap APIsAI Effects APIs
Build with VidMage
QuickstartAPI keysVidMage MCPError reference
Your account
Developer consoleAbout VidMagePlans and creditsAPI billingContact support
© 2026 VidMage. All rights reserved.
Privacy PolicyTerms of ServiceReport Abuse
Skip to content
VidMage/Developers
Overview
APIs
All APIsAI Video APIsAI Image APIsAI Audio APIsAI 3D APIsAI Face Swap APIsAI Effects APIs
DocumentationVidMage MCPOpen console
Developers/Midjourney Video API

Midjourney Video API

Build image animation into your app with the Midjourney Video API. Submit a source image and motion prompt, choose low or high motion, and configure an ending frame or loop setting.

Get API keyView API docs
Abstract illustration for Midjourney Video API
PlaygroundAPIPricingGuideFAQs

Midjourney Video API Playground

Use your existing API key and subscription. Submitting a generation uses credits; uploading and preparing a request does not start a generation.

API access is available to subscribers only. Your subscription credits are shared across the website and the API.

View plans

Parameter

7 parameters

Text prompt describing the video to generate (max 8192 chars).

Input image URL (required, http/https).

Optional public URL for the final frame in image-to-video mode.(Optional)

Output resolution tier.(Optional)

Default: 720p

Choose subtle or stronger scene motion.(Optional)

Default: low

Reduce automatic styling for more literal motion control.(Optional)

Default: false

Make the first and last frames visually identical for looping playback.(Optional)

Default: false

Request code

#!/usr/bin/env bash
set -euo pipefail
# Set this once per intended task; preserve it and the body for transport retries.
: "${VIDMAGE_IDEMPOTENCY_KEY:?Set a unique key for this task}"

SUBMIT_RESPONSE="$(curl --fail-with-body --silent --show-error -X POST "https://vidmage.ai/api/v1/midjourney-video-generator/submit" \
  -H "Authorization: Bearer ${VIDMAGE_API_KEY}" \
  -H "Idempotency-Key: ${VIDMAGE_IDEMPOTENCY_KEY}" \
  -H "Content-Type: application/json" \
  --data-raw '{
  "prompt": "The portrait subject slowly turns toward the window as soft light shifts across the face",
  "imageUrl": "https://vidmage.ai/assets/images/samples/blue-eyed-woman-sunlight.webp",
  "resolution": "720p",
  "motion": "low",
  "raw": false,
  "loop": false
}')"
TASK_ID="$(printf '%s' "$SUBMIT_RESPONSE" | jq -er '.["taskId"]')"

while true; do
  QUERY_RESPONSE="$(curl --fail-with-body --silent --show-error -X POST "https://vidmage.ai/api/v1/midjourney-video-generator/query" \
    -H "Authorization: Bearer ${VIDMAGE_API_KEY}" \
    -H "Content-Type: application/json" \
    --data-raw "{\"taskId\":\"${TASK_ID}\"}")"
  STATUS="$(printf '%s' "$QUERY_RESPONSE" | jq -r '(.status // .data.status // "") | ascii_downcase')"
  case "$STATUS" in
    success|succeeded|completed)
      RESULT="$(printf '%s' "$QUERY_RESPONSE" | jq -r '(.result // .["videoUrl"] // .data["videoUrl"] // empty)')"
      if [ -z "$RESULT" ]; then
        printf '%s' "Result missing; preserve task $TASK_ID and query the same task again. Do not resubmit." >&2
        exit 2
      fi
      printf '%s\n' "$RESULT"
      break
      ;;
    needs_input)
      printf '%s' "Face selection required; preserve task $TASK_ID" >&2
      exit 2
      ;;
    failed|error)
      printf '%s' "$QUERY_RESPONSE" | jq -r '(.message // .error // .data.error // "Task failed")' >&2
      exit 1
      ;;
  esac
  sleep 5
done

Response data

Submit the task to see the API response here.
PlaygroundCapabilities

API documentation

Submit a request, track the task, and retrieve your result.

Required inputs
prompt imageUrl
Output
Video·videoUrl
Request setup & limitsHeaders, input options and media limits

Request headers

Authorization
Bearer YOUR_API_KEY

Keep your API key on your server.

Content-Type
application/json
Idempotency-Key
YOUR_UNIQUE_KEY

Use a new key per task. Reuse it only when retrying the same submission.

Input options & limits

Request controls follow each task's parameter rules; they do not guarantee output properties.

Midjourney Video Generator

Modes: image-to-video

Requiredprompt imageUrl
Optional inputslastFrameUrl
Media limits by mode
  • Image To VideoImage: jpg, png, webp
Request controls
  • resolution: "480p", "720p"
  • motion: "low", "high"
  • raw: default false
  • loop: default false

Input retention and output-link lifetime depend on the API contract. Confirm API-specific retention terms before making promises to your users. Upload guide ↗

Midjourney Video Generator

POST /api/v1/midjourney-video-generator/submit

Full API documentation ↗

prompt is required and imageUrl is required.

Required inputs

promptstring
Text prompt describing the video to generate (max 8192 chars).
imageUrlstring
Input image URL (required, http/https).

Edit the sample inputs for your own task before submitting.

Midjourney Video Generator request
# Set VIDMAGE_IDEMPOTENCY_KEY to a unique value for this task; preserve it for transport retries.
curl -X POST "https://vidmage.ai/api/v1/midjourney-video-generator/submit" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: ${VIDMAGE_IDEMPOTENCY_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"imageUrl":"https://vidmage.ai/assets/images/samples/blue-eyed-woman-sunlight.webp","prompt":"The portrait subject slowly turns toward the window as soft light shifts across the face","resolution":"720p","motion":"low","raw":false,"loop":false}'
# -> { "success": true, "taskId": "...", "creditsConsumed": ... }
Parameters and input rules7 fields
FieldTypeRequiredDefaultMeaning and limits
promptstringYesNot specifiedText prompt describing the video to generate (max 8192 chars). Minimum length: 1 · Maximum length: 8192
imageUrlstringYesNot specifiedInput image URL (required, http/https). No additional field constraint listed.
lastFrameUrlstringNoNot specifiedOptional public URL for the final frame in image-to-video mode. No additional field constraint listed.
resolutionstringNo"720p"Output resolution tier. Values: "480p", "720p" · Default: "720p"
motionstringNo"low"Choose subtle or stronger scene motion. Values: "low", "high" · Default: "low"
rawbooleanNofalseReduce automatic styling for more literal motion control. Default: false
loopbooleanNofalseMake the first and last frames visually identical for looping playback. Default: false
Mode-specific fields & media limits
Image To Video rules
ControlMode-specific rule
promptRequired; minimum 1 characters; maximum 8192 characters
durationValues:
resolutionValues: "480p", "720p"; mode default: "720p"
imageUrlImage input
lastFrameUrlOptional final-frame image input
motionValues: "low", "high"; Default: "low"
rawDefault: false
loopDefault: false

Retrieve the result

Save taskId from the accepted submission and send it to this endpoint:

POST /api/v1/midjourney-video-generator/query

Use the same Bearer API key. On completion, read the videoUrl result field.

Task states and recovery ↗
Midjourney Video Generator query
curl -X POST "https://vidmage.ai/api/v1/midjourney-video-generator/query" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "taskId": "TASK_ID_FROM_SUBMIT" }'
# -> { "success": true, "data": { "status": "...", "videoUrl": "https://..." } }

Pricing

See what one image, video, or generation costs in credits. Your API and website activity share the same credit balance.

API credit rates and calculated example request costs
API / workflowExample requestPrice (credits)
Midjourney Video Generatorvideo API1 generation request: 40 creditsresolution: 720p
How this is calculated
  • 480p: 15 credits / generation
  • 720p: 40 credits / generation

Base charge is per generation at the selected resolution.

Estimate your own request ↗
15–40 credits / generationBase rate varies by settings or workflow
Billed in credits. Shared with the website.Active subscription required. Unit rates and examples follow current API credit rules.Billing details⌄

Examples show the charge for the inputs listed above. Resolution, duration, audio, output count and reference media can change the total. Minimum charges and rounding follow the selected API.

Use the Playground to estimate your request before submitting it. Estimates do not start a generation. Subscription and credit-pack prices are listed on the plans page.

Your task’s recorded usage is the source of truth for the final charge.

View plans ↗Billing guide ↗

About Midjourney Video API

VidMage's Midjourney Video API is an image-to-video interface that animates an existing image from a written motion description. It requires both a source image and a prompt, with low or high motion settings. Additional controls cover an ending frame, looping, resolution, and raw mode, without a separate duration selector. To explore this model's browser workflow, open VidMage's Midjourney Video Generator.

Midjourney Video API capabilities

Animate a source image
Provide an image and prompt describing the subject movement or camera action that should follow.
Choose the motion level
Select low or high motion while keeping the source image and scene brief fixed for comparison.
Plan ending behavior
Use lastFrameUrl to supply an ending image, or review the separate loop boolean for repeating animation. Check accepted combinations alongside the resolution and raw controls.

What you can build

Animated album artwork

Moving clouds, flowing fabric, or a slow push toward the subject can extend an album cover into video. The original artwork and a motion prompt set the direction; the loop option is useful when exploring a repeating player visual.

Motion inside illustrated stories

Give a story panel a moment of movement without starting the visual design again. A character can gesture or the environment can stir, guided by the uploaded illustration and your prompt. The clip becomes an animated element in a digital reader.

Fashion mood films

Explore how a fashion illustration could move. A fabric-motion or runway-turn prompt, paired with low or high motion, gives a collection pitch different treatments to work with.

How to use Midjourney Video API

  1. Get an API key

    Create a key in the Developer Console and store it on your server. Use it in the Authorization: Bearer header.

  2. Prepare and submit your inputs

    Set up your inputs in the Playground, then copy the matching API request. Send it from your server with a unique Idempotency-Key.

  3. Track the task

    Save the returned taskId and query the same operation until it completes. Keep that identifier if your app stops waiting.

  4. Retrieve the result

    Read videoUrl from the completed task. Preview the result in your app and save a copy to your own storage for later use.

Input tips
Always supply the opening image
VidMage requires both prompt and imageUrl for this capability. Describe movement relative to the uploaded visual instead of building a prompt-only video form.
Work with the available controls
The contract exposes 480p and 720p resolution, but no duration or aspectRatio selector. Review frame and loop combinations before building them into the same request.

Input requirementsUpload local files

Task fields and results

Keep the task identifier with its original request and Idempotency-Key. Query the same capability until it completes, then read the documented result field.

Task identifier
taskId
Query route
POST /api/v1/midjourney-video-generator/query
Completed result
videoUrl
Task states and response structure ↗
Errors, retries and limits

Retry transport failures with the same idempotency key only when the original submission may not have reached the server. For a confirmed task, keep querying the original task instead of submitting a duplicate.

Read error recovery guidance ↗

FAQs

Can I extend an existing video?

This route has no source-video input for extending an existing clip. Extension examples from another Midjourney integration use a different request flow.

Are failed or timed-out requests charged?

A client timeout is not a confirmed task failure. Confirmed failures are automatically refunded only when the refund outcome is certain. Unknown charges or refunds remain pending reconciliation.

Failure and refund handling ↗
How long should my app wait for a result?

The checked contract does not establish a fixed completion time. Choose a local wait budget for your app; it is not an API completion deadline.

Polling and wait budgets ↗
What are the rate and concurrency limits?

Request-rate limits control how often you can call the API; concurrency limits control simultaneous work. The documentation ties both to the stable API key but does not publish numeric limits for this operation. Confirm account limits before planning parallel jobs.

Rate-limit recovery ↗
Can I receive results through a webhook?

The checked request contract documents status queries and does not list a webhook or callback field for these routes. Check the current authenticated OpenAPI contract before making a callback part of your integration.

Query task results ↗Check the current contract ↗

Explore more APIs on VidMage

  • Midjourney Image API↗
  • Runway API↗
  • Wan Video API↗
  • Veo 3.1 API↗
  • Kling API↗
  • Hailuo API↗
  • MiniMax H3 API↗
  • Vidu API↗