SeeDance 1.5 Pro Video Generation API
API 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
Endpoints
| Method | Path | Description |
|---|---|---|
| POST | /api/seedance-1-5-pro/generate | Generate a video |
| POST | /api/seedance-1-5-pro/check-status | Check task status |
Authentication
Authorization: Bearer YOUR_API_KEYCredits
Web Users
| 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 |
API Users (2x Credits)
| 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.
Generate Video
POST /api/seedance-1-5-pro/generateHeaders
| Header | Value |
|---|---|
Content-Type | application/json |
Authorization | Bearer YOUR_API_KEY |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Video generation prompt (max 1000 characters) |
mode | string | Yes | textToVideo or imageToVideo |
imageUrls | string[] | Conditional | Public image URLs (required for imageToVideo mode) |
aspectRatio | string | Yes | portrait (9:16) or landscape (16:9) |
resolution | string | Yes | 480p, 720p, or 1080p |
duration | string | Yes | 4, 8, or 12 (seconds) |
generateAudio | boolean | No | Generate audio for video (default: false) |
fixedLens | boolean | No | Use fixed lens (default: false) |
API calls only accept imageUrls (public URLs). Base64 image upload is not supported via API.
Examples
Text to Video
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
}'Image to Video
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
}'TypeScript
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();Response
Processing
{
"status": "processing",
"taskId": "task_abc123",
"creditsUsed": 8
}When you receive status: "processing", poll the check-status endpoint every 5-10 seconds.
Completed
{
"status": "completed",
"taskId": "task_abc123",
"videoUrl": "https://video.nanophoto.ai/seedance/...",
"generationTime": 120
}Error
{
"error": "Insufficient credits",
"errorCode": "INSUFFICIENT_CREDITS",
"requiredCredits": 8
}Check Task Status
POST /api/seedance-1-5-pro/check-statusHeaders
| Header | Value |
|---|---|
Content-Type | application/json |
Authorization | Bearer YOUR_API_KEY |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID from generate response |
Example
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"
}'Response
Still Processing
{
"status": "processing",
"taskId": "task_abc123"
}Completed
{
"status": "completed",
"taskId": "task_abc123",
"videoUrl": "https://video.nanophoto.ai/seedance/...",
"generationTime": 120
}Failed
{
"status": "failed",
"taskId": "task_abc123",
"error": "Video generation failed"
}Polling Strategy
- Poll
/api/seedance-1-5-pro/check-statusevery 5-10 seconds - Typical generation time: 1-3 minutes
- Credits are automatically refunded if generation fails
Error Codes
| errorCode | HTTP Status | Description |
|---|---|---|
LOGIN_REQUIRED | 401 | Authentication required |
INVALID_API_KEY | 401 | Invalid or expired API key |
API_KEY_RATE_LIMIT_EXCEEDED | 429 | Rate limit exceeded (100 req/hour) |
INSUFFICIENT_CREDITS | 402 | Not enough credits |
PROMPT_REQUIRED | 400 | Missing prompt |
PROMPT_LENGTH_INVALID | 400 | Prompt exceeds 1000 characters |
IMAGE_REQUIRED | 400 | imageToVideo mode requires images |
IMAGE_URLS_REQUIRED | 400 | API calls require imageUrls (no base64) |
GENERATION_FAILED | 500 | Video generation failed |
TASK_ID_REQUIRED | 400 | Missing task ID |
TASK_NOT_FOUND | 404 | Task not found or not owned by user |
INTERNAL_ERROR | 500 | Internal server error |
Veo 3.1 Video Generation API
API for generating videos using Google Veo 3.1 with text-to-video, reference image, and first/last frame modes. Supports multi-shot long videos up to 168 seconds.
OpenClaw Skills
Use NanoPhoto.AI skills through OpenClaw AI assistant - send commands via Telegram, Feishu, WeChat and more to generate videos and images.
NanoPhoto.AI Документация