AI Video Generation API
An AI Video Generation API
Built For Code, Not Just Prompts.
One API key opens Moosky's video, image, and upscaling engines to your scripts, apps, and no-code tools. Queue a generation, price it before it runs, and pull the finished file — or let a webhook hand it to you.

Model Options
One spec, three lanes of automation
The same registry the studio renders from answers for the API: pick a composer slug, post the selections, and the run is billed like any other.
Text and image to video
Wan 3.0, LTX 2.5, and Seedance 2.5 queue from a POST. The prompt, the start frame, the length, and the seed all travel as selections — the same schema the studio uses — so your pipeline and your editors render the identical shot.
Generation, editing, upscaling
GPT Image 2.5, Seedream, and Qwen Image 3.0 generate and edit stills the same way; SeedVR2 and Ultimate Image Upscaler finish the passes. Catalog shots, thumbnails, and hero stills come out of the same key and the same balance.
Example Outputs
Shots from the same engines your script calls
Public outputs from Wan 3.0 and Seedance 2.0 R2V — the exact renders a single API call produces.
Why use it on Moosky AI
What you can build on the Moosky API
Same engines as the studio, driven from code — for anyone who generates at volume or ships the feature inside their own product.
Batch generation at scale
Fifty prompt lines, fifty clips from one script loop — no queue babysitting, and each run priced in credits before it fires.
Webhook-driven pipelines
Register a webhook against your key and the status push lands the moment a render finishes, no status polling in your loop.
Backend for your own app
Ship an AI feature on Moosky's engines while your users keep your interface; the key stays server-side.
Quotes before you spend
The estimate endpoint returns the exact credit cost of a run first, so nothing hits your balance without your code approving it.
One balance, every engine
The same credits that fund the studio fund the API, so an automation never needs its own bill or subscription.
OpenAPI, not folklore
The Swagger UI at api.moosky.ai/docs is generated from the same routes that serve you — every path and schema on one page.
How It Works
From key to finished render in three calls
Create your key
Sign up, open the /developer page, and create a key — copy the client secret once, it shows a single time.
Swap it for a token
POST the key pair to the token endpoint and keep the bearer token inside your script or server.
Generate and retrieve
Queue a run with the composer slug and selections, take the status or webhook, and download the finished file.
The same engines the studio runs, wired into your own stack
A content agency had a monthly problem: four hundred product videos a quarter, and an editor billing by the finished clip. The team built a script on the Moosky API instead — one JSON row per product, one POST per clip — and the editor's job shrank to the hero accounts that still earned a human cut.
The endpoint list is deliberately small and fully public: create a key on the developer page, exchange it for a token, list the live composers, queue a scene execution, and read its status or wait for the webhook. Nothing on this page exists that the OpenAPI spec does not already publish at api.moosky.ai/docs.
The part that convinced the agency was the quote call. Before a run hits the balance, the estimate endpoint returns the exact credit cost, so a bad template fails in staging at zero cost instead of burning the account's credits overnight — on the same balance that funds the studio, with no second contract to sign.
Quickstart
Key, token, first render — in three calls
Copy-paste from the endpoints the live OpenAPI spec publishes. Swap the composer slug for anything the registry lists.
Token, scene, cost quote, queue, and status — five calls, no SDK.
# 1) Exchange the key pair (from /developer) for a bearer token
curl -s -X POST "https://api.moosky.ai/auth/api-key/token" \
-H "Content-Type: application/json" \
-d '{"client_id":"YOUR_CLIENT_ID","client_secret":"YOUR_C…ET"}'
# -> { "token": "<jwt>" } export TOKEN="<the token>"
# 2) Queueing runs against a scene YOU own — create one here
# (POST /scenes returns its id) or reuse a scene id from the studio.
# A key on someone else's id gets "Scene not found" (404).
curl -s -X POST "https://api.moosky.ai/scenes" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"my first api scene"}'
# -> { "id": 42 } export SCENE_ID=42 # YOUR_SCENE_ID below
# 3) Quote the run before you spend (public endpoint, no auth)
curl -s -X POST "https://api.moosky.ai/executions/estimate-cost" \
-H "Content-Type: application/json" \
-d '{"sceneComposerSlug":"wan30-scene-composer","selections":[{"optionSlug":"prompt","value":{"value":"a drone shot over pine forest at sunrise"}}]}'
# -> { "credits": 87 }
# 4) Queue the generation and read it back
curl -s -X POST "https://api.moosky.ai/scenes/YOUR_SCENE_ID/executions" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"sceneComposerSlug":"wan30-scene-composer","selections":[{"optionSlug":"prompt","value":{"value":"a drone shot over pine forest at sunrise"}}]}'
curl -s "https://api.moosky.ai/executions" \
-H "Authorization: Bearer $TOKEN"Node 18+ native fetch — queue a clip from any pipeline.
// Node — one API key, many video and image engines
const API = "https://api.moosky.ai";
const SCENE_ID = "YOUR_SCENE_ID"; // a scene you own: create one via
// POST /scenes, or reuse a studio id
// 1) Key pair (from /developer) -> bearer token
const { token } = await fetch(`${API}/auth/api-key/token`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ client_id: process.env.MOOSKY_CLIENT_ID,
client_secret: proces…CRET }),
}).then((r) => r.json());
// 2) Queue a generation with the composer slug + selections
const execution = await fetch(`${API}/scenes/${SCENE_ID}/executions`, {
method: "POST",
headers: { "Authorization": `Bearer ${token}`,
"Content-Type": "application/json" },
body: JSON.stringify({
sceneComposerSlug: "wan30-scene-composer",
selections: [{ optionSlug: "prompt",
value: { value: "a drone shot over pine forest at sunrise" } }],
}),
}).then((r) => r.json());
// 3) Poll status — or register a webhook and skip the loop.
// storagePath fills in once the render finishes (null while queued).
console.log(execution.status, execution.storagePath);Loop prompt rows, queue per line, collect the executions.
import os
import requests # pip install requests
API = "https://api.moosky.ai"
# A scene you own: create one with POST /scenes, or reuse a studio id.
SCENE_ID = "YOUR_SCENE_ID"
# 1) API key pair (from /developer) -> bearer token
token = requests.post(f"{API}/auth/api-key/token", json={
"client_id": os.environ["MOOSKY_CLIENT_ID"],
"client_secret": os.environ["MOOSKY_CLIENT_SECRET"],
}).json()["token"]
headers = {"Authorization": f"Bearer {token}"}
# 2) Queue one run per prompt line — the same balance as the studio
prompts = ["a drone shot over pine forest at sunrise",
"a timelapse of a city skyline at dusk"]
for prompt in prompts:
r = requests.post(f"{API}/scenes/{SCENE_ID}/executions", headers=headers, json={
"sceneComposerSlug": "wan30-scene-composer",
"selections": [{"optionSlug": "prompt", "value": {"value": prompt}}],
})
print(r.json()["id"], r.json()["status"])Credit-based
Simple, honest pricing
API runs draw from the same credit balance as the studio — no separate tier, no subscription. Quote each run first, then pay credits per generation at 100 credits per dollar.

