Lanne Video API · v1
Generate video from your code
One REST call turns a prompt or an image into an MP4. Send JSON with your key, get back a video URL. MiniMax H3, Seedance 2.5 and FLUX 3 sit behind the same endpoint.
Quickstart
- Get a key. On the API plan, open Dashboard → API and create a key. It starts with
nb_and is shown once. - Keep it out of your code. Store it in an environment variable:
Shell
export NB_API_KEY="nb_your_key" - Make your first video. The call returns when the clip is rendered, usually in 1 to 3 minutes.
curl https://lannevideo.com/api/v1/text-to-video \
-X POST \
--max-time 300 \
-H "Authorization: Bearer $NB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Barista pouring latte art, slow push-in, warm morning light",
"video_model": "minimax-h3",
"duration": 5,
"aspect_ratio": "16:9"
}'import os
import requests
resp = requests.post(
"https://lannevideo.com/api/v1/text-to-video",
headers={"Authorization": f"Bearer {os.environ['NB_API_KEY']}"},
json={
"prompt": "Barista pouring latte art, slow push-in, warm morning light",
"video_model": "minimax-h3",
"duration": 5,
"aspect_ratio": "16:9",
},
timeout=300, # renders take 1 to 3 minutes
)
resp.raise_for_status()
print(resp.json())// Node.js 18+
const res = await fetch("https://lannevideo.com/api/v1/text-to-video", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.NB_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
prompt: "Barista pouring latte art, slow push-in, warm morning light",
video_model: "minimax-h3",
duration: 5,
aspect_ratio: "16:9"
}),
signal: AbortSignal.timeout(300_000), // renders take 1 to 3 minutes
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}`);
console.log(data);<?php
$ch = curl_init('https://lannevideo.com/api/v1/text-to-video');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'prompt' => 'Barista pouring latte art, slow push-in, warm morning light',
'video_model' => 'minimax-h3',
'duration' => 5,
'aspect_ratio' => '16:9',
]),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('NB_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 300,
]);
$data = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($status !== 200) {
throw new RuntimeException($data['error'] ?? "HTTP $status");
}
print_r($data);You get the video URL back:
200 OK
{
"success": true,
"video_id": 48213,
"video_url": "https://…/48213.mp4",
"thumbnail_url": "https://…/48213.jpg",
"credits_used": 5,
"rate_limit": {
"count": 1,
"limit": 15,
"remaining": 14,
"reset_in_seconds": 1800,
"reset_at": "2026-10-21 16:30:00"
}
}Prefer clicking to typing? The API playground in your dashboard sends real requests with your key and writes this code for you.
How a request works
- Base URL
https://lannevideo.com/api/v1. HTTPS only, JSON in and out. The.phpsuffix is optional on every path. - Synchronous. A generation call stays open until the MP4 is ready, then returns its URL. Give your HTTP client a timeout of at least 300 seconds.
- Recoverable. Every generation has a
video_id. If your client gives up early, the render usually keeps going: read it later with video status. - Credits. Each clip uses credits from your plan, the same amount as in the Studio, and the response says how many in
credits_used. - Limits. 15 generations per rolling 30 minutes per account. Every response carries
X-RateLimit-*headers.
Endpoints
| Endpoint | What it does |
|---|---|
POST /text-to-video | Prompt in, MP4 out. |
POST /image-to-video | Animate a still from a public image URL. |
GET /video-status | Status and URL of a generation you own. |
Models
Pick one with video_model. Without it you get minimax-h3.
| Model id | Model | Length | Resolution | Best for |
|---|---|---|---|---|
minimax-h3 | MiniMax H3 Ultra Fast | 5–15 s | 480P, 768P | Default. Fast cinematic, commercial, photorealism |
seedance-2.5 | Seedance 2.5 Fast | 4–15 s | 480p, 720p | Social, UGC, e-commerce |
flux-3 | FLUX 3 Max | 5–20 s | 720p, 1080p | Highest fidelity, longer shots up to 20 s, 1080p |