Documentation Index Fetch the complete documentation index at: https://docs.oxen.ai/llms.txt
Use this file to discover all available pages before exploring further.
Try Veo 3.1 Fast - Image to Video in the Workbench Run this model interactively, tune parameters, and compare outputs.
Model ID: google-veo-3-1-fast
Veo 3.1 Fast is Google’s image-to-video model for generating short, high-fidelity videos from a single input image and a motion prompt.
It supports natural motion, realistic scene animation, optional native audio generation, and controllable output settings such as duration, aspect ratio, and resolution (including 4k).
Example request
Use the Workbench as a request builder: configure parameters for this model in the UI, then open the API tab to copy the exact cURL or Python call.
Sync
Async
Async with SSE
This blocks until the video is ready (typically 5-15 minutes). Prefer Async or Async with SSE for anything beyond quick experimentation. See the video generation reference for more details. curl -X POST https://hub.oxen.ai/api/ai/videos/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OXEN_API_KEY " \
-d '{
"model": "google-veo-3-1-fast",
"prompt": "<prompt>",
"input_image": "https://hub.oxen.ai/api/repos/elau/assets/file/main/bloxy/bloxy_cropped_512x512.png"
}'
curl -X POST https://hub.oxen.ai/api/ai/videos/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OXEN_API_KEY " \
-d '{
"model": "google-veo-3-1-fast",
"prompt": "<prompt>",
"input_image": "https://hub.oxen.ai/api/repos/elau/assets/file/main/bloxy/bloxy_cropped_512x512.png",
"aspect_ratio": "auto",
"duration": "8s",
"resolution": "720p",
"generate_audio": true,
"auto_fix": false,
"safety_tolerance": "4"
}'
See the async queue reference for more details. # Enqueue, capture the generation id.
GEN_ID = $( curl -s -X POST https://hub.oxen.ai/api/ai/queue \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OXEN_API_KEY " \
-d '{
"model": "google-veo-3-1-fast",
"prompt": "<prompt>",
"input_image": "https://hub.oxen.ai/api/repos/elau/assets/file/main/bloxy/bloxy_cropped_512x512.png"
}' | jq -r '.generations[0].generation_id' )
# Poll until the generation reaches a terminal status.
while true ; do
STATUS = $( curl -s -H "Authorization: Bearer $OXEN_API_KEY " \
"https://hub.oxen.ai/api/ai/queue/ $GEN_ID " | jq -r '.status' )
echo "Status: $STATUS "
case $STATUS in succeeded | failed | cancelled ) break ;; esac
sleep 5
done
# Print the result.
curl -s -H "Authorization: Bearer $OXEN_API_KEY " \
"https://hub.oxen.ai/api/ai/queue/ $GEN_ID " | jq .
# Enqueue, capture the generation id.
GEN_ID = $( curl -s -X POST https://hub.oxen.ai/api/ai/queue \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OXEN_API_KEY " \
-d '{
"model": "google-veo-3-1-fast",
"prompt": "<prompt>",
"input_image": "https://hub.oxen.ai/api/repos/elau/assets/file/main/bloxy/bloxy_cropped_512x512.png",
"aspect_ratio": "auto",
"duration": "8s",
"resolution": "720p",
"generate_audio": true,
"auto_fix": false,
"safety_tolerance": "4"
}' | jq -r '.generations[0].generation_id' )
# Poll until the generation reaches a terminal status.
while true ; do
STATUS = $( curl -s -H "Authorization: Bearer $OXEN_API_KEY " \
"https://hub.oxen.ai/api/ai/queue/ $GEN_ID " | jq -r '.status' )
echo "Status: $STATUS "
case $STATUS in succeeded | failed | cancelled ) break ;; esac
sleep 5
done
# Print the result.
curl -s -H "Authorization: Bearer $OXEN_API_KEY " \
"https://hub.oxen.ai/api/ai/queue/ $GEN_ID " | jq .
See the async queue reference for more details. # Enqueue, capture the generation id.
GEN_ID = $( curl -s -X POST https://hub.oxen.ai/api/ai/queue \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OXEN_API_KEY " \
-d '{
"model": "google-veo-3-1-fast",
"prompt": "<prompt>",
"input_image": "https://hub.oxen.ai/api/repos/elau/assets/file/main/bloxy/bloxy_cropped_512x512.png"
}' | jq -r '.generations[0].generation_id' )
# Stream the SSE channel, grab the data line that follows a
# media_generation_completed event for our id, and pretty-print it.
curl -sN -H "Authorization: Bearer $OXEN_API_KEY " https://hub.oxen.ai/api/events \
| awk -v id=" $GEN_ID " '
/^event: media_generation_completed$/ { expect=1; next }
/^data: / && expect {
payload = substr($0, 7)
if (index(payload, "\"generation_id\":\"" id "\"")) { print payload; exit }
expect = 0
}
' | jq .
# Enqueue, capture the generation id.
GEN_ID = $( curl -s -X POST https://hub.oxen.ai/api/ai/queue \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OXEN_API_KEY " \
-d '{
"model": "google-veo-3-1-fast",
"prompt": "<prompt>",
"input_image": "https://hub.oxen.ai/api/repos/elau/assets/file/main/bloxy/bloxy_cropped_512x512.png",
"aspect_ratio": "auto",
"duration": "8s",
"resolution": "720p",
"generate_audio": true,
"auto_fix": false,
"safety_tolerance": "4"
}' | jq -r '.generations[0].generation_id' )
# Stream the SSE channel, grab the data line that follows a
# media_generation_completed event for our id, and pretty-print it.
curl -sN -H "Authorization: Bearer $OXEN_API_KEY " https://hub.oxen.ai/api/events \
| awk -v id=" $GEN_ID " '
/^event: media_generation_completed$/ { expect=1; next }
/^data: / && expect {
payload = substr($0, 7)
if (index(payload, "\"generation_id\":\"" id "\"")) { print payload; exit }
expect = 0
}
' | jq .
Fetch model details
The models endpoint returns the full model object, including its json_request_schema.
curl -H "Authorization: Bearer $OXEN_API_KEY " https://hub.oxen.ai/api/ai/models/google-veo-3-1-fast
Request parameters
Required parameters
Field Type Default Description promptstring— Text prompt describing how to animate the input image. input_imagestring— URL of the input image to animate. Should be 720p or higher in 16:9 or 9:16; other ratios are cropped. Format: uri.
Optional parameters
Field Type Default Description aspect_ratiostring"auto"Output video aspect ratio. One of: auto, 16:9, 9:16. durationstring"8s"Duration of the generated video. One of: 4s, 6s, 8s. resolutionstring"720p"Output video resolution. One of: 720p, 1080p, 4k. generate_audiobooleantrueWhether to generate audio for the video. negative_promptstring— Text describing what to avoid in the generated video. seedinteger— Random seed for deterministic generation. auto_fixbooleanfalseAutomatically rewrite prompts that fail policy or validation checks. safety_tolerancestring"4"Safety tolerance for moderation. 1 is strictest and 6 is least strict. One of: 1, 2, 3, 4, 5, 6.