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).
image_urls, audio_option, elements as JSON).status is success, then use video_url.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):
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)
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)
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)
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 responses use application/json with:
BAD_REQUEST, INSUFFICIENT_CREDIT, REACHED_LIMIT).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.
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']}")
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 configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).
| 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 |
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
}
native_audio is true, has_narration is ignored (effectively false).narrator is only used when has_narration is true and native_audio is false.audio_option as a JSON object in the request body (Content-Type: application/json).Story Object
Bad Request
Insufficient Credit
Validation Error
{- "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"
}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.
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 configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).
| 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 |
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
}
native_audio is true, has_narration is ignored (effectively false).narrator is only used when has_narration is true and native_audio is false.audio_option as a JSON object in the request body (Content-Type: application/json).Story Object
Bad Request
Insufficient Credit
Validation Error
{- "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"
}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.
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 configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).
| 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 |
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
}
native_audio is true, has_narration is ignored (effectively false).narrator is only used when has_narration is true and native_audio is false.audio_option as a JSON object in the request body (Content-Type: application/json).Story Object
Bad Request
Insufficient Credit
Validation Error
{- "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"
}Step 1 (Advanced): Creates a storyboard from an idea and/or image URLs.
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', []))}")
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']}")
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 configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).
| 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 |
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
}
native_audio is true, has_narration is ignored (effectively false).narrator is only used when has_narration is true and native_audio is false.audio_option as a JSON object in the request body (Content-Type: application/json).Story Object
Bad Request
Insufficient Credit
Validation Error
{- "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": {
- "scenes": [
- {
- "video_description": "Melody's fingers pluck the guitar strings; blossoms sway in the breeze.",
- "name": "Melody's Solo",
- "image_description": "Melody the rabbit sits in the Flower Field, strums the Guitar.",
- "narrator": "In the heart of the meadow, Melody's gentle strums bring the flowers to life.",
- "image_url": ""
}
], - "characters": [
- {
- "name": "Melody",
- "description": "Style:Pixar-style 3D, Melody is a white rabbit with soft, plush fur.",
- "image_url": ""
}, - {
- "name": "Riff",
- "description": "Style:Pixar-style 3D, Riff is a small, lively monkey.",
- "image_url": ""
}
], - "environments": [
- {
- "name": "Flower Field",
- "description": "A vibrant field filled with wildflowers.",
- "image_url": ""
}
], - "objects": [
- {
- "name": "Guitar",
- "description": "A small wooden guitar with a polished finish.",
- "image_url": ""
}
]
}, - "all_medias": [ ],
- "created_at": "2025-09-02T17:20:48.587526+00:00",
- "updated_at": "2025-09-02T17:20:48.587526+00:00"
}Step 1.5 (Advanced): Generates images for storyboard elements (characters, objects, environments).
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}")
Story Object with element images generated
Bad Request
Insufficient Credit
Not Found
Validation Error
{- "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": {
- "scenes": [
- {
- "video_description": "",
- "name": "",
- "image_description": "Bunny hopping through the forest",
- "narrator": "In the heart of the enchanted forest...",
- "image_url": ""
}
], - "characters": [
- {
- "name": "Bunny",
- "description": "A small, fluffy white rabbit",
}
], - "environments": [
- {
- "name": "Enchanted Forest",
- "description": "A sun-dappled forest",
}
], - "objects": [
- {
- "name": "Honeycomb",
- "description": "A golden honeycomb",
}
]
}, - "all_medias": [ ],
- "created_at": "2026-02-06T02:05:40.985431+00:00",
- "updated_at": "2025-07-01T17:14:53.106294+00:00"
}Step 2 (Advanced): Generates scene images and narrations from the storyboard. Send Content-Type: application/json.
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 configuration for story generation (JSON object). Used in idea-2-video, url-2-video, images-2-video, and advanced Step 1 (Create Storyboard).
| 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 |
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
}
native_audio is true, has_narration is ignored (effectively false).narrator is only used when has_narration is true and native_audio is false.audio_option as a JSON object in the request body (Content-Type: application/json).Story Object with scene images and narrations generated
Bad Request
Insufficient Credit
Not Found
Validation Error
{- "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": {
- "scenes": [
- {
- "video_description": "",
- "name": "Melody's Solo",
- "image_description": "Melody the rabbit strums her guitar",
- "narrator": "In the heart of the meadow, Melody's gentle strums bring the flowers to life.",
}
], - "characters": [ ],
- "music": {
- "description": "A whimsical, upbeat melody",
- "lyrics": "",
}, - "environments": [ ],
- "objects": [ ]
}, - "all_medias": [ ],
- "created_at": "2026-02-06T02:05:40.985431+00:00",
- "updated_at": "2025-09-02T17:26:03.533765+00:00"
}Step 3 (Advanced): Creates videos from scene images and composes the story. Send Content-Type: application/json.
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']}")
Story Object
Bad Request
Insufficient Credit
Validation Error
{- "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": {
- "scenes": [
- {
- "video_description": "Camera pans across snowy peaks.",
- "name": "Opening",
- "image_description": "Snowy mountain landscape",
- "narrator": "Warm, inviting tone.",
}
], - "characters": [ ],
- "music": {
- "description": "Uplifting orchestral piece",
- "lyrics": "",
}, - "environments": [ ],
- "objects": [ ]
}, - "all_medias": [
- {
- "id": "media-uuid-1",
- "title": "",
- "description": "",
- "customer_id": "customer456",
- "primary_user_id": "user123",
- "media_items": [
], - "duration_time": "0",
- "processing_status": "success",
- "result": [
- {
}
], - "webhook_url": "",
- "created_at": "2026-02-06T02:05:40.985431+00:00",
- "updated_at": "2026-02-06T02:10:00.000000+00:00",
- "version": "3"
}
], - "created_at": "2026-02-06T02:05:40.985431+00:00",
- "updated_at": "2026-02-06T02:10:00.000000+00:00"
}Retrieves a story by ID. Use this to poll until status is success and then read video_url.
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']}")
Story Object (CustomerStoryResponse format)
Bad Request
Not Found
Validation Error
{- "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": {
- "scenes": [
- {
- "video_description": "Camera pans across snowy peaks.",
- "name": "Opening",
- "image_description": "Snowy mountain landscape",
- "narrator": "Warm, inviting tone.",
}
], - "characters": [ ],
- "music": {
- "description": "Uplifting orchestral piece",
- "lyrics": "",
}, - "environments": [ ],
- "objects": [ ]
}, - "all_medias": [
- {
- "id": "media-uuid-1",
- "title": "",
- "description": "",
- "customer_id": "customer456",
- "primary_user_id": "user123",
- "media_items": [
], - "duration_time": "0",
- "processing_status": "success",
- "result": [
- {
}
], - "webhook_url": "",
- "created_at": "2026-02-06T02:05:40.985431+00:00",
- "updated_at": "2026-02-06T02:10:00.000000+00:00",
- "version": "3"
}
], - "created_at": "2026-02-06T02:05:40.985431+00:00",
- "updated_at": "2026-02-06T02:10:00.000000+00:00"
}Permanently deletes a story. Returns the last snapshot of the deleted story. Requires authentication and ownership.
Deleted Story Object
Bad Request
Not Found
Validation Error
{ }