Story

V2 Story APIs provide a JSON-first interface for creating and managing AI video stories. All request and response bodies use Content-Type: application/json. Responses are returned directly (no top-level "data" wrapper).

Response format: All endpoints return CustomerStoryResponse (see response examples and field list in this tag).

Flows

Automatic (single-call)

  • POST /v2/story/idea-2-video - Full video from a text idea (JSON body).
  • POST /v2/story/url-2-video - Full video from a URL + idea (JSON body).
  • POST /v2/story/images-2-video - Full video from idea + image URLs (JSON body).

Advanced (step-by-step)

  1. POST /v2/story - Create storyboard (idea, optional image_urls, audio_option, elements as JSON).
  2. POST /v2/story/{story_id}/elements - (Optional) Generate element images.
  3. POST /v2/story/{story_id}/scenes - Generate scene images and narrations.
  4. POST /v2/story/{story_id}/videos - Create videos from scenes.
  5. GET /v2/story/{story_id} - Get story status and details; poll until status is success, then use video_url.
  6. POST /v2/story/{story_id}/concat - (Optional) Compose final video from scene videos or custom URLs.

Pricing for Auto Story Generation

Credit reporting: Story API responses include used_credits. For automatic (single-call) flows, credits are also reflected per pipeline step where applicable.

How automatic story pricing is determined: For POST /v2/story/idea-2-video, POST /v2/story/url-2-video, and POST /v2/story/images-2-video, estimated consumption is driven primarily by scene_count, scene_duration (seconds per scene), native_audio (within audio_option), and video_tool.

Per-second rate by video_tool (before the native-audio multiplier):

Tier video_tool values Credits per second (per scene)
Standard Auto, KlingAI, Seedance, Pixverse, VeoFast, Vidu 10
Economy AutoT1, PVideo, VeoLite 5

Native audio: When native_audio is true, the scene video portion of the calculation is doubled. Narration and background music alone do not trigger this multiplier; they remain compatible with native_audio: false.

Formula (scene video credits):

used_credits(credits per second for your video_tool) x scene_count x scene_duration x (2 if native_audio is true, else 1)

Examples (Business plan illustrative cash equivalence: 100 credits = US$1.00):

  1. video_tool: Vidu, scene_count: 3, scene_duration: 5, native_audio: false → 5 x 3 x 5 = 75 credits (~US$0.75 on Business plans)

  2. video_tool: Auto, scene_count: 3, scene_duration: 5, native_audio: false → 10 x 3 x 5 = 150 credits (~US$1.50 on Business plans)

  3. video_tool: AutoT1, scene_count: 5, scene_duration: 5, native_audio: true → 5 x 5 x 5 x 2 = 250 credits (~US$2.50 on Business plans)

  4. video_tool: VeoFast, scene_count: 5, scene_duration: 10, native_audio: true → 10 x 5 x 10 x 2 = 1,000 credits (~US$10.00 on Business plans)

Error response format

Error responses use application/json with:

  • message: Human-readable message.
  • code: Machine-readable code (e.g. BAD_REQUEST, INSUFFICIENT_CREDIT, REACHED_LIMIT).

[AUTO] Idea-to-Video

Creates a complete video from a text idea in one call. Send Content-Type: application/json.

The pipeline runs automatically: storyboard → elements → scenes → narrations/music → video animation → composition. Poll GET /v2/story/{story_id} until status is success, then use video_url.

Example: Idea-to-Video (Python)

import requests

BASE_URL = "https://api.vimmerse.net"
API_KEY = "YOUR_API_KEY"

url = f"{BASE_URL}/v2/story/idea-2-video"
headers = {"X-Api-Key": API_KEY, "Content-Type": "application/json"}

payload = {
    "idea": "Create a promotional video where cute animals play musical instruments in a sunny meadow",
    "title": "Musical Animals Story",
    "aspect_ratio": "9:16",
    "scene_count": 4,
    "image_tool": "Seedream",
    "video_tool": "Auto",
    "scene_duration": 5,
    "audio_option": {
        "has_bg_music": True,
        "has_narration": True,
        "native_audio": False,
        "narrator": "AutoV",
    },
    "language": "English",
    "webhook_url": "https://your-domain.com/webhook/callback",
}

