API Documentation
Everything you need to integrate ShineiAPI into your application. All endpoints return application/json and require no authentication.
Quick Start
# Try it now — no API key needed
curl https://shineiapi.vercel.app/api/v1/series/solo-levelingBase URL
All API requests are made to the following base 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:
{
"success": true,
"data": { ... }
}Paginated responses include an additional pagination object:
{
"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.
Browse Series
/api/v1/seriesBrowse all series with filtering, sorting, and pagination. Returns a paginated list from the Toraka catalog.
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number (default: 1) |
sort | string | No | Sort field: popularity_rank, trending_rank, rating, updated_at, created_at (default: popularity_rank) |
genre | string | No | Genre slug to filter by (e.g., "action", "fantasy") |
q | string | No | Search string to filter results |
# 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"Popular & Trending
/api/v1/popularGet popular or trending series. Proxies the Toraka series listing with the appropriate sort parameter.
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number (default: 1) |
type | string | No | "popular" or "trending" (default: popular) |
# Popular series
curl https://shineiapi.vercel.app/api/v1/popular
# Trending series, page 2
curl "https://shineiapi.vercel.app/api/v1/popular?type=trending&page=2"Series Detail
/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.
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | URL-friendly series identifier (e.g., "solo-leveling", "nano-machine") |
include | string | No | Comma-separated includes. Use "chapters" to embed full chapter list in response |
# 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"{
"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
/api/v1/series/{slug}/chaptersReturns all chapters for a series with metadata including release dates, sources, and lock status.
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | Series slug identifier |
curl https://shineiapi.vercel.app/api/v1/series/solo-leveling/chapters{
"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
}
}
}Search
/api/v1/search?q={query}Full-text search across the manga, manhwa, and webtoon catalog with optional filters. Fully backward compatible — only q still works.
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Yes | Search query (minimum 2 characters) |
page | integer | No | Page number (default: 1) |
genre | string | No | Genre slug filter (e.g., "action", "fantasy") |
source | string | No | Source name filter (e.g., "kakao-page") |
type | string | No | Content type (e.g., "manhwa", "manga") |
status | string | No | Release status (e.g., "releasing", "completed") |
# Basic search (backward compatible)
curl "https://shineiapi.vercel.app/api/v1/search?q=tower+of+god"
# Search with filters
curl "https://shineiapi.vercel.app/api/v1/search?q=solo&genre=action&type=manhwa&status=completed"{
"success": true,
"data": [
{
"id": "...",
"title": "Tower of God",
"slug": "tower-of-god",
"synopsis": "What do you desire?...",
"rating": 9.5,
"status": "Releasing",
"type": "Manhwa",
"genres": [
{ "id": "...", "name": "Action", "slug": "action" }
],
"chapters_count": 600,
"bookmarks_count": 8500,
"cover": { "small": "...", "large": "..." }
}
],
"pagination": {
"last_visible_page": 1,
"has_next_page": false,
"current_page": 1,
"items": { "count": 1, "total": 1, "per_page": 25 }
}
}Random Series
/api/v1/randomReturns a random series from a curated list of popular titles. Great for discovery features. Response format is identical to the Series Detail endpoint.
curl https://shineiapi.vercel.app/api/v1/randomTop Rated
/api/v1/topReturns the highest-rated series sorted by rating in descending order. Cached for 15 minutes.
curl https://shineiapi.vercel.app/api/v1/topRelease Schedule
/api/v1/scheduleReturns popular ongoing series as a release schedule approximation. Optionally filter by day.
| Parameter | Type | Required | Description |
|---|---|---|---|
day | string | No | Day of the week (e.g., "monday", "tuesday") |
curl "https://shineiapi.vercel.app/api/v1/schedule?day=monday"Genres
/api/v1/genresReturns all supported genres with names, slugs, and descriptions. Static data that rarely changes.
curl https://shineiapi.vercel.app/api/v1/genres{
"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:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per window (60) |
X-RateLimit-Remaining | Remaining requests in current window |
Retry-After | Seconds to wait (only on 429 responses) |
// 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:
| Endpoint | Cache TTL |
|---|---|
/api/v1/series/{slug} | 5 minutes |
/api/v1/series/{slug}/chapters | 5 minutes |
/api/v1/search | 10 minutes |
/api/v1/top | 15 minutes |
/api/v1/schedule | 15 minutes |
/api/v1/random | 2 minutes |
/api/v1/stats | 5 minutes |
Error Codes
When an error occurs, the response includes a descriptive error message:
| Status | Description |
|---|---|
200 | OK — Request successful |
400 | Bad Request — Invalid parameters or missing required fields |
404 | Not Found — The requested resource does not exist |
429 | Too Many Requests — Rate limit exceeded (60 req/min) |
500 | Internal Server Error — Something went wrong on our end |
503 | Service Unavailable — Upstream API is temporarily down |
Health Check
/api/v1/healthReturns 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).
curl https://shineiapi.vercel.app/api/v1/health{
"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
/api/v1/statsReturns public API statistics including uptime, cache performance, rate limit configuration, and metadata. Useful for status pages and dashboards.
curl https://shineiapi.vercel.app/api/v1/stats{
"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.