Drama Scraper API

A production-ready REST API for scraping Asian dramas, movies, and shows with caching, error handling, and consistent response formats.

Production Ready • v2.1 • Powered by Express & Cheerio
API Features

⚡ Performance

Intelligent caching with configurable TTLs reduces repeated requests and improves response times.

🛡️ Reliability

Comprehensive error handling, validation, and retry logic for robust operation.

📊 Consistent Format

All endpoints return standardized JSON with success/error status, messages, and metadata.

🔍 Full Coverage

12 endpoints covering home, recent, popular, genres, countries, search, and drama details.

Available Endpoints
Home & Overview
GET
/api/home
Homepage data including recent episodes, popular dramas, genres, and countries.
Cache: 2 minutes
Recent Episodes
GET
/api/recent/:category
Recent episodes by category (drama, movies, kshow).
:category = drama|movies|kshow ?page=1 Cache: 30 seconds
Recently Added
GET
/api/recently-added
Paginated list of recently added dramas.
?page=1 Cache: 1 minute
Popular Ongoing
GET
/api/popular-ongoing-drama
Paginated list of popular ongoing dramas.
?page=1 Cache: 1 minute
Most Popular
GET
/api/most-popular
Paginated list of most popular dramas.
?page=1 Cache: 5 minutes
Genres
GET
/api/genre/:genre
Browse dramas by genre (romance, action, comedy, etc.)
:genre = romance|action|comedy|... ?page=1 Cache: 1 minute
Countries & Types
GET
/api/country/:country
Browse dramas by country/type (korean-drama, japanese-drama, etc.)
:country = korean-drama|japanese-drama|... ?page=1 Cache: 1 minute
Search
GET
/api/search
Search for dramas or stars by keyword.
?q=keyword (required) ?type=movies|stars (optional) Cache: 30 seconds
Drama Information
GET
/api/drama/:id
Full drama details including title, description, cast, metadata, and episode list.
:id = drama-slug Cache: 5 minutes
GET
/api/episodes/:id
Episode list only for a specific drama (lighter than full drama endpoint).
:id = drama-slug Cache: 5 minutes
GET
/api/stream/:episodeId
Streaming links for an episode including iframe URL and all available servers.
:episodeId = drama-slug-episode-N Cache: 30 seconds
Miscellaneous
GET
/api/list
Full alphabetical drama list, optionally filtered by first letter.
?char=a-z (optional) Cache: 5 minutes
GET
/api/section/:name
Generic endpoint for any section (recently-added, popular-ongoing-drama, most-popular).
:name = recently-added|popular-ongoing-drama|most-popular ?page=1 Cache: 1 minute
Live Playground

Try any endpoint

Response Format

Standard JSON Response

{
  "success": true,
  "message": "Success message",
  "data": { ... },
  "pagination": {
    "currentPage": 1,
    "totalPages": 10,
    "hasNext": true,
    "hasPrev": false
  },
  "metadata": {
    "cached": false,
    "timestamp": "2026-04-06T14:20:22.462Z"
  }
}

All endpoints follow this consistent format. Error responses include "success": false and an "error" field.