TokenTable Unified API Reference

One credential for text, image, video, and audio

Released: 2026-11-03 (build 30dcc0ca9856) · Base URL: https://tokentable.asia/v1

PDF · Markdown (by topic) · llms.txt · Video integration guide

The model catalog is a point-in-time snapshot, not a promise of permanent availability.

Authentication

Use Authorization: Bearer <TOKEN>. Only the Responses and Anthropic Messages compatible endpoints listed by the manifest may use x-api-key.

manifest: none · The manifest requires no authentication.

api: bearer; compatible endpoints also accept x-api-key · The API uses Bearer; only listed compatible endpoints also accept x-api-key.

header: Authorization · Primary authentication header name.

alternateHeader: x-api-key for Responses and Anthropic Messages endpoints · Alternate header for compatible endpoints.

credentialAcquisition: Create and manage credentials in the TokenTable member center. · Create and manage credentials in the TokenTable member center.

Security and data handling

readOnly: true · The documentation endpoint is read-only.

contentRetention: none · Request content is not retained.

logging: metadata-only · Only metadata is logged.

training: false · Content is not used for training.

transport: TLS 1.2+ · Transport requires at least TLS 1.2.

warning: Never place credentials in URLs, prompts, request bodies, logs, screenshots, or support messages. · Never put credentials in URLs, prompts, request bodies, logs, screenshots, or support messages.

Never guess models, durations, upload limits, sizes, or points. Read discovery and the authenticated member catalog; stop when a required field is absent.

verifiedDurations reports verified capability; billableDurations reports quoteable durations. They are not interchangeable.

Native image Phase A, video, and batch generation are asynchronous. Poll the supported status endpoint; succeeded means generation completed and points were captured, while delivery_failed identifies a later delivery failure. API-key clients use the returned delivery descriptor without cookies.

T2V uses JSON. I2V start frames follow the operation contract imageUpload; a last frame is allowed only when lastFrameUpload is non-null. Seedance 2.5 I2V_LAST requires both imageUpload and lastFrameUpload. R2V reference images on 2.5 and 2.0 / 2.0-fast / 2.0-mini follow each model public referenceImageUpload counts, sizes and mutually exclusive fields. The 2.0 series is exposed only with C/C3 evidence, never wave B or missing evidence. On the 2.0 series, send image plus lastImage and omit operation for first-and-last frames. Kling V3 V2V Edit separately accepts MP4 or MOV through videoUpload; duration must equal the source video length rounded to a whole 3–10 seconds, audio=false is fixed, and exact points come only from the member catalog. Auto remains closed.

400 means correct or clarify the request; 401 means credentials failed; 402 means quota or points rejection; 403 means model or entitlement rejection; 429 means wait for the limit window; 5xx does not prove billing or settlement failed.

Hold, capture, and refund are distinct ledger states. A hold is not a capture, and a failed generation is not automatically a refund. Reconcile the response and member ledger before retrying.

TokenTable Auto multi-turn media contract

External tools set only the Base URL, API key, and model=auto, and must resend the complete user and assistant confirmation transcript on every turn.

POST /v1/chat/completions · model=auto

Resend the complete user and assistant media-confirmation transcript on every turn. previous_response_id alone is unsupported.

stages: parameters → tier → entitlement → model → quote → final_confirmation

X-TT-Auto-Stage: parameters / tier / entitlement / model / quote / attachment / invalid_state / state_unavailable / submitted / already_submitted

confirmation: 確認生成 / Confirm generation · TTL 1800s

No points are held or charged and no generation provider is called before final confirmation.

Advanced candidates are disclosed only after explicit advanced intent and an active matching entitlement.

A repeated final confirmation is rejected and never dispatches a second provider task.

No points or provider call occurs before final confirmation; a repeated confirmation never dispatches again.

Chat attachments are never silently converted to I2V, R2V, or V2V. Re-upload through the matching native media endpoint.

Public capability snapshot

Model discovery: GET /v1/me/model-catalog with a member JWT or active programmatic API key returns the account-specific usable models and actual points contract. GET /v1/models is only the anonymous compatibility listing.

Constraints: Use only values returned by discovery and endpoint validation. This manifest does not invent durations, sizes, prices, or unavailable models.

Anonymous media models image: wan2.7-image, kling/kling-v3-omni-image-generation, qwen-image-3.0, volcengine/doubao-seedream-5.0-pro, volcengine/doubao-seedream-5.0-flash

Anonymous media models video: wan2.6-t2v, kling/kling-v3-omni-video-generation, happyhorse-1.1-t2v

Anonymous media models audio: cosyvoice-v2

Protocol errors

400 · fastify · Request or schema validation failed. · Contract semantics: malformed JSON or request schema validation failed

413 · fastify · The body or image is too large. · Contract semantics: request body exceeds the configured limit

415 · fastify · The media type is unsupported. · Contract semantics: unsupported request media type

Endpoint contracts

GET /v1/models

models · synchronous · none · Availability: public

HTTP statuses: 200, 429