More from Moosky AI
Explore our complete suite of AI tools.
Frequently Asked Questions
How do I get an API key for Moosky?
Create a free account, open the /developer page, and create a key with a name. Copy the client secret immediately — it is shown once. Then POST it with the client id to the token endpoint and use the returned bearer token on every call.
Does the API use the same credits as the app?
Yes. One balance funds generations from the studio, the no-code tools, and the API. Runs bill per generation at the same rate, and the estimate endpoint quotes the exact cost before anything is queued.
Which models are available through the API?
Everything the live model registry exposes, and it is queryable: GET the scene-composer list and the response shows the current video, image, and upscaling engines with their slugs and capabilities. The lineup on this page reads from that same registry.
Can I generate video from a script or cron job?
That is the main use. Loop your prompt rows, POST one queue call per clip, and collect finished files from the status response or a webhook. Teams wire it into n8n, Make, and custom workers the same way.
Are there webhooks?
Yes. Register an endpoint URL against your key, and a status update is pushed to it when an execution's state changes, so your worker never has to poll for renders to finish.
Is there a rate limit?
Key creation is throttled as an abuse guard. For volume beyond normal API traffic — huge catalogs, sustained throughput — write support@moosky.ai and we look at your numbers before you build around a wall.
Where are the docs?
The Swagger UI lives at api.moosky.ai/docs with the OpenAPI spec beside it, generated from the routes the API actually serves — the quickest way to verify a parameter is to read it there.