{"record":{"id":"941239b834180c34","repo":"DIYgod/RSSHub","slug":"series-id-not-found-on-omega-scans","errorCode":null,"errorMessage":"Series ${id} not found on Omega Scans","messagePattern":"Series (.+?) not found on Omega Scans","errorType":"exception","errorClass":"NotFoundError","httpStatus":404,"severity":"warning","filePath":"lib/routes/omegascans/series.ts","lineNumber":56,"sourceCode":"        supportRadar: false,\n        supportBT: false,\n        supportPodcast: false,\n        supportScihub: false,\n    },\n    handler: async (ctx) => {\n        const { id } = ctx.req.param();\n\n        const response = await ofetch<ChapterQueryResponse>('https://api.omegascans.org/chapter/query', {\n            query: {\n                page: 1,\n                perPage: 30,\n                series_id: id,\n            },\n        });\n\n        const chapters = response.data;\n        if (chapters.length === 0) {\n            throw new NotFoundError(`Series ${id} not found on Omega Scans`);\n        }\n\n        const seriesSlug = chapters[0].series.series_slug;\n        const seriesTitle = seriesSlug.replaceAll('-', ' ').replaceAll(/\\b\\w/g, (c) => c.toUpperCase());\n        const seriesLink = `https://omegascans.org/series/${seriesSlug}`;\n\n        return {\n            title: `Omega Scans - ${seriesTitle}`,\n            link: seriesLink,\n            image: 'https://omegascans.org/wetried_only.png',\n            item: chapters.map((chapter) => ({\n                title: chapter.chapter_title ?? chapter.chapter_name,\n                link: `https://omegascans.org/series/${chapter.series.series_slug}/${chapter.chapter_slug}`,\n                pubDate: parseDate(chapter.created_at),\n                image: chapter.chapter_thumbnail ?? undefined,\n                guid: `omegascans-chapter-${chapter.id}`,\n                category: [chapter.price === 0 ? 'Free' : 'Paid'],\n            })),","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/DIYgod/RSSHub/blob/bed535e0879dc71c5aff6f1e7bd1ac21ede40115/lib/routes/omegascans/series.ts#L38-L74","documentation":"Thrown as a `NotFoundError` (HTTP 404) when the Omega Scans chapter query API returns an empty `data` array for the given `series_id`. The handler POSTs to `https://api.omegascans.org/chapter/query` with `series_id`, `page: 1`, `perPage: 30`. An empty response means either the series does not exist or has no published chapters.","triggerScenarios":"Requesting `/omegascans/series/<id>` with an ID that doesn't correspond to any series, or a series that has been removed. The API returns `{ data: [] }` for non-existent series IDs rather than an HTTP error.","commonSituations":"User enters a wrong series ID (the ID must be found via the API get request on the series page, not from the URL slug). The series was deleted or made private by the publisher. The site migrated series IDs.","solutions":["Verify the series ID by opening the series page on omegascans.org and checking network requests for the `series_id` parameter.","Ensure the ID is numeric and from the API, not the URL slug.","If the series was removed, there is no fix — use a different series ID."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Validate series ID is numeric before calling the API\nif (!/^\\d+$/.test(id)) {\n    throw new InvalidParameterError(`Series ID must be numeric, got: '${id}'`);\n}","typeGuard":"function isValidSeriesId(id: string): boolean {\n    return /^\\d+$/.test(id);\n}","tryCatchPattern":"try {\n    const response = await ofetch<ChapterQueryResponse>(apiUrl, { query: { series_id: id } });\n    if (response.data.length === 0) {\n        throw new NotFoundError(`Series ${id} not found on Omega Scans`);\n    }\n} catch (e) {\n    if (e instanceof NotFoundError) {\n        logger.warn(`Omega Scans series ${id} returned no chapters`);\n    }\n    throw e;\n}","preventionTips":["Obtain the series ID from the network requests on the Omega Scans series page, not the URL slug.","Validate the ID is numeric before the API call.","Handle 404 gracefully in the consuming feed reader."],"tags":["validation","omegascans","not-found","manga"],"backgroundTag":null,"analyzedSha":"bed535e0879dc71c5aff6f1e7bd1ac21ede40115","analyzedAt":"2026-08-12T19:29:35.364Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}