Video Generation API
Start AI video generations, poll their status, and list, download and delete videos with the Kensa API.
All paths are relative to https://www.kensa.cc/api/v1 and need an API key (see API Overview), except List models.
Generate a video
POST /video/generatecurl -X POST https://www.kensa.cc/api/v1/video/generate \
-H "Authorization: Bearer kens_your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3.1",
"prompt": "A golden retriever running through a sunlit meadow, cinematic slow motion",
"aspectRatio": "16:9"
}'Request body
| Field | Type | Required | Description |
|---|---|---|---|
model | string | Yes | Model ID: seedance-2.5, seedance-2.0, veo-3.1, seedance-1.5-pro, grok-image-video or minimax-h3 |
prompt | string | Yes | What the video should show, 1 to 5,000 characters |
duration | number | No | Length in seconds; one of the model's durations below. Defaults to the shortest. |
aspectRatio | string | No | One of the model's aspect ratios below. Defaults to 16:9. |
quality | string | No | Resolution: 480p, 720p or 1080p, as the model supports |
imageUrl | string | No | One https image URL (JPG, PNG or WebP, up to 20 MB) to use as the first frame |
imageUrls | string[] | No | Several https image URLs, up to 9 per request. With seedance-2.5, seedance-2.0, veo-3.1 and seedance-1.5-pro, two images are the first and last frame. Use either imageUrl or imageUrls. |
mode | string | No | reference-to-video to use imageUrls as reference images of the subject instead of frames (seedance-2.5, seedance-2.0 and veo-3.1 only) |
generateAudio | boolean | No | Seedance models generate audio unless you send false |
Options per model
model | duration | aspectRatio | quality |
|---|---|---|---|
seedance-2.5 | 4, 5, 6, 8, 10, 12, 15, 20, 30 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 (image-to-video follows the image) | 480p (default), 720p, 1080p (paid plans) |
seedance-2.0 | 4, 5, 6, 8, 10, 12, 15 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | 480p (default), 720p |
veo-3.1 | Always 8 | 16:9, 9:16, 1:1 | Not needed |
seedance-1.5-pro | 4, 5, 6, 8, 10, 12 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | 480p, 720p (default), 1080p |
grok-image-video | 6, 10 | 16:9, 9:16, 1:1, 4:3, 3:4 | 480p (default), 720p |
minimax-h3 | Any whole number from 5 to 15 | 16:9, 9:16, 1:1 | 480p, 768p (default), 2k (paid plans) |
kling-3 is under maintenance; requests for it return 503 with details.reason: "model_maintenance". Prices are on AI Models.
Before a generation starts, the prompt and every image are checked against the usage policy. A request that fails the check, or whose image can't be read, returns 400 and costs nothing.
Response
{
"success": true,
"data": {
"videoUuid": "vid_V1StGXR8_Z5jdHi6B-myT",
"taskId": "task_8f2c1e",
"provider": "evolink",
"status": "GENERATING",
"creditsUsed": 13
}
}creditsUsed is the exact price. The credits are reserved when the generation starts and returned if it fails. Use videoUuid for the other endpoints.
Image examples
First and last frame:
{
"model": "seedance-2.0",
"prompt": "The flower bud slowly opens into a full bloom, soft morning light",
"duration": 5,
"aspectRatio": "9:16",
"imageUrls": ["https://example.com/bud.jpg", "https://example.com/bloom.jpg"]
}Reference images:
{
"model": "veo-3.1",
"mode": "reference-to-video",
"prompt": "The character from the reference images walks through a rainy night market",
"imageUrls": ["https://example.com/front.png", "https://example.com/side.png"]
}Check the status
GET /video/{uuid}/status{
"success": true,
"data": {
"status": "COMPLETED",
"videoUrl": "https://..."
}
}A failed generation returns "status": "FAILED" and an error message. Poll every 10 to 15 seconds; most clips are ready in a few minutes. A generation that hasn't finished after 2 hours is marked FAILED and its credits are returned.
| Status | Meaning |
|---|---|
PENDING | Created, waiting for the model |
GENERATING | The model is generating the video |
UPLOADING | The video is being saved |
COMPLETED | Ready; videoUrl is set |
FAILED | Failed; the reserved credits are returned |
Get a video
GET /video/{uuid}Returns the video, including uuid, status, prompt, model, videoUrl, thumbnailUrl, duration, aspectRatio, creditsUsed, errorMessage, createdAt and completedAt. Returns 404 if the video doesn't exist or was deleted.
Download a video
GET /video/{uuid}/downloadRedirects (302) to a temporary download link for the MP4 file. Returns 409 while the file isn't ready.
curl -L -o video.mp4 https://www.kensa.cc/api/v1/video/vid_V1StGXR8_Z5jdHi6B-myT/download \
-H "Authorization: Bearer kens_your_key"List videos
GET /video/list?limit=20| Parameter | Default | Description |
|---|---|---|
limit | 20 | Videos per page |
cursor | The nextCursor value from the previous page | |
status | Only videos with this status, for example COMPLETED |
{
"success": true,
"data": {
"videos": [{ "uuid": "vid_V1StGXR8_Z5jdHi6B-myT", "status": "COMPLETED", "model": "veo-3.1" }],
"nextCursor": "vid_Uakgb_J5m9g-0JDMbcJqL"
}
}Videos are sorted newest first. nextCursor is missing on the last page.
Delete a video
DELETE /video/{uuid}Removes the video from your list. Returns { "success": true, "data": { "deleted": true } }.
List models
GET /config/modelsNo API key needed. Returns each model with its id, name, supportImageToVideo, durations, aspectRatios, qualities and creditCost. kling-3 is listed while it is under maintenance, but generating with it returns 503.