DramaBox API endpoint
Searches the DramaBox Android app API and returns one page of mixed results: book rows (id, title, description, cover, website link, tags, protagonist) and performer rows (id, name, avatar, series count), plus an is_more flag for the next page. The keyword is trimmed and truncated to 80 characters like the app; sort selects one of the app's result orderings. Performer ids can be passed to dramabox-performer. Only public catalog metadata is read; no playable video is returned.
/dramabox/searchSearches DramaBox's Android app API and returns one page of mixed results: short-drama titles plus the performers the query matched.
This endpoint reads DramaBox's Android app API rather than its website pages. It needs no device, emulator or app at request time: the service reproduces the app's request signature and state header from public app material (the app's static signing key is a committed public constant, like the ReelShort signing keys) and keeps the anonymous guest session the app uses for catalogue calls internally. Only public catalog metadata is read, and no playable video is ever returned.
Query parameters:
keyword: required search text. It is trimmed and, like the app, truncated to its first 80
characters. A blank keyword is rejected with 400.page: optional one-based result page, default 1, maximum 1000.limit: optional results per page, default 20, maximum 50. The page holds both kinds of row,
so a page can contain fewer books than limit.sort: optional result ordering mode; omit it for the app's default order, or pass 1, 2 or
3. These are the app's own upstream search-sort modes; the app API does not return display
labels for them, so they are documented by number only. Any other value is rejected with 400.Notable response behavior:
keyword echoes the normalized keyword the service actually searched (trimmed/truncated).titles holds the book rows. Each title is the same catalog card dramabox-rank returns: id,
title, description, cover_url, url (the public DramaBox page), tags, protagonist and
in_library. Search cards carry no chapter count, so episodes is 0 and omitted fields stay
empty.people holds the performer rows the app mixes into the same list: id (pass it to
dramabox-performer), name, avatar (catalogue artwork, a jpg) and videos (how many series
the performer appears in). The list is omitted when the query matched no performers.is_more is the app answer's isMore flag; read the next page when it is true. The app API's
totalSize answers 0 even when more pages exist, so it is not exposed.200 with empty titles and no people.algorithmRecomDot /
bookSource tracking blobs and per-user data are never returned.Example response (keyword=love, shortened descriptions and lists):
{
"code": 200,
"msg": "OK",
"data": {
"keyword": "love",
"page": 1,
"limit": 20,
"is_more": true,
"titles": [
{
"id": "41000103780",
"title": "Love's Encore",
"description": "To get his revenge, Luke Clark masks his identity for years and marries his enemy's daughter…",
"cover_url": "https://hwztchapter.dramaboxdb.com/data/cppartner/4x1/41x0/410x0/41000103780/41000103780.jpg?t=1749451505339&image_process=resize,h_300",
"url": "https://www.dramabox.com/drama/41000103780",
"episodes": 0,
"tags": ["Forced Love", "Enemy to Lover", "Revenge", "Hidden Identity", "Rebirth", "Rebellious"],
"protagonist": "Luke Clark, Nancy Beck",
"in_library": false
},
{
"id": "41000101035",
"title": "Love On The Run",
"cover_url": "https://hwztchapter.dramaboxdb.com/data/cppartner/4x1/41x0/410x0/41000101035/41000101035.jpg?t=1759057372667&image_process=resize,h_300",
"url": "https://www.dramabox.com/drama/41000101035",
"tags": ["Love at First Sight", "Mistaken Identity", "Billionaire"],
"protagonist": "Hannah Marshall, Miguel Elsher",
"in_library": false
}
],
"people": [
{
"id": "29450",
"name": "Kyle Lovett",
"avatar": "https://hwztchapter.dramaboxdb.com/data/cppartner/0x5/29450/29450.jpg?time=1781245424449",
"videos": 1
},
{
"id": "29262",
"name": "Cameron Love",
"avatar": "https://hwztchapter.dramaboxdb.com/data/cppartner/2x6/29262/29262.jpg?time=1781159442136",
"videos": 1
}
]
}
}
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| title | 40 | “Love's Encore” and 39 other values |
| description | 40 | median 399 characters |
| cover_url | 40 | hwztchapter.dramaboxdb.com |
| url | 40 | dramabox.com |
| episodes | 40 | 0 |
| tags | 40 | median 6 entries |
| protagonist | 40 | “Luke Clark, Nancy Beck” and 39 other values |
| in_library | 40 | true in 0 of 40 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| keyword | string | Yes | Search text, trimmed and truncated to 80 characters | love | |
| page | integer | No | One-based result page Minimum: 1. Maximum: 1000. | ||
| limit | integer | No | Results per page Minimum: 1. Maximum: 50. | ||
| sort | integer | No | Upstream result ordering mode; omit for the app default Allowed values: 1, 2, 3. | 1 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/dramabox/search?keyword=love&page=1&limit=10&sort=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"keyword": "love",
"page": 1,
"limit": 20,
"is_more": true,
"titles": [
{
"id": "41000103780",
"title": "Love's Encore",
"description": "To get his revenge, Luke Clark masks his identity for years and marries his enemy's daughter…",
"cover_url": "https://hwztchapter.dramaboxdb.com/data/cppartner/4x1/41x0/410x0/41000103780/41000103780.jpg?t=1749451505339&image_process=resize,h_300",
"url": "https://www.dramabox.com/drama/41000103780",
"episodes": 0,
"tags": [
"Forced Love",
"Enemy to Lover",
"Revenge",
"Hidden Identity",
"Rebirth",
"Rebellious"
],
"protagonist": "Luke Clark, Nancy Beck",
"in_library": false
},
{
"id": "41000101035",
"title": "Love On The Run",
"cover_url": "https://hwztchapter.dramaboxdb.com/data/cppartner/4x1/41x0/410x0/41000101035/41000101035.jpg?t=1759057372667&image_process=resize,h_300",
"url": "https://www.dramabox.com/drama/41000101035",
"tags": [
"Love at First Sight",
"Mistaken Identity",
"Billionaire"
],
"protagonist": "Hannah Marshall, Miguel Elsher",
"in_library": false
}
],
"people": [
{
"id": "29450",
"name": "Kyle Lovett",
"avatar": "https://hwztchapter.dramaboxdb.com/data/cppartner/0x5/29450/29450.jpg?time=1781245424449",
"videos": 1
},
{
"id": "29262",
"name": "Cameron Love",
"avatar": "https://hwztchapter.dramaboxdb.com/data/cppartner/2x6/29262/29262.jpg?time=1781159442136",
"videos": 1
}
]
}
}Request schema
No body schema
Response schema
#/definitions/dramabox.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | dramabox.SearchResponse | No | ||||
| data.is_more | boolean | No | HasMore is the answer's isMore flag (the app API's totalSize is not usable: it answers 0 even when more pages exist). | |||
| data.keyword | string | No | Keyword echoes the normalized keyword that was searched. | |||
| data.limit | integer | No | ||||
| data.page | integer | No | ||||
| data.people | array | No | People holds the performer rows. | |||
| data.people[].avatar | string | No | Avatar is the performer image URL the app serves (jpg); it is catalogue artwork, not playable media. | |||
| data.people[].id | string | No | ||||
| data.people[].name | string | No | ||||
| data.people[].videos | integer | No | Videos is the number of series the performer appears in. | |||
| data.titles | array | No | Titles holds the book rows. AppTitle record, 15 fields: cover_url, description, episodes, id, in_library, play_count, protagonist, shelf_time, shelf_time_ms, tag_refs, tags, title and 1 more. Described under DramaBox Tag API. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/dramabox/search?keyword=love&page=1&limit=10&sort=1" \
-H "x-api-key: $CRAWLORA_API_KEY"