{
 "spec_version": 1,
 "model": "bytedance/seedance-2.0-fast-upscaled",
 "type": "video",
 "input_modalities": [
  "text"
 ],
 "output_modalities": [
  "video"
 ],
 "context_window": null,
 "max_output_tokens": null,
 "endpoint": {
  "method": "POST",
  "path": "/v1/videos"
 },
 "async": {
  "poll": "GET /v1/videos/{video_id}",
  "download": "GET /v1/videos/{video_id}/content"
 },
 "parameters": [
  {
   "name": "model",
   "type": "string",
   "required": true,
   "description": "This model's ID."
  },
  {
   "name": "prompt",
   "type": "string",
   "required": true,
   "description": "What happens in the clip."
  },
  {
   "name": "duration",
   "type": "integer",
   "description": "Length in whole seconds. `seconds` is accepted too.",
   "minimum": 4,
   "maximum": 15,
   "default": 5
  },
  {
   "name": "resolution",
   "type": "string",
   "enum": [
    "720p",
    "1080p"
   ],
   "description": "Output resolution; lower is faster and cheaper."
  },
  {
   "name": "aspect_ratio",
   "type": "string",
   "enum": [
    "16:9",
    "4:3",
    "1:1",
    "3:4",
    "9:16",
    "21:9",
    "adaptive"
   ],
   "description": "Output aspect ratio. `adaptive` follows the first frame (the default when one is sent and no ratio is). If the request is served where `adaptive` is not available it is ignored and named in the `x-oceantoken-dropped-params` response header."
  },
  {
   "name": "generate_audio",
   "type": "boolean",
   "description": "`true` for a clip with sound, `false` for a silent one."
  },
  {
   "name": "frame_images",
   "type": "array",
   "maxItems": 2,
   "description": "The first frame and last frame: `{\"type\": \"image_url\", \"frame_type\": \"first_frame\", \"image_url\": {\"url\": ...}}`.",
   "frame_types": [
    "first_frame",
    "last_frame"
   ]
  },
  {
   "name": "omni_reference_task_type",
   "type": "string",
   "enum": [
    "auto",
    "reference",
    "edit",
    "extend"
   ],
   "description": "What a request with reference media asks for: `reference` builds a new clip from them, `edit` changes the reference video, `extend` continues it, `auto` lets the model decide from the prompt. Say the same in the prompt (for example \"continue this video\"): the model also goes by the prompt. If the request is served where this is not available it is ignored and named in the `x-oceantoken-dropped-params` response header. Left out, the model decides from the prompt."
  },
  {
   "name": "input_references",
   "type": "array",
   "description": "Reference media the clip is built from: up to 9 images, up to 3 videos, up to 3 audios. Each `{\"type\": \"image_url\" | \"video_url\" | \"audio_url\", ...: {\"url\": ...}}`.",
   "limits": {
    "images": 9,
    "videos": 3,
    "audios": 3
   }
  }
 ],
 "response": {
  "fields": [
   {
    "name": "id",
    "type": "string",
    "description": "The job's ID; poll it."
   },
   {
    "name": "status",
    "type": "string",
    "enum": [
     "queued",
     "in_progress",
     "completed",
     "failed"
    ],
    "description": "Where the job is."
   },
   {
    "name": "seconds",
    "type": "string",
    "description": "Length of the clip."
   },
   {
    "name": "size",
    "type": "string",
    "description": "Width x height of the clip."
   },
   {
    "name": "content_url",
    "type": "string",
    "description": "Once completed: the MP4, valid for 24 hours."
   },
   {
    "name": "error",
    "type": "object",
    "description": "On a failed job: `code` and `message`."
   }
  ],
  "example": {
   "id": "video_...",
   "object": "video",
   "status": "completed",
   "model": "bytedance/seedance-2.0-fast-upscaled",
   "seconds": "5",
   "size": "1280x720",
   "created_at": 1792000000,
   "completed_at": 1792000095,
   "content_url": "https://...",
   "error": null
  }
 },
 "examples": [
  {
   "title": "Text to video",
   "request": {
    "model": "bytedance/seedance-2.0-fast-upscaled",
    "prompt": "A paper boat drifting down a rain-soaked street",
    "duration": 5,
    "resolution": "720p"
   }
  }
 ],
 "input_schema": {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
   "model",
   "prompt"
  ],
  "properties": {
   "model": {
    "type": "string",
    "description": "This model's ID."
   },
   "prompt": {
    "type": "string",
    "description": "What happens in the clip."
   },
   "duration": {
    "type": "integer",
    "description": "Length in whole seconds. `seconds` is accepted too.",
    "default": 5,
    "minimum": 4,
    "maximum": 15
   },
   "resolution": {
    "type": "string",
    "description": "Output resolution; lower is faster and cheaper.",
    "enum": [
     "720p",
     "1080p"
    ]
   },
   "aspect_ratio": {
    "type": "string",
    "description": "Output aspect ratio. `adaptive` follows the first frame (the default when one is sent and no ratio is). If the request is served where `adaptive` is not available it is ignored and named in the `x-oceantoken-dropped-params` response header.",
    "enum": [
     "16:9",
     "4:3",
     "1:1",
     "3:4",
     "9:16",
     "21:9",
     "adaptive"
    ]
   },
   "generate_audio": {
    "type": "boolean",
    "description": "`true` for a clip with sound, `false` for a silent one."
   },
   "frame_images": {
    "type": "array",
    "description": "The first frame and last frame: `{\"type\": \"image_url\", \"frame_type\": \"first_frame\", \"image_url\": {\"url\": ...}}`.",
    "maxItems": 2
   },
   "omni_reference_task_type": {
    "type": "string",
    "description": "What a request with reference media asks for: `reference` builds a new clip from them, `edit` changes the reference video, `extend` continues it, `auto` lets the model decide from the prompt. Say the same in the prompt (for example \"continue this video\"): the model also goes by the prompt. If the request is served where this is not available it is ignored and named in the `x-oceantoken-dropped-params` response header. Left out, the model decides from the prompt.",
    "enum": [
     "auto",
     "reference",
     "edit",
     "extend"
    ]
   },
   "input_references": {
    "type": "array",
    "description": "Reference media the clip is built from: up to 9 images, up to 3 videos, up to 3 audios. Each `{\"type\": \"image_url\" | \"video_url\" | \"audio_url\", ...: {\"url\": ...}}`."
   }
  }
 }
}
