SeeDance 1.5 Pro Video Generation API Copy MarkdownAPI for generating videos using SeeDance 1.5 Pro with text-to-video and image-to-video modes. Supports multiple resolutions, durations, and audio generation.
Try it online: https://nanophoto.ai/seedance-1-5-pro
Method Path Description POST /api/seedance-1-5-pro/generateGenerate a video POST /api/seedance-1-5-pro/check-statusCheck task status
Authorization: Bearer YOUR_API_KEY
Resolution Duration Without Audio With Audio 480p 4s 1 2 480p 8s 2 4 480p 12s 3 6 720p 4s 2 4 720p 8s 4 8 720p 12s 6 12 1080p 4s 4 8 1080p 8s 8 16 1080p 12s 11 22
Resolution Duration Without Audio With Audio 480p 4s 2 4 480p 8s 4 8 480p 12s 6 12 720p 4s 4 8 720p 8s 8 16 720p 12s 12 24 1080p 4s 8 16 1080p 8s 16 32 1080p 12s 22 44
API calls consume 2x credits compared to web usage. Audio generation doubles the credit cost.
POST /api/seedance-1-5-pro/generate
Header Value Content-Typeapplication/jsonAuthorizationBearer YOUR_API_KEY
Parameter Type Required Description promptstring Yes Video generation prompt (max 1000 characters) modestring Yes textToVideo or imageToVideoimageUrlsstring[] Conditional Public image URLs (required for imageToVideo mode) aspectRatiostring Yes portrait (9:16) or landscape (16:9)resolutionstring Yes 480p, 720p, or 1080pdurationstring Yes 4, 8, or 12 (seconds)generateAudioboolean No Generate audio for video (default: false) fixedLensboolean No Use fixed lens (default: false)
API calls only accept imageUrls (public URLs). Base64 image upload is not supported via API.
curl -X POST "https://nanophoto.ai/api/seedance-1-5-pro/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-raw '{
"prompt": "A golden retriever running on a beach at sunset, cinematic lighting",
"mode": "textToVideo",
"aspectRatio": "landscape",
"resolution": "720p",
"duration": "8",
"generateAudio": true,
"fixedLens": false
}'
curl -X POST "https://nanophoto.ai/api/seedance-1-5-pro/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-raw '{
"prompt": "The character comes alive, walking through a magical forest",
"mode": "imageToVideo",
"imageUrls": ["https://static.nanophoto.ai/demo/nano-banana-pro.webp"],
"aspectRatio": "portrait",
"resolution": "1080p",
"duration": "12",
"generateAudio": false,
"fixedLens": true
}'
async function generateVideo () {
// Step 1: Submit generation task
const response = await fetch ( "https://nanophoto.ai/api/seedance-1-5-pro/generate" , {
method: "POST" ,
headers: {
"Content-Type" : "application/json" ,
Authorization: "Bearer YOUR_API_KEY" ,
},
body: JSON . stringify ({
prompt: "A golden retriever running on a beach at sunset" ,
mode: "textToVideo" ,
aspectRatio: "landscape" ,
resolution: "720p" ,
duration: "8" ,
generateAudio: true ,
fixedLens: false ,
}),
});
const data = await response. json ();
if (data.error) {
console. error ( "Generation failed:" , data.error);
return ;
}
const taskId = data.taskId;
console. log ( "Task submitted:" , taskId);
// Step 2: Poll for status
while ( true ) {
await new Promise (( resolve ) => setTimeout (resolve, 5000 )); // Wait 5s
const statusRes = await fetch (
"https://nanophoto.ai/api/seedance-1-5-pro/check-status" ,
{
method: "POST" ,
headers: {
"Content-Type" : "application/json" ,
Authorization: "Bearer YOUR_API_KEY" ,
},
body: JSON . stringify ({ taskId }),
}
);
const status = await statusRes. json ();
if (status.status === "completed" ) {
console. log ( "Video URL:" , status.videoUrl);
console. log ( "Generation time:" , status.generationTime, "seconds" );
return ;
}
if (status.status === "failed" ) {
console. error ( "Generation failed:" , status.error);
return ;
}
console. log ( "Still processing..." );
}
}
generateVideo ();
{
"status" : "processing" ,
"taskId" : "task_abc123" ,
"creditsUsed" : 8
}
When you receive status: "processing", poll the check-status endpoint every 5-10 seconds.
{
"status" : "completed" ,
"taskId" : "task_abc123" ,
"videoUrl" : "https://video.nanophoto.ai/seedance/..." ,
"generationTime" : 120
}
{
"error" : "Insufficient credits" ,
"errorCode" : "INSUFFICIENT_CREDITS" ,
"requiredCredits" : 8
}
POST /api/seedance-1-5-pro/check-status
Header Value Content-Typeapplication/jsonAuthorizationBearer YOUR_API_KEY
Parameter Type Required Description taskIdstring Yes Task ID from generate response
curl -X POST "https://nanophoto.ai/api/seedance-1-5-pro/check-status" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-raw '{
"taskId": "task_abc123"
}'
{
"status" : "processing" ,
"taskId" : "task_abc123"
}
{
"status" : "completed" ,
"taskId" : "task_abc123" ,
"videoUrl" : "https://video.nanophoto.ai/seedance/..." ,
"generationTime" : 120
}
{
"status" : "failed" ,
"taskId" : "task_abc123" ,
"error" : "Video generation failed"
}
Poll /api/seedance-1-5-pro/check-status every 5-10 seconds
Typical generation time: 1-3 minutes
Credits are automatically refunded if generation fails
errorCode HTTP Status Description LOGIN_REQUIRED401 Authentication required INVALID_API_KEY401 Invalid or expired API key API_KEY_RATE_LIMIT_EXCEEDED429 Rate limit exceeded (100 req/hour) INSUFFICIENT_CREDITS402 Not enough credits PROMPT_REQUIRED400 Missing prompt PROMPT_LENGTH_INVALID400 Prompt exceeds 1000 characters IMAGE_REQUIRED400 imageToVideo mode requires images IMAGE_URLS_REQUIRED400 API calls require imageUrls (no base64) GENERATION_FAILED500 Video generation failed TASK_ID_REQUIRED400 Missing task ID TASK_NOT_FOUND404 Task not found or not owned by user INTERNAL_ERROR500 Internal server error