response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
result = response.json()
story_id = result["id"]
print(f"Story ID: {story_id}, Status: {result['status']}")

elements

Optional JSON object of pre-defined story elements you already have in mind for this automatic flow. The API uses these to guide the internal storyboard generation (e.g. character names, environments, and props). Only characters, environments, and objects are accepted; scenes must not be included (scenes are generated from the idea and timing).

Each key in elements must be a list of dictionaries (JSON objects), matching the storyboard structure:

Key Type Description
characters array of objects Optional. Each item is a JSON object with name, description, and optionally image_url.
environments array of objects Optional. Each item is a JSON object with name, description, and optionally image_url.
objects array of objects Optional. Each item is a JSON object with name, description, and optionally image_url.

Example (partial):

{
  "idea": "Create a promotional video where cute animals play musical instruments in a sunny meadow",
  "scene_count": 4,
  "elements": {
    "characters": [
      {
        "name": "Whiskers the Squirrel",
        "description": "Style:Pixar-style 3D, a small, nimble squirrel with rusty-red fur and a bushy tail.",
        "image_url": ""
      },
      {
        "name": "Pip the Rabbit",
        "description": "Style:Pixar-style 3D, a plump, creamy white rabbit with long floppy ears.",
        "image_url": ""
      }
    ],
    "environments": [
      {
        "name": "Sunny Meadow",
        "description": "Style:Pixar-style 3D, a vibrant meadow in golden afternoon light with wildflowers.",
        "image_url": ""
      }
    ],
    "objects": [
      {
        "name": "Acorn Flute",
        "description": "Style:Pixar-style 3D, a small polished acorn hollowed as a flute with three finger holes.",
        "image_url": ""
      },
      {
        "name": "Carrot Drum",
        "description": "Style:Pixar-style 3D, a miniature hollow carrot with a leaf membrane as drumhead.",
        "image_url": ""
      }
    ]
  }
}

audio_option

Audio configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).

Audio parameters

Parameter Type Default Description
narrator string AutoV Voice for narration. Available voices: AutoV, Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill
has_narration boolean true Include narration. Ignored when native_audio is true
has_bg_music boolean true Include background music
native_audio boolean false Include native sound effects and lip sync. When true, narration is disabled

Usage examples (application/json)

Background music only:

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": false
}

Narration with background music:

{
  "has_bg_music": true,
  "has_narration": true,
  "native_audio": false,
  "narrator": "Rachel"
}

Native audio (sound effects + lip sync):

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": true
}

No audio:

{
  "has_bg_music": false,
  "has_narration": false,
  "native_audio": false
}

Notes

  • When native_audio is true, has_narration is ignored (effectively false).
  • narrator is only used when has_narration is true and native_audio is false.
  • Send audio_option as a JSON object in the request body (Content-Type: application/json).
SecurityAPIKeyHeader
Request
Request Body schema: application/json
required
idea
required
string (Idea)

Detailed text description of your story concept.

scene_count
integer (Number of Scenes) >= 1
Default: 3
image_tool
string (Image Generation Model)
Default: "AutoI"
Enum: "AutoI" "Seedream" "FluxTurbo" "NanoBanana" "QwenImage"
video_tool
string (Video Animation Method)
Default: "Auto"
Enum: "Auto" "KlingAI" "Seedance" "Pixverse" "VeoFast" "Vidu" "AutoT1" "VeoLite" "PVideo"
scene_duration
integer (Scene Duration) [ 1 .. 20 ]
Default: 5

Duration per scene in seconds. The supported values vary based on video tool selected.

aspect_ratio
string (Aspect Ratio)
Default: "16:9"
Enum: "16:9" "4:3" "1:1" "3:4" "9:16"
is_transition
boolean (Enable Transitions)
Default: false
Story Elements (object) or Story Elements (null) (Story Elements)
Audio Configuration (object) or Audio Configuration (string) or Audio Configuration (null) (Audio Configuration)
language
string (Language)
Default: "English"
Enum: "Arabic" "Chinese" "English" "French" "German" "Hindi" "Japanese" "Korean" "Spanish" "Turkish"
title
string (Story Title)
Default: ""
webhook_url
string (Webhook URL)
Default: ""
Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

