At a glance
The Kiwi API runs Kiwi through Mage at POST https://api.mage.space/v1/kiwi/generate. A request at the default settings costs 270 Gems (about $0.27), with no subscription. Kiwi takes no @handle mentions.
Video
Output
1
Variant
270
Gems per clip, default
$0.27
About, in USD
Overview
What the Kiwi API does
Simple, dependable video from text or a start frame, with nothing else to configure. 5 or 10 seconds at up to 1080p.
Everyday video from text or a single start frame, with nothing else to set up.
It accepts first_image as inputs.
Quick start
Call the Kiwi API
Set MAGE_API_KEY, submit to /kiwi/generate, and poll status_url until the request completes.
cURL
STATUS_URL=$(curl --request POST 'https://api.mage.space/v1/kiwi/generate' \
--header "Authorization: Bearer $MAGE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"prompt": "A slow push-in on a lighthouse at dusk, waves breaking below",
"aspect_ratio": "16:9",
"duration": "5",
"model_id": "kiwi"
}' | jq -r '.status_url')
# Repeat until status is "completed"; result.url is the file
curl "$STATUS_URL" --header "Authorization: Bearer $MAGE_API_KEY"Python
import os, time, requests
headers = {"Authorization": f"Bearer {os.environ['MAGE_API_KEY']}"}
request = requests.post(
"https://api.mage.space/v1/kiwi/generate",
headers=headers,
json={
"prompt": "A slow push-in on a lighthouse at dusk, waves breaking below",
"aspect_ratio": "16:9",
"duration": "5",
"model_id": "kiwi"
},
).json()
while request["status"] in ("queued", "in_progress"):
time.sleep(3)
request = requests.get(request["status_url"], headers=headers).json()
print(request["status"], request["result"] and request["result"]["url"])JavaScript
const headers = {
Authorization: `Bearer ${process.env.MAGE_API_KEY}`,
'Content-Type': 'application/json',
};
let request = await fetch('https://api.mage.space/v1/kiwi/generate', {
method: 'POST',
headers,
body: JSON.stringify({
"prompt": "A slow push-in on a lighthouse at dusk, waves breaking below",
"aspect_ratio": "16:9",
"duration": "5",
"model_id": "kiwi"
}),
}).then((response) => response.json());
while (['queued', 'in_progress'].includes(request.status)) {
await new Promise((resolve) => setTimeout(resolve, 3000));
request = await fetch(request.status_url, { headers }).then((r) => r.json());
}
console.log(request.status, request.result?.url);Models
Kiwi model_id values
Send model_id to pick a variant. A request without one runs the default.
| model_id | Name | Default |
|---|---|---|
| kiwi | Kiwi | Yes |
Options
Kiwi parameters
Allowed values across all variants; a variant may offer fewer. The docs list the options per variant.
| Field | Values |
|---|---|
| aspect_ratio | 16:9, 4:3, 1:1, 3:4, 9:16 |
| resolution | 480p, 720p, 1080p |
| duration | 5, 10 |
Inputs
Media inputs Kiwi accepts
Send each as an https URL, a data URL, or an upload of up to 100 MB.
| Field | Role |
|---|---|
| first_image | The first frame image. |
More video models
Other video generation APIs on Mage
Video · from 245 Gems
Lemon API
Every video feature, at a friendlier price
Video · from 20 Gems
LTX Video API
Fast open-weights video for iteration
Video · from 147 Gems
Melon API
Anime in motion, with optional audio
Video · from 30 Gems
MiniMax-H3 API
Fast open video with stereo sound
Video · from 338 Gems
Plum API
Sound on every clip, up to 2K
Video · from 360 Gems
Raspberry API
Characters brought to life from a first frame
FAQ
Frequently asked questions
How much does the Kiwi API cost?
A Kiwi request at the default settings (Kiwi) costs 270 Gems, about $0.27. Other resolutions, durations, and variants change the price; the response reports the exact charge. A generation that fails is refunded; one Mage's content policy blocks is not.
What is the Kiwi API endpoint?
POST https://api.mage.space/v1/kiwi/generate with an Authorization: Bearer header carrying your Mage API key. The response includes a status_url to poll for the result.
Which Kiwi models can I call?
kiwi. The default is Kiwi.
Does Kiwi support reference images or characters?
Kiwi accepts first_image. Kiwi takes no @handle mentions.
Can I use Kiwi from Claude or ChatGPT?
Yes. Connect the Mage MCP server to Claude, ChatGPT, Claude Code, Grok, or Cursor and ask for Kiwi by name. Your assistant reads its options with get_model and quotes the price before it generates.
How long are Kiwi results kept?
Results and inputs are kept for 30 days. Download anything you want to keep to your own storage.
Start building with Mage
One account, one Gems balance, every model. Pay only for what you generate.