Free, open source, no API key required. Deploy your own instance or use ours.
-
+
View API
@@ -624,7 +624,7 @@ fetch("https://anikoto.vercel.app/api")
});
/* ── Console ── */
- const BASE = 'https://anikoto.vercel.app/api';
+ const BASE = 'https://anikototvapi.vercel.app/api';
const endpoints = {
home: { url: '/api', label: 'Home' },
search: { url: '/api/search?keyword=naruto', label: 'Search' },
@@ -663,21 +663,21 @@ fetch("https://anikoto.vercel.app/api")
/* ── Explorer ── */
const explorerData = [
- { id: 'home', title: 'Home Info', desc: 'Spotlight, trending, popular, top-airing, genres, and more.', path: '/api', params: [], code: { curl: 'curl https://anikoto.vercel.app/api', js: 'const res = await fetch("https://anikoto.vercel.app/api");\nconst data = await res.json();\nconsole.log(data.trending);', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api")\nprint(r.json()["trending"])' } },
- { id: 'search', title: 'Search', desc: 'Search anime by keyword with pagination.', path: '/api/search?keyword={q}&page={n}', params: [{ name: 'keyword', type: 'string', desc: 'Search query' }, { name: 'page', type: 'number', desc: 'Page (default 1)' }], code: { curl: 'curl "https://anikoto.vercel.app/api/search?keyword=naruto"', js: 'const res = await fetch("https://anikoto.vercel.app/api/search?keyword=naruto");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/search", params={"keyword": "naruto"})\nprint(r.json())' } },
- { id: 'suggest', title: 'Search Suggest', desc: 'Autocomplete suggestions for search.', path: '/api/search/suggest?keyword={q}', params: [{ name: 'keyword', type: 'string', desc: 'Partial query' }], code: { curl: 'curl "https://anikoto.vercel.app/api/search/suggest?keyword=dea"', js: 'const res = await fetch("https://anikoto.vercel.app/api/search/suggest?keyword=dea");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/search/suggest", params={"keyword": "dea"})\nprint(r.json())' } },
- { id: 'info', title: 'Anime Info', desc: 'Detailed info: synopsis, genres, relations, recommendations.', path: '/api/info?id={slug}', params: [{ name: 'id', type: 'string', desc: 'Anime slug' }], code: { curl: 'curl "https://anikoto.vercel.app/api/info?id=naruto"', js: 'const res = await fetch("https://anikoto.vercel.app/api/info?id=naruto");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/info", params={"id": "naruto"})\nprint(r.json())' } },
- { id: 'episodes', title: 'Episodes', desc: 'Episode list loaded via AJAX.', path: '/api/episodes/{slug}', params: [{ name: 'slug', type: 'string', desc: 'Anime slug' }], code: { curl: 'curl "https://anikoto.vercel.app/api/episodes/naruto"', js: 'const res = await fetch("https://anikoto.vercel.app/api/episodes/naruto");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/episodes/naruto")\nprint(r.json())' } },
- { id: 'stream', title: 'Stream Servers', desc: 'Streaming servers for an episode.', path: '/api/stream?id={episodeId}', params: [{ name: 'id', type: 'string', desc: 'Episode ID' }], code: { curl: 'curl "https://anikoto.vercel.app/api/stream?id=naruto-ep-1"', js: 'const res = await fetch("https://anikoto.vercel.app/api/stream?id=naruto-ep-1");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/stream", params={"id": "naruto-ep-1"})\nprint(r.json())' } },
- { id: 'servers', title: 'Servers', desc: 'Resolve streaming server links.', path: '/api/servers?ids={ids}', params: [{ name: 'ids', type: 'string', desc: 'Comma-separated link IDs' }], code: { curl: 'curl "https://anikoto.vercel.app/api/servers?ids=123,456"', js: 'const res = await fetch("https://anikoto.vercel.app/api/servers?ids=123,456");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/servers", params={"ids": "123,456"})\nprint(r.json())' } },
- { id: 'schedule', title: 'Schedule', desc: 'Anime schedule for a specific date.', path: '/api/schedule?date={YYYY-MM-DD}', params: [{ name: 'date', type: 'string', desc: 'Date (default today)' }], code: { curl: 'curl "https://anikoto.vercel.app/api/schedule"', js: 'const res = await fetch("https://anikoto.vercel.app/api/schedule");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/schedule")\nprint(r.json())' } },
- { id: 'topten', title: 'Top 10', desc: 'Top 10 anime (today, week, month).', path: '/api/top-ten', params: [], code: { curl: 'curl "https://anikoto.vercel.app/api/top-ten"', js: 'const res = await fetch("https://anikoto.vercel.app/api/top-ten");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/top-ten")\nprint(r.json())' } },
- { id: 'random', title: 'Random', desc: 'Random anime info.', path: '/api/random', params: [], code: { curl: 'curl "https://anikoto.vercel.app/api/random"', js: 'const res = await fetch("https://anikoto.vercel.app/api/random");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/random")\nprint(r.json())' } },
- { id: 'filter', title: 'Filter', desc: 'Filter by genre, type, status, season.', path: '/api/filter?keyword={q}&genre[]={g}', params: [{ name: 'keyword', type: 'string', desc: 'Search keyword (required)' }, { name: 'genre[]', type: 'number', desc: 'Genre IDs' }, { name: 'type[]', type: 'number', desc: 'Type IDs' }], code: { curl: 'curl "https://anikoto.vercel.app/api/filter?keyword=&genre[]=1&genre[]=4"', js: 'const res = await fetch("https://anikoto.vercel.app/api/filter?keyword=&genre[]=1");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/filter", params={"keyword": "", "genre[]": 1})\nprint(r.json())' } },
- { id: 'popular', title: 'Most Popular', desc: 'Most popular anime list.', path: '/api/most-popular?page={n}', params: [{ name: 'page', type: 'number', desc: 'Page (default 1)' }], code: { curl: 'curl "https://anikoto.vercel.app/api/most-popular"', js: 'const res = await fetch("https://anikoto.vercel.app/api/most-popular");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/most-popular")\nprint(r.json())' } },
- { id: 'genre', title: 'Genre', desc: 'Anime by genre.', path: '/api/genre/{name}', params: [{ name: 'name', type: 'string', desc: 'Genre slug (action, comedy, etc.)' }], code: { curl: 'curl "https://anikoto.vercel.app/api/genre/action"', js: 'const res = await fetch("https://anikoto.vercel.app/api/genre/action");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/genre/action")\nprint(r.json())' } },
- { id: 'type', title: 'Type', desc: 'Anime by type.', path: '/api/type/{name}', params: [{ name: 'name', type: 'string', desc: 'Type (tv, movie, ova, etc.)' }], code: { curl: 'curl "https://anikoto.vercel.app/api/type/tv"', js: 'const res = await fetch("https://anikoto.vercel.app/api/type/tv");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/type/tv")\nprint(r.json())' } },
- { id: 'status', title: 'Status', desc: 'Anime by status.', path: '/api/status/{name}', params: [{ name: 'name', type: 'string', desc: 'Status (currently-airing, finished-airing)' }], code: { curl: 'curl "https://anikoto.vercel.app/api/status/currently-airing"', js: 'const res = await fetch("https://anikoto.vercel.app/api/status/currently-airing");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikoto.vercel.app/api/status/currently-airing")\nprint(r.json())' } },
+ { id: 'home', title: 'Home Info', desc: 'Spotlight, trending, popular, top-airing, genres, and more.', path: '/api', params: [], code: { curl: 'curl https://anikototvapi.vercel.app/api', js: 'const res = await fetch("https://anikototvapi.vercel.app/api");\nconst data = await res.json();\nconsole.log(data.trending);', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api")\nprint(r.json()["trending"])' } },
+ { id: 'search', title: 'Search', desc: 'Search anime by keyword with pagination.', path: '/api/search?keyword={q}&page={n}', params: [{ name: 'keyword', type: 'string', desc: 'Search query' }, { name: 'page', type: 'number', desc: 'Page (default 1)' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/search?keyword=naruto"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/search?keyword=naruto");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/search", params={"keyword": "naruto"})\nprint(r.json())' } },
+ { id: 'suggest', title: 'Search Suggest', desc: 'Autocomplete suggestions for search.', path: '/api/search/suggest?keyword={q}', params: [{ name: 'keyword', type: 'string', desc: 'Partial query' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/search/suggest?keyword=dea"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/search/suggest?keyword=dea");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/search/suggest", params={"keyword": "dea"})\nprint(r.json())' } },
+ { id: 'info', title: 'Anime Info', desc: 'Detailed info: synopsis, genres, relations, recommendations.', path: '/api/info?id={slug}', params: [{ name: 'id', type: 'string', desc: 'Anime slug' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/info?id=naruto"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/info?id=naruto");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/info", params={"id": "naruto"})\nprint(r.json())' } },
+ { id: 'episodes', title: 'Episodes', desc: 'Episode list loaded via AJAX.', path: '/api/episodes/{slug}', params: [{ name: 'slug', type: 'string', desc: 'Anime slug' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/episodes/naruto"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/episodes/naruto");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/episodes/naruto")\nprint(r.json())' } },
+ { id: 'stream', title: 'Stream Servers', desc: 'Streaming servers for an episode.', path: '/api/stream?id={episodeId}', params: [{ name: 'id', type: 'string', desc: 'Episode ID' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/stream?id=naruto-ep-1"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/stream?id=naruto-ep-1");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/stream", params={"id": "naruto-ep-1"})\nprint(r.json())' } },
+ { id: 'servers', title: 'Servers', desc: 'Resolve streaming server links.', path: '/api/servers?ids={ids}', params: [{ name: 'ids', type: 'string', desc: 'Comma-separated link IDs' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/servers?ids=123,456"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/servers?ids=123,456");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/servers", params={"ids": "123,456"})\nprint(r.json())' } },
+ { id: 'schedule', title: 'Schedule', desc: 'Anime schedule for a specific date.', path: '/api/schedule?date={YYYY-MM-DD}', params: [{ name: 'date', type: 'string', desc: 'Date (default today)' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/schedule"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/schedule");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/schedule")\nprint(r.json())' } },
+ { id: 'topten', title: 'Top 10', desc: 'Top 10 anime (today, week, month).', path: '/api/top-ten', params: [], code: { curl: 'curl "https://anikototvapi.vercel.app/api/top-ten"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/top-ten");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/top-ten")\nprint(r.json())' } },
+ { id: 'random', title: 'Random', desc: 'Random anime info.', path: '/api/random', params: [], code: { curl: 'curl "https://anikototvapi.vercel.app/api/random"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/random");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/random")\nprint(r.json())' } },
+ { id: 'filter', title: 'Filter', desc: 'Filter by genre, type, status, season.', path: '/api/filter?keyword={q}&genre[]={g}', params: [{ name: 'keyword', type: 'string', desc: 'Search keyword (required)' }, { name: 'genre[]', type: 'number', desc: 'Genre IDs' }, { name: 'type[]', type: 'number', desc: 'Type IDs' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/filter?keyword=&genre[]=1&genre[]=4"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/filter?keyword=&genre[]=1");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/filter", params={"keyword": "", "genre[]": 1})\nprint(r.json())' } },
+ { id: 'popular', title: 'Most Popular', desc: 'Most popular anime list.', path: '/api/most-popular?page={n}', params: [{ name: 'page', type: 'number', desc: 'Page (default 1)' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/most-popular"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/most-popular");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/most-popular")\nprint(r.json())' } },
+ { id: 'genre', title: 'Genre', desc: 'Anime by genre.', path: '/api/genre/{name}', params: [{ name: 'name', type: 'string', desc: 'Genre slug (action, comedy, etc.)' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/genre/action"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/genre/action");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/genre/action")\nprint(r.json())' } },
+ { id: 'type', title: 'Type', desc: 'Anime by type.', path: '/api/type/{name}', params: [{ name: 'name', type: 'string', desc: 'Type (tv, movie, ova, etc.)' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/type/tv"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/type/tv");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/type/tv")\nprint(r.json())' } },
+ { id: 'status', title: 'Status', desc: 'Anime by status.', path: '/api/status/{name}', params: [{ name: 'name', type: 'string', desc: 'Status (currently-airing, finished-airing)' }], code: { curl: 'curl "https://anikototvapi.vercel.app/api/status/currently-airing"', js: 'const res = await fetch("https://anikototvapi.vercel.app/api/status/currently-airing");\nconst data = await res.json();', python: 'import requests\nr = requests.get("https://anikototvapi.vercel.app/api/status/currently-airing")\nprint(r.json())' } },
];
const navEl = document.getElementById('explorerNav');
const panelEl = document.getElementById('explorerPanel');
diff --git a/public/og-image.svg b/public/og-image.svg
index 6adbfa4..b09fb05 100644
--- a/public/og-image.svg
+++ b/public/og-image.svg
@@ -24,7 +24,7 @@
AniKotoAPI
Free Anime Data REST API
-
anikoto.vercel.app/api
+
anikototvapi.vercel.app/api
No API Key Required
diff --git a/public/robots.txt b/public/robots.txt
index 7f5ec9c..6fc07a1 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -1,6 +1,6 @@
-# AniKotoAPI — https://anikoto.vercel.app
+# AniKotoAPI — https://anikototvapi.vercel.app
User-agent: *
Allow: /
Allow: /api
-Sitemap: https://anikoto.vercel.app/sitemap.xml
\ No newline at end of file
+Sitemap: https://anikototvapi.vercel.app/sitemap.xml
\ No newline at end of file
diff --git a/public/sitemap.xml b/public/sitemap.xml
index 020ff91..3a13852 100644
--- a/public/sitemap.xml
+++ b/public/sitemap.xml
@@ -1,25 +1,25 @@
- https://anikoto.vercel.app/
+ https://anikototvapi.vercel.app/
2026-06-08
weekly
1.0
- https://anikoto.vercel.app/api
+ https://anikototvapi.vercel.app/api
2026-06-08
daily
0.9
- https://anikoto.vercel.app/privacy.html
+ https://anikototvapi.vercel.app/privacy.html
2026-06-08
monthly
0.3
- https://anikoto.vercel.app/tos.html
+ https://anikototvapi.vercel.app/tos.html
2026-06-08
monthly
0.3