v2.0.1

API Documentation

Everything you need to integrate ShineiAPI into your application. All endpoints return application/json and require no authentication.

Quick Start

No Auth
Just make requests
CORS Enabled
Call from any origin
Consistent
Same envelope format
bash
# Try it now — no API key needed
curl https://shineiapi.vercel.app/api/v1/series/solo-leveling

Base URL

All API requests are made to the following base URL:

url
https://shineiapi.vercel.app/api/v1
  • All endpoints use GET method only
  • No authentication required
  • CORS enabled for all origins
  • All responses are application/json

Response Format

Every response follows a consistent envelope format:

json
{
  "success": true,
  "data": { ... }
}

Paginated responses include an additional pagination object:

json
{
  "success": true,
  "data": [...],
  "pagination": {
    "last_visible_page": 1,
    "has_next_page": true,
    "current_page": 1,
    "items": {
      "count": 25,
      "total": 200,
      "per_page": 25
    }
  }
}

API Playground

Test any endpoint live — select, configure, and send. Real JSON responses from the API.

Select Endpoint

GET
Parameters
Response

Select an endpoint and click Send

Live JSON response will appear here

Browse Series

GET/api/v1/series

Browse all series with filtering, sorting, and pagination. Returns a paginated list from the Toraka catalog.

ParameterTypeRequiredDescription
pageintegerNoPage number (default: 1)
sortstringNoSort field: popularity_rank, trending_rank, rating, updated_at, created_at (default: popularity_rank)
genrestringNoGenre slug to filter by (e.g., "action", "fantasy")
qstringNoSearch string to filter results
bash
# Browse all series (default: popularity)
curl https://shineiapi.vercel.app/api/v1/series

# Browse with filters
curl "https://shineiapi.vercel.app/api/v1/series?sort=rating&genre=action&page=2"

Series Detail

GET/api/v1/series/{slug}

Returns complete information for a single series including metadata, chapters, ratings, cover images, authors, artists, and official sources. Pass include=chapters to embed the full chapter list.

ParameterTypeRequiredDescription
slugstringYesURL-friendly series identifier (e.g., "solo-leveling", "nano-machine")
includestringNoComma-separated includes. Use "chapters" to embed full chapter list in response
bash
# Standard (chapters stripped)
curl https://shineiapi.vercel.app/api/v1/series/nano-machine

# With chapters included
curl "https://shineiapi.vercel.app/api/v1/series/nano-machine?include=chapters"
json
{
  "success": true,
  "data": {
    "id": "abc-123",
    "title": "Nano Machine",
    "slug": "nano-machine",
    "synopsis": "Nanotechnology meets martial arts...",
    "rating": 9.6,
    "status": "Releasing",
    "type": "Manhwa",
    "genres": [
      { "id": "g-1", "name": "Action", "slug": "action" },
      { "id": "g-2", "name": "Fantasy", "slug": "fantasy" }
    ],
    "authors": [
      { "id": "a-1", "name": "Geobalhan", "slug": "geobalhan" }
    ],
    "artists": [
      { "id": "ar-1", "name": "Gang-Bul-Goe Geum", "slug": "gang-bul-goe-geum" }
    ],
    "alt_titles": ["나노마신", "Nano Machine", "奈米魔神"],
    "cover": {
      "small": "https://media.toraka.com/.../small.webp",
      "large": "https://media.toraka.com/.../large.webp"
    },
    "banner": null,
    "official_sources": [
      { "name": "KakaoPage", "url": "https://...", "language": null, "type": "webtoon" }
    ],
    "popularity_rank": 7,
    "score_ranking": 3,
    "rating_count": 1046,
    "bookmarks_count": 2764,
    "chapters_count": 310,
    "chapters": [
      {
        "id": "ch-310",
        "order": 310,
        "title": "Chapter 310",
        "source": "Asura Scans",
        "published_at": "2026-04-30T01:39:48Z"
      }
    ]
  }
}

Chapter List

GET/api/v1/series/{slug}/chapters

Returns all chapters for a series with metadata including release dates, sources, and lock status.

ParameterTypeRequiredDescription
slugstringYesSeries slug identifier
bash
curl https://shineiapi.vercel.app/api/v1/series/solo-leveling/chapters
json
{
  "success": true,
  "data": [
    {
      "id": "ch-001",
      "order": 1,
      "title": "Chapter 1",
      "source": "KakaoPage",
      "published_at": "2018-03-04T00:00:00Z"
    }
  ],
  "pagination": {
    "last_visible_page": 7,
    "has_next_page": true,
    "current_page": 1,
    "items": {
      "count": 100,
      "total": 650,
      "per_page": 100
    }
  }
}

Random Series

GET/api/v1/random

Returns a random series from a curated list of popular titles. Great for discovery features. Response format is identical to the Series Detail endpoint.