422

Validation Error

post/v2/story/idea-2-video
Request samples
Response samples
application/json
{
  • "id": "abc123-def456-ghi789",
  • "title": "Winter Commercial Story",
  • "idea": "Create a realistic winter commercial for SkinRevive Moisturiser set in snowy mountains",
  • "is_transition": false,
  • "status": "new",
  • "progress_percentage": 0,
  • "aspect_ratio": "16:9",
  • "used_credits": 300,
  • "all_medias": [ ],
  • "created_at": "2026-02-06T02:05:40.985431+00:00",
  • "updated_at": "2026-02-06T02:05:40.985431+00:00"
}

[AUTO] URL-to-Video

Creates a complete video from a website URL and idea. Send Content-Type: application/json.

The API uses the URL content plus your idea to generate a story and then runs the full pipeline. Poll GET /v2/story/{story_id} until status is success.

Example: URL-to-Video (Python)

import requests

BASE_URL = "https://api.vimmerse.net"
API_KEY = "YOUR_API_KEY"

url = f"{BASE_URL}/v2/story/url-2-video"
headers = {"X-Api-Key": API_KEY, "Content-Type": "application/json"}

payload = {
    "idea": "Create a cool, modern commercial-style video for this brand https://www.example.com/",
    "title": "Brand Commercial",
    "aspect_ratio": "16:9",
    "scene_count": 3,
    "image_tool": "AutoI",
    "video_tool": "Auto",
    "scene_duration": 5,
    "audio_option": {"has_bg_music": True, "has_narration": False, "native_audio": False},
    "language": "English",
}

response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
result = response.json()
print(f"Story ID: {result['id']}")

audio_option

Audio configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).

Audio parameters

Parameter Type Default Description
narrator string AutoV Voice for narration. Available voices: AutoV, Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill
has_narration boolean true Include narration. Ignored when native_audio is true
has_bg_music boolean true Include background music
native_audio boolean false Include native sound effects and lip sync. When true, narration is disabled

Usage examples (application/json)

Background music only:

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": false
}

Narration with background music:

{
  "has_bg_music": true,
  "has_narration": true,
  "native_audio": false,
  "narrator": "Rachel"
}

Native audio (sound effects + lip sync):

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": true
}

No audio:

{
  "has_bg_music": false,
  "has_narration": false,
  "native_audio": false
}

Notes

  • When native_audio is true, has_narration is ignored (effectively false).
  • narrator is only used when has_narration is true and native_audio is false.
  • Send audio_option as a JSON object in the request body (Content-Type: application/json).
SecurityAPIKeyHeader
Request
Request Body schema: application/json
required
idea
required
string (URL)

URL of the webpage to scrape for content (e.g. product page, article).

scene_count
integer (Number of Scenes) >= 1
Default: 3
image_tool
string (Image Generation Model)
Default: "AutoI"
Enum: "AutoI" "Seedream" "FluxTurbo" "NanoBanana" "QwenImage"
video_tool
string (Video Animation Method)
Default: "Auto"
Enum: "Auto" "KlingAI" "Seedance" "Pixverse" "VeoFast" "Vidu" "AutoT1" "VeoLite" "PVideo"
scene_duration
integer (Scene Duration) [ 1 .. 20 ]
Default: 5

Duration per scene in seconds. The supported values vary based on video tool selected.

aspect_ratio
string (Aspect Ratio)
Default: "16:9"
Enum: "16:9" "4:3" "1:1" "3:4" "9:16"
is_transition
boolean (Enable Transitions)
Default: false
Story Elements (object) or Story Elements (null) (Story Elements)
Audio Configuration (object) or Audio Configuration (string) or Audio Configuration (null) (Audio Configuration)
language
string (Language)
Default: "English"
Enum: "Arabic" "Chinese" "English" "French" "German" "Hindi" "Japanese" "Korean" "Spanish" "Turkish"
title
string (Story Title)
Default: ""
webhook_url
string (Webhook URL)
Default: ""
Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

422

Validation Error

