---
title: "Extend a video"
description: "Continue one video from its last frame and get ONE longer clip: the source, then the new footage. Send exactly one source (`video_url` or `source_generation_id`), a `prompt` for what happens next, and `duration_seconds` for the added length (one of the model's own lengths).\n\nThe default model is seedance-2.5 (the animate-still role). Any image-to-video model is allowed: kling-4, seedance-2.5, gemini-omni-flash, wan-2.7, veo-3.1, seedance-2, seedance-2-pro, grok-imagine, h3-max, flux-3-max. The shape follows the source, so there is no `aspect_ratio`. When you send no `resolution`, the model resolution closest to the source is used.\n\nThe server makes two ordinary jobs: the continuation (this response) and, when the continuation completes, one merge that joins the source and the continuation. The quote is both: the continuation plus one merge credit, in `credits_breakdown`. The source plus the continuation must fit in 180 seconds. A `webhook_url` is delivered for the stitched clip.\n\nRead the run, and the stitched clip, at `/v1/workflows/extend/{id}` with the job id this call returns. If the merge cannot start, the continuation stays charged and usable, and the stage is `merge_failed`."
url: https://docs.roasos.com/api-reference/workflows/runWorkflowExtend
---

# Extend a video

Continue one video from its last frame and get ONE longer clip: the source, then the new footage. Send exactly one source (`video_url` or `source_generation_id`), a `prompt` for what happens next, and `duration_seconds` for the added length (one of the model's own lengths).

The default model is seedance-2.5 (the animate-still role). Any image-to-video model is allowed: kling-4, seedance-2.5, gemini-omni-flash, wan-2.7, veo-3.1, seedance-2, seedance-2-pro, grok-imagine, h3-max, flux-3-max. The shape follows the source, so there is no `aspect_ratio`. When you send no `resolution`, the model resolution closest to the source is used.

The server makes two ordinary jobs: the continuation (this response) and, when the continuation completes, one merge that joins the source and the continuation. The quote is both: the continuation plus one merge credit, in `credits_breakdown`. The source plus the continuation must fit in 180 seconds. A `webhook_url` is delivered for the stitched clip.

Read the run, and the stitched clip, at `/v1/workflows/extend/{id}` with the job id this call returns. If the merge cannot start, the continuation stays charged and usable, and the stage is `merge_failed`.

## `POST /v1/workflows/extend`

Endpoint: `POST https://api.roasos.com/v1/workflows/extend`

Extend a video

Continue one video from its last frame and get ONE longer clip: the source, then the new footage. Send exactly one source (`video_url` or `source_generation_id`), a `prompt` for what happens next, and `duration_seconds` for the added length (one of the model's own lengths).

The default model is seedance-2.5 (the animate-still role). Any image-to-video model is allowed: kling-4, seedance-2.5, gemini-omni-flash, wan-2.7, veo-3.1, seedance-2, seedance-2-pro, grok-imagine, h3-max, flux-3-max. The shape follows the source, so there is no `aspect_ratio`. When you send no `resolution`, the model resolution closest to the source is used.

The server makes two ordinary jobs: the continuation (this response) and, when the continuation completes, one merge that joins the source and the continuation. The quote is both: the continuation plus one merge credit, in `credits_breakdown`. The source plus the continuation must fit in 180 seconds. A `webhook_url` is delivered for the stitched clip.

Read the run, and the stitched clip, at `/v1/workflows/extend/{id}` with the job id this call returns. If the merge cannot start, the continuation stays charged and usable, and the stage is `merge_failed`.

### Parameters

- `undefined`
- `undefined`
- `undefined`

### Request body

Content type: `application/json`

### Responses

- `200`: A quote (`quote_only: true`). A quote spends nothing.
- `201`: The continuation job was created. Read the run at `/v1/workflows/extend/{id}`.
- `202`: The continuation job was created and is still running when `wait_timeout_seconds` elapsed.
- `400`: invalid_request, extend_duration_not_supported, extend_resolution_not_supported, extend_generate_audio_not_supported, extend_too_long, or reference_media_not_workspace_owned
- `402`: insufficient_credits
- `403`: The API key is not authorized for this model, for merge-videos, or for this credit ceiling
- `404`: The source generation was not found in this workspace
- `409`: The idempotency key was reused with different request data, or the source generation is not a finished video
- `410`: quote_expired: the quote must be replaced under a new idempotency key
- `429`: rate_limit_exceeded, or a concurrency or budget ceiling
- `503`: The source could not be measured, the last frame could not be extracted, or the paid request could not be claimed safely

Read the full reference at https://docs.roasos.com/api-reference/workflows/runWorkflowExtend.
