DIYgod/RSSHub · error · ConfigNotFoundError

Instagram RSS is disabled due to the lack of <a href="https:

Error message

Instagram RSS is disabled due to the lack of <a href="https://docs.rsshub.app/deploy/config#route-specific-configurations">relevant config</a>

What it means

Thrown as `ConfigNotFoundError` in the `tags` branch of the web-API handler: the tags feed requires authentication (Instagram hides tag pages behind login), so if `config.instagram.cookie` is not set the route refuses to proceed. Note the `user` branch can fall back to the guest GraphQL edges, but `tags` cannot — hence the explicit guard only in the tags case.

Source

Thrown at lib/routes/instagram/web-api/index.ts:90

            // User feed metadata
            const biography = userInfo.biography;
            const fullName = userInfo.full_name;
            const id = userInfo.id;
            const username = userInfo.username;
            feedTitle = `${fullName} (@${username}) - Instagram`;
            feedDescription = biography;
            // exists in web api ?? exist in private api ?? exist in both
            feedLogo = userInfo.profile_pic_url_hd ?? userInfo.hd_profile_pic_url_info?.url ?? userInfo.profile_pic_url;
            feedLink = `${baseUrl}/${username}`;

            items = cookie ? await getUserFeedItems(id, username, cookieJar) : [...userInfo.edge_felix_video_timeline.edges, ...userInfo.edge_owner_to_timeline_media.edges];

            break;
        }
        case 'tags': {
            if (!config.instagram || !config.instagram.cookie) {
                throw new ConfigNotFoundError('Instagram RSS is disabled due to the lack of <a href="https://docs.rsshub.app/deploy/config#route-specific-configurations">relevant config</a>');
            }
            const tag = key;

            feedTitle = `#${tag} - Instagram`;
            feedLink = `${baseUrl}/explore/search/keyword/?q=%23${tag}`;

            const feedData = await getTagsFeed(tag, cookieJar);

            feedLogo = feedData.profile_pic_url;
            items = feedData.top.sections.flatMap((section) =>
                // either media or clips
                (section.feed_type === 'media' ? section.layout_content.medias : [...section.layout_content.one_by_two_item.clips.items, ...section.layout_content.fill_items]).map((item) => item.media)
            );

            break;
        }
        default:
            break;

View on GitHub (pinned to bed535e087)

Solutions

  1. Set `INSTAGRAM_COOKIE` env var with a valid logged-in session cookie.
  2. If you cannot supply a cookie, use the `user` route instead (which has an anonymous fallback).
  3. Verify the cookie still authenticates (see error 284) — a present-but-dead cookie will instead trip the 'Invalid cookie' path.

Example fix

// before: tags requested with no cookie
// after: .env
INSTAGRAM_COOKIE=csrftoken=...; sessionid=...; ...
Defensive patterns

Strategy: validation

Validate before calling

if (category === 'tags' && !config.instagram?.cookie) {
  throw new ConfigNotFoundError('Instagram tags feed requires INSTAGRAM_COOKIE');
}

Type guard

const hasCookie = (c?: {cookie?:string}): c is {cookie:string} => Boolean(c && c.cookie);

Prevention

When it happens

Trigger: Request to `/instagram/tags/:tag` on an instance where `config.instagram.cookie` is unset or empty. Fires at web-api/index.ts:90 after the category check passes.

Common situations: Self-hosted instance configured for the `user` route (which works anonymously) but not for `tags`; cookie env var removed/renamed; public instance without credentials.

Related errors


AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12). Data as JSON: /api/errors/d417eee5c2b0c199. Report an issue: GitHub.