mirror of
https://github.com/Shineii86/MiruroAPI.git
synced 2026-10-22 10:15:10 +00:00
v1.3.0: Full landing page upgrade + feature parity with AniKotoAPI
- Full index.html rewrite with AniKotoAPI-style features: * Canvas particle effects (cyan particles) * Scroll-reveal animations (IntersectionObserver) * Animated stat counters (count up on scroll) * Infinite scrolling marquee (8 feature badges) * Live interactive API console (5 presets: Search, Trending, Episodes, Info, Health) * Sidebar endpoint explorer (16 endpoints, multi-language tabs: cURL/JS/Python) * 4 interactive playground cards (Search, Info, Episodes, Trending) * Custom scrollbar, JetBrains Mono font * 4-column grid footer with API/Resources/Legal * Fixed header with scroll-aware glass blur * Ambient orb gradient animations * CTA section with gradient overlay - Added public/404.html (glitch animation error page) - Added public/manifest.json (PWA, theme: #38bdf8) - Added public/robots.txt (Allow /, Disallow /api) - Added public/sitemap.xml (4 URLs) - Added public/tos.html (13 sections) - Added public/privacy.html (8 sections) - Added .env.example, CONTRIBUTING.md, LICENSE, render.yaml, test.js - Added docs/ (5 files: index, endpoints, streaming, examples, architecture) - Updated server.js: clean URL routes (/tos, /privacy), 404.html fallback - Updated package.json: devDependencies nodemon, repository, dev script - All branding: AniKotoAPI → MiruroAPI, cyan color scheme (#38bdf8)
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>404 — MiruroAPI</title>
|
||||
<meta name="theme-color" content="#0A0A12" />
|
||||
<link rel="icon" type="image/svg+xml" href="/icon-dark.svg" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" />
|
||||
<style>
|
||||
:root{--bg:#0A0A12;--text:#E2E8F0;--text2:#94A3B8;--text3:#64748B;--purple:#A855F7;--pink:#EC4899;--indigo:#6366F1;--green:#22C55E;--red:#EF4444;--border:rgba(255,255,255,.06);--glass:rgba(255,255,255,.03)}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;display:flex;align-items:center;justify-content:center;overflow:hidden}
|
||||
.ambient{position:fixed;inset:0;pointer-events:none}
|
||||
.orb{position:absolute;border-radius:50%;filter:blur(120px);opacity:.1}
|
||||
.orb-1{width:500px;height:500px;background:var(--purple);top:-150px;left:-100px;animation:drift 24s ease-in-out infinite}
|
||||
.orb-2{width:400px;height:400px;background:var(--pink);bottom:-100px;right:-80px;animation:drift 20s ease-in-out infinite reverse}
|
||||
@keyframes drift{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(40px,-30px) scale(1.08)}}
|
||||
.container{position:relative;z-index:1;text-align:center;padding:40px;max-width:560px}
|
||||
.code{font-size:clamp(6rem,18vw,14rem);font-weight:900;line-height:1;letter-spacing:-.06em;background:linear-gradient(135deg,var(--purple),var(--pink),var(--indigo));-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:float 4s ease-in-out infinite}
|
||||
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
|
||||
.title{font-size:1.4rem;font-weight:700;margin:16px 0 8px}
|
||||
.desc{color:var(--text2);font-size:.95rem;margin-bottom:32px;line-height:1.7}
|
||||
.actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
|
||||
.btn{display:inline-flex;align-items:center;gap:8px;padding:12px 24px;border-radius:10px;font-size:.88rem;font-weight:600;text-decoration:none;border:none;cursor:pointer;transition:all .25s;font-family:inherit}
|
||||
.btn svg{width:16px;height:16px}
|
||||
.btn-primary{background:linear-gradient(135deg,var(--purple),var(--pink));color:#fff;box-shadow:0 4px 24px rgba(168,85,247,.3)}
|
||||
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 8px 32px rgba(168,85,247,.4)}
|
||||
.btn-ghost{background:var(--glass);border:1px solid rgba(255,255,255,.1);color:var(--text)}
|
||||
.btn-ghost:hover{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.15)}
|
||||
.glitch{position:relative;display:inline-block}
|
||||
.glitch::before,.glitch::after{content:attr(data-text);position:absolute;top:0;left:0;width:100%;height:100%;background:var(--bg)}
|
||||
.glitch::before{left:2px;text-shadow:-2px 0 var(--pink);clip-path:inset(0 0 0 0);animation:glitch-1 2s infinite linear alternate-reverse}
|
||||
.glitch::after{left:-2px;text-shadow:2px 0 var(--indigo);clip-path:inset(0 0 0 0);animation:glitch-2 3s infinite linear alternate-reverse}
|
||||
@keyframes glitch-1{0%{clip-path:inset(40% 0 61% 0)}20%{clip-path:inset(92% 0 1% 0)}40%{clip-path:inset(43% 0 1% 0)}60%{clip-path:inset(25% 0 58% 0)}80%{clip-path:inset(54% 0 7% 0)}100%{clip-path:inset(58% 0 43% 0)}}
|
||||
@keyframes glitch-2{0%{clip-path:inset(65% 0 13% 0)}20%{clip-path:inset(79% 0 2% 0)}40%{clip-path:inset(48% 0 38% 0)}60%{clip-path:inset(33% 0 2% 0)}80%{clip-path:inset(16% 0 62% 0)}100%{clip-path:inset(27% 0 42% 0)}}
|
||||
.status-line{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:24px;color:var(--text3);font-size:.78rem;font-family:'JetBrains Mono',monospace}
|
||||
.status-dot{width:6px;height:6px;border-radius:50%;background:var(--red);animation:pulse 1.5s infinite}
|
||||
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}
|
||||
.scanline{position:fixed;inset:0;z-index:0;pointer-events:none;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,.03) 2px,rgba(0,0,0,.03) 4px)}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="ambient"><div class="orb orb-1"></div><div class="orb orb-2"></div></div>
|
||||
<div class="scanline"></div>
|
||||
<div class="container">
|
||||
<div class="code"><span class="glitch" data-text="404">404</span></div>
|
||||
<div class="title">Endpoint Not Found</div>
|
||||
<div class="desc">The path you requested doesn't exist in the MiruroAPI.<br/>Check the documentation or try a valid endpoint.</div>
|
||||
<div class="actions">
|
||||
<a href="/" class="btn btn-primary">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
|
||||
Home
|
||||
</a>
|
||||
<a href="/api/health" class="btn btn-ghost">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>
|
||||
API Status
|
||||
</a>
|
||||
<a href="https://github.com/Shineii86/MiruroAPI#readme" target="_blank" class="btn btn-ghost">
|
||||
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
|
||||
Docs
|
||||
</a>
|
||||
</div>
|
||||
<div class="status-line"><span class="status-dot"></span> HTTP 404 · Not Found</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+775
-507
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "MiruroAPI",
|
||||
"short_name": "MiruroAPI",
|
||||
"description": "Free REST API for anime streaming data. 18 endpoints, 12 providers, M3U8 URLs. No API key required.",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"id": "/",
|
||||
"scope": "/",
|
||||
"lang": "en",
|
||||
"orientation": "any",
|
||||
"background_color": "#0A0A12",
|
||||
"theme_color": "#A855F7",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/icon-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/icon-dark.svg",
|
||||
"sizes": "any",
|
||||
"type": "image/svg+xml",
|
||||
"purpose": "any"
|
||||
}
|
||||
],
|
||||
"categories": ["developer", "entertainment"]
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="description" content="Privacy Policy for MiruroAPI. We do not collect, store, or share personal data." />
|
||||
<meta property="og:title" content="Privacy Policy — MiruroAPI" />
|
||||
<meta property="og:description" content="Privacy Policy for MiruroAPI. We do not collect, store, or share personal data." />
|
||||
<meta property="og:image" content="https://mirurotvapi.vercel.app/og-image.png" />
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Privacy Policy — MiruroAPI</title>
|
||||
<meta name="theme-color" content="#0A0A12" />
|
||||
<link rel="icon" type="image/svg+xml" href="/icon-dark.svg" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
||||
<style>
|
||||
:root{--bg:#0A0A12;--bg2:#111120;--text:#E2E8F0;--text2:#94A3B8;--text3:#64748B;--purple:#A855F7;--pink:#EC4899;--border:rgba(255,255,255,.06);--glass:rgba(255,255,255,.03)}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.8}
|
||||
.ambient{position:fixed;inset:0;pointer-events:none;z-index:0}
|
||||
.orb{position:absolute;border-radius:50%;filter:blur(120px);opacity:.08}
|
||||
.orb-1{width:500px;height:500px;background:var(--purple);top:-150px;left:-100px}
|
||||
.orb-2{width:400px;height:400px;background:var(--pink);bottom:-100px;right:-80px}
|
||||
header{position:sticky;top:0;z-index:100;background:rgba(10,10,18,.88);backdrop-filter:blur(24px);border-bottom:1px solid var(--border);padding:0 24px}
|
||||
.header-inner{max-width:720px;margin:0 auto;display:flex;align-items:center;height:60px}
|
||||
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--text);font-weight:700;font-size:1rem}
|
||||
.logo span{background:linear-gradient(135deg,var(--purple),var(--pink));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
|
||||
.content{position:relative;z-index:1;max-width:720px;margin:0 auto;padding:60px 24px 80px}
|
||||
h1{font-size:2rem;font-weight:800;letter-spacing:-.03em;margin-bottom:8px}
|
||||
.updated{color:var(--text3);font-size:.82rem;margin-bottom:40px;font-family:'JetBrains Mono',monospace}
|
||||
h2{font-size:1.2rem;font-weight:700;margin:32px 0 12px;padding-top:16px;border-top:1px solid var(--border)}
|
||||
h2:first-of-type{border-top:none;padding-top:0}
|
||||
p{color:var(--text2);font-size:.92rem;margin-bottom:16px}
|
||||
ul{color:var(--text2);font-size:.92rem;margin:0 0 16px 20px}
|
||||
li{margin-bottom:6px}
|
||||
code{font-family:'JetBrains Mono',monospace;font-size:.82rem;background:rgba(168,85,247,.1);color:var(--purple);padding:2px 6px;border-radius:4px}
|
||||
a{color:var(--purple);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
footer{position:relative;z-index:1;border-top:1px solid var(--border);padding:24px;text-align:center;color:var(--text3);font-size:.75rem}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="ambient"><div class="orb orb-1"></div><div class="orb orb-2"></div></div>
|
||||
<header><div class="header-inner"><a href="/" class="logo">📺 <span>Miruro</span>API</a></div></header>
|
||||
<div class="content">
|
||||
<h1>Privacy Policy</h1>
|
||||
<div class="updated">Last updated: 2026-06-09</div>
|
||||
|
||||
<h2>1. Overview</h2>
|
||||
<p>MiruroAPI ("the Service") is a free, open-source REST API that provides anime data by aggregating information from AniList GraphQL and Miruro streaming providers. This Privacy Policy explains how we handle data when you use the Service.</p>
|
||||
|
||||
<h2>2. Data We Collect</h2>
|
||||
<p>The Service is designed to be <strong>stateless and privacy-preserving</strong>. We do not collect, store, or process any personal data from API consumers.</p>
|
||||
<ul>
|
||||
<li><strong>No user accounts</strong> — The API requires no authentication, registration, or API keys.</li>
|
||||
<li><strong>No cookies</strong> — We do not set tracking cookies on API responses.</li>
|
||||
<li><strong>No analytics</strong> — We do not use Google Analytics, Mixpanel, or any third-party analytics on API endpoints.</li>
|
||||
<li><strong>No logging of personal data</strong> — Server logs may contain IP addresses and request paths (standard Vercel/Node.js behavior), but these are not stored, sold, or shared.</li>
|
||||
</ul>
|
||||
|
||||
<h2>3. Third-Party Data Sources</h2>
|
||||
<p>The Service fetches data from <code>graphql.anilist.co</code> (AniList) and <code>miruro.tv</code> (streaming providers). This data (anime titles, descriptions, images, episode information) belongs to the respective content owners. We do not claim ownership of this data.</p>
|
||||
<p>If you are a content owner and wish to have your data removed from this API, please open an issue on our <a href="https://github.com/Shineii86/MiruroAPI" target="_blank" rel="noopener noreferrer">GitHub repository</a>.</p>
|
||||
|
||||
<h2>4. Data Storage</h2>
|
||||
<p>The Service uses a simple in-memory cache (1-5 minute TTL) to reduce repeated API calls. This cache is:</p>
|
||||
<ul>
|
||||
<li>Purely temporary and reset on every server restart</li>
|
||||
<li>Not persisted to any database</li>
|
||||
<li>Not associated with any user identity</li>
|
||||
</ul>
|
||||
|
||||
<h2>5. Data Sharing</h2>
|
||||
<p>We do not sell, trade, or share any data with third parties. The API is provided as-is for educational and development purposes.</p>
|
||||
|
||||
<h2>6. Children's Privacy</h2>
|
||||
<p>The Service is not directed at children under 13. We do not knowingly collect information from children under 13.</p>
|
||||
|
||||
<h2>7. Changes to This Policy</h2>
|
||||
<p>We may update this Privacy Policy from time to time. Changes will be posted on this page with an updated "Last updated" date.</p>
|
||||
|
||||
<h2>8. Contact</h2>
|
||||
<p>For questions about this Privacy Policy, open an issue at <a href="https://github.com/Shineii86/MiruroAPI/issues" target="_blank" rel="noopener noreferrer">github.com/Shineii86/MiruroAPI/issues</a>.</p>
|
||||
</div>
|
||||
<footer>© 2026 MiruroAPI · <a href="/" style="color:var(--purple)">Home</a> · <a href="/tos" style="color:var(--purple)">Terms</a></footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
# MiruroAPI — https://mirurotvapi.vercel.app
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /api
|
||||
|
||||
Sitemap: https://mirurotvapi.vercel.app/sitemap.xml
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://mirurotvapi.vercel.app/</loc>
|
||||
<lastmod>2026-06-09</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mirurotvapi.vercel.app/api/health</loc>
|
||||
<lastmod>2026-06-09</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
<priority>0.9</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mirurotvapi.vercel.app/privacy</loc>
|
||||
<lastmod>2026-06-09</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.3</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mirurotvapi.vercel.app/tos</loc>
|
||||
<lastmod>2026-06-09</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.3</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
@@ -0,0 +1,99 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="description" content="Terms of Service for MiruroAPI. Acceptable use, rate limits, liability, and DMCA policy." />
|
||||
<meta property="og:title" content="Terms of Service — MiruroAPI" />
|
||||
<meta property="og:description" content="Terms of Service for MiruroAPI. Acceptable use, rate limits, liability, and DMCA policy." />
|
||||
<meta property="og:image" content="https://mirurotvapi.vercel.app/og-image.png" />
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Terms of Service — MiruroAPI</title>
|
||||
<meta name="theme-color" content="#0A0A12" />
|
||||
<link rel="icon" type="image/svg+xml" href="/icon-dark.svg" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
||||
<style>
|
||||
:root{--bg:#0A0A12;--bg2:#111120;--text:#E2E8F0;--text2:#94A3B8;--text3:#64748B;--purple:#A855F7;--pink:#EC4899;--border:rgba(255,255,255,.06);--glass:rgba(255,255,255,.03)}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.8}
|
||||
.ambient{position:fixed;inset:0;pointer-events:none;z-index:0}
|
||||
.orb{position:absolute;border-radius:50%;filter:blur(120px);opacity:.08}
|
||||
.orb-1{width:500px;height:500px;background:var(--purple);top:-150px;left:-100px}
|
||||
.orb-2{width:400px;height:400px;background:var(--pink);bottom:-100px;right:-80px}
|
||||
header{position:sticky;top:0;z-index:100;background:rgba(10,10,18,.88);backdrop-filter:blur(24px);border-bottom:1px solid var(--border);padding:0 24px}
|
||||
.header-inner{max-width:720px;margin:0 auto;display:flex;align-items:center;height:60px}
|
||||
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--text);font-weight:700;font-size:1rem}
|
||||
.logo span{background:linear-gradient(135deg,var(--purple),var(--pink));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
|
||||
.content{position:relative;z-index:1;max-width:720px;margin:0 auto;padding:60px 24px 80px}
|
||||
h1{font-size:2rem;font-weight:800;letter-spacing:-.03em;margin-bottom:8px}
|
||||
.updated{color:var(--text3);font-size:.82rem;margin-bottom:40px;font-family:'JetBrains Mono',monospace}
|
||||
h2{font-size:1.2rem;font-weight:700;margin:32px 0 12px;padding-top:16px;border-top:1px solid var(--border)}
|
||||
h2:first-of-type{border-top:none;padding-top:0}
|
||||
p{color:var(--text2);font-size:.92rem;margin-bottom:16px}
|
||||
ul{color:var(--text2);font-size:.92rem;margin:0 0 16px 20px}
|
||||
li{margin-bottom:6px}
|
||||
code{font-family:'JetBrains Mono',monospace;font-size:.82rem;background:rgba(168,85,247,.1);color:var(--purple);padding:2px 6px;border-radius:4px}
|
||||
a{color:var(--purple);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
strong{color:var(--text)}
|
||||
footer{position:relative;z-index:1;border-top:1px solid var(--border);padding:24px;text-align:center;color:var(--text3);font-size:.75rem}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="ambient"><div class="orb orb-1"></div><div class="orb orb-2"></div></div>
|
||||
<header><div class="header-inner"><a href="/" class="logo">📺 <span>Miruro</span>API</a></div></header>
|
||||
<div class="content">
|
||||
<h1>Terms of Service</h1>
|
||||
<div class="updated">Last updated: 2026-06-09</div>
|
||||
|
||||
<h2>1. Acceptance of Terms</h2>
|
||||
<p>By accessing or using MiruroAPI ("the Service"), you agree to be bound by these Terms of Service. If you do not agree, do not use the Service.</p>
|
||||
|
||||
<h2>2. Description of Service</h2>
|
||||
<p>MiruroAPI is a free, open-source REST API that provides anime data by aggregating information from AniList GraphQL and Miruro streaming providers. The Service is provided "as is" without warranties of any kind.</p>
|
||||
|
||||
<h2>3. Educational Purpose</h2>
|
||||
<p>The Service is built and maintained for <strong>educational and learning purposes only</strong>. It demonstrates API design, GraphQL integration, and serverless deployment techniques.</p>
|
||||
|
||||
<h2>4. No Affiliation</h2>
|
||||
<p>The Service is <strong>not affiliated with, endorsed by, or connected to</strong> miruro.tv, Miruro, or any of its subsidiaries or affiliates. All trademarks and content belong to their respective owners.</p>
|
||||
|
||||
<h2>5. Third-Party Content</h2>
|
||||
<p>All anime data, images, descriptions, and other content displayed through the API belong to their respective copyright holders (AniList, Miruro). The Service does not host, store, or distribute any copyrighted media.</p>
|
||||
|
||||
<h2>6. Acceptable Use</h2>
|
||||
<p>You agree to use the Service responsibly and in compliance with all applicable laws. You must not:</p>
|
||||
<ul>
|
||||
<li>Use the Service for any illegal purpose</li>
|
||||
<li>Attempt to disrupt or overload the Service</li>
|
||||
<li>Scrape the Service to build a competing product</li>
|
||||
<li>Redistribute copyrighted content obtained through the Service</li>
|
||||
<li>Use the Service to infringe on the rights of others</li>
|
||||
</ul>
|
||||
|
||||
<h2>7. Rate Limiting</h2>
|
||||
<p>The Service uses in-memory caching with configurable TTL. Rate limiting is enforced at 100 requests per minute per IP address. Exceeding this limit will result in a 429 status code.</p>
|
||||
|
||||
<h2>8. Availability</h2>
|
||||
<p>The Service is hosted on Vercel's free tier and may experience downtime. We do not guarantee 100% availability. The Service may be modified, updated, or discontinued at any time without notice.</p>
|
||||
|
||||
<h2>9. Limitation of Liability</h2>
|
||||
<p>In no event shall the creators of MiruroAPI be liable for any indirect, incidental, special, consequential, or punitive damages arising from your use of the Service.</p>
|
||||
|
||||
<h2>10. Intellectual Property</h2>
|
||||
<p>The source code of MiruroAPI is open source and available on <a href="https://github.com/Shineii86/MiruroAPI" target="_blank" rel="noopener noreferrer">GitHub</a> under the repository's license terms.</p>
|
||||
|
||||
<h2>11. DMCA / Takedowns</h2>
|
||||
<p>If you believe your copyrighted content is being displayed through this API without authorization, please open an issue at <a href="https://github.com/Shineii86/MiruroAPI/issues" target="_blank" rel="noopener noreferrer">github.com/Shineii86/MiruroAPI/issues</a> and we will promptly remove it.</p>
|
||||
|
||||
<h2>12. Changes to Terms</h2>
|
||||
<p>We reserve the right to modify these Terms at any time. Changes will be posted on this page with an updated "Last updated" date.</p>
|
||||
|
||||
<h2>13. Contact</h2>
|
||||
<p>For questions about these Terms, open an issue at <a href="https://github.com/Shineii86/MiruroAPI/issues" target="_blank" rel="noopener noreferrer">github.com/Shineii86/MiruroAPI/issues</a>.</p>
|
||||
</div>
|
||||
<footer>© 2026 MiruroAPI · <a href="/" style="color:var(--purple)">Home</a> · <a href="/privacy" style="color:var(--purple)">Privacy</a></footer>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user