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 consolemodel: the video model name shown in the model marketplace, for examplevolcengine/doubao-seedance-2-0-260128
Basic flow
- Call
POST {{BASE_URL}}/v1/videosto create a video task. - Save the response
idasVIDEO_ID. - Call
GET {{BASE_URL}}/v1/videos/{VIDEO_ID}to check task status. - When the status is
completed, callGET {{BASE_URL}}/v1/videos/{VIDEO_ID}/contentto 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:
| Status | Meaning |
|---|---|
queued / running / processing | The task is still generating |
completed | The video is complete |
failed | The task failed |
cancelled | The task was cancelled |
expired | The 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
| Parameter | Type | Description |
|---|---|---|
model | string | Video model name from the console or model marketplace |
prompt | string | Video generation instruction |
seconds | number | Requested video duration |
size | string | Common values: 1280x720, 720x1280, 1920x1080, 1080x1920 |
input_reference | string / object | Image or video reference URL; strings are treated as image URLs |
extra_body.content | array | Provider-native multimodal input for multiple images, video references, and advanced parameters |
extra_body.duration | number | Provider-native duration; takes priority over seconds |
extra_body.ratio | string | Provider-native aspect ratio, such as 16:9 or 9:16 |
extra_body.resolution | string | Provider-native resolution, such as 720p or 1080p |
extra_body.seed | number | Fixed random seed when supported by the provider |
extra_body.watermark | boolean | Watermark 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, andexpiredtasks 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
| Symptom | Check |
|---|---|
401 or 403 | API key validity and target video model permission |
404 | base_url, /v1/videos path, or VIDEO_ID |
400 | size, seconds, input_reference, or extra_body.content format |
| Image or video reference cannot be used | The reference file must be reachable through an HTTPS URL |
| Task takes too long | Query task status and capture request time, model name, and VIDEO_ID from logs |