DIYgod/RSSHub · error · ConfigNotFoundError
Tumblr RSS is disabled due to the lack of <a href="https://d
Error message
Tumblr 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
ConfigNotFoundError from the Tumblr Posts route: it requires `config.tumblr.clientId` (and the broader `config.tumblr` object) to call the Tumblr v2 API. If either is missing the handler aborts before requesting `api.tumblr.com/v2/blog/{blog}/posts`.
Source
Thrown at lib/routes/tumblr/posts.ts:50
},
],
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
name: 'Posts',
maintainers: ['Rakambda', 'PolarisStarnor'],
description: `::: tip
Tumblr provides official RSS feeds for non "dashboard only" blogs, for instance [https://biketouring-nearby.tumblr.com](https://biketouring-nearby.tumblr.com/rss).
:::`,
handler,
};
async function handler(ctx: Context): Promise<Data> {
if (!config.tumblr || !config.tumblr.clientId) {
throw new ConfigNotFoundError('Tumblr RSS is disabled due to the lack of <a href="https://docs.rsshub.app/deploy/config#route-specific-configurations">relevant config</a>');
}
const blogIdentifier = ctx.req.param('blog');
const limit = fallback(undefined, queryToInteger(ctx.req.query('limit')), 20);
const response = await got.get(`https://api.tumblr.com/v2/blog/${blogIdentifier}/posts`, {
searchParams: {
api_key: utils.generateAuthParams(),
limit,
},
headers: await utils.generateAuthHeaders(),
});
const blog = response.data.response.blog;
const posts = response.data.response.posts.map((post: any) => utils.processPost(post));
return {
title: `Tumblr - ${blogIdentifier} - Posts`,View on GitHub (pinned to bed535e087)
Solutions
- Register an application at https://www.tumblr.com/oauth/apps to obtain a consumer key.
- Set `TUMBLR_CLIENT_ID` and `TUMBLR_CLIENT_SECRET` in your RSSHub environment and restart.
- Confirm `config.tumblr.clientId` resolves after restart by logging the value's presence (not the value).
Defensive patterns
Strategy: validation
Validate before calling
if (!config.tumblr?.clientId) { throw new ConfigNotFoundError('Set TUMBLR_CLIENT_ID/TUMBLR_CLIENT_SECRET before enabling Tumblr routes'); } Type guard
const hasTumblrConfig = (c: unknown): c is { clientId: string } => typeof c === 'object' && c !== null && typeof (c as any).clientId === 'string'; Prevention
- Register the Tumblr OAuth app once and store credentials in a secret manager
- Mark the route as requireConfig so the registry reflects the dependency
- Restart RSSHub after adding credentials
When it happens
Trigger: `config.tumblr` is undefined or `config.tumblr.clientId` is falsy on line 51, so line 52 throws. The route depends on a registered Tumblr OAuth client id/secret.
Common situations: Self-hosted RSSHub without `TUMBLR_CLIENT_ID`/`TUMBLR_CLIENT_SECRET` env vars; the consumer key was revoked by Tumblr; the config object key was misspelled.
Related errors
- Tumblr RSS is disabled due to the lack of <a href="https://d
- 缺少对应 loginUid 的 Bilibili 用户登录后的 Cookie 值 <a href="https://do
- GitHub Discussions RSS is disabled due to the lack of <a hre
- GitHub follower RSS is disabled due to the lack of <a href="
- GitHub notification RSS is disabled due to the lack of <a hr
AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12).
Data as JSON: /api/errors/2671836badb6da76.
Report an issue: GitHub.