VisionStory Docs
llms.txt Get API key

Generate AI videos with Seedance models — text-to-video, image-to-video, and multimodal references — through the same API key and billing you already use for talking avatars.

Beta access. These endpoints are available to allowlisted accounts only. If a request returns 403 / access not enabled, contact your VisionStory representative to enable your account. An active subscription is required.

Endpoints

Method Path What it does
GET /api/v1/ai_video/models Machine-readable capability sheet for every model
GET /api/v1/ai_video/cost Exact credit cost of a task before you submit it
POST /api/v1/ai_video Submit a generation task
GET /api/v1/ai_video Query one task (or up to 20 with video_ids)
GET /api/v1/ai_videos List your tasks, newest first
DELETE /api/v1/ai_video Delete a task
POST /api/v1/asset Upload a reusable media asset
GET /api/v1/assets List your assets
DELETE /api/v1/asset Delete an asset

Quick start

Submit a text-to-video task, then poll until it finishes:

curl -s -H "X-API-Key: $VISIONSTORY_API_KEY" -H "Content-Type: application/json" -d '{"model_id": "seedance-2.0", "prompt": "A corgi surfing at sunset, cinematic lighting", "duration_sec": 8, "aspect_ratio": "9:16", "resolution": "1080p"}' https://openapi.visionstory.ai/api/v1/ai_video
{ "data": { "video_id": "7241059991822401536", "status": "queued", "cost_credit": 64 } }

Poll every 5–10 seconds:

curl -s -H "X-API-Key: $VISIONSTORY_API_KEY" "https://openapi.visionstory.ai/api/v1/ai_video?video_id=7241059991822401536"

Models

GET /api/v1/ai_video/models returns allowed values and defaults for each parameter, plus media constraints. Always drive your integration from this endpoint — new models and parameter values appear there without any API change.

model_id Best for Resolution Duration Capabilities
seedance-2.5 Latest generation, single clips up to 30 s 720p 4–30 s text-to-video, image-to-video
seedance-2.0 Flagship quality, multimodal references 720p / 1080p 4–15 s text-to-video, image-to-video
seedance-2.0-fast Lower latency and cost 720p 4–15 s text-to-video, image-to-video
seedance-2.0-mini Lightweight, most economical 720p 4–15 s text-to-video, image-to-video

Common to all current models: aspect ratios 16:9 / 9:16 / 4:3 / 3:4 / 1:1, prompt up to 2500 characters, native audio generation on by default (generate_audio).

Credits and cost

Generation is billed in credits, charged at submit time and automatically refunded in full if generation fails. Cost depends on model, resolution, and duration (per second). Query the cost endpoint before submitting — it applies exactly the same formula as billing:

curl -s -H "X-API-Key: $VISIONSTORY_API_KEY" "https://openapi.visionstory.ai/api/v1/ai_video/cost?model_id=seedance-2.0&duration_sec=8&resolution=1080p"
{ "data": { "credit": 64 } }

Check your remaining balance with GET /api/v1/billing/credits.

Media inputs

Every media slot (first_frame, end_frame, refs[]) accepts exactly one of three forms:

Form Example Use when
url {"url": "https://your.site/img.jpg"} One-off use; fetched by our servers, not added to your asset library
inline_data {"inline_data": {"mime_type": "image/png", "data": "<base64>"}} One-off use, no public URL available
asset_id {"asset_id": "7241058823145623552"} Reused materials — upload once via the Assets API, reference many times
Kind Max size Formats Constraints
Image 30 MB jpg, jpeg, png, webp, bmp, tiff, gif 300–6000 px per side, aspect ratio between 1:2.5 and 2.5:1
Video 100 MB mp4, mov 2–15 s, 300–6000 px, 24–60 fps, aspect ratio 1:2.5–2.5:1
Audio 15 MB wav, mp3 2–15 s; cannot be the only reference

Create a video

