Files
AniKotoAPI/docs
Shinei Nouzen 996cead3b1 fix: Full diagnostic sweep — bugs, dead code, unused imports, docs accuracy
Code fixes:
- seasons/watchOrder: Remove dead ternary (both branches identical)
- mirror.helper: Remove redundant ternary (both branches identical)
- topAnimeRankings: Fix JSDoc (day/week/month, not top/newest)
- apiRoutes: Fix proxy domain validation (exact match, not includes)
- apiRoutes: Fix proxy .m3u8 check (pathname, not hostname)
- pagination: Fix totalItems calculation (was overestimating)
- server.js: Remove dead has404File variable
- server.js: Remove duplicate /api/cache/stats route
- server.js: Remove unused getCacheStats import

Unused imports removed:
- animeInfo: URLS from dataUrl.js
- episodeList: headers from header.config.js
- episodeListAjax: axios
- trending: URLS from dataUrl.js
- trendingSidebar: URLS from dataUrl.js
- upcomingAnime: parseListItems
- watchPage: URLS, BASE_URL from dataUrl.js

Docs fixes:
- README: 33->38 endpoints, 24->28 controllers, 26->28 extractors
- README: Cache TTL 5min->per-endpoint, Timeout 15s->30s
- docs/index.md: 33->38 endpoints
- architecture.md: LRU cache strategy, remove stale cookie-parser
- agents: compression version, extractor/controller counts
- agents: domain typo, stale CORS dep, version badge
2026-07-30 00:50:18 +05:30
..

AniKotoAPI Documentation

Free REST API for anime data. Browse, search, stream — no API key required.

Overview

AniKotoAPI is a free, open-source REST API that provides anime data scraped from anikototv.to. It's built with Node.js, Express, and Cheerio, and deployed on Vercel.

Base URL: https://anikototvapi.vercel.app/api

Quick Start

# Get homepage data (spotlight, trending, top-airing, genres)
curl https://anikototvapi.vercel.app/api

# Search for anime
curl "https://anikototvapi.vercel.app/api/search?keyword=naruto"

# Get anime info
curl "https://anikototvapi.vercel.app/api/info?id=naruto-eybxz"

Live Response — Homepage:

{
  "success": true,
  "results": {
    "spotlights": [
      {
        "slug": "wistoria-wand-and-sword-season-2-dua04",
        "poster": "https://cdn.anipixcdn.co/background/101f58336250ee0d_1779363645.webp",
        "title": "Wistoria: Wand and Sword Season 2",
        "japaneseTitle": "Tsue to Tsurugi no Wistoria Season 2",
        "rating": "PG-13",
        "quality": "HD"
      }
    ],
    "trending": [
      {
        "slug": "witch-hat-atelier-ikmut/ep-11",
        "poster": "https://cdn.anipixcdn.co/thumbnail/0412057393e8a45b3ba8b16874b6034d.jpg",
        "title": "Witch Hat Atelier",
        "japaneseTitle": "Tongari Boushi no Atelier",
        "sub": 11,
        "dub": 11,
        "total": 13,
        "type": "TV"
      }
    ],
    "topAiring": [...],
    "genres": ["Action", "Adventure", "Cars", "Comedy", ...]
  }
}

Features

  • 38 Endpoints — Home, search, info, episodes, streaming, schedule, seasons, watch order, download, and more
  • No API Key — Just make requests, no registration needed
  • LRU Cache — Configurable TTL per endpoint type (3min to 60min)
  • Multi-Mirror Fallback — Automatic failover across 5 mirror domains
  • Response Compression — Gzip compression for faster responses
  • Pagination Metadata — All list endpoints include pagination object with currentPage, totalPages, hasNext, hasPrev
  • CORS Enabled — Access from any domain
  • JSON Responses — Standardized {success, results} format

Documentation

Response Format

All endpoints return JSON in this format:

{
  "success": true,
  "results": { ... }
}

Error responses:

{
  "success": false,
  "message": "Error description"
}

Rate Limiting

Rate limiting is configurable via environment variables (RATE_LIMIT, RATE_WINDOW). Default is 100 requests per 60 seconds per IP. Includes X-RateLimit-Limit and X-RateLimit-Remaining headers.

Disclaimer

This API is for educational purposes only. It scrapes publicly available data from anikototv.to. We are not affiliated with or endorsed by AniKoto. All content belongs to its respective owners.