---
title: "Animate a still"
description: "Turn one still your workspace owns into one video. Send exactly one source (`image_url` or `upload_id`) and a `prompt`, or set `auto_prompt: true` to analyze the still first and derive the prompt from it — that analysis is billed on top of the video.\n\nThe default model is seedance-2.5 (the animate-still role); `kling-4` is the other choice. roasOS never switches the model for you.\n\nOne call makes one video. There is no fan-out."
url: https://docs.roasos.com/api-reference/workflows/runWorkflowStaticToVideo
---

# Animate a still

Turn one still your workspace owns into one video. Send exactly one source (`image_url` or `upload_id`) and a `prompt`, or set `auto_prompt: true` to analyze the still first and derive the prompt from it — that analysis is billed on top of the video.

The default model is seedance-2.5 (the animate-still role); `kling-4` is the other choice. roasOS never switches the model for you.

One call makes one video. There is no fan-out.

## `POST /v1/workflows/static-to-video`

Endpoint: `POST https://api.roasos.com/v1/workflows/static-to-video`

Animate a still

Turn one still your workspace owns into one video. Send exactly one source (`image_url` or `upload_id`) and a `prompt`, or set `auto_prompt: true` to analyze the still first and derive the prompt from it — that analysis is billed on top of the video.

The default model is seedance-2.5 (the animate-still role); `kling-4` is the other choice. roasOS never switches the model for you.

One call makes one video. There is no fan-out.

### 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, or reference_media_not_workspace_owned
- `402`: insufficient_credits
- `403`: The API key is not authorized for this model or credit ceiling
- `404`: The upload or product was not found in this workspace
- `409`: The idempotency key was reused with different request data, or the upload is not ready
- `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/runWorkflowStaticToVideo.
