Runway Gen-4 Turbo

RunwayVideo

Runway Gen-4 Turbo: fast 5-second 720p clips from text or a frame.

Our price
$0.19
per clip
Official
$0.25
25% vs official

First request

import time, requests

BASE, KEY = "https://api.altrouter.ai/v1", "ar-..."
h = {"Authorization": f"Bearer {KEY}"}

# 1. запускаем рендер - ответ приходит сразу, со статусом queued
job = requests.post(f"{BASE}/videos", headers=h, json={
    "model": "runway-gen-4-turbo",
    "prompt": "a drone shot over a coastline",
}).json()

# 2. опрашиваем, пока не готово (рендер занимает минуты)
while job["status"] in ("queued", "in_progress"):
    time.sleep(10)
    job = requests.get(f"{BASE}/videos/{job['id']}", headers=h).json()

print(job["url"])

The interface is OpenAI-compatible: in existing code only the base_url, the key and the model id change — nothing else.

Runway Gen-4 Turbo against its price neighbours

Runway Gen-4 Turbo and its closest neighbours by price: prices and parameters from the AltRouter AI catalog
ModelPriceUnitDiscount
Seedance 1.0 Pro FastByteDance$0.10clipOpen
Seedance 1.5 ProByteDance$0.023secondOpen
Hailuo 2.3MiniMax$0.037second−20%Open
Kling 2.1 StandardKling$0.037second−25%Open
Runway Gen-4 Turbothis pageRunway$0.19clip−25%

Prices and parameters come from the same catalog as the price above; this is not a benchmark, it is comparable billing terms.

Limits

Rendering is asynchronous: POST /v1/videos returns immediately in queued and you poll GET /v1/videos/{id}. Funds are held when the job is created and captured only for a completed render — a failed one is not charged. Clip length: 5 s. $0.19 per clip regardless of its length.

There is no subscription: every successful request is billed at the price above, and a failed one is not billed at all. That price is already 25% below the vendor's official one — the official price is shown struck through next to it so it can be checked. No Runway account of your own is needed, and no VPN: requests go to api.altrouter.ai and we make the upstream call.

Rate limiting is shared across models and counted per key: 600 requests per minute by default, and a 429 with retry-after: 60 above it. An individual key can get its own limit and a spending cap per day, week, month or lifetime in the dashboard.

Full limits and credits

When to pick Runway Gen-4 Turbo, and when a neighbour

The cheaper neighbour is Seedance 1.5 Pro: $0.023 per second of video against $0.19 for Runway Gen-4 Turbo. On the same volume the bill comes out 8.2× smaller. It is the sensible pick where the task is repetitive and high-volume — labelling, classification, short templated answers — the kind of work where quality is bounded by the prompt rather than the model.

The dearer neighbour is Hailuo 2.3: $0.037 per second of video. On catalog parameters it offers the same capabilities and the same order of context, so the premium is only justified if Runway Gen-4 Turbo falls short on your own task.

Guessing is more expensive than checking: the table above is prices and parameters, not a benchmark, and it cannot tell you which model does better on your own prompt. Switching costs one line — the model id in the request changes, the base_url and the key stay — so running both on your own data takes minutes.

API

An asynchronous endpoint: the call returns immediately in queued, and you poll GET /v1/videos/{id} for the result. The finished mp4 is re-hosted on our CDN, and only a completed render is charged.

POST/v1/videos
Body parameters
modelstringrequired"runway-gen-4-turbo"
The model id.
promptstringrequired
The text description of the scene.
secondsinteger
Clip length; `duration` is accepted as an alias.
imagestringURL or base64
A reference frame - its presence routes to the model’s image-to-video variant.
durationenum5default 5
Clip length in seconds (affects price).
aspect_ratioenum16:9 · 4:3 · 1:1 · 3:4 · 9:16default 16:9
Output aspect ratio.
Response

The same object comes back from GET /v1/videos/{id}; the finished file is also served directly from GET /v1/videos/{id}/content.

idstring
The render id (vid_…) - this is what you poll.
statusenumqueued · in_progress · completed · failed
The state of the render.
urlstring
The finished mp4 on our CDN - appears at status: completed.
secondsinteger
The clip length the price was computed on.
errorobject
Why it failed at status: failed: { code, message }.
Example
cURLPythonJavaScriptJSON
curl https://api.altrouter.ai/v1/videos \
  -H "Authorization: Bearer ar-..." \
  -H "Content-Type: application/json" \
  -d '{
  "model": "runway-gen-4-turbo",
  "prompt": "a drone shot over a rocky coastline at sunrise",
  "duration": "5",
  "aspect_ratio": "16:9"
}'
Errors
400Invalid request.
401Missing or invalid API key.
402Insufficient credits, or the key’s spending cap is exhausted.
404Model not found.
429Rate limit exceeded.