| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Anime-duo API Documentation</title> |
| <style> |
| @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;700;800&display=swap'); |
| |
| * { |
| margin: 0; |
| padding: 0; |
| box-sizing: border-box; |
| } |
| |
| :root { |
| --primary: #6a11cb; |
| --secondary: #2575fc; |
| --accent: #ff4b4b; |
| --bg-start: #0f0c29; |
| --bg-end: #302b63; |
| --bg-page: #24243e; |
| --glass-bg: rgba(255, 255, 255, 0.05); |
| --glass-border: rgba(255, 255, 255, 0.1); |
| --text-primary: #ffffff; |
| --text-secondary: #cbd5e1; |
| --shadow: 0 8px 32px rgba(0, 0, 0, 0.3); |
| } |
| |
| body { |
| font-family: 'Poppins', sans-serif; |
| background: linear-gradient(135deg, var(--bg-start) 0%, var(--bg-end) 100%); |
| color: var(--text-primary); |
| line-height: 1.6; |
| overflow-x: hidden; |
| min-height: 100vh; |
| } |
| |
| .floating-shapes { |
| position: fixed; |
| width: 100%; |
| height: 100%; |
| overflow: hidden; |
| z-index: 0; |
| pointer-events: none; |
| } |
| |
| .shape { |
| position: absolute; |
| opacity: 0.1; |
| animation: float 20s infinite ease-in-out; |
| } |
| |
| .shape:nth-child(1) { |
| top: 10%; |
| left: 10%; |
| width: 80px; |
| height: 80px; |
| background: var(--primary); |
| border-radius: 50%; |
| animation-delay: 0s; |
| } |
| |
| .shape:nth-child(2) { |
| top: 60%; |
| right: 10%; |
| width: 120px; |
| height: 120px; |
| background: var(--secondary); |
| border-radius: 30%; |
| animation-delay: 2s; |
| } |
| |
| .shape:nth-child(3) { |
| bottom: 20%; |
| left: 20%; |
| width: 100px; |
| height: 100px; |
| background: var(--accent); |
| border-radius: 20%; |
| animation-delay: 4s; |
| } |
| |
| @keyframes float { |
| 0%, 100% { |
| transform: translateY(0) rotate(0deg); |
| } |
| 50% { |
| transform: translateY(-30px) rotate(180deg); |
| } |
| } |
| |
| .container { |
| max-width: 1200px; |
| width: 100%; |
| margin: 0 auto; |
| padding: 20px; |
| position: relative; |
| z-index: 1; |
| } |
| |
| header { |
| text-align: center; |
| padding: 60px 20px; |
| animation: fadeInDown 0.8s ease; |
| } |
| |
| .logo { |
| font-size: 3.5rem; |
| font-weight: 800; |
| background: linear-gradient(135deg, var(--primary), var(--secondary)); |
| -webkit-background-clip: text; |
| -webkit-text-fill-color: transparent; |
| background-clip: text; |
| margin-bottom: 20px; |
| animation: bounce 2s infinite; |
| } |
| |
| @keyframes bounce { |
| 0%, 100% { |
| transform: translateY(0); |
| } |
| 50% { |
| transform: translateY(-10px); |
| } |
| } |
| |
| .subtitle { |
| font-size: 1.2rem; |
| color: var(--text-secondary); |
| margin-bottom: 30px; |
| } |
| |
| .badges { |
| display: flex; |
| gap: 10px; |
| justify-content: center; |
| flex-wrap: wrap; |
| margin-bottom: 30px; |
| } |
| |
| .badge { |
| background: var(--glass-bg); |
| backdrop-filter: blur(10px); |
| border: 1px solid var(--glass-border); |
| padding: 8px 16px; |
| border-radius: 20px; |
| font-size: 0.85rem; |
| transition: all 0.3s ease; |
| } |
| |
| .badge:hover { |
| transform: translateY(-2px); |
| box-shadow: var(--shadow); |
| } |
| |
| .disclaimer { |
| background: var(--glass-bg); |
| backdrop-filter: blur(10px); |
| border: 1px solid var(--glass-border); |
| border-radius: 20px; |
| padding: 30px; |
| margin: 40px 0; |
| box-shadow: var(--shadow); |
| animation: fadeInUp 0.8s ease; |
| } |
| |
| .disclaimer h2 { |
| color: var(--accent); |
| margin-bottom: 15px; |
| display: flex; |
| align-items: center; |
| gap: 10px; |
| } |
| |
| .disclaimer li { |
| margin-left: 30px; |
| margin-bottom: 10px; |
| } |
| |
| .nav { |
| background: var(--glass-bg); |
| backdrop-filter: blur(10px); |
| border: 1px solid var(--glass-border); |
| border-radius: 20px; |
| padding: 20px; |
| margin: 40px 0; |
| box-shadow: var(--shadow); |
| animation: slideInRight 0.8s ease; |
| } |
| |
| .nav h3 { |
| margin-bottom: 15px; |
| color: var(--primary); |
| } |
| |
| .nav-links { |
| display: grid; |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); |
| gap: 10px; |
| } |
| |
| .nav-link { |
| color: var(--text-secondary); |
| text-decoration: none; |
| padding: 10px 15px; |
| border-radius: 10px; |
| transition: all 0.3s ease; |
| display: block; |
| background: rgba(255, 255, 255, 0.02); |
| } |
| |
| .nav-link:hover { |
| background: var(--primary); |
| color: white; |
| transform: translateX(5px); |
| } |
| |
| .section { |
| background: var(--glass-bg); |
| backdrop-filter: blur(10px); |
| border: 1px solid var(--glass-border); |
| border-radius: 20px; |
| padding: 40px; |
| margin: 40px 0; |
| box-shadow: var(--shadow); |
| animation: fadeInUp 0.8s ease; |
| transition: all 0.3s ease; |
| } |
| |
| .section:hover { |
| transform: translateY(-5px); |
| box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4); |
| } |
| |
| .section h2 { |
| color: var(--primary); |
| margin-bottom: 20px; |
| font-size: 2rem; |
| display: flex; |
| align-items: center; |
| gap: 10px; |
| } |
| |
| .section h3 { |
| color: var(--secondary); |
| margin: 25px 0 15px; |
| font-size: 1.5rem; |
| } |
| |
| .endpoint { |
| background: rgba(106, 17, 203, 0.1); |
| border-left: 4px solid var(--primary); |
| padding: 15px; |
| border-radius: 10px; |
| margin: 15px 0; |
| font-family: 'Courier New', monospace; |
| overflow-x: auto; |
| } |
| |
| .code-block { |
| background: rgba(0, 0, 0, 0.3); |
| border-radius: 10px; |
| padding: 20px; |
| margin: 15px 0; |
| overflow-x: auto; |
| position: relative; |
| } |
| |
| .code-block pre { |
| margin: 0; |
| color: var(--text-secondary); |
| font-family: 'Courier New', monospace; |
| font-size: 0.9rem; |
| } |
| |
| .copy-btn { |
| position: absolute; |
| top: 10px; |
| right: 10px; |
| background: var(--primary); |
| border: none; |
| color: white; |
| padding: 8px 16px; |
| border-radius: 8px; |
| cursor: pointer; |
| transition: all 0.3s ease; |
| font-size: 0.85rem; |
| } |
| |
| .copy-btn:hover { |
| background: var(--secondary); |
| transform: scale(1.05); |
| } |
| |
| table { |
| width: 100%; |
| border-collapse: collapse; |
| margin: 20px 0; |
| overflow: hidden; |
| border-radius: 10px; |
| } |
| |
| th, td { |
| padding: 15px; |
| text-align: left; |
| border-bottom: 1px solid var(--glass-border); |
| } |
| |
| th { |
| background: rgba(106, 17, 203, 0.2); |
| color: var(--primary); |
| font-weight: 600; |
| } |
| |
| tr { |
| transition: all 0.3s ease; |
| } |
| |
| tr:hover { |
| background: rgba(255, 255, 255, 0.05); |
| } |
| |
| .category-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); |
| gap: 15px; |
| margin: 20px 0; |
| } |
| |
| .category-item { |
| background: rgba(37, 117, 252, 0.1); |
| padding: 15px; |
| border-radius: 10px; |
| border: 1px solid var(--secondary); |
| transition: all 0.3s ease; |
| text-align: center; |
| } |
| |
| .category-item:hover { |
| background: rgba(37, 117, 252, 0.2); |
| transform: scale(1.05); |
| } |
| |
| .btn { |
| background: var(--primary); |
| color: white; |
| padding: 12px 30px; |
| border: none; |
| border-radius: 30px; |
| font-size: 1rem; |
| font-weight: 600; |
| cursor: pointer; |
| transition: all 0.3s ease; |
| display: inline-block; |
| text-decoration: none; |
| margin: 10px; |
| } |
| |
| .btn:hover { |
| background: var(--secondary); |
| transform: translateY(-2px); |
| box-shadow: 0 8px 20px rgba(37, 117, 252, 0.3); |
| } |
| |
| .btn-secondary { |
| background: var(--secondary); |
| } |
| |
| .btn-secondary:hover { |
| background: var(--primary); |
| box-shadow: 0 8px 20px rgba(106, 17, 203, 0.3); |
| } |
| |
| footer { |
| text-align: center; |
| padding: 40px 20px; |
| margin-top: 60px; |
| border-top: 1px solid var(--glass-border); |
| } |
| |
| footer a { |
| color: var(--primary); |
| text-decoration: none; |
| transition: all 0.3s ease; |
| } |
| |
| footer a:hover { |
| color: var(--secondary); |
| } |
| |
| .method-badge { |
| display: inline-block; |
| padding: 4px 12px; |
| border-radius: 15px; |
| font-size: 0.8rem; |
| font-weight: 600; |
| margin-right: 10px; |
| } |
| |
| .method-get { |
| background: rgba(106, 17, 203, 0.2); |
| color: var(--primary); |
| } |
| |
| @keyframes fadeInDown { |
| from { |
| opacity: 0; |
| transform: translateY(-30px); |
| } |
| to { |
| opacity: 1; |
| transform: translateY(0); |
| } |
| } |
| |
| @keyframes fadeInUp { |
| from { |
| opacity: 0; |
| transform: translateY(30px); |
| } |
| to { |
| opacity: 1; |
| transform: translateY(0); |
| } |
| } |
| |
| @keyframes slideInRight { |
| from { |
| opacity: 0; |
| transform: translateX(30px); |
| } |
| to { |
| opacity: 1; |
| transform: translateX(0); |
| } |
| } |
| |
| @media (max-width: 768px) { |
| .logo { |
| font-size: 2.5rem; |
| } |
| |
| .section { |
| padding: 20px; |
| } |
| |
| .nav-links { |
| grid-template-columns: 1fr; |
| } |
| |
| table { |
| font-size: 0.85rem; |
| } |
| |
| th, td { |
| padding: 10px; |
| } |
| } |
| |
| .scroll-top { |
| position: fixed; |
| bottom: 30px; |
| right: 30px; |
| background: var(--primary); |
| color: white; |
| width: 50px; |
| height: 50px; |
| border-radius: 50%; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| cursor: pointer; |
| opacity: 0; |
| transition: all 0.3s ease; |
| z-index: 1000; |
| box-shadow: var(--shadow); |
| } |
| |
| .scroll-top.visible { |
| opacity: 1; |
| } |
| |
| .scroll-top:hover { |
| background: var(--secondary); |
| transform: translateY(-5px); |
| } |
| </style> |
| </head> |
| <body> |
| <div class="floating-shapes"> |
| <div class="shape"></div> |
| <div class="shape"></div> |
| <div class="shape"></div> |
| </div> |
|
|
| <div class="container"> |
| <header> |
| <h1 class="logo">π Anime-duo</h1> |
| <p class="subtitle">RESTful API for Anime Streaming - Educational Purposes Only</p> |
| <div class="badges"> |
| <span class="badge">Node.js</span> |
| <span class="badge">Version 1.0.0</span> |
| <span class="badge">REST API</span> |
| <span class="badge">Open Source</span> |
| </div> |
| <div> |
| <a href="https://zenime.site" target="_blank" class="btn">π Live Demo</a> |
| <a href="https://github.com/itzzzme/anime-api" target="_blank" class="btn btn-secondary">β GitHub</a> |
| </div> |
| </header> |
|
|
| <div class="disclaimer"> |
| <h2>β οΈ Disclaimer</h2> |
| <ol> |
| <li>This API does not store any files, it only links to media hosted on 3rd party services.</li> |
| <li>This API is explicitly made for educational purposes only and not for commercial usage. This repo will not be responsible for any misuse of it.</li> |
| </ol> |
| </div> |
|
|
| <nav class="nav" id="nav"> |
| <h3>π Quick Navigation</h3> |
| <div class="nav-links"> |
| <a href="#home-info" class="nav-link">Home Info</a> |
| <a href="#top-ten" class="nav-link">Top 10 Anime</a> |
| <a href="#anime-info" class="nav-link">Anime Info</a> |
| <a href="#search" class="nav-link">Search</a> |
| <a href="#categories" class="nav-link">Categories</a> |
| <a href="#episodes" class="nav-link">Episodes</a> |
| <a href="#streaming" class="nav-link">Streaming</a> |
| <a href="#characters" class="nav-link">Characters</a> |
| </div> |
| </nav> |
|
|
|
|
|
|
| <section class="section" id="home-info"> |
| <h2>π GET Home Info</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/ |
| </div> |
| <p>Retrieve comprehensive home page information including spotlights, trending anime, schedules, and more.</p> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/"); |
| console.log(resp.data);</pre> |
| </div> |
|
|
| <h3>Response Structure</h3> |
| <p>Returns: spotlights, trending, today's schedule, topAiring, mostPopular, mostFavorite, latestCompleted, latestEpisode, and genres.</p> |
| </section> |
|
|
| <section class="section" id="top-ten"> |
| <h2>π₯ GET Top 10 Anime</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/top-ten |
| </div> |
| <p>Get the top 10 anime for today, this week, and this month.</p> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/top-ten"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="top-search"> |
| <h2>π GET Top Search</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/top-search |
| </div> |
| <p>Retrieve the most searched anime titles.</p> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/top-search"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="anime-info"> |
| <h2>πΊ GET Anime Info</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/info?id={anime-id} |
| </div> |
|
|
| <h3>Parameters</h3> |
| <table> |
| <thead> |
| <tr> |
| <th>Parameter</th> |
| <th>Type</th> |
| <th>Description</th> |
| <th>Required</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>id</td> |
| <td>string</td> |
| <td>Anime ID</td> |
| <td>β
Yes</td> |
| </tr> |
| </tbody> |
| </table> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/info?id=one-piece-100"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="random"> |
| <h2>π² GET Random Anime</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/random |
| </div> |
| <p>Get information about a random anime with related and recommended data.</p> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/random"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="categories"> |
| <h2>π GET Categories</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/{category}?page={number} |
| </div> |
|
|
| <h3>Parameters</h3> |
| <table> |
| <thead> |
| <tr> |
| <th>Parameter</th> |
| <th>Type</th> |
| <th>Description</th> |
| <th>Required</th> |
| <th>Default</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>category</td> |
| <td>string</td> |
| <td>Category name</td> |
| <td>β
Yes</td> |
| <td>-</td> |
| </tr> |
| <tr> |
| <td>page</td> |
| <td>number</td> |
| <td>Page number</td> |
| <td>β No</td> |
| <td>1</td> |
| </tr> |
| </tbody> |
| </table> |
|
|
| <h3>Available Categories</h3> |
| <div class="category-grid"> |
| <div class="category-item">top-airing</div> |
| <div class="category-item">most-popular</div> |
| <div class="category-item">most-favorite</div> |
| <div class="category-item">completed</div> |
| <div class="category-item">recently-updated</div> |
| <div class="category-item">recently-added</div> |
| <div class="category-item">top-upcoming</div> |
| <div class="category-item">subbed-anime</div> |
| <div class="category-item">dubbed-anime</div> |
| <div class="category-item">movie</div> |
| <div class="category-item">tv</div> |
| <div class="category-item">ova</div> |
| <div class="category-item">ona</div> |
| <div class="category-item">special</div> |
| </div> |
|
|
| <h3>Genres</h3> |
| <div class="category-grid"> |
| <div class="category-item">genre/action</div> |
| <div class="category-item">genre/adventure</div> |
| <div class="category-item">genre/comedy</div> |
| <div class="category-item">genre/drama</div> |
| <div class="category-item">genre/fantasy</div> |
| <div class="category-item">genre/horror</div> |
| <div class="category-item">genre/isekai</div> |
| <div class="category-item">genre/romance</div> |
| <div class="category-item">genre/sci-fi</div> |
| <div class="category-item">genre/sports</div> |
| <div class="category-item">genre/supernatural</div> |
| <div class="category-item">And many more...</div> |
| </div> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/most-popular?page=1"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="producer"> |
| <h2>π¬ GET Producer/Studio Anime</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/producer/{producer-name}?page={number} |
| </div> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/producer/ufotable?page=1"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="search"> |
| <h2>π GET Search Results</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/search?keyword={search-term} |
| </div> |
|
|
| <h3>Parameters</h3> |
| <table> |
| <thead> |
| <tr> |
| <th>Parameter</th> |
| <th>Type</th> |
| <th>Description</th> |
| <th>Required</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>keyword</td> |
| <td>string</td> |
| <td>Search keyword</td> |
| <td>β
Yes</td> |
| </tr> |
| </tbody> |
| </table> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/search?keyword=one%20punch%20man"); |
| console.log(resp.data);</pre> |
| </div> |
|
|
| <h3>Search Suggestions</h3> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/search/suggest?keyword={search-term} |
| </div> |
| <p>Get autocomplete suggestions for search queries.</p> |
| </section> |
|
|
| <section class="section" id="filter"> |
| <h2>π― GET Filter Anime</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/filter |
| </div> |
|
|
| <h3>Parameters</h3> |
| <table> |
| <thead> |
| <tr> |
| <th>Parameter</th> |
| <th>Type</th> |
| <th>Description</th> |
| <th>Default</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>type</td> |
| <td>string</td> |
| <td>Type (movie, tv, etc.)</td> |
| <td>ALL</td> |
| </tr> |
| <tr> |
| <td>status</td> |
| <td>string</td> |
| <td>Status (finished, currently_airing)</td> |
| <td>ALL</td> |
| </tr> |
| <tr> |
| <td>rated</td> |
| <td>string</td> |
| <td>Rating (G, PG, etc.)</td> |
| <td>ALL</td> |
| </tr> |
| <tr> |
| <td>score</td> |
| <td>string</td> |
| <td>Score (1-10)</td> |
| <td>ALL</td> |
| </tr> |
| <tr> |
| <td>season</td> |
| <td>string</td> |
| <td>Season (spring, summer, etc.)</td> |
| <td>ALL</td> |
| </tr> |
| <tr> |
| <td>language</td> |
| <td>string</td> |
| <td>Language (sub, dub)</td> |
| <td>ALL</td> |
| </tr> |
| <tr> |
| <td>genres</td> |
| <td>string</td> |
| <td>Comma-separated genres</td> |
| <td>ALL</td> |
| </tr> |
| <tr> |
| <td>sort</td> |
| <td>string</td> |
| <td>Sort method</td> |
| <td>DEFAULT</td> |
| </tr> |
| <tr> |
| <td>page</td> |
| <td>number</td> |
| <td>Page number</td> |
| <td>1</td> |
| </tr> |
| </tbody> |
| </table> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/filter?type=2&status=1&page=1"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="schedule"> |
| <h2>π
GET Schedule</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/schedule?date={YYYY-MM-DD} |
| </div> |
| <p>Get the schedule of upcoming anime for a specific date.</p> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/schedule?date=2024-09-23"); |
| console.log(resp.data);</pre> |
| </div> |
|
|
| <h3>Next Episode Schedule</h3> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/schedule/{anime-id} |
| </div> |
| <p>Get the schedule for the next episode of a specific anime.</p> |
| </section> |
|
|
| <section class="section" id="episodes"> |
| <h2>πΊ GET Episodes</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/episodes/{anime-id} |
| </div> |
| <p>Retrieve the complete episode list for an anime.</p> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/episodes/one-piece-100"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="servers"> |
| <h2>π₯οΈ GET Available Servers</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/servers/{anime-id}?ep={episode-id} |
| </div> |
| <p>Get all available streaming servers for an anime episode.</p> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/servers/one-piece-100?ep=12345"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="streaming"> |
| <h2>βΆοΈ GET Streaming Info</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/stream?id={episode-id}&server={server-name}&type={sub/dub} |
| </div> |
|
|
| <h3>Parameters</h3> |
| <table> |
| <thead> |
| <tr> |
| <th>Parameter</th> |
| <th>Type</th> |
| <th>Description</th> |
| <th>Required</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>id</td> |
| <td>string</td> |
| <td>Episode ID</td> |
| <td>β
Yes</td> |
| </tr> |
| <tr> |
| <td>server</td> |
| <td>string</td> |
| <td>Server name</td> |
| <td>β
Yes</td> |
| </tr> |
| <tr> |
| <td>type</td> |
| <td>string</td> |
| <td>sub or dub</td> |
| <td>β
Yes</td> |
| </tr> |
| </tbody> |
| </table> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/stream?id=one-piece-100?ep=107257&server=hd-1&type=sub"); |
| console.log(resp.data);</pre> |
| </div> |
|
|
| <h3>Fallback Streaming</h3> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/stream/fallback?id={episode-id}&server={server-name}&type={sub/dub} |
| </div> |
| <p>Alternative streaming source if primary fails.</p> |
| </section> |
|
|
| <section class="section" id="characters"> |
| <h2>π₯ GET Characters</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/character/list/{anime-id} |
| </div> |
| <p>Get the list of characters and voice actors for an anime.</p> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/character/list/one-piece-100"); |
| console.log(resp.data);</pre> |
| </div> |
|
|
| <h3>Character Details</h3> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/character/{character-id} |
| </div> |
| <p>Get detailed information about a specific character.</p> |
|
|
| <h3>Voice Actor Details</h3> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/actors/{actor-id} |
| </div> |
| <p>Get detailed information about a voice actor.</p> |
| </section> |
|
|
| <section class="section" id="qtip"> |
| <h2>π‘ GET Qtip Info</h2> |
| <div class="endpoint"> |
| <span class="method-badge method-get">GET</span> /api/qtip/{anime-data-id} |
| </div> |
| <p>Get quick tooltip information for an anime.</p> |
|
|
| <h3>Example Request</h3> |
| <div class="code-block"> |
| <button class="copy-btn" onclick="copyCode(this)">Copy</button> |
| <pre>import axios from "axios"; |
| const resp = await axios.get("/api/qtip/3365"); |
| console.log(resp.data);</pre> |
| </div> |
| </section> |
|
|
| <section class="section" id="contribute"> |
| <h2>π€ Contributing</h2> |
| <h3>Pull Requests</h3> |
| <p>Pull requests are welcomed that address bug fixes, improvements, or new features.</p> |
| <ul> |
| <li>Fork the repository and create a new branch for your changes</li> |
| <li>Ensure your code follows our coding standards</li> |
| <li>Include tests if applicable</li> |
| <li>Describe your changes clearly in the pull request</li> |
| </ul> |
|
|
| <h3>Reporting Issues</h3> |
| <p>If you discover any issues or have suggestions for improvement, please open an issue on GitHub.</p> |
|
|
| <h3>Support</h3> |
| <p>If you like the project, feel free to drop a star β¨. Your appreciation means a lot!</p> |
| </section> |
|
|
| <footer> |
| <p>Made with π by Daemon</p> |
| <p style="margin-top: 10px; color: var(--text-secondary);"> |
| <a href="https://github.com/itzzzme/anime-api" target="_blank">GitHub Repository</a> | |
| <a href="https://zenime.site" target="_blank">Live Demo</a> |
| </p> |
| </footer> |
| </div> |
|
|
| <div class="scroll-top" id="scrollTop" onclick="scrollToTop()"> |
| β |
| </div> |
|
|
| <script> |
| function copyCode(button) { |
| const codeBlock = button.nextElementSibling; |
| const text = codeBlock.textContent; |
| |
| navigator.clipboard.writeText(text).then(() => { |
| button.textContent = 'Copied!'; |
| setTimeout(() => { |
| button.textContent = 'Copy'; |
| }, 2000); |
| }); |
| } |
| |
| const scrollTopBtn = document.getElementById('scrollTop'); |
| |
| window.addEventListener('scroll', () => { |
| if (window.pageYOffset > 300) { |
| scrollTopBtn.classList.add('visible'); |
| } else { |
| scrollTopBtn.classList.remove('visible'); |
| } |
| }); |
| |
| function scrollToTop() { |
| window.scrollTo({ |
| top: 0, |
| behavior: 'smooth' |
| }); |
| } |
| |
| document.querySelectorAll('a[href^="#"]').forEach(anchor => { |
| anchor.addEventListener('click', function (e) { |
| e.preventDefault(); |
| const target = document.querySelector(this.getAttribute('href')); |
| if (target) { |
| target.scrollIntoView({ |
| behavior: 'smooth', |
| block: 'start' |
| }); |
| } |
| }); |
| }); |
| |
| const sections = document.querySelectorAll('.section'); |
| const observerOptions = { |
| threshold: 0.1, |
| rootMargin: '0px 0px -100px 0px' |
| }; |
| |
| const observer = new IntersectionObserver((entries) => { |
| entries.forEach(entry => { |
| if (entry.isIntersecting) { |
| entry.target.style.opacity = '1'; |
| entry.target.style.transform = 'translateY(0)'; |
| } |
| }); |
| }, observerOptions); |
| |
| sections.forEach(section => { |
| section.style.opacity = '0'; |
| section.style.transform = 'translateY(20px)'; |
| observer.observe(section); |
| }); |
| </script> |
| </body> |
| </html> |