bash
curl https://shineiapi.vercel.app/api/v1/random

Top Rated

GET/api/v1/top

Returns the highest-rated series sorted by rating in descending order. Cached for 15 minutes.

bash
curl https://shineiapi.vercel.app/api/v1/top

Release Schedule

GET/api/v1/schedule

Returns popular ongoing series as a release schedule approximation. Optionally filter by day.

ParameterTypeRequiredDescription
daystringNoDay of the week (e.g., "monday", "tuesday")
bash
curl "https://shineiapi.vercel.app/api/v1/schedule?day=monday"

Genres

GET/api/v1/genres

Returns all supported genres with names, slugs, and descriptions. Static data that rarely changes.

bash
curl https://shineiapi.vercel.app/api/v1/genres
json
{
  "success": true,
  "data": [
    { "slug": "action", "name": "Action", "description": "High-energy stories..." },
    { "slug": "fantasy", "name": "Fantasy", "description": "Worlds with magic..." }
  ]
}

Rate Limiting

ShineiAPI allows 60 requests per minute per IP address. Rate limit info is included in response headers:

HeaderDescription
X-RateLimit-LimitMaximum requests per window (60)
X-RateLimit-RemainingRemaining requests in current window
Retry-AfterSeconds to wait (only on 429 responses)
json
// 429 Too Many Requests
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Maximum 60 requests per minute. Please retry after 45 seconds.",
    "status": 429,
    "retry_after": 45
  }
}

Tip: Always check the Retry-After header on 429 responses and wait before retrying.

Caching

Responses are cached in-memory to improve performance and reduce upstream load:

EndpointCache TTL
/api/v1/series/{slug}5 minutes
/api/v1/series/{slug}/chapters5 minutes
/api/v1/search10 minutes
/api/v1/top15 minutes
/api/v1/schedule15 minutes
/api/v1/random2 minutes
/api/v1/stats5 minutes

Error Codes

When an error occurs, the response includes a descriptive error message:

StatusDescription
200OK — Request successful
400Bad Request — Invalid parameters or missing required fields
404Not Found — The requested resource does not exist
429Too Many Requests — Rate limit exceeded (60 req/min)
500Internal Server Error — Something went wrong on our end
503Service Unavailable — Upstream API is temporarily down

Health Check

GET/api/v1/health

Returns API health status, upstream Toraka connectivity, cache statistics, and uptime. Use this for monitoring, load balancer health checks, and status pages. Also supports HEAD requests for lightweight probes (same status code, no body).

bash
curl https://shineiapi.vercel.app/api/v1/health
json
{
  "success": true,
  "data": {
    "status": "healthy",
    "version": "2.0.1",
    "uptime": { "ms": 86400000, "human": "1d 0h 0m" },
    "checks": {
      "api": "healthy",
      "upstream": "healthy",
      "cache": "healthy",
      "cacheStats": {
        "entries": 42,
        "hitRate": "78.5%",
        "hits": 1520,
        "misses": 418
      }
    },
    "timestamp": "2026-05-03T12:00:00.000Z"
  }
}

Monitoring: The health endpoint returns 503 when upstream is down, so you can use it for automated alerting.

API Stats

GET/api/v1/stats

Returns public API statistics including uptime, cache performance, rate limit configuration, and metadata. Useful for status pages and dashboards.

bash
curl https://shineiapi.vercel.app/api/v1/stats
json
{
  "success": true,
  "data": {
    "name": "ShineiAPI",
    "version": "2.0.1",
    "description": "Free manga, manhwa, and webtoon REST API",
    "uptime": { "ms": 86400000, "human": "1d 0h 0m" },
    "cache": { "entries": 42, "hits": 1520, "misses": 418 },
    "endpoints": 10,
    "rate_limit": { "max_requests": 60, "window": "60s", "scope": "per IP" },
    "data_source": "Toraka (toraka.com)",
    "documentation": "https://shineiapi.vercel.app/docs",
    "repository": "https://github.com/Shineii86/ShineiAPI",
    "license": "MIT"
  }
}

FAQ

Do I need an API key?

No! ShineiAPI is completely free and requires no authentication. Just start making requests.

What are the rate limits?

60 requests per minute per IP. Rate limit headers are included in every response.

Can I use this in my frontend?

Yes! CORS is enabled for all origins. You can call the API directly from any browser.

Where does the data come from?

ShineiAPI wraps the Toraka API (toraka.com), normalizing and caching the data for easier consumption.

How often is the data updated?

Data is fetched from Toraka in real-time and cached for 2-15 minutes depending on the endpoint.

Can I self-host this?

Yes! Clone the repo, run npm install, and deploy to Vercel, Netlify, or any Node.js host.

Ready to Build?

Start using ShineiAPI in your project today. No signup required.