Developers
The same catalog that powers this site: providers, series, episodes and genres, with playback links. JSON over HTTPS, with CORS enabled so you can call it from the browser.
API access is by invitation. Once your account has it, create a key on your dashboard. Copy the secret right away: it is shown only once. You can have up to 10 active at a time.
Put the key in the X-API-Key header on every catalog request.
export DRAMALISTA_KEY=sk_live_...Search series, then fetch a series' episodes to get playback links.
curl -s "https://dramalista.com/v1/series?q=revenge&sort=popular&limit=5" \
-H "X-API-Key: $DRAMALISTA_KEY"curl -s "https://dramalista.com/v1/series/<series-id>/episodes" \
-H "X-API-Key: $DRAMALISTA_KEY"Base URL https://dramalista.com/v1. The same routes are also served under /api/v1. Account and key-management endpoints are listed in the API reference.
| Method | Path | Returns |
|---|---|---|
| GET | /v1/series | Search and list series across all providers |
| GET | /v1/series/{id} | One series |
| GET | /v1/series/{id}/episodes | Episodes of a series, with playback links |
| GET | /v1/episodes/{id} | One episode, with a fresh signed playback URL |
| GET | /v1/episodes/{id}/stream | The episode video (file, range request or redirect) |
| GET | /v1/providers | All enabled providers |
| GET | /v1/providers/{slug} | One provider |
| GET | /v1/providers/{slug}/series | A provider's series, same filters as /v1/series |
| GET | /v1/genres | Genres with series counts |
| GET | /v1/health | Health check, no key needed |
/v1/series and /v1/providers/{slug}/series accept these query parameters. Episode lists take page and limit (up to 500, default 100).
| Parameter | Meaning |
|---|---|
| q | Full-text search over titles and synopses |
| provider | Provider slug |
| genre | Genre slug |
| language | Language code |
| status | ongoing, completed or unknown |
| sort | newest (default), oldest, popular, rating or title |
| page | Page number, starting at 1 |
| limit | Results per page, 1 to 100 (default 20) |
Every response uses the same envelope. Lists carry paging details in meta; failures set success to false and describe the problem in error.
{
"success": true,
"data": [ { "id": "...", "number": 1, "playback": { "type": "stream", "url": "https://dramalista.com/v1/episodes/<id>/stream?exp=...&sig=..." } } ],
"error": null,
"meta": { "total": 12, "page": 1, "limit": 100, "totalPages": 1 }
}Each episode has a playback.type that tells you what to do with it.
| Type | What to do |
|---|---|
| hosted | Play playback.url. Byte ranges are supported for seeking. |
| stream | Play playback.url. It redirects to the licensed HLS or MP4 stream (use hls.js for .m3u8 outside Safari). |
| external | Link out to playback.url on the provider's own app or site. |
| none | Metadata only. There is nothing to play. |
X-RateLimit-Limit and X-RateLimit-Remaining. Over the limit you get a 429 with Retry-After.Log in to create and revoke your keys.