ByteDance

Seedance 2.5

Create videos up to 30 seconds, combine as many as 50 multimodal references, and refine specific moments with frame-level control.

Text to video
POSThttps://sjolt.ai/sjolt-ai/v1/bytedance/seedance-2.5/text-to-video

Seedance 2.5 Text to Video API

Create a Seedance 2.5 video task through the sjolt public API.

bash
curl https://sjolt.ai/sjolt-ai/v1/bytedance/seedance-2.5/text-to-video \
  -H "Authorization: Bearer $SJOLT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "input": {
    "prompt": "A cinematic tracking shot through a neon-lit night market after rain, with natural crowd movement and synchronized ambience.",
    "resolution": "720p",
    "duration": 10,
    "aspect_ratio": "9:16"
  },
  "webhook": "https://example.com/webhook"
}'

Parameters

NameRequiredTypeNotes
promptYesstringInstructions are required.

| duration | No | integer | 4 to 30 seconds. Defaults to 5. | | aspect_ratio | No | string | 16:9, 9:16, 1:1, 3:4, 4:3, 21:9. Defaults to 16:9. | | resolution | No | string | 480p, 480p-draft, 720p, 1080p. Defaults to 480p. | | return_last_frame | No | boolean | Defaults to false. Set to true to also return the generated video’s final frame as a PNG image when available. |

| webhook | No | string | Top-level callback URL. |

The image route requires a first frame and accepts an optional last frame. The reference route requires at least one non-empty reference array. The video-extend route requires exactly one source video, accepts optional image and audio references, and follows the source framing automatically. The video-edit route requires exactly one source video, accepts optional image and audio references, and determines framing and output length automatically. The text route rejects reference-media fields.

Use 480p-draft to create a preview for the 1080p upscale route. After it succeeds, submit its SJolt task_id to https://sjolt.ai/sjolt-ai/v1/bytedance/seedance-2.5/1080p-upscale within 7 days of creation.

Query a task

bash
curl https://sjolt.ai/sjolt-ai/v1/tasks/{task_id} \
  -H "Authorization: Bearer $SJOLT_API_KEY"

Status values are 0 for running, 1 for succeeded, and 2 for failed. Generated MP4 URLs are returned in data.output_urls.

With input.return_last_frame: true, task queries also include data.last_frame_url and successful callbacks include output.last_frame_url when the frame is available. The video URL lists remain unchanged. If frame extraction fails, the video still succeeds and the frame field is omitted. Set this option separately for each request, including 1080p upscaling; it is not inherited from a draft.

Webhook callback

If you include a top-level webhook URL in the create-task request, sjolt sends a best-effort POST to that URL when the task reaches a terminal state.

http
Content-Type: application/json

Succeeded callback:

json
{
  "task_id": "gen_7nz4q8x2",
  "status": "succeeded",
  "output": {
    "output_url_list": [
      "https://file.sjolt.ai/output/result.png"
    ]
  },
  "error": null
}

Failed callback:

json
{
  "task_id": "gen_7nz4q8x2",
  "status": "failed",
  "output": {
    "output_url_list": []
  },
  "error": "failure reason"
}

Webhook delivery is best-effort. Query https://sjolt.ai/sjolt-ai/v1/tasks/{task_id} for final status and result URLs.