Skip to main content

Video Models

Video models use Prysm's OpenAI-compatible video endpoint. The endpoint is task-based: a create request returns a video task ID, then you query the task status and download the MP4 after completion.

Start with these three values

  • base_url: {{BASE_URL}}
  • api_key: your Prysm API key from the console
  • model: the video model name shown in the model marketplace, for example volcengine/doubao-seedance-2-0-260128

Basic flow

  1. Call POST {{BASE_URL}}/v1/videos to create a video task.
  2. Save the response id as VIDEO_ID.
  3. Call GET {{BASE_URL}}/v1/videos/{VIDEO_ID} to check task status.
  4. When the status is completed, call GET {{BASE_URL}}/v1/videos/{VIDEO_ID}/content to download the MP4.

Clients can poll task status. If a client stops polling, the backend still continues task status handling and completion billing. To show or download the result, the client still needs to query status or content with VIDEO_ID.

Text to video

curl -sS -X POST "{{BASE_URL}}/v1/videos" \
-H "Authorization: Bearer YOUR_PRYSM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "volcengine/doubao-seedance-2-0-260128",
"prompt": "A small paper boat floating on a calm blue pond, soft morning light, cinematic camera movement, no text, no subtitles.",
"seconds": 5,
"size": "1280x720"
}'

Image to video

For one image reference, use input_reference with a publicly reachable HTTPS image URL.

curl -sS -X POST "{{BASE_URL}}/v1/videos" \
-H "Authorization: Bearer YOUR_PRYSM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "volcengine/doubao-seedance-2-0-260128",
"prompt": "Animate the product image with a slow commercial camera push-in, clean highlights, no text, no subtitles.",
"input_reference": "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic1.jpg",
"seconds": 5,
"size": "1280x720"
}'

For multiple images or provider-native multimodal content, use extra_body.content:

{
"model": "volcengine/doubao-seedance-2-0-260128",
"prompt": "Animate this reference image.",
"seconds": 5,
"size": "1280x720",
"extra_body": {
"content": [
{"type": "text", "text": "Animate this reference image."},
{"type": "image_url", "image_url": {"url": "https://example.com/product.png"}}
]
}
}

Video to video

Video reference input can also use input_reference. Host the video file first and pass a reachable HTTPS URL.

curl -sS -X POST "{{BASE_URL}}/v1/videos" \
-H "Authorization: Bearer YOUR_PRYSM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "volcengine/doubao-seedance-2-0-260128",
"prompt": "Keep the same subject and lighting, extend the motion with a smooth cinematic camera move, no text, no subtitles.",
"input_reference": {
"type": "video_url",
"video_url": {
"url": "https://example.com/input.mp4"
}
},
"seconds": 5,
"size": "1280x720"
}'

For multiple references or more provider-native parameters, use extra_body.content:

{
"model": "volcengine/doubao-seedance-2-0-260128",
"prompt": "Create a new shot using the motion and style of the reference video.",
"seconds": 5,
"size": "1280x720",
"extra_body": {
"content": [
{"type": "text", "text": "Create a new shot using the motion and style of the reference video."},
{"type": "video_url", "video_url": {"url": "https://example.com/input.mp4"}}
]
}
}

Query status

curl -sS \
-H "Authorization: Bearer YOUR_PRYSM_API_KEY" \
"{{BASE_URL}}/v1/videos/VIDEO_ID"

Common statuses:

StatusMeaning
queued / running / processingThe task is still generating
completedThe video is complete
failedThe task failed
cancelledThe task was cancelled
expiredThe task expired

Download MP4

curl -sS \
-H "Authorization: Bearer YOUR_PRYSM_API_KEY" \
"{{BASE_URL}}/v1/videos/VIDEO_ID/content" \
--output seedance-output.mp4

Common parameters

ParameterTypeDescription
modelstringVideo model name from the console or model marketplace
promptstringVideo generation instruction
secondsnumberRequested video duration
sizestringCommon values: 1280x720, 720x1280, 1920x1080, 1080x1920
input_referencestring / objectImage or video reference URL; strings are treated as image URLs
extra_body.contentarrayProvider-native multimodal input for multiple images, video references, and advanced parameters
extra_body.durationnumberProvider-native duration; takes priority over seconds
extra_body.ratiostringProvider-native aspect ratio, such as 16:9 or 9:16
extra_body.resolutionstringProvider-native resolution, such as 720p or 1080p
extra_body.seednumberFixed random seed when supported by the provider
extra_body.watermarkbooleanWatermark control when supported by the provider

Billing

  • Video tasks are billed after the provider confirms completed.
  • Task creation, status queries, and content downloads are lifecycle operations.
  • Repeated queries for the same completed task only bill the completed result once.
  • failed, cancelled, and expired tasks are not billed as completed videos.
  • Image input, video input, resolution, and duration can produce different costs. Use usage records and billing ledger entries as the source of truth.

Troubleshooting

SymptomCheck
401 or 403API key validity and target video model permission
404base_url, /v1/videos path, or VIDEO_ID
400size, seconds, input_reference, or extra_body.content format
Image or video reference cannot be usedThe reference file must be reachable through an HTTPS URL
Task takes too longQuery task status and capture request time, model name, and VIDEO_ID from logs