Molmo2 Video Qa API Documentation

Molmo2 Video Qa API Documentation

Playground

Try it on WaveSpeedAI!

Molmo2-4B Video QA: Answer questions about video content with temporal understanding. Open-source vision-language model. Ready-to-use REST API, no cold starts, duration-based pricing.

Features

Molmo2 Video QA is a powerful video understanding model that answers questions about video content. Simply upload a video and ask anything — the model analyzes visual scenes, actions, objects, and context to deliver accurate, natural-language responses.

Built for developers and creators who need intelligent video comprehension without building complex pipelines.


Why Choose This?

  • Natural language understanding Ask questions in plain English about what happens in your video — no need for timestamps or frame-by-frame annotation.

  • Scene and action recognition Understands objects, people, movements, environments, and temporal sequences across the video.

  • Flexible video input Accepts video uploads or public URLs for seamless integration into existing workflows.

  • Fast and accurate Optimized for quick turnaround while maintaining high comprehension accuracy.

  • Production-ready API Ready-to-use REST endpoint with predictable per-second pricing and no cold starts.


How to Use

  1. Upload your video — drag and drop a file or paste a public video URL.
  2. Write your question — describe what you want to know about the video content.
  3. Submit — the model processes the video and returns a natural-language answer.
  4. Iterate — ask follow-up questions or upload new videos as needed.

Pricing

Per-5-second billing with a 5-second minimum.

Video DurationCost
Up to 5s$0.005
10s$0.01
30s$0.03
60s$0.06
120s (max)$0.12

Billing Rules

  • Minimum charge: 5 seconds ($0.005)
  • Rate: $0.001 per second ($0.005 per 5 seconds)
  • Maximum video length: 120 seconds (2 minutes)

Best Use Cases

  • Content moderation — Automatically review video uploads for policy compliance.
  • Video search and indexing — Extract semantic information for searchable video libraries.
  • Accessibility — Generate descriptions of video content for visually impaired users.
  • Education and training — Analyze instructional videos and answer learner questions.
  • Surveillance and monitoring — Summarize events or detect specific actions in footage.
  • Social media analytics — Understand trends and content themes across video posts.

Notes

  • If using a URL, ensure it is publicly accessible. A preview thumbnail in the interface confirms successful access.
  • For videos longer than 2 minutes, split into segments and process separately.
  • Clear, well-lit footage with minimal background noise yields the best results.
  • Be specific in your questions for more precise answers.

Duration limit

The maximum supported video duration is 2 minutes.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-api-key"

REQUEST_BODY=$(cat <<'JSON'
{
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
  "text": "A clear example input"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/molmo2/video-qa" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}")

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}")
  RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
videostringYes-Input video URL for question answering. Supports common video formats (MP4, MOV, WebM). Maximum 2 minutes.
textstringYes--Your question about the video content.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.