POST /api/v1/ai_video has two modes on one endpoint: provide first_frame (optionally end_frame) for image-to-video, provide refs for reference-guided text-to-video (character consistency, style, motion, or voice references), or provide neither for pure text-to-video. refs and first_frame are mutually exclusive. Unknown fields and unsupported values are rejected — nothing is silently ignored.

Field Required Description
model_id yes See Models above
prompt yes Text prompt, up to 2500 characters
client_request_id no Idempotency key; resubmitting the same value within 24h returns the original task instead of charging again
duration_sec no Defaults to the model default
aspect_ratio no Defaults to the model default
resolution no Defaults to the model default
generate_audio no Native audio on the output; default true
first_frame no Image media object; switches to image-to-video
end_frame no Image for the last frame; requires first_frame
refs no Up to 9 multimodal reference media objects

Image-to-video with first and last frame:

curl -s -H "X-API-Key: $VISIONSTORY_API_KEY" -H "Content-Type: application/json" -d '{"model_id": "seedance-2.0", "prompt": "The scene slowly comes alive, gentle camera push-in", "first_frame": {"url": "https://your.site/start.jpg"}, "end_frame": {"url": "https://your.site/end.jpg"}, "duration_sec": 6}' https://openapi.visionstory.ai/api/v1/ai_video

Character-consistent generation with a reusable asset:

curl -s -H "X-API-Key: $VISIONSTORY_API_KEY" -H "Content-Type: application/json" -d '{"model_id": "seedance-2.0", "prompt": "The same woman walks through a neon-lit street at night", "refs": [{"asset_id": "7241058823145623552"}], "duration_sec": 10}' https://openapi.visionstory.ai/api/v1/ai_video

Query and poll

Query one task with ?video_id=, or up to 20 at once with ?video_ids=id1,id2,... (batch responses return {"videos": [...]}). Poll every 5–10 seconds.

status Meaning
queued Accepted, waiting for a worker
creating Generating
created Done — video_url and cover_url are ready
failed Generation failed — see error; credits were refunded automatically

Content moderation is asynchronous. A submission that violates content policy is accepted at submit time and later resolves to failed with an explanatory error — always handle the failed state. Failed tasks never consume credits.

List and delete

GET /api/v1/ai_videos lists your tasks, newest first. Pass cursor from the previous page's next_cursor to paginate; next_cursor=0 means no more pages. limit defaults to 20 (max 100). DELETE /api/v1/ai_video?video_id= deletes a task — only your own.

Assets

An asset is a reusable uploaded material: upload once, reference by asset_id in any number of generation requests — ideal for a recurring character image, brand footage, or a voice sample. Re-uploading identical content returns the existing asset (idempotent):

curl -s -H "X-API-Key: $VISIONSTORY_API_KEY" -H "Content-Type: application/json" -d '{"url": "https://your.site/character.jpg"}' https://openapi.visionstory.ai/api/v1/asset
{ "data": { "asset_id": "7241058823145623552", "kind": "image", "mime": "image/jpeg", "width": 1024, "height": 1536, "duration_sec": 0, "created_at": 1754270000 } }

inline_data (base64) is also accepted; size and format limits match Media inputs above. GET /api/v1/assets lists your assets (filter by kind, paginate with cursor / limit). DELETE /api/v1/asset?asset_id= deletes an asset — videos already generated from it are not affected.

Errors

HTTP error.code Meaning
401 Missing or invalid API key
403 403 Account not enabled for the beta — contact us
403 30610 Active subscription required
403 30301 Insufficient credits
403 37101 Invalid input — parameter or media constraint violation
403 37102 Prompt too long
403 37103 Too many references
400 400 Rejected by the gateway (unknown model_id, media too large or unsupported, invalid asset_id)
422 Malformed request body (unknown fields, missing required fields, invalid combinations)
404 Video or asset not found
429 Rate limited

Asynchronous failures (moderation, provider errors) never use HTTP errors — the task resolves to status=failed with an error object, and credits are refunded automatically.

Limits and notes

Next steps