BEASTMODE-DRACIN API

One unified endpoint for catalogs, episodes, and short-drama streaming — across 45+ platforms (including DramaWave, ReelShort, NetShort).

Introduction

All endpoints share one base URL and return JSON. Auth is a Bearer token (issued by the admin). Playback URLs are served directly by the CDN — this server only returns metadata + signed URLs.

# base URL
https://hermes-ckplhi-8080.eu3.sumopod.my.id
Media is served directly from the CDN. The video URL returned by the play endpoint is fetched directly by the customer's player (CORS is open). Video bandwidth never touches this server.

Authentication

Every request requires the header Authorization: Bearer <key>. Keys are issued per customer by the admin.

# example request
curl -s "https://hermes-ckplhi-8080.eu3.sumopod.my.id/v1/catalog?platform=dramawave" \
  -H "Authorization: Bearer beast_live_xxxxxxxxxxxxxxxx"

No key, or an invalid/revoked key → 401.

Platforms

GET/v1/platforms

List all available platforms with their title counts.

curl -s https://hermes-ckplhi-8080.eu3.sumopod.my.id/v1/platforms -H "Authorization: Bearer <key>"
{ "data": [ { "platform": "dramawave", "titles": 3251 }, ... ] }

Languages

GET/v1/languages

Available languages (optional ?platform= filter).

Catalog

GET/v1/catalog

Browse titles by platform.

ParamTypeDescription
platformstringslug from /v1/platforms
langstringlanguage code (e.g. id, en)
pageintpage number (default 1)
limitintresults per page
curl -s "https://hermes-ckplhi-8080.eu3.sumopod.my.id/v1/catalog?platform=dramawave&lang=id&limit=10" \
  -H "Authorization: Bearer <key>"
{ "data": [ {
    "id": "dramawave:hHGRtK0nNn",
    "title": "Membangun Kerajaan...",
    "episode_count": 76,
    "poster": "https://cdn.../poster-360.jpg"
} ], "meta": { "page": 1 } }

Title detail

GET/v1/titles/{platform}:{id}

Full metadata for one title. The ID format is {platform}:{id} (e.g. dramawave:hHGRtK0nNn).

curl -s https://hermes-ckplhi-8080.eu3.sumopod.my.id/v1/titles/dramawave:hHGRtK0nNn \
  -H "Authorization: Bearer <key>"

Episodes

GET/v1/titles/{platform}:{id}/episodes

Episode list with available resolutions.

curl -s https://hermes-ckplhi-8080.eu3.sumopod.my.id/v1/titles/dramawave:hHGRtK0nNn/episodes \
  -H "Authorization: Bearer <key>"
{ "data": [ {
    "ep": 1,
    "resolutions": [240, 360, 480, 540, 720, 1080],
    "thumb": "https://cdn.../0001-360.jpg"
} ] }

Play (streaming)

GET/v1/titles/{platform}:{id}/play/{ep}

Get a directly playable video URL. The URL is signed and expires (about 5 minutes) — request a fresh one each time the player needs it.

curl -s https://hermes-ckplhi-8080.eu3.sumopod.my.id/v1/titles/dramawave:hHGRtK0nNn/play/76 \
  -H "Authorization: Bearer <key>"
{ "data": {
    "ep": 76,
    "resolution": 1080,
    "expires_in": 300,
    "url": "https://cdn.../0076/1080.mp4?t=...&s=...",
    "renditions": [ { "resolution": 240, "url": "..." }, ... ]
} }
Important: do not cache video URLs. They die after expires_in seconds. Fetch a fresh one each time you play.
Streaming: URLs support Range (byte-range). Standard players (hls.js, video.js, ExoPlayer, browser) work out of the box. Send a browser User-Agent — raw clients (curl/scripts without a UA) may get blocked by the CDN.

Rate limits

Each key has a play/hour quota (set by the admin). Only the play endpoint is counted. Exceeding it → 429.

{ "success": false, "error": "rate_limit", "message": "watch quota exceeded (1500/hour)" }

Error codes

CodeMeaning
401 missing_bearerMissing Authorization header
401 invalid_keyInvalid or revoked key
429 rate_limitPlay/hour quota exceeded
502 upstream_errorUpstream failure (transient)