Guides

Rate limits

An account can start 15 generations per rolling 30 minutes. The window counts every clip the account makes, in the Studio as well as through the API.

What counts

RequestCounts toward the limit
POST /text-to-videoYes
POST /image-to-videoYes
GET /video-statusNo
Studio generations on the same accountYes

The window rolls: a slot frees up 30 minutes after the generation that used it, not at a fixed time.

Headers

Generation responses carry the state of the window, so you can slow down before you hit it.

X-RateLimit-Limitinteger
Generations allowed per window: 15.
X-RateLimit-Remaininginteger
Generations left in the current window.
X-RateLimit-Resetunix time
When the oldest generation leaves the window.
Retry-Afterseconds
Only on 429: how long to wait.
Response headers
HTTP/2 200
content-type: application/json
x-ratelimit-limit: 15
x-ratelimit-remaining: 11
x-ratelimit-reset: 1792606200

When you hit the limit

The API answers 429 Too Many Requests before starting a render, so nothing is charged.

429 Too Many Requests
{
    "success": false,
    "error": "Rate limit exceeded. You have generated 15 videos in the last 30 minutes. Please wait before trying again.",
    "rate_limit": {
        "count": 15,
        "limit": 15,
        "remaining": 0,
        "reset_in_seconds": 847,
        "reset_at": "2026-10-21 16:30:00"
    }
}

Retry pattern

Wait for Retry-After, then try again. For batches, keep at most 15 jobs per half hour in your own queue instead of relying on 429s.

import os, time, requests

URL = "https://lannevideo.com/api/v1/text-to-video"
HEADERS = {"Authorization": f"Bearer {os.environ['NB_API_KEY']}"}

def generate(body: dict, attempts: int = 4) -> dict:
    for attempt in range(attempts):
        resp = requests.post(URL, headers=HEADERS, json=body, timeout=300)
        if resp.status_code != 429:
            resp.raise_for_status()
            return resp.json()
        wait = int(resp.headers.get("Retry-After", 60))
        time.sleep(wait)
    raise RuntimeError("Still rate limited")