Seedance

Beyond the standard video protocols, the Doubao Seedance series (doubao-seedance-*) can also be called over Volcengine Ark's own paths, with request and response bodies following Ark's content-generation protocol:

MethodPathUse
POST/ark/api/v3/contents/generations/tasksCreate a content generation (video) task
GET/ark/api/v3/contents/generations/tasks/{task_id}Poll task status and result
DELETE/ark/api/v3/contents/generations/tasks/{task_id}Cancel an unfinished task and release its preauthorization (upstream-dependent, see below)

This is a platform-managed lane: the path is Ark's own, but the request runs on the gateway's standard async task pipeline — the very same one behind Generic Async Content Generation Tasks, just spelled with Ark's path. It therefore keeps per-dimension metering, task persistence, artifact delivery, and preauthorize/settle intact.

Create a task

The body follows Ark's content-generation protocol, and model is the platform logical model name (e.g. doubao-seedance-2.0-mini):

bash
curl https://api.modelgo.ai/ark/api/v3/contents/generations/tasks \
  -H "Authorization: Bearer $MODELGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<model>",
    "content": [
      { "type": "text", "text": "a neon city cat" },
      { "type": "image_url", "image_url": { "url": "https://example.com/first.jpg" }, "role": "first_frame" }
    ],
    "resolution": "720p",
    "ratio": "16:9",
    "duration": 5
  }'

Beyond text, the content array can carry images/videos, tagged by role; the media combination determines the generation mode, and the mode determines which parameters are legal:

content elementroleGeneration mode
text only—Text-to-video (t2v)
image_urlfirst_frameFirst-frame image-to-video (i2v)
image_urlfirst_frame + last_frameFirst/last-frame (flf2v)
image_url / video_urlreference_image / reference_videoMultimodal reference-to-video

Parameter and mode constraints

Valid values for resolution / ratio / duration vary by model — the Fast and Mini variants of Seedance 2.0, for instance, do not support 1080p, and duration has a floor of 4 seconds. Ark extension parameters such as camera_fixed, generate_audio, return_last_frame and watermark also vary by generation mode. Sending a parameter the current model/mode does not support is rejected by the upstream at create time (400 provider_invalid). One known case:

  • camera_fixed is not supported in the first/last-frame (flf2v) scenario — a request carrying
  • both first_frame and last_frame is refused when it also sets camera_fixed (camera_fixed ... must be empty). First/last-frame already constrains the camera; if you need a locked-off camera, use a mode that supports it (e.g. text-to-video or single first-frame).

Because this lane does not pin an upstream family (the same logical model is served by several suppliers), whether a parameter is accepted also depends on the supplier and model version actually serving the call. Treat the model capability notes plus the mode constraints above as authoritative, and do not assume a parameter that works in one mode works in another.

Poll a task

bash
curl https://api.modelgo.ai/ark/api/v3/contents/generations/tasks/{task_id} \
  -H "Authorization: Bearer $MODELGO_API_KEY"

Create and poll answer with exactly the Ark task object documented under Generic Async Content Generation Tasks — it is the same pipeline, so the response payload and every field's meaning (status values, content.video_url, error, when usage is omitted) are identical to that page and are not repeated here.

Cancel a task

bash
curl -X DELETE https://api.modelgo.ai/ark/api/v3/contents/generations/tasks/{task_id} \
  -H "Authorization: Bearer $MODELGO_API_KEY"

A successful cancel voids the preauthorization; nothing is settled.

Not every upstream supports cancelling, though. Whether a task can be cancelled depends on whether the supplier serving it implements cancellation, and because this lane does not pin an upstream family, two calls on the same logical model may differ — one cancellable, one not. Two failure shapes:

CaseResponse
The supplier serving the task cannot cancel400 / 4003 provider_unsupported, endpoint not supported by provider
The task already reached a terminal state (succeeded / failed)409 task_already_terminal, task already finished; nothing to cancel

When a cancel fails the preauthorization is not released early — it follows the normal settle/expiry path once the task reaches a terminal state. So do not treat "create then cancel" as a reliable way to back out of a charge.

Key conventions

  • id is the gateway task id, not the upstream one. Polling and cancelling only accept that id,
  • so hold on to the id returned by create.

  • The response shape is fixed. Whichever upstream actually serves the request, create and poll
  • both answer with the same Ark task object — it does not change when routing changes.

  • The lane does not pin an upstream family. The URL spelling plays no part in routing: whoever
  • the logical model behind model routes to serves it. Seedance is carried by several suppliers on the platform, so two calls on the same logical model may land on different upstreams — that is expected.

  • The only content endpoint is the OpenAI-compatible one (GET /v1/videos/{task_id}/content); there
  • is no equivalent under the Ark paths — use content.video_url from the response.

  • Whether a model is offered on this lane depends on its catalog public_protocols including
  • content_generation; without it the call is refused with 4005. Check with GET https://api.modelgo.ai/v1/models.

If you do not need Ark's path and field style, OpenAI-Compatible Video Flow is the more standardized choice.