API Documentation
Programmatic access to AI video, image, audio generation and editing tools.
Authentication
All API requests require a Bearer token unless noted as public
Create an API key in Settings → API Keys, then include it in the Authorization header of every request:
API keys inherit the permissions of the account that created them, including tier limits and admin access. The full key is only shown once at creation — store it securely.
API Key Management
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/keys | List your API keys (id, prefix, name, created_at, last_used, is_active) |
| POST | /api/keys | Create key — body: {"name":"My App"} — returns full key once |
| DELETE | /api/keys/{id} | Revoke an API key |
Quick Start
Generate a video in three API calls
1. Submit a generation → 2. Poll for completion → 3. Download the video.
Video Generation
Text-to-video, image-to-video, extend, and video-to-video
POST /api/generate
Queue a text-to-video or image-to-video generation. Returns a job_id to poll.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Text description (max 2000 chars) |
model | string | No | Model ID — see Models |
negative_prompt | string | No | What to avoid in the output |
width | int | No | Video width in pixels |
height | int | No | Video height in pixels |
frames | int | No | Number of frames (tier-limited) |
steps | int | No | Inference steps — more = higher quality, higher cost |
cfg | number | No | Classifier-free guidance scale |
seed | int | No | Random seed (-1 for random) |
sampler | string | No | Sampler name (e.g. sa_solver, euler, dpmpp_2m) |
scheduler | string | No | Scheduler name (e.g. beta, normal, karras) |
shift | number | No | Flow-shift parameter |
frame_rate | int | No | Output frame rate (default 24) |
project_id | int | No | Link generation to a studio project |
GET /api/status?job_id={id}
Poll for generation progress. Call every 2-5 seconds until status is completed or error.
GET /api/video/{filename}
Download the generated video file. Returns raw video/mp4 bytes. You must own the video, or provide a valid share ?token=.
GET /api/generations
List your video generation history with full metadata.
| Query Param | Type | Default | Description |
|---|---|---|---|
limit | int | 50 | Max results (up to 200) |
offset | int | 0 | Pagination offset |
Additional Video Endpoints
| Method | Endpoint | Body / Params | Description |
|---|---|---|---|
| DELETE | /api/generations/{id} | — | Delete a generation and its video file |
| POST | /api/generations/{id}/favorite | — | Toggle favourite — returns is_favorite |
| POST | /api/generations/{id}/share | — | Create share link — returns share_token |
| POST | /api/generations/{id}/public | — | Toggle public gallery visibility |
| GET | /api/share/{token} | — | Public — get shared video metadata |
| GET | /api/gallery/community | — | Public — browse public gallery |
| POST | /api/cancel | {"job_id":"..."} | Cancel a running generation |
| GET | /api/queue | — | Queue length, your active jobs, and position |
| GET | /api/comfyui/status | — | Check if backend GPU is online |
| GET | /api/generation-cost | ?model=&frames=&steps= | Quote credit cost without generating |
| POST | /api/extend-video | {"video_filename":"...","generation_id":1} | Extract last frame for video extension via I2V |
| POST | /api/generate-v2v | {"video_filename":"...","prompt":"...","strength":0.6} | Video-to-video style transfer |
Image Generation
Generate images and upload input images for I2V
POST /api/generate-image
Queue one or more image generations. Returns an array of job IDs to poll via /api/status.
Image Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/image-models | List image models (id, name, defaults, credit_cost) |
| GET | /api/image-generations | List image history — ?limit=&offset= |
| DELETE | /api/image-generations/{id} | Delete an image generation |
| GET | /api/image/{filename} | Download a generated image |
| POST | /api/upload-image | Upload image for I2V (multipart, PNG/JPEG/WebP, max 10 MB) |
| GET | /api/input-image/{filename} | Serve uploaded/extracted input image |
Audio, Subtitles & TTS
Generate music, speech, subtitles, and mix into videos
POST /api/generate-audio
Generate music or sound effects from a text description.
POST /api/tts/generate
Generate voice narration from text. Requires Creator tier or higher.
All Audio & Subtitle Endpoints
| Method | Endpoint | Body / Params | Description |
|---|---|---|---|
| POST | /api/generate-audio | {"prompt","duration_seconds","tags"} | Generate music/SFX (8 credits per 30s) |
| GET | /api/audio-generations | — | List audio generation history |
| DELETE | /api/audio-generations/{id} | — | Delete audio generation |
| GET | /api/audio/{filename} | — | Download generated audio file |
| POST | /api/video/add-audio | {"video_filename","audio_filename"} | Merge audio onto a video |
| POST | /api/subtitles/generate | {"video_filename","language":"en"} | Auto-generate subtitles with Whisper (5 credits) |
| GET | /api/subtitles/{name}.srt | — | Download subtitle file |
| POST | /api/subtitles/burn | {"video_filename","srt_filename","style"} | Burn subtitles into video (styles: default, bold-yellow, minimal) |
| POST | /api/subtitles/translate | {"srt_filename","target_language"} | AI translate subtitles (Pro+ required, 5 credits) |
| GET | /api/tts/voices | — | List available TTS voices |
| POST | /api/tts/generate | {"text","voice_id","speed"} | Generate speech (Creator+, 6 credits/min) |
| POST | /api/tts/add-to-video | {"video_filename","tts_filename","offset_seconds","volume"} | Mix TTS audio into a video |
TTS Voices
| Voice ID | Description |
|---|---|
en_gb_male | British English — Male |
en_gb_female | British English — Female |
en_us_male | American English — Male |
en_us_female | American English — Female |
Editing & Tools
Trim, crop, resize, upscale, background removal, face swap, and more
POST /api/edit/trim
Trim a video to a specific time range.
Edit Endpoints (3 credits each)
| Method | Endpoint | Key Parameters | Description |
|---|---|---|---|
| POST | /api/edit/trim | start_seconds, end_seconds | Trim video to time range |
| POST | /api/edit/speed | speed_factor (0.25–4.0) | Change playback speed |
| POST | /api/edit/crop | x, y, width, height | Crop video region |
| POST | /api/edit/resize | preset or width, height | Resize & pad video (presets: 1080p, 720p) |
| POST | /api/edit/text-overlay | text, position, font_size, color, start_time, end_time | Burn text overlay onto video |
| POST | /api/edit/merge | video_filenames (array, 2–20) | Concatenate multiple videos |
AI Tools
| Method | Endpoint | Key Parameters | Credits | Description |
|---|---|---|---|---|
| POST | /api/tools/remove-background | Multipart image upload | 1 | AI background removal |
| POST | /api/tools/upscale-video | video_filename, scale_factor (2–4) | ~2/10s | Upscale video (Creator+) |
| POST | /api/tools/face-swap | Multipart: two image files | 1 | AI face swap (Pro+) |
| POST | /api/tools/extract-frames | video_filename, mode | 1 | Extract frames (first, last, middle, all_1fps) |
| POST | /api/tools/trim-video | video_filename, start_time, end_time | 1 | Simple trim utility |
| POST | /api/tools/video-to-gif | video_filename, width, fps | 1 | Convert video to animated GIF |
| POST | /api/tools/add-watermark | Multipart: video_filename, type, text/image | 1 | Add text or image watermark |
Studio & Projects
Multi-shot project management and AI script breakdown
POST /api/studio/script-to-shots
Use AI to break a script into individual shot prompts.
Project Endpoints
| Method | Endpoint | Body / Params | Description |
|---|---|---|---|
| GET | /api/projects | — | List projects (with shot_count and cover) |
| POST | /api/projects | {"name":"My Film"} | Create project |
| GET | /api/projects/{id} | — | Get project with shots array and generations |
| PUT | /api/projects/{id} | {"name","description","model"} | Update project metadata |
| DELETE | /api/projects/{id} | — | Delete project and all shots |
| POST | /api/projects/{id}/duplicate | — | Duplicate project with all shots & elements |
| POST | /api/projects/{id}/export | {"resolution":"1080p"} | Export project — concatenates shot videos |
Shot Endpoints
| Method | Endpoint | Body / Params | Description |
|---|---|---|---|
| POST | /api/projects/{id}/shots | {"prompt","notes","duration","shot_type","camera_move","transition"} | Add shot to project |
| PUT | /api/projects/{id}/shots/{shotId} | Same fields as above + filename | Update shot (link a generation via filename) |
| DELETE | /api/projects/{id}/shots/{shotId} | — | Delete shot |
| POST | /api/projects/{id}/shots/reorder | {"order":[3,1,2]} | Reorder shots by ID array |
Elements & Comments
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/projects/{id}/elements | List project elements (characters, props, locations) |
| POST | /api/projects/{id}/elements | Create element |
| PUT | /api/projects/{id}/elements/{eid} | Update element |
| DELETE | /api/projects/{id}/elements/{eid} | Delete element |
| GET | /api/projects/{id}/comments | List project comments |
| POST | /api/projects/{id}/comments | Add comment — {"text","shot_id"} |
| DELETE | /api/projects/{id}/comments/{cid} | Delete comment |
Hosting & Landing Pages
Create hosted video landing pages with analytics — Pro tier and above
POST /api/hosting/pages
Create a hosted landing page for a video. Returns a public URL and embed code.
Hosting Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/hosting/pages | List your hosted pages |
| GET | /api/hosting/pages/{id} | Get page details |
| PUT | /api/hosting/pages/{id} | Update page (title, description, CTA, password, visibility) |
| DELETE | /api/hosting/pages/{id} | Delete hosted page |
| GET | /api/hosting/pages/{id}/analytics | View analytics (total views, unique views, referrers, daily breakdown) |
Community Prompts
Browse, share, and vote on prompts
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/community/prompts | Public | Browse approved prompts — ?sort=popular&tag=cinematic&model=wan-t2v&page=1 |
| POST | /api/community/prompts | Auth | Submit a prompt for moderation — {"prompt","model","title","tags"} |
| POST | /api/community/prompts/{id}/vote | Auth | Upvote or downvote — {"vote":1} |
| POST | /api/community/prompts/{id}/use | Auth | Increment use count and retrieve prompt text |
| DELETE | /api/community/prompts/{id} | Auth | Delete own prompt (admin can delete any) |
Stock Media
Search and download royalty-free videos, images, and music — Creator tier and above
| Method | Endpoint | Params | Description |
|---|---|---|---|
| GET | /api/stock/videos | ?query=&page=&per_page= | Search Pexels videos (max 30/page) |
| GET | /api/stock/images | ?query=&page=&per_page= | Search Pexels images (max 30/page) |
| GET | /api/stock/music | ?query= | Search Pixabay music |
| POST | /api/stock/download | {"url","type"} | Download stock asset to local storage |
Organisations
Team collaboration and shared projects — Pro tier and above
| Method | Endpoint | Body / Params | Description |
|---|---|---|---|
| POST | /api/orgs | {"name":"My Team"} | Create organisation (Pro+) |
| GET | /api/orgs | — | List your organisations |
| POST | /api/orgs/{id}/invite | {"email","role"} | Invite member (roles: member, admin, reviewer) |
| POST | /api/orgs/accept-invite | {"token":"..."} | Accept invitation |
| GET | /api/orgs/{id}/members | — | List org members |
| PUT | /api/orgs/{id}/members/{uid}/role | {"role":"admin"} | Change member role (org admin only) |
| DELETE | /api/orgs/{id}/members/{uid} | — | Remove member (org admin only) |
| GET | /api/orgs/{id}/projects | — | List organisation projects |
| POST | /api/orgs/{id}/projects | {"name":"Team Project"} | Create organisation project |
Brand Kits
Custom branding overlays, logos, and intros — Pro tier and above
POST /api/brand-kits
Create a brand kit with custom colours, fonts, and positioning.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/brand-kits | List brand kits |
| PUT | /api/brand-kits/{id} | Update brand kit settings |
| DELETE | /api/brand-kits/{id} | Delete brand kit |
| POST | /api/brand-kits/{id}/upload-logo | Upload logo (multipart) |
| POST | /api/brand-kits/{id}/upload-intro | Upload intro clip (multipart) |
| POST | /api/brand-kits/{id}/apply | Apply brand kit to video — {"video_filename":"..."} |
Prompt Tools & Templates
AI prompt generation, autocomplete, and saved templates
POST /api/generate-prompt
Use AI to generate or enhance video prompts from a simple idea.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/prompts/autocomplete | Get prompt suggestions from your history |
| GET | /api/templates | List saved prompt templates |
| POST | /api/templates | Save template — {"name","prompt","negative_prompt","model"} |
| DELETE | /api/templates/{id} | Delete template |
Settings, Profile & Billing
Account management, subscription, and credit top-ups
| Method | Endpoint | Body / Params | Description |
|---|---|---|---|
| Auth & Session | |||
| GET | /api/auth/check | — | Current auth state, tier, credit balance, limits |
| POST | /api/signup | {"username","password","email"} | Create account (public) |
| POST | /api/login | {"username","password"} | Log in (public) |
| POST | /api/logout | — | Log out (clears session cookie) |
| POST | /api/password-reset/request | {"username":"..."} | Request password reset email (public) |
| POST | /api/password-reset/reset | {"token","new_password"} | Complete password reset (public) |
| Profile | |||
| GET | /api/profile | — | Get profile (username, display_name, bio, avatar) |
| POST | /api/profile | {"display_name","bio","profile_public"} | Update profile |
| POST | /api/profile/avatar | Multipart image upload | Upload avatar |
| Settings | |||
| POST | /api/settings/change-password | {"current_password","new_password"} | Change password (min 8 chars) |
| POST | /api/settings/email | {"email":"..."} | Update email address |
| POST | /api/settings/theme | {"theme":"dark"} | Set theme (dark or light) |
| Credits & Billing | |||
| GET | /api/credits | — | Credit balance, tier, monthly allowance |
| GET | /api/credits/history | — | Credit transaction ledger |
| POST | /api/credits/topup | {"credits":500} | Purchase credits (100–50,000 at 1p each) |
| GET | /api/subscription | — | Current subscription details |
| POST | /api/stripe/create-checkout | {"tier":"creator"} | Start Stripe subscription checkout |
| POST | /api/stripe/create-portal | — | Open Stripe customer portal (manage billing) |
| GET | /api/pricing | — | Public — tier pricing and credit cost rules |
| GET | /api/stripe/config | — | Public — Stripe publishable key |
| Analytics | |||
| GET | /api/analytics/usage | — | Per-day generation and credit spending breakdown |
| GET | /api/analytics/summary | — | Total generations, images, video minutes, favourite model |
Available Models
All supported generation models and their capabilities
Video Models (Text-to-Video)
| Model ID | Name | Best For |
|---|---|---|
wan-t2v | WAN 2.2 | Rich cinematic visuals, longer videos |
ltx-t2v | LTX 2.3 | Fast generation, HD output |
ltx-quality | LTX Quality | Highest quality, 2-pass upscale to 4K |
hunyuan-t2v | Hunyuan | Smooth motion, natural movement |
hunyuan15-t2v | Hunyuan 1.5 | Improved motion, latest Hunyuan release |
cogvideo-t2v | CogVideoX 1.5 | High fidelity 5B model, diverse styles |
animatediff | AnimateDiff | SD 1.5-based animation, fast & lightweight |
ltx-camera | LTX Camera Control | Camera dolly movements (in, out, left, right) via LoRA |
ltx-control | LTX ControlNet | ControlNet-guided generation (depth, edge, pose) |
wan-vace | WAN VACE | Video conditioning & editing with subject/scene control |
wan-animate | WAN Animate | Character animation from a single reference image |
Video Models (Image-to-Video)
| Model ID | Name | Description |
|---|---|---|
hunyuan15-i2v | Hunyuan 1.5 I2V | Animate a still image into video |
ltx-i2v | LTX 2.3 I2V | Fast image-to-video generation |
svd-i2v | SVD XT I2V | Stable Video Diffusion image-to-video |
wan-i2v | WAN 2.2 I2V | High-quality 14B image-to-video with Lightx2v turbo |
Video Models (First-Last Frame)
| Model ID | Name | Description |
|---|---|---|
ltx-flf | LTX 2.3 First-Last Frame | Interpolate between two keyframe images with prompt guidance |
wan-flf | WAN 2.2 First-Last Frame | WAN 14B first & last frame interpolation with Lightx2v turbo |
Video Models (Sound-to-Video)
| Model ID | Name | Description |
|---|---|---|
wan-s2v | WAN 2.2 Sound-to-Video | Generate talking-head video from a portrait image + audio clip |
Specialised Models
| Model ID | Name | Description |
|---|---|---|
liveportrait | LivePortrait | Animate a portrait photo with facial expressions from a driving video |
dreamidv | DreamID-V | Face identity transfer — insert a face into generated video |
echomimic | EchoMimic | Audio-driven talking portrait from a single photo + audio clip |
hunyuan3d | Hunyuan3D v2 | Generate 3D model assets from a text prompt or reference image |
Image Models
| Model ID | Name | Credit Cost |
|---|---|---|
sd15 | Stable Diffusion 1.5 | 2 credits per image |
flux | Flux 2 Klein | 5 credits per image |
flux-dev | Flux 2 Dev | 8 credits per image |
flux-edit | Flux 2 Image Edit | 6 credits per image |
Use GET /api/models for video models or GET /api/image-models for image models to retrieve live defaults and parameters at runtime.
Credit Costs
How credits are calculated for each operation
Video Generation Cost Formula
cost = base + (frames × per_frame) + (steps × per_step)
| Model | Base | Per Frame | Per Step | Example (41 frames, 4 steps) |
|---|---|---|---|---|
wan-t2v | 10 | 0.20 | 0.50 | 20.2 → 21 credits |
ltx-t2v | 8 | 0.15 | 0.30 | 15.35 → 16 credits |
ltx-quality | 15 | 0.25 | 0.40 | 26.85 → 27 credits |
hunyuan-t2v | 12 | 0.20 | 0.40 | 21.8 → 22 credits |
hunyuan15-t2v | 12 | 0.20 | 0.40 | 21.8 → 22 credits |
hunyuan15-i2v | 15 | 0.25 | 0.50 | 27.25 → 28 credits |
ltx-i2v | 12 | 0.20 | 0.40 | 21.8 → 22 credits |
cogvideo-t2v | 12 | 0.20 | 0.40 | 21.8 → 22 credits |
animatediff | 6 | 0.10 | 0.30 | 8.8 → 9 credits |
svd-i2v | 10 | 0.15 | 0.40 | 17.75 → 18 credits |
wan-i2v | 12 | 0.20 | 0.50 | 22.2 → 23 credits |
ltx-flf | 12 | 0.15 | 0.30 | 18.55 → 19 credits |
wan-s2v | 15 | 0.25 | 0.50 | 27.25 → 28 credits |
wan-flf | 12 | 0.20 | 0.50 | 22.2 → 23 credits |
ltx-camera | 10 | 0.15 | 0.30 | 17.15 → 18 credits |
ltx-control | 12 | 0.15 | 0.30 | 18.55 → 19 credits |
wan-vace | 15 | 0.25 | 0.50 | 27.25 → 28 credits |
wan-animate | 18 | 0.30 | 0.50 | 32.3 → 33 credits |
liveportrait | 8 | 0.10 | — | 12.1 → 13 credits |
hunyuan3d | 20 | — | 0.80 | 23.2 → 24 credits |
dreamidv | 15 | 0.20 | 0.40 | 24.8 → 25 credits |
echomimic | 12 | 0.15 | 0.30 | 18.55 → 19 credits |
v2v | 3 | — | — | 3 credits (flat) |
Other Operation Costs
| Operation | Credits |
|---|---|
| Image generation (SD 1.5) | 2 per image |
| Image generation (Flux 2 Klein) | 5 per image |
| Image generation (Flux 2 Dev) | 8 per image |
| Image generation (Flux 2 Edit) | 6 per image |
| Audio generation (ACE-Step) | 8 per 30 seconds (pro-rated) |
| TTS voice generation | 6 per minute (pro-rated) |
| Subtitle generation (Whisper) | 5 flat |
| Subtitle translation | 5 flat |
| Video edit (trim, speed, crop, resize, text overlay, merge) | 3 each |
| Remove background | 1 |
| Face swap | 1 |
| Extract frames | 1 |
| Trim video (tools) | 1 |
| Video to GIF | 1 |
| Add watermark | 1 |
| Upscale video | ~2 per 10 seconds (min 2) |
| Video-to-video | ~3 per 10 seconds (min 3) |
| Project export | max(3, 2 × clip count) |
| Merge videos | max(3, 2 × clip count) |
Use GET /api/generation-cost?model=wan-t2v&frames=41&steps=4 to get an exact quote before generating.
Subscription Tiers
Feature limits by plan
| Tier | Monthly Credits | Max Resolution | Max Frames | Watermark |
|---|---|---|---|---|
| Free | 150 | 480p | 81 | Yes |
| Starter | 500 | 1080p | 121 | No |
| Creator | 1,500 | 4K | 201 | No |
| Pro | 5,000 | 4K | 301 | No |
| Studio | 15,000 | 4K | 301 | No |
| Enterprise | 50,000 | 4K | 999 | No |
Some features require specific tiers: Stock Media (Creator+), TTS (Creator+), Hosting (Pro+), Organisations (Pro+), Brand Kits (Pro+), Subtitle Translation (Pro+), Upscale (Creator+), Face Swap (Pro+).
Rate Limits
Request limits and body size constraints
Error Handling
Standard error response format and HTTP status codes
All API errors return JSON with an error field. Some errors include additional context fields.
HTTP Status Codes
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad request — missing or invalid parameters |
| 401 | Unauthorized — missing or invalid API key |
| 403 | Forbidden — insufficient tier or permissions |
| 404 | Resource not found |
| 429 | Rate limit exceeded |
| 500 | Internal server error |