jackwener/OpenCLI · error · EmptyResultError

Clip ${clipId} not found in your account. Confirm at ${SUNO_

Error message

Clip ${clipId} not found in your account. Confirm at ${SUNO_URL}/song/${clipId}.

What it means

This EmptyResultError from `opencli suno download <clip-id>` means the clip id was well-formed and the feed lookup succeeded, but no clip with that id exists in the authenticated account's feed. Suno's feed only lists clips belonging to the current user, so the CLI cannot fetch clips from other accounts.

Source

Thrown at clis/suno/download.js:112

                    'Content-Type': 'application/json',
                },
                body: JSON.stringify({ clip_ids: ['${clipId}'] }),
            });
            if (!res.ok) return { ok: false, error: 'HTTP ' + res.status };
            const payload = await res.json().catch(() => null);
            if (!payload || !Array.isArray(payload.clips)) return { ok: false, error: 'malformed clips payload' };
            return { ok: true, clips: payload.clips };
        })()`));

        if (!feedRes?.ok) {
            throw new CommandExecutionError(`Suno feed lookup failed: ${feedRes?.error || 'unknown'}`);
        }
        if (!Array.isArray(feedRes.clips)) {
            throw new CommandExecutionError('Suno feed lookup returned malformed clips payload');
        }
        const clip = feedRes.clips.find(c => c.id === clipId);
        if (!clip) {
            throw new EmptyResultError('suno download', `Clip ${clipId} not found in your account. Confirm at ${SUNO_URL}/song/${clipId}.`);
        }
        if (clip.status !== 'complete') {
            throw new CommandExecutionError(`Clip ${clipId} status is "${clip.status}" — not complete yet. Retry once generation finishes.`);
        }

        const result = await downloadSunoClip(page, clip, outputDir, formats, deviceId);
        if (!result.written.some(w => w.ok)) {
            throw new CommandExecutionError(`Suno download wrote no files for clip ${clipId}`);
        }
        const link = `${SUNO_URL}/song/${clip.id}`;
        const writtenSummary = result.written
            .map(w => w.ok ? `${w.format}:${displayPath(w.file)}` : `${w.format}:✗(${w.reason})`)
            .join(' | ');
        const skippedSummary = skippedPaid.length
            ? ` | skipped(needs --confirm-paid):${skippedPaid.join(',')}`
            : '';
        const fileSummary = `${writtenSummary}${skippedSummary}`;
        const anyFailed = result.written.some(w => !w.ok);

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Verify the clip id (and that the URL is https://suno.com/song/<uuid>) matches an existing clip on the logged-in account; check the link in the error message.
  2. Confirm the correct Suno account is logged in inside the Chrome instance the CLI drives; switch profiles if needed.
  3. Re-check the id in your Suno library at https://suno.com — if you generated it via opencli, the clip ids were printed in the earlier run's output.
  4. If the clip was deleted, regenerate it.

Example fix

// before
opencli suno download e3b0c442-98fc-1c14-9c4f-8b2a1a0f3c9d   // wrong/foreign id
// after
opencli suno download https://suno.com/song/6f7c2a1e-4b8d-4e2a-9f31-0c5d8e7a1b23  // id from your library
Defensive patterns

Strategy: validation

Validate before calling

// before running the download, confirm the clip exists in the account's library
// keep clip ids from the generate run output and reuse them verbatim
const clipId = '6f7c2a1e-4b8d-4e2a-9f31-0c5d8e7a1b23'; // from your generate output
if (!/^[0-9a-f-]{36}$/i.test(clipId)) throw new Error('bad clip id');

Try / catch

try {
  await run(`opencli suno download ${clipId}`);
} catch (err) {
  if (String(err.message).includes('not found in your account')) {
    // verify id + logged-in account, then retry with a corrected id
  } else throw err;
}

Prevention

When it happens

Trigger: Running `opencli suno download <id>` where the id is not in the current user's Suno library — clip belongs to another account, the id was mistyped, the clip was deleted, or you are logged into a different Suno profile in Chrome than the one that generated the clip.

Common situations: Copying a song URL from a friend/share link, switching Chrome profiles so the session points at a different account, typos when pasting a UUID, or clips removed after account cleanup.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/23c0a36b30dd18a9. Report an issue: GitHub.