# Funny AI — full specifications, prices and documentation > Build with Funny AI’s API platform. Test video models in the Playground and connect your app with usage-based billing. Image and LLM APIs are planned. [Site text index](https://funnyai.io/llms.txt) ## About Funny AI Funny AI is an API platform for developers building with images, video and language models. Start with the video models available today, test your request in the Playground, and connect it to your application. Image and LLM APIs are planned. Image APIs (Planned): Image generation and editing are part of the Funny AI roadmap. The goal is to help developers add visual creation to product pages, design tools and content workflows. Image models are not available in the current catalog. Video APIs (Explore models): Create clips from a text prompt, a starting image or supported references. Funny AI has eight video model pages with input requirements, current prices and a Playground. Choose the model whose output fits your application. LLM APIs (Planned): Language model access is another planned part of Funny AI, for applications such as chat, writing and coding assistants. Specific models and supported features will appear in the catalog when available; no LLM endpoint is offered yet. Funny AI is independently operated at funnyai.io. It is not an official service of Alibaba, Wan or ByteDance, and is not affiliated with or endorsed by them. Wan and Seedance identify the third-party models available through the platform; model names and trademarks belong to their respective owners. Content maintained by Funny AI. Updated: 2026-10-18. ## Service availability Funny AI is an independent AI API platform for developers, with video models available today and image and LLM APIs planned. Compare current models and prices, test a request in the Playground, then connect your application using the model’s API documentation. This example shows the selected Wan model’s fields. The integration guide supplies the endpoint and authentication; Seedance uses its own request format. Documented reference identifier. See the integration guide for Funny AI model IDs. Create a key for the Wan model family, keep it server-side and use the documented endpoint. Submit once, save the task ID and query that task for the completed video. The API and Playground draw from the same funded account. [Integration guide](https://funnyai.io/docs/integration) ## Pricing Current rates are in USD. Official list prices are shown for comparison. Price/specification check: 2026-10-13. USD / billable second. | Model | Resolution | Official list price | Funny AI | 5-second output | | --- | --- | ---: | ---: | ---: | | Wan 3.0 | 480p | $0.050 | $0.0275 | $0.1375 | | Wan 3.0 | 720p | $0.100 | $0.055 | $0.275 | | Wan 3.0 | 1080p | $0.200 | $0.110 | $0.550 | | Wan 3.0 Prime | 480p | $0.068 | $0.0374 | $0.187 | | Wan 3.0 Prime | 720p | $0.140 | $0.077 | $0.385 | | Wan 3.0 Prime | 1080p | $0.280 | $0.154 | $0.770 | | Wan 3.0 Pro | 1080p | $0.180 | $0.099 | $0.495 | | Wan 3.0 Pro | 2K | $0.200 | $0.110 | $0.550 | | Wan 3.0 Pro | 4K | $0.230 | $0.1265 | $0.6325 | | Wan 3.0 Prime Pro | 1080p | $0.260 | $0.143 | $0.715 | | Wan 3.0 Prime Pro | 2K | $0.280 | $0.154 | $0.770 | | Wan 3.0 Prime Pro | 4K | $0.310 | $0.1705 | $0.8525 | Billable seconds = reference video input seconds + generated output seconds. Text and image inputs add no video seconds. Disabling generated audio does not lower the per-second rate. The 5-second example uses no reference video. A 5-second video reference plus a 5-second output is billed as 10 seconds. Per-second model rates; no monthly video API package is listed here. # Wan 3.0 Source: https://funnyai.io/models/wan-3-0 Create short videos with Wan 3.0 from a written idea, a starting image or media references. Choose a clip up to 30 seconds with optional sound. Try your scene in the Playground, then bring the same settings into your application through Funny AI. ## Specifications - Documented model ID: `wan3.0-video`. Documented reference identifier. See the integration guide for Funny AI model IDs. - Video duration: 2–30 seconds; Auto is also supported. - Output resolution: 480p, 720p, 1080p. - Aspect ratio: adaptive, 16:9, 4:3, 1:1, 3:4, 9:16. - Generated audio: On by default. - Starting material: Text, images, references. - Wan 3.0 accepts 2–30 seconds or automatic duration. Reference video and generated output share a 30-second total; a ten-second reference leaves room for at most twenty seconds of output. - In Wan 3.0 reference mode, the limits are 10 images, 5 video clips and 5 audio clips. Video references total at most 15 seconds, with a separate 15-second allowance for audio. - Choose keyframes or references for a Wan 3.0 request. First/last frames cannot be mixed with reference inputs, and a document and public webpage link cannot be supplied together. - The Wan 3.0 sample on this page is a five-second 480p generation. Use it to explore a scene idea; evaluate a separate 1080p generation when that is the resolution you intend to deliver. Use public HTTP(S) URLs for images, videos and audio. Reference video and audio are each limited to 15 seconds total. Video input plus output cannot exceed 30 seconds. Use a document up to 100 MB or a web link, not both. The 50-page limit applies to PDF/DOC/DOCX/PPT/PPTX/KEY/PAGES files. ## Native request preparation This example shows the selected Wan model’s fields. The integration guide supplies the endpoint and authentication; Seedance uses its own request format. Input parameters for the selected model. See the integration guide for its endpoint and authentication. | Native field | Type | Default | Constraint | | --- | --- | --- | --- | | `prompt` | string or null | `null` | At least a prompt or one media input is required. The preview caps prompts at 20,000 characters; longer native prompts may be truncated. | | `first_frame` | string or null | `null` | One image URL, data URI or Base64. | | `last_frame` | string or null | `null` | One image URL, data URI or Base64. | | `reference_images` | string array or null | `null` | Up to 10 image values; URL, data URI and Base64 may be mixed. | | `reference_videos` | URL array or null | `null` | Up to 5 public HTTP(S) URLs; each clip 1–15 seconds, at most 15 seconds total. | | `reference_audios` | URL array or null | `null` | Up to 5 public HTTP(S) URLs; each clip 1–15 seconds, at most 15 seconds total. | | `file` | URL string or null | `null` | One document; cannot coexist with link. | | `link` | URL string or null | `null` | One public webpage that requires no authentication; cannot coexist with file. | | `resolution` | string | `1080p` | 480p, 720p, 1080p. Native values are case-insensitive; the preview exports lowercase. | | `ratio` | string | `adaptive` | adaptive, 16:9, 4:3, 1:1, 3:4, 9:16 | | `duration` | integer | `5` | 2–30 inclusive, or -1 for automatic model-selected duration. | | `audio` | boolean | `true` | Whether the output includes generated audio. False does not lower the rate. | | `seed` | integer or null | `null` | 0–2147483647 inclusive. Null or omission selects a seed automatically; zero is valid. | | `prompt_extend` | boolean | `true` | Whether the prompt is expanded. | The native body is a flat object with these 14 fields and no additional properties. Model selection is separate; there is no model, input, content or parameters wrapper. The preview omits unprovided optional fields instead of sending null. Prompt-only input selects text-to-video. First and/or last frame selects keyframe mode; keyframes cannot coexist with reference images, videos, audio, file or link. Reference inputs select reference mode. The document file and webpage link are mutually exclusive. ### Documented media constraints - Images: JPEG/JPG, PNG without alpha, BMP or WEBP; maximum 20 MB; each side 240–8000 px; aspect ratio at most 8:1. - Videos: MP4 or MOV; maximum 100 MB; each side 240–4096 px; aspect ratio at most 8:1. Each reference clip is 1–15 seconds; total reference video duration is at most 15 seconds. - Audio: WAV or MP3; maximum 15 MB. Each clip is 1–15 seconds; total reference audio duration is at most 15 seconds. Public HTTP(S) URLs only; Base64 is not supported. - Documents: DOCX, DOC, XLSX, XLS, PPTX, PPT, PDF, TXT, KEY, PAGES, NUMBERS or MD; maximum 100 MB. PDF, DOCX, DOC, PPTX, PPT, KEY and PAGES have a 50-page limit. - Reference input video plus generated output must not exceed 30 seconds. Both successful reference video input seconds and generated output seconds are billable. These are documented model constraints. The request preview does not fetch or decode media, so it cannot verify remote file size, format, dimensions, duration or page count. It validates request values and input combinations without submitting a generation task. ## What can you make with Wan 3.0? Wan 3.0 is a video generation model for turning text and visual direction into short clips. Start with a sentence when the scene is still an idea, or bring a photograph when the opening composition is already decided. You can choose an output size up to 1080p for a social post, a website or a sequence you will edit later. A five-second Wan 3.0 shot at 480p is a small place to begin: one subject, one movement and a clear ending. Try a toy campervan winding around a paper road, or a product emerging from shadow. Watch the whole result before expanding the brief, so the next request answers a specific creative question. ## What you can create ### Create with Wan 3.0 from text Describe the scene you want to see: a subject, its action and the camera position. Wan 3.0 can begin with that prompt alone, so you can explore a new setting before preparing a collection of reference assets. ### Animate an opening image Give Wan 3.0 a first frame to establish the scene, a last frame to describe the destination, or both. This is useful when you already have a composition and want to explore what happens around it. ### Guide Wan 3.0 with references Bring separate examples of appearance, movement and sound in reference mode. A character image and a short motion clip can make the brief more concrete; explain the role of each source instead of leaving the relationship implicit. ## Put it to work ### A social post with a visual surprise Use Wan 3.0 to explore an everyday object in an unexpected setting: a miniature vehicle crossing a desk or a cup drifting through clouds. Keep the main action readable on a small screen and choose the destination aspect ratio before generating. ### A product photograph that moves Start a Wan 3.0 product concept with a photograph, then describe a gentle camera move or a change in lighting. The result gives you a motion treatment to review; check the packaging, silhouette and lettering before including it in a finished campaign. ### A storyboard you can watch Explore the timing of a scene with Wan 3.0 before deciding how it belongs in a longer edit. A character entering, stopping and looking off-screen gives you a specific sequence to judge, with a beginning and ending that the next shot can build on. ## From a brief to a request 1. Choose your starting material: Open Wan 3.0 in the Playground and choose text, keyframes or references. Use the mode that matches the material you have: a written idea, fixed visual endpoints or a collection of examples. 2. Describe the visible action: Tell Wan 3.0 what changes during the shot and where the camera stays or moves. For the first attempt, give one action enough time to finish rather than combining unrelated scenes in a short clip. 3. Set the size and check the estimate: Choose the Wan 3.0 resolution and duration, then read the current estimate beside your request. Reference video contributes to both the billable duration and the shared input/output allowance, so include it when planning the shot. 4. Keep the result with its settings: Review the completed Wan 3.0 clip for motion, continuity and sound. Save its task ID with the prompt so your application can retrieve that generation again without submitting another paid request. ## Compare the Wan family Wan 3.0 offers 480p through 1080p output. Prime shares those resolution choices under a separate model identity and rate table; Pro and Prime Pro add the larger 2K and 4K tiers. Compare the output size your project needs and the current price before choosing a variant. ## Sample attribution Generated with Wan 3.0 · 5 seconds · 480p · Silent. A miniature campervan follows a ribbon road. Play the sample to explore the visual style. Changes to your settings update the request preview; they do not regenerate this clip. [Sample video](https://funnyai.io/media/funny-ai/2026-10-18/wan-3-0/video.mp4) ## Questions and answers ### Can Wan 3.0 start with just a prompt? Yes. Wan 3.0 can generate from text alone; describe the subject, its movement and the camera position. Choose the Wan 3.0 duration and size around the action, then review the estimate before generating your first scene. Keep a copy of the prompt alongside the result so you can compare the direction of later attempts. ### Which image input should I use with Wan 3.0? Use Wan 3.0 keyframes for opening or ending compositions, and reference images for subjects or appearance within a broader brief. These are separate Wan 3.0 input modes, so decide the images’ role before preparing files for the request. ### What resolution does Wan 3.0 support? Wan 3.0 offers 480p, 720p and 1080p; Pro variants provide the larger 2K and 4K tiers. A smaller Wan 3.0 test can help you refine the brief before requesting the size you intend to use in the final edit. ### How does reference footage affect Wan 3.0 pricing? Wan 3.0 bills reference-video seconds together with output seconds at the selected resolution’s current rate. Five seconds of input video plus five seconds of Wan 3.0 output counts as ten billable seconds; images and text add no video seconds. ### Can I request silent Wan 3.0 output? Yes. Wan 3.0 enables generated sound by default, and you can turn it off for a clip that will receive its soundtrack later. The Wan 3.0 audio toggle is a creative choice: silent output uses the same per-second rate. ### How do I use Wan 3.0 from my application? Follow the Wan 3.0 integration guide to choose the endpoint and prepare a server-side API key. Submit once and save the accepted task ID. Your app can retrieve that Wan 3.0 task for the completed video; API and Playground generation use the same account balance. ### Is the displayed clip a Wan 3.0 result? Yes. The miniature campervan clip was generated with Wan 3.0 at 480p for five seconds with audio disabled. Its caption identifies those settings. Changing the Playground controls prepares a new request; it does not change the existing sample video. Review the caption whenever you compare the illustration with a new take made using different settings for your own finished edit. [Model guide](https://funnyai.io/blog/wan-3-api-guide) [Integration guide](https://funnyai.io/docs/integration) # Wan 3.0 Prime Source: https://funnyai.io/models/wan-3-0-prime Use Wan 3.0 Prime to create video from a prompt, keyframe images or a set of media references. Generate up to 30 seconds at resolutions through 1080p, with optional sound. Explore a product treatment or character scene in the Playground before integrating the model. ## Specifications - Documented model ID: `wan3.0-video-prime`. Documented reference identifier. See the integration guide for Funny AI model IDs. - Video duration: 2–30 seconds; Auto is also supported. - Output resolution: 480p, 720p, 1080p. - Aspect ratio: adaptive, 16:9, 4:3, 1:1, 3:4, 9:16. - Generated audio: On by default. - Starting material: Text, images, references. - Wan 3.0 Prime offers 480p, 720p and 1080p. Choose the output size for the placement; a higher-resolution requirement needs a different variant. - Reference video and output in Wan 3.0 Prime must fit within 30 seconds combined. Video references total at most 15 seconds, and audio references have a separate 15-second total. - Wan 3.0 Prime accepts up to 10 reference images, 5 videos and 5 audio clips. Keep these separate from keyframes, and choose either a document or a public link. - The video beside the Wan 3.0 Prime Playground was generated with standard Wan 3.0 at 480p. Its label identifies the source; it is a creative illustration rather than a Prime performance sample. Use public HTTP(S) URLs for images, videos and audio. Reference video and audio are each limited to 15 seconds total. Video input plus output cannot exceed 30 seconds. Use a document up to 100 MB or a web link, not both. The 50-page limit applies to PDF/DOC/DOCX/PPT/PPTX/KEY/PAGES files. ## Native request preparation This example shows the selected Wan model’s fields. The integration guide supplies the endpoint and authentication; Seedance uses its own request format. Input parameters for the selected model. See the integration guide for its endpoint and authentication. | Native field | Type | Default | Constraint | | --- | --- | --- | --- | | `prompt` | string or null | `null` | At least a prompt or one media input is required. The preview caps prompts at 20,000 characters; longer native prompts may be truncated. | | `first_frame` | string or null | `null` | One image URL, data URI or Base64. | | `last_frame` | string or null | `null` | One image URL, data URI or Base64. | | `reference_images` | string array or null | `null` | Up to 10 image values; URL, data URI and Base64 may be mixed. | | `reference_videos` | URL array or null | `null` | Up to 5 public HTTP(S) URLs; each clip 1–15 seconds, at most 15 seconds total. | | `reference_audios` | URL array or null | `null` | Up to 5 public HTTP(S) URLs; each clip 1–15 seconds, at most 15 seconds total. | | `file` | URL string or null | `null` | One document; cannot coexist with link. | | `link` | URL string or null | `null` | One public webpage that requires no authentication; cannot coexist with file. | | `resolution` | string | `1080p` | 480p, 720p, 1080p. Native values are case-insensitive; the preview exports lowercase. | | `ratio` | string | `adaptive` | adaptive, 16:9, 4:3, 1:1, 3:4, 9:16 | | `duration` | integer | `5` | 2–30 inclusive, or -1 for automatic model-selected duration. | | `audio` | boolean | `true` | Whether the output includes generated audio. False does not lower the rate. | | `seed` | integer or null | `null` | 0–2147483647 inclusive. Null or omission selects a seed automatically; zero is valid. | | `prompt_extend` | boolean | `true` | Whether the prompt is expanded. | The native body is a flat object with these 14 fields and no additional properties. Model selection is separate; there is no model, input, content or parameters wrapper. The preview omits unprovided optional fields instead of sending null. Prompt-only input selects text-to-video. First and/or last frame selects keyframe mode; keyframes cannot coexist with reference images, videos, audio, file or link. Reference inputs select reference mode. The document file and webpage link are mutually exclusive. ### Documented media constraints - Images: JPEG/JPG, PNG without alpha, BMP or WEBP; maximum 20 MB; each side 240–8000 px; aspect ratio at most 8:1. - Videos: MP4 or MOV; maximum 100 MB; each side 240–4096 px; aspect ratio at most 8:1. Each reference clip is 1–15 seconds; total reference video duration is at most 15 seconds. - Audio: WAV or MP3; maximum 15 MB. Each clip is 1–15 seconds; total reference audio duration is at most 15 seconds. Public HTTP(S) URLs only; Base64 is not supported. - Documents: DOCX, DOC, XLSX, XLS, PPTX, PPT, PDF, TXT, KEY, PAGES, NUMBERS or MD; maximum 100 MB. PDF, DOCX, DOC, PPTX, PPT, KEY and PAGES have a 50-page limit. - Reference input video plus generated output must not exceed 30 seconds. Both successful reference video input seconds and generated output seconds are billable. These are documented model constraints. The request preview does not fetch or decode media, so it cannot verify remote file size, format, dimensions, duration or page count. It validates request values and input combinations without submitting a generation task. ## Create a scene with Wan 3.0 Prime Wan 3.0 Prime is a separate video model with text, image and reference inputs. Bring a photograph when the shot needs a defined opening, or collect examples when appearance and motion need different guidance. The model offers the same output sizes as the standard variant, with its own model selection and live rates. An amber bottle against moving silk is one brief you could explore with Wan 3.0 Prime. Keep the bottle’s outline fixed in your reference and describe how the fabric should pass behind it. This gives you something concrete to review: the subject, its reflections and the movement around it throughout the finished shot. ## What you can create ### Start Wan 3.0 Prime with a picture Use first and last frames to describe a shot’s endpoints. Wan 3.0 Prime also accepts a single first or last frame, so you can begin with the composition you have rather than preparing both images before the first test. ### Give Wan 3.0 Prime clear references In a Wan 3.0 Prime reference brief, an image can describe the subject while a video supplies a motion example. State those roles in the prompt and keep the collection focused on the shot you want to make. ### Plan sound with Wan 3.0 Prime Ask for generated sound alongside the picture, or turn it off when your edit already has a soundtrack. Review the audio with the whole clip so speech, ambience and movement can be judged together. ## Put it to work ### Wan 3.0 Prime product treatments Explore a camera orbit, a passing shadow or moving fabric with Wan 3.0 Prime. Keep the same product photograph across attempts and compare the silhouette and reflections, so each variation answers a specific question about the intended shot. ### Characters in Wan 3.0 Prime Give Wan 3.0 Prime a character reference and one readable action, such as turning toward a window or reaching for a cup. Watch how recognition and gesture hold through the movement before adding the clip to a sequence. ### A second interpretation of a scene Try a familiar brief with Wan 3.0 Prime using the same settings as your standard-model test. Compare the complete takes against the requirements of your edit; the useful result is the one that fits that scene and budget. ## From a brief to a request 1. Select Wan 3.0 Prime: Select Wan 3.0 Prime before preparing the request. Its separate selection keeps the model choice visible when you inspect the price, save the inputs or move the brief into your application. 2. Choose the scene’s anchor: Give Wan 3.0 Prime a prompt, keyframes or a reference collection. Decide which part of the image must remain recognizable and describe the movement around that subject in plain language. 3. Budget your Wan 3.0 Prime shot: Set the Wan 3.0 Prime duration and resolution around the action you need to judge. Check its live estimate, including reference-video seconds, before submitting the generation. 4. Review the whole treatment: Save the Wan 3.0 Prime task with its prompt and settings. Compare shape, movement and sound across the complete clip, then change the instruction that addresses the specific part you want to improve. ## Compare the Wan family Wan 3.0 Prime and standard Wan share the documented duration range and resolutions through 1080p. They have separate model identities and live rates. Prime Pro is the variant to review for 2K or 4K output; the Prime name alone does not establish a quality ranking. ## Sample attribution Scene illustration generated with standard Wan 3.0 · 5 seconds · 480p · Silent. This is not Prime output. Play the sample to explore the visual style. Changes to your settings update the request preview; they do not regenerate this clip. [Sample video](https://funnyai.io/media/funny-ai/2026-10-18/wan-3-0-prime/video.mp4) ## Questions and answers ### What is Wan 3.0 Prime? Wan 3.0 Prime is a separately selected video model that accepts text, keyframes and media references. It shares the standard model’s documented duration and resolution choices. Use its own endpoint and current rate table when preparing an integration or estimating a shot. ### Does Wan 3.0 Prime support 4K? No. Wan 3.0 Prime stops at 1080p, with 480p and 720p also available. Prime Pro has the larger output tiers. Choose by the dimensions your application needs, then check the price for that specific model and resolution. ### Can I reuse a prompt with Wan 3.0 Prime? Yes. Wan 3.0 Prime shares the native request fields with the other Wan variants. Reuse a valid prompt and compatible inputs, then select the Prime endpoint. Holding the scene and settings steady makes the results more useful to compare. ### How many references can Wan 3.0 Prime use? Wan 3.0 Prime accepts up to ten images, five video clips and five audio clips in reference mode. Each media type also has its own limits. Use the linked guide to prepare the files and choose which source describes appearance, motion or sound. ### Does a seed make Wan 3.0 Prime match another variant? A seed can be included in a Wan 3.0 Prime request, but matching it across different variants does not establish identical output. Save it with the other settings for your records and compare the finished clips against the same creative brief. ### Can Wan 3.0 Prime generate audio? Yes. Wan 3.0 Prime enables generated audio by default and lets you disable it. Include the sounds you want in the brief, then review them alongside the movement. Turning sound off does not reduce the documented per-second rate. ### Did Wan 3.0 Prime generate the bottle sample? No. The bottle and silk illustration was made with standard Wan 3.0 at 480p for five seconds. To evaluate Wan 3.0 Prime, prepare your own request in its Playground and review the current estimate before generating a separate result. [Model guide](https://funnyai.io/blog/wan-3-api-guide) [Integration guide](https://funnyai.io/docs/integration) # Wan 3.0 Pro Source: https://funnyai.io/models/wan-3-0-pro Generate video at 1080p, 2K or 4K with Wan 3.0 Pro. Describe a scene in text, start from keyframe images or guide it with media references. Plan a clip up to 30 seconds and check its resolution-specific price before sending the request. ## Specifications - Documented model ID: `w3.0-video-pro`. Documented reference identifier. See the integration guide for Funny AI model IDs. - Video duration: 2–30 seconds; Auto is also supported. - Output resolution: 1080p, 2K, 4K. - Aspect ratio: adaptive, 16:9, 4:3, 1:1, 3:4, 9:16. - Generated audio: On by default. - Starting material: Text, images, references. - Wan 3.0 Pro does not offer 480p or 720p. A smaller preview generated by the standard model can help explore a brief, but it is a different model’s result. - Wan 3.0 Pro supports 2–30 seconds or automatic duration. Reference video plus generated output must fit within thirty seconds combined. - Reference mode on Wan 3.0 Pro allows 10 images, 5 videos and 5 audio clips. Video and audio references each have a separate fifteen-second total; keyframe inputs cannot be mixed with the collection. - The Wan 3.0 Pro page uses a labeled standard Wan 3.0 illustration at 480p. The preview does not demonstrate a Pro generation or its 2K and 4K output sizes. Use public HTTP(S) URLs for images, videos and audio. Reference video and audio are each limited to 15 seconds total. Video input plus output cannot exceed 30 seconds. Use a document up to 100 MB or a web link, not both. The 50-page limit applies to PDF/DOC/DOCX/PPT/PPTX/KEY/PAGES files. ## Native request preparation This example shows the selected Wan model’s fields. The integration guide supplies the endpoint and authentication; Seedance uses its own request format. Input parameters for the selected model. See the integration guide for its endpoint and authentication. | Native field | Type | Default | Constraint | | --- | --- | --- | --- | | `prompt` | string or null | `null` | At least a prompt or one media input is required. The preview caps prompts at 20,000 characters; longer native prompts may be truncated. | | `first_frame` | string or null | `null` | One image URL, data URI or Base64. | | `last_frame` | string or null | `null` | One image URL, data URI or Base64. | | `reference_images` | string array or null | `null` | Up to 10 image values; URL, data URI and Base64 may be mixed. | | `reference_videos` | URL array or null | `null` | Up to 5 public HTTP(S) URLs; each clip 1–15 seconds, at most 15 seconds total. | | `reference_audios` | URL array or null | `null` | Up to 5 public HTTP(S) URLs; each clip 1–15 seconds, at most 15 seconds total. | | `file` | URL string or null | `null` | One document; cannot coexist with link. | | `link` | URL string or null | `null` | One public webpage that requires no authentication; cannot coexist with file. | | `resolution` | string | `1080p` | 1080p, 2k, 4k. Native values are case-insensitive; the preview exports lowercase. | | `ratio` | string | `adaptive` | adaptive, 16:9, 4:3, 1:1, 3:4, 9:16 | | `duration` | integer | `5` | 2–30 inclusive, or -1 for automatic model-selected duration. | | `audio` | boolean | `true` | Whether the output includes generated audio. False does not lower the rate. | | `seed` | integer or null | `null` | 0–2147483647 inclusive. Null or omission selects a seed automatically; zero is valid. | | `prompt_extend` | boolean | `true` | Whether the prompt is expanded. | The native body is a flat object with these 14 fields and no additional properties. Model selection is separate; there is no model, input, content or parameters wrapper. The preview omits unprovided optional fields instead of sending null. Prompt-only input selects text-to-video. First and/or last frame selects keyframe mode; keyframes cannot coexist with reference images, videos, audio, file or link. Reference inputs select reference mode. The document file and webpage link are mutually exclusive. ### Documented media constraints - Images: JPEG/JPG, PNG without alpha, BMP or WEBP; maximum 20 MB; each side 240–8000 px; aspect ratio at most 8:1. - Videos: MP4 or MOV; maximum 100 MB; each side 240–4096 px; aspect ratio at most 8:1. Each reference clip is 1–15 seconds; total reference video duration is at most 15 seconds. - Audio: WAV or MP3; maximum 15 MB. Each clip is 1–15 seconds; total reference audio duration is at most 15 seconds. Public HTTP(S) URLs only; Base64 is not supported. - Documents: DOCX, DOC, XLSX, XLS, PPTX, PPT, PDF, TXT, KEY, PAGES, NUMBERS or MD; maximum 100 MB. PDF, DOCX, DOC, PPTX, PPT, KEY and PAGES have a 50-page limit. - Reference input video plus generated output must not exceed 30 seconds. Both successful reference video input seconds and generated output seconds are billable. These are documented model constraints. The request preview does not fetch or decode media, so it cannot verify remote file size, format, dimensions, duration or page count. It validates request values and input combinations without submitting a generation task. ## Make room for the shot with Wan 3.0 Pro Wan 3.0 Pro is a video model for larger delivery formats. Choose the file size your project needs, then use text, keyframes or references to direct the scene. For a city shot with Wan 3.0 Pro, decide where the tram travels and how the camera observes it. Check building edges, reflections and passing objects throughout the take, at the delivered dimensions as well as in your app’s smaller preview. ## What you can create ### Choose the Wan 3.0 Pro output size Set Wan 3.0 Pro to 1080p, 2K or 4K for the generated file. This gives you an explicit delivery-size choice when preparing footage for a larger display, an edited sequence or a composition you plan to crop. ### Direct Wan 3.0 Pro with your assets Wan 3.0 Pro can start with a text brief, a first or last frame, or a reference collection. Choose fixed endpoints when composition matters, and references when the subject and movement come from separate examples. ### Create Wan 3.0 Pro video with sound Include generated sound when it belongs in the scene, or request silent output for a later edit. Listen to the complete take while checking the picture; both should fit the timing of the sequence you intend to build. ## Put it to work ### Wan 3.0 Pro establishing views Explore a landscape, building or street with Wan 3.0 Pro. Specify the camera movement and the visual anchor, then check how perspective and moving objects behave throughout the take before using it to introduce a location. ### Plan a crop with Wan 3.0 Pro Use Wan 3.0 Pro when your layout calls for a larger source file. Leave room around the subject for the crop you intend to make and review that exact region in motion, rather than judging only the original wide frame. ### Wan 3.0 Pro product studies Prepare a Wan 3.0 Pro shot around the product image and the final placement. A short reveal or camera move gives you a focused way to examine the shape, reflections and label before committing to a longer treatment. ## From a brief to a request 1. Choose your Wan 3.0 Pro format: Choose the Wan 3.0 Pro output tier required by the display or edit. Decide whether you need the full frame or a later crop, so you can compose the scene around the area that will actually be seen. 2. Describe a Wan 3.0 Pro shot: Give Wan 3.0 Pro a clear subject and camera direction. Choose text, keyframes or references according to the assets you have, keeping the action focused enough to review in one short generation. 3. Check Wan 3.0 Pro pricing: Check the current Wan 3.0 Pro rate for your selected resolution. Reference-video seconds add to the generated duration when calculating cost, so review the estimate after all inputs and settings are selected. 4. Inspect the downloaded result: Retrieve the completed Wan 3.0 Pro task and check the file at its delivered dimensions. Review fine shapes and moving details through the clip before deciding whether another request is needed. ## Compare the Wan family Wan 3.0 Pro begins at 1080p and adds 2K and 4K. Standard Wan and Prime instead offer the smaller 480p and 720p tiers alongside 1080p. Prime Pro shares the larger resolution range but has a separate model identity and price table. ## Sample attribution Scene illustration generated with standard Wan 3.0 · 5 seconds · 480p · Silent. It does not demonstrate Pro or 4K output. Play the sample to explore the visual style. Changes to your settings update the request preview; they do not regenerate this clip. [Sample video](https://funnyai.io/media/funny-ai/2026-10-18/wan-3-0-pro/video.mp4) ## Questions and answers ### What does Wan 3.0 Pro add? Wan 3.0 Pro offers a different output range: 1080p, 2K and 4K. That makes it an option when the requested file needs larger dimensions. Select the tier that fits your deliverable and evaluate the finished scene before making a judgment about its quality. ### Can Wan 3.0 Pro make a 480p preview? No. Wan 3.0 Pro starts at 1080p. Standard Wan can generate a 480p interpretation of a brief, which may help you refine the direction, but changing models can also change the result. A standard-model preview is not a reduced Pro output. ### Does Wan 3.0 Pro guarantee accurate 4K details? A 4K setting on Wan 3.0 Pro specifies the output tier. Text, textures and moving geometry still need review in the completed file. Check the portions that matter for your placement, especially when a small area will be enlarged or cropped. ### Can Wan 3.0 Pro use my existing inputs? Wan 3.0 Pro shares the fourteen native request fields with the other Wan variants. Select its endpoint and a supported resolution, then keep the keyframe/reference mode rules in place. The integration guide lists the fields and accepted media requirements. ### How is Wan 3.0 Pro priced? Wan 3.0 Pro uses the live per-second rate for the selected output tier. Reference-video input and generated output are both billable. Check the current table and request estimate on this page; disabling generated audio does not select a lower rate. ### How should I compare Wan 3.0 Pro and Prime Pro? Give Wan 3.0 Pro and Prime Pro the same brief, inputs, duration and output tier. Compare the finished clips against the requirements of your project, then consider each model’s current cost. The model names alone do not establish which result you will prefer. ### Is the tram clip generated by Wan 3.0 Pro? No. The tram scene was generated with standard Wan 3.0 for five seconds at 480p. It provides a brief to explore with Wan 3.0 Pro, and its source is disclosed beside the player. It cannot be used as evidence of Pro or 4K performance. [Model guide](https://funnyai.io/blog/wan-3-api-guide) [Integration guide](https://funnyai.io/docs/integration) # Wan 3.0 Prime Pro Source: https://funnyai.io/models/wan-3-0-prime-pro Turn a scene brief into video with Wan 3.0 Prime Pro. Use text, keyframes or media references to guide a clip up to 30 seconds, with optional generated sound. Choose the output size for your application and review this variant’s current rate before generating. ## Specifications - Documented model ID: `w3.0-video-prime-pro`. Documented reference identifier. See the integration guide for Funny AI model IDs. - Video duration: 2–30 seconds; Auto is also supported. - Output resolution: 1080p, 2K, 4K. - Aspect ratio: adaptive, 16:9, 4:3, 1:1, 3:4, 9:16. - Generated audio: On by default. - Starting material: Text, images, references. - Wan 3.0 Prime Pro starts at 1080p. The standard model’s 480p and 720p settings are not available on this variant. - Wan 3.0 Prime Pro accepts 2–30 seconds or automatic duration. Input reference video and generated output share a maximum of thirty seconds combined. - In Wan 3.0 Prime Pro reference mode, use up to 10 images, 5 videos and 5 audio clips. Video and audio each have a separate fifteen-second total; keep keyframes outside this collection. - The Wan 3.0 Prime Pro page shows a standard Wan 3.0 illustration generated at 480p. It identifies a possible scene and does not demonstrate this variant’s output, resolution or performance. Use public HTTP(S) URLs for images, videos and audio. Reference video and audio are each limited to 15 seconds total. Video input plus output cannot exceed 30 seconds. Use a document up to 100 MB or a web link, not both. The 50-page limit applies to PDF/DOC/DOCX/PPT/PPTX/KEY/PAGES files. ## Native request preparation This example shows the selected Wan model’s fields. The integration guide supplies the endpoint and authentication; Seedance uses its own request format. Input parameters for the selected model. See the integration guide for its endpoint and authentication. | Native field | Type | Default | Constraint | | --- | --- | --- | --- | | `prompt` | string or null | `null` | At least a prompt or one media input is required. The preview caps prompts at 20,000 characters; longer native prompts may be truncated. | | `first_frame` | string or null | `null` | One image URL, data URI or Base64. | | `last_frame` | string or null | `null` | One image URL, data URI or Base64. | | `reference_images` | string array or null | `null` | Up to 10 image values; URL, data URI and Base64 may be mixed. | | `reference_videos` | URL array or null | `null` | Up to 5 public HTTP(S) URLs; each clip 1–15 seconds, at most 15 seconds total. | | `reference_audios` | URL array or null | `null` | Up to 5 public HTTP(S) URLs; each clip 1–15 seconds, at most 15 seconds total. | | `file` | URL string or null | `null` | One document; cannot coexist with link. | | `link` | URL string or null | `null` | One public webpage that requires no authentication; cannot coexist with file. | | `resolution` | string | `1080p` | 1080p, 2k, 4k. Native values are case-insensitive; the preview exports lowercase. | | `ratio` | string | `adaptive` | adaptive, 16:9, 4:3, 1:1, 3:4, 9:16 | | `duration` | integer | `5` | 2–30 inclusive, or -1 for automatic model-selected duration. | | `audio` | boolean | `true` | Whether the output includes generated audio. False does not lower the rate. | | `seed` | integer or null | `null` | 0–2147483647 inclusive. Null or omission selects a seed automatically; zero is valid. | | `prompt_extend` | boolean | `true` | Whether the prompt is expanded. | The native body is a flat object with these 14 fields and no additional properties. Model selection is separate; there is no model, input, content or parameters wrapper. The preview omits unprovided optional fields instead of sending null. Prompt-only input selects text-to-video. First and/or last frame selects keyframe mode; keyframes cannot coexist with reference images, videos, audio, file or link. Reference inputs select reference mode. The document file and webpage link are mutually exclusive. ### Documented media constraints - Images: JPEG/JPG, PNG without alpha, BMP or WEBP; maximum 20 MB; each side 240–8000 px; aspect ratio at most 8:1. - Videos: MP4 or MOV; maximum 100 MB; each side 240–4096 px; aspect ratio at most 8:1. Each reference clip is 1–15 seconds; total reference video duration is at most 15 seconds. - Audio: WAV or MP3; maximum 15 MB. Each clip is 1–15 seconds; total reference audio duration is at most 15 seconds. Public HTTP(S) URLs only; Base64 is not supported. - Documents: DOCX, DOC, XLSX, XLS, PPTX, PPT, PDF, TXT, KEY, PAGES, NUMBERS or MD; maximum 100 MB. PDF, DOCX, DOC, PPTX, PPT, KEY and PAGES have a 50-page limit. - Reference input video plus generated output must not exceed 30 seconds. Both successful reference video input seconds and generated output seconds are billable. These are documented model constraints. The request preview does not fetch or decode media, so it cannot verify remote file size, format, dimensions, duration or page count. It validates request values and input combinations without submitting a generation task. ## Plan your composition with Wan 3.0 Prime Pro Wan 3.0 Prime Pro offers 1080p, 2K and 4K output with its own rates. Bring text, keyframes or media references to direct the scene using the shared Wan inputs. For a Wan 3.0 Prime Pro architectural scene, describe the fixed setting and moving detail: a curtain lifting beside a sunlit terrace, for example. Decide how the camera observes it and what the final edit needs. ## What you can create ### Compose with Wan 3.0 Prime Pro Choose Wan 3.0 Prime Pro when you want to evaluate this variant at one of its larger output tiers. Set the aspect ratio around the intended placement and leave space for any crop or graphics you will add in your edit. ### Set Wan 3.0 Prime Pro keyframes Give Wan 3.0 Prime Pro a first frame, a last frame or both. These inputs are useful when the scene needs a defined starting composition or destination; review how the generated movement connects the visual direction. ### Guide Wan 3.0 Prime Pro with media Use reference mode for separate appearance, motion and sound cues. Keep the role of each file clear in the prompt so a setting reference and a movement reference describe complementary parts of the same shot. ## Put it to work ### Wan 3.0 Prime Pro architectural scenes Explore a terrace, interior or courtyard with Wan 3.0 Prime Pro. Describe a modest camera move or one environmental action, then inspect the straight edges and spatial relationships throughout the take before choosing footage for a presentation. ### Wan 3.0 Prime Pro lifestyle scenes Use Wan 3.0 Prime Pro to explore a composed scene around a product or person. Decide what must stay recognizable as the action develops and use that requirement to review the complete clip at the selected output size. ### Compare Wan 3.0 Prime Pro takes Prepare the same scene for Wan 3.0 Prime Pro and Pro at an identical resolution. Compare movement, framing and sound against the intended edit, keeping the reference material fixed so the model choice is the part you are evaluating. ## From a brief to a request 1. Compose for Wan 3.0 Prime Pro: Write the scene you want Wan 3.0 Prime Pro to create, including the fixed subject and the movement around it. Identify the part of the frame that matters most for the finished placement. 2. Choose Wan 3.0 Prime Pro inputs: Choose text, keyframes or references for Wan 3.0 Prime Pro. Use images as endpoints when the composition is fixed, or as part of the reference collection when they describe subjects and visual direction. 3. Check Wan 3.0 Prime Pro pricing: Choose a Wan 3.0 Prime Pro resolution and a duration suited to the action. Check its live estimate after adding reference footage, since input video also contributes to the billable seconds. 4. Keep a useful comparison record: Save the Wan 3.0 Prime Pro request and accepted task ID with the completed clip. Review at the delivered size and record the specific changes you want before preparing another generation. ## Compare the Wan family Wan 3.0 Prime Pro shares Pro’s 1080p, 2K and 4K output choices under a separate model identity and pricing table. Standard Wan and Prime offer 480p through 1080p instead. Choose the necessary dimensions first, then compare the variants with a brief that reflects your project. ## Sample attribution Scene illustration generated with standard Wan 3.0 · 5 seconds · 480p · Silent. This is not Prime Pro output. Play the sample to explore the visual style. Changes to your settings update the request preview; they do not regenerate this clip. [Sample video](https://funnyai.io/media/funny-ai/2026-10-18/wan-3-0-prime-pro/video.mp4) ## Questions and answers ### What is Wan 3.0 Prime Pro? Wan 3.0 Prime Pro is a distinct video model with its own selection and current prices. It supports text, keyframes and media references, with output up to 4K. It is useful to evaluate when those dimensions fit your intended deliverable. ### Which sizes can Wan 3.0 Prime Pro generate? Wan 3.0 Prime Pro offers 1080p, 2K and 4K. Choose the setting that matches the final placement and inspect the actual file after completion. The size of the browser player is separate from the dimensions of the generated video. ### Does Wan 3.0 Prime Pro guarantee a better result than Pro? No universal quality ranking is established by the Wan 3.0 Prime Pro name or its price. Use matching inputs and output settings when comparing the variants. Judge the full scene, including movement and sound, against the requirements of your own edit. ### Can Wan 3.0 Prime Pro use both frames and references? Wan 3.0 Prime Pro supports either keyframe mode or reference mode in a request. Do not combine first/last frames with the reference collection. Within reference mode, a document and a public webpage link are also mutually exclusive, as described in the integration guide. ### How do I estimate Wan 3.0 Prime Pro cost? Use the current Wan 3.0 Prime Pro rate for your chosen resolution and include both reference-video and output seconds. The on-page table and Playground estimate read the shared backend’s prices. The audio switch does not change the per-second rate. ### How do I retrieve a Wan 3.0 Prime Pro result? Submit the Wan 3.0 Prime Pro request once and save its accepted task ID. Query that same task for status and the completed video. Keeping the ID lets your application return to the result after a status-query interruption without creating another paid generation. ### Did Wan 3.0 Prime Pro generate the terrace clip? No. The terrace illustration is a five-second standard Wan 3.0 generation at 480p. Its caption records the source. To assess Wan 3.0 Prime Pro, prepare a request in the Playground and review its estimate before generating your own clip. [Model guide](https://funnyai.io/blog/wan-3-api-guide) [Integration guide](https://funnyai.io/docs/integration) # English Seedance models # Seedance 2.5 Source: https://funnyai.io/models/seedance-2-5 Create video with sound for up to 30 seconds using Seedance 2.5. Start from a prompt, guide the scene with media references or set the opening and ending images. Try the brief in the Playground, then use Funny AI’s API to bring video generation into your app. Build your request in the Playground. Sign in to check generation availability, your balance and the current estimate. ## What is Seedance 2.5? Seedance 2.5 is a ByteDance video model for creating scenes with synchronized sound from text and media inputs. Its longer duration gives a brief room for an arrival, a pause and a response within one generated clip. You can choose an output size up to 1080p for the version you intend to review or edit. A larger reference collection helps you describe different parts of a Seedance 2.5 scene. Use one source for a character, another for the setting and a clip for the movement you have in mind. Explain those roles in the prompt so the material supports one coherent shot. Seedance 2.5 accepts up to 30 reference images, 10 videos and 10 audio clips. Video references total at most 30 seconds; audio has its own thirty-second total. - Single generation: up to 30 seconds - Output options: 480p, 720p, 1080p; model version and input-mode restrictions apply. - References: 30 images, 10 video clips, 10 audio clips. ## Scene study: a traveler on a bridge Scene illustration generated with Wan 3.0 · 5 seconds · 480p · silent. This is not Seedance 2.5 output. Prompt: An adult traveler in a red raincoat walks slowly across a small stone bridge in a misty green valley, carrying a closed yellow umbrella. The traveler pauses at the midpoint and looks toward a warm light in a distant cottage. Gentle cinematic storybook atmosphere, wide static camera, soft morning fog. One continuous five-second shot, one person only, no text, no logos, no watermark. Use this bridge scene as a brief to adapt for Seedance 2.5: a traveler walks, pauses and looks toward a cottage. The illustration was generated with Wan 3.0, so it does not demonstrate the longer duration or soundtrack available on the model described here. [Sample video](https://funnyai.io/media/funny-ai/2026-10-18/seedance-2-5/video.mp4) ## Budget a Seedance 2.5 shot Seedance 2.5 pricing follows video-token usage. The table translates current rates into per-second estimates for 16:9 output at 24 fps, helping you budget a short test before preparing a longer take. Reference footage adds billable input to a Seedance 2.5 request, with a minimum usage threshold. Draft uses the normal 480p rate, and a final render is another paid task. Turning generated audio off does not lower the token rate. Estimates use 16:9 output at 24 fps. Other aspect ratios and actual output dimensions can change the cost. Without reference video, only output seconds count. With reference video, input and output seconds count; billable input time is at least two-thirds of the output duration, rounded up to a whole second. - 480p: approximately $0.0925 / billable second without reference video; $0.0553 with reference video. Official comparison: $0.1028 and $0.0615, respectively. Underlying rates: $9.63 / 1M video tokens without reference video; $5.76 with reference video. - 720p: approximately $0.2080 / billable second without reference video; $0.1244 with reference video. Official comparison: $0.2311 and $0.1382, respectively. Underlying rates: $9.63 / 1M video tokens without reference video; $5.76 with reference video. - 1080p: approximately $0.5118 / billable second without reference video; $0.3062 with reference video. Official comparison: $0.5686 and $0.3402, respectively. Underlying rates: $10.53 / 1M video tokens without reference video; $6.3 with reference video. ## Two ways to prepare the take ### Try the scene in your browser Arrange Seedance 2.5 inputs in the Playground and inspect the prepared request. Review the estimate after choosing references and output settings, then submit when the brief is ready. ### Build with Seedance 2.5 Use the Seedance 2.5 integration guide to prepare a request with your server-side key. Keep the returned task ID so your app can retrieve the same generation after completion. ## Direct the action and its surroundings ### Give Seedance 2.5 time to unfold Give Seedance 2.5 an ordered brief that fits within four to thirty seconds. Describe where the action begins and how it ends, leaving time for the important movement to read. ### A reference for each part of the brief Use the larger Seedance 2.5 reference allowance to separate appearance, setting and movement. Select files that contribute a specific cue instead of adding unrelated examples to fill the available slots. ### An opening and a destination Give Seedance 2.5 a first frame and, optionally, a last frame when those compositions matter. Frame mode uses adaptive aspect ratio and stays separate from the mixed reference collection. ### Review a draft before a final task Seedance 2.5 offers a 480p Draft workflow with a separate 1080p final-generation step. You can inspect the draft before deciding whether to pay for the final task; output choices include MP4 and MOV. ## Briefs that benefit from more time ### A character arriving somewhere Use Seedance 2.5 for a short narrative: a traveler crosses a bridge, pauses and notices a light. Write those beats in order, then review whether the finished clip gives each moment enough space. ### A gradual product reveal Describe a camera passing around an object with Seedance 2.5, including the moment a detail comes into view. Reference images can explain the product’s appearance while your prompt directs the reveal. ### A scene led by sound Bring an audio reference to Seedance 2.5 even when you have no image or video reference. Add a visual brief that belongs with the sound, then review the completed picture and audio together. ## Prepare your first longer take ### Write the sequence Give Seedance 2.5 a subject, setting and ordered action. Make the ending clear enough to judge when the completed video reaches it. ### Choose your visual guidance Select frames or references for Seedance 2.5. Use fixed endpoints for composition, or a media collection when different sources guide appearance, movement and sound. ### Set the output and budget Choose the Seedance 2.5 duration and resolution, then check the current estimate. Keep the first test focused on the part of the brief you most need to evaluate. ### Review and keep the task Watch the complete Seedance 2.5 take for subject continuity and timing. Save the task ID with the settings before revising the scene or preparing a final generation. ## Build with Seedance 2.5 The Seedance 2.5 API guide covers frame inputs, references and the Draft workflow. Submit once and keep the accepted task ID; your app can resume checking that task after a status-query interruption without creating another paid generation. Seedance 2.5 supports text, first and last frames, and image, video and audio references, with output at 480p, 720p, 1080p. Generate up to 30 seconds per request. [Model details and Playground](/models/seedance-2-5). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key with the **Seedance** model family in [API key settings](/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. `GET /v1/models` lists the models available to your key. Seedance models use `POST /v1/videos`; select the model in the JSON body. | Setting | Seedance 2.5 | | --- | --- | | Model ID | `bytedance/seedance-2.5` | | `resolution` | `480p`, `720p`, `1080p`; default: `720p`. | | `duration` | 4–30 output seconds, or `-1` for automatic; default: `-1`. | | `aspectRatio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`; default: `adaptive`. | | `generateAudio` | `true` by default. `false` does not reduce the token rate. | | Output | One video per request, at 24 fps. | The [request fields](#request-fields) describe all 14 top-level fields. Use the field names shown here, including `aspectRatio` and `generateAudio`. ## Submit a Seedance 2.5 task This is a four-second text-to-video request at 720p. Set `WAN_API_KEY` to your Seedance key on the server. Submit once and save the returned `id`. ```bash curl https://api.wanapi.app/v1/videos \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "bytedance/seedance-2.5", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "720p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true }' ``` ## Query a Seedance 2.5 task Save the returned `id` as `TASK_ID`, then query with the same key. Submission returns a task receipt; the video is available after completion. Begin polling every five seconds; see [task statuses and downloads](#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/v1/videos/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Seedance 2.5 pricing Rates are in USD per one million video tokens. Input and output video tokens determine the final cost. Resolution, duration and reference video inputs affect usage; use the matching rate for requests with or without reference video. Audio has no separate price tier. [View Seedance 2.5 pricing and estimates](/models/seedance-2-5#pricing). Review the estimate in the [Playground](/models/seedance-2-5#playground) before submitting. ## Request fields Send a JSON object. For a new scene, `model` and a non-empty prompt or at least one media input are required; other fields are optional. For a final render, send only `model`, `draftTaskId` and `resolution: "1080p"` (optional `n: 1` and `providerOptions.bytedance.output_format`). Unknown fields are rejected. | Field | Type | Contract | | --- | --- | --- | | `model` | string | Required: `bytedance/seedance-2.5`. | | `draftTaskId` | string | Public ID of your completed Seedance 2.5 draft. For final rendering, send only model, draftTaskId and resolution: `1080p` (optional n: 1 and providerOptions.bytedance.output_format). | | `prompt` | string | Text instructions; up to 20,000 characters on this service. A new scene requires a prompt or media input. Omit this field when using `draftTaskId`. | | `image` | URL or URL object | First-frame image URL, or an object with `type: "url"`, `url` and optional `mediaType`. Use `image` or `frameImages`, not both. | | `frameImages` | array | One `first_frame` and an optional `last_frame`. Each entry has `frameType` and `image`; see the frame example below. | | `inputReferences` | array | Up to 30 images and 10 videos. Each entry has `type: "url"`, `url` and `mediaType`. The `data`/`mediaType` URL form is also accepted. | | `aspectRatio` | string | `adaptive` (default), `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`. First-frame modes require adaptive. | | `resolution` | string | `480p`, `720p`, `1080p`. Default: `720p`. Also accepts `854x480`, `1280x720`, `1920x1080` as resolution tiers; use `aspectRatio` to select the shape. | | `duration` | integer | 4–30 output seconds, or `-1` for automatic. Default: `-1`. | | `fps` | integer | Fixed at `24`; omit or send `24`. | | `seed` | integer | Optional; `-1` to `2147483647`. No repeatability guarantee. Do not also specify `providerOptions.bytedance.seed`. | | `generateAudio` | boolean | Generate audio. Default: `true`; disabling it does not change the token rate. | | `n` | integer | Fixed at `1`; one video per request. | | `providerOptions` | object | Optional `bytedance` object: `referenceAudio` (up to 10 HTTP(S) URLs), `seed` (same bounds as top-level `seed`), `draft` (boolean; default `false`; `true` requires `480p`), `output_format` (`mp4` or `mov`; default `mp4`). Unknown options are rejected. | ### Input combinations and media limits - Use `image` for a first frame, or `frameImages` for a first frame and optional last frame. A last frame alone and duplicate frame types are rejected. - Frames cannot be combined with `inputReferences` or `providerOptions.bytedance.referenceAudio`. - Reference mode accepts up to 30 images, 10 videos and 10 audio clips, with at most 50 references in total. - Frame inputs require `aspectRatio: "adaptive"`. Reference audio can be used without an image or video. - Media inputs must be public HTTP(S) URLs. Upload bytes and credential-bearing URLs are not accepted. - Images: JPEG, PNG, WebP, BMP, TIFF or GIF, HEIC or HEIF; below 30 MB; each side 300–6000 pixels; aspect ratio 0.4–2.5. - Videos: MP4 or MOV; at most 200 MB per file; each clip 2–30 seconds and at most 30 seconds combined; 300–6000 pixels per side, aspect ratio 0.4–2.5, 24–60 fps. - Audio: MP3 or WAV; at most 15 MB per file; each clip 2–30 seconds and at most 30 seconds combined. - Remote media size, encoding and duration are checked during processing; URL validation alone cannot guarantee that a file is usable. - Use draftTaskId to render a completed draft at 1080p. Arbitrary native task options are not accepted. ## Frame and reference examples Send these bodies to the same `POST /v1/videos` endpoint. Replace every `example.com` URL with your own directly accessible media URL before submitting. Keep input URLs available until the task finishes. ### First and last frames For a single first frame, use `image: "https://example.com/first-frame.jpg"` and omit `frameImages`. To set both endpoints of the clip, use: ```json { "model": "bytedance/seedance-2.5", "prompt": "The camera slowly moves from the opening scene to the closing scene.", "frameImages": [ { "frameType": "first_frame", "image": "https://example.com/first-frame.jpg" }, { "frameType": "last_frame", "image": "https://example.com/last-frame.jpg" } ], "aspectRatio": "adaptive", "resolution": "720p", "duration": 4 } ``` ### Image, video and audio references Put image and video inputs in `inputReferences`, with an explicit MIME type. Put audio URLs in `providerOptions.bytedance.referenceAudio`. Do not add frame inputs to this request. ```json { "model": "bytedance/seedance-2.5", "prompt": "Use the character from the image and the camera movement from the video.", "inputReferences": [ { "type": "url", "url": "https://example.com/character.jpg", "mediaType": "image/jpeg" }, { "type": "url", "url": "https://example.com/motion.mp4", "mediaType": "video/mp4" } ], "providerOptions": { "bytedance": { "referenceAudio": [ "https://example.com/sound.wav" ] } }, "resolution": "720p", "duration": 4 } ``` ### Draft preview Use `providerOptions.bytedance.draft: true` with `resolution: "480p"` to create a draft. Draft uses the normal 480p token rate. After it completes, use its public task ID for a separate 1080p final render. ```json { "model": "bytedance/seedance-2.5", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "480p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true, "providerOptions": { "bytedance": { "draft": true } } } ``` ### Render a draft at 1080p Send this body to `POST /v1/videos`, using the completed draft’s public `task_…` ID. The draft must belong to your account, use the same model and channel, and be less than 7 days old. This native draft lifetime is separate from video storage retention. ```json { "model": "bytedance/seedance-2.5", "draftTaskId": "task_YOUR_COMPLETED_DRAFT", "resolution": "1080p" } ``` Do not resend prompt, media, duration, aspectRatio, seed, generateAudio, fps, draft or referenceAudio. These settings come from the draft. You may set providerOptions.bytedance.output_format for the final output. The API returns a new task ID; poll `GET /v1/videos/{new_task_id}` for the final video and its Bunny URL. The final render is billed separately at the current 1080p rate and the original draft’s reference-video tier, using actual completion tokens. Polling does not regenerate or charge again. If submission is uncertain, do not automatically resubmit. ## MOV output Set `providerOptions.bytedance.output_format` to `mov` for MOV or `mp4` for MP4 (default). This output option works for a new scene or a draft-to-final request. ```json { "model": "bytedance/seedance-2.5", "prompt": "A red ball on a plain table. Static camera.", "resolution": "480p", "duration": 4, "providerOptions": { "bytedance": { "output_format": "mov" } } } ``` After completion, `videos[0].url` is the signed Bunny URL of the original `.mov` file and `videos[0].mediaType` is `video/quicktime`. MOV is not converted to MP4. Browser playback depends on codec support; download the file if your browser cannot play it. Files are uploaded to Bunny; only file references and task metadata are stored in the database. Base64 media inputs are not accepted. ## Poll and download the video An accepted task returns an object like this. Example IDs and timestamps are illustrative: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.5", "status": "queued", "progress": 0, "created_at": 1792022400 } ``` Poll `GET /v1/videos/{task_id}` with your API key. The query returns the same public task ID and model. Use `status` to decide when to stop polling; `progress` is not an estimate of remaining time. | Status | Meaning | Next step | | --- | --- | --- | | `queued` | The task has been accepted. | Continue polling. | | `in_progress` | Generation is running. | Continue polling. | | `completed` | The video is ready. | Read `videos[0].url` and download. | | `failed` | Generation failed. | Stop polling and inspect `error`. | A completed query includes `videos`, an array of objects containing `url` and `mediaType`. Timestamps use Unix seconds; `completed_at` appears when completion is recorded. ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.5", "status": "completed", "progress": 100, "created_at": 1792022400, "completed_at": 1792022460, "videos": [ { "url": "/v1/tasks/task_EXAMPLE/artifacts/video/content", "mediaType": "video/mp4" } ] } ``` When the returned URL is a relative path, resolve it against `https://api.wanapi.app` and authenticate with your API key. For the example above: ```bash curl "https://api.wanapi.app/v1/tasks/$TASK_ID/artifacts/video/content" \ -H "Authorization: Bearer $WAN_API_KEY" \ -o video.mp4 ``` If a signed HTTPS media URL is returned, use it directly without forwarding your API key to that host. Result URLs can expire. Save videos you want to keep to your own storage. Polling and downloading an existing result do not create another generation. A failed task includes an `error` object with `code` and `message`, for example: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.5", "status": "failed", "error": { "code": "generation_failed", "message": "Video generation failed" } } ``` ## Billing and failure handling The final charge follows actual video token usage and the current model rate. The Playground estimate is a maximum estimate, not a fixed quote. Longer clips and larger output resolutions can increase token usage. Failed requests are not charged. - **Invalid parameters:** correct the fields or input combination before submitting again. Check media formats and limits as well as URL syntax. - **Authentication or model access:** use a valid Seedance key enabled for the requested model. - **Insufficient balance:** add funds before a new paid request. A key limit does not add account credit. - **Temporary polling failure:** retry the GET with backoff and a maximum waiting period. A failed query does not mean the generation failed. - **Submission timeout or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. - **Download failure:** retry the existing result before starting a new generation. Keep the task ID and contact [support](/contact) if an uncertain submission needs investigation. [Download the Seedance 2.5 OpenAPI schema](https://funnyai.io/models/seedance-2-5/openapi.json). ## Seedance 2.5 limits to plan around - Seedance 2.5 outputs up to 1080p. Its longer duration and larger reference allowance do not include the 4K tier offered by standard Seedance 2.0. - Keep frame inputs separate from mixed references in Seedance 2.5. A last frame requires a first frame, and reference-video and reference-audio durations have separate thirty-second totals. - The Seedance 2.5 final-generation step requires an eligible completed draft belonging to your account and outputs 1080p. It is a separate paid task, not a free resolution change. ## Seedance 2.5 questions ### Can Seedance 2.5 generate thirty seconds? Yes. Seedance 2.5 accepts four to thirty seconds or automatic duration. Give the action time to unfold and review the complete result; extra time does not guarantee that every requested event will appear correctly. ### Does Seedance 2.5 have a 4K setting? No. Seedance 2.5 offers 480p, 720p and 1080p. Standard 2.0 has a 4K option; choose around the size and length your edit needs. ### Can Seedance 2.5 start from audio alone? Yes. Seedance 2.5 accepts reference audio without an accompanying reference image or video. You can provide up to ten audio clips with a combined duration of thirty seconds or less, and add a prompt to describe the visual scene you want. ### Is Seedance 2.5 Draft cheaper than normal 480p? Seedance 2.5 Draft uses the same 480p token rate as normal generation. Its value is the separate review step: you can inspect the draft before requesting a paid 1080p final task. Review each estimate separately when planning the total cost. ### Can Seedance 2.5 combine frames and reference clips? Choose one mode for a Seedance 2.5 request. First/last frames define endpoints, while the mixed reference collection supplies other media guidance. Frame generation uses adaptive aspect ratio; use the API guide to prepare the matching request fields. ### Is the bridge video a Seedance 2.5 result? No. The five-second, 480p illustration was generated with standard Wan 3.0. It gives you a scene idea to adapt for Seedance 2.5, with the source identified beside the player. It does not demonstrate this model’s duration, sound or performance. [Seedance 2.5 vs 2.0: time, references and resolution](https://funnyai.io/blog/seedance-2-5-vs-2-0) [Official model page](https://seed.bytedance.com/en/seedance2_5) [Release announcement](https://seed.bytedance.com/en/blog/one-take-creation-flexible-referencing-introducing-seedance-2-5) # Seedance 2.0 Source: https://funnyai.io/models/seedance-2-0 Generate short video with Seedance 2.0 at resolutions up to 4K. Begin with a text brief, an opening image or media references, and include sound when the scene calls for it. Test the inputs in Funny AI’s Playground before adding the model to your application. Choose a short-video request below. Sign in to view your balance and confirm the current generation estimate. ## What can Seedance 2.0 create? Seedance 2.0 is a ByteDance model for short video with synchronized sound, guided by text or media. Its output range extends from smaller previews to 4K, letting you evaluate a brief and prepare a larger delivery with the same model. Choose four to fifteen seconds or automatic duration. Choose how to describe the Seedance 2.0 scene around the material you already have. A sentence can introduce a new location; a first frame can establish a product composition; references can separate the subject from the movement you want. The input choice helps make your creative intent concrete before you submit. Seedance 2.0 accepts up to 9 reference images, 3 video clips and 3 audio clips. Video and audio each have a separate fifteen-second combined-duration limit. - Single generation: up to 15 seconds - Output options: 480p, 720p, 1080p, 4K; model version and input-mode restrictions apply. - References: 9 images, 3 video clips, 3 audio clips. ## Scene study: a small café moment Scene illustration generated with Wan 3.0 · 5 seconds · 480p · silent. This is not Seedance 2.0 or 4K output. Prompt: A small red panda sits at an outdoor cafe table and gently nudges an empty white ceramic cup with one paw, then tilts its head toward a curl of rising steam from a nearby teapot. Warm dappled garden light, natural fur, medium close shot, static camera, a quiet playful moment. One continuous five-second shot. No clothing, no text, no logos, no watermark. The café illustration offers a brief to try: a red panda reaches toward a cup while steam rises nearby. Check the paw’s contact and the cup’s shape through the movement. The displayed clip is standard Wan 3.0 footage, not a resolution test of this model. [Sample video](https://funnyai.io/media/funny-ai/2026-10-18/seedance-2-0/video.mp4) ## Estimate the chosen output size Seedance 2.0 bills video tokens. The table converts live rates to per-second estimates for 16:9 video at 24 fps, so you can compare the output tiers for the shot you are preparing. A larger Seedance 2.0 output can use more tokens even when its token rate is lower. Reference video adds input usage and a minimum usage threshold; generated audio has no separate rate tier. Estimates use 16:9 output at 24 fps. Other aspect ratios and actual output dimensions can change the cost. Without reference video, only output seconds count. With reference video, input and output seconds count; billable input time is at least two-thirds of the output duration, rounded up to a whole second. - 480p: approximately $0.0633 / billable second without reference video; $0.0389 with reference video. Official comparison: $0.0703 and $0.0432, respectively. Underlying rates: $6.3 / 1M video tokens without reference video; $3.87 with reference video. - 720p: approximately $0.1361 / billable second without reference video; $0.0836 with reference video. Official comparison: $0.1512 and $0.0929, respectively. Underlying rates: $6.3 / 1M video tokens without reference video; $3.87 with reference video. - 1080p: approximately $0.3368 / billable second without reference video; $0.2056 with reference video. Official comparison: $0.3742 and $0.2284, respectively. Underlying rates: $6.93 / 1M video tokens without reference video; $4.23 with reference video. - 4K: approximately $0.6998 / billable second without reference video; $0.4199 with reference video. Official comparison: $0.7776 and $0.4666, respectively. Underlying rates: $3.6 / 1M video tokens without reference video; $2.16 with reference video. ## From first brief to repeatable request ### Explore in the Playground Prepare Seedance 2.0 inputs in the browser and inspect the live estimate. The settings stay visible beside the request preview before you submit a generation. ### Use standard Seedance 2.0 in code Choose the Seedance 2.0 identifier in your integration. Fast and Mini are separate model choices with their own rates and a smaller output range. ## Choose the inputs for your scene ### Choose your Seedance 2.0 output size Seedance 2.0 offers output up to 4K, with smaller tiers for a different placement or test. Choose the dimensions you need, then review the actual file for detail and movement. ### Define the opening and ending Give Seedance 2.0 a first frame and optionally a last frame when composition matters. Keep this mode separate from the mixed references used to describe subjects, motion or sound. ### Bring examples of the scene Use Seedance 2.0 references to explain appearance and movement with separate files. An audio reference needs an image or video reference alongside it, so prepare a visual anchor for a sound-led brief. ### Include a soundtrack Ask Seedance 2.0 to generate sound with the picture, or disable it for footage that will be scored in an edit. Review the timing of both before choosing the final take. ## Short shots for a larger edit ### A cutaway between two scenes Create a Seedance 2.0 shot with one clear action that belongs between existing footage. Plan the opening composition and leave an ending that gives your next cut somewhere to go. ### A product image with movement Use a product photograph to start a Seedance 2.0 reveal. Describe a modest camera movement, then inspect edges, labels and reflections through the complete clip before putting it into a finished layout. ### A character meeting an object Give Seedance 2.0 a brief interaction such as a hand lifting a cup or a character noticing a detail. Check contact and continuity through the movement, including the frames between the opening and ending. ## Set up a short shot ### Decide the shot’s purpose Tell Seedance 2.0 whether the scene introduces a place, reveals a product or follows one action. Keep that purpose clear when choosing inputs. ### Choose the anchor Use text, frames or references with Seedance 2.0. Bring the material that best describes the subject and the part of the composition that matters. ### Match your destination Set the Seedance 2.0 size, aspect ratio and duration for the planned edit. Read the current estimate after adding reference footage. ### Inspect the complete take Review the Seedance 2.0 output at its delivered size and listen to the soundtrack. Save the accepted task ID with your settings for later retrieval. ## Connect Seedance 2.0 to your application Use the Seedance 2.0 integration guide for the model identifier and matching input fields. Submit once, save the accepted task ID and retrieve that task for status and the completed video; a failed status check does not require a new generation. Seedance 2.0 supports text, first and last frames, and image, video and audio references, with output at 480p, 720p, 1080p, 4K. Generate up to 15 seconds per request. [Model details and Playground](/models/seedance-2-0). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key with the **Seedance** model family in [API key settings](/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. `GET /v1/models` lists the models available to your key. Seedance models use `POST /v1/videos`; select the model in the JSON body. | Setting | Seedance 2.0 | | --- | --- | | Model ID | `bytedance/seedance-2.0` | | `resolution` | `480p`, `720p`, `1080p`, `4k`; default: `720p`. | | `duration` | 4–15 output seconds, or `-1` for automatic; default: `5`. | | `aspectRatio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`; default: `adaptive`. | | `generateAudio` | `true` by default. `false` does not reduce the token rate. | | Output | One video per request, at 24 fps. | The [request fields](#request-fields) describe all 13 top-level fields. Use the field names shown here, including `aspectRatio` and `generateAudio`. ## Submit a Seedance 2.0 task This is a four-second text-to-video request at 720p. Set `WAN_API_KEY` to your Seedance key on the server. Submit once and save the returned `id`. ```bash curl https://api.wanapi.app/v1/videos \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "bytedance/seedance-2.0", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "720p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true }' ``` ## Query a Seedance 2.0 task Save the returned `id` as `TASK_ID`, then query with the same key. Submission returns a task receipt; the video is available after completion. Begin polling every five seconds; see [task statuses and downloads](#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/v1/videos/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Seedance 2.0 pricing Rates are in USD per one million video tokens. Input and output video tokens determine the final cost. Resolution, duration and reference video inputs affect usage; use the matching rate for requests with or without reference video. Audio has no separate price tier. [View Seedance 2.0 pricing and estimates](/models/seedance-2-0#pricing). Review the estimate in the [Playground](/models/seedance-2-0#playground) before submitting. ## Request fields Send a JSON object. For a new scene, `model` and a non-empty prompt or at least one media input are required; other fields are optional. Unknown fields are rejected. | Field | Type | Contract | | --- | --- | --- | | `model` | string | Required: `bytedance/seedance-2.0`. | | `prompt` | string | Text instructions; up to 20,000 characters on this service. A new scene requires a prompt or media input. | | `image` | URL or URL object | First-frame image URL, or an object with `type: "url"`, `url` and optional `mediaType`. Use `image` or `frameImages`, not both. | | `frameImages` | array | One `first_frame` and an optional `last_frame`. Each entry has `frameType` and `image`; see the frame example below. | | `inputReferences` | array | Up to 9 images and 3 videos. Each entry has `type: "url"`, `url` and `mediaType`. The `data`/`mediaType` URL form is also accepted. | | `aspectRatio` | string | `adaptive` (default), `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`. | | `resolution` | string | `480p`, `720p`, `1080p`, `4k`. Default: `720p`. Also accepts `854x480`, `1280x720`, `1920x1080`, `3840x2160` as resolution tiers; use `aspectRatio` to select the shape. | | `duration` | integer | 4–15 output seconds, or `-1` for automatic. Default: `5`. | | `fps` | integer | Fixed at `24`; omit or send `24`. | | `seed` | integer | Optional; `-1` to `2147483647`. No repeatability guarantee. Do not also specify `providerOptions.bytedance.seed`. | | `generateAudio` | boolean | Generate audio. Default: `true`; disabling it does not change the token rate. | | `n` | integer | Fixed at `1`; one video per request. | | `providerOptions` | object | Optional `bytedance` object: `referenceAudio` (up to 3 HTTP(S) URLs), `seed` (same bounds as top-level `seed`). `draft: true` is not supported. Unknown options are rejected. | ### Input combinations and media limits - Use `image` for a first frame, or `frameImages` for a first frame and optional last frame. A last frame alone and duplicate frame types are rejected. - Frames cannot be combined with `inputReferences` or `providerOptions.bytedance.referenceAudio`. - Reference mode accepts up to 9 images, 3 videos and 3 audio clips, with at most 15 references in total. - Media inputs must be public HTTP(S) URLs. Upload bytes and credential-bearing URLs are not accepted. - Images: JPEG, PNG, WebP, BMP, TIFF or GIF; below 30 MB; each side 300–6000 pixels; aspect ratio 0.4–2.5. - Videos: MP4 or MOV; at most 50 MB per file; each clip 2–15 seconds and at most 15 seconds combined; 300–6000 pixels per side, aspect ratio 0.4–2.5, 24–60 fps. - Audio: MP3 or WAV; at most 15 MB per file; each clip 2–15 seconds and at most 15 seconds combined. At least one reference image or video is required. - Remote media size, encoding and duration are checked during processing; URL validation alone cannot guarantee that a file is usable. - Draft-to-final rendering and arbitrary native task options are not exposed by this endpoint. ## Frame and reference examples Send these bodies to the same `POST /v1/videos` endpoint. Replace every `example.com` URL with your own directly accessible media URL before submitting. Keep input URLs available until the task finishes. ### First and last frames For a single first frame, use `image: "https://example.com/first-frame.jpg"` and omit `frameImages`. To set both endpoints of the clip, use: ```json { "model": "bytedance/seedance-2.0", "prompt": "The camera slowly moves from the opening scene to the closing scene.", "frameImages": [ { "frameType": "first_frame", "image": "https://example.com/first-frame.jpg" }, { "frameType": "last_frame", "image": "https://example.com/last-frame.jpg" } ], "aspectRatio": "adaptive", "resolution": "720p", "duration": 4 } ``` ### Image, video and audio references Put image and video inputs in `inputReferences`, with an explicit MIME type. Put audio URLs in `providerOptions.bytedance.referenceAudio`. Do not add frame inputs to this request. ```json { "model": "bytedance/seedance-2.0", "prompt": "Use the character from the image and the camera movement from the video.", "inputReferences": [ { "type": "url", "url": "https://example.com/character.jpg", "mediaType": "image/jpeg" }, { "type": "url", "url": "https://example.com/motion.mp4", "mediaType": "video/mp4" } ], "providerOptions": { "bytedance": { "referenceAudio": [ "https://example.com/sound.wav" ] } }, "resolution": "720p", "duration": 4 } ``` ## Poll and download the video An accepted task returns an object like this. Example IDs and timestamps are illustrative: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0", "status": "queued", "progress": 0, "created_at": 1792022400 } ``` Poll `GET /v1/videos/{task_id}` with your API key. The query returns the same public task ID and model. Use `status` to decide when to stop polling; `progress` is not an estimate of remaining time. | Status | Meaning | Next step | | --- | --- | --- | | `queued` | The task has been accepted. | Continue polling. | | `in_progress` | Generation is running. | Continue polling. | | `completed` | The video is ready. | Read `videos[0].url` and download. | | `failed` | Generation failed. | Stop polling and inspect `error`. | A completed query includes `videos`, an array of objects containing `url` and `mediaType`. Timestamps use Unix seconds; `completed_at` appears when completion is recorded. ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0", "status": "completed", "progress": 100, "created_at": 1792022400, "completed_at": 1792022460, "videos": [ { "url": "/v1/tasks/task_EXAMPLE/artifacts/video/content", "mediaType": "video/mp4" } ] } ``` When the returned URL is a relative path, resolve it against `https://api.wanapi.app` and authenticate with your API key. For the example above: ```bash curl "https://api.wanapi.app/v1/tasks/$TASK_ID/artifacts/video/content" \ -H "Authorization: Bearer $WAN_API_KEY" \ -o video.mp4 ``` If a signed HTTPS media URL is returned, use it directly without forwarding your API key to that host. Result URLs can expire. Save videos you want to keep to your own storage. Polling and downloading an existing result do not create another generation. A failed task includes an `error` object with `code` and `message`, for example: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0", "status": "failed", "error": { "code": "generation_failed", "message": "Video generation failed" } } ``` ## Billing and failure handling The final charge follows actual video token usage and the current model rate. The Playground estimate is a maximum estimate, not a fixed quote. Longer clips and larger output resolutions can increase token usage. Failed requests are not charged. - **Invalid parameters:** correct the fields or input combination before submitting again. Check media formats and limits as well as URL syntax. - **Authentication or model access:** use a valid Seedance key enabled for the requested model. - **Insufficient balance:** add funds before a new paid request. A key limit does not add account credit. - **Temporary polling failure:** retry the GET with backoff and a maximum waiting period. A failed query does not mean the generation failed. - **Submission timeout or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. - **Download failure:** retry the existing result before starting a new generation. Keep the task ID and contact [support](/contact) if an uncertain submission needs investigation. [Download the Seedance 2.0 OpenAPI schema](https://funnyai.io/models/seedance-2-0/openapi.json). ## Seedance 2.0 boundaries - Seedance 2.0 supports four to fifteen seconds or automatic duration. A scene requiring more than fifteen seconds in one output needs another model. - Draft mode is unavailable on Seedance 2.0. Frame and reference inputs are separate, and an ending frame must be accompanied by a first frame. - Seedance 2.0 reference audio needs a reference image or video. Video and audio each have a separate fifteen-second total, in addition to their file-count and media-format limits. ## Seedance 2.0 questions ### Which Seedance 2.0 variant supports 4K? Standard Seedance 2.0 supports 4K alongside its smaller tiers. Fast and Mini stop at 720p. Select the standard model when you need a larger file and check the rate for your chosen tier. ### Does Seedance 2.0 guarantee accurate 4K detail? No. The Seedance 2.0 4K option specifies output dimensions. Inspect text, geometry and moving details in the completed file, especially when cropping a small region for the final placement. ### How long can Seedance 2.0 video be? Seedance 2.0 supports four to fifteen seconds or automatic duration, at 24 fps. Give the main action enough time to finish within the chosen length. ### Can Seedance 2.0 use opening and ending images? Yes. Seedance 2.0 accepts a first frame and an optional last frame. This mode establishes visual endpoints; mixed references are a different way to guide the scene. Choose the role of your images before preparing the request rather than combining both modes. ### Does Seedance 2.0 have Draft mode? No. Seedance 2.0 can generate at a smaller resolution, but that does not enable the Draft workflow offered by 2.5. Use the standard model’s own settings and current estimate when preparing a smaller test of your brief. ### How does reference video affect Seedance 2.0 cost? Reference footage contributes billable input tokens to Seedance 2.0 and introduces a minimum usage threshold. A lower reference-video token rate does not necessarily produce a lower total. Review the estimate after selecting all inputs and compare matching settings. ### Is the café illustration generated by Seedance 2.0? No. Standard Wan 3.0 generated the five-second café clip at 480p. It is a scene idea you can adapt for Seedance 2.0, with its source labeled. It does not demonstrate this model’s 4K output. [Seedance 2.5 vs 2.0: choose by the shot](https://funnyai.io/blog/seedance-2-5-vs-2-0) [Official model page](https://seed.bytedance.com/en/seedance2_0) [Release announcement](https://seed.bytedance.com/en/blog/seedance-2-0-official-launch) # Seedance 2.0 Fast Source: https://funnyai.io/models/seedance-2-0-fast Create a short scene with Seedance 2.0 Fast using text, images or media references. Choose 480p or 720p output, with optional generated sound. Prepare the action in the Playground and inspect the current estimate before adding this model to your application. Prepare a Fast request and inspect its estimate. Generation requires sign-in, available service and sufficient balance. ## What is Seedance 2.0 Fast? Seedance 2.0 Fast is a separate ByteDance video model for clips between four and fifteen seconds, with automatic duration also available. It offers 480p and 720p output with optional sound. You can start with text, establish a composition with frames or bring reference material for the subject and movement. A small product rotation is one way to evaluate Seedance 2.0 Fast. Define the starting angle, the amount of the turn and a camera position that stays fixed, then watch whether the object remains recognizable. Record completion time separately from visual quality; the model name is not a measured speed promise on Funny AI. Seedance 2.0 Fast accepts up to 9 reference images, 3 videos and 3 audio clips. Reference video and reference audio each have a separate fifteen-second total. - Single generation: up to 15 seconds - Output options: 480p, 720p; model version and input-mode restrictions apply. - References: 9 images, 3 video clips, 3 audio clips. ## Scene study: a shoe on a turntable Scene illustration generated with Wan 3.0 · 5 seconds · 480p · silent. This is not Seedance 2.0 Fast output. Prompt: A single unbranded yellow running shoe turns slowly on a small circular white display stand. Rounded lavender and peach blocks form a clean studio background. Soft high-key light reveals the fabric and sole as the shoe rotates a quarter turn. Stable side-on product framing, one continuous five-second shot. No lettering, no logo, no watermark. The turntable illustration gives you a focused brief to adapt for Seedance 2.0 Fast: one shoe turns against a stable background. Inspect the outline and laces throughout the rotation. The displayed Wan 3.0 clip does not measure this variant’s output quality or completion time. [Sample video](https://funnyai.io/media/funny-ai/2026-10-18/seedance-2-0-fast/video.mp4) ## Price the movement test Seedance 2.0 Fast has its own live token rates. The table shows per-second estimates for 16:9 output at 24 fps, helping you compare the settings for a short motion test. Reference video adds billable input to Seedance 2.0 Fast and can introduce a minimum usage threshold. Match length, resolution and references when comparing estimates; silent output does not use a separate lower token rate. Estimates use 16:9 output at 24 fps. Other aspect ratios and actual output dimensions can change the cost. Without reference video, only output seconds count. With reference video, input and output seconds count; billable input time is at least two-thirds of the output duration, rounded up to a whole second. - 480p: approximately $0.0506 / billable second without reference video; $0.0298 with reference video. Official comparison: $0.0562 and $0.0331, respectively. Underlying rates: $5.04 / 1M video tokens without reference video; $2.97 with reference video. - 720p: approximately $0.1089 / billable second without reference video; $0.0642 with reference video. Official comparison: $0.1210 and $0.0713, respectively. Underlying rates: $5.04 / 1M video tokens without reference video; $2.97 with reference video. ## Prepare the motion test ### Try the movement in your browser Prepare Seedance 2.0 Fast in the Playground and inspect its input settings. Check current availability and the estimate before submitting the scene you want to test. ### Use Seedance 2.0 Fast in your app Select the Seedance 2.0 Fast identifier in your code and follow its API guide. Save the returned task ID with the request for later status checks and result retrieval. ## Direct a focused movement ### Set the Seedance 2.0 Fast duration Use four to fifteen seconds for a Seedance 2.0 Fast shot, or choose automatic duration. Keep one movement readable from beginning to end before building a brief with more events. ### Set the visual endpoints Supply Seedance 2.0 Fast with a first frame and, optionally, a last frame. Use this mode when the opening and destination matter more than a collection of separate examples. ### Separate the subject from the movement In Seedance 2.0 Fast reference mode, an image can describe the subject while video suggests its motion. Name each source’s role in the prompt to keep the direction clear. ### Include sound in the brief Request generated sound with Seedance 2.0 Fast, or disable it for a later edit. An audio reference requires an accompanying reference image or video; the soundtrack should be reviewed with the picture. ## Short scenes with one clear action ### A product turning toward the viewer Give Seedance 2.0 Fast a modest rotation to explore, with a fixed background and camera. The outline, material and small details provide specific points to check throughout the movement. ### A detail entering the frame Use Seedance 2.0 Fast to explore a short reveal: an object moves into view or the camera passes an edge. Describe which element moves so the direction is easy to judge. ### An insert for a social edit Create a Seedance 2.0 Fast shot that carries one visual idea within a larger sequence. Choose the intended aspect ratio and plan an ending that can connect to the next clip. ## Prepare a matched motion test ### Name the movement Tell Seedance 2.0 Fast what the subject does and where the camera sits. Replace vague energy instructions with a visible action you can assess. ### Choose the right anchor Use frames with Seedance 2.0 Fast for defined endpoints, or references when appearance and motion come from different files. Keep those input modes separate. ### Keep the comparison consistent Match Seedance 2.0 Fast and Mini settings when evaluating the same brief. Hold the length, resolution and source material steady, then compare the complete results. ### Review picture and time separately Save the Seedance 2.0 Fast task and watch the entire clip. Record elapsed time separately so a pleasing image does not become an unsupported claim about speed. ## Integrate Seedance 2.0 Fast The Seedance 2.0 Fast guide documents the selected model, input combinations and task retrieval. Submit once and retain the accepted task ID. If a status request is interrupted, resume checking that task instead of sending a duplicate paid generation. Seedance 2.0 Fast supports text, first and last frames, and image, video and audio references, with output at 480p, 720p. Generate up to 15 seconds per request. [Model details and Playground](/models/seedance-2-0-fast). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key with the **Seedance** model family in [API key settings](/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. `GET /v1/models` lists the models available to your key. Seedance models use `POST /v1/videos`; select the model in the JSON body. | Setting | Seedance 2.0 Fast | | --- | --- | | Model ID | `bytedance/seedance-2.0-fast` | | `resolution` | `480p`, `720p`; default: `720p`. | | `duration` | 4–15 output seconds, or `-1` for automatic; default: `5`. | | `aspectRatio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`; default: `adaptive`. | | `generateAudio` | `true` by default. `false` does not reduce the token rate. | | Output | One video per request, at 24 fps. | The [request fields](#request-fields) describe all 13 top-level fields. Use the field names shown here, including `aspectRatio` and `generateAudio`. ## Submit a Seedance 2.0 Fast task This is a four-second text-to-video request at 720p. Set `WAN_API_KEY` to your Seedance key on the server. Submit once and save the returned `id`. ```bash curl https://api.wanapi.app/v1/videos \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "bytedance/seedance-2.0-fast", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "720p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true }' ``` ## Query a Seedance 2.0 Fast task Save the returned `id` as `TASK_ID`, then query with the same key. Submission returns a task receipt; the video is available after completion. Begin polling every five seconds; see [task statuses and downloads](#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/v1/videos/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Seedance 2.0 Fast pricing Rates are in USD per one million video tokens. Input and output video tokens determine the final cost. Resolution, duration and reference video inputs affect usage; use the matching rate for requests with or without reference video. Audio has no separate price tier. [View Seedance 2.0 Fast pricing and estimates](/models/seedance-2-0-fast#pricing). Review the estimate in the [Playground](/models/seedance-2-0-fast#playground) before submitting. ## Request fields Send a JSON object. For a new scene, `model` and a non-empty prompt or at least one media input are required; other fields are optional. Unknown fields are rejected. | Field | Type | Contract | | --- | --- | --- | | `model` | string | Required: `bytedance/seedance-2.0-fast`. | | `prompt` | string | Text instructions; up to 20,000 characters on this service. A new scene requires a prompt or media input. | | `image` | URL or URL object | First-frame image URL, or an object with `type: "url"`, `url` and optional `mediaType`. Use `image` or `frameImages`, not both. | | `frameImages` | array | One `first_frame` and an optional `last_frame`. Each entry has `frameType` and `image`; see the frame example below. | | `inputReferences` | array | Up to 9 images and 3 videos. Each entry has `type: "url"`, `url` and `mediaType`. The `data`/`mediaType` URL form is also accepted. | | `aspectRatio` | string | `adaptive` (default), `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`. | | `resolution` | string | `480p`, `720p`. Default: `720p`. Also accepts `854x480`, `1280x720` as resolution tiers; use `aspectRatio` to select the shape. | | `duration` | integer | 4–15 output seconds, or `-1` for automatic. Default: `5`. | | `fps` | integer | Fixed at `24`; omit or send `24`. | | `seed` | integer | Optional; `-1` to `2147483647`. No repeatability guarantee. Do not also specify `providerOptions.bytedance.seed`. | | `generateAudio` | boolean | Generate audio. Default: `true`; disabling it does not change the token rate. | | `n` | integer | Fixed at `1`; one video per request. | | `providerOptions` | object | Optional `bytedance` object: `referenceAudio` (up to 3 HTTP(S) URLs), `seed` (same bounds as top-level `seed`). `draft: true` is not supported. Unknown options are rejected. | ### Input combinations and media limits - Use `image` for a first frame, or `frameImages` for a first frame and optional last frame. A last frame alone and duplicate frame types are rejected. - Frames cannot be combined with `inputReferences` or `providerOptions.bytedance.referenceAudio`. - Reference mode accepts up to 9 images, 3 videos and 3 audio clips, with at most 15 references in total. - Media inputs must be public HTTP(S) URLs. Upload bytes and credential-bearing URLs are not accepted. - Images: JPEG, PNG, WebP, BMP, TIFF or GIF; below 30 MB; each side 300–6000 pixels; aspect ratio 0.4–2.5. - Videos: MP4 or MOV; at most 50 MB per file; each clip 2–15 seconds and at most 15 seconds combined; 300–6000 pixels per side, aspect ratio 0.4–2.5, 24–60 fps. - Audio: MP3 or WAV; at most 15 MB per file; each clip 2–15 seconds and at most 15 seconds combined. At least one reference image or video is required. - Remote media size, encoding and duration are checked during processing; URL validation alone cannot guarantee that a file is usable. - Draft-to-final rendering and arbitrary native task options are not exposed by this endpoint. ## Frame and reference examples Send these bodies to the same `POST /v1/videos` endpoint. Replace every `example.com` URL with your own directly accessible media URL before submitting. Keep input URLs available until the task finishes. ### First and last frames For a single first frame, use `image: "https://example.com/first-frame.jpg"` and omit `frameImages`. To set both endpoints of the clip, use: ```json { "model": "bytedance/seedance-2.0-fast", "prompt": "The camera slowly moves from the opening scene to the closing scene.", "frameImages": [ { "frameType": "first_frame", "image": "https://example.com/first-frame.jpg" }, { "frameType": "last_frame", "image": "https://example.com/last-frame.jpg" } ], "aspectRatio": "adaptive", "resolution": "720p", "duration": 4 } ``` ### Image, video and audio references Put image and video inputs in `inputReferences`, with an explicit MIME type. Put audio URLs in `providerOptions.bytedance.referenceAudio`. Do not add frame inputs to this request. ```json { "model": "bytedance/seedance-2.0-fast", "prompt": "Use the character from the image and the camera movement from the video.", "inputReferences": [ { "type": "url", "url": "https://example.com/character.jpg", "mediaType": "image/jpeg" }, { "type": "url", "url": "https://example.com/motion.mp4", "mediaType": "video/mp4" } ], "providerOptions": { "bytedance": { "referenceAudio": [ "https://example.com/sound.wav" ] } }, "resolution": "720p", "duration": 4 } ``` ## Poll and download the video An accepted task returns an object like this. Example IDs and timestamps are illustrative: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-fast", "status": "queued", "progress": 0, "created_at": 1792022400 } ``` Poll `GET /v1/videos/{task_id}` with your API key. The query returns the same public task ID and model. Use `status` to decide when to stop polling; `progress` is not an estimate of remaining time. | Status | Meaning | Next step | | --- | --- | --- | | `queued` | The task has been accepted. | Continue polling. | | `in_progress` | Generation is running. | Continue polling. | | `completed` | The video is ready. | Read `videos[0].url` and download. | | `failed` | Generation failed. | Stop polling and inspect `error`. | A completed query includes `videos`, an array of objects containing `url` and `mediaType`. Timestamps use Unix seconds; `completed_at` appears when completion is recorded. ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-fast", "status": "completed", "progress": 100, "created_at": 1792022400, "completed_at": 1792022460, "videos": [ { "url": "/v1/tasks/task_EXAMPLE/artifacts/video/content", "mediaType": "video/mp4" } ] } ``` When the returned URL is a relative path, resolve it against `https://api.wanapi.app` and authenticate with your API key. For the example above: ```bash curl "https://api.wanapi.app/v1/tasks/$TASK_ID/artifacts/video/content" \ -H "Authorization: Bearer $WAN_API_KEY" \ -o video.mp4 ``` If a signed HTTPS media URL is returned, use it directly without forwarding your API key to that host. Result URLs can expire. Save videos you want to keep to your own storage. Polling and downloading an existing result do not create another generation. A failed task includes an `error` object with `code` and `message`, for example: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-fast", "status": "failed", "error": { "code": "generation_failed", "message": "Video generation failed" } } ``` ## Billing and failure handling The final charge follows actual video token usage and the current model rate. The Playground estimate is a maximum estimate, not a fixed quote. Longer clips and larger output resolutions can increase token usage. Failed requests are not charged. - **Invalid parameters:** correct the fields or input combination before submitting again. Check media formats and limits as well as URL syntax. - **Authentication or model access:** use a valid Seedance key enabled for the requested model. - **Insufficient balance:** add funds before a new paid request. A key limit does not add account credit. - **Temporary polling failure:** retry the GET with backoff and a maximum waiting period. A failed query does not mean the generation failed. - **Submission timeout or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. - **Download failure:** retry the existing result before starting a new generation. Keep the task ID and contact [support](/contact) if an uncertain submission needs investigation. [Download the Seedance 2.0 Fast OpenAPI schema](https://funnyai.io/models/seedance-2-0-fast/openapi.json). ## Seedance 2.0 Fast limits - Seedance 2.0 Fast stops at 720p and does not offer Draft mode. Standard 2.0 has larger output tiers; 2.5 offers a longer single-clip duration. - A last frame requires a first frame in Seedance 2.0 Fast. Frame inputs cannot be combined with the mixed reference collection. - Seedance 2.0 Fast video and audio references each total at most fifteen seconds. This integration does not expose editing, extension or a separate final-frame image output. ## Seedance 2.0 Fast questions ### Is Seedance 2.0 Fast guaranteed to finish sooner? No measured completion-time guarantee is provided for Seedance 2.0 Fast here. Treat Fast as the model name and record the elapsed time of your own request separately. A useful comparison also checks whether the complete clip meets the brief, using the same settings and references for each model. ### Can Seedance 2.0 Fast generate 1080p? No. Seedance 2.0 Fast offers 480p and 720p at 24 fps, with four-to-fifteen-second or automatic duration. Use standard 2.0 when its larger output tiers fit your delivery requirements. The Playground defaults for this variant are a five-second clip at 720p. ### Can reference footage guide Seedance 2.0 Fast? Yes. Seedance 2.0 Fast accepts up to three reference-video clips totaling at most fifteen seconds. You can combine them with supported image and audio references in reference mode. Describe which file supplies the subject and which supplies the motion, keeping first/last-frame inputs outside this collection. ### Does silent Seedance 2.0 Fast output cost less? Seedance 2.0 Fast has no separate lower token rate for silent output. Duration, output size and reference-video usage still determine the estimated total. Turn audio off when the creative brief calls for silence or the edit will supply its own sound, then check the live estimate. ### Did Seedance 2.0 Fast generate the shoe video? No. The shoe illustration was generated with standard Wan 3.0 for five seconds at 480p. It is a scene idea to adapt for Seedance 2.0 Fast, with its actual model identified beside the player. Use a separately generated result when assessing this variant’s motion or completion time. [Seedance 2.0 Fast vs Mini: plan a matched test](https://funnyai.io/blog/seedance-2-0-fast-vs-mini) [Official model page](https://docs.byteplus.com/en/docs/ModelArk/2291680) [Release announcement](https://docs.byteplus.com/en/docs/ModelArk/1159178) # Seedance 2.0 Mini Source: https://funnyai.io/models/seedance-2-0-mini Turn a written idea or image into short video with Seedance 2.0 Mini. Create clips at 480p or 720p, with optional generated sound. Shape a focused scene in the Playground, review its current estimate and use the API to add that workflow to your application. Set up a Mini scene below. Sign in to check your balance, service availability and the estimate for the selected request. ## What is Seedance 2.0 Mini? Seedance 2.0 Mini is a separate ByteDance video model for short scenes from text and media inputs. It supports clips from four to fifteen seconds, or automatic duration, with output at 480p or 720p. Generated sound is optional, so you can prepare a scene with audio or add your soundtrack in a later edit. A quiet environmental detail is one brief to explore with Seedance 2.0 Mini: a curtain moving in window light, or a jellyfish drifting inside a fixed glass aquarium. Decide what should change and what should remain stable. That distinction gives you a useful way to judge the full clip before revising the prompt. Seedance 2.0 Mini accepts up to 9 reference images, 3 video clips and 3 audio clips. An audio reference must be accompanied by a reference image or video. - Single generation: up to 15 seconds - Output options: 480p, 720p; model version and input-mode restrictions apply. - References: 9 images, 3 video clips, 3 audio clips. ## Scene study: a jellyfish at a desk Scene illustration generated with Wan 3.0 · 5 seconds · 480p · silent. This is not Seedance 2.0 Mini output. Prompt: A small translucent lavender jellyfish floats gently inside a round glass aquarium on a wooden desk. Its bell contracts once and delicate tentacles follow through the water. Soft evening window light, an uncluttered cream wall, soothing lilac reflections, medium close shot with a static camera. One continuous five-second shot. No people, no writing, no logos, no watermark. The aquarium illustration suggests a Seedance 2.0 Mini brief with one moving subject in a stable setting. Watch the jellyfish’s movement and the glass outline across the whole take. This standard Wan 3.0 illustration does not establish the Mini variant’s output quality or cost. [Sample video](https://funnyai.io/media/funny-ai/2026-10-18/seedance-2-0-mini/video.mp4) ## Budget around usable clips Seedance 2.0 Mini uses its own live video-token rates. Per-second estimates assume 16:9 output at 24 fps; review the chosen duration and input material when budgeting your scene. Reference video adds input usage and a minimum threshold to Seedance 2.0 Mini. Audio has no separate rate tier, and the model name does not determine the cost of finishing a project. Check the current estimate for your actual request. Estimates use 16:9 output at 24 fps. Other aspect ratios and actual output dimensions can change the cost. Without reference video, only output seconds count. With reference video, input and output seconds count; billable input time is at least two-thirds of the output duration, rounded up to a whole second. - 480p: approximately $0.0316 / billable second without reference video; $0.0190 with reference video. Official comparison: $0.0352 and $0.0211, respectively. Underlying rates: $3.15 / 1M video tokens without reference video; $1.89 with reference video. - 720p: approximately $0.0680 / billable second without reference video; $0.0408 with reference video. Official comparison: $0.0756 and $0.0454, respectively. Underlying rates: $3.15 / 1M video tokens without reference video; $1.89 with reference video. ## Start with a manageable scene ### Compose the scene in your browser Use the Seedance 2.0 Mini Playground to choose the starting material and output settings. Check the current estimate and availability before submitting a generation. ### Select Seedance 2.0 Mini in your app Select the Seedance 2.0 Mini identifier in your app and keep the returned task ID. Changing another model’s resolution does not switch that request to Mini. ## Shape a focused scene ### Start Seedance 2.0 Mini from text Describe the subject and its surroundings to Seedance 2.0 Mini, then add the movement. A concrete action makes it easier to decide whether the result fits the purpose of the shot. ### Begin with an image Supply Seedance 2.0 Mini with a first frame when the opening composition matters. An optional last frame can describe the destination, keeping both endpoints within the same frame-based request. ### Use references for different cues Give Seedance 2.0 Mini separate examples of appearance, movement or sound in reference mode. Explain the role of each source and keep these inputs separate from the first/last-frame mode. ### Plan the sound with the picture Generate sound with Seedance 2.0 Mini or choose silence for a later edit. Listen to the complete clip and check that the audio fits the timing you want to keep. ## Small scenes for a specific placement ### Seedance 2.0 Mini atmospheric inserts Explore a modest environmental movement with Seedance 2.0 Mini, such as fabric lifting or light passing over water. Keep the rest of the setting quiet so the finished shot has a clear visual focus. ### Seedance 2.0 Mini moving backgrounds Use Seedance 2.0 Mini to explore a background with room for text or interface elements you will add later. Review the entire take for changes that could distract from that overlay. ### A visual idea before a larger edit Try one scene with Seedance 2.0 Mini before expanding it into a sequence. Define what would make the clip useful, so the next request changes a specific part of the result rather than repeating an open-ended prompt. ## Prepare your first small scene ### Pick the visual anchor Tell Seedance 2.0 Mini which subject or setting must remain recognizable. Use a reference or opening image when that visual direction is already available. ### Add one movement Give Seedance 2.0 Mini a single action or camera move with a purpose. Keep the first test small enough that the whole result can be judged against the brief. ### Choose the size and review cost Set the Seedance 2.0 Mini resolution and duration for your placement. Check the estimate after including any reference footage, since input video also affects usage. ### Revise the part that matters Review Seedance 2.0 Mini for unwanted cuts, shape changes or distracting motion. Save the task and settings, then adjust the instruction that addresses the specific issue you found. ## Connect Seedance 2.0 Mini to your app The Seedance 2.0 Mini API guide describes its input fields and media rules. Submit once and save the accepted task ID, then retrieve the same task for status and the completed clip. Resume checking that ID after an interrupted status request. Seedance 2.0 Mini supports text, first and last frames, and image, video and audio references, with output at 480p, 720p. Generate up to 15 seconds per request. [Model details and Playground](/models/seedance-2-0-mini). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key with the **Seedance** model family in [API key settings](/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. `GET /v1/models` lists the models available to your key. Seedance models use `POST /v1/videos`; select the model in the JSON body. | Setting | Seedance 2.0 Mini | | --- | --- | | Model ID | `bytedance/seedance-2.0-mini` | | `resolution` | `480p`, `720p`; default: `720p`. | | `duration` | 4–15 output seconds, or `-1` for automatic; default: `5`. | | `aspectRatio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`; default: `adaptive`. | | `generateAudio` | `true` by default. `false` does not reduce the token rate. | | Output | One video per request, at 24 fps. | The [request fields](#request-fields) describe all 13 top-level fields. Use the field names shown here, including `aspectRatio` and `generateAudio`. ## Submit a Seedance 2.0 Mini task This is a four-second text-to-video request at 720p. Set `WAN_API_KEY` to your Seedance key on the server. Submit once and save the returned `id`. ```bash curl https://api.wanapi.app/v1/videos \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "bytedance/seedance-2.0-mini", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "720p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true }' ``` ## Query a Seedance 2.0 Mini task Save the returned `id` as `TASK_ID`, then query with the same key. Submission returns a task receipt; the video is available after completion. Begin polling every five seconds; see [task statuses and downloads](#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/v1/videos/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Seedance 2.0 Mini pricing Rates are in USD per one million video tokens. Input and output video tokens determine the final cost. Resolution, duration and reference video inputs affect usage; use the matching rate for requests with or without reference video. Audio has no separate price tier. [View Seedance 2.0 Mini pricing and estimates](/models/seedance-2-0-mini#pricing). Review the estimate in the [Playground](/models/seedance-2-0-mini#playground) before submitting. ## Request fields Send a JSON object. For a new scene, `model` and a non-empty prompt or at least one media input are required; other fields are optional. Unknown fields are rejected. | Field | Type | Contract | | --- | --- | --- | | `model` | string | Required: `bytedance/seedance-2.0-mini`. | | `prompt` | string | Text instructions; up to 20,000 characters on this service. A new scene requires a prompt or media input. | | `image` | URL or URL object | First-frame image URL, or an object with `type: "url"`, `url` and optional `mediaType`. Use `image` or `frameImages`, not both. | | `frameImages` | array | One `first_frame` and an optional `last_frame`. Each entry has `frameType` and `image`; see the frame example below. | | `inputReferences` | array | Up to 9 images and 3 videos. Each entry has `type: "url"`, `url` and `mediaType`. The `data`/`mediaType` URL form is also accepted. | | `aspectRatio` | string | `adaptive` (default), `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`. | | `resolution` | string | `480p`, `720p`. Default: `720p`. Also accepts `854x480`, `1280x720` as resolution tiers; use `aspectRatio` to select the shape. | | `duration` | integer | 4–15 output seconds, or `-1` for automatic. Default: `5`. | | `fps` | integer | Fixed at `24`; omit or send `24`. | | `seed` | integer | Optional; `-1` to `2147483647`. No repeatability guarantee. Do not also specify `providerOptions.bytedance.seed`. | | `generateAudio` | boolean | Generate audio. Default: `true`; disabling it does not change the token rate. | | `n` | integer | Fixed at `1`; one video per request. | | `providerOptions` | object | Optional `bytedance` object: `referenceAudio` (up to 3 HTTP(S) URLs), `seed` (same bounds as top-level `seed`). `draft: true` is not supported. Unknown options are rejected. | ### Input combinations and media limits - Use `image` for a first frame, or `frameImages` for a first frame and optional last frame. A last frame alone and duplicate frame types are rejected. - Frames cannot be combined with `inputReferences` or `providerOptions.bytedance.referenceAudio`. - Reference mode accepts up to 9 images, 3 videos and 3 audio clips, with at most 15 references in total. - Media inputs must be public HTTP(S) URLs. Upload bytes and credential-bearing URLs are not accepted. - Images: JPEG, PNG, WebP, BMP, TIFF or GIF; below 30 MB; each side 300–6000 pixels; aspect ratio 0.4–2.5. - Videos: MP4 or MOV; at most 50 MB per file; each clip 2–15 seconds and at most 15 seconds combined; 300–6000 pixels per side, aspect ratio 0.4–2.5, 24–60 fps. - Audio: MP3 or WAV; at most 15 MB per file; each clip 2–15 seconds and at most 15 seconds combined. At least one reference image or video is required. - Remote media size, encoding and duration are checked during processing; URL validation alone cannot guarantee that a file is usable. - Draft-to-final rendering and arbitrary native task options are not exposed by this endpoint. ## Frame and reference examples Send these bodies to the same `POST /v1/videos` endpoint. Replace every `example.com` URL with your own directly accessible media URL before submitting. Keep input URLs available until the task finishes. ### First and last frames For a single first frame, use `image: "https://example.com/first-frame.jpg"` and omit `frameImages`. To set both endpoints of the clip, use: ```json { "model": "bytedance/seedance-2.0-mini", "prompt": "The camera slowly moves from the opening scene to the closing scene.", "frameImages": [ { "frameType": "first_frame", "image": "https://example.com/first-frame.jpg" }, { "frameType": "last_frame", "image": "https://example.com/last-frame.jpg" } ], "aspectRatio": "adaptive", "resolution": "720p", "duration": 4 } ``` ### Image, video and audio references Put image and video inputs in `inputReferences`, with an explicit MIME type. Put audio URLs in `providerOptions.bytedance.referenceAudio`. Do not add frame inputs to this request. ```json { "model": "bytedance/seedance-2.0-mini", "prompt": "Use the character from the image and the camera movement from the video.", "inputReferences": [ { "type": "url", "url": "https://example.com/character.jpg", "mediaType": "image/jpeg" }, { "type": "url", "url": "https://example.com/motion.mp4", "mediaType": "video/mp4" } ], "providerOptions": { "bytedance": { "referenceAudio": [ "https://example.com/sound.wav" ] } }, "resolution": "720p", "duration": 4 } ``` ## Poll and download the video An accepted task returns an object like this. Example IDs and timestamps are illustrative: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-mini", "status": "queued", "progress": 0, "created_at": 1792022400 } ``` Poll `GET /v1/videos/{task_id}` with your API key. The query returns the same public task ID and model. Use `status` to decide when to stop polling; `progress` is not an estimate of remaining time. | Status | Meaning | Next step | | --- | --- | --- | | `queued` | The task has been accepted. | Continue polling. | | `in_progress` | Generation is running. | Continue polling. | | `completed` | The video is ready. | Read `videos[0].url` and download. | | `failed` | Generation failed. | Stop polling and inspect `error`. | A completed query includes `videos`, an array of objects containing `url` and `mediaType`. Timestamps use Unix seconds; `completed_at` appears when completion is recorded. ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-mini", "status": "completed", "progress": 100, "created_at": 1792022400, "completed_at": 1792022460, "videos": [ { "url": "/v1/tasks/task_EXAMPLE/artifacts/video/content", "mediaType": "video/mp4" } ] } ``` When the returned URL is a relative path, resolve it against `https://api.wanapi.app` and authenticate with your API key. For the example above: ```bash curl "https://api.wanapi.app/v1/tasks/$TASK_ID/artifacts/video/content" \ -H "Authorization: Bearer $WAN_API_KEY" \ -o video.mp4 ``` If a signed HTTPS media URL is returned, use it directly without forwarding your API key to that host. Result URLs can expire. Save videos you want to keep to your own storage. Polling and downloading an existing result do not create another generation. A failed task includes an `error` object with `code` and `message`, for example: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-mini", "status": "failed", "error": { "code": "generation_failed", "message": "Video generation failed" } } ``` ## Billing and failure handling The final charge follows actual video token usage and the current model rate. The Playground estimate is a maximum estimate, not a fixed quote. Longer clips and larger output resolutions can increase token usage. Failed requests are not charged. - **Invalid parameters:** correct the fields or input combination before submitting again. Check media formats and limits as well as URL syntax. - **Authentication or model access:** use a valid Seedance key enabled for the requested model. - **Insufficient balance:** add funds before a new paid request. A key limit does not add account credit. - **Temporary polling failure:** retry the GET with backoff and a maximum waiting period. A failed query does not mean the generation failed. - **Submission timeout or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. - **Download failure:** retry the existing result before starting a new generation. Keep the task ID and contact [support](/contact) if an uncertain submission needs investigation. [Download the Seedance 2.0 Mini OpenAPI schema](https://funnyai.io/models/seedance-2-0-mini/openapi.json). ## Seedance 2.0 Mini boundaries - Seedance 2.0 Mini offers 480p and 720p output. It does not provide Draft mode or the larger output tiers available on standard 2.0. - Seedance 2.0 Mini reference videos total at most fifteen seconds, with a separate fifteen-second limit for audio. An audio reference needs a visual reference alongside it. - First/last frames and mixed references are separate modes for Seedance 2.0 Mini. This integration does not expose editing, extension or a separate final-frame image output. ## Seedance 2.0 Mini questions ### Is Seedance 2.0 Mini a setting of the standard model? No. Seedance 2.0 Mini has its own identifier and rate table. Select it explicitly in the Playground or API request; lowering standard 2.0’s resolution changes that model’s settings rather than selecting Mini. ### Which sizes and lengths does Seedance 2.0 Mini offer? Seedance 2.0 Mini offers 480p or 720p, with an integer duration from four to fifteen seconds or automatic duration. Output is MP4 at 24 fps. The Playground begins with five seconds at 720p, which you can adjust around the action your scene needs. ### Can Seedance 2.0 Mini combine frames and audio references? No. Seedance 2.0 Mini frame mode is separate from the mixed reference collection. For reference audio, choose reference mode and include an image or video reference. Use a first frame and optional last frame when you want images to define the shot’s endpoints instead. ### Is Seedance 2.0 Mini always the lowest-cost choice? The cost of a Seedance 2.0 Mini project depends on duration, output size, reference-video usage and the number of generations you need. Compare current estimates for matching settings, then evaluate the usable results. A model’s name or token rate alone does not determine the final budget. ### Did Seedance 2.0 Mini generate the aquarium clip? No. The five-second aquarium illustration was generated with standard Wan 3.0 at 480p, as its caption states. You can adapt that scene for Seedance 2.0 Mini, but the displayed clip is not evidence of Mini performance or a comparison with Fast. [Seedance 2.0 Fast vs Mini: compare the same brief](https://funnyai.io/blog/seedance-2-0-fast-vs-mini) [Official model page](https://docs.byteplus.com/en/docs/ModelArk/2291680) [Release announcement](https://docs.byteplus.com/en/docs/ModelArk/1159178) # Complete English documentation and published guides --- # Funny AI overview Source: https://funnyai.io/docs Funny AI independently provides access to Wan and Seedance video models. The Wan models include **Wan 3.0**, **Wan 3.0 Prime**, **Wan 3.0 Pro** and **Wan 3.0 Prime Pro**. ## Models [#models] | Model | Integration focus | | ---------------------------------------------- | ---------------------------------------------------------------------------------- | | [Wan 3.0](https://funnyai.io/models/wan-3-0) | Text, images and multimodal references for video generation | | [Wan 3.0 Prime](https://funnyai.io/models/wan-3-0-prime) | The Prime variant shares the same 14 request fields; output at 480p, 720p or 1080p | | [Wan 3.0 Pro](https://funnyai.io/models/wan-3-0-pro) | Video generation with 1080p, 2K and 4K output choices | | [Wan 3.0 Prime Pro](https://funnyai.io/models/wan-3-0-prime-pro) | The Prime Pro variant with its own specifications and pricing | Seedance models have their own guides: [Seedance 2.5](https://funnyai.io/docs/seedance-2-5), [Seedance 2.0](https://funnyai.io/docs/seedance-2-0), [Seedance 2.0 Fast](https://funnyai.io/docs/seedance-2-0-fast) and [Seedance 2.0 Mini](https://funnyai.io/docs/seedance-2-0-mini). See the [model overview](https://funnyai.io/models) and [Wan 3.0 API guide](https://funnyai.io/blog/wan-3-api-guide) for model names, inputs and source documentation. ## Before your first request [#before-your-first-request] Use `https://api.wanapi.app` as the API base URL. Sign in with Google, add funds to your account and create a key in [API key settings](https://funnyai.io/settings/apikeys). Send the key in the `Authorization: Bearer YOUR_API_KEY` header. The Playground uses your website session and the same prepaid balance. Check the [pricing page](https://funnyai.io/pricing) and the model Playground for current rates and generation availability. Before submitting, use the [integration guide](https://funnyai.io/docs/integration) and the model reference to confirm: 1. The API base URL and authentication header. 2. The model ID and fields accepted by that model. 3. Supported input formats, duration and output options. 4. Task status handling, result retrieval and error responses. 5. Pricing and the billable units for each request. [Read the integration guide](https://funnyai.io/docs/integration). ## About the service [#about-the-service] Funny AI is independently operated at funnyai.io. It is not an official service of Alibaba, Wan or ByteDance and is not affiliated with or endorsed by them. Model names identify the third-party models available through the platform; their trademarks belong to their respective owners. Use the service documentation to confirm the features available through Funny AI. --- # Funny AI integration guide Source: https://funnyai.io/docs/integration ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key in [API key settings](https://funnyai.io/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. See [pricing](https://funnyai.io/pricing) for current rates. Each model has its own endpoint and [model page](https://funnyai.io/models). `GET /v1/models` lists the models available to your key. Choosing a higher resolution does not automatically change your model. | Model | Model ID in the URL | Resolution values | | -------------------------------------------- | ---------------------- | ----------------------- | | [Wan 3.0](https://funnyai.io/docs/wan-3-0) | `wan3.0-video` | `480p`, `720p`, `1080p` | | [Wan 3.0 Prime](https://funnyai.io/docs/wan-3-0-prime) | `wan3.0-video-prime` | `480p`, `720p`, `1080p` | | [Wan 3.0 Pro](https://funnyai.io/docs/wan-3-0-pro) | `w3.0-video-pro` | `1080p`, `2k`, `4k` | | [Wan 3.0 Prime Pro](https://funnyai.io/docs/wan-3-0-prime-pro) | `w3.0-video-prime-pro` | `1080p`, `2k`, `4k` | ## Request fields [#request-fields] All four models share these 14 native fields. Provide a prompt or at least one media input. Frames cannot be combined with reference inputs, `file` or `link`; `file` and `link` are mutually exclusive. | Field | Type | Contract | | ------------------ | --------- | --------------------------------------------------------------------------------------------- | | `prompt` | string | Up to 20,000 characters. | | `first_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `last_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `reference_images` | string\[] | Up to 10 images, using the same forms as a frame. | | `reference_videos` | string\[] | Up to 5 public MP4/MOV URLs; 1–15 seconds per clip and at most 15 reference seconds in total. | | `reference_audios` | string\[] | Up to 5 audio HTTP(S) URLs. | | `file` | string | Public document URL. | | `link` | string | Public web page URL. | | `resolution` | string | See the model table. Default: `1080p`. | | `ratio` | string | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`. Default: `adaptive`. | | `duration` | integer | 2–30 output seconds, or `-1` for automatic duration. Default: `5`. | | `audio` | boolean | Generate audio. Default: `true`. Disabling it does not reduce the rate. | | `seed` | integer | 0–2147483647. Omit for random generation. | | `prompt_extend` | boolean | Expand the prompt. Default: `true`. | Use stable, directly accessible media URLs that stay available until the task finishes. Video duration checks use bounded HTTP range reads; video servers must support those reads and expose readable MP4/MOV duration metadata. Redirects are not followed by duration checks. Private network URLs are not supported. The combined reference and output duration must not exceed 30 seconds. Playground accepts a JSON request body up to 32 MiB; use URLs for larger inputs. ## Poll and download the video [#poll-and-download-the-video] Every model's submit endpoint returns a public task ID. Save it before doing anything else. ```json { "task_info": { "id": "task_EXAMPLE", "status": "pending" } } ``` Use the query example in the matching model chapter. Start with a five-second interval and increase the delay after temporary errors. Keep each task's model ID together with its task ID; do not query it through a different model endpoint. The native statuses are `pending`, `processing`, `completed` and `failed`. A completed response includes `videos`, an array containing a complete signed Bunny CDN URL. ```json { "task_info": { "id": "task_EXAMPLE", "status": "completed" }, "videos": ["https://reapiflexible.b-cdn.net/flexible/v1/expires/2026-11/20261113T06/wanapi-task_EXAMPLE/video.mp4?token=HS256_SIGNATURE&expires=1794550071"] } ``` Use the returned URL directly for playback or download; no API key or Authorization header is required for that URL. Files follow the existing storage retention policy. Querying a task does not generate another video, charge again or extend file availability. Save files you want to keep to your own storage. Task queries require your API key and only return tasks owned by your account. ## Synchronous and background Responses [#synchronous-and-background-responses] For clients using the Responses API, `POST /v1/responses` accepts a model ID, a string `input` and the same native generation fields. Use `input` instead of `prompt`. Native media fields such as `reference_images` remain top-level fields. ```json { "model": "wan3.0-video", "input": "A blue ball rolls across a white table.", "resolution": "480p", "duration": 2, "background": true } ``` With `background: true`, save the response ID and poll `GET /v1/responses/{response_id}`. Without `background`, the HTTP request waits for completion. `stream: true` uses server-sent events while waiting. The final assistant output contains a signed video URL; treat it as a private capability link and do not publish it accidentally. Native task submission and background Responses are recommended for long generations and restrictive proxy timeouts. A disconnected or timed-out synchronous request does not cancel generation. The task remains on the server. Do not automatically submit the same generation again. ## Billing and failure handling [#billing-and-failure-handling] The price is the model's resolution rate multiplied by billable seconds. Reference video seconds and output seconds both count; text, images and audio inputs do not add video seconds. Fixed-duration requests without reference video reserve the requested output duration. Automatic duration and reference-video requests reserve up to 30 billable seconds, then settle to measured usage and return the unused reservation. Generation failures release the reservation. Polling does not create another generation or charge again. * **Invalid parameters:** correct the request before resubmitting. Unknown native fields are rejected. * **Insufficient balance:** add funds before a new paid request. A key's limit does not grant account credit. * **Rate limits or temporary polling failures:** retry only the query, with backoff and a maximum waiting period. * **Submission timeout, network interruption or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. * **Task failure:** show the failed state separately from an unavailable status query. * **Download failure:** retry downloading the existing completed task before starting another generation. Generation submissions are not automatically retried or switched to another model. There is no advertised cancellation, webhook or idempotency-key contract. Keep the task ID and contact [support](https://funnyai.io/contact) when an uncertain submission needs investigation. --- # Seedance 2.0 Source: https://funnyai.io/docs/seedance-2-0 Seedance 2.0 supports text, first and last frames, and image, video and audio references, with output at 480p, 720p, 1080p, 4K. Generate up to 15 seconds per request. [Model details and Playground](https://funnyai.io/models/seedance-2-0). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key with the **Seedance** model family in [API key settings](https://funnyai.io/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. `GET /v1/models` lists the models available to your key. Seedance models use `POST /v1/videos`; select the model in the JSON body. | Setting | Seedance 2.0 | | --------------- | ----------------------------------------------------------------------------- | | Model ID | `bytedance/seedance-2.0` | | `resolution` | `480p`, `720p`, `1080p`, `4k`; default: `720p`. | | `duration` | 4–15 output seconds, or `-1` for automatic; default: `5`. | | `aspectRatio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`; default: `adaptive`. | | `generateAudio` | `true` by default. `false` does not reduce the token rate. | | Output | One video per request, at 24 fps. | The [request fields](https://funnyai.io/docs/seedance-2-0#request-fields) describe all 13 top-level fields. Use the field names shown here, including `aspectRatio` and `generateAudio`. ## Submit a Seedance 2.0 task [#submit-a-seedance-20-task] This is a four-second text-to-video request at 720p. Set `WAN_API_KEY` to your Seedance key on the server. Submit once and save the returned `id`. ```bash curl https://api.wanapi.app/v1/videos \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "bytedance/seedance-2.0", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "720p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true }' ``` ## Query a Seedance 2.0 task [#query-a-seedance-20-task] Save the returned `id` as `TASK_ID`, then query with the same key. Submission returns a task receipt; the video is available after completion. Begin polling every five seconds; see [task statuses and downloads](https://funnyai.io/docs/seedance-2-0#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/v1/videos/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Seedance 2.0 pricing [#seedance-20-pricing] Rates are in USD per one million video tokens. Input and output video tokens determine the final cost. Resolution, duration and reference video inputs affect usage; use the matching rate for requests with or without reference video. Audio has no separate price tier. [View Seedance 2.0 pricing and estimates](https://funnyai.io/models/seedance-2-0#pricing). Review the estimate in the [Playground](https://funnyai.io/models/seedance-2-0#playground) before submitting. ## Request fields [#request-fields] Send a JSON object. `model` is required, together with a non-empty prompt or at least one media input. Other fields are optional. Unknown fields are rejected. | Field | Type | Contract | | ----------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | Required: `bytedance/seedance-2.0`. | | `prompt` | string | Text instructions; up to 20,000 characters on this service. A prompt or media input is required. | | `image` | URL or URL object | First-frame image URL, or an object with `type: "url"`, `url` and optional `mediaType`. Use `image` or `frameImages`, not both. | | `frameImages` | array | One `first_frame` and an optional `last_frame`. Each entry has `frameType` and `image`; see the frame example below. | | `inputReferences` | array | Up to 9 images and 3 videos. Each entry has `type: "url"`, `url` and `mediaType`. The `data`/`mediaType` URL form is also accepted. | | `aspectRatio` | string | `adaptive` (default), `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`. | | `resolution` | string | `480p`, `720p`, `1080p`, `4k`. Default: `720p`. Also accepts `854x480`, `1280x720`, `1920x1080`, `3840x2160` as resolution tiers; use `aspectRatio` to select the shape. | | `duration` | integer | 4–15 output seconds, or `-1` for automatic. Default: `5`. | | `fps` | integer | Fixed at `24`; omit or send `24`. | | `seed` | integer | Optional; `-1` to `2147483647`. No repeatability guarantee. Do not also specify `providerOptions.bytedance.seed`. | | `generateAudio` | boolean | Generate audio. Default: `true`; disabling it does not change the token rate. | | `n` | integer | Fixed at `1`; one video per request. | | `providerOptions` | object | Optional `bytedance` object: `referenceAudio` (up to 3 HTTP(S) URLs), `seed` (same bounds as top-level `seed`). `draft: true` is not supported. Unknown options are rejected. | ### Input combinations and media limits [#input-combinations-and-media-limits] * Use `image` for a first frame, or `frameImages` for a first frame and optional last frame. A last frame alone and duplicate frame types are rejected. * Frames cannot be combined with `inputReferences` or `providerOptions.bytedance.referenceAudio`. * Reference mode accepts up to 9 images, 3 videos and 3 audio clips, with at most 15 references in total. * Media inputs must be public HTTP(S) URLs. Upload bytes and credential-bearing URLs are not accepted. * Images: JPEG, PNG, WebP, BMP, TIFF or GIF; below 30 MB; each side 300–6000 pixels; aspect ratio 0.4–2.5. * Videos: MP4 or MOV; at most 50 MB per file; each clip 2–15 seconds and at most 15 seconds combined; 300–6000 pixels per side, aspect ratio 0.4–2.5, 24–60 fps. * Audio: MP3 or WAV; at most 15 MB per file; each clip 2–15 seconds and at most 15 seconds combined. At least one reference image or video is required. * Remote media size, encoding and duration are checked during processing; URL validation alone cannot guarantee that a file is usable. * Draft-to-final rendering from an earlier task and arbitrary native task options are not exposed by this endpoint. ## Frame and reference examples [#frame-and-reference-examples] Send these bodies to the same `POST /v1/videos` endpoint. Replace every `example.com` URL with your own directly accessible media URL before submitting. Keep input URLs available until the task finishes. ### First and last frames [#first-and-last-frames] For a single first frame, use `image: "https://example.com/first-frame.jpg"` and omit `frameImages`. To set both endpoints of the clip, use: ```json { "model": "bytedance/seedance-2.0", "prompt": "The camera slowly moves from the opening scene to the closing scene.", "frameImages": [ { "frameType": "first_frame", "image": "https://example.com/first-frame.jpg" }, { "frameType": "last_frame", "image": "https://example.com/last-frame.jpg" } ], "aspectRatio": "adaptive", "resolution": "720p", "duration": 4 } ``` ### Image, video and audio references [#image-video-and-audio-references] Put image and video inputs in `inputReferences`, with an explicit MIME type. Put audio URLs in `providerOptions.bytedance.referenceAudio`. Do not add frame inputs to this request. ```json { "model": "bytedance/seedance-2.0", "prompt": "Use the character from the image and the camera movement from the video.", "inputReferences": [ { "type": "url", "url": "https://example.com/character.jpg", "mediaType": "image/jpeg" }, { "type": "url", "url": "https://example.com/motion.mp4", "mediaType": "video/mp4" } ], "providerOptions": { "bytedance": { "referenceAudio": [ "https://example.com/sound.wav" ] } }, "resolution": "720p", "duration": 4 } ``` ## Poll and download the video [#poll-and-download-the-video] An accepted task returns an object like this. Example IDs and timestamps are illustrative: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0", "status": "queued", "progress": 0, "created_at": 1792022400 } ``` Poll `GET /v1/videos/{task_id}` with your API key. The query returns the same public task ID and model. Use `status` to decide when to stop polling; `progress` is not an estimate of remaining time. | Status | Meaning | Next step | | ------------- | --------------------------- | ---------------------------------- | | `queued` | The task has been accepted. | Continue polling. | | `in_progress` | Generation is running. | Continue polling. | | `completed` | The video is ready. | Read `videos[0].url` and download. | | `failed` | Generation failed. | Stop polling and inspect `error`. | A completed query includes `videos`, an array of objects containing `url` and `mediaType`. Timestamps use Unix seconds; `completed_at` appears when completion is recorded. ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0", "status": "completed", "progress": 100, "created_at": 1792022400, "completed_at": 1792022460, "videos": [ { "url": "/v1/tasks/task_EXAMPLE/artifacts/video/content", "mediaType": "video/mp4" } ] } ``` When the returned URL is a relative path, resolve it against `https://api.wanapi.app` and authenticate with your API key. For the example above: ```bash curl "https://api.wanapi.app/v1/tasks/$TASK_ID/artifacts/video/content" \ -H "Authorization: Bearer $WAN_API_KEY" \ -o video.mp4 ``` If a signed HTTPS media URL is returned, use it directly without forwarding your API key to that host. Result URLs can expire. Save videos you want to keep to your own storage. Polling and downloading an existing result do not create another generation. A failed task includes an `error` object with `code` and `message`, for example: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0", "status": "failed", "error": { "code": "generation_failed", "message": "Video generation failed" } } ``` ## Billing and failure handling [#billing-and-failure-handling] The final charge follows actual video token usage and the current model rate. The Playground estimate is a maximum estimate, not a fixed quote. Longer clips and larger output resolutions can increase token usage. Failed requests are not charged. * **Invalid parameters:** correct the fields or input combination before submitting again. Check media formats and limits as well as URL syntax. * **Authentication or model access:** use a valid Seedance key enabled for the requested model. * **Insufficient balance:** add funds before a new paid request. A key limit does not add account credit. * **Temporary polling failure:** retry the GET with backoff and a maximum waiting period. A failed query does not mean the generation failed. * **Submission timeout or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. * **Download failure:** retry the existing result before starting a new generation. Keep the task ID and contact [support](https://funnyai.io/contact) if an uncertain submission needs investigation. [Download the Seedance 2.0 OpenAPI schema](https://funnyai.io/models/seedance-2-0/openapi.json). --- # Seedance 2.0 Fast Source: https://funnyai.io/docs/seedance-2-0-fast Seedance 2.0 Fast supports text, first and last frames, and image, video and audio references, with output at 480p, 720p. Generate up to 15 seconds per request. [Model details and Playground](https://funnyai.io/models/seedance-2-0-fast). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key with the **Seedance** model family in [API key settings](https://funnyai.io/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. `GET /v1/models` lists the models available to your key. Seedance models use `POST /v1/videos`; select the model in the JSON body. | Setting | Seedance 2.0 Fast | | --------------- | ----------------------------------------------------------------------------- | | Model ID | `bytedance/seedance-2.0-fast` | | `resolution` | `480p`, `720p`; default: `720p`. | | `duration` | 4–15 output seconds, or `-1` for automatic; default: `5`. | | `aspectRatio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`; default: `adaptive`. | | `generateAudio` | `true` by default. `false` does not reduce the token rate. | | Output | One video per request, at 24 fps. | The [request fields](https://funnyai.io/docs/seedance-2-0-fast#request-fields) describe all 13 top-level fields. Use the field names shown here, including `aspectRatio` and `generateAudio`. ## Submit a Seedance 2.0 Fast task [#submit-a-seedance-20-fast-task] This is a four-second text-to-video request at 720p. Set `WAN_API_KEY` to your Seedance key on the server. Submit once and save the returned `id`. ```bash curl https://api.wanapi.app/v1/videos \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "bytedance/seedance-2.0-fast", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "720p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true }' ``` ## Query a Seedance 2.0 Fast task [#query-a-seedance-20-fast-task] Save the returned `id` as `TASK_ID`, then query with the same key. Submission returns a task receipt; the video is available after completion. Begin polling every five seconds; see [task statuses and downloads](https://funnyai.io/docs/seedance-2-0-fast#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/v1/videos/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Seedance 2.0 Fast pricing [#seedance-20-fast-pricing] Rates are in USD per one million video tokens. Input and output video tokens determine the final cost. Resolution, duration and reference video inputs affect usage; use the matching rate for requests with or without reference video. Audio has no separate price tier. [View Seedance 2.0 Fast pricing and estimates](https://funnyai.io/models/seedance-2-0-fast#pricing). Review the estimate in the [Playground](https://funnyai.io/models/seedance-2-0-fast#playground) before submitting. ## Request fields [#request-fields] Send a JSON object. `model` is required, together with a non-empty prompt or at least one media input. Other fields are optional. Unknown fields are rejected. | Field | Type | Contract | | ----------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | Required: `bytedance/seedance-2.0-fast`. | | `prompt` | string | Text instructions; up to 20,000 characters on this service. A prompt or media input is required. | | `image` | URL or URL object | First-frame image URL, or an object with `type: "url"`, `url` and optional `mediaType`. Use `image` or `frameImages`, not both. | | `frameImages` | array | One `first_frame` and an optional `last_frame`. Each entry has `frameType` and `image`; see the frame example below. | | `inputReferences` | array | Up to 9 images and 3 videos. Each entry has `type: "url"`, `url` and `mediaType`. The `data`/`mediaType` URL form is also accepted. | | `aspectRatio` | string | `adaptive` (default), `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`. | | `resolution` | string | `480p`, `720p`. Default: `720p`. Also accepts `854x480`, `1280x720` as resolution tiers; use `aspectRatio` to select the shape. | | `duration` | integer | 4–15 output seconds, or `-1` for automatic. Default: `5`. | | `fps` | integer | Fixed at `24`; omit or send `24`. | | `seed` | integer | Optional; `-1` to `2147483647`. No repeatability guarantee. Do not also specify `providerOptions.bytedance.seed`. | | `generateAudio` | boolean | Generate audio. Default: `true`; disabling it does not change the token rate. | | `n` | integer | Fixed at `1`; one video per request. | | `providerOptions` | object | Optional `bytedance` object: `referenceAudio` (up to 3 HTTP(S) URLs), `seed` (same bounds as top-level `seed`). `draft: true` is not supported. Unknown options are rejected. | ### Input combinations and media limits [#input-combinations-and-media-limits] * Use `image` for a first frame, or `frameImages` for a first frame and optional last frame. A last frame alone and duplicate frame types are rejected. * Frames cannot be combined with `inputReferences` or `providerOptions.bytedance.referenceAudio`. * Reference mode accepts up to 9 images, 3 videos and 3 audio clips, with at most 15 references in total. * Media inputs must be public HTTP(S) URLs. Upload bytes and credential-bearing URLs are not accepted. * Images: JPEG, PNG, WebP, BMP, TIFF or GIF; below 30 MB; each side 300–6000 pixels; aspect ratio 0.4–2.5. * Videos: MP4 or MOV; at most 50 MB per file; each clip 2–15 seconds and at most 15 seconds combined; 300–6000 pixels per side, aspect ratio 0.4–2.5, 24–60 fps. * Audio: MP3 or WAV; at most 15 MB per file; each clip 2–15 seconds and at most 15 seconds combined. At least one reference image or video is required. * Remote media size, encoding and duration are checked during processing; URL validation alone cannot guarantee that a file is usable. * Draft-to-final rendering from an earlier task and arbitrary native task options are not exposed by this endpoint. ## Frame and reference examples [#frame-and-reference-examples] Send these bodies to the same `POST /v1/videos` endpoint. Replace every `example.com` URL with your own directly accessible media URL before submitting. Keep input URLs available until the task finishes. ### First and last frames [#first-and-last-frames] For a single first frame, use `image: "https://example.com/first-frame.jpg"` and omit `frameImages`. To set both endpoints of the clip, use: ```json { "model": "bytedance/seedance-2.0-fast", "prompt": "The camera slowly moves from the opening scene to the closing scene.", "frameImages": [ { "frameType": "first_frame", "image": "https://example.com/first-frame.jpg" }, { "frameType": "last_frame", "image": "https://example.com/last-frame.jpg" } ], "aspectRatio": "adaptive", "resolution": "720p", "duration": 4 } ``` ### Image, video and audio references [#image-video-and-audio-references] Put image and video inputs in `inputReferences`, with an explicit MIME type. Put audio URLs in `providerOptions.bytedance.referenceAudio`. Do not add frame inputs to this request. ```json { "model": "bytedance/seedance-2.0-fast", "prompt": "Use the character from the image and the camera movement from the video.", "inputReferences": [ { "type": "url", "url": "https://example.com/character.jpg", "mediaType": "image/jpeg" }, { "type": "url", "url": "https://example.com/motion.mp4", "mediaType": "video/mp4" } ], "providerOptions": { "bytedance": { "referenceAudio": [ "https://example.com/sound.wav" ] } }, "resolution": "720p", "duration": 4 } ``` ## Poll and download the video [#poll-and-download-the-video] An accepted task returns an object like this. Example IDs and timestamps are illustrative: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-fast", "status": "queued", "progress": 0, "created_at": 1792022400 } ``` Poll `GET /v1/videos/{task_id}` with your API key. The query returns the same public task ID and model. Use `status` to decide when to stop polling; `progress` is not an estimate of remaining time. | Status | Meaning | Next step | | ------------- | --------------------------- | ---------------------------------- | | `queued` | The task has been accepted. | Continue polling. | | `in_progress` | Generation is running. | Continue polling. | | `completed` | The video is ready. | Read `videos[0].url` and download. | | `failed` | Generation failed. | Stop polling and inspect `error`. | A completed query includes `videos`, an array of objects containing `url` and `mediaType`. Timestamps use Unix seconds; `completed_at` appears when completion is recorded. ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-fast", "status": "completed", "progress": 100, "created_at": 1792022400, "completed_at": 1792022460, "videos": [ { "url": "/v1/tasks/task_EXAMPLE/artifacts/video/content", "mediaType": "video/mp4" } ] } ``` When the returned URL is a relative path, resolve it against `https://api.wanapi.app` and authenticate with your API key. For the example above: ```bash curl "https://api.wanapi.app/v1/tasks/$TASK_ID/artifacts/video/content" \ -H "Authorization: Bearer $WAN_API_KEY" \ -o video.mp4 ``` If a signed HTTPS media URL is returned, use it directly without forwarding your API key to that host. Result URLs can expire. Save videos you want to keep to your own storage. Polling and downloading an existing result do not create another generation. A failed task includes an `error` object with `code` and `message`, for example: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-fast", "status": "failed", "error": { "code": "generation_failed", "message": "Video generation failed" } } ``` ## Billing and failure handling [#billing-and-failure-handling] The final charge follows actual video token usage and the current model rate. The Playground estimate is a maximum estimate, not a fixed quote. Longer clips and larger output resolutions can increase token usage. Failed requests are not charged. * **Invalid parameters:** correct the fields or input combination before submitting again. Check media formats and limits as well as URL syntax. * **Authentication or model access:** use a valid Seedance key enabled for the requested model. * **Insufficient balance:** add funds before a new paid request. A key limit does not add account credit. * **Temporary polling failure:** retry the GET with backoff and a maximum waiting period. A failed query does not mean the generation failed. * **Submission timeout or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. * **Download failure:** retry the existing result before starting a new generation. Keep the task ID and contact [support](https://funnyai.io/contact) if an uncertain submission needs investigation. [Download the Seedance 2.0 Fast OpenAPI schema](https://funnyai.io/models/seedance-2-0-fast/openapi.json). --- # Seedance 2.0 Mini Source: https://funnyai.io/docs/seedance-2-0-mini Seedance 2.0 Mini supports text, first and last frames, and image, video and audio references, with output at 480p, 720p. Generate up to 15 seconds per request. [Model details and Playground](https://funnyai.io/models/seedance-2-0-mini). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key with the **Seedance** model family in [API key settings](https://funnyai.io/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. `GET /v1/models` lists the models available to your key. Seedance models use `POST /v1/videos`; select the model in the JSON body. | Setting | Seedance 2.0 Mini | | --------------- | ----------------------------------------------------------------------------- | | Model ID | `bytedance/seedance-2.0-mini` | | `resolution` | `480p`, `720p`; default: `720p`. | | `duration` | 4–15 output seconds, or `-1` for automatic; default: `5`. | | `aspectRatio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`; default: `adaptive`. | | `generateAudio` | `true` by default. `false` does not reduce the token rate. | | Output | One video per request, at 24 fps. | The [request fields](https://funnyai.io/docs/seedance-2-0-mini#request-fields) describe all 13 top-level fields. Use the field names shown here, including `aspectRatio` and `generateAudio`. ## Submit a Seedance 2.0 Mini task [#submit-a-seedance-20-mini-task] This is a four-second text-to-video request at 720p. Set `WAN_API_KEY` to your Seedance key on the server. Submit once and save the returned `id`. ```bash curl https://api.wanapi.app/v1/videos \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "bytedance/seedance-2.0-mini", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "720p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true }' ``` ## Query a Seedance 2.0 Mini task [#query-a-seedance-20-mini-task] Save the returned `id` as `TASK_ID`, then query with the same key. Submission returns a task receipt; the video is available after completion. Begin polling every five seconds; see [task statuses and downloads](https://funnyai.io/docs/seedance-2-0-mini#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/v1/videos/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Seedance 2.0 Mini pricing [#seedance-20-mini-pricing] Rates are in USD per one million video tokens. Input and output video tokens determine the final cost. Resolution, duration and reference video inputs affect usage; use the matching rate for requests with or without reference video. Audio has no separate price tier. [View Seedance 2.0 Mini pricing and estimates](https://funnyai.io/models/seedance-2-0-mini#pricing). Review the estimate in the [Playground](https://funnyai.io/models/seedance-2-0-mini#playground) before submitting. ## Request fields [#request-fields] Send a JSON object. `model` is required, together with a non-empty prompt or at least one media input. Other fields are optional. Unknown fields are rejected. | Field | Type | Contract | | ----------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | Required: `bytedance/seedance-2.0-mini`. | | `prompt` | string | Text instructions; up to 20,000 characters on this service. A prompt or media input is required. | | `image` | URL or URL object | First-frame image URL, or an object with `type: "url"`, `url` and optional `mediaType`. Use `image` or `frameImages`, not both. | | `frameImages` | array | One `first_frame` and an optional `last_frame`. Each entry has `frameType` and `image`; see the frame example below. | | `inputReferences` | array | Up to 9 images and 3 videos. Each entry has `type: "url"`, `url` and `mediaType`. The `data`/`mediaType` URL form is also accepted. | | `aspectRatio` | string | `adaptive` (default), `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`. | | `resolution` | string | `480p`, `720p`. Default: `720p`. Also accepts `854x480`, `1280x720` as resolution tiers; use `aspectRatio` to select the shape. | | `duration` | integer | 4–15 output seconds, or `-1` for automatic. Default: `5`. | | `fps` | integer | Fixed at `24`; omit or send `24`. | | `seed` | integer | Optional; `-1` to `2147483647`. No repeatability guarantee. Do not also specify `providerOptions.bytedance.seed`. | | `generateAudio` | boolean | Generate audio. Default: `true`; disabling it does not change the token rate. | | `n` | integer | Fixed at `1`; one video per request. | | `providerOptions` | object | Optional `bytedance` object: `referenceAudio` (up to 3 HTTP(S) URLs), `seed` (same bounds as top-level `seed`). `draft: true` is not supported. Unknown options are rejected. | ### Input combinations and media limits [#input-combinations-and-media-limits] * Use `image` for a first frame, or `frameImages` for a first frame and optional last frame. A last frame alone and duplicate frame types are rejected. * Frames cannot be combined with `inputReferences` or `providerOptions.bytedance.referenceAudio`. * Reference mode accepts up to 9 images, 3 videos and 3 audio clips, with at most 15 references in total. * Media inputs must be public HTTP(S) URLs. Upload bytes and credential-bearing URLs are not accepted. * Images: JPEG, PNG, WebP, BMP, TIFF or GIF; below 30 MB; each side 300–6000 pixels; aspect ratio 0.4–2.5. * Videos: MP4 or MOV; at most 50 MB per file; each clip 2–15 seconds and at most 15 seconds combined; 300–6000 pixels per side, aspect ratio 0.4–2.5, 24–60 fps. * Audio: MP3 or WAV; at most 15 MB per file; each clip 2–15 seconds and at most 15 seconds combined. At least one reference image or video is required. * Remote media size, encoding and duration are checked during processing; URL validation alone cannot guarantee that a file is usable. * Draft-to-final rendering from an earlier task and arbitrary native task options are not exposed by this endpoint. ## Frame and reference examples [#frame-and-reference-examples] Send these bodies to the same `POST /v1/videos` endpoint. Replace every `example.com` URL with your own directly accessible media URL before submitting. Keep input URLs available until the task finishes. ### First and last frames [#first-and-last-frames] For a single first frame, use `image: "https://example.com/first-frame.jpg"` and omit `frameImages`. To set both endpoints of the clip, use: ```json { "model": "bytedance/seedance-2.0-mini", "prompt": "The camera slowly moves from the opening scene to the closing scene.", "frameImages": [ { "frameType": "first_frame", "image": "https://example.com/first-frame.jpg" }, { "frameType": "last_frame", "image": "https://example.com/last-frame.jpg" } ], "aspectRatio": "adaptive", "resolution": "720p", "duration": 4 } ``` ### Image, video and audio references [#image-video-and-audio-references] Put image and video inputs in `inputReferences`, with an explicit MIME type. Put audio URLs in `providerOptions.bytedance.referenceAudio`. Do not add frame inputs to this request. ```json { "model": "bytedance/seedance-2.0-mini", "prompt": "Use the character from the image and the camera movement from the video.", "inputReferences": [ { "type": "url", "url": "https://example.com/character.jpg", "mediaType": "image/jpeg" }, { "type": "url", "url": "https://example.com/motion.mp4", "mediaType": "video/mp4" } ], "providerOptions": { "bytedance": { "referenceAudio": [ "https://example.com/sound.wav" ] } }, "resolution": "720p", "duration": 4 } ``` ## Poll and download the video [#poll-and-download-the-video] An accepted task returns an object like this. Example IDs and timestamps are illustrative: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-mini", "status": "queued", "progress": 0, "created_at": 1792022400 } ``` Poll `GET /v1/videos/{task_id}` with your API key. The query returns the same public task ID and model. Use `status` to decide when to stop polling; `progress` is not an estimate of remaining time. | Status | Meaning | Next step | | ------------- | --------------------------- | ---------------------------------- | | `queued` | The task has been accepted. | Continue polling. | | `in_progress` | Generation is running. | Continue polling. | | `completed` | The video is ready. | Read `videos[0].url` and download. | | `failed` | Generation failed. | Stop polling and inspect `error`. | A completed query includes `videos`, an array of objects containing `url` and `mediaType`. Timestamps use Unix seconds; `completed_at` appears when completion is recorded. ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-mini", "status": "completed", "progress": 100, "created_at": 1792022400, "completed_at": 1792022460, "videos": [ { "url": "/v1/tasks/task_EXAMPLE/artifacts/video/content", "mediaType": "video/mp4" } ] } ``` When the returned URL is a relative path, resolve it against `https://api.wanapi.app` and authenticate with your API key. For the example above: ```bash curl "https://api.wanapi.app/v1/tasks/$TASK_ID/artifacts/video/content" \ -H "Authorization: Bearer $WAN_API_KEY" \ -o video.mp4 ``` If a signed HTTPS media URL is returned, use it directly without forwarding your API key to that host. Result URLs can expire. Save videos you want to keep to your own storage. Polling and downloading an existing result do not create another generation. A failed task includes an `error` object with `code` and `message`, for example: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.0-mini", "status": "failed", "error": { "code": "generation_failed", "message": "Video generation failed" } } ``` ## Billing and failure handling [#billing-and-failure-handling] The final charge follows actual video token usage and the current model rate. The Playground estimate is a maximum estimate, not a fixed quote. Longer clips and larger output resolutions can increase token usage. Failed requests are not charged. * **Invalid parameters:** correct the fields or input combination before submitting again. Check media formats and limits as well as URL syntax. * **Authentication or model access:** use a valid Seedance key enabled for the requested model. * **Insufficient balance:** add funds before a new paid request. A key limit does not add account credit. * **Temporary polling failure:** retry the GET with backoff and a maximum waiting period. A failed query does not mean the generation failed. * **Submission timeout or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. * **Download failure:** retry the existing result before starting a new generation. Keep the task ID and contact [support](https://funnyai.io/contact) if an uncertain submission needs investigation. [Download the Seedance 2.0 Mini OpenAPI schema](https://funnyai.io/models/seedance-2-0-mini/openapi.json). --- # Seedance 2.5 Source: https://funnyai.io/docs/seedance-2-5 Seedance 2.5 supports text, first and last frames, and image, video and audio references, with output at 480p, 720p, 1080p. Generate up to 30 seconds per request. [Model details and Playground](https://funnyai.io/models/seedance-2-5). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key with the **Seedance** model family in [API key settings](https://funnyai.io/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. `GET /v1/models` lists the models available to your key. Seedance models use `POST /v1/videos`; select the model in the JSON body. | Setting | Seedance 2.5 | | --------------- | ----------------------------------------------------------------------------- | | Model ID | `bytedance/seedance-2.5` | | `resolution` | `480p`, `720p`, `1080p`; default: `720p`. | | `duration` | 4–30 output seconds, or `-1` for automatic; default: `-1`. | | `aspectRatio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`; default: `adaptive`. | | `generateAudio` | `true` by default. `false` does not reduce the token rate. | | Output | One video per request, at 24 fps. | The [request fields](https://funnyai.io/docs/seedance-2-5#request-fields) describe all 14 top-level fields. Use the field names shown here, including `aspectRatio` and `generateAudio`. ## Submit a Seedance 2.5 task [#submit-a-seedance-25-task] This is a four-second text-to-video request at 720p. Set `WAN_API_KEY` to your Seedance key on the server. Submit once and save the returned `id`. ```bash curl https://api.wanapi.app/v1/videos \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "bytedance/seedance-2.5", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "720p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true }' ``` ## Query a Seedance 2.5 task [#query-a-seedance-25-task] Save the returned `id` as `TASK_ID`, then query with the same key. Submission returns a task receipt; the video is available after completion. Begin polling every five seconds; see [task statuses and downloads](https://funnyai.io/docs/seedance-2-5#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/v1/videos/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Seedance 2.5 pricing [#seedance-25-pricing] Rates are in USD per one million video tokens. Input and output video tokens determine the final cost. Resolution, duration and reference video inputs affect usage; use the matching rate for requests with or without reference video. Audio has no separate price tier. [View Seedance 2.5 pricing and estimates](https://funnyai.io/models/seedance-2-5#pricing). Review the estimate in the [Playground](https://funnyai.io/models/seedance-2-5#playground) before submitting. ## Request fields [#request-fields] Send a JSON object. For a new scene, `model` and a non-empty prompt or at least one media input are required; other fields are optional. For a final render, send only `model`, `draftTaskId` and `resolution: "1080p"` (optional `n: 1` and `providerOptions.bytedance.output_format`). Unknown fields are rejected. | Field | Type | Contract | | ----------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | Required: `bytedance/seedance-2.5`. | | `draftTaskId` | string | Public ID of your completed Seedance 2.5 draft. For final rendering, send only `model`, `draftTaskId` and `resolution: "1080p"` (optional `n: 1` and `providerOptions.bytedance.output_format`). | | `prompt` | string | Text instructions; up to 20,000 characters on this service. A new scene requires a prompt or media input; omit this field when using `draftTaskId`. | | `image` | URL or URL object | First-frame image URL, or an object with `type: "url"`, `url` and optional `mediaType`. Use `image` or `frameImages`, not both. | | `frameImages` | array | One `first_frame` and an optional `last_frame`. Each entry has `frameType` and `image`; see the frame example below. | | `inputReferences` | array | Up to 30 images and 10 videos. Each entry has `type: "url"`, `url` and `mediaType`. The `data`/`mediaType` URL form is also accepted. | | `aspectRatio` | string | `adaptive` (default), `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`. First-frame modes require adaptive. | | `resolution` | string | `480p`, `720p`, `1080p`. Default: `720p`. Also accepts `854x480`, `1280x720`, `1920x1080` as resolution tiers; use `aspectRatio` to select the shape. | | `duration` | integer | 4–30 output seconds, or `-1` for automatic. Default: `-1`. | | `fps` | integer | Fixed at `24`; omit or send `24`. | | `seed` | integer | Optional; `-1` to `2147483647`. No repeatability guarantee. Do not also specify `providerOptions.bytedance.seed`. | | `generateAudio` | boolean | Generate audio. Default: `true`; disabling it does not change the token rate. | | `n` | integer | Fixed at `1`; one video per request. | | `providerOptions` | object | Optional `bytedance` object: `referenceAudio` (up to 10 HTTP(S) URLs), `seed` (same bounds as top-level `seed`), `draft` (boolean; default `false`; `true` requires `480p`), `output_format` (`mp4` or `mov`; default `mp4`). Unknown options are rejected. | ### Input combinations and media limits [#input-combinations-and-media-limits] * Use `image` for a first frame, or `frameImages` for a first frame and optional last frame. A last frame alone and duplicate frame types are rejected. * Frames cannot be combined with `inputReferences` or `providerOptions.bytedance.referenceAudio`. * Reference mode accepts up to 30 images, 10 videos and 10 audio clips, with at most 50 references in total. * Frame inputs require `aspectRatio: "adaptive"`. Reference audio can be used without an image or video. * Media inputs must be public HTTP(S) URLs. Upload bytes and credential-bearing URLs are not accepted. * Images: JPEG, PNG, WebP, BMP, TIFF or GIF, HEIC or HEIF; below 30 MB; each side 300–6000 pixels; aspect ratio 0.4–2.5. * Videos: MP4 or MOV; at most 200 MB per file; each clip 2–30 seconds and at most 30 seconds combined; 300–6000 pixels per side, aspect ratio 0.4–2.5, 24–60 fps. * Audio: MP3 or WAV; at most 15 MB per file; each clip 2–30 seconds and at most 30 seconds combined. * Remote media size, encoding and duration are checked during processing; URL validation alone cannot guarantee that a file is usable. * Use `draftTaskId` to render a completed draft at 1080p. Arbitrary native task options are not accepted. ## Frame and reference examples [#frame-and-reference-examples] Send these bodies to the same `POST /v1/videos` endpoint. Replace every `example.com` URL with your own directly accessible media URL before submitting. Keep input URLs available until the task finishes. ### First and last frames [#first-and-last-frames] For a single first frame, use `image: "https://example.com/first-frame.jpg"` and omit `frameImages`. To set both endpoints of the clip, use: ```json { "model": "bytedance/seedance-2.5", "prompt": "The camera slowly moves from the opening scene to the closing scene.", "frameImages": [ { "frameType": "first_frame", "image": "https://example.com/first-frame.jpg" }, { "frameType": "last_frame", "image": "https://example.com/last-frame.jpg" } ], "aspectRatio": "adaptive", "resolution": "720p", "duration": 4 } ``` ### Image, video and audio references [#image-video-and-audio-references] Put image and video inputs in `inputReferences`, with an explicit MIME type. Put audio URLs in `providerOptions.bytedance.referenceAudio`. Do not add frame inputs to this request. ```json { "model": "bytedance/seedance-2.5", "prompt": "Use the character from the image and the camera movement from the video.", "inputReferences": [ { "type": "url", "url": "https://example.com/character.jpg", "mediaType": "image/jpeg" }, { "type": "url", "url": "https://example.com/motion.mp4", "mediaType": "video/mp4" } ], "providerOptions": { "bytedance": { "referenceAudio": [ "https://example.com/sound.wav" ] } }, "resolution": "720p", "duration": 4 } ``` ### Draft preview [#draft-preview] Use `providerOptions.bytedance.draft: true` with `resolution: "480p"` to create a draft. Draft uses the normal 480p token rate. After it completes, use its public task ID for a separate 1080p final render. ```json { "model": "bytedance/seedance-2.5", "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.", "resolution": "480p", "aspectRatio": "16:9", "duration": 4, "generateAudio": true, "providerOptions": { "bytedance": { "draft": true } } } ``` ### Render a draft at 1080p [#render-a-draft-at-1080p] Send this body to `POST /v1/videos`, using the completed draft’s public `task_…` ID. The draft must belong to your account, use the same model and channel, and be less than 7 days old. This native draft lifetime is separate from video storage retention. ```json { "model": "bytedance/seedance-2.5", "draftTaskId": "task_YOUR_COMPLETED_DRAFT", "resolution": "1080p" } ``` Do not resend `prompt`, media, `duration`, `aspectRatio`, `seed`, `generateAudio`, `fps`, `draft` or `referenceAudio`. These settings come from the draft. You may set `providerOptions.bytedance.output_format` for the final output. The API returns a **new task ID**; poll `GET /v1/videos/{new_task_id}` for the final video and its Bunny URL. The final render is billed separately at the current 1080p rate and the original draft’s reference-video tier, using actual completion tokens. Polling does not regenerate or charge again. If submission is uncertain, do not automatically resubmit. ## MOV output [#mov-output] Set `providerOptions.bytedance.output_format` to `mov` for MOV or `mp4` for MP4 (default). This output option works for a new scene or a draft-to-final request. ```json { "model": "bytedance/seedance-2.5", "prompt": "A red ball on a plain table. Static camera.", "resolution": "480p", "duration": 4, "providerOptions": { "bytedance": { "output_format": "mov" } } } ``` After completion, `videos[0].url` is the signed Bunny URL of the original `.mov` file and `videos[0].mediaType` is `video/quicktime`. MOV is not converted to MP4. Browser playback depends on codec support; download the file if your browser cannot play it. Files are uploaded to Bunny; only file references and task metadata are stored in the database. Base64 media inputs are not accepted. ## Poll and download the video [#poll-and-download-the-video] An accepted task returns an object like this. Example IDs and timestamps are illustrative: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.5", "status": "queued", "progress": 0, "created_at": 1792022400 } ``` Poll `GET /v1/videos/{task_id}` with your API key. The query returns the same public task ID and model. Use `status` to decide when to stop polling; `progress` is not an estimate of remaining time. | Status | Meaning | Next step | | ------------- | --------------------------- | ---------------------------------- | | `queued` | The task has been accepted. | Continue polling. | | `in_progress` | Generation is running. | Continue polling. | | `completed` | The video is ready. | Read `videos[0].url` and download. | | `failed` | Generation failed. | Stop polling and inspect `error`. | A completed query includes `videos`, an array of objects containing `url` and `mediaType`. Timestamps use Unix seconds; `completed_at` appears when completion is recorded. ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.5", "status": "completed", "progress": 100, "created_at": 1792022400, "completed_at": 1792022460, "videos": [ { "url": "/v1/tasks/task_EXAMPLE/artifacts/video/content", "mediaType": "video/mp4" } ] } ``` When the returned URL is a relative path, resolve it against `https://api.wanapi.app` and authenticate with your API key. For the example above: ```bash curl "https://api.wanapi.app/v1/tasks/$TASK_ID/artifacts/video/content" \ -H "Authorization: Bearer $WAN_API_KEY" \ -o video.mp4 ``` If a signed HTTPS media URL is returned, use it directly without forwarding your API key to that host. Result URLs can expire. Save videos you want to keep to your own storage. Polling and downloading an existing result do not create another generation. A failed task includes an `error` object with `code` and `message`, for example: ```json { "id": "task_EXAMPLE", "object": "video", "model": "bytedance/seedance-2.5", "status": "failed", "error": { "code": "generation_failed", "message": "Video generation failed" } } ``` ## Billing and failure handling [#billing-and-failure-handling] The final charge follows actual video token usage and the current model rate. The Playground estimate is a maximum estimate, not a fixed quote. Longer clips and larger output resolutions can increase token usage. Failed requests are not charged. * **Invalid parameters:** correct the fields or input combination before submitting again. Check media formats and limits as well as URL syntax. * **Authentication or model access:** use a valid Seedance key enabled for the requested model. * **Insufficient balance:** add funds before a new paid request. A key limit does not add account credit. * **Temporary polling failure:** retry the GET with backoff and a maximum waiting period. A failed query does not mean the generation failed. * **Submission timeout or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. * **Download failure:** retry the existing result before starting a new generation. Keep the task ID and contact [support](https://funnyai.io/contact) if an uncertain submission needs investigation. [Download the Seedance 2.5 OpenAPI schema](https://funnyai.io/models/seedance-2-5/openapi.json). --- # Wan 3.0 Source: https://funnyai.io/docs/wan-3-0 Wan 3.0 supports text, images and reference media, with output at 480p, 720p or 1080p. Use this endpoint for the standard model; selecting 1080p does not switch it to Pro. [Model details and Playground](https://funnyai.io/models/wan-3-0). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key in [API key settings](https://funnyai.io/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. See [pricing](https://funnyai.io/pricing) for current rates. Each model has its own endpoint and [model page](https://funnyai.io/models). `GET /v1/models` lists the models available to your key. Choosing a higher resolution does not automatically change your model. | Setting | Wan 3.0 | | ------------ | --------------------------------------------------------------------- | | Model ID | `wan3.0-video` | | `resolution` | `480p`, `720p`, `1080p`; default: `1080p`. | | `duration` | 2–30 output seconds, or `-1` for automatic duration; default: `5`. | | `ratio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`; default: `adaptive`. | | `audio` | `true` by default. `false` does not reduce the rate. | The [shared request fields](https://funnyai.io/docs/wan-3-0#request-fields) describe all 14 native fields, media limits and input combinations. This model uses `wan3.0-video` in the URL for native requests and as the `model` value in [Responses requests](https://funnyai.io/docs/wan-3-0#synchronous-and-background-responses). ## Submit a Wan 3.0 task [#submit-a-wan-30-task] This is a two-second text-to-video request at this model's lowest resolution. Set `WAN_API_KEY` to your key on the server. The model is selected by the URL; do not add a `model` field to this native JSON body. ```bash curl https://api.wanapi.app/wan/v1/wan3.0-video/generation \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A blue ball rolls across a white table. Static camera.", "duration": 2, "resolution": "480p", "ratio": "16:9", "audio": false, "prompt_extend": false }' ``` ## Query a Wan 3.0 task [#query-a-wan-30-task] Save the returned `task_info.id` as `TASK_ID`, then query the same model endpoint. The submit response is a task receipt, not a completed video. Begin polling every five seconds; see [task statuses and downloads](https://funnyai.io/docs/wan-3-0#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/wan/v1/wan3.0-video/generation/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Wan 3.0 pricing [#wan-30-pricing] The table shows current USD rates per billable second. Reference video input seconds and generated output seconds both count. The five-second example assumes no reference video. See [billing and failure handling](https://funnyai.io/docs/wan-3-0#billing-and-failure-handling) for reservations and settlement. [View Wan 3.0 pricing](https://funnyai.io/models/wan-3-0#pricing). ## Request fields [#request-fields] All four models share these 14 native fields. Provide a prompt or at least one media input. Frames cannot be combined with reference inputs, `file` or `link`; `file` and `link` are mutually exclusive. | Field | Type | Contract | | ------------------ | --------- | --------------------------------------------------------------------------------------------- | | `prompt` | string | Up to 20,000 characters. | | `first_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `last_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `reference_images` | string\[] | Up to 10 images, using the same forms as a frame. | | `reference_videos` | string\[] | Up to 5 public MP4/MOV URLs; 1–15 seconds per clip and at most 15 reference seconds in total. | | `reference_audios` | string\[] | Up to 5 audio HTTP(S) URLs. | | `file` | string | Public document URL. | | `link` | string | Public web page URL. | | `resolution` | string | See the model table. Default: `1080p`. | | `ratio` | string | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`. Default: `adaptive`. | | `duration` | integer | 2–30 output seconds, or `-1` for automatic duration. Default: `5`. | | `audio` | boolean | Generate audio. Default: `true`. Disabling it does not reduce the rate. | | `seed` | integer | 0–2147483647. Omit for random generation. | | `prompt_extend` | boolean | Expand the prompt. Default: `true`. | Use stable, directly accessible media URLs that stay available until the task finishes. Video duration checks use bounded HTTP range reads; video servers must support those reads and expose readable MP4/MOV duration metadata. Redirects are not followed by duration checks. Private network URLs are not supported. The combined reference and output duration must not exceed 30 seconds. Playground accepts a JSON request body up to 32 MiB; use URLs for larger inputs. ## Poll and download the video [#poll-and-download-the-video] Every model's submit endpoint returns a public task ID. Save it before doing anything else. ```json { "task_info": { "id": "task_EXAMPLE", "status": "pending" } } ``` Use the query example in the matching model chapter. Start with a five-second interval and increase the delay after temporary errors. Keep each task's model ID together with its task ID; do not query it through a different model endpoint. The native statuses are `pending`, `processing`, `completed` and `failed`. A completed response includes `videos`, an array containing a complete signed Bunny CDN URL. ```json { "task_info": { "id": "task_EXAMPLE", "status": "completed" }, "videos": ["https://reapiflexible.b-cdn.net/flexible/v1/expires/2026-11/20261113T06/wanapi-task_EXAMPLE/video.mp4?token=HS256_SIGNATURE&expires=1794550071"] } ``` Use the returned URL directly for playback or download; no API key or Authorization header is required for that URL. Files follow the existing storage retention policy. Querying a task does not generate another video, charge again or extend file availability. Save files you want to keep to your own storage. Task queries require your API key and only return tasks owned by your account. ## Synchronous and background Responses [#synchronous-and-background-responses] For clients using the Responses API, `POST /v1/responses` accepts a model ID, a string `input` and the same native generation fields. Use `input` instead of `prompt`. Native media fields such as `reference_images` remain top-level fields. ```json { "model": "wan3.0-video", "input": "A blue ball rolls across a white table.", "resolution": "480p", "duration": 2, "background": true } ``` With `background: true`, save the response ID and poll `GET /v1/responses/{response_id}`. Without `background`, the HTTP request waits for completion. `stream: true` uses server-sent events while waiting. The final assistant output contains a signed video URL; treat it as a private capability link and do not publish it accidentally. Native task submission and background Responses are recommended for long generations and restrictive proxy timeouts. A disconnected or timed-out synchronous request does not cancel generation. The task remains on the server. Do not automatically submit the same generation again. ## Billing and failure handling [#billing-and-failure-handling] The price is the model's resolution rate multiplied by billable seconds. Reference video seconds and output seconds both count; text, images and audio inputs do not add video seconds. Fixed-duration requests without reference video reserve the requested output duration. Automatic duration and reference-video requests reserve up to 30 billable seconds, then settle to measured usage and return the unused reservation. Generation failures release the reservation. Polling does not create another generation or charge again. * **Invalid parameters:** correct the request before resubmitting. Unknown native fields are rejected. * **Insufficient balance:** add funds before a new paid request. A key's limit does not grant account credit. * **Rate limits or temporary polling failures:** retry only the query, with backoff and a maximum waiting period. * **Submission timeout, network interruption or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. * **Task failure:** show the failed state separately from an unavailable status query. * **Download failure:** retry downloading the existing completed task before starting another generation. Generation submissions are not automatically retried or switched to another model. There is no advertised cancellation, webhook or idempotency-key contract. Keep the task ID and contact [support](https://funnyai.io/contact) when an uncertain submission needs investigation. --- # Wan 3.0 Prime Source: https://funnyai.io/docs/wan-3-0-prime Wan 3.0 Prime uses a separate model ID and price schedule, with the same 480p, 720p and 1080p resolution choices. It accepts text, images and reference media. [Model details and Playground](https://funnyai.io/models/wan-3-0-prime). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key in [API key settings](https://funnyai.io/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. See [pricing](https://funnyai.io/pricing) for current rates. Each model has its own endpoint and [model page](https://funnyai.io/models). `GET /v1/models` lists the models available to your key. Choosing a higher resolution does not automatically change your model. | Setting | Wan 3.0 Prime | | ------------ | --------------------------------------------------------------------- | | Model ID | `wan3.0-video-prime` | | `resolution` | `480p`, `720p`, `1080p`; default: `1080p`. | | `duration` | 2–30 output seconds, or `-1` for automatic duration; default: `5`. | | `ratio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`; default: `adaptive`. | | `audio` | `true` by default. `false` does not reduce the rate. | The [shared request fields](https://funnyai.io/docs/wan-3-0-prime#request-fields) describe all 14 native fields, media limits and input combinations. This model uses `wan3.0-video-prime` in the URL for native requests and as the `model` value in [Responses requests](https://funnyai.io/docs/wan-3-0-prime#synchronous-and-background-responses). ## Submit a Wan 3.0 Prime task [#submit-a-wan-30-prime-task] This is a two-second text-to-video request at this model's lowest resolution. Set `WAN_API_KEY` to your key on the server. The model is selected by the URL; do not add a `model` field to this native JSON body. ```bash curl https://api.wanapi.app/wan/v1/wan3.0-video-prime/generation \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A blue glass bottle turns slowly on a white pedestal. Static camera.", "duration": 2, "resolution": "480p", "ratio": "16:9", "audio": false, "prompt_extend": false }' ``` ## Query a Wan 3.0 Prime task [#query-a-wan-30-prime-task] Save the returned `task_info.id` as `TASK_ID`, then query the same model endpoint. The submit response is a task receipt, not a completed video. Begin polling every five seconds; see [task statuses and downloads](https://funnyai.io/docs/wan-3-0-prime#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/wan/v1/wan3.0-video-prime/generation/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Wan 3.0 Prime pricing [#wan-30-prime-pricing] The table shows current USD rates per billable second. Reference video input seconds and generated output seconds both count. The five-second example assumes no reference video. See [billing and failure handling](https://funnyai.io/docs/wan-3-0-prime#billing-and-failure-handling) for reservations and settlement. [View Wan 3.0 Prime pricing](https://funnyai.io/models/wan-3-0-prime#pricing). ## Request fields [#request-fields] All four models share these 14 native fields. Provide a prompt or at least one media input. Frames cannot be combined with reference inputs, `file` or `link`; `file` and `link` are mutually exclusive. | Field | Type | Contract | | ------------------ | --------- | --------------------------------------------------------------------------------------------- | | `prompt` | string | Up to 20,000 characters. | | `first_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `last_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `reference_images` | string\[] | Up to 10 images, using the same forms as a frame. | | `reference_videos` | string\[] | Up to 5 public MP4/MOV URLs; 1–15 seconds per clip and at most 15 reference seconds in total. | | `reference_audios` | string\[] | Up to 5 audio HTTP(S) URLs. | | `file` | string | Public document URL. | | `link` | string | Public web page URL. | | `resolution` | string | See the model table. Default: `1080p`. | | `ratio` | string | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`. Default: `adaptive`. | | `duration` | integer | 2–30 output seconds, or `-1` for automatic duration. Default: `5`. | | `audio` | boolean | Generate audio. Default: `true`. Disabling it does not reduce the rate. | | `seed` | integer | 0–2147483647. Omit for random generation. | | `prompt_extend` | boolean | Expand the prompt. Default: `true`. | Use stable, directly accessible media URLs that stay available until the task finishes. Video duration checks use bounded HTTP range reads; video servers must support those reads and expose readable MP4/MOV duration metadata. Redirects are not followed by duration checks. Private network URLs are not supported. The combined reference and output duration must not exceed 30 seconds. Playground accepts a JSON request body up to 32 MiB; use URLs for larger inputs. ## Poll and download the video [#poll-and-download-the-video] Every model's submit endpoint returns a public task ID. Save it before doing anything else. ```json { "task_info": { "id": "task_EXAMPLE", "status": "pending" } } ``` Use the query example in the matching model chapter. Start with a five-second interval and increase the delay after temporary errors. Keep each task's model ID together with its task ID; do not query it through a different model endpoint. The native statuses are `pending`, `processing`, `completed` and `failed`. A completed response includes `videos`, an array containing a complete signed Bunny CDN URL. ```json { "task_info": { "id": "task_EXAMPLE", "status": "completed" }, "videos": ["https://reapiflexible.b-cdn.net/flexible/v1/expires/2026-11/20261113T06/wanapi-task_EXAMPLE/video.mp4?token=HS256_SIGNATURE&expires=1794550071"] } ``` Use the returned URL directly for playback or download; no API key or Authorization header is required for that URL. Files follow the existing storage retention policy. Querying a task does not generate another video, charge again or extend file availability. Save files you want to keep to your own storage. Task queries require your API key and only return tasks owned by your account. ## Synchronous and background Responses [#synchronous-and-background-responses] For clients using the Responses API, `POST /v1/responses` accepts a model ID, a string `input` and the same native generation fields. Use `input` instead of `prompt`. Native media fields such as `reference_images` remain top-level fields. ```json { "model": "wan3.0-video-prime", "input": "A blue ball rolls across a white table.", "resolution": "480p", "duration": 2, "background": true } ``` With `background: true`, save the response ID and poll `GET /v1/responses/{response_id}`. Without `background`, the HTTP request waits for completion. `stream: true` uses server-sent events while waiting. The final assistant output contains a signed video URL; treat it as a private capability link and do not publish it accidentally. Native task submission and background Responses are recommended for long generations and restrictive proxy timeouts. A disconnected or timed-out synchronous request does not cancel generation. The task remains on the server. Do not automatically submit the same generation again. ## Billing and failure handling [#billing-and-failure-handling] The price is the model's resolution rate multiplied by billable seconds. Reference video seconds and output seconds both count; text, images and audio inputs do not add video seconds. Fixed-duration requests without reference video reserve the requested output duration. Automatic duration and reference-video requests reserve up to 30 billable seconds, then settle to measured usage and return the unused reservation. Generation failures release the reservation. Polling does not create another generation or charge again. * **Invalid parameters:** correct the request before resubmitting. Unknown native fields are rejected. * **Insufficient balance:** add funds before a new paid request. A key's limit does not grant account credit. * **Rate limits or temporary polling failures:** retry only the query, with backoff and a maximum waiting period. * **Submission timeout, network interruption or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. * **Task failure:** show the failed state separately from an unavailable status query. * **Download failure:** retry downloading the existing completed task before starting another generation. Generation submissions are not automatically retried or switched to another model. There is no advertised cancellation, webhook or idempotency-key contract. Keep the task ID and contact [support](https://funnyai.io/contact) when an uncertain submission needs investigation. --- # Wan 3.0 Prime Pro Source: https://funnyai.io/docs/wan-3-0-prime-pro Wan 3.0 Prime Pro has its own model ID and rates, with 1080p, 2K and 4K output. It accepts text, images and reference media. It is a separate endpoint from Prime; requesting 4K on the Prime endpoint does not select Prime Pro. [Model details and Playground](https://funnyai.io/models/wan-3-0-prime-pro). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key in [API key settings](https://funnyai.io/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. See [pricing](https://funnyai.io/pricing) for current rates. Each model has its own endpoint and [model page](https://funnyai.io/models). `GET /v1/models` lists the models available to your key. Choosing a higher resolution does not automatically change your model. | Setting | Wan 3.0 Prime Pro | | ------------ | --------------------------------------------------------------------- | | Model ID | `w3.0-video-prime-pro` | | `resolution` | `1080p`, `2k`, `4k`; default: `1080p`. | | `duration` | 2–30 output seconds, or `-1` for automatic duration; default: `5`. | | `ratio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`; default: `adaptive`. | | `audio` | `true` by default. `false` does not reduce the rate. | The [shared request fields](https://funnyai.io/docs/wan-3-0-prime-pro#request-fields) describe all 14 native fields, media limits and input combinations. This model uses `w3.0-video-prime-pro` in the URL for native requests and as the `model` value in [Responses requests](https://funnyai.io/docs/wan-3-0-prime-pro#synchronous-and-background-responses). ## Submit a Wan 3.0 Prime Pro task [#submit-a-wan-30-prime-pro-task] This is a two-second text-to-video request at this model's lowest resolution. Set `WAN_API_KEY` to your key on the server. The model is selected by the URL; do not add a `model` field to this native JSON body. ```bash curl https://api.wanapi.app/wan/v1/w3.0-video-prime-pro/generation \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A camera glides past sunlit coastal cliffs above a calm sea.", "duration": 2, "resolution": "1080p", "ratio": "16:9", "audio": false, "prompt_extend": false }' ``` ## Query a Wan 3.0 Prime Pro task [#query-a-wan-30-prime-pro-task] Save the returned `task_info.id` as `TASK_ID`, then query the same model endpoint. The submit response is a task receipt, not a completed video. Begin polling every five seconds; see [task statuses and downloads](https://funnyai.io/docs/wan-3-0-prime-pro#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/wan/v1/w3.0-video-prime-pro/generation/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Wan 3.0 Prime Pro pricing [#wan-30-prime-pro-pricing] The table shows current USD rates per billable second. Reference video input seconds and generated output seconds both count. The five-second example assumes no reference video. See [billing and failure handling](https://funnyai.io/docs/wan-3-0-prime-pro#billing-and-failure-handling) for reservations and settlement. [View Wan 3.0 Prime Pro pricing](https://funnyai.io/models/wan-3-0-prime-pro#pricing). ## Request fields [#request-fields] All four models share these 14 native fields. Provide a prompt or at least one media input. Frames cannot be combined with reference inputs, `file` or `link`; `file` and `link` are mutually exclusive. | Field | Type | Contract | | ------------------ | --------- | --------------------------------------------------------------------------------------------- | | `prompt` | string | Up to 20,000 characters. | | `first_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `last_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `reference_images` | string\[] | Up to 10 images, using the same forms as a frame. | | `reference_videos` | string\[] | Up to 5 public MP4/MOV URLs; 1–15 seconds per clip and at most 15 reference seconds in total. | | `reference_audios` | string\[] | Up to 5 audio HTTP(S) URLs. | | `file` | string | Public document URL. | | `link` | string | Public web page URL. | | `resolution` | string | See the model table. Default: `1080p`. | | `ratio` | string | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`. Default: `adaptive`. | | `duration` | integer | 2–30 output seconds, or `-1` for automatic duration. Default: `5`. | | `audio` | boolean | Generate audio. Default: `true`. Disabling it does not reduce the rate. | | `seed` | integer | 0–2147483647. Omit for random generation. | | `prompt_extend` | boolean | Expand the prompt. Default: `true`. | Use stable, directly accessible media URLs that stay available until the task finishes. Video duration checks use bounded HTTP range reads; video servers must support those reads and expose readable MP4/MOV duration metadata. Redirects are not followed by duration checks. Private network URLs are not supported. The combined reference and output duration must not exceed 30 seconds. Playground accepts a JSON request body up to 32 MiB; use URLs for larger inputs. ## Poll and download the video [#poll-and-download-the-video] Every model's submit endpoint returns a public task ID. Save it before doing anything else. ```json { "task_info": { "id": "task_EXAMPLE", "status": "pending" } } ``` Use the query example in the matching model chapter. Start with a five-second interval and increase the delay after temporary errors. Keep each task's model ID together with its task ID; do not query it through a different model endpoint. The native statuses are `pending`, `processing`, `completed` and `failed`. A completed response includes `videos`, an array containing a complete signed Bunny CDN URL. ```json { "task_info": { "id": "task_EXAMPLE", "status": "completed" }, "videos": ["https://reapiflexible.b-cdn.net/flexible/v1/expires/2026-11/20261113T06/wanapi-task_EXAMPLE/video.mp4?token=HS256_SIGNATURE&expires=1794550071"] } ``` Use the returned URL directly for playback or download; no API key or Authorization header is required for that URL. Files follow the existing storage retention policy. Querying a task does not generate another video, charge again or extend file availability. Save files you want to keep to your own storage. Task queries require your API key and only return tasks owned by your account. ## Synchronous and background Responses [#synchronous-and-background-responses] For clients using the Responses API, `POST /v1/responses` accepts a model ID, a string `input` and the same native generation fields. Use `input` instead of `prompt`. Native media fields such as `reference_images` remain top-level fields. ```json { "model": "w3.0-video-prime-pro", "input": "A blue ball rolls across a white table.", "resolution": "1080p", "duration": 2, "background": true } ``` With `background: true`, save the response ID and poll `GET /v1/responses/{response_id}`. Without `background`, the HTTP request waits for completion. `stream: true` uses server-sent events while waiting. The final assistant output contains a signed video URL; treat it as a private capability link and do not publish it accidentally. Native task submission and background Responses are recommended for long generations and restrictive proxy timeouts. A disconnected or timed-out synchronous request does not cancel generation. The task remains on the server. Do not automatically submit the same generation again. ## Billing and failure handling [#billing-and-failure-handling] The price is the model's resolution rate multiplied by billable seconds. Reference video seconds and output seconds both count; text, images and audio inputs do not add video seconds. Fixed-duration requests without reference video reserve the requested output duration. Automatic duration and reference-video requests reserve up to 30 billable seconds, then settle to measured usage and return the unused reservation. Generation failures release the reservation. Polling does not create another generation or charge again. * **Invalid parameters:** correct the request before resubmitting. Unknown native fields are rejected. * **Insufficient balance:** add funds before a new paid request. A key's limit does not grant account credit. * **Rate limits or temporary polling failures:** retry only the query, with backoff and a maximum waiting period. * **Submission timeout, network interruption or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. * **Task failure:** show the failed state separately from an unavailable status query. * **Download failure:** retry downloading the existing completed task before starting another generation. Generation submissions are not automatically retried or switched to another model. There is no advertised cancellation, webhook or idempotency-key contract. Keep the task ID and contact [support](https://funnyai.io/contact) when an uncertain submission needs investigation. --- # Wan 3.0 Pro Source: https://funnyai.io/docs/wan-3-0-pro Wan 3.0 Pro accepts text, images and reference media and outputs at 1080p, 2K or 4K. Use the Pro endpoint for these resolution choices; 480p and 720p are not supported. [Model details and Playground](https://funnyai.io/models/wan-3-0-pro). ## Connect to Funny AI [#connect-to-wan-api] Use `https://api.wanapi.app` as the API base URL. Create a key in [API key settings](https://funnyai.io/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser. Access requires an enabled account with sufficient balance. See [pricing](https://funnyai.io/pricing) for current rates. Each model has its own endpoint and [model page](https://funnyai.io/models). `GET /v1/models` lists the models available to your key. Choosing a higher resolution does not automatically change your model. | Setting | Wan 3.0 Pro | | ------------ | --------------------------------------------------------------------- | | Model ID | `w3.0-video-pro` | | `resolution` | `1080p`, `2k`, `4k`; default: `1080p`. | | `duration` | 2–30 output seconds, or `-1` for automatic duration; default: `5`. | | `ratio` | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`; default: `adaptive`. | | `audio` | `true` by default. `false` does not reduce the rate. | The [shared request fields](https://funnyai.io/docs/wan-3-0-pro#request-fields) describe all 14 native fields, media limits and input combinations. This model uses `w3.0-video-pro` in the URL for native requests and as the `model` value in [Responses requests](https://funnyai.io/docs/wan-3-0-pro#synchronous-and-background-responses). ## Submit a Wan 3.0 Pro task [#submit-a-wan-30-pro-task] This is a two-second text-to-video request at this model's lowest resolution. Set `WAN_API_KEY` to your key on the server. The model is selected by the URL; do not add a `model` field to this native JSON body. ```bash curl https://api.wanapi.app/wan/v1/w3.0-video-pro/generation \ -H "Authorization: Bearer $WAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A camera moves slowly along a quiet waterfront at sunrise.", "duration": 2, "resolution": "1080p", "ratio": "16:9", "audio": false, "prompt_extend": false }' ``` ## Query a Wan 3.0 Pro task [#query-a-wan-30-pro-task] Save the returned `task_info.id` as `TASK_ID`, then query the same model endpoint. The submit response is a task receipt, not a completed video. Begin polling every five seconds; see [task statuses and downloads](https://funnyai.io/docs/wan-3-0-pro#poll-and-download-the-video). ```bash curl "https://api.wanapi.app/wan/v1/w3.0-video-pro/generation/$TASK_ID" \ -H "Authorization: Bearer $WAN_API_KEY" ``` ## Wan 3.0 Pro pricing [#wan-30-pro-pricing] The table shows current USD rates per billable second. Reference video input seconds and generated output seconds both count. The five-second example assumes no reference video. See [billing and failure handling](https://funnyai.io/docs/wan-3-0-pro#billing-and-failure-handling) for reservations and settlement. [View Wan 3.0 Pro pricing](https://funnyai.io/models/wan-3-0-pro#pricing). ## Request fields [#request-fields] All four models share these 14 native fields. Provide a prompt or at least one media input. Frames cannot be combined with reference inputs, `file` or `link`; `file` and `link` are mutually exclusive. | Field | Type | Contract | | ------------------ | --------- | --------------------------------------------------------------------------------------------- | | `prompt` | string | Up to 20,000 characters. | | `first_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `last_frame` | string | Image HTTP(S) URL, image data URI or Base64. | | `reference_images` | string\[] | Up to 10 images, using the same forms as a frame. | | `reference_videos` | string\[] | Up to 5 public MP4/MOV URLs; 1–15 seconds per clip and at most 15 reference seconds in total. | | `reference_audios` | string\[] | Up to 5 audio HTTP(S) URLs. | | `file` | string | Public document URL. | | `link` | string | Public web page URL. | | `resolution` | string | See the model table. Default: `1080p`. | | `ratio` | string | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`. Default: `adaptive`. | | `duration` | integer | 2–30 output seconds, or `-1` for automatic duration. Default: `5`. | | `audio` | boolean | Generate audio. Default: `true`. Disabling it does not reduce the rate. | | `seed` | integer | 0–2147483647. Omit for random generation. | | `prompt_extend` | boolean | Expand the prompt. Default: `true`. | Use stable, directly accessible media URLs that stay available until the task finishes. Video duration checks use bounded HTTP range reads; video servers must support those reads and expose readable MP4/MOV duration metadata. Redirects are not followed by duration checks. Private network URLs are not supported. The combined reference and output duration must not exceed 30 seconds. Playground accepts a JSON request body up to 32 MiB; use URLs for larger inputs. ## Poll and download the video [#poll-and-download-the-video] Every model's submit endpoint returns a public task ID. Save it before doing anything else. ```json { "task_info": { "id": "task_EXAMPLE", "status": "pending" } } ``` Use the query example in the matching model chapter. Start with a five-second interval and increase the delay after temporary errors. Keep each task's model ID together with its task ID; do not query it through a different model endpoint. The native statuses are `pending`, `processing`, `completed` and `failed`. A completed response includes `videos`, an array containing a complete signed Bunny CDN URL. ```json { "task_info": { "id": "task_EXAMPLE", "status": "completed" }, "videos": ["https://reapiflexible.b-cdn.net/flexible/v1/expires/2026-11/20261113T06/wanapi-task_EXAMPLE/video.mp4?token=HS256_SIGNATURE&expires=1794550071"] } ``` Use the returned URL directly for playback or download; no API key or Authorization header is required for that URL. Files follow the existing storage retention policy. Querying a task does not generate another video, charge again or extend file availability. Save files you want to keep to your own storage. Task queries require your API key and only return tasks owned by your account. ## Synchronous and background Responses [#synchronous-and-background-responses] For clients using the Responses API, `POST /v1/responses` accepts a model ID, a string `input` and the same native generation fields. Use `input` instead of `prompt`. Native media fields such as `reference_images` remain top-level fields. ```json { "model": "w3.0-video-pro", "input": "A blue ball rolls across a white table.", "resolution": "1080p", "duration": 2, "background": true } ``` With `background: true`, save the response ID and poll `GET /v1/responses/{response_id}`. Without `background`, the HTTP request waits for completion. `stream: true` uses server-sent events while waiting. The final assistant output contains a signed video URL; treat it as a private capability link and do not publish it accidentally. Native task submission and background Responses are recommended for long generations and restrictive proxy timeouts. A disconnected or timed-out synchronous request does not cancel generation. The task remains on the server. Do not automatically submit the same generation again. ## Billing and failure handling [#billing-and-failure-handling] The price is the model's resolution rate multiplied by billable seconds. Reference video seconds and output seconds both count; text, images and audio inputs do not add video seconds. Fixed-duration requests without reference video reserve the requested output duration. Automatic duration and reference-video requests reserve up to 30 billable seconds, then settle to measured usage and return the unused reservation. Generation failures release the reservation. Polling does not create another generation or charge again. * **Invalid parameters:** correct the request before resubmitting. Unknown native fields are rejected. * **Insufficient balance:** add funds before a new paid request. A key's limit does not grant account credit. * **Rate limits or temporary polling failures:** retry only the query, with backoff and a maximum waiting period. * **Submission timeout, network interruption or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task. * **Task failure:** show the failed state separately from an unavailable status query. * **Download failure:** retry downloading the existing completed task before starting another generation. Generation submissions are not automatically retried or switched to another model. There is no advertised cancellation, webhook or idempotency-key contract. Keep the task ID and contact [support](https://funnyai.io/contact) when an uncertain submission needs investigation. --- # Seedance 2.0 Fast vs Mini: which should you test? Source: https://funnyai.io/blog/seedance-2-0-fast-vs-mini **Seedance 2.0 Fast and Seedance 2.0 Mini share the same main output limits: 480p or 720p, four to fifteen seconds, and synchronized audio.** Mini has a lower published token rate, but neither the names nor the specification table establishes which gives you a usable shot sooner. Choose with a matched brief, current prices and a clear definition of an acceptable result. [1](https://funnyai.io/blog/seedance-2-0-fast-vs-mini#ref-1) [2](https://funnyai.io/blog/seedance-2-0-fast-vs-mini#ref-2) The [Fast model page](https://funnyai.io/models/seedance-2-0-fast) and [Mini model page](https://funnyai.io/models/seedance-2-0-mini) provide separate Playgrounds, samples, live rate tables and request previews. This guide explains what to compare before spending credits. It does not claim a measured quality or latency winner on Funny AI. ## Check the shared limits first [#check-the-shared-limits-first] | Setting | Seedance 2.0 Fast | Seedance 2.0 Mini | | ------------------------------- | -------------------------- | -------------------------- | | Output resolution | 480p, 720p | 480p, 720p | | Duration | 4–15 seconds, or automatic | 4–15 seconds, or automatic | | Default duration and resolution | 5 seconds, 720p | 5 seconds, 720p | | Output | MP4, 24 fps | MP4, 24 fps | | Image references | Up to 9 | Up to 9 | | Video references | Up to 3 | Up to 3 | | Audio references | Up to 3 | Up to 3 | | Generated audio | Supported | Supported | | Draft, 1080p or 4K | Not supported | Not supported | These facts were checked against first-party specifications on October 15, 2026. The standard [Seedance 2.0](https://funnyai.io/models/seedance-2-0) has different resolution options; do not transfer its 1080p or 4K settings to either variant. [Seedance 2.5](https://funnyai.io/models/seedance-2-5) offers a longer generation window and a larger reference allowance. A scene that requires twenty continuous seconds already falls outside both variants in this comparison. [1](https://funnyai.io/blog/seedance-2-0-fast-vs-mini#ref-1) The per-type reference counts also come with constraints. For each model, reference video must total no more than fifteen seconds, and reference audio has its own fifteen-second combined limit. Audio references require a reference image or video. First-frame and first/last-frame inputs cannot be combined with the mixed reference collection. Consult the model-specific guide before preparing assets. [3](https://funnyai.io/blog/seedance-2-0-fast-vs-mini#ref-3) [4](https://funnyai.io/blog/seedance-2-0-fast-vs-mini#ref-4) ## Compare the whole request cost [#compare-the-whole-request-cost] The model pages calculate the Funny AI price from the current rate configuration. Use those live figures when budgeting. Official comparison rates are linked alongside them; they are not a fallback quote when Funny AI pricing is unavailable. Without reference video, the generated output determines video-token usage. With reference video, both input and output contribute, and a minimum billable input allowance applies. The lower token rate in the reference-video column therefore does not imply a cheaper request. Adding a clip simply to reach that column can increase the total bill. Audio does not introduce a separate rate tier. [2](https://funnyai.io/blog/seedance-2-0-fast-vs-mini#ref-2) For a practical comparison, keep duration, resolution, framing and reference files identical. Compare the estimated maximum before each submission, then record the final cost beside the result. A cheaper attempt that needs several revisions can cost more per accepted shot than a more expensive attempt that works for the edit. A useful record has these columns: | Record | Why it matters | | --------------------------------- | -------------------------------------------------------------------------- | | Exact model and request | Establishes which variant and settings produced the clip | | Prompt and reference filenames | Prevents a changed input from being mistaken for a model difference | | Elapsed time | Measures the experience for that attempt, without promising future latency | | Final cost | Makes cost per accepted result possible to calculate | | Accepted or rejected, with reason | Separates an attractive image from a usable complete shot | ## What the two samples actually show [#what-the-two-samples-actually-show] The Fast page illustrates a yellow shoe on a turntable. This is a Wan 3.0 scene illustration that can help you plan a product-motion brief; it is not a Seedance 2.0 Fast output. For an actual comparison, inspect whether the selected model keeps the shoe's shape and details consistent through the rotation. The Mini page illustrates lavender jellyfish in an aquarium, also generated with Wan 3.0. It suggests a brief involving translucent subjects and continuous motion; it is not a Seedance 2.0 Mini output. Test those requirements with the selected model before using the result in your application. Both illustrations were generated with Wan 3.0 at 480p for five seconds, with audio disabled. The stills on each page were extracted from that page's own video. They are **not outputs from the models being compared** and cannot establish a speed advantage, a success rate or a cost-per-result claim for Fast or Mini. ## Run a comparison that answers your question [#run-a-comparison-that-answers-your-question] Choose the brief from your actual work. For a product shot, define the product details that must remain recognizable. For a character scene, specify the action and the moment it ends. For an environmental insert, decide which elements stay stable and which move. For example, a small motion study could use this prompt: > A red paper boat floats slowly across a quiet pond. Keep the boat fully visible as the camera makes a gentle push-in. Soft morning light, continuous ripples and quiet water ambience. One uninterrupted shot. Use the same prompt for both models, at five seconds, 720p and 16:9, with generated audio enabled. Start without references if you want to isolate text direction. If your production brief depends on a reference image, use that same image in both requests instead. This is a proposed test brief, not a report of a test we have run. Before generating, write down the acceptance criteria: no unexpected cut, a recognizable boat through the whole clip, continuous movement and suitable sound. Review video at full size, then listen separately. Record specific failures rather than a vague quality score. If you revise the prompt for one model, give the other the same revised brief before comparing again. A single successful result cannot establish consistent performance. A larger repeated test can improve confidence, but it also costs money; decide the scope and budget before expanding it. ## Choose the next step from your constraints [#choose-the-next-step-from-your-constraints] If you need a focused 720p shot and want to investigate budget, Mini is a reasonable candidate to test against your acceptance criteria. If you are considering Fast for a motion-heavy brief, test the action and actual elapsed time rather than assuming its name guarantees a particular turnaround. If either model misses a critical detail, revise the reference roles or scene complexity before drawing a conclusion about the entire model. For an application, keep each variant explicit in saved requests. The [Fast integration guide](https://funnyai.io/docs/seedance-2-0-fast) and [Mini integration guide](https://funnyai.io/docs/seedance-2-0-mini) document their model identifiers, fields and task retrieval. Native editing, extension and final-frame-image capabilities are not exposed by this Funny AI integration, so do not design around them from a general model announcement alone. Return to the [Fast Playground](https://funnyai.io/models/seedance-2-0-fast#playground) or [Mini Playground](https://funnyai.io/models/seedance-2-0-mini#playground) to prepare your request. Playing either existing sample does not spend credits. Generating a new result requires an available service and enough balance for the displayed estimate. ## Sources [#sources] 1. [BytePlus: Seedance 2.0 series tutorial](https://docs.byteplus.com/en/docs/ModelArk/2291680), model-specific capabilities and output limits. Checked October 15, 2026. 2. [BytePlus: ModelArk pricing](https://docs.byteplus.com/en/docs/ModelArk/1544106), international video-token rates and reference-video billing. Checked October 15, 2026. 3. [Seedance 2.0 Fast endpoint specifications](https://ai-gateway.vercel.sh/v1/models/bytedance/seedance-2.0-fast/endpoints), supported input and output settings. Checked October 15, 2026. 4. [Seedance 2.0 Mini endpoint specifications](https://ai-gateway.vercel.sh/v1/models/bytedance/seedance-2.0-mini/endpoints), supported input and output settings. Checked October 15, 2026. --- # Seedance 2.5 vs Seedance 2.0: which fits your scene? Source: https://funnyai.io/blog/seedance-2-5-vs-2-0 The clearest reason to choose **Seedance 2.5 over Seedance 2.0** is a scene that needs more time or more reference material. ByteDance lists a maximum single-generation duration of 30 seconds for the newer model, compared with 15 seconds for the earlier one. Both create video with synchronized sound and accept visual and audio references. Those specifications help narrow your choice; they do not establish a winner for every shot. [1](https://funnyai.io/blog/seedance-2-5-vs-2-0#ref-1) [2](https://funnyai.io/blog/seedance-2-5-vs-2-0#ref-2) The [Seedance 2.5 model page](https://funnyai.io/models/seedance-2-5) and [Seedance 2.0 model page](https://funnyai.io/models/seedance-2-0) collect their specifications and sample videos. Each Playground shows current pricing, an API request preview and generation availability. This guide helps you prepare a comparison, with the limits of the available evidence made explicit. ## Compare duration and reference capacity first [#compare-duration-and-reference-capacity-first] | Capability | Seedance 2.5 | Seedance 2.0 | | ------------------------------ | ----------------- | --------------------- | | Maximum single-generation clip | 30 seconds | 15 seconds | | Reference images | Up to 30 | Up to 9 | | Reference video clips | Up to 10 | Up to 3 | | Reference audio clips | Up to 10 | Up to 3 | | Audio generated with video | Yes | Yes | | Output resolution | 480p, 720p, 1080p | 480p, 720p, 1080p, 4K | These are model capabilities, checked against ByteDance's published material on October 14, 2026. Per-type reference limits do not remove the other requirements of an input mode. Check the requirements for combining images, video and audio before preparing the complete reference set. [1](https://funnyai.io/blog/seedance-2-5-vs-2-0#ref-1) [2](https://funnyai.io/blog/seedance-2-5-vs-2-0#ref-2) [3](https://funnyai.io/blog/seedance-2-5-vs-2-0#ref-3) A ten-second product reveal fits within either generation window. A continuous twenty-second interaction needs the longer window, unless you redesign it as separate shots. Likewise, a scene with twelve distinct image references exceeds the earlier model's image allowance. Use these concrete requirements before comparing less measurable claims about cinematic quality. ## Assign a job to every reference [#assign-a-job-to-every-reference] Reference capacity matters only when the material communicates something useful. For a product scene, an image might define the object's shape, a video might show the camera movement, and an audio clip might guide the rhythm. Tell the model which role each asset serves. More references can also introduce contradictions. A daylight product photograph and a night-time motion example may disagree about lighting. A movement reference may contain a person whose appearance you do not want copied. Write down what should carry over, then remove any asset that has no clear purpose. For the first comparison, use the smallest reference set that both models support. Test the larger allowance separately if your project actually needs it. Otherwise, you would be changing both the model and the creative instructions at once. ## What the two samples can tell you [#what-the-two-samples-can-tell-you] The Seedance 2.5 page illustrates a traveler in a red coat on a bridge. This scene was generated with Wan 3.0 at 480p for five seconds, with audio disabled. It illustrates a possible creative brief; it is not a Seedance 2.5 output or a demonstration of its draft mode. The Seedance 2.0 page illustrates a red panda in a café, also generated with Wan 3.0 at 480p for five seconds, with audio disabled. This illustration does not establish Seedance 2.0 motion quality, audio quality or output resolution. **Neither illustration is a Seedance benchmark or a controlled comparison between these models.** The stills on each page are extracted from that page's own video. Compare actual outputs from the selected model before drawing conclusions about quality or latency. ## Separate output size from generation quality [#separate-output-size-from-generation-quality] BytePlus documents 4K output for the standard Seedance 2.0 model, subject to version and input-mode restrictions. That capability does not automatically apply to Fast or Mini variants, and the Wan 3.0 illustrations on these pages do not test Seedance 4K output. [3](https://funnyai.io/blog/seedance-2-5-vs-2-0#ref-3) The Seedance 2.5 page lists output options through 1080p. We have not verified native 4K generation for it. A file's dimensions establish its delivered size; they do not reveal whether an earlier stage used a smaller image. To investigate upscaling, keep the prompt, references, duration and mode fixed, then compare fine detail and motion across actual outputs. Even that comparison cannot prove an undocumented internal rendering process. ## Use one brief and record the result [#use-one-brief-and-record-the-result] A useful first brief is deliberately small: > A red paper boat drifts across a calm pond at sunrise. Gentle ripples, soft golden light, a slow dolly-in. Keep the boat's shape consistent throughout the shot. Use the same five-second duration, supported resolution and audio setting for both models. Record whether you used a draft mode. Then review: 1. **Instruction following:** Does the boat drift and does the camera move as requested? 2. **Continuity:** Does the boat retain its shape, colour and position relative to the water? 3. **Motion and detail:** Are ripples and reflections coherent when the clip plays at full size? 4. **Sound, when enabled:** Does the ambience fit the scene without unexpected voices or abrupt changes? Measure elapsed time from submitting the request to receiving a playable result. Keep the actual charge with the settings, and count rejected outputs when comparing the cost of obtaining a usable shot. One successful request is one observation, not a reliable average or a speed guarantee. Start with [Seedance 2.0](https://funnyai.io/models/seedance-2-0) when its documented duration and reference limits fit your brief. Consider [Seedance 2.5](https://funnyai.io/models/seedance-2-5) when a continuous scene needs more than 15 seconds or your reference set exceeds those limits. For everything else, a matching test is more useful than assuming that the newer version will always be sharper, faster or cheaper. ## Sources [#sources] 1. [ByteDance: Introducing Seedance 2.5](https://seed.bytedance.com/en/blog/one-take-creation-flexible-referencing-introducing-seedance-2-5) — duration, reference capacity and audio-video capabilities. 2. [ByteDance: Seedance 2.0 official launch](https://seed.bytedance.com/en/blog/seedance-2-0-official-launch) — multimodal inputs, generation duration and sound. 3. [BytePlus: Seedance 2.0](https://docs.byteplus.com/en/docs/modelark/seedance-2-0) — model versions, output options and reference constraints. --- # Wan 3.0 API guide: models, inputs, and your first video Source: https://funnyai.io/blog/wan-3-api-guide The first decision in a Wan 3.0 API integration is what you want the model to work from: a written scene, a starting image, or a set of references. Alibaba Cloud documents Wan 3.0 as a video model that can generate up to 30 seconds in one pass and accept text, images, audio, video, and documents. [1](https://funnyai.io/blog/wan-3-api-guide#ref-1) This guide explains those choices and how to prepare a first test. Funny AI's [integration documentation](https://funnyai.io/docs/integration) describes the published API endpoint and API key setup. Model rates are listed on the [pricing page](https://funnyai.io/pricing). Each model below has its own specifications page. ## Understand the model names [#understand-the-model-names] Wan 3.0 is the model family. Comfy's official integration also lists `wan3.0-video-prime` as a selectable model. That confirms Prime is a distinct option, but a provider's model name alone does not establish its request schema, availability on another service, or the turnaround your application will get. [2](https://funnyai.io/blog/wan-3-api-guide#ref-2) | Name | What to check before integrating | | ---------------------------------------------- | ---------------------------------------------------------------- | | [Wan 3.0](https://funnyai.io/models/wan-3-0) | Text, image and reference workflows; 480p, 720p and 1080p output | | [Wan 3.0 Prime](https://funnyai.io/models/wan-3-0-prime) | A separate Prime model with its own rates; output up to 1080p | | [Wan 3.0 Pro](https://funnyai.io/models/wan-3-0-pro) | The documented Pro option for 1080p, 2K and 4K output | | [Wan 3.0 Prime Pro](https://funnyai.io/models/wan-3-0-prime-pro) | A separate Prime Pro option with 1080p, 2K and 4K settings | Prime and Pro are distinct variants: compare the resolution options and exact model identifier before choosing. Wan 3.0 and Prime support output up to 1080p; Pro and Prime Pro add 2K and 4K options. For a useful comparison, send the same prompt and references at the same duration and resolution. Record completion time, cost, and whether the result meets your brief. A model label is not a substitute for that test. ## Choose the input that matches your material [#choose-the-input-that-matches-your-material] Comfy documents three Wan 3.0 workflows: text to video, image to video, and reference to video. Its image workflow accepts a first frame and an optional last frame. Its reference workflow uses images, video, and audio, with tags such as `@Image1`, `@Video1`, and `@Audio1` to describe each input's role. These names and tags belong to that integration; use your API provider's documented fields. [2](https://funnyai.io/blog/wan-3-api-guide#ref-2) | Your starting material | A practical first test | | -------------------------- | ------------------------------------------------------------------------ | | A written scene | Describe one subject, one action, and one camera move | | A product photograph | Explain the motion while identifying details that should stay consistent | | Several references | Assign a role to each: identity, product appearance, movement, or sound | | A presentation or document | Start with one short section and a clear audience and message | Alibaba's document input supports one file or link, with files up to 100 MB. The 50-page limit applies to PDF, DOCX, DOC, PPTX, PPT, KEY and PAGES files. A gateway may expose fewer input modes, so verify document support before building an upload flow around it. [1](https://funnyai.io/blog/wan-3-api-guide#ref-1) ## Make the first test easy to evaluate [#make-the-first-test-easy-to-evaluate] Start with a short clip and explicit output settings. For example, test a five-second product shot with a slow camera move and no spoken dialogue. This is a suggested test brief, not an API payload: > A ceramic coffee cup sits beside a window in soft morning light. The camera moves slowly toward the cup as steam rises. Keep the cup's shape and color consistent. Use quiet room ambience, with no speech. Set duration, resolution, aspect ratio, and audio intentionally wherever your provider exposes them. Comfy's current Wan workflow includes audio by default and offers 480p, 720p, and 1080p output. Those documented settings are a useful starting point, not a guarantee that every Wan endpoint exposes the same controls. [2](https://funnyai.io/blog/wan-3-api-guide#ref-2) Review the result for the things your application actually needs: subject consistency, requested motion, audio, and usable composition. Alibaba identifies audio texture and accurate on-screen text as areas still being refined, so inspect generated speech and lettering before using a result in production. [1](https://funnyai.io/blog/wan-3-api-guide#ref-1) ## Check the API contract before building the workflow [#check-the-api-contract-before-building-the-workflow] Before connecting a production application, confirm the exact model ID, authentication method, accepted media format, task submission and result retrieval flow, error behavior, and billing rules in the provider's documentation. Keep these details separate from the creative prompt. For Funny AI, start with the [model overview](https://funnyai.io/models). A successful authenticated request to the published endpoint should be your first integration milestone; the marketing page alone is not an API specification. ## Sources [#sources] 1. Alibaba Cloud, [Wan3.0: 30-Second AI Video Generation from Any Input](https://www.alibabacloud.com/blog/wan3-0-30-second-ai-video-generation-from-any-input_603452). Published August 13, 2026; checked October 13, 2026. 2. Comfy, [Wan 3.0 Video Generation in ComfyUI](https://docs.comfy.org/tutorials/partner-nodes/wan/wan3-0). Checked October 13, 2026. Settings cited here describe Comfy's integration.