{"record":{"id":"58b7a7f906603008","repo":"DIYgod/RSSHub","slug":"this-account-doesn-t-exist","errorCode":null,"errorMessage":"This account doesn't exist","messagePattern":"This account doesn't exist","errorType":"exception","errorClass":"InvalidParameterError","httpStatus":503,"severity":"warning","filePath":"lib/routes/twitter/api/web-api/api.ts","lineNumber":169,"sourceCode":"    gatherLegacyFromData(\n        await paginationTweets(\n            'ListLatestTweetsTimeline',\n            undefined,\n            {\n                ...params,\n                listId: id,\n                count: 20,\n            },\n            ['list', 'tweets_timeline', 'timeline']\n        ),\n        ['listConversation-']\n    );\n\nconst getUser = async (id: string) => {\n    const userData: any = await getUserData(id);\n\n    if (!userData.data.user) {\n        throw new InvalidParameterError(\"This account doesn't exist\");\n    }\n    if (userData.data.user.result.__typename === 'UserUnavailable') {\n        throw new InvalidParameterError(userData.data.user.result.message || 'User is unavailable');\n    }\n\n    return {\n        profile_image_url: userData.data?.user?.result?.avatar?.image_url,\n        description: userData.data?.user?.result?.profile_bio?.description,\n        ...userData.data?.user?.result?.core,\n    };\n};\n\nconst getHomeTimeline = async (id: string, params?: Record<string, any>) =>\n    gatherLegacyFromData(\n        await paginationTweets(\n            'HomeTimeline',\n            undefined,\n            {","sourceCodeStart":151,"sourceCodeEnd":187,"githubUrl":"https://github.com/DIYgod/RSSHub/blob/bed535e0879dc71c5aff6f1e7bd1ac21ede40115/lib/routes/twitter/api/web-api/api.ts#L151-L187","documentation":"Thrown by the getUser() helper in Twitter web-api when the GraphQL response has no userData.data.user object at all. This is a stronger failure than error 580 (which sees user but no rest_id): the API returned nothing for the account, so RSSHub rejects the request with InvalidParameterError(\"This account doesn't exist\") before any tweet fetching is attempted.","triggerScenarios":"getUser(id) is invoked by routes that need profile metadata (lists, media, likes) and the underlying UserByRestId/UserByScreenName call returns a body whose data.user is absent. Happens with handles that never existed, accounts permanently deleted by Twitter, or when the token used is rate-limited into returning an empty data object.","commonSituations":"Typo in the route path; account was hard-deleted by Twitter (not just suspended); the active auth token was burned and Twitter returns {data:{}} for every user lookup, tripping the JSON.stringify === '{\"user\":{}}' rate-limit branch upstream while this guard fires first.","solutions":["Confirm the handle exists by visiting https://x.com/<id> directly.","Check server logs for 'twitter rate limit exceeded' / token-deletion messages; if all tokens are exhausted, add fresh TWITTER_AUTH_TOKEN values.","Correct the route path typo or update to the current handle.","Retry after the rate-limit lock window (cache key lockPrefix+token, TTL 2000s) expires if token exhaustion was the cause."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"async function accountResolves(handle: string): Promise<boolean> {\n  const res = await fetch(`https://x.com/${handle}`, { method: 'HEAD', redirect: 'manual' });\n  return res.status !== 404;\n}","typeGuard":"function hasTwitterUserObject(userData: any): userData is { data: { user: object } } {\n  return userData?.data?.user != null && typeof userData.data.user === 'object';\n}","tryCatchPattern":"try { await fetchRss('/twitter/user/<handle>'); }\ncatch (e) {\n  if (/doesn't exist/.test(String(e))) { /* drop feed, account is gone */ }\n  else throw e;\n}","preventionTips":["Confirm handle exists on x.com before subscribing.","Monitor feeds for persistent failures and prune dead ones.","Keep at least one healthy TWITTER_AUTH_TOKEN so token-exhaustion empty bodies are not misread as missing accounts."],"tags":["twitter","invalid-parameter","user-lookup","auth"],"backgroundTag":null,"analyzedSha":"bed535e0879dc71c5aff6f1e7bd1ac21ede40115","analyzedAt":"2026-08-12T19:29:35.364Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}