nexu-io/open-design · error · Error

volcengine task response missing id

Error message

volcengine task response missing id

What it means

Thrown when the task-creation JSON parses successfully but has no `id` field. The Seedance async protocol requires `{ id }` from creation to poll, so without it the renderer cannot continue and fails fast rather than polling a bogus task.

Source

Thrown at apps/daemon/src/media/index.ts:1458

    method: 'POST',
    headers: {
      'authorization': `Bearer ${credentials.apiKey}`,
      'content-type': 'application/json',
    },
    body: JSON.stringify(taskBody),
  }));
  const taskText = await taskResp.text();
  if (!taskResp.ok) {
    throw new Error(`volcengine task create ${taskResp.status}: ${truncate(taskText, 240)}`);
  }
  let taskData: any;
  try {
    taskData = JSON.parse(taskText);
  } catch {
    throw new Error(`volcengine non-JSON: ${truncate(taskText, 200)}`);
  }
  const taskId = taskData && taskData.id;
  if (!taskId) throw new Error('volcengine task response missing id');

  // Poll until succeeded/failed. Keep a hard cap, but make it long
  // enough for real Seedance queues: fast t2v often returns in 30-120s,
  // while i2v and busy-region t2v can exceed the old 6-minute ceiling.
  const startedAt = Date.now();
  const configuredMaxMs = Number(process.env.OD_VOLCENGINE_VIDEO_MAX_POLL_MS);
  const maxMs =
    Number.isFinite(configuredMaxMs) && configuredMaxMs >= 60_000
      ? configuredMaxMs
      : 12 * 60 * 1000;
  let videoUrl: string | null = null;
  let lastStatus = '';
  // Emit a "task accepted" line right away so the agent's chat shows
  // something within the first second instead of going silent for the
  // full poll loop. cc's Bash tool considers a long-quiet pipe stuck
  // and times out at ~2 minutes — Volcengine i2v routinely takes
  // 3-5 minutes, so without this stream, every i2v dispatch dies
  // mid-flight.

View on GitHub (pinned to 5be4028344)

Solutions

  1. Log/inspect the full parsed body to see what Volcengine returned alongside the missing `id` (often an embedded `error`).
  2. Confirm the API path is `/api/v3/contents/generations/tasks` and the model is activated.
  3. Verify the ARK key has access to the Seedance model and that the model is deployed in the target region.
Defensive patterns

Strategy: type-guard

Type guard

function isVolcengineTaskCreated(d: unknown): d is { id: string } {
  return typeof (d as any)?.id === 'string' && (d as any).id.length > 0;
}
if (!isVolcengineTaskCreated(taskData)) {
  throw new Error(`volcengine task response missing id: ${JSON.stringify(taskData).slice(0, 200)}`);
}

Prevention

When it happens

Trigger: Parsed JSON with a falsy `taskData.id`. Happens when the endpoint returns an error envelope with a 2xx status (e.g. `{ error: {...} }` with no `id`), when a `baseUrl` override points at a different Ark API version that returns a different shape, or when the account lacks permission and the API returns a partial body.

Common situations: (1) Account permission error returned as 2xx `{error}` with no `id`; (2) wrong API path/version in `baseUrl`; (3) model id accepted but not deployed, returning a stub body.

Related errors


AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12). Data as JSON: /api/errors/858657b2464c5796. Report an issue: GitHub.