{"record":{"id":"99bf3aa10ac25ddb","repo":"DIYgod/RSSHub","slug":"this-rss-feed-is-disabled-due-to-its-incorrect-con","errorCode":null,"errorMessage":"This RSS feed is disabled due to its incorrect configuration: the token is missing.","messagePattern":"This RSS feed is disabled due to its incorrect configuration: the token is missing\\.","errorType":"exception","errorClass":"ConfigNotFoundError","httpStatus":null,"severity":"error","filePath":"lib/routes/miniflux/entry.ts","lineNumber":65,"sourceCode":"};\n\nasync function handler(ctx) {\n    // Unchanged entries status after fetching.\n    // mark = unchanged | read | removed | unread\n    let mark = 'unchanged';\n    // Return shared link as default behavior\n    // link = shared | original\n    // let link = 'shared';\n    // Add feed's name to each article, default is off.\n    let addFeedName = 0;\n    // Here we use `limit` to temporarily store the limit number.\n    let limit = 0;\n\n    const instance = config.miniflux.instance;\n    const token = config.miniflux.token;\n\n    if (!token) {\n        throw new ConfigNotFoundError('This RSS feed is disabled due to its incorrect configuration: the token is missing.');\n    }\n\n    // In this function, var`mark`, `link`, and `limit`, `addFeedName`\n    // could be changed.\n    function filterHandler(item) {\n        if (item.search('=') === -1) {\n            return '';\n        }\n\n        const filter = item.slice(0, item.indexOf('='));\n        const option = item.slice(item.lastIndexOf('=') + 1);\n\n        switch (filter) {\n            case 'mark':\n                if (['read', 'removed', 'unread'].includes(option) && !setMark.length) {\n                    mark = option;\n                    setMark.push(1);\n                }","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/DIYgod/RSSHub/blob/bed535e0879dc71c5aff6f1e7bd1ac21ede40115/lib/routes/miniflux/entry.ts#L47-L83","documentation":"Thrown as a ConfigNotFoundError by the Miniflux entries route when config.miniflux.token is falsy. RSSHub treats missing required configuration as a disabled feed (HTTP 404-ish, not a 500), so the feed is intentionally turned off rather than crashing. The token is the Miniflux API key/token for the self-hosted Miniflux instance identified by config.miniflux.instance.","triggerScenarios":"The handler reads config.miniflux.instance and config.miniflux.token; if token is empty/undefined it throws immediately. Fires whenever MINIFLUX_TOKEN is unset in the environment (or misspelled), regardless of how valid the instance URL is.","commonSituations":"A self-hoster set MINIFLUX_INSTANCE but forgot MINIFLUX_TOKEN; the env var was named miniflux_token (wrong case) in docker-compose; the token was removed during a config cleanup; deploying via an orchestrator that did not propagate the secret.","solutions":["Generate an API key in Miniflux (Settings → API Keys → Create a new API key) and set it as the MINIFLUX_TOKEN environment variable, then restart RSSHub.","Confirm both MINIFLUX_INSTANCE (e.g. https://miniflux.example.com) and MINIFLUX_TOKEN are exported in the same environment RSSHub runs in — check with `printenv | grep -i miniflux`.","If using Docker, ensure the variables are under `environment:` (or an env_file) of the rsshub service and the container was recreated (not just restarted) after editing compose.","Verify the token works against the instance directly: `curl -H \"X-Auth-Token: <token>\" <instance>/api/v1/me` should return 200."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const token = config.miniflux.token;\nconst instance = config.miniflux.instance;\nif (!token) {\n    throw new ConfigNotFoundError('Set MINIFLUX_TOKEN (Miniflux API key) to enable this feed.');\n}\nif (!instance) {\n    throw new ConfigNotFoundError('Set MINIFLUX_INSTANCE to your Miniflux URL.');\n}","typeGuard":"function hasMinifluxConfig(c: any): c is { miniflux: { instance: string; token: string } } {\n    return typeof c?.miniflux?.instance === 'string' && typeof c?.miniflux?.token === 'string' && c.miniflux.token.length > 0;\n}","tryCatchPattern":null,"preventionTips":["Set both MINIFLUX_INSTANCE and MINIFLUX_TOKEN together in deployment templates.","Add a startup self-check that pings <instance>/api/v1/me with the token and logs a clear warning on failure.","Keep the token in a secret manager, not in plaintext compose committed to git."],"tags":["missing-config","authentication","api-token","miniflux","self-hosted"],"backgroundTag":null,"analyzedSha":"bed535e0879dc71c5aff6f1e7bd1ac21ede40115","analyzedAt":"2026-08-12T19:29:35.364Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}