post/v2/story/url-2-video
Request samples
Response samples
application/json
{
  • "id": "xyz789-abc123-def456",
  • "title": "Website Commercial",
  • "idea": "Create a cool, modern commercial-style video for https://www.example.com/",
  • "is_transition": false,
  • "status": "new",
  • "progress_percentage": 0,
  • "aspect_ratio": "16:9",
  • "used_credits": 0,
  • "all_medias": [ ],
  • "created_at": "2026-02-06T02:05:40.985431+00:00",
  • "updated_at": "2026-02-06T02:05:40.985431+00:00"
}

[AUTO] Images-to-Video

Generates a story video from an idea and a list of image URLs. Send Content-Type: application/json.

Pipeline: narrations/music → animate each image → compose final video. Poll GET /v2/story/{story_id} until status is success.

Example: Images-to-Video (Python)

import requests

BASE_URL = "https://api.vimmerse.net"
API_KEY = "YOUR_API_KEY"

url = f"{BASE_URL}/v2/story/images-2-video"
headers = {"X-Api-Key": API_KEY, "Content-Type": "application/json"}

payload = {
    "idea": "Cinematic product-only smoothie promo: fresh berries, bananas, oranges on a wooden table, blender mixing, smoothie pouring into glass, 16:9, photorealistic.",
    "image_urls": [
        "https://example.com/image1.jpg",
        "https://example.com/image2.jpg",
        "https://example.com/image3.jpg",
    ],
    "title": "Smoothie Promo",
    "aspect_ratio": "16:9",
    "video_tool": "Auto",
    "is_transition": True,
    "scene_duration": 5,
    "audio_option": {"has_bg_music": True, "has_narration": True, "native_audio": False},
    "language": "English",
}

response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
result = response.json()
print(f"Story ID: {result['id']}, Scenes: {len(payload['image_urls'])}")

audio_option

Audio configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).

Audio parameters

Parameter Type Default Description
narrator string AutoV Voice for narration. Available voices: AutoV, Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill
has_narration boolean true Include narration. Ignored when native_audio is true
has_bg_music boolean true Include background music
native_audio boolean false Include native sound effects and lip sync. When true, narration is disabled

Usage examples (application/json)

Background music only:

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": false
}

Narration with background music:

{
  "has_bg_music": true,
  "has_narration": true,
  "native_audio": false,
  "narrator": "Rachel"
}

Native audio (sound effects + lip sync):

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": true
}

No audio:

{
  "has_bg_music": false,
  "has_narration": false,
  "native_audio": false
}

Notes

  • When native_audio is true, has_narration is ignored (effectively false).
  • narrator is only used when has_narration is true and native_audio is false.
  • Send audio_option as a JSON object in the request body (Content-Type: application/json).
SecurityAPIKeyHeader
Request
Request Body schema: application/json
required
idea
string (Idea)
Default: "Create a stunning video showcasing these images with a compelling narrative"

Text description of your story concept.

image_urls
required
Array of strings (Image URLs) non-empty

Array of publicly accessible image URLs. Required.

video_tool
string (Video Animation Method)
Default: "Auto"
Enum: "Auto" "KlingAI" "Seedance" "Pixverse" "VeoFast" "Vidu" "AutoT1" "VeoLite" "PVideo"
is_transition
boolean (Enable Transitions)
Default: false
scene_duration
integer (Scene Duration) [ 1 .. 20 ]
Default: 5

Duration per scene in seconds. The supported values vary based on video tool selected.

aspect_ratio
string (Aspect Ratio)
Default: "16:9"
Enum: "16:9" "4:3" "1:1" "3:4" "9:16"
Audio Configuration (object) or Audio Configuration (string) or Audio Configuration (null) (Audio Configuration)

JSON object: {has_bg_music, has_narration, native_audio, narrator}

language
string (Language)
Default: "English"
Enum: "Arabic" "Chinese" "English" "French" "German" "Hindi" "Japanese" "Korean" "Spanish" "Turkish"
title
string (Story Title)
Default: ""
webhook_url
string (Webhook URL)
Default: ""
Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

422

Validation Error

