{"id":47681860,"url":"https://github.com/subhajeetch/animekun-backend","last_synced_at":"2026-04-02T14:02:12.670Z","repository":{"id":346294660,"uuid":"905398408","full_name":"Subhajeetch/Animekun-backend","owner":"Subhajeetch","description":"An open-source anime API that provides scraped data such as anime information, streaming links, and anime \u0026 manga news.","archived":false,"fork":false,"pushed_at":"2026-03-23T06:26:21.000Z","size":94,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-24T03:00:25.403Z","etag":null,"topics":["anime","anime-api","anime-list","anime-scraper","anime-search","anime-streaming","animes"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Subhajeetch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-18T18:38:58.000Z","updated_at":"2026-03-23T06:26:25.000Z","dependencies_parsed_at":"2026-03-24T03:00:33.874Z","dependency_job_id":null,"html_url":"https://github.com/Subhajeetch/Animekun-backend","commit_stats":null,"previous_names":["subhajeetch/animekun-backend"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/Subhajeetch/Animekun-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Subhajeetch%2FAnimekun-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Subhajeetch%2FAnimekun-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Subhajeetch%2FAnimekun-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Subhajeetch%2FAnimekun-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Subhajeetch","download_url":"https://codeload.github.com/Subhajeetch/Animekun-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Subhajeetch%2FAnimekun-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31307462,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anime","anime-api","anime-list","anime-scraper","anime-search","anime-streaming","animes"],"created_at":"2026-04-02T14:01:55.698Z","updated_at":"2026-04-02T14:02:12.607Z","avatar_url":"https://github.com/Subhajeetch.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\t\u003cbr /\u003e\n\t\u003cp\u003e\n\t\t\u003ca href=\"https://github.com/Subhajeetch/Animekun-frontend\"\u003e\u003cimg src=\"https://i.postimg.cc/ZK2S8YK7/Pine-Tools-com-Screenshot-2025-12-15-160311.png\" width=\"546\" alt=\"animekun\" /\u003e\u003c/a\u003e\n\t\u003c/p\u003e\n\t\u003cbr /\u003e\n\t\u003cp\u003e\n\t\t\u003ca href=\"https://discord.gg/6DhssCN2Ph\"\u003e\u003cimg src=\"https://img.shields.io/badge/join_our-discord-5865F2?logo=discord\u0026logoColor=white\" alt=\"Discord server\" /\u003e\u003c/a\u003e\n\t\t\u003ca href=\"https://github.com/Subhajeetch/Animekun-backend\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/Subhajeetch/Animekun-backend.svg?logo=github\u0026logoColor=ffffff\" alt=\"Last commit\" /\u003e\u003c/a\u003e\n\t\t\u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/badge/Node.js-18.x+-339933?logo=node.js\u0026logoColor=white\" alt=\"Node.js\" /\u003e\u003c/a\u003e\n\t\t\u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/badge/Express-4.x-000000?logo=express\u0026logoColor=white\" alt=\"Express.js\" /\u003e\u003c/a\u003e\n\t\u003c/p\u003e\n\t\u003cp\u003e\n\t\t\u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/badge/Cheerio-Web%20Scraping-F0DB4F\" alt=\"Cheerio\" /\u003e\u003c/a\u003e\n\t\t\u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/badge/Axios-HTTP-5A29E4\" alt=\"Axios\" /\u003e\u003c/a\u003e\n\t\u003c/p\u003e\n\t\u003ch1\u003eAnimekun Backend\u003c/h1\u003e\n\u003c/div\u003e\n\n\n\u003e [!IMPORTANT]\n\u003e\n\u003e The content provided by this api is not owned by me and is not hosted by me. All content belongs to its respective owners. This api is for educational purposes only and demonstrates how to build web applications using scraped data in a responsible manner.\n\n## About\n\nAn open-source anime API that provides scraped data such as anime information, streaming links, and anime \u0026 manga news.\n\n## Table of Contents\n\n- [Usage \u0026 Deployment](#usage--deployment)\n- [Local Installation](#local-installation)\n- [Documentation](#documentation)\n  - [Anime HomePage](#get-anime-homepage)\n  - [Raw Hianime Homepage](#get-raw-hianime-homepage)\n  - [Anime Search](#get-anime-search)\n  - [Anime Info](#get-anime-info)\n  - [Animes By Category](#get-animes-by-category)\n  - [Animes By Genre](#get-animes-by-genre)\n  - [Animes By Producer](#get-animes-by-producer)\n  - [Search Suggestion](#get-search-suggestion)\n  - [Anime Airing Estimated Schedule](#get-anime-airing-estimated-schedule)\n  - [Episodes By Anime ID](#get-episodes-by-anime-id)\n  - [Episode Servers](#get-episode-servers)\n  - [Episode Sources](#get-episode-sources)\n  - [Anime News](#get-anime-news)\n  - [News Article By ID](#get-news-article-by-id)\n  - [M3U8 Proxy](#get-m3u8-proxy)\n- [Contributing](#contributing)\n- [Support](#support)\n- [Thanks](#thanks)\n\n## Usage \u0026 deployment\n\nThis project is divided into three repositories:\n\n1. **Frontend** – [@Subhajeetch/Animekun-frontend](https://github.com/Subhajeetch/Animekun-frontend) \n2. **Backend** – [@Subhajeetch/Animekun-backend](https://github.com/Subhajeetch/Animekun-backend) *(You are currently viewing this repository)*\n3. **Database** – Cloudflare D1 [@Subhajeetch/Animekun-db-cf](https://github.com/Subhajeetch/Animekun-db-cf)\n\n## Local Installation\n1. Run the following code to clone the repository and install all required dependencies\n\n```bash\n$ git clone https://github.com/Subhajeetch/Animekun-backend.git\n$ cd Animekun-backend\n$ npm install\n```\n\n2. Start the server\n\n```bash\n$ npm start \n# npm run dev - for development server\n```\n\n## Documentation\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\n\n### `GET` Anime HomePage\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/homepage\n```\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/homepage\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    spotlightAnimes: [\n      {\n        rank: number,\n        id: string,\n        name: string,\n        jname: string,\n        description: string,\n        poster: string,\n        type: string,\n        episodes: {\n          sub: number,\n          dub: number | null\n        },\n        otherInfo: string[]\n      },\n      { ... }\n    ],\n\n    trendingAnimes: [\n      {\n        rank: number,\n        id: string,\n        name: string,\n        jname: string,\n        poster: string\n      },\n      { ... }\n    ],\n\n    mostFavoriteAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string,\n        type: string,\n        rating: string | null,\n        episodes: {\n          sub: number,\n          dub: number\n        }\n      },\n      { ... }\n    ],\n\n    mostPopularAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string,\n        type: string,\n        rating: string | null,\n        episodes: {\n          sub: number,\n          dub: number\n        }\n      },\n      { ... }\n    ],\n\n    topAiringAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string,\n        type: string,\n        rating: string | null,\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    underratedAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string,\n        type: string,\n        rating: string | null,\n        episodes: {\n          sub: number,\n          dub: number\n        }\n      },\n      { ... }\n    ],\n\n    specialAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string,\n        type: \"Special\",\n        rating: string | null,\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    top10Animes: {\n      today: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ],\n      week: [ /* same structure as today */ ],\n      month: [ /* same structure as today */ ]\n    },\n\n    newsFeed: [\n      {\n        id: string,\n        title: string,\n        date: string,\n        topics: string[],\n        preview: {\n          intro: string,\n          full: string\n        },\n        thumbnail: string,\n        url: string\n      },\n      { ... }\n    ]\n  }\n}\n\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Raw Hianime Homepage\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/raw/homepage\n```\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/raw/homepage\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    spotlightAnimes: [\n      {\n        rank: number,\n        id: string,\n        name: string,\n        jname: string,\n        description: string,\n        poster: string,\n        type: string, // TV | Movie | OVA | ONA | Special\n        episodes: {\n          sub: number,\n          dub: number | null\n        },\n        otherInfo: string[] // [type, duration, releaseDate, quality]\n      },\n      { ... }\n    ],\n\n    trendingAnimes: [\n      {\n        rank: number,\n        id: string,\n        name: string,\n        jname: string,\n        poster: string\n      },\n      { ... }\n    ],\n\n    latestEpisodeAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string,\n        type: string,\n        rating: string | null,\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    topUpcomingAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string, // date or \"?\"\n        type: string,     // TV (? eps) | Movie (1 eps) | ONA (? eps)\n        rating: string | null,\n        episodes: {\n          sub: number | null,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    top10Animes: {\n      today: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ],\n\n      week: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ],\n\n      month: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ]\n    },\n\n    topAiringAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        type: string, // TV | ONA | OVA | Special\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    mostPopularAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        type: string,\n        episodes: {\n          sub: number,\n          dub: number\n        }\n      },\n      { ... }\n    ],\n\n    mostFavoriteAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        type: string,\n        episodes: {\n          sub: number,\n          dub: number\n        }\n      },\n      { ... }\n    ],\n\n    latestCompletedAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        type: string,\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    genres: string[]\n  }\n}\n\n\n```\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\n\n### `GET` Anime Search\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/search\n```\n\n#### Query Parameters\n\n|  Parameter   |  Type  |                            Description                            | Required? | Default |\n| :----------: | :----: | :---------------------------------------------------------------: | :-------: | :-----: |\n|     `q`      | string | The search query, i.e. the title of the item you are looking for. |    Yes    |   --    |\n|    `page`    | number |                  The page number of the result.                   |    No     |   `1`   |\n|    `type`    | string |                  Type of the anime. eg: `movie`                   |    No     |   --    |\n|   `status`   | string |            Status of the anime. eg: `finished-airing`             |    No     |   --    |\n|   `rated`    | string |             Rating of the anime. eg: `r+` or `pg-13`              |    No     |   --    |\n|   `score`    | string |           Score of the anime. eg: `good` or `very-good`           |    No     |   --    |\n|   `season`   | string |              Season of the aired anime. eg: `spring`              |    No     |   --    |\n|  `language`  | string |     Language category of the anime. eg: `sub` or `sub-\u0026-dub`      |    No     |   --    |\n| `start_date` | string |       Start date of the anime(yyyy-mm-dd). eg: `2014-10-2`        |    No     |   --    |\n|  `end_date`  | string |        End date of the anime(yyyy-mm-dd). eg: `2010-12-4`         |    No     |   --    |\n|    `sort`    | string |      Order of sorting the anime result. eg: `recently-added`      |    No     |   --    |\n|   `genres`   | string |   Genre of the anime, separated by commas. eg: `isekai,shounen`   |    No     |   --    |\n\n\u003e [!TIP]\n\u003e For both `start_date` and `end_date`, year must be mentioned. If you wanna omit date or month specify `0` instead.\n\u003e Eg: omitting date -\u003e 2014-10-0, omitting month -\u003e 2014-0-12, omitting both -\u003e 2014-0-0\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/search\";\nconst query = \"blue-lock\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url, { params: { q: query } });\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    animes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string,\n        type: string, // TV | Movie | OVA | Special\n        rating: string | null,\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    mostPopularAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        type: string,\n        episodes: {\n          sub: number,\n          dub: number\n        }\n      },\n      { ... }\n    ],\n\n    searchQuery: string,\n\n    searchFilters: {\n      genres: string[] | null\n    },\n\n    pagination: {\n      totalPages: number,\n      currentPage: number,\n      hasNextPage: boolean\n    }\n  }\n}\n\n```\n\u003c/details\u003e\n\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Anime Info\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/anime/info/{animeId}\n```\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `animeId` | string | The unique anime id (in kebab case). |    Yes    |   --    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/anime/info/chainsaw-man-17406\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    anime: {\n      info: {\n        id: string,\n        anilistId: number,\n        malId: number,\n        name: string,\n        poster: string,\n        description: string,\n\n        stats: {\n          rating: string,\n          quality: string,\n          episodes: {\n            sub: number,\n            dub: number\n          },\n          type: string, // TV | Movie | OVA | Special | ONA\n          duration: string\n        },\n\n        promotionalVideos: [\n          {\n            title: string,\n            source: string,\n            thumbnail: string\n          }\n        ],\n\n        charactersVoiceActors: [\n          {\n            character: {\n              id: string,\n              poster: string,\n              name: string,\n              cast: string // Main | Supporting\n            },\n            voiceActor: {\n              id: string,\n              poster: string,\n              name: string,\n              cast: string\n            }\n          }\n        ]\n      },\n\n      moreInfo: {\n        japanese: string,\n        aired: string,\n        premiered: string,\n        duration: string,\n        status: string,\n        malscore: string,\n        genres: string[],\n        studios: string,\n        producers: string[]\n      }\n    },\n\n    seasons: [\n      {\n        id: string,\n        name: string,\n        poster: string,\n        type: string,\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      }\n    ],\n\n    mostPopularAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        type: string,\n        episodes: {\n          sub: number,\n          dub: number\n        }\n      }\n    ],\n\n    relatedAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        type: string,\n        episodes: {\n          sub: number,\n          dub: number\n        }\n      }\n    ],\n\n    recommendedAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string,\n        type: string, // TV | Movie | OVA | Special | ONA\n        rating: string | null,\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      }\n    ]\n  }\n}\n\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Animes By Category\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/anime/category/{category}\n```\n\n#### Path Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `category` | string | Anime category eg: `most-favorite`, `most-popular`, `subbed-anime`, `dubbed-anime`, etc. |    Yes    |   --    |\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `page` | number | Page number |    No    |   1    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/anime/category/most-favorite\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    animes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string, // e.g. \"24m\"\n        type: string,     // TV | Movie | OVA | ONA | Special\n        rating: string | null, // e.g. \"PG-13\"\n        episodes: {\n          sub: number,\n          dub: number\n        }\n      },\n      { ... }\n    ],\n\n    genres: string[],\n\n    top10Animes: {\n      today: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ],\n\n      week: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ],\n\n      month: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ]\n    },\n\n    category: string, // e.g. \"Most Favorite\", \"Most Popular\", etc.\n\n    pagination: {\n      totalPages: number,\n      currentPage: number,\n      hasNextPage: boolean\n    }\n  }\n}\n\n\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Animes By Genre\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/anime/genre/{genre}\n```\n\n#### Path Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `genre` | string | Anime genre eg: `action`, `thriller`, `romance`, etc. |    Yes    |   --    |\n\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `page` | number | Page number |    No    |   1    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/anime/genre/action\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    genreName: string, // e.g. \"Action Anime\"\n\n    animes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string, // e.g. \"24m\", \"95m\"\n        type: string,     // TV | Movie | OVA | ONA | Special\n        rating: string | null, // e.g. \"Pg-13\"\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    genres: string[],\n\n    topAiringAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        type: string, // TV | ONA | OVA | Special\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    pagination: {\n      totalPages: number,\n      currentPage: number,\n      hasNextPage: boolean\n    }\n  }\n}\n\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Animes By Producer\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/anime/producer/{producer}\n```\n\n#### Path Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `producer` | string | Anime producer eg: `mappa`, `twin-engine`, `toho-animation`, etc. |    Yes    |   --    |\n\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `page` | number | Page number |    No    |   1    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/anime/producer/mappa\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    producerName: string, // e.g. \"MAPPA Anime\"\n\n    animes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        duration: string, // e.g. \"23m\", \"95m\"\n        type: string,     // TV | Movie | OVA | ONA | Special\n        rating: string | null, // e.g. \"18+\"\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    top10Animes: {\n      today: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ],\n\n      week: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ],\n\n      month: [\n        {\n          id: string,\n          rank: number,\n          name: string,\n          jname: string,\n          poster: string,\n          episodes: {\n            sub: number,\n            dub: number | null\n          }\n        },\n        { ... }\n      ]\n    },\n\n    topAiringAnimes: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        type: string, // TV | ONA | OVA | Special\n        episodes: {\n          sub: number,\n          dub: number | null\n        }\n      },\n      { ... }\n    ],\n\n    pagination: {\n      totalPages: number,\n      currentPage: number,\n      hasNextPage: boolean\n    }\n  }\n}\n```\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Search Suggestion\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/searchsuggestion?q={query}\n```\n\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `query` | string | Query to get search suggestion |    yes    |   --    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/searchsuggestion?q=blue-lock\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    suggestions: [\n      {\n        id: string,\n        name: string,\n        jname: string,\n        poster: string,\n        moreInfo: [\n          string, // release date (e.g. \"Feb 17, 2023\")\n          string, // type (TV | Movie | OVA | ONA | Special)\n          string  // duration (e.g. \"24m\", \"1h 59m\")\n        ]\n      },\n      { ... }\n    ]\n  }\n}\n```\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Anime Airing Estimated SChedule\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/anime/schedule/{date}\n```\n\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `date` | string | Date to get anime airing schedule in this formate - \"yyyy-mm-dd\"  |    yes    |   --    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/anime/schedule/2026-01-14\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    scheduledAnimes: [\n      {\n        id: string,\n        time: string, // HH:mm (local airing time)\n        name: string,\n        jname: string,\n        airingTimestamp: number, // Unix timestamp in milliseconds\n        secondsUntilAiring: number, // seconds remaining until episode airs\n        episode: number // episode number that will air\n      },\n      { ... }\n    ]\n  }\n}\n\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Episodes By Anime ID\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/episodes/{animeId}\n```\n\n#### Path Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `animeId` | string | The unique anime id (in kebab case). |    Yes    |   --    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/episodes/chainsaw-man-17406\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    totalEpisodes: number,\n\n    episodes: [\n      {\n        title: string,\n        episodeId: string, // unique episode identifier / watch URL param\n        number: number,    // episode number\n        isFiller: boolean\n      },\n      { ... }\n    ]\n  }\n}\n\n\n```\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Episode Servers\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/episode/servers/{episodeId}\n```\n\n#### Path Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `episodeId` | string | The unique episode id (partial). |    Yes    |   --    |\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `ep` | string | The second half of the episode ID |    Yes    |   --    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/episode/servers/chainsaw-man-17406?ep=94597\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    episodeId: string, // episode identifier\n    episodeNo: number,\n\n    sub: [\n      {\n        serverName: string, // e.g. \"hd-1\", \"hd-2\"\n        serverId: number\n      },\n      { ... }\n    ],\n\n    dub: [\n      {\n        serverName: string,\n        serverId: number\n      },\n      { ... }\n    ],\n\n    raw: [\n      {\n        serverName: string,\n        serverId: number\n      },\n      { ... }\n    ]\n  }\n}\n\n\n```\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Episode Sources\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/episode/sources/{episodeId}\n```\n\n#### Path Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `episodeId` | string | The unique episode id (partial). |    Yes    |   --    |\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `ep` | string | The second half of the episode ID |    Yes    |   --    |\n| `s` | string | Server ID to fetch sources from |    No     | `hd-1` |\n| `c` | string | Category: `sub` for subtitled or `dub` for dubbed |    No     |   --    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/episode/sources/chainsaw-man-17406?ep=94597\u0026s=hd-1\u0026c=sub\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    headers: {\n      Referer: string // required request header for stream playback\n    },\n\n    tracks: [\n      {\n        url: string,  // VTT subtitle or thumbnails file\n        lang: string  // e.g. \"English\", \"Spanish\", \"Arabic\", \"thumbnails\"\n      },\n      { ... }\n    ],\n\n    intro: {\n      start: number, // seconds\n      end: number\n    },\n\n    outro: {\n      start: number, // seconds\n      end: number\n    },\n\n    sources: [\n      {\n        url: string,   // stream URL\n        isM3U8: boolean,\n        type: string   // \"hls\"\n      },\n      { ... }\n    ],\n\n    anilistID: number,\n    malID: number\n  }\n}\n\n```\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` Anime News\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/news\n```\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `topic` | string | Filter news by topic (optional) |    No     |   --    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/news\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    news: [\n      {\n        id: string,         // unique article identifier / slug\n        title: string,\n        uploadedAt: string, // formatted date-time (e.g. \"Jan 23, 21:09\")\n\n        topics: [\n          string // e.g. \"anime\", \"manga\"\n        ],\n\n        preview: {\n          intro: string, // short preview text (may be empty)\n          full: string   // full preview text (may be empty)\n        },\n\n        thumbnail: string, // image URL\n        url: string        // full article URL\n      },\n      { ... }\n    ]\n  }\n}\n\n\n```\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` News Article By ID\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/get/news/info\n```\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `id` | string | The unique news article ID |    Yes    |   --    |\n\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\nconst url = \"/api/mantox/get/news/info?id=2026-01-23/japanese-animation-tv-ranking-january-12-18/.233401\";\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(url);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n#### Response Schema\n\n```javascript\n{\n  success: boolean,\n  data: {\n    id: string,         \n    title: string,\n    uploadedAt: string,\n    intro: string,      \n    description: string,\n    thumbnail: string,   \n    url: string\n  }\n}\n\n```\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### `GET` M3U8 Proxy\n\n\u003c/summary\u003e\n\n#### Route Schema (URL)\n\n```bash\n/api/mantox/proxy/\n```\n\n#### Query Parameters\n\n| Parameter |  Type  |             Description              | Required? | Default |\n| :-------: | :----: | :----------------------------------: | :-------: | :-----: |\n| `url` | string | The URL to proxy (m3u8 playlist or video segment) |    Yes    |   --    |\n\n\n#### Description\n\nThis is a media proxy endpoint that handles streaming of anime content. It supports:\n- **M3U8 Playlist Rewriting**: Automatically rewrites M3U8 playlists to proxy all segment URLs\n- **Video Segment Streaming**: Proxies video segments (.ts files) with proper headers\n- **Caching**: Implements intelligent caching (10 minutes for playlists, 1 year for segments)\n- **Retry Logic**: Includes automatic retry with exponential backoff for failed requests\n- **Custom Headers**: Sends appropriate referer and user-agent headers for compatibility\n\n#### Request Sample\n\n```javascript\nimport axios from \"axios\";\n\n// For M3U8 playlist\nconst playlistUrl = \"/api/mantox/proxy/?url=https://rainveil36.xyz/...../master.m3u8\";\n\n// For video segment\nconst segmentUrl = \"/api/mantox/proxy/?url=https%3A%2F%2Fexample.com%2Fsegment.ts\";\n\nconst data = async () =\u003e {\n try {\n const { data } = await axios.get(playlistUrl);\n return data;\n } catch (err) {\n throw new Error(err.message);\n }\n};\n\nconsole.log(data);\n\n```\n\n#### Response Schema\n\n**For M3U8 Playlists:**\n```\n#EXTM3U\n#EXT-X-VERSION:3\n#EXT-X-TARGETDURATION:10\n#EXTINF:9.9,\n/api/mantox/proxy/?url=https%3A%2F%2Fexample.com%2Fsegment1.ts\n#EXTINF:9.9,\n/api/mantox/proxy/?url=https%3A%2F%2Fexample.com%2Fsegment2.ts\n...\n#EXT-X-ENDLIST\n```\n\n**For Video Segments:**\nBinary video data (MPEG-TS format)\n\n#### Health Check\n\n```bash\nGET /api/mantox/proxy/health\n```\n\nReturns:\n```javascript\n{\n  status: \"ok\"\n}\n```\n\n\u003c/details\u003e\n\n\n\n## Contributing\n\nContributions are welcome!  \nPlease read the [CONTRIBUTING.md](/docs/CONTRIBUTING.md) file for setup instructions, development guidelines, and contribution details.\n\n## Support\nIf you like this project, consider giving it a \u003cstrong\u003estar 🌟\u003c/strong\u003e\n\nConnect with me on X (Twitter): [@subhajeetch](https://x.com/subhajeetch)  \nJoin the Discord community: [Animekun](https://discord.gg/6DhssCN2Ph)\n\n## Thanks\n\n- [consumet.ts](https://github.com/consumet/consumet.ts)\n- [aniwatch](https://github.com/ghoshRitesh12/aniwatch)\n\n## License\n\nThis project is licensed under the [MIT License](https://opensource.org/license/mit/) - see the [LICENSE](/LICENSE) file for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubhajeetch%2Fanimekun-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsubhajeetch%2Fanimekun-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubhajeetch%2Fanimekun-backend/lists"}