---
title: "Animate an image into a video clip (18 tokens per second)"
method: POST
path: "/v1/generate/animate"
---

# Animate an image into a video clip (18 tokens per second)

`POST /v1/generate/animate`

## Request

- Base URL: `https://api.ffmpeg-micro.com`
- URL: `https://api.ffmpeg-micro.com/v1/generate/animate`
- Auth: HTTP bearer

Image to video (Kling 2.5 Turbo Pro), 5 or 10 seconds. Asynchronous: the balance is checked, the render is submitted, and the tokens are charged under the returned `id`. Poll `GET /v1/generate/animate/{id}` until `completed` or `failed`; a failed render is refunded on that poll. If the render cannot be charged after submit it is cancelled and the response carries its `id` and `cancelled`. Rate limited to 30/min.

## Request body

- GenerateAnimateRequest
  - `image_url` string, uri, required: https start frame
  - `prompt` string, required: What moves and how
  - `duration` 5 | 10
  - `aspect` '16:9' | '9:16' | '1:1'
  - `negative_prompt` string: What the motion must not introduce

## Response `202`

Render queued and charged

- GenerateAnimateQueued
  - `id` string: Poll handle for GET /v1/generate/animate/:id
  - `status` 'queued'
  - `duration` integer
  - `aspect` string
  - `tokens_charged` number

## Other responses

- `400`: Invalid input (charged nothing)
- `401`: Missing/invalid API key
- `402`: Not enough tokens for this call; nothing was charged (for `animate`, `id` and `cancelled` are present if a render had already been submitted)
- `429`: Per-API-key rate limit exceeded (free routes 60/min, paid routes 30/min); see `x-ratelimit-*` headers
- `502`: The provider failed; any tokens spent were refunded unless `refund` says otherwise

---

[API](https://skmtc.dev/ffmpeg-micro/apis/ffmpeg-micro-api.md) · [All operations](https://skmtc.dev/ffmpeg-micro/apis/ffmpeg-micro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ffmpeg-micro/apis/ffmpeg-micro-api/revisions/64bb930ff345?raw)