post/v2/story/images-2-video
Request samples
Response samples
application/json
{
  • "id": "img123-vid456-story789",
  • "title": "Product Showcase",
  • "idea": "Cinematic product-only smoothie promo showcasing fresh ingredients",
  • "is_transition": false,
  • "status": "new",
  • "progress_percentage": 0,
  • "aspect_ratio": "16:9",
  • "used_credits": 700,
  • "all_medias": [ ],
  • "created_at": "2026-02-06T02:05:40.985431+00:00",
  • "updated_at": "2026-02-06T02:05:40.985431+00:00"
}

[ADVANCED] Step 1 - Create Storyboard

Step 1 (Advanced): Creates a storyboard from an idea and/or image URLs.

Example: Create Storyboard (Python)

import requests

BASE_URL = "https://api.vimmerse.net"
API_KEY = "YOUR_API_KEY"

url = f"{BASE_URL}/v2/story"
headers = {"X-Api-Key": API_KEY, "Content-Type": "application/json"}

payload = {
    "idea": "Create a promotional video where cute animals play musical instruments in a sunny meadow",
    "scene_count": 3,
    "title": "Musical Animals",
    "language": "English",
    "aspect_ratio": "16:9",
    "audio_option": {
        "has_bg_music": True,
        "has_narration": True,
        "native_audio": False,
        "narrator": "AutoV",
    },
}

response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
result = response.json()
story_id = result["id"]
print(f"Storyboard created: {story_id}, Scenes: {len(result.get('storyboard', {}).get('scenes', []))}")

Example: Storyboard with image_urls

payload = {
    "idea": "Create a promotional video showcasing these landscapes",
    "title": "Landscape Story",
    "image_urls": [
        "https://example.com/landscape1.jpg",
        "https://example.com/landscape2.jpg",
        "https://example.com/landscape3.jpg",
    ],
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
result = response.json()
print(f"Story ID: {result['id']}")

elements

Optional JSON object of pre-defined story elements you already have in mind. The API uses these to guide storyboard generation (e.g. character names, environments, and props). Only characters, environments, and objects are accepted; scenes must not be included (scenes are generated from the idea).

Each key in elements must be a list of dictionaries (JSON objects), matching the storyboard structure (see example below).

Key Type Description
characters array of objects Optional. Each item is a JSON object with name, description, and optionally image_url.
environments array of objects Optional. Each item is a JSON object with name, description, and optionally image_url.
objects array of objects Optional. Each item is a JSON object with name, description, and optionally image_url.

Example (partial): Providing characters, one environment, and two objects so the storyboard uses them:

{
  "idea": "Create a promotional video where cute animals play musical instruments in a sunny meadow",
  "scene_count": 3,
  "elements": {
    "characters": [
      {
        "name": "Whiskers the Squirrel",
        "description": "Style:Pixar-style 3D, A small, nimble squirrel with rusty-red fur, bright eyes, bushy tail.",
        "image_url": ""
      },
      {
        "name": "Pip the Rabbit",
        "description": "Style:Pixar-style 3D, A plump, creamy white rabbit with long floppy ears, large blue eyes.",
        "image_url": ""
      }
    ],
    "environments": [
      {
        "name": "Sunny Meadow",
        "description": "Style:Pixar-style 3D, A vibrant meadow in golden afternoon light, lush grass, wildflowers, clear blue sky.",
        "image_url": ""
      }
    ],
    "objects": [
      {
        "name": "Acorn Flute",
        "description": "Style:Pixar-style 3D, A small polished acorn hollowed as a flute with three finger holes.",
        "image_url": ""
      },
      {
        "name": "Carrot Drum",
        "description": "Style:Pixar-style 3D, A miniature hollow carrot with a leaf membrane as drumhead.",
        "image_url": ""
      }
    ]
  }
}

If you omit elements or leave it empty, the storyboard is generated from the idea alone. When provided, the generated storyboard will reference these names and descriptions; you can later generate or replace images via POST /v2/story/{story_id}/elements.

audio_option

Audio configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).

Audio parameters

Parameter Type Default Description
narrator string AutoV Voice for narration. Available voices: AutoV, Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill
has_narration boolean true Include narration. Ignored when native_audio is true
has_bg_music boolean true Include background music
native_audio boolean false Include native sound effects and lip sync. When true, narration is disabled

