---
title: "Recast a video"
description: "Recast one video with your own person and product. Send exactly one source (`source_video_url` or `source_generation_id`), a `prompt`, and at least one target: `avatar_id`, `product_id`, `references` (on the seedance-2.5-edit lane) or `elements` (Kling only). Without a target this is a plain video edit and the call is refused with `recast_target_required`.\n\nThe source must be workspace-owned media or a Discover creative (`discover/items/v2/...`): a Discover ad can be recast on purpose. Any other URL is refused with `reference_media_not_workspace_owned`.\n\nThe default model is seedance-2.5-edit (the preserve-video role). A body that sends `elements` and no `model` runs on kling-4, because only Kling takes elements. Other choices: kling-4, seedance-2.5-edit. Quoting, idempotency, the job envelope, webhooks and refunds are the same as the chosen model's own endpoint."
url: https://docs.roasos.com/api-reference/workflows/runWorkflowRecast
---

# Recast a video

Recast one video with your own person and product. Send exactly one source (`source_video_url` or `source_generation_id`), a `prompt`, and at least one target: `avatar_id`, `product_id`, `references` (on the seedance-2.5-edit lane) or `elements` (Kling only). Without a target this is a plain video edit and the call is refused with `recast_target_required`.

The source must be workspace-owned media or a Discover creative (`discover/items/v2/...`): a Discover ad can be recast on purpose. Any other URL is refused with `reference_media_not_workspace_owned`.

The default model is seedance-2.5-edit (the preserve-video role). A body that sends `elements` and no `model` runs on kling-4, because only Kling takes elements. Other choices: kling-4, seedance-2.5-edit. Quoting, idempotency, the job envelope, webhooks and refunds are the same as the chosen model's own endpoint.

## `POST /v1/workflows/recast`

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

Recast a video

Recast one video with your own person and product. Send exactly one source (`source_video_url` or `source_generation_id`), a `prompt`, and at least one target: `avatar_id`, `product_id`, `references` (on the seedance-2.5-edit lane) or `elements` (Kling only). Without a target this is a plain video edit and the call is refused with `recast_target_required`.

The source must be workspace-owned media or a Discover creative (`discover/items/v2/...`): a Discover ad can be recast on purpose. Any other URL is refused with `reference_media_not_workspace_owned`.

The default model is seedance-2.5-edit (the preserve-video role). A body that sends `elements` and no `model` runs on kling-4, because only Kling takes elements. Other choices: kling-4, seedance-2.5-edit. Quoting, idempotency, the job envelope, webhooks and refunds are the same as the chosen model's own endpoint.

### Parameters

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

### Request body

Content type: `application/json`

### Responses

- `200`: A quote (`quote_only: true`), or the terminal job when it finished inside `wait_timeout_seconds`. A quote spends nothing.
- `201`: Job created. Poll `links.status`, or pass a `webhook_url` to be told when it finishes.
- `202`: Job created and still running when `wait_timeout_seconds` elapsed.
- `400`: invalid_request, recast_target_required, unsupported_parameter (elements on a lane that takes none), or reference_media_not_workspace_owned
- `402`: insufficient_credits
- `403`: The API key is not authorized for this credit ceiling
- `404`: The avatar, product, or source generation was not found in this workspace
- `409`: The idempotency key was reused with different request data
- `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 paid request could not be claimed safely

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