Build with Wan 2.5
Make your first request
Use your Sorceress API key on your server. The playground uses your signed-in account; your application uses the same model with an API key.
curl -X POST 'https://sorceress.games/api/v1/jobs' \
-H 'Authorization: Bearer $SORCERESS_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"model": "wan-2-5-image-to-video",
"input": {
"prompt": "<prompt>",
"image_url": "<image_url>",
"duration": "<duration>",
"resolution": "<resolution>"
}
}'Inputs & settings
seedintegerRandom seed for reproducibility. If omitted, a random seed is chosen.
promptstringRequiredThe text prompt describing the desired video motion. Maximum length: 800 characters.
durationstringRequiredThe duration of the generated video in seconds. `5`: 5 seconds `10`: 10 seconds
Options: 5, 10
image_urlstringRequiredURL of the image to use as the first frame. Must be publicly accessible. Accepted types: `image/jpeg`, `image/png`, `image/webp` Max size: 10.0MB
resolutionstringRequiredRequired. 720p or 1080p.
Options: 720p, 1080p
nsfw_checkerbooleanDefaults to false. When false, no additional content filtering is applied and results are returned directly by the model.
negative_promptstringNegative prompt used to describe content to avoid. Maximum length: 500 characters.
enable_prompt_expansionbooleanWhether to enable prompt rewriting using LLM. Boolean value: `true` / `false`
Full input schema
{
"type": "object",
"required": [
"prompt",
"image_url",
"duration",
"resolution"
],
"properties": {
"seed": {
"type": "integer",
"title": "Seed",
"description": "Random seed for reproducibility. If omitted, a random seed is chosen."
},
"prompt": {
"type": "string",
"title": "Prompt",
"maxLength": 800,
"description": "The text prompt describing the desired video motion. Maximum length: 800 characters."
},
"duration": {
"enum": [
"5",
"10"
],
"type": "string",
"title": "Duration",
"description": "The duration of the generated video in seconds. `5`: 5 seconds `10`: 10 seconds"
},
"image_url": {
"type": "string",
"title": "Image URL",
"format": "uri",
"x-media": "image",
"description": "URL of the image to use as the first frame. Must be publicly accessible. Accepted types: `image/jpeg`, `image/png`, `image/webp` Max size: 10.0MB"
},
"resolution": {
"enum": [
"720p",
"1080p"
],
"type": "string",
"title": "Resolution",
"description": "Required. 720p or 1080p."
},
"nsfw_checker": {
"type": "boolean",
"title": "NSFW checker",
"description": "Defaults to false. When false, no additional content filtering is applied and results are returned directly by the model."
},
"negative_prompt": {
"type": "string",
"title": "Negative prompt",
"maxLength": 500,
"description": "Negative prompt used to describe content to avoid. Maximum length: 500 characters."
},
"enable_prompt_expansion": {
"type": "boolean",
"title": "Enable prompt expansion",
"description": "Whether to enable prompt rewriting using LLM. Boolean value: `true` / `false`"
}
}
}Results, saved runs & billing
Media requests return a job ID. Poll GET /api/v1/jobs/:id until it succeeds or fails; keep the same ID while it is processing. Long chat requests can also return a saved job to poll. Completed outputs are stored in your account, and successful work is billed using your model's current rates.
A multi-step workflow may include separately billed successful actions. If a connection drops, check your saved run before submitting it again.