Usage examples (application/json)

Background music only:

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": false
}

Narration with background music:

{
  "has_bg_music": true,
  "has_narration": true,
  "native_audio": false,
  "narrator": "Rachel"
}

Native audio (sound effects + lip sync):

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": true
}

No audio:

{
  "has_bg_music": false,
  "has_narration": false,
  "native_audio": false
}

Notes

  • When native_audio is true, has_narration is ignored (effectively false).
  • narrator is only used when has_narration is true and native_audio is false.
  • Send audio_option as a JSON object in the request body (Content-Type: application/json).
SecurityAPIKeyHeader
Request
Request Body schema: application/json
required
Story ID (string) or Story ID (null) (Story ID)

Optional; to continue editing an existing story.

idea
required
string (Idea)

Detailed text description of your story concept.

scene_count
integer (Number of Scenes) >= 1
Default: 3

Ignored if image_urls provided.

language
string (Language)
Default: "English"
Aspect Ratio (string) or Aspect Ratio (null) (Aspect Ratio)
Audio Configuration (object) or Audio Configuration (null) (Audio Configuration)

Optional. See the audio_option section in this endpoint's description for parameters (has_bg_music, has_narration, native_audio, narrator) and examples.

Story Elements (object) or Story Elements (null) (Story Elements)

Optional. JSON object with up to three keys: 'characters', 'environments', 'objects'. Each key, when present, must be a list of dictionaries (objects) with 'name', 'description', and optional 'image_url'. Do not include 'scenes'. See endpoint description for full examples.

image_urls
Array of strings (Image URLs)

Array of image URLs.

Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

422

Validation Error

post/v2/story
Request samples
Response samples
application/json
{
  • "id": "story-abc123-def456",
  • "title": "Musical Animals Story",
  • "idea": "Create a promotional video where cute animals play musical instruments.",
  • "is_transition": false,
  • "status": "new",
  • "progress_percentage": 0,
  • "aspect_ratio": "16:9",
  • "used_credits": 0,
  • "storyboard": {
    },
  • "all_medias": [ ],
  • "created_at": "2025-09-02T17:20:48.587526+00:00",
  • "updated_at": "2025-09-02T17:20:48.587526+00:00"
}

[ADVANCED] Step 1.5 - Create Element Images (Optional)

Step 1.5 (Advanced): Generates images for storyboard elements (characters, objects, environments).

Example: Create Element Images (Python)

import requests

BASE_URL = "https://api.vimmerse.net"
API_KEY = "YOUR_API_KEY"
STORY_ID = "your-story-id-here"

url = f"{BASE_URL}/v2/story/{STORY_ID}/elements"
headers = {"X-Api-Key": API_KEY, "Content-Type": "application/json"}

payload = {
    "image_tool": "Seedream",
    "aspect_ratio": "16:9"
}

response = requests.post(url, headers=headers, json=payload, timeout=120)
response.raise_for_status()
result = response.json()
storyboard = result.get("storyboard", {})
for char in storyboard.get("characters", []):
    url_val = char.get("URL") or char.get("image_url")
    if url_val:
        print(f"Character '{char.get('name')}' image: {url_val}")
SecurityAPIKeyHeader
Request
Request Body schema: application/json
required
image_tool
string (Image Generation Model)
Default: "AutoI"

AI model used for generating element images. Options: 'AutoI' (default), 'Seedream', 'FluxTurbo', 'NanoBanana', 'QwenImage'.

Enum: "AutoI" "Seedream" "NanoBananaT2" "NanoBananaPro" "QwenImage" "GPTImage" "FluxPro" "FluxTurbo" "NanoBanana" "FluxKontextPro" "StableDiffusion3.5" "Auto"
Aspect Ratio (string) or Aspect Ratio (null) (Aspect Ratio)

Aspect ratio for generated element images. Options: '16:9' (landscape), '4:3', '1:1', '3:4', '9:16' (vertical). Default is '16:9'.

Storyboard (object) or Storyboard (null) (Storyboard)

Optional storyboard object. If provided, regenerates elements based on this structure. Must contain 'characters', 'environments', 'objects', and 'scenes' arrays.

Responses
200

Story Object with element images generated

