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
- Log/inspect the full parsed body to see what Volcengine returned alongside the missing `id` (often an embedded `error`).
- Confirm the API path is `/api/v3/contents/generations/tasks` and the model is activated.
- 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
- Inspect the full parsed body when `id` is missing — it often contains an embedded `error`.
- Confirm the API path version matches the response schema (`/api/v3/...`).
- Verify the account has permission to create tasks for the model.
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
- no Volcengine Ark API key — configure it in Settings or set
- volcengine task create ${taskResp.status}: ${truncate(taskTe
- volcengine non-JSON: ${truncate(taskText, 200)}
- volcengine poll ${pollResp.status}: ${truncate(pollText, 240
- volcengine poll non-JSON: ${truncate(pollText, 200)}
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/858657b2464c5796.
Report an issue: GitHub.