Request (application/json)

    Response (application/json)

    • object:string · required
    • data:model[] · required · owned_by is always "tokentable"; it does not identify the model vendor or the serving provider. Read the model brand from the id.

    Errors: 429 · fastify · A rate or plan limit was reached. · Contract semantics: global rate limit reached

    POST /v1/chat/completions

    chatCompletions · streaming-optional · bearer · Availability: public

    HTTP statuses: 200, 400, 401, 402, 403, 409, 413, 415, 422, 429, 502, 503, 504

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • model:string · optional · Omit it or send "auto" for smart routing, or send an id from GET /v1/models. An id that is not in the catalog is not rejected: the request is routed as auto, which may use a free side model. Check the id against GET /v1/models first. Unlike POST /v1/media/image, an unknown chat model id does not return 400.
    • messages:message[] · required · For papaya-1.0-spicy, images go in image_url parts as either a public https URL or a base64 data URL (data:image/jpeg;base64,...), so an image can be uploaded directly; the whole request must stay under 8 MiB. A user message may also carry a UTF-8 text file (.md, .markdown or .txt, up to 300 KB) as a file part: {"type":"file","file":{"filename":"chapter1.md","file_data":"data:text/markdown;base64,..."}}. The file text is passed to the model inside that message, and the whole request must still fit the model; split longer files and send the parts in separate requests. file_id is not supported. It may also carry one MP4 video as {"type":"video_url","video_url":{"url":"https://..."}} (public https URL, up to 50 MB and 3 minutes; stream: true is required): TokenTable downloads it and sends 12 evenly spaced frames, so the model reads the pictures only, not the audio or dialogue, and the response carries X-TT-Video-Audio: not-transcribed. Put any dialogue you need in the text. A video in an earlier message is not sent again. Other models do not read file or video_url parts.
    • stream:boolean · optional · Use stream: true for long outputs. A non-streaming request that has not finished after about two minutes can be cut off at the network edge with HTTP 524 and an HTML body; a streamed response keeps sending data and is not cut off.
    • temperature:number · optional
    • max_tokens:integer · optional · Upper limit on output tokens; on models that reason, reasoning tokens count toward it. It is forwarded to the model. If the model rejects the value as too large, the request is sent once more without it. Without it, the model decides the length (Claude models: up to 32000 tokens).
    • tools:tool[] · optional
    • tool_choice:string|tool_choice · optional
    • response_format:response_format · optional · Not forwarded to any model at this time: json_object and json_schema (including strict) do not constrain the output. Ask for JSON in the prompt and remove Markdown code fences before parsing. Models that start honouring it will be listed in the CHANGELOG.
    • modalities:string[] · optional · Set exactly ["text"] to bypass media intent detection.
    • X-TokenTable-Modalities:header:text · optional · Set to text to bypass media intent detection on this request.

    Response (application/json or text/event-stream)

    • id:string · required
    • object:string · required
    • created:integer · required
    • model:string · required · Non-streaming responses echo the model value you sent; it does not identify the model that actually served the request.
    • choices:choice[] · required
    • usage:usage · optional

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · openai · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 402 · openai · Quota or points are insufficient. · Contract semantics: quota rejected

    Errors: 403 · openai · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected

    Errors: 429 · openai · A rate or plan limit was reached. · Contract semantics: rate or plan limit reached

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: upstream generation failed

    Errors: 503 · openai · The service is not configured or unavailable. · Contract semantics: service not configured or unavailable

    Errors: 504 · openai · Upstream generation timed out. · Contract semantics: upstream generation timed out

    Errors: 403 · openai · The model or entitlement was rejected. · Contract semantics: Starter video generation requires purchased points before dispatch · Identifier: error.code=video_generation_requires_payment

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: papaya-1.0-spicy file part that is empty or not valid base64 or UTF-8 text · Identifier: error.code=invalid_file_encoding

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: papaya-1.0-spicy file part sent as file_id or without file_data · Identifier: error.code=unsupported_file_type

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: papaya-1.0-spicy request that is too long for the model once the file is included; split the file · Identifier: error.code=context_length_exceeded

    Errors: 413 · openai · The body or image is too large. · Contract semantics: papaya-1.0-spicy file part larger than 300 KB · Identifier: error.code=file_too_large

    Errors: 415 · openai · The media type is unsupported. · Contract semantics: papaya-1.0-spicy file part that is not a .md, .markdown or .txt text file · Identifier: error.code=unsupported_file_type

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: papaya-1.0-spicy video_url request without stream: true · Identifier: error.code=stream_required

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: papaya-1.0-spicy video_url that is not a public https URL on the default port · Identifier: error.code=invalid_video_url

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: papaya-1.0-spicy request with more than one video in the latest user message · Identifier: error.code=too_many_videos

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: papaya-1.0-spicy video that could not be downloaded (HTTP error, unreachable host, too many redirects or timeout) · Identifier: error.code=video_download_failed

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: papaya-1.0-spicy video longer than 3 minutes · Identifier: error.code=video_too_long

    Errors: 413 · openai · The body or image is too large. · Contract semantics: papaya-1.0-spicy video larger than 50 MB · Identifier: error.code=video_too_large

    Errors: 415 · openai · The media type is unsupported. · Contract semantics: papaya-1.0-spicy video that is not a readable MP4 · Identifier: error.code=unsupported_video_type

    Errors: 503 · openai · The service is not configured or unavailable. · Contract semantics: papaya-1.0-spicy video input temporarily unavailable or busy; retry later · Identifier: error.code=video_processing_unavailable

    Errors: 409 · openai · Handle this error according to the contract. · Contract semantics: final media confirmation already submitted

    Errors: 429 · openai · A rate or plan limit was reached. · Contract semantics: A select-only text model (papaya-1.0-spicy or a Doubao text model) was named after today's main-dish allowance ran out; it is not replaced with another model. Retry tomorrow, buy a top-up or pick another model · Identifier: error.code=explicit_model_daily_limit

    Errors: 402 · openai · Quota or points are insufficient. · Contract semantics: A select-only text model (papaya-1.0-spicy or a Doubao text model) was named after the monthly main-dish quota and top-up balance ran out; it is not replaced with another model. Upgrade the plan, buy a top-up or pick another model · Identifier: error.code=explicit_model_quota_exhausted

    Errors: 413 · openai · The body or image is too large. · Contract semantics: On the free plan, a select-only text model (papaya-1.0-spicy or a Doubao text model) was named with an input longer than the pinned-model limit; it is not replaced with TokenTable Auto. Shorten the input or upgrade the plan · Identifier: error.code=starter_explicit_input_too_large

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: the prompt for z-image-spicy, qwen-image-edit-spicy, wan2.7-i2v-spicy, w3.0-video or w3.0-video-pro asks for content the model does not generate, such as minors or non-consensual content; refused before any points are held. The body is {error, reason, message} with reason input_policy, not the error object of this format. Change the prompt and submit again · Identifier: error=input_rejected

    POST /v1/responses

    responses · streaming-optional · bearer or x-api-key header · Availability: public

    HTTP statuses: 200, 400, 401, 402, 403, 413, 415, 422, 429, 502, 503, 504

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • model:string · optional
    • input:string|input_item[] · required
    • instructions:string · optional
    • stream:boolean · optional
    • tools:tool[] · optional
    • tool_choice:string|tool_choice · optional
    • temperature:number · optional
    • top_p:number · optional
    • max_output_tokens:integer · optional
    • modalities:string[] · optional · Set exactly ["text"] to bypass media intent detection.
    • X-TokenTable-Modalities:header:text · optional · Set to text to bypass media intent detection on this request.

    Response (application/json or text/event-stream)

    • id:string · required
    • object:string · required
    • created_at:integer · required
    • status:string · required
    • model:string · required
    • output:output_item[] · optional
    • output_text:string · optional
    • usage:usage · optional

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · openai · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 402 · openai · Quota or points are insufficient. · Contract semantics: quota rejected

    Errors: 403 · openai · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected

    Errors: 429 · openai · A rate or plan limit was reached. · Contract semantics: rate or plan limit reached

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: upstream generation failed

    Errors: 503 · openai · The service is not configured or unavailable. · Contract semantics: service not configured or unavailable

    Errors: 504 · openai · Upstream generation timed out. · Contract semantics: upstream generation timed out

    Errors: 403 · openai · The model or entitlement was rejected. · Contract semantics: Starter video generation requires purchased points before dispatch · Identifier: error.code=video_generation_requires_payment

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: the prompt for z-image-spicy, qwen-image-edit-spicy, wan2.7-i2v-spicy, w3.0-video or w3.0-video-pro asks for content the model does not generate, such as minors or non-consensual content; refused before any points are held. The body is {error, reason, message} with reason input_policy, not the error object of this format. Change the prompt and submit again · Identifier: error=input_rejected

    POST /v1/messages

    anthropicMessages · streaming-optional · bearer or x-api-key header · Availability: public

    HTTP statuses: 200, 400, 401, 402, 403, 413, 415, 422, 429, 502, 503, 504

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • model:string · optional
    • messages:message[] · required
    • max_tokens:integer · optional
    • system:string|content_block[] · optional
    • stream:boolean · optional
    • tools:tool[] · optional
    • tool_choice:tool_choice · optional
    • temperature:number · optional
    • top_p:number · optional
    • stop_sequences:string[] · optional
    • modalities:string[] · optional · Set exactly ["text"] to bypass media intent detection.
    • X-TokenTable-Modalities:header:text · optional · Set to text to bypass media intent detection on this request.

    Response (application/json or text/event-stream)

    • id:string · required
    • type:string · required
    • role:string · required
    • model:string · required
    • content:content_block[] · required
    • stop_reason:string|null · optional
    • stop_sequence:string|null · optional
    • usage:usage · optional

    Errors: 400 · anthropic · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · anthropic · The credential is invalid or expired. · Contract semantics: invalid API key

    Errors: 402 · anthropic · Quota or points are insufficient. · Contract semantics: quota rejected by the underlying chat endpoint

    Errors: 403 · anthropic · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected by the underlying chat endpoint

    Errors: 429 · anthropic · A rate or plan limit was reached. · Contract semantics: rate or plan limit reached

    Errors: 502 · anthropic · Upstream generation, delivery, or settlement failed. · Contract semantics: compatibility loopback or upstream generation failed

    Errors: 503 · anthropic · The service is not configured or unavailable. · Contract semantics: underlying service unavailable

    Errors: 504 · anthropic · Upstream generation timed out. · Contract semantics: upstream generation timed out

    Errors: 403 · anthropic · The model or entitlement was rejected. · Contract semantics: Starter video generation requires purchased points before dispatch · Identifier: error.code=video_generation_requires_payment

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: the prompt for z-image-spicy, qwen-image-edit-spicy, wan2.7-i2v-spicy, w3.0-video or w3.0-video-pro asks for content the model does not generate, such as minors or non-consensual content; refused before any points are held. The body is {error, reason, message} with reason input_policy, not the error object of this format. Change the prompt and submit again · Identifier: error=input_rejected

    POST /v1/messages/count_tokens

    anthropicCountTokens · synchronous · none · Availability: public

    HTTP statuses: 200, 400, 413, 415

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • messages:message[] · optional
    • system:string|content_block[] · optional
    • tools:tool[] · optional

    Response (application/json)

    • input_tokens:integer · required

    POST /v1/images/generations

    openAiImages · synchronous · bearer · Availability: public

    HTTP statuses: 200, 400, 401, 402, 403, 413, 415, 422, 429, 502, 503, 504

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • prompt:string · required
    • n:integer · optional
    • size:string · optional
    • response_format:string · optional
    • model:string · optional · Compatibility field: ignored; this endpoint uses its fixed image model. Use GET /v1/me/model-catalog and the native media endpoint for model selection.

    Response (application/json)

    • created:integer · optional
    • data:image_result[] · required · The request waits up to 150 seconds for the image. A response that has not started after about two minutes can be cut off at the network edge with HTTP 524 and an HTML body; held points are then released where possible, and a case that cannot be confirmed stays held for reconciliation. For slow generations use POST /v1/media/image, where Seedream 5.0 pro and flash and the Spicy Seedream models accept async: true.

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · openai · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 402 · openai · Quota or points are insufficient. · Contract semantics: insufficient quota · Identifier: error.type=insufficient_quota

    Errors: 403 · openai · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected

    Errors: 429 · openai · A rate or plan limit was reached. · Contract semantics: rate or plan limit reached

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: upstream generation failed

    Errors: 503 · openai · The service is not configured or unavailable. · Contract semantics: service not configured or unavailable

    Errors: 504 · openai · Upstream generation timed out. · Contract semantics: upstream generation timed out

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: the image was generated but could not be stored for TokenTable delivery; held points are refunded where possible · Identifier: error.message=image_delivery_failed

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: generation failed; the response never carries the upstream message, and held points are refunded where possible · Identifier: error.message=image_generation_failed

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: the refund of held points could not be confirmed; the points stay held for reconciliation · Identifier: error.message=settlement_pending

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: the prompt for z-image-spicy, qwen-image-edit-spicy, wan2.7-i2v-spicy, w3.0-video or w3.0-video-pro asks for content the model does not generate, such as minors or non-consensual content; refused before any points are held. The body is {error, reason, message} with reason input_policy, not the error object of this format. Change the prompt and submit again · Identifier: error=input_rejected

    POST /v1/video/generations

    openAiVideo · synchronous · bearer · Availability: public

    HTTP statuses: 200, 400, 401, 402, 403, 413, 415, 422, 429, 502, 503, 504

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • prompt:string · required
    • model:string · optional · Compatibility field: ignored; this endpoint uses its fixed video model.
    • size:string · optional
    • duration:integer · optional

    Response (application/json)

    • created:integer · optional
    • data:video_result[] · required · data[].url is a TokenTable delivery reference, not a direct download link: a plain GET on it returns 410. API keys download through the delivery descriptor.
    • delivery:api_delivery_descriptor · optional · Present for API keys. POST its body to the path with the same Authorization header and no cookies; the grant expires after one hour.

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · openai · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 402 · openai · Quota or points are insufficient. · Contract semantics: insufficient quota · Identifier: error.type=insufficient_quota

    Errors: 403 · openai · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected

    Errors: 429 · openai · A rate or plan limit was reached. · Contract semantics: rate or plan limit reached

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: upstream generation failed

    Errors: 503 · openai · The service is not configured or unavailable. · Contract semantics: service not configured or unavailable

    Errors: 504 · openai · Upstream generation timed out. · Contract semantics: upstream generation timed out

    Errors: 403 · openai · The model or entitlement was rejected. · Contract semantics: Starter video generation requires purchased points before dispatch · Identifier: error.code=video_generation_requires_payment

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: video generation failed; the response never carries the upstream message · Identifier: error.message=video_generation_failed

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: the video was generated but a TokenTable delivery reference could not be issued; points are not captured · Identifier: error=video_delivery_unavailable

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: the prompt for z-image-spicy, qwen-image-edit-spicy, wan2.7-i2v-spicy, w3.0-video or w3.0-video-pro asks for content the model does not generate, such as minors or non-consensual content; refused before any points are held. The body is {error, reason, message} with reason input_policy, not the error object of this format. Change the prompt and submit again · Identifier: error=input_rejected

    POST /v1/videos/generations

    openAiVideosAlias · synchronous · bearer · Availability: public

    HTTP statuses: 200, 400, 401, 402, 403, 413, 415, 422, 429, 502, 503, 504

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • prompt:string · required
    • model:string · optional · Compatibility field: ignored; this endpoint uses its fixed video model.
    • size:string · optional
    • duration:integer · optional

    Response (application/json)

    • created:integer · optional
    • data:video_result[] · required · data[].url is a TokenTable delivery reference, not a direct download link: a plain GET on it returns 410. API keys download through the delivery descriptor.
    • delivery:api_delivery_descriptor · optional · Present for API keys. POST its body to the path with the same Authorization header and no cookies; the grant expires after one hour.

    Errors: 400 · openai · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · openai · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 402 · openai · Quota or points are insufficient. · Contract semantics: insufficient quota · Identifier: error.type=insufficient_quota

    Errors: 403 · openai · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected

    Errors: 429 · openai · A rate or plan limit was reached. · Contract semantics: rate or plan limit reached

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: upstream generation failed

    Errors: 503 · openai · The service is not configured or unavailable. · Contract semantics: service not configured or unavailable

    Errors: 504 · openai · Upstream generation timed out. · Contract semantics: upstream generation timed out

    Errors: 403 · openai · The model or entitlement was rejected. · Contract semantics: Starter video generation requires purchased points before dispatch · Identifier: error.code=video_generation_requires_payment

    Errors: 502 · openai · Upstream generation, delivery, or settlement failed. · Contract semantics: video generation failed; the response never carries the upstream message · Identifier: error.message=video_generation_failed

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: the video was generated but a TokenTable delivery reference could not be issued; points are not captured · Identifier: error=video_delivery_unavailable

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: the prompt for z-image-spicy, qwen-image-edit-spicy, wan2.7-i2v-spicy, w3.0-video or w3.0-video-pro asks for content the model does not generate, such as minors or non-consensual content; refused before any points are held. The body is {error, reason, message} with reason input_policy, not the error object of this format. Change the prompt and submit again · Identifier: error=input_rejected

    POST /v1/media/image

    nativeImage · asynchronous · bearer · Availability: public

    HTTP statuses: 200, 202, 400, 401, 402, 403, 413, 415, 422, 429, 500, 502, 503, 504

    Protocol statuses: 400, 413, 415

    Request (application/json, or multipart/form-data for image input)

    • prompt:string · required
    • n:integer · optional · An integer from 1 through 4; imageToImage contracts require n=1.
    • size:string · optional · For imageToImage contracts, only 256*256, 1024*1024 (default), or 1536*1536 are accepted; no normalization. Other models: format "W*H" with 768–2048 pixels per side; out-of-range or malformed values silently become 1024*1024. Kling image converts it to the nearest of 16:9/9:16/1:1 and the provider decides the pixels; Seedream 5.0 ignores it. See each model note in the catalog.
    • model:string · optional · An explicit unknown id returns HTTP 400 invalid_model with availableModels. The Spicy Seedream models (adult content allowed; each is listed in GET /v1/models only while it is on sale) make one image per request (n=1): bytedance/seedream-5.0-pro-spicy (6 points, 1.5K) and bytedance/seedream-5.0-lite-spicy (4 points, 2K) from text alone or text plus reference images, bytedance/seedream-5.0-flash-spicy (3 points, 2K) from text only. Minors and non-consensual content are not allowed. Retention is not guaranteed; download the image as soon as you get it.
    • width:integer · optional
    • height:integer · optional
    • seed:integer · optional
    • async:boolean · optional · Seedream 5.0 pro and flash (volcengine/doubao-seedream-5.0-pro, volcengine/doubao-seedream-5.0-flash) and the Spicy Seedream models (bytedance/seedream-5.0-pro-spicy, bytedance/seedream-5.0-lite-spicy, bytedance/seedream-5.0-flash-spicy) only; other models ignore it. true returns HTTP 202 {taskId, model, status:"pending"} at once; poll POST /v1/media/task/status with that taskId every 5 seconds or slower until status is succeeded or failed. Points are held at acceptance and captured only when the poll returns the images. A failed run, a result not collected within about 55 minutes, or one lost to a server restart ends as failed; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. The returned image URLs last one hour. false or omitted keeps the synchronous 200 response, which can be cut off at the network edge with HTTP 524 when a generation takes longer than about two minutes. A content-review refusal on a Spicy Seedream model ends as failed with code provider_content_flagged. tt-web keys always use async. In multipart send the text true or false; any other value returns 400 invalid_async.
    • image:file · optional · Image input, multipart only for this field. qwen-image-edit-spicy requires it as the primary image (PNG, JPEG or WebP, up to 10 MiB). Models with an imageToImage catalog contract take exactly one PNG up to 10 MiB. Seedream 5.0 pro and flash, and the Spicy Seedream pro and lite, take reference images only (referenceImage), never image. Text-to-image models refuse it. Caller URLs are never accepted.
    • referenceImage:file · optional · Optional reference images; repeat the multipart field, up to 10 MiB each and 40 MiB combined (413 reference_images_too_large). qwen-image-edit-spicy: up to 2 (reference images 2 and 3, in order), PNG, JPEG or WebP. Seedream 5.0 pro: 1 to 3; Seedream 5.0 flash: 1 to 10; bytedance/seedream-5.0-pro-spicy: 1 to 3 and bytedance/seedream-5.0-lite-spicy: 1 to 10; JPEG, PNG, WebP or AVIF, each side at least 15 px, at most 36,000,000 pixels per image, aspect ratio within 1:16 to 16:1; points are the same with or without reference images. GET /v1/me/model-catalog lists referenceImageUpload with the limit for each image model that takes them; other models return 400 invalid_image_upload.
    • imageBase64:string · optional · qwen-image-edit-spicy only: the primary image as Base64 in a JSON request, instead of the multipart field image. Other models return 400 unsupported_image_input.
    • imageMimeType:string · optional · qwen-image-edit-spicy only: the media type of imageBase64 (image/png, image/jpeg or image/webp); defaults to image/png.
    • referenceImagesBase64:string[] · optional · Reference images as Base64 in a JSON request, in order: qwen-image-edit-spicy up to 2, Seedream 5.0 pro up to 3, Seedream 5.0 flash up to 10, Spicy Seedream pro up to 3 and lite up to 10, same limits as referenceImage. A JSON body is limited to 1 MiB in total, so send larger images as multipart referenceImage. Models without reference images return 400 unsupported_image_input.
    • referenceImageMimeTypes:string[] · optional · Media types for referenceImagesBase64 (qwen-image-edit-spicy and Seedream 5.0), same length and order; each defaults to image/png.
    • contentAttestation:string · optional · Spicy Seedream models only. No longer required; if sent, any value is accepted and ignored.
    • strength:number · optional · Only imageToImage: 0–1 (default 0.6), strength-based redraw, not precise instruction editing.
    • output_format:string · optional · Only imageToImage: jpeg (default), png, or webp.

    Response (application/json)

    • taskId:string · optional
    • model:string · required
    • status:pending · optional
    • images:string[] · optional
    • prompt:string · optional
    • size:string · optional · Echo of the normalized request value; it is not the actual output size. Read the downloaded file.
    • quotaCost:integer · optional · Present on synchronous 200 responses only. 202 responses and task status do not carry it; use the catalog price.
    • delivery:api_delivery_descriptor · optional · On synchronous RMW image success, an API key receives this descriptor and POSTs its JSON body to /v1/media/delivery/rmw without cookies. Browsers keep the HttpOnly-cookie image URL flow.

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 402 · native · Quota or points are insufficient. · Contract semantics: insufficient media points · Identifier: error=insufficient_points

    Errors: 403 · native · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected

    Errors: 429 · native · A rate or plan limit was reached. · Contract semantics: daily or batch limit reached

    Errors: 500 · native · Batch creation failed. · Contract semantics: batch creation failed

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: provider request, delivery, or settlement failed

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: generation service or delivery signing unavailable

    Errors: 504 · native · Upstream generation timed out. · Contract semantics: provider request timed out

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: explicit model id is unknown · Identifier: error=invalid_model

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: n is not an integer from 1 through 4 · Identifier: error=invalid_n

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: async is sent to Seedream 5.0 pro or flash or a Spicy Seedream model with a value other than true or false · Identifier: error=invalid_async

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: image input (or referenceImagesBase64) was sent to a model that does not take it, or image_url was sent (never accepted) · Identifier: error=unsupported_image_input

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: qwen-image-edit-spicy needs a primary image (multipart image or imageBase64) · Identifier: error=image_required

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: more reference images than the model allows (qwen-image-edit-spicy 2, Seedream 5.0 pro 3, Seedream 5.0 flash 10, Spicy Seedream pro 3, lite 10), referenceImageMimeTypes does not match referenceImagesBase64, or a Seedream 5.0 reference image is outside its pixel limits · Identifier: error=invalid_reference_images

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: the multipart upload has an unexpected field, type or count for the chosen model · Identifier: error=invalid_image_upload

    Errors: 413 · native · The body or image is too large. · Contract semantics: reference images exceed 40 MiB combined · Identifier: error=reference_images_too_large

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: the model refused the request input, so no task was created; reason is input_moderation (content review refused the prompt, an image or a video), input_invalid (a parameter, image or video does not meet the model limits) or input_policy (the prompt asks for content the model does not generate, such as minors or non-consensual content; refused before any points are held). Change the input before submitting again; the same input will be refused again · Identifier: error=input_rejected

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: the image was generated but could not be stored for TokenTable delivery; held points are refunded where possible · Identifier: error=image_delivery_failed

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: generation failed; the response never carries the upstream message, and held points are refunded where possible · Identifier: error=image_generation_failed

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: the refund of held points could not be confirmed; the points stay held for reconciliation · Identifier: error=settlement_pending

    POST /v1/media/video

    nativeVideo · asynchronous · bearer · Availability: public

    HTTP statuses: 200, 400, 401, 402, 403, 408, 413, 415, 422, 429, 502, 503

    Protocol statuses: 400, 413, 415

    Request (application/json or multipart/form-data)

    • prompt:string · required
    • size:string · optional · T2V aspect selector for wan2.6-t2v, happyhorse-1.1-t2v and Kling video: 1920*1080 (16:9), 1080*1920 (9:16) or 1440*1440 (1:1). Other "W*H" values become 1920*1080 or 1080*1920 by orientation; square-but-not-1440, malformed or missing values become 1920*1080 without an error. Seedance and w3.0-video ignore it (see each model note).
    • duration:integer · optional
    • resolution:480p|720p|1080p|4k · optional · Customer-selectable only for models whose catalog pricing publishes a resolutions allow-list. w3.0-video takes 720p or 1080p and w3.0-video-pro takes 1080p or 2k (lowercase; 1080p when omitted); other values answer 400 unsupported_resolution before any points are held.
    • model:string · optional · Optional model id from GET /v1/models. The Spicy Seedance models (adult content allowed; each is listed only while it is on sale) make a text-to-video, or a first-frame video when image is sent, at 4-15 seconds: bytedance/seedance-2.5-spicy at 480p, 720p or 1080p; bytedance/seedance-2.0-spicy, bytedance/seedance-2.0-fast-spicy and bytedance/seedance-2.0-mini-spicy at 480p or 720p. Text-to-video is 16:9 and a first-frame video follows the image's aspect ratio. Points for 5, 10 and 15 seconds: 2.5 Spicy 59, 117 and 174 at 480p, 132, 262 and 392 at 720p, 323, 643 and 963 at 1080p; 2.0 Spicy 40, 80 and 119 at 480p, 86, 171 and 256 at 720p; 2.0 fast Spicy 32, 64 and 96 at 480p, 69, 137 and 205 at 720p; 2.0 mini Spicy 20, 40 and 60 at 480p, 43, 86 and 128 at 720p. Minors and non-consensual content are not allowed. Retention is not guaranteed; download the video as soon as you get it. While their extended sale is open, the four Spicy Seedance models also take: image plus lastImage (first and last frame, I2V_LAST); reference files (R2V: up to 9 referenceImage, up to 3 referenceVideo and up to 3 referenceAudio); one video with videoMode reference, edit or extend; and bytedance/seedance-2.5-spicy makes text-to-video and first-frame videos up to 30 seconds (points for 20 and 30 seconds: 232 and 348 at 480p, 522 and 782 at 720p, 1283 and 1922 at 1080p). Durations are 4-30 seconds on 2.5 Spicy and 4-15 seconds on the 2.0 series. An operation that is not open answers 400 image_to_video_unavailable, reference_images_unavailable or video_to_video_unavailable before any points are held. Reference images, videos and first frames that show a real person may be refused by the model's content review (422 input_rejected; held points are released where possible).
    • generateAudio:boolean · optional · Spicy Seedance models only (bytedance/seedance-2.5-spicy, bytedance/seedance-2.0-spicy, bytedance/seedance-2.0-fast-spicy, bytedance/seedance-2.0-mini-spicy); other models answer 400 unexpected_field. Default true: the video has sound. Send false for a silent video; the price is the same. Sound occasionally makes a generation fail; if that happens, submit again with generateAudio false.
    • contentAttestation:string · optional · Spicy Seedance models only (the four ids above). No longer required; if sent, any value is accepted and ignored.
    • operation:T2V|I2V|I2V_LAST|R2V|V2V_EDIT|V2V_EXTEND · optional · Optional explicit generation mode for Seedance 2.5 and the 2.0 series (2.0, 2.0-fast, 2.0-mini), plus w3.0-video and w3.0-video-pro for T2V, I2V and R2V. R2V reference images on the 2.0 series are available to your account only when GET /v1/me/model-catalog lists R2V with referenceImageUpload for that model; otherwise R2V is not available on it. It must match the inputs: T2V = prompt only; I2V = image; I2V_LAST = image plus lastImage (first and last frame); R2V = referenceImage files (1 to 9 on Seedance; 1 to 10 on w3.0-video and w3.0-video-pro) and no image, lastImage or video; V2V_EDIT = one source video (on Seedance it equals videoMode edit); V2V_EXTEND = one source video on Seedance, equal to videoMode extend. A mismatch, or an operation that contradicts videoMode, returns 400 operation_mismatch. Omit it to let the inputs choose the mode. I2V_LAST is listed for Seedance 2.5 and, together with R2V, for the Seedance 2.0 series (2.0, 2.0-fast, 2.0-mini); it costs the same points as T2V at the same resolution and duration, and sending image plus lastImage with operation omitted is equivalent. Do not send I2V with a lastImage. On the Spicy Seedance models, while their extended sale is open, all six operations are accepted and must match the inputs the same way; R2V there also takes referenceVideo and referenceAudio, and V2V_EDIT or V2V_EXTEND is one video with videoMode edit or extend. On w3.0-video and w3.0-video-pro, R2V can also take referenceVideo and referenceAudio; these two models accept no source video.
    • image:binary · optional · Optional multipart start image. The file name extension must match its real format and declared type (for example a JPEG must not be named .png), otherwise 415 image_type_mismatch with no charge.
    • imageBase64:string · optional · Optional legacy JSON start image.
    • imageMimeType:string · optional · MIME type for imageBase64.
    • lastImage:binary · optional · Optional multipart last image; requires image.
    • lastImageBase64:string · optional · Optional legacy JSON last image; requires imageBase64.
    • lastImageMimeType:string · optional · MIME type for lastImageBase64.
    • video:binary · optional · Optional multipart video input; mutually exclusive with image and lastImage. On Seedance models it is the source video for videoMode: MP4 or MOV, up to 50 MiB, 24–60 fps, 300–6000 px per side, 2–30 s on volcengine/doubao-seedance-2.5 and 2–15 s on the 2.0 series. On the Spicy Seedance models the limits are listed under videoMode.
    • videoMode:reference|edit|extend · optional · Seedance models only, with video (or videoBase64). reference (default, all four models): a new 16:9 clip of the requested duration guided by the source video. edit (volcengine/doubao-seedance-2.5): edits the source video; the output keeps its length (4–30 s), so duration must be omitted or equal. extend (volcengine/doubao-seedance-2.5): continues the source video by duration seconds; the result contains only the added part. edit and extend keep the source aspect ratio (9:16 to 21:9). 480p, 720p or 1080p. Points are quoted before the charge from billed seconds = max(source seconds + output seconds, output seconds + ceil(output seconds × 2 / 3)). Spicy Seedance models (bytedance/seedance-2.5-spicy, bytedance/seedance-2.0-spicy, bytedance/seedance-2.0-fast-spicy, bytedance/seedance-2.0-mini-spicy), while their extended sale is open: all three modes on all four models. reference makes a 16:9 clip of the requested duration; edit on 2.5 Spicy keeps the source length (4-30 s source), and on the 2.0 series makes a 16:9 clip of the requested duration; extend continues the source video for duration seconds. 2.5 Spicy edit and extend keep the source aspect ratio (9:16 to 21:9). Their source clips are MP4 or MOV, 2-15 s (4-30 s for a 2.5 Spicy edit), 300-6000 px per side, width/height 0.4-2.5, 24-60 fps; a source clip that shows a real person may be refused by the model's content review (422 input_rejected; held points are released where possible). Points use the same billed seconds; send quoteOnly true to see them first.
    • quoteOnly:boolean · optional · Seedance source-video requests, and w3.0-video and w3.0-video-pro requests. true runs every pre-charge check on the uploaded video and returns the exact quotaCost with inputSeconds and billedSeconds; nothing is charged, no task is created, and the response carries quoteOnly: true without taskId, status or prompt. On w3.0-video and w3.0-video-pro it also works without a video: inputSeconds is the measured reference video length (0 without one, possibly fractional), billedSeconds can carry milliseconds, and the response also carries model, operation, resolution and duration.
    • referenceImage:binary · optional · Optional multipart reference image. Repeat for up to 9 images on Seedance, or up to 10 on w3.0-video and w3.0-video-pro (10 MiB each, 40 MiB combined). Seedance images remain 300–6000 px per side with width/height ratio 0.4–2.5. Mutually exclusive with image and lastImage; Seedance also excludes video, draft and draftTaskId. This is reference mode, not source-video extension. On the Spicy Seedance models, and on w3.0-video and w3.0-video-pro, reference images can be combined with referenceVideo and referenceAudio in one R2V request; reference images that show a real person may be refused by the model's content review (422 input_rejected; held points are released where possible).
    • referenceImagesBase64:array · optional · Optional legacy JSON reference images: 1 to 9 Base64 strings on Seedance, or 1 to 10 on w3.0-video and w3.0-video-pro; same limits as referenceImage.
    • referenceImageMimeTypes:array · optional · MIME types for referenceImagesBase64, same length and order.
    • referenceVideo:binary · optional · Spicy Seedance models, w3.0-video and w3.0-video-pro only, multipart only. Optional reference clip for R2V. On the Spicy Seedance models repeat for up to 3 clips: MP4 or MOV, 2-15 seconds each and 15 seconds in total, up to 50 MiB each, with the source-video limits listed under videoMode (reference clips and audio together up to 60 MiB, otherwise 413 reference_media_too_large). Points are quoted on the clips' total seconds plus the output seconds; send quoteOnly true to get the exact points first. On w3.0-video and w3.0-video-pro repeat for up to 5 clips: MP4 or MOV, 1-15 seconds each and 15 seconds in total, 240-4096 px per side with width/height between 1:8 and 8:1 and no frame-rate rule, reference clips and audio together up to 60 MiB (413 reference_media_too_large); reference video seconds plus output seconds must not exceed 30 (422 video_duration_not_supported), a clip whose length cannot be measured returns 422 video_decode_failed or video_container_not_supported, and points follow the measured clip seconds plus the output seconds, rounded up to the millisecond. Other models answer 400 unexpected_file_field.
    • referenceAudio:binary · optional · Spicy Seedance models, w3.0-video and w3.0-video-pro only, multipart only. Optional reference audio for R2V: MP3 or WAV, up to 15 MB each (413 audio_too_large, 415 audio_type_not_supported). On the Spicy Seedance models repeat for up to 3 files of 2-15 seconds each and 15 seconds in total; on w3.0-video and w3.0-video-pro repeat for up to 5 files of 1-15 seconds each and 15 seconds in total, measured from the file itself (a WAV file must be plain PCM or float, otherwise 422 audio_decode_failed; a length out of range returns 422 audio_duration_not_supported). It must come with at least one referenceImage or referenceVideo (400 reference_audio_requires_image_or_video) and does not change the points. Other models answer 400 unexpected_file_field.
    • draft:boolean · optional · volcengine/doubao-seedance-2.5 only. true generates a 480p text-to-video draft at the 480p price; the returned taskId can then be sent as draftTaskId. Mutually exclusive with every image or video input.
    • draftTaskId:string · optional · volcengine/doubao-seedance-2.5 only. taskId of a succeeded draft created by the same account within seven days; produces the 1080p final at the 1080p price for the draft duration. The draft prompt and duration are reused, so prompt may be omitted and duration must be omitted or equal. One final per draft (409 draft_already_finalised while a final is in progress or delivered).

    Response (application/json)

    • taskId:string · required · Keep it: there is no webhook, cancellation, idempotency key or task-list endpoint, and video has no seed. If the submission itself times out without a taskId, the API cannot confirm whether a task was created; contact support before resubmitting.
    • status:string · required · An accepted request returns HTTP 200 (not 202) with status "pending".
    • prompt:string · required
    • model:string · required
    • size:string · optional · Echo of the request; it is not the actual output width and height (for example a 9:16 start image on Seedance echoes 864*496 for a 496×864 clip). Read the downloaded file.
    • duration:integer · optional
    • quotaCost:integer · required
    • resolution:string · optional
    • draft:boolean · optional
    • draftTaskId:string · optional
    • videoMode:string · optional
    • inputSeconds:integer · optional
    • billedSeconds:integer · optional
    • operation:string · optional · Spicy Seedance models only: the generation mode (I2V_LAST, R2V, V2V_EDIT or V2V_EXTEND) when it is neither T2V nor I2V.
    • quoteOnly:boolean · optional

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 402 · native · Quota or points are insufficient. · Contract semantics: insufficient media points · Identifier: error=insufficient_points

    Errors: 403 · native · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected

    Errors: 408 · native · The upload timed out. · Contract semantics: start-image upload timed out · Identifier: error=upload_timeout

    Errors: 413 · native · The body or image is too large. · Contract semantics: start image exceeds the configured limit · Identifier: error=image_too_large

    Errors: 429 · native · A rate or plan limit was reached. · Contract semantics: daily or batch limit reached

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: provider request, delivery, or settlement failed

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: generation service or delivery signing unavailable

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: the model refused the request input, so no task was created; reason is input_moderation (content review refused the prompt, an image or a video), input_invalid (a parameter, image or video does not meet the model limits) or input_policy (the prompt asks for content the model does not generate, such as minors or non-consensual content; refused before any points are held). Change the input before submitting again; the same input will be refused again · Identifier: error=input_rejected

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: active model request has missing or out-of-range parameters · Identifier: error=invalid_request

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: explicit model id is unknown · Identifier: error=invalid_model

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: generateAudio must be true or false · Identifier: error=invalid_generate_audio

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: Spicy Seedance reference audio was sent without a reference image or reference video · Identifier: error=reference_audio_requires_image_or_video

    Errors: 413 · native · The body or image is too large. · Contract semantics: Spicy Seedance reference videos and audio exceed 60 MiB combined · Identifier: error=reference_media_too_large

    Errors: 413 · native · The body or image is too large. · Contract semantics: a Spicy Seedance reference audio file exceeds 15 MB · Identifier: error=audio_too_large

    Errors: 415 · native · The media type is unsupported. · Contract semantics: Spicy Seedance reference audio is not MP3 or WAV · Identifier: error=audio_type_not_supported

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: a w3.0-video or w3.0-video-pro reference audio file cannot be measured, so nothing is quoted or held: a WAV must be plain PCM or float in one data chunk (LIST/INFO metadata is fine; segmented wavl audio, other LIST types and truncated or padding-less chunks are refused) and an MP3 must be readable MPEG Layer III frames · Identifier: error=audio_decode_failed

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: resolution is not offered by the chosen w3.0 model (w3.0-video: 720p or 1080p; w3.0-video-pro: 1080p or 2k) · Identifier: error=unsupported_resolution

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: a form field the chosen model does not accept: an unknown multipart text field, a field that only some Seedance models take sent to another model, or reference video or audio fields sent to w3.0-video or w3.0-video-pro in a JSON body (those files are multipart only) · Identifier: error=unexpected_field

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: more files than the model accepts: more reference images, reference videos or reference audio files than its limit (w3.0-video and w3.0-video-pro: up to 5 reference videos and 5 reference audio files), or more files than one start image plus one last image · Identifier: error=too_many_files

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: the inputs ask for a different operation: operation does not match the files sent, or on w3.0-video and w3.0-video-pro image or lastImage is combined with reference files, or a source video or videoMode is sent (these models take reference files instead) · Identifier: error=operation_mismatch

    Errors: 413 · native · The body or image is too large. · Contract semantics: a video file exceeds its limit: 100 MB per w3.0-video or w3.0-video-pro reference video, 50 MiB per multipart video or reference video for other models, or 20 MiB decoded for videoBase64 · Identifier: error=video_too_large

    Errors: 415 · native · The media type is unsupported. · Contract semantics: a source or reference video is not MP4 or MOV · Identifier: error=video_type_not_supported

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: a source or reference video is empty or cannot be decoded as an MP4 or MOV file with a video stream · Identifier: error=video_decode_failed

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: a source or reference video is readable but its container cannot be measured: send a plain MP4 or MOV with exactly one video track, no fragments and no multi-part edit list (re-export it and try again); for a video edit the container must also match the declared MP4 or MOV type · Identifier: error=video_container_not_supported

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: a source or reference video is outside the model's size limits (side length, aspect ratio or total pixels); w3.0-video and w3.0-video-pro take a shorter side of at least 240 px, a longer side of at most 4096 px and an aspect ratio of at most 8:1 · Identifier: error=video_dimensions_not_supported

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: a source or reference video is outside the model's duration limits, or reference videos are too long together; w3.0-video and w3.0-video-pro take 1 to 15 seconds per reference video, at most 15 seconds in total, and reference video seconds plus output seconds of at most 30 · Identifier: error=video_duration_not_supported

    Errors: 422 · native · The model refused this input (content review or limits); change the input before resubmitting. · Contract semantics: a w3.0-video or w3.0-video-pro reference audio file is shorter than 1 second or longer than 15 seconds, or the reference audio files are longer than 15 seconds together · Identifier: error=audio_duration_not_supported

    Errors: 403 · native · The model or entitlement was rejected. · Contract semantics: Starter video generation requires purchased points before dispatch · Identifier: code=video_generation_requires_payment

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: generation is temporarily unavailable; no task was created, and held points are released where possible · Identifier: error=provider_payment_required

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: video generation failed; the response never carries the upstream message · Identifier: error=video_generation_failed

    POST /v1/media/audio

    nativeAudio · synchronous · bearer · Availability: public

    HTTP statuses: 200, 400, 401, 402, 403, 413, 415, 502, 503

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • text:string · required · Up to 2000 characters per call; longer text returns 400 text_too_long, so split it.
    • voice:string · optional · longxiaochun_v2 (default), longcheng_v2, longhua_v2 or longshu_v2; any other or missing value uses the default without an error.
    • model:string · optional

    Response (application/json)

    • audioUrl:string · required · Always a TokenTable GET /v1/media/blob/:id URL, held in server memory for one hour and lost on a server restart; points are charged only after the audio is stored. Download it immediately.
    • model:string · required
    • voice:string · required
    • characters:integer · required
    • quotaCost:integer · required

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 402 · native · Quota or points are insufficient. · Contract semantics: insufficient media points · Identifier: error=insufficient_points

    Errors: 403 · native · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: provider request, delivery, or settlement failed

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: generation service or delivery signing unavailable

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: the audio was generated but could not be stored for TokenTable delivery; held points are refunded where possible · Identifier: error=audio_delivery_failed

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: generation failed; the response never carries the upstream message, and held points are refunded where possible · Identifier: error=audio_generation_failed

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: the refund of held points could not be confirmed; the points stay held for reconciliation · Identifier: error=settlement_pending

    POST /v1/media/video/batch

    videoBatch · asynchronous · bearer · Availability: public

    HTTP statuses: 202, 400, 401, 402, 403, 413, 415, 429, 500, 503

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • items:video_request[] · required · 1 to 30 items. Each item uses only prompt (required), model, size and duration. Batch runs text-to-video only: if the request body or any item carries a non-null imageBase64, lastImageBase64, videoBase64, referenceImagesBase64, image, lastImage, referenceImage, video, image_url, imageUrl or referenceImages, the whole batch is rejected with 400 unsupported_media_input (the message names the first offending field, such as items[0].imageBase64, with a zero-based index), so send image-to-video, first/last-frame, reference-image or source-video jobs one at a time to POST /v1/media/video. Batch-capable models: wan2.6-t2v, kling/kling-v3-omni-video-generation and happyhorse-1.1-t2v. Any advanced model rejects the whole batch with 403 (media_tier_not_entitled, or media_tier_batch_unsupported when activated); volcengine/doubao-seedance-* models return 400 operation_not_supported; an unknown model id returns 400 invalid_model with availableModels. None of these refusals charges points or creates a batch.
    • size:string · optional · Batch-level default for items without size (default 1920*1080). 1920*1080, 1080*1920 and 1440*1440 are kept; any other W*H becomes 1920*1080 if landscape or 1080*1920 if portrait instead of being rejected. The echoed size is not a measured output size.
    • duration:integer · optional · Batch-level default seconds for items without duration (default 5). wan2.6-t2v accepts whole 2–15 seconds, the other batch models 3–15; any other value returns 400 unsupported_duration. Points are summed per item, and insufficient points return 402 insufficient_points.
    • model:string · optional · Batch-level default model for items without model. An item value takes precedence over this, and this over the default model.

    Response (application/json)

    • batchId:string · required
    • status:string · required
    • totalItems:integer · required
    • quotaCost:integer · required
    • items:batch_item[] · required

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: invalid request

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 402 · native · Quota or points are insufficient. · Contract semantics: insufficient media points · Identifier: error=insufficient_points

    Errors: 403 · native · The model or entitlement was rejected. · Contract semantics: model or entitlement rejected

    Errors: 429 · native · A rate or plan limit was reached. · Contract semantics: daily or batch limit reached

    Errors: 500 · native · Batch creation failed. · Contract semantics: batch creation failed

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: generation service or delivery signing unavailable

    Errors: 400 · native · Request or schema validation failed. · Contract semantics: batch is text-to-video only; an image or video input field in the body or any item rejects the whole batch · Identifier: error=unsupported_media_input

    Errors: 403 · native · The model or entitlement was rejected. · Contract semantics: Starter video generation requires purchased points before dispatch · Identifier: code=video_generation_requires_payment

    GET /v1/media/batch/:batchId

    batchStatus · synchronous · bearer · Availability: public

    HTTP statuses: 200, 400, 401, 404, 429, 503

    Request (application/json)

    • batchId:string · required · Path parameter.

    Response (application/json)

    • batchId:string · required
    • status:string · required
    • totalItems:integer · required
    • completedItems:integer · required
    • failedItems:integer · required
    • quotaCost:integer · required
    • createdAt:string · required
    • updatedAt:string · required
    • items:batch_item[] · required · Each item carries videoUrl as a TokenTable delivery reference and, for API keys, a delivery descriptor. error is video_generation_failed, video_delivery_unavailable, settlement_pending or generation_pending, never an upstream message.

    Errors: 400 · fastify · Request or schema validation failed. · Contract semantics: request schema validation failed

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 404 · native · The owned resource was not found. · Contract semantics: owned resource not found

    Errors: 429 · native · A rate or plan limit was reached. · Contract semantics: daily or batch limit reached

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: at least one item could not get a TokenTable delivery reference; the whole response is returned with HTTP 503 · Identifier: items[].error=video_delivery_unavailable

    POST /v1/media/task/status

    taskStatus · synchronous · bearer · Availability: public

    HTTP statuses: 200, 400, 401, 404, 410, 413, 415, 429, 502, 503

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • taskId:string · required · Poll every 5 seconds or slower. Status, Seedance artifact and batch-status calls share a global limit of 200 requests per minute per client IP (x-ratelimit-limit); media submissions are not counted by it, and Starter plans have daily caps.
    • model:string · optional

    Response (application/json)

    • status:pending|succeeded|failed|delivery_failed · required
    • generationStatus:succeeded · optional · Present with delivery_failed to distinguish successful billed generation from failed delivery.
    • videoUrl:string · optional
    • images:string[] · optional · Image tasks only, and always TokenTable URLs; video tasks return an empty array and use videoUrl and delivery instead.
    • delivery:api_delivery_descriptor · optional · Present only for tt-live API keys after video generation succeeds. Follow its method and path with the same Authorization header.
    • error:error · optional · Seedance reports every terminal failure after the task was created, including content review, as "provider failed" without a code; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. "artifact_too_large" means the finished clip exceeded the durable store limit; it is not delivered or captured.
    • code:provider_generation_failed|provider_content_flagged|delivery_secret_unavailable|delivery_origin_unapproved|delivery_token_roundtrip_failed|delivery_token_unavailable|durable_transfer_failed · optional · Safe diagnostic code for a provider-terminal or fail-closed delivery failure; never contains an upstream URL, token, task ID, payload, or key.

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 404 · native · The owned resource was not found. · Contract semantics: owned resource not found

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: provider request, delivery, or settlement failed

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: generation service or delivery signing unavailable

    Errors: 410 · native · The legacy endpoint is disabled. · Contract semantics: a Seedream 5.0 or Spicy Seedream async image was already delivered and its one-hour result has expired; it is not generated again · Identifier: error=image_result_expired

    Browsers use GET on videoUrl with the same-session cookie; the delivery grant lasts at most 1 hour (3600 seconds). API-key clients submit the returned delivery descriptor as a JSON body to POST /v1/media/delivery/video or POST /v1/media/delivery/rmw without cookies. Never put the grant in a URL or log; send it only in the delivery JSON body, while the API key stays in the Authorization header. 401 means an invalid grant, identity, or ownership; 410 means the grant or media expired. Poll status again for a fresh grant when supported. delivery_failed does not mean generation failed or points were refunded.

    browser: Use videoUrl in the same browser session so the HttpOnly cookie is sent. The grant lasts at most one hour; poll POST /v1/media/task/status again for a fresh grant.

    programmatic: Follow the returned delivery descriptor. Provider relays use POST /v1/media/delivery/video or /rmw; durable Seedance artifacts use authenticated GET /v1/media/artifact/:taskId. Seedance status responses carry that GET path as their delivery descriptor too, so every model can simply follow the descriptor. Video downloads carry a video/* Content-Type (Seedance measured as video/mp4 with H.264 video and AAC audio); read the Content-Type rather than assuming a format. Retention is promised only where stated: Seedance artifacts 30 days, private image artifacts P7D, synchronous image blobs one hour. Every other finished file has no promised retention and the upstream copy may expire (410), so download and store results as soon as they succeed.

    semantics: status "succeeded" means generation succeeded and points were captured. A later download problem is status "delivery_failed" with a stable delivery code; it does not mean generation failed. A transient 5xx from this endpoint does not change the task: poll the same taskId again and never resubmit the generation.

    GET /v1/media/image-artifact/:taskId

    imageArtifactDelivery · streaming · bearer · Availability: public

    HTTP statuses: 200, 400, 401, 404, 410, 429, 503

    Request (application/json)

    • taskId:string · required · Path parameter of an owned captured I2I image task.

    Response (image/jpeg, image/png or image/webp)

    • image bytes:binary · required

    Errors: 400 · fastify · Request or schema validation failed. · Contract semantics: request schema validation failed

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 404 · native · The owned resource was not found. · Contract semantics: owned resource not found

    Errors: 429 · native · A rate or plan limit was reached. · Contract semantics: daily or batch limit reached

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: generation service or delivery signing unavailable

    Errors: 410 · native · The legacy endpoint is disabled. · Contract semantics: private image retention expired

    Security and data handling: Requester and quota-owner task ownership, captured ledger state, independent image namespace, retention and SHA-256 are checked. Provider URLs are never returned; private image retention is P7D. This endpoint does not activate any candidate model.

    GET /v1/media/artifact/:taskId

    seedanceArtifactDelivery · streaming · bearer · Availability: public

    HTTP statuses: 200, 206, 400, 401, 404, 416, 429, 503

    Request (application/json)

    • taskId:string · required · Owned task path parameter. Seedance artifacts are kept for 30 days after transfer.
    • Range:header:bytes=start-end|bytes=start-|bytes=-suffix · optional · Optional single byte range.

    Response (stored video media type)

    • video bytes:binary · required

    Errors: 400 · fastify · Request or schema validation failed. · Contract semantics: request schema validation failed

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or expired API key

    Errors: 404 · native · The owned resource was not found. · Contract semantics: owned resource not found

    Errors: 429 · native · A rate or plan limit was reached. · Contract semantics: daily or batch limit reached

    Errors: 503 · native · The service is not configured or unavailable. · Contract semantics: generation service or delivery signing unavailable

    Errors: 416 · native · Handle this error according to the contract. · Contract semantics: requested byte range is not satisfiable · Identifier: error=range_not_satisfiable

    Security and data handling: Authorization, requester ownership, captured ledger state, private object reference, byte count, storage version, and SHA-256 are rechecked before delivery. Provider URLs are never returned.

    POST /v1/media/delivery/video

    apiVideoDelivery · streaming · bearer API key · Availability: public

    HTTP statuses: 200, 206, 400, 401, 404, 410, 413, 415, 416, 429, 502

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • taskId:string · required
    • grant:string · required · Opaque encrypted grant returned by task status; send only in this JSON body.
    • Range:header:bytes=start-end|bytes=start- · optional · Optional single byte range.

    Response (provider media type)

    • media bytes:binary · required

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or mismatched delivery grant · Identifier: code=invalid_grant

    Errors: 404 · native · The owned resource was not found. · Contract semantics: owned completed task not found

    Errors: 410 · native · The delivery grant or media has expired. · Contract semantics: delivery grant or upstream asset expired

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: upstream media is temporarily unreachable · Identifier: code=upstream_unreachable

    deliveryFailureCodes: invalid_grant, token_expired, upstream_expired, upstream_unreachable

    Security and data handling: The grant belongs in the request body and never in a URL, query, log, or cookie. Authorization and task ownership are rechecked before relay.

    POST /v1/media/delivery/rmw

    apiRmwDelivery · streaming · bearer API key · Availability: public

    HTTP statuses: 200, 206, 400, 401, 404, 410, 413, 415, 416, 429, 502

    Protocol statuses: 400, 413, 415

    Request (application/json)

    • taskId:string · required
    • grant:string · required · Opaque encrypted grant returned by task status; send only in this JSON body.
    • Range:header:bytes=start-end|bytes=start- · optional · Optional single byte range.

    Response (provider media type)

    • media bytes:binary · required

    Errors: 401 · native · The credential is invalid or expired. · Contract semantics: invalid or mismatched delivery grant · Identifier: code=invalid_grant

    Errors: 404 · native · The owned resource was not found. · Contract semantics: owned completed task not found

    Errors: 410 · native · The delivery grant or media has expired. · Contract semantics: delivery grant or upstream asset expired

    Errors: 502 · native · Upstream generation, delivery, or settlement failed. · Contract semantics: upstream media is temporarily unreachable · Identifier: code=upstream_unreachable

    deliveryFailureCodes: invalid_grant, token_expired, upstream_expired, upstream_unreachable

    Security and data handling: The grant belongs in the request body and never in a URL, query, log, or cookie. Authorization, task ownership, and the durable RMW delivery reference are rechecked before relay.

    GET /v1/media/blob/:id

    imageBlobDelivery · streaming · opaque unguessable path · Availability: public

    HTTP statuses: 200, 410, 429

    Request (application/json)

    • id:uuid · required · Path parameter returned by a successful image generation (for example Seedream 5.0, synchronous or async). The image is held in server memory for one hour and is also lost if the server restarts, after which this returns 410 blob_expired; download it immediately.

    Response (image media type)

    • image bytes:binary · required

    Errors: 410 · native · The delivery grant or media has expired. · Contract semantics: in-memory image delivery expired · Identifier: error=blob_expired

    TTL: 3600s

    GET /v1/media/img

    legacyImageDelivery · disabled · none · Availability: disabled

    HTTP statuses: 410, 429

    Request (application/json)

    • u:string · optional · Legacy query parameter from older image responses; it is ignored.

    Response (application/json)

    • error:string · required

    Errors: 410 · native · The delivery grant or media has expired. · Contract semantics: retired legacy image URL; it never contacts an upstream service · Identifier: error=legacy_image_url_disabled

    Replacement: GET /v1/media/blob/:id

    Recommendation: Use only the replacement endpoint. [Image responses now return only TokenTable URLs; download from the URL in the current response and store the file yourself.]

    GET /v1/media/task/:taskId

    legacyTaskStatus · disabled · bearer · Availability: disabled

    HTTP statuses: 400, 410

    Request (application/json)

    • taskId:string · required · Legacy path parameter; never use this endpoint.

    Response (application/json)

    • error:string · required

    Errors: 400 · fastify · Request or schema validation failed. · Contract semantics: missing Authorization header

    Errors: 410 · native · The legacy endpoint is disabled. · Contract semantics: legacy endpoint disabled

    Authentication behavior: Use Authorization: Bearer <TOKEN>. Only the Responses and Anthropic Messages compatible endpoints listed by the manifest may use x-api-key. [Missing Authorization is rejected by schema with 400; any present string reaches the disabled handler and returns 410.]

    Replacement: POST /v1/media/task/status

    Recommendation: Use only the replacement endpoint. [Use only the replacement endpoint.]

    Using chat models (text)

    The simplest option is to call POST /v1/chat/completions with model=auto and let TokenTable choose a chat model. Use the text cURL example below to get started.

    To choose a chat model, set model to any id returned by GET /v1/models. This anonymous compatibility list changes over time; models are not guaranteed to remain available. Use returned ids rather than guessing them.

    Naming a chat model from GET /v1/models always treats the request as text and sends it to that model. With model=auto or no model, a last message that looks like a request to generate an image, video or speech may be routed into the Auto media flow above; the reply then starts with "[TokenTable·需要確認]" and costs no points. When you only want a text reply, send the X-TokenTable-Modalities: text header or modalities:["text"] in the body. Asking a model to write, polish or translate an image or video prompt is a text task and is not treated as a generation request. A model id that is not on the list does not return an error; the request falls back to auto.

    Use stream: true for long outputs such as a full chapter or a long story. A non-streaming request that has not finished after about two minutes can be cut off at the network edge with HTTP 524 and an HTML body, and resending the same request is usually cut off again; a streamed response keeps sending data and is not cut off. Models that reason think first, so even a short reply can take more than a minute. When you need JSON, response_format (json_object, or json_schema including strict) does not currently constrain the output: ask for JSON in the prompt and remove Markdown code fences before parsing.

    Use the anonymous compatibility list from GET /v1/models for chat models. GET /v1/me/model-catalog requires sign-in authentication and returns account-specific actual points and availability; media durations, sizes, and points still follow that member catalog.

    On the free plan, explicitly selecting a high-multiplier model switches the request to Auto. Identify this through the X-TT-Downgraded and X-TT-Requested-Model response headers; it is not an error.

    Copyable examples

    Text cURL example

    curl https://tokentable.asia/v1/chat/completions -H "Authorization: Bearer $TOKENTABLE_API_KEY" -H "Content-Type: application/json" -d '{"model":"auto","messages":[{"role":"user","content":"Hello"}]}'

    Image Python example

    BASE = "https://tokentable.asia/v1"
    requests.post(BASE + "/media/image", headers=AUTH, json={"prompt":"Prompt","model":MODEL_FROM_CATALOG})

    Text-to-video Node.js example

    const BASE = "https://tokentable.asia/v1";
    await fetch(BASE + "/media/video", {method:"POST", headers:AUTH_JSON, body:JSON.stringify({prompt:"Prompt", model, duration})})

    Image-to-video multipart cURL example

    curl "https://tokentable.asia/v1/media/video" -H "Authorization: Bearer $TOKENTABLE_API_KEY" -F "prompt=Prompt" -F "model=$MODEL" -F "duration=5" -F "resolution=720p" -F "image=@start.jpg"

    Status polling Node.js example

    const BASE = "https://tokentable.asia/v1";
    await fetch(BASE + "/media/task/status", {method:"POST", headers:AUTH_JSON, body:JSON.stringify({taskId, model})})

    Speech Python example

    BASE = "https://tokentable.asia/v1"
    requests.post(BASE + "/media/audio", headers=AUTH, json={"text":"Hello","model":MODEL_FROM_CATALOG,"voice":VOICE_FROM_CATALOG})

    First and last frame (I2V_LAST) multipart cURL example: image plus lastImage; without operation the inputs choose the mode

    curl "https://tokentable.asia/v1/media/video" -H "Authorization: Bearer $TOKENTABLE_API_KEY" -F "prompt=Prompt" -F "model=$MODEL" -F "duration=5" -F "image=@shot01.png;type=image/png" -F "lastImage=@shot02.png;type=image/png"

    Reference images (R2V) multipart cURL example: repeat the referenceImage field, kept in submission order

    curl "https://tokentable.asia/v1/media/video" -H "Authorization: Bearer $TOKENTABLE_API_KEY" -F "prompt=Prompt" -F "model=$MODEL" -F "duration=5" -F "referenceImage=@character_a.jpg;type=image/jpeg" -F "referenceImage=@character_b.jpg;type=image/jpeg"

    Download cURL example: delivery.method GET (Seedance artifact)

    curl -o result.mp4 "https://tokentable.asia/v1/media/artifact/$TASK_ID" -H "Authorization: Bearer $TOKENTABLE_API_KEY"

    Download cURL example: delivery.method POST (/media/delivery/video or /rmw); the grant goes only in the JSON body

    curl -o result.mp4 "https://tokentable.asia/v1/media/delivery/rmw" -H "Authorization: Bearer $TOKENTABLE_API_KEY" -H "Content-Type: application/json" -d '{"taskId":"TASK_ID","grant":"GRANT_FROM_STATUS_DELIVERY"}'

    Spicy image with reference images, multipart cURL example: bytedance/seedream-5.0-lite-spicy, repeat referenceImage (1–10); images come back synchronously and the URL is kept for one hour, so download it at once

    curl "https://tokentable.asia/v1/media/image" -H "Authorization: Bearer $TOKENTABLE_API_KEY" -F "model=bytedance/seedream-5.0-lite-spicy" -F "prompt=Prompt; keep the face from image 1 and the outfit from image 2" -F "n=1" -F "referenceImage=@character.jpg;type=image/jpeg" -F "referenceImage=@outfit.png;type=image/png"
    # 200 {"images":["https://tokentable.asia/v1/media/blob/..."], ...}: download images[0] at once (kept for one hour)

    Spicy text-to-video Node.js example: bytedance/seedance-2.0-mini-spicy, 480p or 720p, 4–15 seconds, fixed 16:9; generateAudio defaults to true, send false for a silent video (same points)

    const BASE = "https://tokentable.asia/v1";
    const res = await fetch(BASE + "/media/video", {method:"POST", headers:AUTH_JSON, body:JSON.stringify({model:"bytedance/seedance-2.0-mini-spicy", prompt:"Prompt", duration:5, resolution:"480p", generateAudio:false})});
    const { taskId } = await res.json();

    Spicy first-frame video multipart cURL example: image is the first frame (the video follows its aspect ratio); lastImage, referenceImage and video are not accepted

    curl "https://tokentable.asia/v1/media/video" -H "Authorization: Bearer $TOKENTABLE_API_KEY" -F "model=bytedance/seedance-2.0-mini-spicy" -F "prompt=Prompt" -F "duration=5" -F "resolution=720p" -F "generateAudio=true" -F "image=@first_frame.jpg;type=image/jpeg"

    Spicy video polling and download Python example: poll /media/task/status with the taskId, then GET videoUrl (/media/artifact/:taskId) with the same key once it succeeds; if a poll fails temporarily, keep polling the same taskId and do not resubmit

    BASE = "https://tokentable.asia/v1"
    while True:
        r = requests.post(BASE + "/media/task/status", headers=AUTH, json={"taskId": task_id})
        s = r.json() if r.ok else {"status": "pending"}  # 502 Failed to reach provider: keep polling the same taskId
        if s["status"] in ("succeeded", "failed"):
            break
        time.sleep(10)
    if s["status"] == "succeeded":
        open("result.mp4", "wb").write(requests.get(s["videoUrl"], headers=AUTH).content)

    Member catalog capabilities and points

    Call GET /v1/me/model-catalog with a member JWT or active programmatic API key for the complete v2 through v6 contract. v6 exposes media-tier activation status: sign in on the website before first media use, because activate remains JWT-only. Since v4 each operation owns its durations and points tables; a last frame is allowed only when lastFrameUpload is non-null. v5 adds starterPlanAccess.

    GET /v1/me/model-catalog · tokentable.member-catalog.v6

    verifiedDurations: Durations with verified end-to-end generation support for this model.

    billableDurations: The closed duration values accepted for billing; every value is also verified.

    durationPointsTable: The exact points charged for each billable duration; keys match billableDurations.

    resolutionDurationPointsTables: The exact points charged for every offered resolution and billable duration; nested duration keys match billableDurations.

    Start / last frame: required / optional / unsupported

    lastFrameUpload: lastImage / lastImageBase64 / lastImageMimeType · requires image

    Top-level response fields

    • schemaVersion:string · required · Member catalog schema; this contract describes tokentable.member-catalog.v6.
    • generatedAt:string · required · ISO 8601 time this catalog was generated for the request.
    • baseUrl:string · required · API base URL to send requests to.
    • documentVersion:string · required · Same value as the docs manifest documentVersion; it changes whenever the documented contract changes.
    • categories:category[] · required · text, image, video and audio, each listing the models this account can see with their actual points contract.
    • mediaTier:object · required · Advanced-tier status per capability (image, video): none (not activated), active, or revoked.
    • activation:object · required · Overall advanced-tier activation state and the next step. Activation is done once by signing in on the web; it cannot be done through the API.
    • unlocked:object · required · Per capability, the exact advanced model ids this account can use right now (a list of ids, not a yes/no flag). An empty list means none are unlocked.
    • offer:null · required · Reserved; always null in this schema version. Read activation and each model's lockedReason instead.

    Per-model account fields (only in GET /v1/me/model-catalog)

    • entitlementStatus:none|active|revoked|null · required · Advanced-tier status that applies to this model; null for standard models.
    • selectable:boolean · required · true when this account can send this model id right now.
    • consentEligible:boolean · required · true when this is an advanced model the account can unlock by activating on the web.
    • lockedReason:not_activated|revoked|null · required · Why the model is not selectable; null when selectable is true.

    Source video (sourceVideo)

    Present only on the Seedance models that accept a source video. Send the clip in the multipart video field, or as videoBase64 with videoMimeType, choose videoMode (default reference), and send quoteOnly=true first to get the exact points without generating anything. This is separate from the V2V_EDIT row in operationContracts, which describes the generic video-edit upload contract; on these models that row stays unsupported and the source video is described here instead.

    reference uses the clip as a reference for a new video; edit changes the clip and keeps its length (omit duration or send the source length); extend generates a continuation and returns only the new segment. outputDuration says which length each mode returns.

    Billed seconds follow billedSecondsFormula, where inputSeconds is the source length rounded up after a 0.1-second tolerance. Points also depend on the resolution and the output pixel area, so the catalog cannot list a fixed table: send quoteOnly=true for the exact number. A quote does not create a task or hold points.

    Source limits: contentTypes; maxBytes for multipart and legacyBase64MaxBytes for videoBase64; minSeconds to maxSeconds long (editMinSeconds for edit); minFps to maxFps; minSidePixels to maxSidePixels per side; width/height between minAspectRatio and maxAspectRatio; minPixels to maxPixels in total. edit and extend also require width/height within editExtendAspectRatio. resolutions lists the output resolutions available with a source video.

    volcengine/doubao-seedance-2.5 · videoMode=reference|edit|extend (default reference) · outputDuration=reference:requested,edit:source,extend:requested · resolutions=480p,720p,1080p · video:52428800 / videoBase64+videoMimeType:20971520 · video/mp4,video/quicktime · source=2–30s (edit ≥ 4s) · 24–60fps · 300–6000px/side · 407696–8295044px · aspect 0.4–2.5 · edit/extend aspect 0.56–2.34 · billedSeconds=max(inputSeconds + outputSeconds, outputSeconds + ceil(outputSeconds * 2 / 3)) · quoteOnly=true

    volcengine/doubao-seedance-2.0 · videoMode=reference (default reference) · outputDuration=reference:requested · resolutions=480p,720p,1080p · video:52428800 / videoBase64+videoMimeType:20971520 · video/mp4,video/quicktime · source=2–15s · 24–60fps · 300–6000px/side · 407696–8295044px · aspect 0.4–2.5 · billedSeconds=max(inputSeconds + outputSeconds, outputSeconds + ceil(outputSeconds * 2 / 3)) · quoteOnly=true

    volcengine/doubao-seedance-2.0-fast · videoMode=reference (default reference) · outputDuration=reference:requested · resolutions=480p,720p · video:52428800 / videoBase64+videoMimeType:20971520 · video/mp4,video/quicktime · source=2–15s · 24–60fps · 300–6000px/side · 407696–8295044px · aspect 0.4–2.5 · billedSeconds=max(inputSeconds + outputSeconds, outputSeconds + ceil(outputSeconds * 2 / 3)) · quoteOnly=true

    volcengine/doubao-seedance-2.0-mini · videoMode=reference (default reference) · outputDuration=reference:requested · resolutions=480p,720p · video:52428800 / videoBase64+videoMimeType:20971520 · video/mp4,video/quicktime · source=2–15s · 24–60fps · 300–6000px/side · 407696–8295044px · aspect 0.4–2.5 · billedSeconds=max(inputSeconds + outputSeconds, outputSeconds + ceil(outputSeconds * 2 / 3)) · quoteOnly=true

    Reference videos, reference audio and source video (referenceMedia)

    Present on the Seedance Spicy models while their reference and source-video inputs are on sale, and on w3.0-video and w3.0-video-pro, which take reference videos and audio but no source video (sourceVideo.modes is empty). referenceVideo and referenceAudio describe the repeatable multipart fields of R2V (reference images stay in the R2V row's referenceImageUpload); sourceVideo describes one source video sent in the multipart video field with videoMode reference, edit or extend. Reference files and a source video are mutually exclusive, and neither can be combined with image or lastImage.

    Reference audio needs at least one reference image or reference video (requiresImageOrVideo). Reference images, videos and first frames that show a real person may be refused by the model's content review (422 input_rejected; held points are released where possible). outputDurations gives the output seconds each source-video mode accepts; null for edit means the output keeps the source length and duration must be omitted (editOutputDuration source); requested means send duration as usual.

    A request that carries a reference video or a source video is billed on the video seconds plus the output seconds (billedSecondsFormula; on the Seedance Spicy models inputSeconds is each clip rounded up after a 0.1-second tolerance, summed, and on w3.0-video and w3.0-video-pro it is the measured clip seconds summed, with billedSeconds rounded up to the millisecond), so the catalog cannot list a fixed table: send the same form with quoteOnly=true first for the exact points. A quote does not create a task or hold points. Without a video, R2V is priced by the R2V row's table; reference audio does not change the price.

    Limits: referenceVideo up to maxFiles clips of minSeconds to maxSeconds each and maxTotalSeconds in total, each at most maxBytes; referenceAudio up to maxFiles files of contentTypes, each at most maxBytes (and, where given, minSeconds to maxSeconds each and maxTotalSeconds in total); reference videos and audio together at most maxTotalBytes. Every video (reference or source) must meet videoRules: minFps to maxFps (where published; w3.0-video and w3.0-video-pro publish no frame-rate rule), minSidePixels to maxSidePixels per side, width/height between minAspectRatio and maxAspectRatio, and minPixels to maxPixels in total. A source video is minSeconds to maxSeconds long (editMinSeconds to editMaxSeconds for edit), and edit and extend may also require width/height within editExtendAspectRatio.

    bytedance/seedance-2.5-spicy · referenceVideo≤3 · 2–15s each · ≤15s total · 52428800 bytes · video/mp4,video/quicktime · referenceAudio≤3 · 15000000 bytes · audio/mpeg,audio/wav · needs image or video · reference media ≤62914560 bytes · video+videoMode=reference|edit|extend · 2–15s (edit 4–30s, output source) · outputDurations=reference:4–30s,edit:source,extend:4–30s · 24–60fps · 300–6000px/side · 407696–8295044px · aspect 0.4–2.5 · edit/extend aspect 0.56–2.34 · billedSeconds=max(ceil(inputSeconds) + outputSeconds, outputSeconds + ceil(outputSeconds * 2 / 3)) · quoteOnly=true

    bytedance/seedance-2.0-spicy · referenceVideo≤3 · 2–15s each · ≤15s total · 52428800 bytes · video/mp4,video/quicktime · referenceAudio≤3 · 15000000 bytes · audio/mpeg,audio/wav · needs image or video · reference media ≤62914560 bytes · video+videoMode=reference|edit|extend · 2–15s (edit 2–15s, output requested) · outputDurations=reference:4–15s,edit:4–15s,extend:4–15s · 24–60fps · 300–6000px/side · 407696–8295044px · aspect 0.4–2.5 · billedSeconds=max(ceil(inputSeconds) + outputSeconds, outputSeconds + ceil(outputSeconds * 2 / 3)) · quoteOnly=true

    bytedance/seedance-2.0-fast-spicy · referenceVideo≤3 · 2–15s each · ≤15s total · 52428800 bytes · video/mp4,video/quicktime · referenceAudio≤3 · 15000000 bytes · audio/mpeg,audio/wav · needs image or video · reference media ≤62914560 bytes · video+videoMode=reference|edit|extend · 2–15s (edit 2–15s, output requested) · outputDurations=reference:4–15s,edit:4–15s,extend:4–15s · 24–60fps · 300–6000px/side · 407696–8295044px · aspect 0.4–2.5 · billedSeconds=max(ceil(inputSeconds) + outputSeconds, outputSeconds + ceil(outputSeconds * 2 / 3)) · quoteOnly=true

    bytedance/seedance-2.0-mini-spicy · referenceVideo≤3 · 2–15s each · ≤15s total · 52428800 bytes · video/mp4,video/quicktime · referenceAudio≤3 · 15000000 bytes · audio/mpeg,audio/wav · needs image or video · reference media ≤62914560 bytes · video+videoMode=reference|edit|extend · 2–15s (edit 2–15s, output requested) · outputDurations=reference:4–15s,edit:4–15s,extend:4–15s · 24–60fps · 300–6000px/side · 407696–8295044px · aspect 0.4–2.5 · billedSeconds=max(ceil(inputSeconds) + outputSeconds, outputSeconds + ceil(outputSeconds * 2 / 3)) · quoteOnly=true

    w3.0-video · referenceVideo≤5 · 1–15s each · ≤15s total · 100000000 bytes · video/mp4,video/quicktime · referenceAudio≤5 · 1–15s each · ≤15s total · 15000000 bytes · audio/mpeg,audio/wav · needs image or video · reference media ≤62914560 bytes · video: not accepted · 240–4096px/side · 57600–16777216px · aspect 0.125–8 · billedSeconds=ceil((inputSeconds + outputSeconds) * 1000) / 1000 · quoteOnly=true

    w3.0-video-pro · referenceVideo≤5 · 1–15s each · ≤15s total · 100000000 bytes · video/mp4,video/quicktime · referenceAudio≤5 · 1–15s each · ≤15s total · 15000000 bytes · audio/mpeg,audio/wav · needs image or video · reference media ≤62914560 bytes · video: not accepted · 240–4096px/side · 57600–16777216px · aspect 0.125–8 · billedSeconds=ceil((inputSeconds + outputSeconds) * 1000) / 1000 · quoteOnly=true

    Output format (videoOutput)

    Measured output format of generated videos. audioTrack included means every result carries a soundtrack; audioControl not_supported means the API cannot turn it off, so remove it in post-production if you need silence.

    volcengine/doubao-seedance-2.5 · container=video/mp4 · videoCodec=h264 · audioTrack=included · audioControl=not_supported

    volcengine/doubao-seedance-2.0 · container=video/mp4 · videoCodec=h264 · audioTrack=included · audioControl=not_supported

    volcengine/doubao-seedance-2.0-fast · container=video/mp4 · videoCodec=h264 · audioTrack=included · audioControl=not_supported

    volcengine/doubao-seedance-2.0-mini · container=video/mp4 · videoCodec=h264 · audioTrack=included · audioControl=not_supported

    wan2.6-t2v · T2V · executionModelId=wan2.6-t2v · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15 · durationPointsTable=2s=22,3s=33,4s=43,5s=54,6s=65,7s=76,8s=86,9s=97,10s=108,11s=118,12s=129,13s=140,14s=151,15s=161

    wan2.6-t2v · I2V · executionModelId=wan2.6-i2v · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15 · durationPointsTable=2s=14,3s=21,4s=27,5s=34,6s=41,7s=47,8s=54,9s=61,10s=67,11s=74,12s=81,13s=88,14s=94,15s=101 · image=image:20971520

    wan2.6-t2v · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    kling/kling-v3-omni-video-generation · T2V · executionModelId=kling/kling-v3-omni-video-generation · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=3,4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=3,4,5,6,7,8,9,10,11,12,13,14,15 · durationPointsTable=3s=39,4s=52,5s=65,6s=78,7s=91,8s=103,9s=116,10s=129,11s=142,12s=155,13s=168,14s=181,15s=193

    kling/kling-v3-omni-video-generation · I2V · executionModelId=kling/kling-v3-omni-video-generation · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=3,4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=3,4,5,6,7,8,9,10,11,12,13,14,15 · durationPointsTable=3s=21,4s=27,5s=34,6s=41,7s=47,8s=54,9s=61,10s=67,11s=74,12s=81,13s=88,14s=94,15s=101 · image=image:10485760

    kling/kling-v3-omni-video-generation · V2V_EDIT · executionModelId=kling/kling-v3-omni-video-generation · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=3,4,5,6,7,8,9,10 · billableDurations=3,4,5,6,7,8,9,10 · durationPointsTable=3s=31,4s=41,5s=51,6s=61,7s=71,8s=81,9s=91,10s=101 · multipart=video:52428800 · legacy=videoBase64/videoMimeType:20971520

    happyhorse-1.1-t2v · T2V · executionModelId=happyhorse-1.1-t2v · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=3,4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=3,4,5,6,7,8,9,10,11,12,13,14,15 · durationPointsTable=3s=39,4s=52,5s=65,6s=78,7s=91,8s=103,9s=116,10s=129,11s=142,12s=155,13s=168,14s=181,15s=193

    happyhorse-1.1-t2v · I2V · executionModelId=happyhorse-1.1-i2v · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=3,4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=3,4,5,6,7,8,9,10,11,12,13,14,15 · durationPointsTable=3s=16,4s=21,5s=26,6s=31,7s=36,8s=41,9s=46,10s=51,11s=56,12s=61,13s=66,14s=71,15s=76 · image=image:20971520

    happyhorse-1.1-t2v · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    volcengine/doubao-seedance-2.5 · T2V · executionModelId=volcengine/doubao-seedance-2.5 · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=480p,720p,1080p · resolutionDurationPointsTables=480p[4s=31,5s=38,6s=46,7s=53,8s=61,9s=68,10s=76,11s=83,12s=91,13s=98,14s=106,15s=113,16s=121,17s=128,18s=136,19s=143,20s=151,21s=158,22s=166,23s=173,24s=181,25s=188,26s=196,27s=203,28s=211,29s=218,30s=226]|720p[4s=69,5s=86,6s=102,7s=119,8s=136,9s=153,10s=170,11s=187,12s=204,13s=221,14s=237,15s=254,16s=271,17s=288,18s=305,19s=322,20s=339,21s=356,22s=372,23s=389,24s=406,25s=423,26s=440,27s=457,28s=474,29s=491,30s=507]|1080p[4s=169,5s=211,6s=253,7s=295,8s=336,9s=378,10s=420,11s=462,12s=503,13s=545,14s=587,15s=629,16s=670,17s=712,18s=754,19s=796,20s=838,21s=879,22s=921,23s=963,24s=1005,25s=1046,26s=1088,27s=1130,28s=1172,29s=1213,30s=1255]

    volcengine/doubao-seedance-2.5 · I2V · executionModelId=volcengine/doubao-seedance-2.5 · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=480p,720p,1080p · resolutionDurationPointsTables=480p[4s=31,5s=38,6s=46,7s=53,8s=61,9s=68,10s=76,11s=83,12s=91,13s=98,14s=106,15s=113,16s=121,17s=128,18s=136,19s=143,20s=151,21s=158,22s=166,23s=173,24s=181,25s=188,26s=196,27s=203,28s=211,29s=218,30s=226]|720p[4s=69,5s=86,6s=102,7s=119,8s=136,9s=153,10s=170,11s=187,12s=204,13s=221,14s=237,15s=254,16s=271,17s=288,18s=305,19s=322,20s=339,21s=356,22s=372,23s=389,24s=406,25s=423,26s=440,27s=457,28s=474,29s=491,30s=507]|1080p[4s=169,5s=211,6s=253,7s=295,8s=336,9s=378,10s=420,11s=462,12s=503,13s=545,14s=587,15s=629,16s=670,17s=712,18s=754,19s=796,20s=838,21s=879,22s=921,23s=963,24s=1005,25s=1046,26s=1088,27s=1130,28s=1172,29s=1213,30s=1255] · image=image:20971520 · lastImage=lastImage:20971520

    volcengine/doubao-seedance-2.5 · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    volcengine/doubao-seedance-2.5 · I2V_LAST · executionModelId=volcengine/doubao-seedance-2.5 · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=480p,720p,1080p · resolutionDurationPointsTables=480p[4s=31,5s=38,6s=46,7s=53,8s=61,9s=68,10s=76,11s=83,12s=91,13s=98,14s=106,15s=113,16s=121,17s=128,18s=136,19s=143,20s=151,21s=158,22s=166,23s=173,24s=181,25s=188,26s=196,27s=203,28s=211,29s=218,30s=226]|720p[4s=69,5s=86,6s=102,7s=119,8s=136,9s=153,10s=170,11s=187,12s=204,13s=221,14s=237,15s=254,16s=271,17s=288,18s=305,19s=322,20s=339,21s=356,22s=372,23s=389,24s=406,25s=423,26s=440,27s=457,28s=474,29s=491,30s=507]|1080p[4s=169,5s=211,6s=253,7s=295,8s=336,9s=378,10s=420,11s=462,12s=503,13s=545,14s=587,15s=629,16s=670,17s=712,18s=754,19s=796,20s=838,21s=879,22s=921,23s=963,24s=1005,25s=1046,26s=1088,27s=1130,28s=1172,29s=1213,30s=1255] · image=image:20971520 · lastImage=lastImage:20971520

    volcengine/doubao-seedance-2.5 · R2V · executionModelId=volcengine/doubao-seedance-2.5 · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=480p,720p,1080p · resolutionDurationPointsTables=480p[4s=31,5s=38,6s=46,7s=53,8s=61,9s=68,10s=76,11s=83,12s=91,13s=98,14s=106,15s=113,16s=121,17s=128,18s=136,19s=143,20s=151,21s=158,22s=166,23s=173,24s=181,25s=188,26s=196,27s=203,28s=211,29s=218,30s=226]|720p[4s=69,5s=86,6s=102,7s=119,8s=136,9s=153,10s=170,11s=187,12s=204,13s=221,14s=237,15s=254,16s=271,17s=288,18s=305,19s=322,20s=339,21s=356,22s=372,23s=389,24s=406,25s=423,26s=440,27s=457,28s=474,29s=491,30s=507]|1080p[4s=169,5s=211,6s=253,7s=295,8s=336,9s=378,10s=420,11s=462,12s=503,13s=545,14s=587,15s=629,16s=670,17s=712,18s=754,19s=796,20s=838,21s=879,22s=921,23s=963,24s=1005,25s=1046,26s=1088,27s=1130,28s=1172,29s=1213,30s=1255]

    volcengine/doubao-seedance-2.0 · T2V · executionModelId=volcengine/doubao-seedance-2.0 · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p,1080p,4k · resolutionDurationPointsTables=480p[4s=21,5s=26,6s=32,7s=37,8s=42,9s=47,10s=52,11s=57,12s=63,13s=68,14s=73,15s=78]|720p[4s=45,5s=56,6s=67,7s=79,8s=90,9s=101,10s=112,11s=123,12s=134,13s=145,14s=156,15s=167]|1080p[4s=112,5s=140,6s=168,7s=195,8s=223,9s=251,10s=278,11s=306,12s=334,13s=361,14s=389,15s=417]|4k[4s=228,5s=285,6s=341,7s=398,8s=454,9s=511,10s=567,11s=623,12s=680,13s=736,14s=793,15s=849]

    volcengine/doubao-seedance-2.0 · I2V · executionModelId=volcengine/doubao-seedance-2.0 · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p,1080p,4k · resolutionDurationPointsTables=480p[4s=21,5s=26,6s=32,7s=37,8s=42,9s=47,10s=52,11s=57,12s=63,13s=68,14s=73,15s=78]|720p[4s=45,5s=56,6s=67,7s=79,8s=90,9s=101,10s=112,11s=123,12s=134,13s=145,14s=156,15s=167]|1080p[4s=112,5s=140,6s=168,7s=195,8s=223,9s=251,10s=278,11s=306,12s=334,13s=361,14s=389,15s=417]|4k[4s=228,5s=285,6s=341,7s=398,8s=454,9s=511,10s=567,11s=623,12s=680,13s=736,14s=793,15s=849] · image=image:20971520 · lastImage=lastImage:20971520

    volcengine/doubao-seedance-2.0 · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    volcengine/doubao-seedance-2.0 · I2V_LAST · executionModelId=volcengine/doubao-seedance-2.0 · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p,1080p,4k · resolutionDurationPointsTables=480p[4s=21,5s=26,6s=32,7s=37,8s=42,9s=47,10s=52,11s=57,12s=63,13s=68,14s=73,15s=78]|720p[4s=45,5s=56,6s=67,7s=79,8s=90,9s=101,10s=112,11s=123,12s=134,13s=145,14s=156,15s=167]|1080p[4s=112,5s=140,6s=168,7s=195,8s=223,9s=251,10s=278,11s=306,12s=334,13s=361,14s=389,15s=417]|4k[4s=228,5s=285,6s=341,7s=398,8s=454,9s=511,10s=567,11s=623,12s=680,13s=736,14s=793,15s=849] · image=image:20971520 · lastImage=lastImage:20971520

    volcengine/doubao-seedance-2.0 · R2V · executionModelId=volcengine/doubao-seedance-2.0 · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p,1080p,4k · resolutionDurationPointsTables=480p[4s=21,5s=26,6s=32,7s=37,8s=42,9s=47,10s=52,11s=57,12s=63,13s=68,14s=73,15s=78]|720p[4s=45,5s=56,6s=67,7s=79,8s=90,9s=101,10s=112,11s=123,12s=134,13s=145,14s=156,15s=167]|1080p[4s=112,5s=140,6s=168,7s=195,8s=223,9s=251,10s=278,11s=306,12s=334,13s=361,14s=389,15s=417]|4k[4s=228,5s=285,6s=341,7s=398,8s=454,9s=511,10s=567,11s=623,12s=680,13s=736,14s=793,15s=849]

    volcengine/doubao-seedance-2.0-fast · T2V · executionModelId=volcengine/doubao-seedance-2.0-fast · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=17,5s=21,6s=26,7s=30,8s=34,9s=38,10s=42,11s=46,12s=50,13s=55,14s=59,15s=63]|720p[4s=37,5s=45,6s=54,7s=63,8s=72,9s=81,10s=90,11s=99,12s=108,13s=117,14s=126,15s=135]

    volcengine/doubao-seedance-2.0-fast · I2V · executionModelId=volcengine/doubao-seedance-2.0-fast · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=17,5s=21,6s=26,7s=30,8s=34,9s=38,10s=42,11s=46,12s=50,13s=55,14s=59,15s=63]|720p[4s=37,5s=45,6s=54,7s=63,8s=72,9s=81,10s=90,11s=99,12s=108,13s=117,14s=126,15s=135] · image=image:20971520 · lastImage=lastImage:20971520

    volcengine/doubao-seedance-2.0-fast · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    volcengine/doubao-seedance-2.0-fast · I2V_LAST · executionModelId=volcengine/doubao-seedance-2.0-fast · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=17,5s=21,6s=26,7s=30,8s=34,9s=38,10s=42,11s=46,12s=50,13s=55,14s=59,15s=63]|720p[4s=37,5s=45,6s=54,7s=63,8s=72,9s=81,10s=90,11s=99,12s=108,13s=117,14s=126,15s=135] · image=image:20971520 · lastImage=lastImage:20971520

    volcengine/doubao-seedance-2.0-fast · R2V · executionModelId=volcengine/doubao-seedance-2.0-fast · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=17,5s=21,6s=26,7s=30,8s=34,9s=38,10s=42,11s=46,12s=50,13s=55,14s=59,15s=63]|720p[4s=37,5s=45,6s=54,7s=63,8s=72,9s=81,10s=90,11s=99,12s=108,13s=117,14s=126,15s=135]

    volcengine/doubao-seedance-2.0-mini · T2V · executionModelId=volcengine/doubao-seedance-2.0-mini · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=11,5s=13,6s=16,7s=19,8s=21,9s=24,10s=26,11s=29,12s=32,13s=34,14s=37,15s=39]|720p[4s=23,5s=28,6s=34,7s=40,8s=45,9s=51,10s=56,11s=62,12s=67,13s=73,14s=78,15s=84]

    volcengine/doubao-seedance-2.0-mini · I2V · executionModelId=volcengine/doubao-seedance-2.0-mini · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=11,5s=13,6s=16,7s=19,8s=21,9s=24,10s=26,11s=29,12s=32,13s=34,14s=37,15s=39]|720p[4s=23,5s=28,6s=34,7s=40,8s=45,9s=51,10s=56,11s=62,12s=67,13s=73,14s=78,15s=84] · image=image:20971520 · lastImage=lastImage:20971520

    volcengine/doubao-seedance-2.0-mini · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    volcengine/doubao-seedance-2.0-mini · I2V_LAST · executionModelId=volcengine/doubao-seedance-2.0-mini · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=11,5s=13,6s=16,7s=19,8s=21,9s=24,10s=26,11s=29,12s=32,13s=34,14s=37,15s=39]|720p[4s=23,5s=28,6s=34,7s=40,8s=45,9s=51,10s=56,11s=62,12s=67,13s=73,14s=78,15s=84] · image=image:20971520 · lastImage=lastImage:20971520

    volcengine/doubao-seedance-2.0-mini · R2V · executionModelId=volcengine/doubao-seedance-2.0-mini · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=11,5s=13,6s=16,7s=19,8s=21,9s=24,10s=26,11s=29,12s=32,13s=34,14s=37,15s=39]|720p[4s=23,5s=28,6s=34,7s=40,8s=45,9s=51,10s=56,11s=62,12s=67,13s=73,14s=78,15s=84]

    bytedance/seedance-2.5-spicy · T2V · executionModelId=bytedance/seedance-2.5-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=480p,720p,1080p · resolutionDurationPointsTables=480p[4s=47,5s=59,6s=70,7s=82,8s=94,9s=105,10s=117,11s=128,12s=140,13s=151,14s=163,15s=174,16s=186,17s=198,18s=209,19s=221,20s=232,21s=244,22s=255,23s=267,24s=279,25s=290,26s=302,27s=313,28s=325,29s=336,30s=348]|720p[4s=106,5s=132,6s=158,7s=184,8s=210,9s=236,10s=262,11s=288,12s=314,13s=340,14s=366,15s=392,16s=418,17s=444,18s=470,19s=496,20s=522,21s=548,22s=574,23s=600,24s=626,25s=652,26s=678,27s=704,28s=730,29s=756,30s=782]|1080p[4s=259,5s=323,6s=387,7s=451,8s=515,9s=579,10s=643,11s=707,12s=771,13s=835,14s=899,15s=963,16s=1027,17s=1091,18s=1155,19s=1219,20s=1283,21s=1347,22s=1410,23s=1474,24s=1538,25s=1602,26s=1666,27s=1730,28s=1794,29s=1858,30s=1922]

    bytedance/seedance-2.5-spicy · I2V · executionModelId=bytedance/seedance-2.5-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=480p,720p,1080p · resolutionDurationPointsTables=480p[4s=47,5s=59,6s=70,7s=82,8s=94,9s=105,10s=117,11s=128,12s=140,13s=151,14s=163,15s=174,16s=186,17s=198,18s=209,19s=221,20s=232,21s=244,22s=255,23s=267,24s=279,25s=290,26s=302,27s=313,28s=325,29s=336,30s=348]|720p[4s=106,5s=132,6s=158,7s=184,8s=210,9s=236,10s=262,11s=288,12s=314,13s=340,14s=366,15s=392,16s=418,17s=444,18s=470,19s=496,20s=522,21s=548,22s=574,23s=600,24s=626,25s=652,26s=678,27s=704,28s=730,29s=756,30s=782]|1080p[4s=259,5s=323,6s=387,7s=451,8s=515,9s=579,10s=643,11s=707,12s=771,13s=835,14s=899,15s=963,16s=1027,17s=1091,18s=1155,19s=1219,20s=1283,21s=1347,22s=1410,23s=1474,24s=1538,25s=1602,26s=1666,27s=1730,28s=1794,29s=1858,30s=1922] · image=image:20971520

    bytedance/seedance-2.5-spicy · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    bytedance/seedance-2.5-spicy · I2V_LAST · executionModelId=bytedance/seedance-2.5-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=480p,720p,1080p · resolutionDurationPointsTables=480p[4s=49,5s=61,6s=74,7s=86,8s=98,9s=110,10s=122,11s=134,12s=146,13s=158,14s=170,15s=182,16s=194,17s=207,18s=219,19s=231,20s=243,21s=255,22s=267,23s=279,24s=291,25s=303,26s=315,27s=327,28s=340,29s=352,30s=364]|720p[4s=106,5s=132,6s=159,7s=185,8s=211,9s=237,10s=263,11s=289,12s=316,13s=342,14s=368,15s=394,16s=420,17s=446,18s=473,19s=499,20s=525,21s=551,22s=577,23s=603,24s=630,25s=656,26s=682,27s=708,28s=734,29s=760,30s=787]|1080p[4s=261,5s=325,6s=389,7s=454,8s=518,9s=583,10s=647,11s=711,12s=776,13s=840,14s=904,15s=969,16s=1033,17s=1098,18s=1162,19s=1226,20s=1291,21s=1355,22s=1420,23s=1484,24s=1548,25s=1613,26s=1677,27s=1741,28s=1806,29s=1870,30s=1935] · image=image:20971520 · lastImage=lastImage:20971520

    bytedance/seedance-2.5-spicy · R2V · executionModelId=bytedance/seedance-2.5-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=480p,720p,1080p · resolutionDurationPointsTables=480p[4s=47,5s=59,6s=70,7s=82,8s=94,9s=105,10s=117,11s=128,12s=140,13s=151,14s=163,15s=174,16s=186,17s=198,18s=209,19s=221,20s=232,21s=244,22s=255,23s=267,24s=279,25s=290,26s=302,27s=313,28s=325,29s=336,30s=348]|720p[4s=106,5s=132,6s=158,7s=184,8s=210,9s=236,10s=262,11s=288,12s=314,13s=340,14s=366,15s=392,16s=418,17s=444,18s=470,19s=496,20s=522,21s=548,22s=574,23s=600,24s=626,25s=652,26s=678,27s=704,28s=730,29s=756,30s=782]|1080p[4s=259,5s=323,6s=387,7s=451,8s=515,9s=579,10s=643,11s=707,12s=771,13s=835,14s=899,15s=963,16s=1027,17s=1091,18s=1155,19s=1219,20s=1283,21s=1347,22s=1410,23s=1474,24s=1538,25s=1602,26s=1666,27s=1730,28s=1794,29s=1858,30s=1922]

    bytedance/seedance-2.0-spicy · T2V · executionModelId=bytedance/seedance-2.0-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=32,5s=40,6s=48,7s=56,8s=64,9s=72,10s=80,11s=88,12s=96,13s=104,14s=112,15s=119]|720p[4s=69,5s=86,6s=103,7s=120,8s=137,9s=154,10s=171,11s=188,12s=205,13s=222,14s=239,15s=256]

    bytedance/seedance-2.0-spicy · I2V · executionModelId=bytedance/seedance-2.0-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=32,5s=40,6s=48,7s=56,8s=64,9s=72,10s=80,11s=88,12s=96,13s=104,14s=112,15s=119]|720p[4s=69,5s=86,6s=103,7s=120,8s=137,9s=154,10s=171,11s=188,12s=205,13s=222,14s=239,15s=256] · image=image:20971520

    bytedance/seedance-2.0-spicy · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    bytedance/seedance-2.0-spicy · I2V_LAST · executionModelId=bytedance/seedance-2.0-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=32,5s=40,6s=48,7s=56,8s=64,9s=72,10s=80,11s=88,12s=96,13s=104,14s=112,15s=119]|720p[4s=70,5s=87,6s=104,7s=121,8s=138,9s=155,10s=172,11s=190,12s=207,13s=224,14s=241,15s=258] · image=image:20971520 · lastImage=lastImage:20971520

    bytedance/seedance-2.0-spicy · R2V · executionModelId=bytedance/seedance-2.0-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=32,5s=40,6s=48,7s=56,8s=64,9s=72,10s=80,11s=88,12s=96,13s=104,14s=112,15s=119]|720p[4s=69,5s=86,6s=103,7s=120,8s=137,9s=154,10s=171,11s=188,12s=205,13s=222,14s=239,15s=256]

    bytedance/seedance-2.0-fast-spicy · T2V · executionModelId=bytedance/seedance-2.0-fast-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=26,5s=32,6s=39,7s=45,8s=51,9s=58,10s=64,11s=70,12s=77,13s=83,14s=89,15s=96]|720p[4s=55,5s=69,6s=83,7s=96,8s=110,9s=124,10s=137,11s=151,12s=164,13s=178,14s=192,15s=205]

    bytedance/seedance-2.0-fast-spicy · I2V · executionModelId=bytedance/seedance-2.0-fast-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=26,5s=32,6s=39,7s=45,8s=51,9s=58,10s=64,11s=70,12s=77,13s=83,14s=89,15s=96]|720p[4s=55,5s=69,6s=83,7s=96,8s=110,9s=124,10s=137,11s=151,12s=164,13s=178,14s=192,15s=205] · image=image:20971520

    bytedance/seedance-2.0-fast-spicy · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    bytedance/seedance-2.0-fast-spicy · I2V_LAST · executionModelId=bytedance/seedance-2.0-fast-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=26,5s=32,6s=39,7s=45,8s=51,9s=58,10s=64,11s=70,12s=77,13s=83,14s=89,15s=96]|720p[4s=56,5s=70,6s=83,7s=97,8s=111,9s=124,10s=138,11s=152,12s=165,13s=179,14s=193,15s=206] · image=image:20971520 · lastImage=lastImage:20971520

    bytedance/seedance-2.0-fast-spicy · R2V · executionModelId=bytedance/seedance-2.0-fast-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=26,5s=32,6s=39,7s=45,8s=51,9s=58,10s=64,11s=70,12s=77,13s=83,14s=89,15s=96]|720p[4s=55,5s=69,6s=83,7s=96,8s=110,9s=124,10s=137,11s=151,12s=164,13s=178,14s=192,15s=205]

    bytedance/seedance-2.0-mini-spicy · T2V · executionModelId=bytedance/seedance-2.0-mini-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=16,5s=20,6s=24,7s=28,8s=32,9s=36,10s=40,11s=44,12s=48,13s=52,14s=56,15s=60]|720p[4s=35,5s=43,6s=52,7s=60,8s=69,9s=77,10s=86,11s=94,12s=103,13s=111,14s=120,15s=128]

    bytedance/seedance-2.0-mini-spicy · I2V · executionModelId=bytedance/seedance-2.0-mini-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=16,5s=20,6s=24,7s=28,8s=32,9s=36,10s=40,11s=44,12s=48,13s=52,14s=56,15s=60]|720p[4s=35,5s=43,6s=52,7s=60,8s=69,9s=77,10s=86,11s=94,12s=103,13s=111,14s=120,15s=128] · image=image:20971520

    bytedance/seedance-2.0-mini-spicy · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    bytedance/seedance-2.0-mini-spicy · I2V_LAST · executionModelId=bytedance/seedance-2.0-mini-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=16,5s=20,6s=24,7s=28,8s=32,9s=36,10s=40,11s=44,12s=48,13s=52,14s=56,15s=60]|720p[4s=35,5s=44,6s=52,7s=61,8s=69,9s=78,10s=86,11s=95,12s=104,13s=112,14s=121,15s=129] · image=image:20971520 · lastImage=lastImage:20971520

    bytedance/seedance-2.0-mini-spicy · R2V · executionModelId=bytedance/seedance-2.0-mini-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p · resolutionDurationPointsTables=480p[4s=16,5s=20,6s=24,7s=28,8s=32,9s=36,10s=40,11s=44,12s=48,13s=52,14s=56,15s=60]|720p[4s=35,5s=43,6s=52,7s=60,8s=69,9s=77,10s=86,11s=94,12s=103,13s=111,14s=120,15s=128]

    vega-video-1.0-pro · T2V · executionModelId=vega-video-1.0-pro · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[4s=37,5s=46,6s=56,7s=65,8s=74,9s=83,10s=92,11s=101,12s=111,13s=120,14s=129,15s=138]|1080p[4s=80,5s=100,6s=120,7s=140,8s=160,9s=180,10s=200,11s=220,12s=240,13s=260,14s=280,15s=300]

    vega-video-1.0-pro · I2V · executionModelId=vega-video-1.0-pro · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[4s=37,5s=46,6s=56,7s=65,8s=74,9s=83,10s=92,11s=101,12s=111,13s=120,14s=129,15s=138]|1080p[4s=80,5s=100,6s=120,7s=140,8s=160,9s=180,10s=200,11s=220,12s=240,13s=260,14s=280,15s=300] · image=image:20971520 · lastImage=lastImage:20971520

    vega-video-1.0-pro · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    vega-video-1.0-pro-fast · T2V · executionModelId=vega-video-1.0-pro-fast · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[4s=30,5s=38,6s=45,7s=53,8s=60,9s=67,10s=75,11s=82,12s=90,13s=97,14s=105,15s=112]|1080p[4s=65,5s=81,6s=97,7s=114,8s=130,9s=146,10s=162,11s=178,12s=194,13s=211,14s=227,15s=243]

    vega-video-1.0-pro-fast · I2V · executionModelId=vega-video-1.0-pro-fast · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[4s=30,5s=38,6s=45,7s=53,8s=60,9s=67,10s=75,11s=82,12s=90,13s=97,14s=105,15s=112]|1080p[4s=65,5s=81,6s=97,7s=114,8s=130,9s=146,10s=162,11s=178,12s=194,13s=211,14s=227,15s=243] · image=image:20971520 · lastImage=lastImage:20971520

    vega-video-1.0-pro-fast · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    vega-video-1.0-pro-mini · T2V · executionModelId=vega-video-1.0-pro-mini · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[4s=19,5s=24,6s=29,7s=34,8s=38,9s=43,10s=48,11s=53,12s=57,13s=62,14s=67,15s=72]|1080p[4s=42,5s=52,6s=63,7s=73,8s=84,9s=94,10s=104,11s=115,12s=125,13s=136,14s=146,15s=156]

    vega-video-1.0-pro-mini · I2V · executionModelId=vega-video-1.0-pro-mini · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[4s=19,5s=24,6s=29,7s=34,8s=38,9s=43,10s=48,11s=53,12s=57,13s=62,14s=67,15s=72]|1080p[4s=42,5s=52,6s=63,7s=73,8s=84,9s=94,10s=104,11s=115,12s=125,13s=136,14s=146,15s=156] · image=image:20971520 · lastImage=lastImage:20971520

    vega-video-1.0-pro-mini · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    vega-video-1.5-pro · T2V · executionModelId=vega-video-1.5-pro · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[4s=55,5s=69,6s=83,7s=96,8s=110,9s=124,10s=138,11s=151,12s=165,13s=179,14s=192,15s=206,16s=220,17s=234,18s=247,19s=261,20s=275,21s=288,22s=302,23s=316,24s=330,25s=343,26s=357,27s=371,28s=384,29s=398,30s=412]|1080p[4s=120,5s=150,6s=180,7s=209,8s=239,9s=269,10s=299,11s=329,12s=359,13s=388,14s=418,15s=448,16s=478,17s=508,18s=538,19s=568,20s=597,21s=627,22s=657,23s=687,24s=717,25s=747,26s=776,27s=806,28s=836,29s=866,30s=896]

    vega-video-1.5-pro · I2V · executionModelId=vega-video-1.5-pro · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[4s=55,5s=69,6s=83,7s=96,8s=110,9s=124,10s=138,11s=151,12s=165,13s=179,14s=192,15s=206,16s=220,17s=234,18s=247,19s=261,20s=275,21s=288,22s=302,23s=316,24s=330,25s=343,26s=357,27s=371,28s=384,29s=398,30s=412]|1080p[4s=120,5s=150,6s=180,7s=209,8s=239,9s=269,10s=299,11s=329,12s=359,13s=388,14s=418,15s=448,16s=478,17s=508,18s=538,19s=568,20s=597,21s=627,22s=657,23s=687,24s=717,25s=747,26s=776,27s=806,28s=836,29s=866,30s=896] · image=image:20971520 · lastImage=lastImage:20971520

    vega-video-1.5-pro · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    vega-video-1.0-lite · T2V · executionModelId=vega-video-1.0-lite · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=1080p · resolutionDurationPointsTables=1080p[4s=24,5s=29,6s=35,7s=41,8s=47,9s=52,10s=58,11s=64,12s=70,13s=75,14s=81,15s=87]

    vega-video-1.0-lite · I2V · executionModelId=unsupported · officialSupported=true · wired=true · verified=false · customerPublic=false · verifiedDurations= · billableDurations= · image=image:20971520

    vega-video-1.0-lite · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    wan2.7-i2v-spicy · T2V · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    wan2.7-i2v-spicy · I2V · executionModelId=wan2.7-i2v-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15 · resolution=720p · durationPointsTable=2s=30,3s=44,4s=59,5s=74,6s=88,7s=103,8s=117,9s=132,10s=147,11s=161,12s=176,13s=191,14s=205,15s=220 · image=image:20971520

    wan2.7-i2v-spicy · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    w3.0-video · T2V · executionModelId=w3.0-video · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[2s=14,3s=21,4s=27,5s=34,6s=41,7s=48,8s=54,9s=61,10s=68,11s=75,12s=81,13s=88,14s=95,15s=102,16s=108,17s=115,18s=122,19s=129,20s=135,21s=142,22s=149,23s=156,24s=162,25s=169,26s=176,27s=183,28s=189,29s=196,30s=203]|1080p[2s=27,3s=41,4s=54,5s=68,6s=81,7s=95,8s=108,9s=122,10s=135,11s=149,12s=162,13s=176,14s=189,15s=203,16s=216,17s=230,18s=243,19s=257,20s=270,21s=284,22s=297,23s=311,24s=324,25s=338,26s=351,27s=365,28s=378,29s=392,30s=405]

    w3.0-video · I2V · executionModelId=w3.0-video · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[2s=14,3s=21,4s=27,5s=34,6s=41,7s=48,8s=54,9s=61,10s=68,11s=75,12s=81,13s=88,14s=95,15s=102,16s=108,17s=115,18s=122,19s=129,20s=135,21s=142,22s=149,23s=156,24s=162,25s=169,26s=176,27s=183,28s=189,29s=196,30s=203]|1080p[2s=27,3s=41,4s=54,5s=68,6s=81,7s=95,8s=108,9s=122,10s=135,11s=149,12s=162,13s=176,14s=189,15s=203,16s=216,17s=230,18s=243,19s=257,20s=270,21s=284,22s=297,23s=311,24s=324,25s=338,26s=351,27s=365,28s=378,29s=392,30s=405] · image=image:20971520 · lastImage=lastImage:20971520

    w3.0-video · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    w3.0-video · I2V_LAST · executionModelId=w3.0-video · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[2s=14,3s=21,4s=27,5s=34,6s=41,7s=48,8s=54,9s=61,10s=68,11s=75,12s=81,13s=88,14s=95,15s=102,16s=108,17s=115,18s=122,19s=129,20s=135,21s=142,22s=149,23s=156,24s=162,25s=169,26s=176,27s=183,28s=189,29s=196,30s=203]|1080p[2s=27,3s=41,4s=54,5s=68,6s=81,7s=95,8s=108,9s=122,10s=135,11s=149,12s=162,13s=176,14s=189,15s=203,16s=216,17s=230,18s=243,19s=257,20s=270,21s=284,22s=297,23s=311,24s=324,25s=338,26s=351,27s=365,28s=378,29s=392,30s=405] · image=image:20971520 · lastImage=lastImage:20971520

    w3.0-video · R2V · executionModelId=w3.0-video · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=720p,1080p · resolutionDurationPointsTables=720p[2s=14,3s=21,4s=27,5s=34,6s=41,7s=48,8s=54,9s=61,10s=68,11s=75,12s=81,13s=88,14s=95,15s=102,16s=108,17s=115,18s=122,19s=129,20s=135,21s=142,22s=149,23s=156,24s=162,25s=169,26s=176,27s=183,28s=189,29s=196,30s=203]|1080p[2s=27,3s=41,4s=54,5s=68,6s=81,7s=95,8s=108,9s=122,10s=135,11s=149,12s=162,13s=176,14s=189,15s=203,16s=216,17s=230,18s=243,19s=257,20s=270,21s=284,22s=297,23s=311,24s=324,25s=338,26s=351,27s=365,28s=378,29s=392,30s=405]

    w3.0-video-pro · T2V · executionModelId=w3.0-video-pro · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=1080p,2k · resolutionDurationPointsTables=1080p[2s=25,3s=37,4s=49,5s=61,6s=73,7s=86,8s=98,9s=110,10s=122,11s=134,12s=146,13s=158,14s=171,15s=183,16s=195,17s=207,18s=219,19s=231,20s=243,21s=256,22s=268,23s=280,24s=292,25s=304,26s=316,27s=329,28s=341,29s=353,30s=365]|2k[2s=27,3s=41,4s=54,5s=68,6s=81,7s=95,8s=108,9s=122,10s=135,11s=149,12s=162,13s=176,14s=189,15s=203,16s=216,17s=230,18s=243,19s=257,20s=270,21s=284,22s=297,23s=311,24s=324,25s=338,26s=351,27s=365,28s=378,29s=392,30s=405]

    w3.0-video-pro · I2V · executionModelId=w3.0-video-pro · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=1080p,2k · resolutionDurationPointsTables=1080p[2s=25,3s=37,4s=49,5s=61,6s=73,7s=86,8s=98,9s=110,10s=122,11s=134,12s=146,13s=158,14s=171,15s=183,16s=195,17s=207,18s=219,19s=231,20s=243,21s=256,22s=268,23s=280,24s=292,25s=304,26s=316,27s=329,28s=341,29s=353,30s=365]|2k[2s=27,3s=41,4s=54,5s=68,6s=81,7s=95,8s=108,9s=122,10s=135,11s=149,12s=162,13s=176,14s=189,15s=203,16s=216,17s=230,18s=243,19s=257,20s=270,21s=284,22s=297,23s=311,24s=324,25s=338,26s=351,27s=365,28s=378,29s=392,30s=405] · image=image:20971520 · lastImage=lastImage:20971520

    w3.0-video-pro · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    w3.0-video-pro · I2V_LAST · executionModelId=w3.0-video-pro · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=1080p,2k · resolutionDurationPointsTables=1080p[2s=25,3s=37,4s=49,5s=61,6s=73,7s=86,8s=98,9s=110,10s=122,11s=134,12s=146,13s=158,14s=171,15s=183,16s=195,17s=207,18s=219,19s=231,20s=243,21s=256,22s=268,23s=280,24s=292,25s=304,26s=316,27s=329,28s=341,29s=353,30s=365]|2k[2s=27,3s=41,4s=54,5s=68,6s=81,7s=95,8s=108,9s=122,10s=135,11s=149,12s=162,13s=176,14s=189,15s=203,16s=216,17s=230,18s=243,19s=257,20s=270,21s=284,22s=297,23s=311,24s=324,25s=338,26s=351,27s=365,28s=378,29s=392,30s=405] · image=image:20971520 · lastImage=lastImage:20971520

    w3.0-video-pro · R2V · executionModelId=w3.0-video-pro · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · billableDurations=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 · resolutions=1080p,2k · resolutionDurationPointsTables=1080p[2s=25,3s=37,4s=49,5s=61,6s=73,7s=86,8s=98,9s=110,10s=122,11s=134,12s=146,13s=158,14s=171,15s=183,16s=195,17s=207,18s=219,19s=231,20s=243,21s=256,22s=268,23s=280,24s=292,25s=304,26s=316,27s=329,28s=341,29s=353,30s=365]|2k[2s=27,3s=41,4s=54,5s=68,6s=81,7s=95,8s=108,9s=122,10s=135,11s=149,12s=162,13s=176,14s=189,15s=203,16s=216,17s=230,18s=243,19s=257,20s=270,21s=284,22s=297,23s=311,24s=324,25s=338,26s=351,27s=365,28s=378,29s=392,30s=405]

    seedance-2.5-i2v-spicy · T2V · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    seedance-2.5-i2v-spicy · I2V · executionModelId=seedance-2.5-i2v-spicy · officialSupported=true · wired=true · verified=true · customerPublic=true · verifiedDurations=4,5,6,7,8,9,10,11,12,13,14,15 · billableDurations=4,5,6,7,8,9,10,11,12,13,14,15 · resolutions=480p,720p,1080p,4k · resolutionDurationPointsTables=480p[4s=81,5s=102,6s=122,7s=142,8s=162,9s=183,10s=203,11s=223,12s=243,13s=264,14s=284,15s=304]|720p[4s=162,5s=203,6s=243,7s=284,8s=324,9s=365,10s=405,11s=446,12s=486,13s=527,14s=567,15s=608]|1080p[4s=405,5s=507,6s=608,7s=709,8s=810,9s=912,10s=1013,11s=1114,12s=1216,13s=1317,14s=1418,15s=1519]|4k[4s=810,5s=1013,6s=1216,7s=1418,8s=1620,9s=1823,10s=2025,11s=2228,12s=2431,13s=2633,14s=2835,15s=3038] · image=image:20971520 · lastImage=lastImage:20971520

    seedance-2.5-i2v-spicy · V2V_EDIT · executionModelId=unsupported · officialSupported=false · wired=false · verified=false · customerPublic=false · verifiedDurations= · billableDurations=

    ModelCapabilityBadgesresolutionDurations and pointsStart / last framestarterPlanAccess
    wan2.7-image
    Input: text prompt; existing size supports 768–2048 pixels per side, default 1:1, existing ratios 16:9/9:16/1:1. size is "W*H" with 768–2048 pixels per side; out-of-range or malformed values become 1024*1024 without an error. Output: generated image (for example 1920*1080 gives a 1920×1080 PNG). Submission returns 202 with a taskId; poll POST /v1/media/task/status for the image URL. Neither the 202 nor the status response carries quotaCost; use the catalog price. Retention is not promised: download and store the result as soon as it succeeds. Failures come in three kinds. (1) Submit: HTTP 502 error image_dispatch_rejected means the request was clearly refused and no task was created; held points are released where possible; HTTP 502 error image_dispatch_unknown means the outcome is uncertain, so points are kept for reconciliation and you should not resubmit at once; other HTTP 500 dispatch errors (for example image_dispatch_not_started) also keep points for reconciliation. (2) Status query: HTTP 502 {"error":"Failed to reach provider"} is temporary and refunds nothing, so keep polling the same taskId; if the image was generated but could not be stored for our own delivery, HTTP 502 error image_delivery_failed is returned: a task not yet charged has its held points refunded where possible (status failed); if that refund cannot be confirmed the error is settlement_pending and the points stay held for reconciliation; an already charged task returns status delivery_failed with generationStatus succeeded and is not refunded automatically. (3) Terminal failure: HTTP 200 with status failed and error generation_failed, without a code; held points are refunded where possible. Image URLs are always TokenTable URLs, never upstream links. I2V and reference images are unsupported; no image-editing capability is added.
    ———3 points/generationstart=unsupported; last=unsupportedavailable
    kling/kling-v3-omni-image-generation
    Input: text prompt; existing ratios 16:9/9:16/1:1, default 1:1, existing output tier 1K. size is converted to the nearest ratio and the provider decides the pixels (for example 1080*1920 gives 768×1360); size is "W*H" with 768–2048 pixels per side; out-of-range or malformed values become 1024*1024 without an error. Output: generated image. Submission returns 202 with a taskId; poll POST /v1/media/task/status for the image URL. Neither the 202 nor the status response carries quotaCost; use the catalog price. Retention is not promised: download and store the result as soon as it succeeds. Failures come in three kinds. (1) Submit: HTTP 502 error image_dispatch_rejected means the request was clearly refused and no task was created; held points are released where possible; HTTP 502 error image_dispatch_unknown means the outcome is uncertain, so points are kept for reconciliation and you should not resubmit at once; other HTTP 500 dispatch errors (for example image_dispatch_not_started) also keep points for reconciliation. (2) Status query: HTTP 502 {"error":"Failed to reach provider"} is temporary and refunds nothing, so keep polling the same taskId; if the image was generated but could not be stored for our own delivery, HTTP 502 error image_delivery_failed is returned: a task not yet charged has its held points refunded where possible (status failed); if that refund cannot be confirmed the error is settlement_pending and the points stay held for reconciliation; an already charged task returns status delivery_failed with generationStatus succeeded and is not refunded automatically. (3) Terminal failure: HTTP 200 with status failed and error generation_failed, without a code; held points are refunded where possible. Image URLs are always TokenTable URLs, never upstream links. I2V and reference images are unsupported; no image-editing capability is added.
    ———3 points/generationstart=unsupported; last=unsupportedavailable
    qwen-image-3.0
    Input: text prompt and existing size; existing ratios 16:9/9:16/1:1, default 1:1. size is "W*H" with 768–2048 pixels per side; out-of-range or malformed values become 1024*1024 without an error. No additional resolution selection is promised. Output: generated image (for example 1080*1920 gives a 1080×1920 PNG). Submission returns 202 with a taskId; poll POST /v1/media/task/status for the image URL. Neither the 202 nor the status response carries quotaCost; use the catalog price. Retention is not promised: download and store the result as soon as it succeeds. Failures come in three kinds. (1) Submit: HTTP 502 error image_dispatch_rejected means the request was clearly refused and no task was created; held points are released where possible; HTTP 502 error image_dispatch_unknown means the outcome is uncertain, so points are kept for reconciliation and you should not resubmit at once; other HTTP 500 dispatch errors (for example image_dispatch_not_started) also keep points for reconciliation. (2) Status query: HTTP 502 {"error":"Failed to reach provider"} is temporary and refunds nothing, so keep polling the same taskId; if the image was generated but could not be stored for our own delivery, HTTP 502 error image_delivery_failed is returned: a task not yet charged has its held points refunded where possible (status failed); if that refund cannot be confirmed the error is settlement_pending and the points stay held for reconciliation; an already charged task returns status delivery_failed with generationStatus succeeded and is not refunded automatically. (3) Terminal failure: HTTP 200 with status failed and error generation_failed, without a code; held points are refunded where possible. Image URLs are always TokenTable URLs, never upstream links. I2V and reference images are unsupported; no image-editing capability is added.
    ———2 points/generationstart=unsupported; last=unsupportedavailable
    volcengine/doubao-seedream-5.0-pro
    Input: text prompt. Optional reference images: 1 to 3 (repeat multipart referenceImage, or JSON referenceImagesBase64), JPEG, PNG, WebP or AVIF, up to 10 MiB each and 40 MiB combined, each side at least 15 px, at most 36,000,000 pixels per image, aspect ratio 1:16 to 16:1; refer to them in the prompt as image 1, image 2 in upload order; points are the same with or without reference images. Upload only images you have the right to use. Explicit selection only, fixed 1.5K, no aspect-ratio parameter, size is not used. Output: one image per synchronous response (JPEG); n>1 is unsupported. The size field in the response is not the actual output size; read the downloaded file. Success returns 200 with images (one URL), model, size and quotaCost; the URL points to GET /v1/media/blob/:id, which holds the image in server memory for one hour and loses it on a server restart (then 410 blob_expired), so download it immediately. A generation failure returns 502 (504 on timeout) with error; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. If the connection closes before delivery, the image is not delivered and must be requested again. Generation can exceed 60 seconds and an intermediate proxy may answer 504 first; do not resubmit at once (the image may still be generating; if it cannot be delivered, held points are released where possible). I2V, layer decomposition and interactive editing are unsupported.
    ———4 points/generationstart=unsupported; last=unsupportedavailable
    volcengine/doubao-seedream-5.0-flash
    Input: text prompt. Optional reference images: 1 to 10 (repeat multipart referenceImage, or JSON referenceImagesBase64), JPEG, PNG, WebP or AVIF, up to 10 MiB each and 40 MiB combined, each side at least 15 px, at most 36,000,000 pixels per image, aspect ratio 1:16 to 16:1; refer to them in the prompt as image 1, image 2 in upload order; points are the same with or without reference images. Upload only images you have the right to use. Explicit selection only, fixed 2K, no aspect-ratio parameter, size is not used. Output: one image per synchronous response (JPEG, aspect chosen by the model, for example 1584×2816); n>1 is unsupported. The size field in the response is not the actual output size; read the downloaded file. Save it as .jpg: when re-uploaded to the video endpoint the file extension must match the real format. Success returns 200 with images (one URL), model, size and quotaCost; the URL points to GET /v1/media/blob/:id, which holds the image in server memory for one hour and loses it on a server restart (then 410 blob_expired), so download it immediately. A generation failure returns 502 (504 on timeout) with error; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. If the connection closes before delivery, the image is not delivered and must be requested again. I2V, layer decomposition and interactive editing are unsupported.
    ———2 points/generationstart=unsupported; last=unsupportedavailable
    bytedance/seedream-5.0-pro-spicy
    Input: text prompt, up to 4000 characters. Adult content is allowed; minors and non-consensual content are not, and such prompts are refused before any points are held (422 input_rejected). Optional reference images: 1 to 3 (multipart referenceImage or JSON referenceImagesBase64, same limits as the other reference-image models, same points), through the API or the website chat; refer to them in the prompt as image 1, image 2 in upload order. Upload only images you have the right to use. Explicit selection only, fixed 1.5K, size is not used. Output: one image per synchronous response (JPEG); n>1 is unsupported. 6 points per image. Success returns 200 with images (one URL), model, size and quotaCost; the URL points to GET /v1/media/blob/:id, which holds the image in server memory for one hour and loses it on a server restart (then 410 blob_expired), so download it immediately. A generation failure returns 502 (504 on timeout) with error; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. If the connection closes before delivery, the image is not delivered and must be requested again. Retention is not guaranteed; download the image as soon as you get it.
    —Spicy—6 points/generationstart=unsupported; last=unsupportedavailable
    bytedance/seedream-5.0-lite-spicy
    Input: text prompt, up to 4000 characters. Adult content is allowed; minors and non-consensual content are not, and such prompts are refused before any points are held (422 input_rejected). Optional reference images: 1 to 10 (multipart referenceImage or JSON referenceImagesBase64, same limits as the other reference-image models, same points), through the API or the website chat; refer to them in the prompt as image 1, image 2 in upload order. Upload only images you have the right to use. Explicit selection only, fixed 2K, size is not used. Output: one image per synchronous response (JPEG); n>1 is unsupported. 4 points per image. Success returns 200 with images (one URL), model, size and quotaCost; the URL points to GET /v1/media/blob/:id, which holds the image in server memory for one hour and loses it on a server restart (then 410 blob_expired), so download it immediately. A generation failure returns 502 (504 on timeout) with error; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. If the connection closes before delivery, the image is not delivered and must be requested again. Retention is not guaranteed; download the image as soon as you get it.
    —Spicy—4 points/generationstart=unsupported; last=unsupportedavailable
    bytedance/seedream-5.0-flash-spicy
    Input: text prompt, up to 4000 characters. Adult content is allowed; minors and non-consensual content are not, and such prompts are refused before any points are held (422 input_rejected). Text-to-image only; reference images are not accepted. Explicit selection only, fixed 2K, size is not used. Output: one image per synchronous response (JPEG); n>1 is unsupported. 3 points per image. Success returns 200 with images (one URL), model, size and quotaCost; the URL points to GET /v1/media/blob/:id, which holds the image in server memory for one hour and loses it on a server restart (then 410 blob_expired), so download it immediately. A generation failure returns 502 (504 on timeout) with error; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. If the connection closes before delivery, the image is not delivered and must be requested again. Retention is not guaranteed; download the image as soon as you get it.
    —Spicy—3 points/generationstart=unsupported; last=unsupportedavailable
    vega-image-1.0-lite
    Vega Image 1.0 Lite. Input: prompt up to 4000 characters; text-to-image, or text plus 1–3 reference images (multipart referenceImage or JSON referenceImagesBase64; up to 7 MB each, at least 300 px per side, width/height ratio up to 2.5). Reference images add nothing. A request with reference images must send contentAttestation: "non-real-person-or-consent-held", stating that the images show no real person, or that every real person shown has consented and you hold the rights to them; without it the request returns 400 content_attestation_required. Resolution 1K, 2K, 4K (resolution) and aspect ratio 1:1, 2:3, 3:2, 3:4, 4:3, 9:16, 16:9, 21:9 (aspectRatio); a preset size alone also works. One image per request; n>1 is unsupported. Points depend on the resolution tier: 1K 2 points per image, 2K 2 points per image, 4K 3 points per image. Content: text-to-image may generate adult content (Spicy); every character must be an adult, and content involving minors or non-consent is not allowed. A prompt that asks for minors, face swapping or non-consensual content is refused before any points are held (422 input_rejected, reason input_policy): change the prompt and submit again. Output: asynchronous; the submit returns 202 with taskId, poll POST /v1/media/task/status, and a success returns the image URL. Retention is not promised: download the image as soon as you receive it. Failures: a parameter or image outside the model limits returns 400; a failure after the task is created (including content the upstream policy refuses, which cannot be told apart) returns status failed with error generation_failed; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. Explicit selection only; auto never picks it.
    —Spicy—2 points/generationstart=unsupported; last=unsupportedavailable
    vega-image-1.0-flash
    Vega Image 1.0 Flash. Input: prompt up to 4000 characters; text-to-image, or text plus 1–6 reference images (multipart referenceImage or JSON referenceImagesBase64; up to 7 MB each, at least 300 px per side, width/height ratio up to 2.5). Up to 3 reference images add nothing; 4 / 5 / 6 images add 1 / 2 / 3 points respectively. A request with reference images must send contentAttestation: "non-real-person-or-consent-held", stating that the images show no real person, or that every real person shown has consented and you hold the rights to them; without it the request returns 400 content_attestation_required. Resolution 1K, 2K, 4K (resolution) and aspect ratio 1:1, 2:3, 3:2, 3:4, 4:3, 9:16, 16:9, 21:9 (aspectRatio); a preset size alone also works. One image per request; n>1 is unsupported. Points depend on the resolution tier: 1K 5 points per image, 2K 7 points per image, 4K 11 points per image. Content: this model does not produce adult content; an adult prompt may be refused, or the image may come back toned down (a toned-down image still counts as a success and is charged). For adult content use vega-image-1.0-lite. A prompt that asks for minors, face swapping or non-consensual content is refused before any points are held (422 input_rejected, reason input_policy): change the prompt and submit again. Output: asynchronous; the submit returns 202 with taskId, poll POST /v1/media/task/status, and a success returns the image URL. Retention is not promised: download the image as soon as you receive it. Failures: a parameter or image outside the model limits returns 400; a failure after the task is created (including content the upstream policy refuses, which cannot be told apart) returns status failed with error generation_failed; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. Explicit selection only; auto never picks it.
    ———5 points/generationstart=unsupported; last=unsupportedavailable
    vega-image-1.0-pro
    Vega Image 1.0 Pro. Input: prompt up to 4000 characters; text-to-image, or text plus 1–6 reference images (multipart referenceImage or JSON referenceImagesBase64; up to 7 MB each, at least 300 px per side, width/height ratio up to 2.5). Up to 3 reference images add nothing; 4 / 5 / 6 images add 1 / 2 / 4 points respectively. A request with reference images must send contentAttestation: "non-real-person-or-consent-held", stating that the images show no real person, or that every real person shown has consented and you hold the rights to them; without it the request returns 400 content_attestation_required. Resolution 1K, 2K, 4K (resolution) and aspect ratio 1:1, 2:3, 3:2, 3:4, 4:3, 9:16, 16:9, 21:9 (aspectRatio); a preset size alone also works. One image per request; n>1 is unsupported. Points depend on the resolution tier: 1K 10 points per image, 2K 10 points per image, 4K 18 points per image. Content: this model does not produce adult content; an adult prompt may be refused, or the image may come back toned down (a toned-down image still counts as a success and is charged). For adult content use vega-image-1.0-lite. A prompt that asks for minors, face swapping or non-consensual content is refused before any points are held (422 input_rejected, reason input_policy): change the prompt and submit again. Output: asynchronous; the submit returns 202 with taskId, poll POST /v1/media/task/status, and a success returns the image URL. Retention is not promised: download the image as soon as you receive it. Failures: a parameter or image outside the model limits returns 400; a failure after the task is created (including content the upstream policy refuses, which cannot be told apart) returns status failed with error generation_failed; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. Explicit selection only; auto never picks it.
    ———10 points/generationstart=unsupported; last=unsupportedavailable
    z-image-spicy
    Z-Image Spicy. Input: POST /v1/media/image with model and a non-empty prompt; optional width and height (whole numbers 256–1536 each) and seed; one image per call (n=1). size does not change this model's output size, so use width/height; out-of-range values return 400 invalid_request with no charge. Prompt extension is always off. Output: read the format from delivery.contentType or the download Content-Type (no format choice); actual pixels are not measured, so read the downloaded file. Synchronous response: success returns 200 with images; API-key calls also get a delivery descriptor, so download by calling POST /v1/media/delivery/rmw with its method/path/body (browser cookie URLs are not for programmatic download). Failure: an invalid parameter returns 400 invalid_request with no charge; a generation failure returns HTTP 502 error generation_failed and a delivery projection failure HTTP 502 error delivery_failed, both without a code; a refund of held points is attempted, but if it fails the points stay held for reconciliation, so a 502 alone does not prove a refund. 503 delivery_token_unavailable with generationStatus succeeded means the image was generated but delivery and point settlement need reconciliation: it is not refunded automatically, it does not prove the charge completed, and it carries nothing to fetch the image again with; do not resubmit the generation, and contact support to reconcile. Prompts that ask for minors or non-consensual content are refused before any points are held, with 422 input_rejected (reason input_policy); change the prompt and submit again. Retention is not promised: download and store the file as soon as it succeeds. The delivery descriptor expiry is a download grant, not a retention period. Image-to-image, reference images and image editing are unsupported (it is a different model from the closed z-image-turbo-i2i).
    —Spicy—2 points/generationstart=unsupported; last=unsupportedavailable
    chroma
    Chroma. Input: POST /v1/media/image with model=chroma and a non-empty prompt, optional seed; one image per call. The request size is fixed at 1024*1024 (square 1:1); size, width and height do not change it and no other aspect or size is offered. Output: PNG (fixed, no format choice); actual pixels are not measured, so read the downloaded file. Synchronous response: success returns 200 with images; API-key calls also get a delivery descriptor, so download by calling POST /v1/media/delivery/rmw with its method/path/body (browser cookie URLs are not for programmatic download). Failure: an invalid parameter returns 400 invalid_request with no charge; a generation failure returns HTTP 502 error generation_failed and a delivery projection failure HTTP 502 error delivery_failed, both without a code; a refund of held points is attempted, but if it fails the points stay held for reconciliation, so a 502 alone does not prove a refund. 503 delivery_token_unavailable with generationStatus succeeded means the image was generated but delivery and point settlement need reconciliation: it is not refunded automatically, it does not prove the charge completed, and it carries nothing to fetch the image again with; do not resubmit the generation, and contact support to reconcile. Retention is not promised: download and store the file as soon as it succeeds. The delivery descriptor expiry is a download grant, not a retention period. Image-to-image, reference images and image editing are unsupported.
    —Spicy—2 points/generationstart=unsupported; last=unsupportedavailable
    wan2.6-t2v
    Input: T2V prompt or I2V prompt plus one start image (JPEG/PNG/WebP, up to 20 MiB); 2–15 seconds. T2V output: 1080p with 16:9/9:16/1:1 ratios. I2V output: 1080p with no aspect-ratio parameter. T2V aspect is chosen with size: 1920*1080 (16:9), 1080*1920 (9:16) or 1440*1440 (1:1); other "W*H" values become 1920*1080 or 1080*1920 by orientation, and square-but-not-1440, malformed or missing values become 1920*1080 without an error. Output: asynchronous video task, retrieved through the existing task query. Audio: a T2V result was measured with an AAC audio track; I2V is not measured; there is no customer audio setting. Download by following the delivery descriptor in the status response (POST /v1/media/delivery/video). The size in the submission response echoes the request and is not the actual output size; read the downloaded file. Retention is not promised: download and store the result as soon as it succeeds. Failures come in three kinds. (1) Submit: HTTP 502 with error video_generation_failed and no code; held points are released only when the job provably never started, and kept for reconciliation when dispatch was attempted without a reliable taskId (for example a timeout, a non-2xx reply or a lost response), so do not resubmit at once. (2) Status query (POST /v1/media/task/status): HTTP 502 {"error":"Failed to reach provider"} means this query could not learn the outcome; the task is not terminal because of it and nothing is refunded, so keep polling the same taskId and do not resubmit. (3) Terminal failure: HTTP 200 with status failed and error generation_failed; held points are refunded where possible, and if that refund cannot be confirmed HTTP 502 error settlement_pending is returned with the points held for reconciliation; an already charged task is not refunded again for later problems. Reference images, first/last-frame pairs and source video are unsupported.
    T2V, I2V——2s=22, 3s=33, 4s=43, 5s=54, 6s=65, 7s=76, 8s=86, 9s=97, 10s=108, 11s=118, 12s=129, 13s=140, 14s=151, 15s=161start=optional; last=unsupportedpaid_only
    kling/kling-v3-omni-video-generation
    Input: T2V prompt or I2V prompt plus one start image (JPEG/PNG, up to 10 MiB); 3–15 seconds. T2V uses the existing 16:9/9:16/1:1 ratios; I2V and V2V_EDIT provide no aspect-ratio parameter. T2V aspect is chosen with size: 1920*1080 (16:9), 1080*1920 (9:16) or 1440*1440 (1:1); other "W*H" values become 1920*1080 or 1080*1920 by orientation, and square-but-not-1440, malformed or missing values become 1920*1080 without an error. V2V_EDIT uses source video plus prompt for 3–10-second output; MP4/MOV up to 50 MiB multipart or 20 MiB legacy base64. Output: asynchronous video task polled with POST /v1/media/task/status. Resolution: there is no resolution field (T2V is sent in pro mode, I2V and V2V_EDIT in std mode) and the actual dimensions are not measured. Audio: T2V requests sound, I2V and V2V_EDIT request none and V2V_EDIT does not keep the source audio; the actual audio of all three modes is not measured and there is no customer audio setting. Download by following the delivery descriptor in the status response (POST /v1/media/delivery/video). The size in the submission response echoes the request and is not the actual output size; read the downloaded file. Retention is not promised: download and store the result as soon as it succeeds. Failures come in three kinds. (1) Submit: HTTP 502 with error video_generation_failed and no code; held points are released only when the job provably never started, and kept for reconciliation when dispatch was attempted without a reliable taskId (for example a timeout, a non-2xx reply or a lost response), so do not resubmit at once. (2) Status query (POST /v1/media/task/status): HTTP 502 {"error":"Failed to reach provider"} means this query could not learn the outcome; the task is not terminal because of it and nothing is refunded, so keep polling the same taskId and do not resubmit. (3) Terminal failure: HTTP 200 with status failed and error generation_failed; held points are refunded where possible, and if that refund cannot be confirmed HTTP 502 error settlement_pending is returned with the points held for reconciliation; an already charged task is not refunded again for later problems. Reference images, first/last-frame pairs and video extension are unsupported; no undefined resolution selection is promised.
    T2V, I2V, V2V_EDIT——3s=39, 4s=52, 5s=65, 6s=78, 7s=91, 8s=103, 9s=116, 10s=129, 11s=142, 12s=155, 13s=168, 14s=181, 15s=193start=optional; last=unsupportedpaid_only
    happyhorse-1.1-t2v
    Input: T2V prompt or I2V prompt plus one start image (JPEG/PNG/WebP, up to 20 MiB); 3–15 seconds. T2V output: 1080p with 16:9/9:16/1:1 ratios. I2V output: 480p with no aspect-ratio parameter, following the start image (for example a 9:16 image gives 480×848). T2V aspect is chosen with size: 1920*1080 (16:9), 1080*1920 (9:16) or 1440*1440 (1:1); other "W*H" values become 1920*1080 or 1080*1920 by orientation, and square-but-not-1440, malformed or missing values become 1920*1080 without an error. Output: asynchronous video task, retrieved through the existing task query. Audio: an I2V result was measured with an AAC audio track; T2V is not measured; there is no customer audio setting. Download by following the delivery descriptor in the status response (POST /v1/media/delivery/video). The size in the submission response echoes the request and is not the actual output size; read the downloaded file. Retention is not promised: download and store the result as soon as it succeeds. Failures come in three kinds. (1) Submit: HTTP 502 with error video_generation_failed and no code; held points are released only when the job provably never started, and kept for reconciliation when dispatch was attempted without a reliable taskId (for example a timeout, a non-2xx reply or a lost response), so do not resubmit at once. (2) Status query (POST /v1/media/task/status): HTTP 502 {"error":"Failed to reach provider"} means this query could not learn the outcome; the task is not terminal because of it and nothing is refunded, so keep polling the same taskId and do not resubmit. (3) Terminal failure: HTTP 200 with status failed and error generation_failed; held points are refunded where possible, and if that refund cannot be confirmed HTTP 502 error settlement_pending is returned with the points held for reconciliation; an already charged task is not refunded again for later problems. Reference images, first/last-frame pairs and source video are unsupported.
    T2V, I2V——3s=39, 4s=52, 5s=65, 6s=78, 7s=91, 8s=103, 9s=116, 10s=129, 11s=142, 12s=155, 13s=168, 14s=181, 15s=193start=optional; last=unsupportedpaid_only
    volcengine/doubao-seedance-2.5
    Seedance 2.5. Input: T2V prompt; I2V prompt plus a start image (image); I2V_LAST adds a last image (lastImage); R2V takes 1–9 reference images (repeat the referenceImage field; they reach the model in submission order and may be referred to in the prompt as "the first reference image", without a guarantee). Source-video videoMode reference/edit/extend and draft-to-final are also supported; see the POST /v1/media/video field notes. edit/extend can also be requested with operation V2V_EDIT/V2V_EXTEND with the same effect; they are billed by the source-video formula in those field notes and are therefore not listed in the catalog operationContracts (the V2V_EDIT row marked unsupported there describes the Kling-style catalog operation, not the edit/extend of this model). Durations and resolutions follow this model's pricing table. Aspect: modes with a start image follow the start image; when the first and last images differ, the start image wins and the last image is center-cropped; T2V and R2V are fixed at 16:9 and 9:16 cannot be requested; edit/extend keep the source aspect. Output: asynchronous video task delivered as MP4 (measured H.264 video with an AAC audio track); audio cannot be disabled or chosen; download with GET /v1/media/artifact/:taskId (the status delivery descriptor points to the same path); kept for 30 days. The submission size is not the actual output size; read the downloaded file. Failure: when the model refuses the input at submission (content review or limits), the request returns HTTP 422 input_rejected with reason input_moderation or input_invalid and no task is created; any failure after the task was created, including moderation, returns status failed with error "provider failed" and no code; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation.
    T2V, I2V, I2V_LAST, R2V—480p / 720p / 1080p480p: 4s=31, 5s=38, 6s=46, 7s=53, 8s=61, 9s=68, 10s=76, 11s=83, 12s=91, 13s=98, 14s=106, 15s=113, 16s=121, 17s=128, 18s=136, 19s=143, 20s=151, 21s=158, 22s=166, 23s=173, 24s=181, 25s=188, 26s=196, 27s=203, 28s=211, 29s=218, 30s=226 | 720p: 4s=69, 5s=86, 6s=102, 7s=119, 8s=136, 9s=153, 10s=170, 11s=187, 12s=204, 13s=221, 14s=237, 15s=254, 16s=271, 17s=288, 18s=305, 19s=322, 20s=339, 21s=356, 22s=372, 23s=389, 24s=406, 25s=423, 26s=440, 27s=457, 28s=474, 29s=491, 30s=507 | 1080p: 4s=169, 5s=211, 6s=253, 7s=295, 8s=336, 9s=378, 10s=420, 11s=462, 12s=503, 13s=545, 14s=587, 15s=629, 16s=670, 17s=712, 18s=754, 19s=796, 20s=838, 21s=879, 22s=921, 23s=963, 24s=1005, 25s=1046, 26s=1088, 27s=1130, 28s=1172, 29s=1213, 30s=1255start=optional; last=unsupportedpaid_only
    volcengine/doubao-seedance-2.0
    Seedance 2.0. Input: T2V prompt; I2V prompt plus a start image (image); I2V_LAST adds a last image (lastImage); R2V takes 1–9 reference images (repeat the referenceImage field; they reach the model in submission order and may be referred to in the prompt as "the first reference image", without a guarantee). Source-video videoMode reference is also supported; see the POST /v1/media/video field notes. Source-video edit/extend and drafts are unsupported. Durations and resolutions follow this model's pricing table. Aspect: modes with a start image follow the start image; when the first and last images differ, the start image wins and the last image is center-cropped; T2V and R2V are fixed at 16:9 and 9:16 cannot be requested. Output: asynchronous video task delivered as MP4 (measured H.264 video with an AAC audio track); audio cannot be disabled or chosen; download with GET /v1/media/artifact/:taskId (the status delivery descriptor points to the same path); kept for 30 days. The submission size is not the actual output size; read the downloaded file. Failure: when the model refuses the input at submission (content review or limits), the request returns HTTP 422 input_rejected with reason input_moderation or input_invalid and no task is created; any failure after the task was created, including moderation, returns status failed with error "provider failed" and no code; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation.
    T2V, I2V, I2V_LAST, R2V—480p / 720p / 1080p / 4k480p: 4s=21, 5s=26, 6s=32, 7s=37, 8s=42, 9s=47, 10s=52, 11s=57, 12s=63, 13s=68, 14s=73, 15s=78 | 720p: 4s=45, 5s=56, 6s=67, 7s=79, 8s=90, 9s=101, 10s=112, 11s=123, 12s=134, 13s=145, 14s=156, 15s=167 | 1080p: 4s=112, 5s=140, 6s=168, 7s=195, 8s=223, 9s=251, 10s=278, 11s=306, 12s=334, 13s=361, 14s=389, 15s=417 | 4k: 4s=228, 5s=285, 6s=341, 7s=398, 8s=454, 9s=511, 10s=567, 11s=623, 12s=680, 13s=736, 14s=793, 15s=849start=optional; last=unsupportedpaid_only
    volcengine/doubao-seedance-2.0-fast
    Seedance 2.0 fast. Input: T2V prompt; I2V prompt plus a start image (image); I2V_LAST adds a last image (lastImage); R2V takes 1–9 reference images (repeat the referenceImage field; they reach the model in submission order and may be referred to in the prompt as "the first reference image", without a guarantee). Source-video videoMode reference is also supported; see the POST /v1/media/video field notes. Source-video edit/extend and drafts are unsupported. Durations and resolutions follow this model's pricing table. Aspect: modes with a start image follow the start image; when the first and last images differ, the start image wins and the last image is center-cropped; T2V and R2V are fixed at 16:9 and 9:16 cannot be requested. Output: asynchronous video task delivered as MP4 (measured H.264 video with an AAC audio track); audio cannot be disabled or chosen; download with GET /v1/media/artifact/:taskId (the status delivery descriptor points to the same path); kept for 30 days. The submission size is not the actual output size; read the downloaded file. Failure: when the model refuses the input at submission (content review or limits), the request returns HTTP 422 input_rejected with reason input_moderation or input_invalid and no task is created; any failure after the task was created, including moderation, returns status failed with error "provider failed" and no code; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation.
    T2V, I2V, I2V_LAST, R2V—480p / 720p480p: 4s=17, 5s=21, 6s=26, 7s=30, 8s=34, 9s=38, 10s=42, 11s=46, 12s=50, 13s=55, 14s=59, 15s=63 | 720p: 4s=37, 5s=45, 6s=54, 7s=63, 8s=72, 9s=81, 10s=90, 11s=99, 12s=108, 13s=117, 14s=126, 15s=135start=optional; last=unsupportedpaid_only
    volcengine/doubao-seedance-2.0-mini
    Seedance 2.0 mini. Input: T2V prompt; I2V prompt plus a start image (image); I2V_LAST adds a last image (lastImage); R2V takes 1–9 reference images (repeat the referenceImage field; they reach the model in submission order and may be referred to in the prompt as "the first reference image", without a guarantee). Source-video videoMode reference is also supported; see the POST /v1/media/video field notes. Source-video edit/extend and drafts are unsupported. Durations and resolutions follow this model's pricing table. Aspect: modes with a start image follow the start image; when the first and last images differ, the start image wins and the last image is center-cropped; T2V and R2V are fixed at 16:9 and 9:16 cannot be requested. Output: asynchronous video task delivered as MP4 (measured H.264 video with an AAC audio track); audio cannot be disabled or chosen; download with GET /v1/media/artifact/:taskId (the status delivery descriptor points to the same path); kept for 30 days. The submission size is not the actual output size; read the downloaded file. Failure: when the model refuses the input at submission (content review or limits), the request returns HTTP 422 input_rejected with reason input_moderation or input_invalid and no task is created; any failure after the task was created, including moderation, returns status failed with error "provider failed" and no code; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation.
    T2V, I2V, I2V_LAST, R2V—480p / 720p480p: 4s=11, 5s=13, 6s=16, 7s=19, 8s=21, 9s=24, 10s=26, 11s=29, 12s=32, 13s=34, 14s=37, 15s=39 | 720p: 4s=23, 5s=28, 6s=34, 7s=40, 8s=45, 9s=51, 10s=56, 11s=62, 12s=67, 13s=73, 14s=78, 15s=84start=optional; last=unsupportedpaid_only
    bytedance/seedance-2.5-spicy
    Seedance 2.5 Spicy: adult content is allowed; minors and non-consensual content are not, and such prompts are refused before any points are held (422 input_rejected). Input: text-to-video (T2V); first frame (I2V, image); first and last frame (I2V_LAST, image plus lastImage); reference-to-video (R2V: up to 9 referenceImage files, up to 3 referenceVideo clips totalling at most 15 seconds, and up to 3 referenceAudio MP3 or WAV files, which need at least one reference image or reference video); and one source video with videoMode reference (motion and camera reference), edit or extend. First frame, first and last frame, reference files and a source video are mutually exclusive. Reference images, videos and first frames that show a real person may be refused by the model's content review (422 input_rejected; held points are released where possible). 480p, 720p or 1080p, 4 to 30 seconds; an edit keeps the source length (a 4–30 second source; send no duration). Text-to-video is 16:9; first and last frame, edit and extend follow the input aspect ratio. Sound is on by default; send generateAudio: false for a silent video (same price). Without a video, points depend on resolution and seconds; see each operation's pricing table. With a video, the price is the video seconds plus the output seconds: send the same form with quoteOnly=true first to get the exact points without a charge. The website chat offers all of these. Submission returns a taskId; poll POST /v1/media/task/status and download through the delivery descriptor. Explicit selection only; auto never picks it. Retention is not guaranteed; download the video as soon as you get it.
    T2V, I2V, I2V_LAST, R2VSpicy480p / 720p / 1080p480p: 4s=47, 5s=59, 6s=70, 7s=82, 8s=94, 9s=105, 10s=117, 11s=128, 12s=140, 13s=151, 14s=163, 15s=174, 16s=186, 17s=198, 18s=209, 19s=221, 20s=232, 21s=244, 22s=255, 23s=267, 24s=279, 25s=290, 26s=302, 27s=313, 28s=325, 29s=336, 30s=348 | 720p: 4s=106, 5s=132, 6s=158, 7s=184, 8s=210, 9s=236, 10s=262, 11s=288, 12s=314, 13s=340, 14s=366, 15s=392, 16s=418, 17s=444, 18s=470, 19s=496, 20s=522, 21s=548, 22s=574, 23s=600, 24s=626, 25s=652, 26s=678, 27s=704, 28s=730, 29s=756, 30s=782 | 1080p: 4s=259, 5s=323, 6s=387, 7s=451, 8s=515, 9s=579, 10s=643, 11s=707, 12s=771, 13s=835, 14s=899, 15s=963, 16s=1027, 17s=1091, 18s=1155, 19s=1219, 20s=1283, 21s=1347, 22s=1410, 23s=1474, 24s=1538, 25s=1602, 26s=1666, 27s=1730, 28s=1794, 29s=1858, 30s=1922start=optional; last=unsupportedpaid_only
    bytedance/seedance-2.0-spicy
    Seedance 2.0 Spicy: adult content is allowed; minors and non-consensual content are not, and such prompts are refused before any points are held (422 input_rejected). Input: text-to-video (T2V); first frame (I2V, image); first and last frame (I2V_LAST, image plus lastImage); reference-to-video (R2V: up to 9 referenceImage files, up to 3 referenceVideo clips totalling at most 15 seconds, and up to 3 referenceAudio MP3 or WAV files, which need at least one reference image or reference video); and one source video with videoMode reference (motion and camera reference), edit or extend. First frame, first and last frame, reference files and a source video are mutually exclusive. Reference images, videos and first frames that show a real person may be refused by the model's content review (422 input_rejected; held points are released where possible). 480p or 720p, 4 to 15 seconds; an edit takes the duration you send. Text-to-video is 16:9; first and last frame follows the input aspect ratio. Sound is on by default; send generateAudio: false for a silent video (same price). Without a video, points depend on resolution and seconds; see each operation's pricing table. With a video, the price is the video seconds plus the output seconds: send the same form with quoteOnly=true first to get the exact points without a charge. The website chat offers all of these. Submission returns a taskId; poll POST /v1/media/task/status and download through the delivery descriptor. Explicit selection only; auto never picks it. Retention is not guaranteed; download the video as soon as you get it.
    T2V, I2V, I2V_LAST, R2VSpicy480p / 720p480p: 4s=32, 5s=40, 6s=48, 7s=56, 8s=64, 9s=72, 10s=80, 11s=88, 12s=96, 13s=104, 14s=112, 15s=119 | 720p: 4s=69, 5s=86, 6s=103, 7s=120, 8s=137, 9s=154, 10s=171, 11s=188, 12s=205, 13s=222, 14s=239, 15s=256start=optional; last=unsupportedpaid_only
    bytedance/seedance-2.0-fast-spicy
    Seedance 2.0 fast Spicy: adult content is allowed; minors and non-consensual content are not, and such prompts are refused before any points are held (422 input_rejected). Input: text-to-video (T2V); first frame (I2V, image); first and last frame (I2V_LAST, image plus lastImage); reference-to-video (R2V: up to 9 referenceImage files, up to 3 referenceVideo clips totalling at most 15 seconds, and up to 3 referenceAudio MP3 or WAV files, which need at least one reference image or reference video); and one source video with videoMode reference (motion and camera reference), edit or extend. First frame, first and last frame, reference files and a source video are mutually exclusive. Reference images, videos and first frames that show a real person may be refused by the model's content review (422 input_rejected; held points are released where possible). 480p or 720p, 4 to 15 seconds; an edit takes the duration you send. Text-to-video is 16:9; first and last frame follows the input aspect ratio. Sound is on by default; send generateAudio: false for a silent video (same price). Without a video, points depend on resolution and seconds; see each operation's pricing table. With a video, the price is the video seconds plus the output seconds: send the same form with quoteOnly=true first to get the exact points without a charge. The website chat offers all of these. Submission returns a taskId; poll POST /v1/media/task/status and download through the delivery descriptor. Explicit selection only; auto never picks it. Retention is not guaranteed; download the video as soon as you get it.
    T2V, I2V, I2V_LAST, R2VSpicy480p / 720p480p: 4s=26, 5s=32, 6s=39, 7s=45, 8s=51, 9s=58, 10s=64, 11s=70, 12s=77, 13s=83, 14s=89, 15s=96 | 720p: 4s=55, 5s=69, 6s=83, 7s=96, 8s=110, 9s=124, 10s=137, 11s=151, 12s=164, 13s=178, 14s=192, 15s=205start=optional; last=unsupportedpaid_only
    bytedance/seedance-2.0-mini-spicy
    Seedance 2.0 mini Spicy: adult content is allowed; minors and non-consensual content are not, and such prompts are refused before any points are held (422 input_rejected). Input: text-to-video (T2V); first frame (I2V, image); first and last frame (I2V_LAST, image plus lastImage); reference-to-video (R2V: up to 9 referenceImage files, up to 3 referenceVideo clips totalling at most 15 seconds, and up to 3 referenceAudio MP3 or WAV files, which need at least one reference image or reference video); and one source video with videoMode reference (motion and camera reference), edit or extend. First frame, first and last frame, reference files and a source video are mutually exclusive. Reference images, videos and first frames that show a real person may be refused by the model's content review (422 input_rejected; held points are released where possible). 480p or 720p, 4 to 15 seconds; an edit takes the duration you send. Text-to-video is 16:9; first and last frame follows the input aspect ratio. Sound is on by default; send generateAudio: false for a silent video (same price). Without a video, points depend on resolution and seconds; see each operation's pricing table. With a video, the price is the video seconds plus the output seconds: send the same form with quoteOnly=true first to get the exact points without a charge. The website chat offers all of these. Submission returns a taskId; poll POST /v1/media/task/status and download through the delivery descriptor. Explicit selection only; auto never picks it. Retention is not guaranteed; download the video as soon as you get it.
    T2V, I2V, I2V_LAST, R2VSpicy480p / 720p480p: 4s=16, 5s=20, 6s=24, 7s=28, 8s=32, 9s=36, 10s=40, 11s=44, 12s=48, 13s=52, 14s=56, 15s=60 | 720p: 4s=35, 5s=43, 6s=52, 7s=60, 8s=69, 9s=77, 10s=86, 11s=94, 12s=103, 13s=111, 14s=120, 15s=128start=optional; last=unsupportedpaid_only
    vega-video-1.0-pro
    Vega Video 1.0 Pro. Inputs: text-to-video (T2V, prompt only); first frame (I2V, image); first + last frame (I2V_LAST, image + lastImage); reference-to-video (R2V: up to 9 referenceImage files, up to 3 referenceVideo clips in MP4 or MOV (2–15 seconds each, 15 seconds in total, 24–60 fps) and up to 3 referenceAudio files in MP3 or WAV (15 MB each, with at least one reference image or video), 12 files in all). First frame, first + last frame and reference files are mutually exclusive; a source video (video, videoMode) and draft are not supported. Images must be 300–5760 px per side with a width/height ratio of 0.4–2.5. A request with any image, video or audio must send contentAttestation: "non-real-person-or-consent-held", stating that the media shows no real person, or that every real person shown has consented and you hold the rights to it; without it the request returns 400 content_attestation_required. Resolution 720p, 1080p (resolution is required), 4–15 seconds. Text-to-video and reference-to-video are 16:9; first frame and first + last frame follow the input image's ratio (a square image gives a square video), so read the actual size from the downloaded file. Audio is on by default; send generateAudio: false for a silent video (same price). If a task fails because of the generated audio, the status response carries a hint: submit again without audio. Points: without a reference video they depend on the resolution and the output seconds (see this model's price table); first frame, first + last frame, reference images and reference audio add nothing. With a reference video another unit price applies to the reference video seconds plus the output seconds: send the same form with quoteOnly=true first for the exact points (nothing is charged; available only with a reference video). The website chat offers text-to-video, first frame and first + last frame; send reference files through the API. Content: text-to-video may generate adult content (Spicy); every character must be an adult, and content involving minors or non-consent is not allowed. A prompt that asks for minors, face swapping or non-consensual content is refused before any points are held (422 input_rejected, reason input_policy): change the prompt and submit again. Output: an asynchronous video task; the submit returns taskId, poll POST /v1/media/task/status and download the MP4 through the delivery descriptor (or GET /v1/media/artifact/:taskId) once it succeeds. Retention is not promised: download the video as soon as you receive it. Failures: the model refusing the prompt or an input file returns 422 input_rejected (reason input_moderation), a parameter or file outside the model limits returns 400 invalid_parameter, and a failure after the task is created returns status failed with error generation_failed; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. Explicit selection only; auto never picks it.
    T2V, I2VSpicy720p / 1080p720p: 4s=37, 5s=46, 6s=56, 7s=65, 8s=74, 9s=83, 10s=92, 11s=101, 12s=111, 13s=120, 14s=129, 15s=138 | 1080p: 4s=80, 5s=100, 6s=120, 7s=140, 8s=160, 9s=180, 10s=200, 11s=220, 12s=240, 13s=260, 14s=280, 15s=300start=optional; last=optionalpaid_only
    vega-video-1.0-pro-fast
    Vega Video 1.0 Pro Fast. Inputs: text-to-video (T2V, prompt only); first frame (I2V, image); first + last frame (I2V_LAST, image + lastImage); reference-to-video (R2V: up to 9 referenceImage files, up to 3 referenceVideo clips in MP4 or MOV (2–15 seconds each, 15 seconds in total, 24–60 fps) and up to 3 referenceAudio files in MP3 or WAV (15 MB each, with at least one reference image or video), 12 files in all). First frame, first + last frame and reference files are mutually exclusive; a source video (video, videoMode) and draft are not supported. Images must be 300–5760 px per side with a width/height ratio of 0.4–2.5. A request with any image, video or audio must send contentAttestation: "non-real-person-or-consent-held", stating that the media shows no real person, or that every real person shown has consented and you hold the rights to it; without it the request returns 400 content_attestation_required. Resolution 720p, 1080p (resolution is required), 4–15 seconds. Text-to-video and reference-to-video are 16:9; first frame and first + last frame follow the input image's ratio (a square image gives a square video), so read the actual size from the downloaded file. Audio is on by default; send generateAudio: false for a silent video (same price). If a task fails because of the generated audio, the status response carries a hint: submit again without audio. Points: without a reference video they depend on the resolution and the output seconds (see this model's price table); first frame, first + last frame, reference images and reference audio add nothing. With a reference video another unit price applies to the reference video seconds plus the output seconds: send the same form with quoteOnly=true first for the exact points (nothing is charged; available only with a reference video). The website chat offers text-to-video, first frame and first + last frame; send reference files through the API. Content: text-to-video may generate adult content (Spicy); every character must be an adult, and content involving minors or non-consent is not allowed. A prompt that asks for minors, face swapping or non-consensual content is refused before any points are held (422 input_rejected, reason input_policy): change the prompt and submit again. Output: an asynchronous video task; the submit returns taskId, poll POST /v1/media/task/status and download the MP4 through the delivery descriptor (or GET /v1/media/artifact/:taskId) once it succeeds. Retention is not promised: download the video as soon as you receive it. Failures: the model refusing the prompt or an input file returns 422 input_rejected (reason input_moderation), a parameter or file outside the model limits returns 400 invalid_parameter, and a failure after the task is created returns status failed with error generation_failed; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. Explicit selection only; auto never picks it.
    T2V, I2VSpicy720p / 1080p720p: 4s=30, 5s=38, 6s=45, 7s=53, 8s=60, 9s=67, 10s=75, 11s=82, 12s=90, 13s=97, 14s=105, 15s=112 | 1080p: 4s=65, 5s=81, 6s=97, 7s=114, 8s=130, 9s=146, 10s=162, 11s=178, 12s=194, 13s=211, 14s=227, 15s=243start=optional; last=optionalpaid_only
    vega-video-1.0-pro-mini
    Vega Video 1.0 Pro Mini. Inputs: text-to-video (T2V, prompt only); first frame (I2V, image); first + last frame (I2V_LAST, image + lastImage); reference-to-video (R2V: up to 9 referenceImage files, up to 3 referenceVideo clips in MP4 or MOV (2–15 seconds each, 15 seconds in total, 24–60 fps) and up to 3 referenceAudio files in MP3 or WAV (15 MB each, with at least one reference image or video), 12 files in all). First frame, first + last frame and reference files are mutually exclusive; a source video (video, videoMode) and draft are not supported. Images must be 300–5760 px per side with a width/height ratio of 0.4–2.5. A request with any image, video or audio must send contentAttestation: "non-real-person-or-consent-held", stating that the media shows no real person, or that every real person shown has consented and you hold the rights to it; without it the request returns 400 content_attestation_required. Resolution 720p, 1080p (resolution is required), 4–15 seconds. Text-to-video and reference-to-video are 16:9; first frame and first + last frame follow the input image's ratio (a square image gives a square video), so read the actual size from the downloaded file. Audio is on by default; send generateAudio: false for a silent video (same price). If a task fails because of the generated audio, the status response carries a hint: submit again without audio. Points: without a reference video they depend on the resolution and the output seconds (see this model's price table); first frame, first + last frame, reference images and reference audio add nothing. With a reference video another unit price applies to the reference video seconds plus the output seconds: send the same form with quoteOnly=true first for the exact points (nothing is charged; available only with a reference video). The website chat offers text-to-video, first frame and first + last frame; send reference files through the API. Content: text-to-video may generate adult content (Spicy); every character must be an adult, and content involving minors or non-consent is not allowed. A prompt that asks for minors, face swapping or non-consensual content is refused before any points are held (422 input_rejected, reason input_policy): change the prompt and submit again. Output: an asynchronous video task; the submit returns taskId, poll POST /v1/media/task/status and download the MP4 through the delivery descriptor (or GET /v1/media/artifact/:taskId) once it succeeds. Retention is not promised: download the video as soon as you receive it. Failures: the model refusing the prompt or an input file returns 422 input_rejected (reason input_moderation), a parameter or file outside the model limits returns 400 invalid_parameter, and a failure after the task is created returns status failed with error generation_failed; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. Explicit selection only; auto never picks it.
    T2V, I2VSpicy720p / 1080p720p: 4s=19, 5s=24, 6s=29, 7s=34, 8s=38, 9s=43, 10s=48, 11s=53, 12s=57, 13s=62, 14s=67, 15s=72 | 1080p: 4s=42, 5s=52, 6s=63, 7s=73, 8s=84, 9s=94, 10s=104, 11s=115, 12s=125, 13s=136, 14s=146, 15s=156start=optional; last=optionalpaid_only
    vega-video-1.5-pro
    Vega Video 1.5 Pro. Inputs: text-to-video (T2V, prompt only); first frame (I2V, image); first + last frame (I2V_LAST, image + lastImage); reference-to-video (R2V: up to 30 referenceImage files, up to 10 referenceVideo clips in MP4 or MOV (2–30 seconds each, 30 seconds in total, 24–60 fps) and up to 10 referenceAudio files in MP3 or WAV (15 MB each, with at least one reference image or video), 50 files in all). First frame, first + last frame and reference files are mutually exclusive; a source video (video, videoMode) and draft are not supported. Images must be 300–5760 px per side with a width/height ratio of 0.4–2.5. A request with any image, video or audio must send contentAttestation: "non-real-person-or-consent-held", stating that the media shows no real person, or that every real person shown has consented and you hold the rights to it; without it the request returns 400 content_attestation_required. Resolution 720p, 1080p (resolution is required), 4–30 seconds. Text-to-video and reference-to-video are 16:9; first frame and first + last frame follow the input image's ratio (a square image gives a square video), so read the actual size from the downloaded file. Audio is on by default; send generateAudio: false for a silent video (same price). If a task fails because of the generated audio, the status response carries a hint: submit again without audio. Points: without a reference video they depend on the resolution and the output seconds (see this model's price table); first frame, first + last frame, reference images and reference audio add nothing. With a reference video another unit price applies to the reference video seconds plus the output seconds: send the same form with quoteOnly=true first for the exact points (nothing is charged; available only with a reference video). The website chat offers text-to-video, first frame and first + last frame; send reference files through the API. Content: text-to-video may generate adult content (Spicy); every character must be an adult, and content involving minors or non-consent is not allowed. A prompt that asks for minors, face swapping or non-consensual content is refused before any points are held (422 input_rejected, reason input_policy): change the prompt and submit again. Output: an asynchronous video task; the submit returns taskId, poll POST /v1/media/task/status and download the MP4 through the delivery descriptor (or GET /v1/media/artifact/:taskId) once it succeeds. Retention is not promised: download the video as soon as you receive it. Failures: the model refusing the prompt or an input file returns 422 input_rejected (reason input_moderation), a parameter or file outside the model limits returns 400 invalid_parameter, and a failure after the task is created returns status failed with error generation_failed; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. Explicit selection only; auto never picks it.
    T2V, I2VSpicy720p / 1080p720p: 4s=55, 5s=69, 6s=83, 7s=96, 8s=110, 9s=124, 10s=138, 11s=151, 12s=165, 13s=179, 14s=192, 15s=206, 16s=220, 17s=234, 18s=247, 19s=261, 20s=275, 21s=288, 22s=302, 23s=316, 24s=330, 25s=343, 26s=357, 27s=371, 28s=384, 29s=398, 30s=412 | 1080p: 4s=120, 5s=150, 6s=180, 7s=209, 8s=239, 9s=269, 10s=299, 11s=329, 12s=359, 13s=388, 14s=418, 15s=448, 16s=478, 17s=508, 18s=538, 19s=568, 20s=597, 21s=627, 22s=657, 23s=687, 24s=717, 25s=747, 26s=776, 27s=806, 28s=836, 29s=866, 30s=896start=optional; last=optionalpaid_only
    vega-video-1.0-lite
    Vega Video 1.0 Lite. Text-to-video only (T2V, prompt only); a request with image, lastImage or any reference file returns 400 invalid_operation. Resolution 768p, 1080p (resolution is required), 4–15 seconds, 16:9 output. Audio is on by default; send generateAudio: false for a silent video (same price). If a task fails because of the generated audio, the status response carries a hint: submit again without audio. Points depend on the resolution and the output seconds; the price table lists 1080p only; 768p can be requested as well, and the submit response's quotaCost gives its points. Content: text-to-video may generate adult content (Spicy); every character must be an adult, and content involving minors or non-consent is not allowed. A prompt that asks for minors, face swapping or non-consensual content is refused before any points are held (422 input_rejected, reason input_policy): change the prompt and submit again. Output: an asynchronous video task; the submit returns taskId, poll POST /v1/media/task/status and download the MP4 through the delivery descriptor (or GET /v1/media/artifact/:taskId) once it succeeds. Retention is not promised: download the video as soon as you receive it. Failures: the model refusing the prompt or an input file returns 422 input_rejected (reason input_moderation), a parameter or file outside the model limits returns 400 invalid_parameter, and a failure after the task is created returns status failed with error generation_failed; held points are released where possible, and a case that cannot be confirmed stays held for reconciliation. Explicit selection only; auto never picks it.
    T2VSpicy1080p1080p: 4s=24, 5s=29, 6s=35, 7s=41, 8s=47, 9s=52, 10s=58, 11s=64, 12s=70, 13s=75, 14s=81, 15s=87start=unsupported; last=unsupportedpaid_only
    wan2.7-i2v-spicy
    WAN 2.7 I2V. Input: I2V prompt plus a required start image (image); whole 2–15 seconds at a fixed 720p (1080p is not offered), with points from this model's pricing table; no aspect-ratio parameter. Output: asynchronous video task polled with POST /v1/media/task/status; download by following the delivery descriptor in the status response (POST /v1/media/delivery/rmw). Read the file format from the download Content-Type; the actual dimensions and whether an audio track is present are not measured (720p is the requested tier, not a confirmed 1280×720). Prompts that ask for minors or non-consensual content are refused before any points are held, with 422 input_rejected (reason input_policy); change the prompt and submit again. Retention is not promised: download and store the file as soon as it succeeds. The delivery descriptor expiry is a download grant, not a retention period. Failures come in three kinds. (1) Submit: an invalid parameter returns 400 invalid_request with no charge; HTTP 502 error generation_failed means submission or dispatch failed, and held points may already be refunded or kept for reconciliation because the outcome is uncertain, so read the message rather than inferring from the 502 alone, and do not resubmit at once; an upstream credit shortage returns 503 provider_payment_required and a refund is attempted, but points stay held for reconciliation if it is not confirmed. (2) Status query (POST /v1/media/task/status): HTTP 502 {"error":"Failed to reach provider"} means this query could not learn the outcome; the task is not terminal because of it and nothing is refunded, so keep polling the same taskId and do not resubmit. (3) Terminal failure: HTTP 200 with status failed and error generation_failed; the code is normally provider_generation_failed and is provider_content_flagged only for a specific upstream moderation category (not every moderation refusal carries it); a delivery failure returns error/code delivery_failed. For these terminal failures the system releases held points where it can, and any it cannot confirm stay held for reconciliation; if settlement itself fails the query returns HTTP 502 {"error":"Failed to settle generation"}, which must not be read as refunded, and the points likewise stay held for reconciliation. Download problems after a successful, charged generation are not refunded automatically. Reference images, first/last-frame pairs and source video are unsupported.
    I2VSpicy720p2s=30, 3s=44, 4s=59, 5s=74, 6s=88, 7s=103, 8s=117, 9s=132, 10s=147, 11s=161, 12s=176, 13s=191, 14s=205, 15s=220start=required; last=unsupportedpaid_only
    w3.0-video
    WAN 3.0 Standard. Input: T2V prompt; I2V prompt plus a start image (image); I2V_LAST adds a last image (lastImage); R2V takes 1–10 reference images (repeat the referenceImage field; up to 10 MiB each and 40 MiB combined) and may add up to 5 reference videos (referenceVideo, MP4/MOV) and up to 5 reference audio files (referenceAudio, MP3/WAV, only together with a reference image or video), multipart only: each 1–15 seconds, at most 15 seconds per kind and 60 MiB for videos and audio together; reference inputs are mutually exclusive with image/lastImage. 2–30 output seconds, and reference video seconds plus output seconds must not exceed 30. resolution: 720p or 1080p (1080p when omitted). Points: without reference videos they follow the resolution and output seconds and are the same for every mode; with reference videos they follow the measured reference video seconds plus the output seconds, rounded up to the millisecond, so send quoteOnly: true first for the exact points (a quote charges nothing); reference audio does not change the points. Prompts that ask for minors or non-consensual content are refused before any points are held, with 422 input_rejected (reason input_policy); change the prompt and submit again. Aspect: there is no aspect-ratio parameter; T2V output is 1920×1080 (16:9); the output aspect with a start image is not defined. Output: asynchronous video task; audio: a T2V result was measured with an AAC audio track, while I2V, I2V_LAST and R2V are not measured; there is no field to disable or choose the sound; download by following the delivery descriptor in the status response (POST /v1/media/delivery/rmw). The submission response may omit size or differ from the output; read the downloaded file. Always poll with POST /v1/media/task/status. Retention is not promised: download and store the file as soon as it succeeds. The delivery descriptor expiry is a download grant, not a retention period. Failures come in three kinds. (1) Submit: an invalid parameter returns 400 invalid_request with no charge; HTTP 502 error generation_failed means submission or dispatch failed, and held points may already be refunded or kept for reconciliation because the outcome is uncertain, so read the message rather than inferring from the 502 alone, and do not resubmit at once; an upstream credit shortage returns 503 provider_payment_required and a refund is attempted, but points stay held for reconciliation if it is not confirmed. (2) Status query (POST /v1/media/task/status): HTTP 502 {"error":"Failed to reach provider"} means this query could not learn the outcome; the task is not terminal because of it and nothing is refunded, so keep polling the same taskId and do not resubmit. (3) Terminal failure: HTTP 200 with status failed and error generation_failed; the code is normally provider_generation_failed and is provider_content_flagged only for a specific upstream moderation category (not every moderation refusal carries it); a delivery failure returns error/code delivery_failed. For these terminal failures the system releases held points where it can, and any it cannot confirm stay held for reconciliation; if settlement itself fails the query returns HTTP 502 {"error":"Failed to settle generation"}, which must not be read as refunded, and the points likewise stay held for reconciliation. Download problems after a successful, charged generation are not refunded automatically.
    T2V, I2V, I2V_LAST, R2VSpicy720p / 1080p720p: 2s=14, 3s=21, 4s=27, 5s=34, 6s=41, 7s=48, 8s=54, 9s=61, 10s=68, 11s=75, 12s=81, 13s=88, 14s=95, 15s=102, 16s=108, 17s=115, 18s=122, 19s=129, 20s=135, 21s=142, 22s=149, 23s=156, 24s=162, 25s=169, 26s=176, 27s=183, 28s=189, 29s=196, 30s=203 | 1080p: 2s=27, 3s=41, 4s=54, 5s=68, 6s=81, 7s=95, 8s=108, 9s=122, 10s=135, 11s=149, 12s=162, 13s=176, 14s=189, 15s=203, 16s=216, 17s=230, 18s=243, 19s=257, 20s=270, 21s=284, 22s=297, 23s=311, 24s=324, 25s=338, 26s=351, 27s=365, 28s=378, 29s=392, 30s=405start=optional; last=optionalpaid_only
    w3.0-video-pro
    WAN 3.0 Pro. Input: T2V prompt; I2V prompt plus a start image (image); I2V_LAST adds a last image (lastImage); R2V takes 1–10 reference images (repeat the referenceImage field; up to 10 MiB each and 40 MiB combined) and may add up to 5 reference videos (referenceVideo, MP4/MOV) and up to 5 reference audio files (referenceAudio, MP3/WAV, only together with a reference image or video), multipart only: each 1–15 seconds, at most 15 seconds per kind and 60 MiB for videos and audio together; reference inputs are mutually exclusive with image/lastImage. 2–30 output seconds, and reference video seconds plus output seconds must not exceed 30. resolution: 1080p or 2k (1080p when omitted). Points: without reference videos they follow the resolution and output seconds and are the same for every mode; with reference videos they follow the measured reference video seconds plus the output seconds, rounded up to the millisecond, so send quoteOnly: true first for the exact points (a quote charges nothing); reference audio does not change the points. Prompts that ask for minors or non-consensual content are refused before any points are held, with 422 input_rejected (reason input_policy); change the prompt and submit again. Aspect: there is no aspect-ratio parameter; T2V output is 1920×1080 (16:9) (measured on Standard; Pro not measured separately); the output aspect with a start image is not defined. Output: asynchronous video task; audio: Pro is not measured separately (the AAC track measured on a Standard T2V result does not stand for Pro); there is no field to disable or choose the sound; download by following the delivery descriptor in the status response (POST /v1/media/delivery/rmw). The submission response may omit size or differ from the output; read the downloaded file. Always poll with POST /v1/media/task/status. Retention is not promised: download and store the file as soon as it succeeds. The delivery descriptor expiry is a download grant, not a retention period. Failures come in three kinds. (1) Submit: an invalid parameter returns 400 invalid_request with no charge; HTTP 502 error generation_failed means submission or dispatch failed, and held points may already be refunded or kept for reconciliation because the outcome is uncertain, so read the message rather than inferring from the 502 alone, and do not resubmit at once; an upstream credit shortage returns 503 provider_payment_required and a refund is attempted, but points stay held for reconciliation if it is not confirmed. (2) Status query (POST /v1/media/task/status): HTTP 502 {"error":"Failed to reach provider"} means this query could not learn the outcome; the task is not terminal because of it and nothing is refunded, so keep polling the same taskId and do not resubmit. (3) Terminal failure: HTTP 200 with status failed and error generation_failed; the code is normally provider_generation_failed and is provider_content_flagged only for a specific upstream moderation category (not every moderation refusal carries it); a delivery failure returns error/code delivery_failed. For these terminal failures the system releases held points where it can, and any it cannot confirm stay held for reconciliation; if settlement itself fails the query returns HTTP 502 {"error":"Failed to settle generation"}, which must not be read as refunded, and the points likewise stay held for reconciliation. Download problems after a successful, charged generation are not refunded automatically.
    T2V, I2V, I2V_LAST, R2VSpicy1080p / 2k1080p: 2s=25, 3s=37, 4s=49, 5s=61, 6s=73, 7s=86, 8s=98, 9s=110, 10s=122, 11s=134, 12s=146, 13s=158, 14s=171, 15s=183, 16s=195, 17s=207, 18s=219, 19s=231, 20s=243, 21s=256, 22s=268, 23s=280, 24s=292, 25s=304, 26s=316, 27s=329, 28s=341, 29s=353, 30s=365 | 2k: 2s=27, 3s=41, 4s=54, 5s=68, 6s=81, 7s=95, 8s=108, 9s=122, 10s=135, 11s=149, 12s=162, 13s=176, 14s=189, 15s=203, 16s=216, 17s=230, 18s=243, 19s=257, 20s=270, 21s=284, 22s=297, 23s=311, 24s=324, 25s=338, 26s=351, 27s=365, 28s=378, 29s=392, 30s=405start=optional; last=optionalpaid_only
    seedance-2.5-i2v-spicy
    Seedance 2.5 I2V Spicy (Spicy line; a different model from volcengine/doubao-seedance-2.5, whose rules do not apply). Adult-oriented model: the output may contain nudity or other adult content even when the prompt does not ask for it (a neutral prompt with a start image showing no people has been reported to produce nudity; how often this happens is unknown); use a non-Spicy model for general content. Characters must be adults; content involving minors or non-consent is not allowed. Input: a required I2V prompt and a required start image (image), optionally a last image (lastImage); one file each, up to 20 MiB, JPEG/PNG/WebP/AVIF, and the extension must match the real format. Whole 4–15 seconds; resolution 480p/720p/1080p/4k, default 720p, with points from this model's resolution-and-duration table. Aspect: no aspect-ratio parameter; the provider follows the start image, and mixed first/last aspects are not measured. Audio: always generated and cannot be disabled (one historical 480p sample was H.264 + AAC; other resolutions are not verified). Output: asynchronous video task polled with POST /v1/media/task/status; download by following the delivery descriptor (POST /v1/media/delivery/rmw); read the format from the download Content-Type (the historical sample was video/mp4); actual dimensions are not measured. Retention is not promised: download and store the file as soon as it succeeds. The delivery descriptor expiry is a download grant, not a retention period. Failures come in three kinds. (1) Submit: an invalid parameter returns 400 invalid_request with no charge; HTTP 502 error generation_failed means submission or dispatch failed, and held points may already be refunded or kept for reconciliation because the outcome is uncertain, so read the message rather than inferring from the 502 alone, and do not resubmit at once; an upstream credit shortage returns 503 provider_payment_required and a refund is attempted, but points stay held for reconciliation if it is not confirmed. (2) Status query (POST /v1/media/task/status): HTTP 502 {"error":"Failed to reach provider"} means this query could not learn the outcome; the task is not terminal because of it and nothing is refunded, so keep polling the same taskId and do not resubmit. (3) Terminal failure: HTTP 200 with status failed and error generation_failed; the code is normally provider_generation_failed and is provider_content_flagged only for a specific upstream moderation category (not every moderation refusal carries it); a delivery failure returns error/code delivery_failed. For these terminal failures the system releases held points where it can, and any it cannot confirm stay held for reconciliation; if settlement itself fails the query returns HTTP 502 {"error":"Failed to settle generation"}, which must not be read as refunded, and the points likewise stay held for reconciliation. Download problems after a successful, charged generation are not refunded automatically. T2V, reference images and source-video edit/extend are unsupported; no seed is offered.
    I2VSpicy480p / 720p / 1080p / 4k480p: 4s=81, 5s=102, 6s=122, 7s=142, 8s=162, 9s=183, 10s=203, 11s=223, 12s=243, 13s=264, 14s=284, 15s=304 | 720p: 4s=162, 5s=203, 6s=243, 7s=284, 8s=324, 9s=365, 10s=405, 11s=446, 12s=486, 13s=527, 14s=567, 15s=608 | 1080p: 4s=405, 5s=507, 6s=608, 7s=709, 8s=810, 9s=912, 10s=1013, 11s=1114, 12s=1216, 13s=1317, 14s=1418, 15s=1519 | 4k: 4s=810, 5s=1013, 6s=1216, 7s=1418, 8s=1620, 9s=1823, 10s=2025, 11s=2228, 12s=2431, 13s=2633, 14s=2835, 15s=3038start=required; last=optionalpaid_only
    cosyvoice-v2
    Input: text is required, up to 2000 characters per call (longer text returns 400 text_too_long; split it); voice accepts longxiaochun_v2 (default), longcheng_v2, longhua_v2 or longshu_v2, and any other or missing value uses the default without an error. Output: synchronous response with an audio URL (audioUrl, always a TokenTable GET /v1/media/blob/:id URL held in server memory for one hour and lost on a server restart), voice, character count and points; points are charged only after the audio is stored on our side. Retention: at most one hour, so download it immediately. Failure: invalid input (including text_too_long) returns 400 with no charge; a generation failure returns HTTP 502 error audio_generation_failed and a failure to store the audio returns HTTP 502 error audio_delivery_failed; both refund held points where possible, and if that refund cannot be confirmed the error is settlement_pending with the points held for reconciliation.
    ———0.05 points/character; minimum 5start=unsupported; last=unsupportedavailable