400

Bad Request

402

Insufficient Credit

404

Not Found

422

Validation Error

post/v2/story/{story_id}/elements
Request samples
Response samples
application/json
{
  • "id": "story-xyz789",
  • "title": "",
  • "idea": "Generate a Shonen style story that Bunny walks through forest and finds honey",
  • "is_transition": false,
  • "status": "processing",
  • "progress_percentage": 10,
  • "aspect_ratio": "16:9",
  • "used_credits": 0,
  • "storyboard": {},
  • "all_medias": [ ],
  • "created_at": "2026-02-06T02:05:40.985431+00:00",
  • "updated_at": "2025-07-01T17:14:53.106294+00:00"
}

[ADVANCED] Step 2 - Create Scenes

Step 2 (Advanced): Generates scene images and narrations from the storyboard. Send Content-Type: application/json.

Example: Create Scenes (Python)

import requests

BASE_URL = "https://api.vimmerse.net"
API_KEY = "YOUR_API_KEY"
STORY_ID = "your-story-id-here"

url = f"{BASE_URL}/v2/story/{STORY_ID}/scenes"
headers = {"X-Api-Key": API_KEY, "Content-Type": "application/json"}

payload = {
    "image_tool": "Seedream",
    "aspect_ratio": "16:9"
}

response = requests.post(url, headers=headers, json=payload, timeout=180)
response.raise_for_status()
result = response.json()
scenes = result.get("storyboard", {}).get("scenes", [])
print(f"Generated {len(scenes)} scenes")

audio_option

Audio configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).

Audio parameters

Parameter Type Default Description
narrator string AutoV Voice for narration. Available voices: AutoV, Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill
has_narration boolean true Include narration. Ignored when native_audio is true
has_bg_music boolean true Include background music
native_audio boolean false Include native sound effects and lip sync. When true, narration is disabled

Usage examples (application/json)

Background music only:

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": false
}

Narration with background music:

{
  "has_bg_music": true,
  "has_narration": true,
  "native_audio": false,
  "narrator": "Rachel"
}

Native audio (sound effects + lip sync):

{
  "has_bg_music": true,
  "has_narration": false,
  "native_audio": true
}

No audio:

{
  "has_bg_music": false,
  "has_narration": false,
  "native_audio": false
}

Notes

  • When native_audio is true, has_narration is ignored (effectively false).
  • narrator is only used when has_narration is true and native_audio is false.
  • Send audio_option as a JSON object in the request body (Content-Type: application/json).
SecurityAPIKeyHeader
Request
Request Body schema: application/json
required
image_tool
string (Image Generation Model)
Default: "Seedream"
Enum: "AutoI" "Seedream" "NanoBananaT2" "NanoBananaPro" "QwenImage" "GPTImage" "FluxPro" "FluxTurbo" "NanoBanana" "FluxKontextPro" "StableDiffusion3.5" "Auto"
Aspect Ratio (string) or Aspect Ratio (null) (Aspect Ratio)
Storyboard (JSON object) (object) or Storyboard (JSON object) (null) (Storyboard (JSON object))
Audio Configuration (object) or Audio Configuration (null) (Audio Configuration)

Optional. See the audio_option section in this endpoint's description for parameters (has_bg_music, has_narration, native_audio, narrator) and examples.

Responses
200

Story Object with scene images and narrations generated

400

Bad Request

402

Insufficient Credit

404

Not Found

422

Validation Error

post/v2/story/{story_id}/scenes
Request samples
Response samples
application/json
{
  • "id": "story-abc123",
  • "title": "Website Commercial",
  • "idea": "Create a promotional video where cute animals play musical instruments",
  • "is_transition": false,
  • "status": "processing",
  • "progress_percentage": 50,
  • "aspect_ratio": "16:9",
  • "used_credits": 0,
  • "storyboard": {},
  • "all_medias": [ ],
  • "created_at": "2026-02-06T02:05:40.985431+00:00",
  • "updated_at": "2025-09-02T17:26:03.533765+00:00"
}

[ADVANCED] Step 3 - Create Videos

Step 3 (Advanced): Creates videos from scene images and composes the story. Send Content-Type: application/json.

