{"record":{"id":"cf2c7c26963f93dc","repo":"jackwener/OpenCLI","slug":"suno-requires-a-captcha-challenge-for-this-account","errorCode":null,"errorMessage":"Suno requires a CAPTCHA challenge for this account/IP right now.","messagePattern":"Suno requires a CAPTCHA challenge for this account/IP right now\\.","errorType":"exception","errorClass":"CommandExecutionError","httpStatus":null,"severity":"error","filePath":"clis/suno/generate.js","lineNumber":137,"sourceCode":"        const titleSource = titleArg || (isCustom ? (tags || lyrics.split('\\n')[0]) : description);\n        const title = titleSource.replace(/\\s+/g, ' ').trim().slice(0, 60) || 'Untitled';\n\n        const session = await ensureSunoSession(page);\n        if (!session.planId) {\n            throw new CommandExecutionError(\n                `Suno generation needs a resolved plan id for the user_tier field, but billing/info did not surface one for this account (subscription_type=${session.planKey}). Verify the account is active at ${SUNO_URL}/account, then retry.`,\n            );\n        }\n        const deviceId = session.deviceId;\n        const captcha = await checkSunoCaptcha(page, deviceId);\n        if (!captcha?.ok) {\n            throw new CommandExecutionError(\n                `Suno captcha pre-flight failed${captcha?.status ? ` (HTTP ${captcha.status})` : ''}.`,\n                `Open ${SUNO_URL}/create in Chrome and verify the account is ready, then retry.`,\n            );\n        }\n        if (captcha?.required) {\n            throw new CommandExecutionError(\n                'Suno requires a CAPTCHA challenge for this account/IP right now.',\n                `Open ${SUNO_URL}/create in Chrome, solve a Create challenge once, then retry.`,\n            );\n        }\n        if (session.totalCreditsAvailable < 10) {\n            const b = session.breakdown;\n            throw new CommandExecutionError(\n                `Suno generation needs ~10 credits; you have ${session.totalCreditsAvailable} (monthly ${b.monthlyRemaining}/${b.monthlyLimit} + packs ${b.purchasedPacks} + leftover ${b.pack}). Top up at ${SUNO_URL}/account.`,\n            );\n        }\n\n        const transactionUuid = crypto.randomUUID();\n        const createSessionToken = crypto.randomUUID();\n\n        const submission = await submitSunoGeneration(page, {\n            mode: isCustom ? 'custom' : 'simple',\n            model,\n            title,","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/suno/generate.js#L119-L155","documentation":"opencli's suno generate pre-flights a CAPTCHA check against Suno before submitting a generation. If the check reports captcha.required, Suno is demanding an interactive challenge for this account/IP and the CLI refuses to proceed programmatically.","triggerScenarios":"Running `opencli suno generate` after `checkSunoCaptcha(page, deviceId)` returns `{ok:true, required:true}` — Suno flagged the session for a Create-page challenge.","commonSituations":"Many rapid generation requests from one IP, datacenter/VPN IP ranges, new or unverified accounts, or stale browser cookies that make Suno distrust the session.","solutions":["Open https://suno.com/create in Chrome, complete one CAPTCHA/Create challenge manually, then re-run the command.","Refresh session cookies (re-login to Suno in the browser profile the CLI uses).","Switch off VPN/proxy or wait for the IP reputation to cool down before retrying.","Reduce generation frequency to avoid repeated challenge triggers."],"exampleFix":"// before: automated retries keep failing\nwhile (!done) { await opencli('suno', 'generate', prompt); }\n// after: pause and solve the challenge manually once, then resume\n// 1. open https://suno.com/create and solve the challenge\n// 2. re-run: opencli suno generate \"lo-fi study beat\"","handlingStrategy":"retry","validationCode":"// Verify the account can generate before automating:\n// open https://suno.com/create in the CLI's Chrome profile and confirm no challenge modal appears.\nconst canProceed = await checkSunoCaptcha(page, deviceId);\nif (canProceed?.required) await openBrowserAndSolveChallenge('https://suno.com/create');","typeGuard":"function captchaCleared(c) { return !!c && c.ok === true && c.required !== true; }","tryCatchPattern":"try {\n  await opencli('suno', 'generate', prompt);\n} catch (e) {\n  if (/CAPTCHA challenge/i.test(e.message)) {\n    await pauseForManualChallenge('https://suno.com/create'); // solve once in Chrome\n    await opencli('suno', 'generate', prompt); // single retry\n  } else throw e;\n}","preventionTips":["Avoid VPN/datacenter IPs when driving Suno.","Keep a warm, logged-in browser profile with fresh cookies.","Throttle generation requests instead of batching aggressively.","On first captcha error, solve it manually before any retry loop."],"tags":["captcha","browser-automation","anti-bot"],"backgroundTag":"captcha-challenge-required","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}