Endpoint

Image to video

POSThttps://lannevideo.com/api/v1/image-to-video

Animate a still. Send a public image URL and describe the motion; the clip starts from your image. Same rendering time as text to video.

Request

curl https://lannevideo.com/api/v1/image-to-video \
  -X POST \
  --max-time 300 \
  -H "Authorization: Bearer $NB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "image_url": "https://example.com/product-still.jpg",
  "prompt": "Slow orbit around the bottle, soft studio light, drops sliding down the glass",
  "video_model": "minimax-h3",
  "duration": 6,
  "aspect_ratio": "1:1"
}'
The image must be reachable without login or cookies: a public HTTPS URL to a JPG, PNG or WebP file.

Body parameters

image_urlstringrequired
Public URL of the source image. It becomes the first frame.
promptstring
How the image should move: camera, subject, atmosphere. Without it the model animates the image on its own.
video_modelstringdefault minimax-h3
minimax-h3 MiniMax H3 Ultra Fast (default), seedance-2.5 Seedance 2.5 Fast, flux-3 FLUX 3 Max. The legacy ids veo3, seedance2 and flux3 still work. See Models.
durationintegerdefault 5
Length in seconds: minimax-h3 5 to 15, seedance-2.5 4 to 15, flux-3 5 to 20. A value outside the model's range falls back to 5.
resolutionstring
minimax-h3: 480P or 768P (default). seedance-2.5: 480p (default) or 720p. flux-3: 720p (default) or 1080p. Asking for more than a model renders gives its best resolution.
aspect_ratiostringdefault 16:9
21:9 16:9 4:3 1:1 3:4 9:16 on every model, plus 2:1 on flux-3.
motion_intensitystringdefault medium
low, medium or high.

Response

200 OK
{
    "success": true,
    "video_id": 48214,
    "video_url": "https://…/48214.mp4",
    "thumbnail_url": "https://…/48214.jpg",
    "credits_used": 5,
    "rate_limit": {
        "count": 3,
        "limit": 15,
        "remaining": 12,
        "reset_in_seconds": 1412,
        "reset_at": "2026-10-21 16:30:00"
    }
}
successboolean
true when the clip is rendered.
video_idinteger
Id of the generation. Pass it to video status.
video_urlstring
MP4 file. Download it if you need to keep it long term.
thumbnail_urlstring | null
Still frame, when the model produced one.
credits_usedinteger
Credits taken from the plan for this clip.
rate_limitobject
count, limit, remaining, reset_in_seconds and reset_at for the current 30 minute window.

Examples by model

Seedance 2.5, e-commerce loop

curl https://lannevideo.com/api/v1/image-to-video \
  -X POST \
  --max-time 300 \
  -H "Authorization: Bearer $NB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "image_url": "https://example.com/sneaker.jpg",
  "prompt": "The sneaker rotates slowly on a white surface, soft shadow",
  "video_model": "seedance-2.5",
  "duration": 5,
  "resolution": "720p",
  "aspect_ratio": "1:1"
}'

FLUX 3, 1080p hero shot

curl https://lannevideo.com/api/v1/image-to-video \
  -X POST \
  --max-time 300 \
  -H "Authorization: Bearer $NB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "image_url": "https://example.com/hero-still.jpg",
  "prompt": "Slow dolly-in, fabric moving in the wind, golden hour",
  "video_model": "flux-3",
  "duration": 10,
  "resolution": "1080p"
}'

Errors

StatusWhen
400image_url missing or not a valid URL.
401 / 403Key missing, invalid, or account not on the API plan.
410video_model is the retired sora2.
429More than 15 generations in 30 minutes.
500The image could not be fetched or rendered, the plan has no credits left, or the content filter blocked it. error says which.