Example: Create Videos (Python)

import requests

BASE_URL = "https://api.vimmerse.net"
API_KEY = "YOUR_API_KEY"
STORY_ID = "your-story-id-here"

url = f"{BASE_URL}/v2/story/{STORY_ID}/videos"
headers = {"X-Api-Key": API_KEY, "Content-Type": "application/json"}

payload = {
    "title": "My Amazing Story",
    "video_tool": "Auto",
    "duration": 5,
    "is_transition": True,
    "webhook_url": "https://your-domain.com/webhook/video-complete",
}

response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
result = response.json()
print(f"Video generation started: {result['id']}, Status: {result['status']}")
SecurityAPIKeyHeader
Request
Request Body schema: application/json
required
title
string (Story Title)
Default: ""
Storyboard (JSON object) (object) or Storyboard (JSON object) (null) (Storyboard (JSON object))
is_transition
boolean (Enable Transitions)
Default: false
video_tool
string (Motion Type)
Default: "Auto"
Enum: "Auto" "AutoT3" "AutoT1" "Grok" "KlingAI" "KlingT3" "VeoLite" "VeoFast" "Veo" "RunwayML" "MinimaxHailuo" "Seedance" "SeedanceFast" "SeedanceT6" "Pixverse" "PixverseT3" "Hunyuan" "Vidu" "PVideo" "StaticMotion" "Wan" "Sora" "SoraPro" "LumaAI" "LumaRay2"
duration
integer (Scene Duration) [ 1 .. 10 ]
Default: 5
loop
integer (Motion Loop Count) [ 1 .. 6 ]
Default: 1
Webhook URL (string) or Webhook URL (null) (Webhook URL)
Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

422

Validation Error

post/v2/story/{story_id}/videos
Request samples
Response samples
application/json
{
  • "id": "abc123-def456-ghi789",
  • "title": "Winter Commercial Story",
  • "idea": "Create a realistic winter commercial for SkinRevive Moisturiser set in snowy mountains",
  • "is_transition": false,
  • "status": "success",
  • "progress_percentage": 100,
  • "aspect_ratio": "16:9",
  • "used_credits": 300,
  • "storyboard": {},
  • "all_medias": [],
  • "created_at": "2026-02-06T02:05:40.985431+00:00",
  • "updated_at": "2026-02-06T02:10:00.000000+00:00"
}

Get Story Detail

Retrieves a story by ID. Use this to poll until status is success and then read video_url.

Example: Get Story (Python)

import requests

BASE_URL = "https://api.vimmerse.net"
API_KEY = "YOUR_API_KEY"
STORY_ID = "your-story-id-here"

url = f"{BASE_URL}/v2/story/{STORY_ID}"
headers = {"X-Api-Key": API_KEY}

response = requests.get(url, headers=headers, timeout=30)
response.raise_for_status()
result = response.json()
print(f"Story ID: {result['id']}, Status: {result['status']}, Progress: {result.get('progress_percentage', 0)}%")
if result.get("status") == "success" and result.get("video_url"):
    print(f"Video URL: {result['video_url']}")
SecurityAPIKeyHeader
Responses
200

Story Object (CustomerStoryResponse format)

400

Bad Request

404

Not Found

422

Validation Error

get/v2/story/{story_id}
Request samples
Response samples
application/json
{
  • "id": "abc123-def456-ghi789",
  • "title": "Winter Commercial Story",
  • "idea": "Create a realistic winter commercial for SkinRevive Moisturiser set in snowy mountains",
  • "is_transition": false,
  • "status": "success",
  • "progress_percentage": 100,
  • "aspect_ratio": "16:9",
  • "used_credits": 300,
  • "storyboard": {},
  • "all_medias": [],
  • "created_at": "2026-02-06T02:05:40.985431+00:00",
  • "updated_at": "2026-02-06T02:10:00.000000+00:00"
}

Delete Story

Permanently deletes a story. Returns the last snapshot of the deleted story. Requires authentication and ownership.

SecurityAPIKeyHeader
Responses
200

Deleted Story Object

400

Bad Request

404

Not Found

422

Validation Error

delete/v2/story/{story_id}
Request samples
Response samples
application/json
{ }