{"openapi":"3.1.0","info":{"title":"RandomTranslator API","version":"1","description":"Read-only access to RandomTranslator's catalogue and your own library with a personal API key. Create a key on your account page (Reader membership and up; the account must be a day old; at most three keys) and send it as `Authorization: Bearer rtk_...`.\n\nEach key has 120 units a minute and 10,000 a UTC day: a record costs 1, a page of a list 5 (`x-cost` on each operation). Every answer to a key carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Cost`; a 401, 403, 422, 429 or our own 5xx costs nothing.\n\nChapter text is not available through the API, and no answer carries a source address: `url`, `source_domain`, `source_notice` and image assets are left out, and a link or cover still at a source site is null.\n\nError bodies are `{\"detail\": \"<sentence>\", \"code\": \"<code>\"}`:\n- `invalid_key` (401): The bearer is not a live key: unknown, revoked, expired, or the account signed out everywhere.\n- `membership_required` (403): The key's account is not on the Reader membership ($5) or above.\n- `insufficient_scope` (403): An OAuth app's token was not granted this route's scope.\n- `rate_limited` (429): Over the key's units for this minute. Retry-After says when to try again.\n- `daily_limit` (429): The key's units for the UTC day are spent. `resets_at` is 00:00 UTC.\n- `api_disabled` (503): The API is switched off for now. Retry-After says when to try again."},"servers":[{"url":"https://randomtranslator.com"}],"paths":{"/api/v1/limits/me":{"get":{"tags":["limits"],"summary":"My limits","description":"Your limits today: chapters (one ceiling for site, downloads and tools), read-aloud, originals, key units.","operationId":"my_limits","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyLimitsResponse"}}}}},"security":[{"personalKey":[]}],"x-cost":1,"x-freshness":"live","x-scope":"read:library","x-example-request":"GET /api/v1/limits/me"}},"/api/v1/novels/":{"get":{"tags":["novels"],"summary":"Novels search","description":"Search and browse novels: title or author text, genre, tags, fandom, status and sort, 20 a page.","operationId":"novels_search","parameters":[{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"description":"Search in original or translated title (at most 100 characters), or paste a novel URL for exact match","title":"Title"},"description":"Search in original or translated title (at most 100 characters), or paste a novel URL for exact match"},{"name":"author","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Search in original or translated author","title":"Author"},"description":"Search in original or translated author"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by original or translated category","title":"Category"},"description":"Filter by original or translated category"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by original or translated status","title":"Status"},"description":"Filter by original or translated status"},{"name":"exclude_genres[]","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Genres (the `category` values) to hide. Case-insensitive; also accepted as comma-separated `exclude_genres=a,b`. A novel in any of them is dropped, even when `category` names it. Novels with no genre stay. Max 20.","title":"Exclude Genres[]"},"description":"Genres (the `category` values) to hide. Case-insensitive; also accepted as comma-separated `exclude_genres=a,b`. A novel in any of them is dropped, even when `category` names it. Novels with no genre stay. Max 20."},{"name":"fandom","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Legacy single-fandom filter; folded into include_fandoms[]. Kept for old links and saved subscriptions.","title":"Fandom"},"description":"Legacy single-fandom filter; folded into include_fandoms[]. Kept for old links and saved subscriptions."},{"name":"include_fandoms[]","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fandoms to include (exact stored names, case-insensitive). Novels must have at least one unless include_all_fandoms is true. Max 20.","title":"Include Fandoms[]"},"description":"Fandoms to include (exact stored names, case-insensitive). Novels must have at least one unless include_all_fandoms is true. Max 20."},{"name":"include_all_fandoms","in":"query","required":false,"schema":{"type":"boolean","description":"If true, novels must have ALL specified include_fandoms.","default":false,"title":"Include All Fandoms"},"description":"If true, novels must have ALL specified include_fandoms."},{"name":"exclude_fandoms[]","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fandoms to exclude. Novels must NOT have any of these. Max 20.","title":"Exclude Fandoms[]"},"description":"Fandoms to exclude. Novels must NOT have any of these. Max 20."},{"name":"allow_crossovers","in":"query","required":false,"schema":{"type":"boolean","description":"With include_fandoms[]: false keeps only novels carrying no fandom outside the include list (no crossovers). No effect without include_fandoms.","default":true,"title":"Allow Crossovers"},"description":"With include_fandoms[]: false keeps only novels carrying no fandom outside the include list (no crossovers). No effect without include_fandoms."},{"name":"fanfic","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true: Fan-Fiction only; false: everything except Fan-Fiction (no category included); absent: no filter.","title":"Fanfic"},"description":"true: Fan-Fiction only; false: everything except Fan-Fiction (no category included); absent: no filter."},{"name":"protagonist_gender","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by protagonist gender: male | female","title":"Protagonist Gender"},"description":"Filter by protagonist gender: male | female"},{"name":"include_tags[]","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags that must be included. Novels must have at least one of these tags.","title":"Include Tags[]"},"description":"Filter by tags that must be included. Novels must have at least one of these tags."},{"name":"include_all_tags","in":"query","required":false,"schema":{"type":"boolean","description":"If true, novels must have ALL specified include_tags.","default":false,"title":"Include All Tags"},"description":"If true, novels must have ALL specified include_tags."},{"name":"exclude_tags[]","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags that must be excluded. Novels must NOT have any of these tags.","title":"Exclude Tags[]"},"description":"Filter by tags that must be excluded. Novels must NOT have any of these tags."},{"name":"created_within","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter novels created within this duration (e.g., 1d, 1w, 1m, 3m, 6m, 1y)","title":"Created Within"},"description":"Filter novels created within this duration (e.g., 1d, 1w, 1m, 3m, 6m, 1y)"},{"name":"created_older_than","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter novels created older than this duration (e.g., 1m, 6m, 1y, 2y)","title":"Created Older Than"},"description":"Filter novels created older than this duration (e.g., 1m, 6m, 1y, 2y)"},{"name":"updated_within","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter novels with new chapters added within this duration (e.g., 1d, 1w, 1m, 3m, 6m, 1y)","title":"Updated Within"},"description":"Filter novels with new chapters added within this duration (e.g., 1d, 1w, 1m, 3m, 6m, 1y)"},{"name":"updated_older_than","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter novels with no new chapters added for longer than this duration (e.g., 1m, 6m, 1y, 2y)","title":"Updated Older Than"},"description":"Filter novels with no new chapters added for longer than this duration (e.g., 1m, 6m, 1y, 2y)"},{"name":"min_word_count","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Minimum word count (e.g., 50k, 100k, 500k, 1m)","title":"Min Word Count"},"description":"Minimum word count (e.g., 50k, 100k, 500k, 1m)"},{"name":"max_word_count","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Maximum word count (e.g., 100k, 500k, 1m, 2m)","title":"Max Word Count"},"description":"Maximum word count (e.g., 100k, 500k, 1m, 2m)"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort field: views, last_added, word_count, chapter_count, reader_count, rating_count, score (rating, best first; good_rating_percent is the same sort), newest, relevance. Absent: relevance while a title/author search is active, else last_added.","title":"Sort By"},"description":"Sort field: views, last_added, word_count, chapter_count, reader_count, rating_count, score (rating, best first; good_rating_percent is the same sort), newest, relevance. Absent: relevance while a title/author search is active, else last_added."},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of items to return (max 50)","default":20,"title":"Limit"},"description":"Number of items to return (max 50)"},{"name":"view","in":"query","required":false,"schema":{"enum":["full","card"],"type":"string","description":"full (default): the NovelResponse rows this route has always returned. card: PaginatedNovelCardResponse, the fields a list row draws (9 metadata fields, at most 8 tags, a cover ladder for a 56px slot).","default":"full","title":"View"},"description":"full (default): the NovelResponse rows this route has always returned. card: PaginatedNovelCardResponse, the fields a list row draws (9 metadata fields, at most 8 tags, a cover ladder for a 56px slot)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":5,"x-freshness":"live","x-scope":"read:catalog","x-example-request":"GET /api/v1/novels/?title=sword&limit=2"}},"/api/v1/novels/hub":{"get":{"tags":["novels"],"summary":"Novels hub","description":"Every genre, fandom and tag with its number of novels: the values novels_search filters on.","operationId":"novels_hub","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogueHubResponse"}}}}},"security":[{"personalKey":[]}],"x-cost":5,"x-freshness":"up to 1 hour","x-scope":"read:catalog","x-example-request":"GET /api/v1/novels/hub"}},"/api/v1/novels/popular/{time_range}":{"get":{"tags":["novels"],"summary":"Novels popular","description":"The most read novels for daily, weekly, monthly or all time, with each novel's movement on the list.","operationId":"novels_popular","parameters":[{"name":"time_range","in":"path","required":true,"schema":{"$ref":"#/components/schemas/TimeRange"}},{"name":"include_fanfiction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"true: ONLY Fan-Fiction; false: every novel EXCEPT Fan-Fiction; all: no category filter","default":"true","title":"Include Fanfiction"},"description":"true: ONLY Fan-Fiction; false: every novel EXCEPT Fan-Fiction; all: no category filter"},{"name":"system","in":"query","required":false,"schema":{"type":"boolean","description":"If false (default), exclude novels by default system user. If true, show only novels by default system user","default":false,"title":"System"},"description":"If false (default), exclude novels by default system user. If true, show only novels by default system user"},{"name":"protagonist_gender","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"male | female","title":"Protagonist Gender"},"description":"male | female"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}},{"name":"view","in":"query","required":false,"schema":{"enum":["full","card"],"type":"string","description":"full (default): PopularNovelResponse rows. card: PaginatedPopularNovelCardResponse, the fields a list row draws (see GET /novels/).","default":"full","title":"View"},"description":"full (default): PopularNovelResponse rows. card: PaginatedPopularNovelCardResponse, the fields a list row draws (see GET /novels/)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PopularResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":5,"x-freshness":"up to 10 minutes","x-scope":"read:catalog","x-example-request":"GET /api/v1/novels/popular/weekly?include_fanfiction=all&limit=2"}},"/api/v1/novels/{novel_id}":{"get":{"tags":["novels"],"summary":"Novel detail","description":"One novel: titles, author, synopsis, genre, tags, status, chapter count, your shelf and place. No source address.","operationId":"novel_detail","parameters":[{"name":"novel_id","in":"path","required":true,"schema":{"type":"integer","title":"Novel Id"}},{"name":"basic","in":"query","required":false,"schema":{"type":"boolean","description":"If true, return only basic novel info (id, titles)","default":false,"title":"Basic"},"description":"If true, return only basic novel info (id, titles)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NovelDetailResponse"},{"$ref":"#/components/schemas/BasicNovelResponse"}],"title":"Response Get Novel Api V1 Novels  Novel Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":1,"x-freshness":"live","x-scope":"read:catalog","x-example-request":"GET /api/v1/novels/1234"}},"/api/v1/novels/{novel_id}/chapters/page":{"get":{"tags":["novels"],"summary":"Novel chapters","description":"One page of a novel's chapter list: numbers and titles, never chapter text. Search by title or number.","operationId":"novel_chapters","parameters":[{"name":"novel_id","in":"path","required":true,"schema":{"type":"integer","title":"Novel Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Case-insensitive literal match on the chapter title (translated, else original) or on the chapter number's digits.","title":"Search"},"description":"Case-insensitive literal match on the chapter title (translated, else original) or on the chapter number's digits."},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"asc","title":"Order"}},{"name":"around","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Serve the page that contains this sequence number (or where it would sit) instead of `skip`. Used to open the list on the reader's current chapter.","title":"Around"},"description":"Serve the page that contains this sequence number (or where it would sit) instead of `skip`. Used to open the list on the reader's current chapter."},{"name":"indexed","in":"query","required":false,"schema":{"type":"boolean","description":"Set false to skip the summary-embedding lookup; `indexed` then comes back null instead of a boolean.","default":true,"title":"Indexed"},"description":"Set false to skip the summary-embedding lookup; `indexed` then comes back null instead of a boolean."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChapterPageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":5,"x-freshness":"up to 1 minute","x-scope":"read:catalog","x-example-request":"GET /api/v1/novels/1234/chapters/page?skip=0&limit=2"}},"/api/v1/novels/{novel_id}/entities":{"get":{"tags":["novels"],"summary":"Novel glossary","description":"A page of the novel's glossary: characters, places and terms with their English names.","operationId":"novel_glossary","parameters":[{"name":"novel_id","in":"path","required":true,"schema":{"type":"integer","title":"Novel Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":100,"title":"Limit"}},{"name":"only_user_translated","in":"query","required":false,"schema":{"type":"boolean","description":"Return only entities the current user has a custom translation for. Requires auth.","default":false,"title":"Only User Translated"},"description":"Return only entities the current user has a custom translation for. Requires auth."},{"name":"source_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(ai|user)$"},{"type":"null"}],"description":"Filter entities by how they were created: 'ai' or 'user'. Omit for all.","title":"Source Type"},"description":"Filter entities by how they were created: 'ai' or 'user'. Omit for all."},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"enum":["character","place","item","material","technique","organization","concept","title","other","junk"],"type":"string"},{"type":"null"}],"description":"Filter by classifier kind (character, place, ... junk). Omit for all; unclassified rows only appear unfiltered.","title":"Kind"},"description":"Filter by classifier kind (character, place, ... junk). Omit for all; unclassified rows only appear unfiltered."},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"enum":["occurrences","chapters","name","kind","newest"],"type":"string"},{"type":"null"}],"description":"occurrences (default) | chapters | name | kind | newest","title":"Sort"},"description":"occurrences (default) | chapters | name | kind | newest"},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"description":"asc | desc. Default: desc for occurrences/chapters/newest, asc for name/kind.","title":"Order"},"description":"asc | desc. Default: desc for occurrences/chapters/newest, asc for name/kind."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["active","hidden"],"type":"string"},{"type":"null"}],"description":"active | hidden. Omit for all.","title":"Status"},"description":"active | hidden. Omit for all."},{"name":"include_aliases","in":"query","required":false,"schema":{"type":"boolean","description":"Also list same-named alias rows on their own. Default: folded under their canonical row (its alias_entities).","default":false,"title":"Include Aliases"},"description":"Also list same-named alias rows on their own. Default: folded under their canonical row (its alias_entities)."},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"enum":["novel","all"],"type":"string"},{"type":"null"}],"description":"novel = the novel's own entries only; all (default) also lists the general entities stored on this novel.","title":"Scope"},"description":"novel = the novel's own entries only; all (default) also lists the general entities stored on this novel."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEntityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":5,"x-freshness":"live","x-scope":"read:glossary","x-example-request":"GET /api/v1/novels/1234/entities?limit=2"}},"/api/v1/novels/{novel_id}/entities/search":{"get":{"tags":["novels"],"summary":"Novel glossary search","description":"Search the novel's glossary by Chinese or English name.","operationId":"novel_glossary_search","parameters":[{"name":"novel_id","in":"path","required":true,"schema":{"type":"integer","title":"Novel Id"}},{"name":"query","in":"query","required":true,"schema":{"type":"string","maxLength":200,"description":"Search query for entity names","title":"Query"},"description":"Search query for entity names"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":100,"title":"Limit"}},{"name":"only_user_translated","in":"query","required":false,"schema":{"type":"boolean","description":"Return only entities the current user has a custom translation for. Requires auth.","default":false,"title":"Only User Translated"},"description":"Return only entities the current user has a custom translation for. Requires auth."},{"name":"source_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(ai|user)$"},{"type":"null"}],"title":"Source Type"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"enum":["character","place","item","material","technique","organization","concept","title","other","junk"],"type":"string"},{"type":"null"}],"description":"Filter by classifier kind (character, place, ... junk). Omit for all.","title":"Kind"},"description":"Filter by classifier kind (character, place, ... junk). Omit for all."},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"enum":["occurrences","chapters","name","kind","newest"],"type":"string"},{"type":"null"}],"description":"Same vocabulary as the list route.","title":"Sort"},"description":"Same vocabulary as the list route."},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"title":"Order"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["active","hidden"],"type":"string"},{"type":"null"}],"description":"active | hidden. Omit for all.","title":"Status"},"description":"active | hidden. Omit for all."},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"enum":["novel","all"],"type":"string"},{"type":"null"}],"description":"Same as the list route.","title":"Scope"},"description":"Same as the list route."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEntityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":5,"x-freshness":"live","x-scope":"read:glossary","x-example-request":"GET /api/v1/novels/1234/entities/search?query=Lin"}},"/api/v1/novels/{novel_id}/general-entities":{"get":{"tags":["novels"],"summary":"Novel general glossary","description":"The shared glossary terms (fandom and genre-wide names) that apply to this novel.","operationId":"novel_general_glossary","parameters":[{"name":"novel_id","in":"path","required":true,"schema":{"type":"integer","title":"Novel Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"description":"Case-insensitive substring of the original or translated name. Ignored when shorter than 2 characters, unless it holds a CJK glyph.","title":"Search"},"description":"Case-insensitive substring of the original or translated name. Ignored when shorter than 2 characters, unless it holds a CJK glyph."},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"enum":["character","place","item","material","technique","organization","concept","title","other","junk"],"type":"string"},{"type":"null"}],"description":"Filter by classifier kind. Omit for all.","title":"Kind"},"description":"Filter by classifier kind. Omit for all."},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"enum":["occurrences","chapters","name","kind","newest"],"type":"string"},{"type":"null"}],"description":"occurrences (default) | chapters | name | kind | newest, counted in this novel.","title":"Sort"},"description":"occurrences (default) | chapters | name | kind | newest, counted in this novel."},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"description":"asc | desc. Default: desc for occurrences/chapters/newest, asc for name/kind.","title":"Order"},"description":"asc | desc. Default: desc for occurrences/chapters/newest, asc for name/kind."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["included","excluded"],"type":"string"},{"type":"null"}],"description":"included | excluded (the per-entity switch). Omit for both.","title":"Status"},"description":"included | excluded (the per-entity switch). Omit for both."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedNovelGeneralEntityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":5,"x-freshness":"live","x-scope":"read:glossary","x-example-request":"GET /api/v1/novels/1234/general-entities?limit=2"}},"/api/v1/novels/{novel_id}/recaps":{"get":{"tags":["novels"],"summary":"Novel recaps","description":"The novel's volume and arc recap tree, opened at your arc; view=structure leaves out story text.","operationId":"novel_recaps","parameters":[{"name":"novel_id","in":"path","required":true,"schema":{"type":"integer","title":"Novel Id"}},{"name":"arc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Arc to open (whose volume ships its full recap); anything invalid falls back to the reader's arc, else 0. It selects what is returned and never what is written.","title":"Arc"},"description":"Arc to open (whose volume ships its full recap); anything invalid falls back to the reader's arc, else 0. It selects what is returned and never what is written."},{"name":"view","in":"query","required":false,"schema":{"type":"string","description":"full (default): RecapTreeResponse. structure: RecapStructureResponse, the same tree with no `title`, `preview` or `recap` key on any volume or arc (no story text), for a render made before the reader agreed to spoilers.","default":"full","title":"View"},"description":"full (default): RecapTreeResponse. structure: RecapStructureResponse, the same tree with no `title`, `preview` or `recap` key on any volume or arc (no story text), for a render made before the reader agreed to spoilers."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecapTreeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":1,"x-freshness":"live","x-scope":"read:recaps","x-example-request":"GET /api/v1/novels/1234/recaps?view=structure"}},"/api/v1/novels/{novel_id}/recaps/arcs/{arc_index}":{"get":{"tags":["novels"],"summary":"Novel recap arc","description":"One arc's recap and its chapter summaries.","operationId":"novel_recap_arc","parameters":[{"name":"novel_id","in":"path","required":true,"schema":{"type":"integer","title":"Novel Id"}},{"name":"arc_index","in":"path","required":true,"schema":{"type":"integer","title":"Arc Index"}},{"name":"include_chapters","in":"query","required":false,"schema":{"type":"boolean","description":"False returns the arc's own recap with `chapters: []` and reads no chapter summaries: the 25 summaries are ~95% of the response, and the recaps page draws only the arc's recap.","default":true,"title":"Include Chapters"},"description":"False returns the arc's own recap with `chapters: []` and reads no chapter summaries: the 25 summaries are ~95% of the response, and the recaps page draws only the arc's recap."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecapArcResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":1,"x-freshness":"live","x-scope":"read:recaps","x-example-request":"GET /api/v1/novels/1234/recaps/arcs/1"}},"/api/v1/oauth/keys":{"post":{"tags":["oauth"],"summary":"Create Api Key","description":"Create a personal API key. The key is in this answer only, once. Signed-in session cookie only: a key cannot manage keys.","operationId":"create_api_key_api_v1_oauth_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"session":[]}],"x-cost":0},"get":{"tags":["oauth"],"summary":"List Api Keys","description":"Your live API keys: name, created, last used and expiry. Never the key itself. Signed-in session cookie only: a key cannot manage keys.","operationId":"list_api_keys_api_v1_oauth_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeysResponse"}}}}},"security":[{"session":[]}],"x-cost":0}},"/api/v1/oauth/keys/{key_id}":{"delete":{"tags":["oauth"],"summary":"Revoke Api Key","description":"Revoke one API key. It stops working at once. Signed-in session cookie only: a key cannot manage keys.","operationId":"revoke_api_key_api_v1_oauth_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyRevoked"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"session":[]}],"x-cost":0}},"/api/v1/user-novels/bookmarks":{"get":{"tags":["user-novels"],"summary":"Library","description":"Your library: a page of your saved novels with reading status and where you are in each.","operationId":"library","parameters":[{"name":"reading_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by reading status: READING, PLAN_TO_READ, PAUSED, COMPLETED, DROPPED","title":"Reading Status"},"description":"Filter by reading status: READING, PLAN_TO_READ, PAUSED, COMPLETED, DROPPED"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}},{"name":"sort_by","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SortOption","description":"Sort by: last_read, last_updated, unread_chapters, or last_added","default":"last_read"},"description":"Sort by: last_read, last_updated, unread_chapters, or last_added"},{"name":"continue_reading","in":"query","required":false,"schema":{"type":"boolean","description":"Only the rows the home page's Continue Reading shelf shows","default":false,"title":"Continue Reading"},"description":"Only the rows the home page's Continue Reading shelf shows"},{"name":"new_chapters","in":"query","required":false,"schema":{"type":"boolean","description":"Only rows with chapters added since the reader last read them","default":false,"title":"New Chapters"},"description":"Only rows with chapters added since the reader last read them"},{"name":"with_total","in":"query","required":false,"schema":{"type":"boolean","description":"false skips the count query; total is then -1","default":true,"title":"With Total"},"description":"false skips the count query; total is then -1"},{"name":"novel_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated novel ids (at most 50): only those rows","title":"Novel Ids"},"description":"Comma-separated novel ids (at most 50): only those rows"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Title search: the novel's English, original or alternate titles contain it (case-insensitive, at most 100 characters; blank is no filter)","title":"Q"},"description":"Title search: the novel's English, original or alternate titles contain it (case-insensitive, at most 100 characters; blank is no filter)"},{"name":"with_counts","in":"query","required":false,"schema":{"type":"boolean","description":"Add status_counts: the whole library's bookmarks per reading status","default":false,"title":"With Counts"},"description":"Add status_counts: the whole library's bookmarks per reading status"},{"name":"view","in":"query","required":false,"schema":{"enum":["full","card"],"type":"string","description":"full (default): unchanged. card: rows without is_bookmarked, stored_chapter_count and stored_unread_chapters, and without the stored-chapter subqueries.","default":"full","title":"View"},"description":"full (default): unchanged. card: rows without is_bookmarked, stored_chapter_count and stored_unread_chapters, and without the stored-chapter subqueries."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryViewsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":5,"x-freshness":"live","x-scope":"read:library","x-example-request":"GET /api/v1/user-novels/bookmarks?limit=2"}},"/api/v1/user-novels/notifications":{"get":{"tags":["user-novels"],"summary":"Notifications","description":"A page of your notifications: new chapters, replies and announcements.","operationId":"notifications","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}},{"name":"notification_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by notification type (case-insensitive): SITE_UPDATE, CHAPTER_UPDATE, NOVEL_ADDITION, NOVEL_REQUEST, CONTRIBUTION, SOCIAL, PROGRESSION, GENERAL","title":"Notification Type"},"description":"Filter by notification type (case-insensitive): SITE_UPDATE, CHAPTER_UPDATE, NOVEL_ADDITION, NOVEL_REQUEST, CONTRIBUTION, SOCIAL, PROGRESSION, GENERAL"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":5,"x-freshness":"live","x-scope":"read:library","x-example-request":"GET /api/v1/user-novels/notifications?limit=2"}},"/api/v1/user-novels/{novel_id}":{"get":{"tags":["user-novels"],"summary":"Library entry","description":"Your library entry for one novel: status, rating and your reading position.","operationId":"library_entry","parameters":[{"name":"novel_id","in":"path","required":true,"schema":{"type":"integer","title":"Novel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNovelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"personalKey":[]}],"x-cost":1,"x-freshness":"live","x-scope":"read:library","x-example-request":"GET /api/v1/user-novels/1234"}}},"components":{"schemas":{"AlsoKnownAsItem":{"properties":{"name":{"type":"string","title":"Name"},"original":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original"}},"type":"object","required":["name"],"title":"AlsoKnownAsItem","description":"One of a novel's other titles, for the novel page's \"Also known as\" row\n(common/services/alternate_titles.py). `name` is what to show: the English\nversion of a Chinese name, or the name as stored when it is English or has\nno English version yet. `original` is the Chinese name behind an English\n`name`, else null."},"ApiKey":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["id","name","created_at","expires_at"],"title":"ApiKey"},"ApiKeyCreate":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"ApiKeyCreate","description":"POST /api/v1/oauth/keys. `name` is 1 to 40 characters after spaces\nare folded; the route checks it (422 `invalid_name`)."},"ApiKeyCreated":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","name","created_at","expires_at","key"],"title":"ApiKeyCreated"},"ApiKeyRevoked":{"properties":{"revoked":{"type":"boolean","title":"Revoked"}},"type":"object","required":["revoked"],"title":"ApiKeyRevoked"},"ApiKeysResponse":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/ApiKey"},"type":"array","title":"Keys"},"max_keys":{"type":"integer","title":"Max Keys"}},"type":"object","required":["keys","max_keys"],"title":"ApiKeysResponse"},"ApiUnitsMeter":{"properties":{"used_minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Used Minute"},"limit_minute":{"type":"integer","title":"Limit Minute"},"used_day":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Used Day"},"limit_day":{"type":"integer","title":"Limit Day"}},"type":"object","required":["limit_minute","limit_day"],"title":"ApiUnitsMeter"},"BasicNovelResponse":{"properties":{"id":{"type":"integer","title":"Id"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"translated_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Category"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"fandom":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fandom"}},"type":"object","required":["id"],"title":"BasicNovelResponse"},"BrowseNovel":{"properties":{"in_library":{"type":"boolean","title":"In Library","default":false},"library_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Library Status"},"uploader_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uploader User Id"},"uploader_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploader Username"},"uploader_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploader Image Url"},"uploader_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uploader Level"},"uploader_selected_title":{"anyOf":[{"$ref":"#/components/schemas/EarnedTitle"},{"type":"null"}]},"id":{"type":"integer","title":"Id"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"original_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Author"},"original_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Category"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"translated_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Author"},"translated_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Category"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"novel_metadata":{"anyOf":[{"$ref":"#/components/schemas/NovelMetadataResponse"},{"type":"null"}]},"preview":{"type":"boolean","title":"Preview","default":false},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"fandoms":{"items":{"type":"string"},"type":"array","title":"Fandoms","default":[]}},"type":"object","required":["id"],"title":"BrowseNovel"},"BrowseNovelCard":{"properties":{"in_library":{"type":"boolean","title":"In Library","default":false},"library_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Library Status"},"id":{"type":"integer","title":"Id"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"original_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Author"},"translated_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Author"},"original_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Category"},"translated_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Category"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"preview":{"type":"boolean","title":"Preview","default":false},"synopsis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Synopsis"},"novel_metadata":{"anyOf":[{"$ref":"#/components/schemas/NovelCardMetadata"},{"type":"null"}]}},"type":"object","required":["id"],"title":"BrowseNovelCard"},"BrowseResponse":{"properties":{"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/BrowseNovel"},"type":"array"},{"items":{"$ref":"#/components/schemas/BrowseNovelCard"},"type":"array"}],"title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"BrowseResponse"},"CatalogueHubBrowseParams":{"properties":{"genres":{"type":"string","title":"Genres"},"fandoms":{"type":"string","title":"Fandoms"},"tags":{"type":"string","title":"Tags"}},"type":"object","required":["genres","fandoms","tags"],"title":"CatalogueHubBrowseParams"},"CatalogueHubEntry":{"properties":{"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["name","count"],"title":"CatalogueHubEntry"},"CatalogueHubResponse":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"totals":{"$ref":"#/components/schemas/CatalogueHubTotals"},"browse_params":{"$ref":"#/components/schemas/CatalogueHubBrowseParams"},"genres":{"items":{"$ref":"#/components/schemas/CatalogueHubEntry"},"type":"array","title":"Genres"},"fandoms":{"items":{"$ref":"#/components/schemas/CatalogueHubEntry"},"type":"array","title":"Fandoms"},"tag_groups":{"items":{"$ref":"#/components/schemas/CatalogueHubTagGroup"},"type":"array","title":"Tag Groups"},"tags":{"items":{"$ref":"#/components/schemas/CatalogueHubTag"},"type":"array","title":"Tags"}},"type":"object","required":["generated_at","totals","browse_params","genres","fandoms","tag_groups","tags"],"title":"CatalogueHubResponse"},"CatalogueHubTag":{"properties":{"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"},"group":{"type":"string","title":"Group"}},"type":"object","required":["name","count","group"],"title":"CatalogueHubTag"},"CatalogueHubTagGroup":{"properties":{"slug":{"type":"string","title":"Slug"},"label":{"type":"string","title":"Label"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["slug","label","count"],"title":"CatalogueHubTagGroup"},"CatalogueHubTotals":{"properties":{"works":{"type":"integer","title":"Works"},"genres":{"type":"integer","title":"Genres"},"fandoms":{"type":"integer","title":"Fandoms"},"tags":{"type":"integer","title":"Tags"}},"type":"object","required":["works","genres","fandoms","tags"],"title":"CatalogueHubTotals"},"ChapterPageCurrent":{"properties":{"id":{"type":"integer","title":"Id"},"sequence_number":{"type":"integer","title":"Sequence Number"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"}},"type":"object","required":["id","sequence_number"],"title":"ChapterPageCurrent","description":"The signed-in reader's saved chapter, whichever page it is on, so the\n\"Continue reading\" card can show its title (owner, 2026-10-17)."},"ChapterPageItem":{"properties":{"id":{"type":"integer","title":"Id"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"sequence_number":{"type":"integer","title":"Sequence Number"},"is_current":{"type":"boolean","title":"Is Current","default":false},"word_count":{"type":"string","title":"Word Count","default":""},"views":{"type":"string","title":"Views","default":""},"indexed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Indexed","default":false},"created_at":{"type":"string","title":"Created At","default":""}},"type":"object","required":["id","sequence_number"],"title":"ChapterPageItem","description":"A paged-index row: `ChapterResponse` without `is_restricted`."},"ChapterPageResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ChapterPageItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"chapter_count":{"type":"integer","title":"Chapter Count"},"current_sequence":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Sequence"},"current_chapter":{"anyOf":[{"$ref":"#/components/schemas/ChapterPageCurrent"},{"type":"null"}]}},"type":"object","required":["items","total","skip","chapter_count"],"title":"ChapterPageResponse","description":"One page of a novel's chapter index (`GET /novels/{id}/chapters/page`).\n\n`total` counts the rows matching `search` (the pager's length);\n`chapter_count` counts the whole novel, search or not. `skip` is the\noffset actually served, which differs from the request when `around`\npicked the page or the request ran past the end. `current_sequence` is the\nsigned-in reader's saved chapter, wherever it falls, so \"jump to current\"\ncan fetch its page without the whole index. `current_chapter` is that\nchapter's id, number and titles, whichever page or search was asked for."},"ChapterSummaryItem":{"properties":{"chapter_id":{"type":"integer","title":"Chapter Id"},"sequence_number":{"type":"integer","title":"Sequence Number"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"summary":{"type":"string","title":"Summary"}},"type":"object","required":["chapter_id","sequence_number","summary"],"title":"ChapterSummaryItem"},"EarnedTitle":{"properties":{"code":{"type":"string","title":"Code"},"title":{"type":"string","title":"Title"},"rarity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rarity"},"festival":{"anyOf":[{"$ref":"#/components/schemas/FestivalTag"},{"type":"null"}]}},"type":"object","required":["code","title"],"title":"EarnedTitle"},"EntityRef":{"properties":{"id":{"type":"integer","title":"Id"},"original_name":{"type":"string","title":"Original Name"},"translated_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Name"},"pinyin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pinyin"}},"type":"object","required":["id","original_name"],"title":"EntityRef","description":"A pointer to another entity row, as carried by `canonical` (on an alias\nrow: the canonical it points at) and `alias_entities` (on a canonical row:\nthe rows pointing at it). Names only — enough to render \"Alias of X\" /\n\"Also: A · B\" and to open the row — never the full entity, so the glossary\npage does not grow a second copy of each aliased entity."},"EntitySourceTypeEnum":{"type":"string","enum":["ai","user"],"title":"EntitySourceTypeEnum"},"FestivalTag":{"properties":{"key":{"type":"string","title":"Key"},"year":{"type":"integer","title":"Year"},"zodiac":{"type":"string","title":"Zodiac"},"element":{"type":"string","title":"Element"}},"type":"object","required":["key","year","zodiac","element"],"title":"FestivalTag","description":"Which festival and year a festival award belongs to\n(`common/utils/festivals.py`). `zodiac` and `element` are lowercase, of\nthe Chinese year containing the window; `year` is Gregorian."},"GenderEnum":{"type":"string","enum":["masculine","feminine","neutral"],"title":"GenderEnum"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LibraryStatusCounts":{"properties":{"all":{"type":"integer","title":"All","default":0},"READING":{"type":"integer","title":"Reading","default":0},"PLAN_TO_READ":{"type":"integer","title":"Plan To Read","default":0},"PAUSED":{"type":"integer","title":"Paused","default":0},"COMPLETED":{"type":"integer","title":"Completed","default":0},"DROPPED":{"type":"integer","title":"Dropped","default":0}},"type":"object","title":"LibraryStatusCounts","description":"Bookmarks per reading status in the reader's whole library (the\nlibrary page's tab counts), whatever the request's filters, `q` and page.\n`all` also counts bookmarks with no status, which no other key does."},"LibraryViewsResponse":{"anyOf":[{"$ref":"#/components/schemas/UserLibraryResponse"},{"$ref":"#/components/schemas/UserLibraryCardResponse"}],"title":"LibraryViewsResponse"},"LimitMeter":{"properties":{"used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Used"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"},"remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining"}},"type":"object","title":"LimitMeter"},"MyLimitsResponse":{"properties":{"day_resets_at":{"type":"string","format":"date-time","title":"Day Resets At"},"chapters":{"$ref":"#/components/schemas/LimitMeter"},"api_units":{"anyOf":[{"$ref":"#/components/schemas/ApiUnitsMeter"},{"type":"null"}]},"tts_characters":{"$ref":"#/components/schemas/LimitMeter"},"original_views":{"$ref":"#/components/schemas/LimitMeter"}},"type":"object","required":["day_resets_at","chapters","tts_characters","original_views"],"title":"MyLimitsResponse"},"NotificationFull":{"properties":{"id":{"type":"integer","title":"Id"},"notification_type":{"type":"string","title":"Notification Type"},"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"is_read":{"type":"boolean","title":"Is Read"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Images"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","notification_type","kind","title","is_read","created_at"],"title":"NotificationFull"},"NotificationsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/NotificationFull"},"type":"array","title":"Items"}},"type":"object","required":["total","items"],"title":"NotificationsResponse"},"NovelCardMetadata":{"properties":{"word_count":{"type":"string","title":"Word Count","default":""},"reader_count":{"type":"string","title":"Reader Count","default":""},"rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Count","default":0},"good_rating_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Good Rating Percent","default":0},"score_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Score Percent","default":0},"rating_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Score","default":0}},"type":"object","title":"NovelCardMetadata","description":"The numbers a list row draws. Same names, types and formatting as the\nsame fields of `NovelMetadataResponse`."},"NovelDetailMetadataResponse":{"properties":{"chapter_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chapter Count","default":0},"stored_chapter_count":{"type":"integer","title":"Stored Chapter Count","default":0},"release_pace":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Release Pace","default":0.0},"rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Count","default":0},"review_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Review Count","default":0},"good_rating_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Good Rating Percent","default":0},"neutral_rating_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Neutral Rating Percent","default":0},"bad_rating_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bad Rating Percent","default":0},"score_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Score Percent"},"rating_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Score"},"views":{"type":"string","title":"Views","default":""},"bookmark_count":{"type":"string","title":"Bookmark Count","default":""},"reader_count":{"type":"string","title":"Reader Count","default":""},"word_count":{"type":"string","title":"Word Count","default":""},"last_added":{"type":"string","title":"Last Added","default":""},"last_added_relative":{"type":"string","title":"Last Added Relative","default":""},"daily_readers":{"type":"string","title":"Daily Readers","default":""},"weekly_readers":{"type":"string","title":"Weekly Readers","default":""},"monthly_readers":{"type":"string","title":"Monthly Readers","default":""},"daily_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Rank"},"weekly_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weekly Rank"},"monthly_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Rank"},"all_time_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"All Time Rank"},"daily_rank_change":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Rank Change"},"weekly_rank_change":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weekly Rank Change"},"monthly_rank_change":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Rank Change"},"good_rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Good Rating Count"},"neutral_rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Neutral Rating Count"},"bad_rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bad Rating Count"}},"type":"object","title":"NovelDetailMetadataResponse","description":"The novel page's metadata: the list shape plus the three rating counts,\nso the page can redraw its bar and score from counts after the reader's own\nrating changes (2026-10-19). List and card rows do not carry them. None on a\ndetail payload cached before the counts were added."},"NovelDetailResponse":{"properties":{"id":{"type":"integer","title":"Id"},"daosearch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Daosearch Url"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"original_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Description"},"original_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Author"},"original_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Category"},"original_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Status"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"translated_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Description"},"description_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description Source"},"translated_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Author"},"translated_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Category"},"translated_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Status"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image_thumb_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Thumb Url"},"ai_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Description"},"novel_metadata":{"anyOf":[{"$ref":"#/components/schemas/NovelDetailMetadataResponse"},{"type":"null"}]},"tags":{"items":{"$ref":"#/components/schemas/NovelTagResponse"},"type":"array","title":"Tags","default":[]},"tag_facets":{"items":{"$ref":"#/components/schemas/TagFacetGroupResponse"},"type":"array","title":"Tag Facets","default":[]},"reviews":{"items":{"$ref":"#/components/schemas/UserReviewResponse"},"type":"array","title":"Reviews","default":[]},"user_rating":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Rating"},"user_review":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Review"},"user_bookmarked":{"type":"boolean","title":"User Bookmarked","default":false},"user_reading_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Reading Status"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"uploader_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploader Username"},"uploader_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uploader User Id"},"uploader_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploader Image Url"},"uploader_selected_title":{"anyOf":[{"$ref":"#/components/schemas/EarnedTitle"},{"type":"null"}]},"uploader_level":{"type":"integer","title":"Uploader Level","default":0},"fandom":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fandom"},"glossary_genres":{"items":{"type":"string"},"type":"array","title":"Glossary Genres","default":[]},"preview":{"type":"boolean","title":"Preview","default":false},"estimated_word_count":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Word Count"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"protagonist_gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protagonist Gender"},"current_chapter_sequence":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Chapter Sequence"},"entities_preview":{"items":{},"type":"array","title":"Entities Preview","default":[]},"feedback_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feedback Summary"},"similar_preview":{"items":{},"type":"array","title":"Similar Preview","default":[]},"indexed_chapter_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Indexed Chapter Count"},"recap_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recap Count"},"recap_covered_through":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recap Covered Through"},"also_known_as":{"items":{"$ref":"#/components/schemas/AlsoKnownAsItem"},"type":"array","title":"Also Known As","default":[]}},"type":"object","required":["id"],"title":"NovelDetailResponse"},"NovelEntityWithStatsResponse":{"properties":{"id":{"type":"integer","title":"Id"},"original_name":{"type":"string","title":"Original Name"},"translated_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Name"},"user_translation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Translation"},"user_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Note"},"gender":{"$ref":"#/components/schemas/GenderEnum"},"source_type":{"$ref":"#/components/schemas/EntitySourceTypeEnum"},"total_occurrences":{"type":"integer","title":"Total Occurrences","default":0},"chapter_appearances":{"type":"integer","title":"Chapter Appearances","default":0},"novel_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Novel Title"},"is_hidden":{"type":"boolean","title":"Is Hidden","default":false},"is_general":{"type":"boolean","title":"Is General","default":false},"has_wiki":{"type":"boolean","title":"Has Wiki","default":false},"wiki_entity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wiki Entity Id"},"upvote_count":{"type":"integer","title":"Upvote Count","default":0},"downvote_count":{"type":"integer","title":"Downvote Count","default":0},"my_vote":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"My Vote"},"chapter_sequence_numbers":{"items":{"type":"integer"},"type":"array","title":"Chapter Sequence Numbers","default":[]},"chapter_ids":{"items":{"type":"string"},"type":"array","title":"Chapter Ids","default":[]},"gender_segments":{"items":{"$ref":"#/components/schemas/fastapi_app__schemas__novel__GenderSegmentResponse"},"type":"array","title":"Gender Segments","default":[]},"hidden_segments":{"items":{"$ref":"#/components/schemas/fastapi_app__schemas__novel__HiddenSegmentResponse"},"type":"array","title":"Hidden Segments","default":[]},"kind":{"anyOf":[{"type":"string","enum":["character","place","item","material","technique","organization","concept","title","other","junk"]},{"type":"null"}],"title":"Kind"},"canonical":{"anyOf":[{"$ref":"#/components/schemas/EntityRef"},{"type":"null"}]},"alias_entities":{"items":{"$ref":"#/components/schemas/EntityRef"},"type":"array","title":"Alias Entities","default":[]},"original_pinyin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Pinyin"}},"type":"object","required":["id","original_name","gender","source_type"],"title":"NovelEntityWithStatsResponse"},"NovelEnvelope":{"properties":{"id":{"type":"integer","title":"Id"},"slug":{"type":"string","title":"Slug"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"translated_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Category"}},"type":"object","required":["id","slug"],"title":"NovelEnvelope","description":"The novel a sub-resource listing belongs to.\n\nCarried by the per-novel listings (entities, entity search, summaries) so a\npage rendered from one of them has its own title and canonical URL without a\nsecond round trip. `slug` is derived the same way as everywhere else\n(`generate_slug` over the translated title, falling back to the original)."},"NovelGeneralEntityResponse":{"properties":{"id":{"type":"integer","title":"Id"},"original_name":{"type":"string","title":"Original Name"},"translated_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Name"},"user_translation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Translation"},"user_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Note"},"gender":{"$ref":"#/components/schemas/GenderEnum"},"source_type":{"$ref":"#/components/schemas/EntitySourceTypeEnum"},"total_occurrences":{"type":"integer","title":"Total Occurrences","default":0},"chapter_appearances":{"type":"integer","title":"Chapter Appearances","default":0},"novel_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Novel Title"},"is_hidden":{"type":"boolean","title":"Is Hidden","default":false},"is_general":{"type":"boolean","title":"Is General","default":false},"has_wiki":{"type":"boolean","title":"Has Wiki","default":false},"wiki_entity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wiki Entity Id"},"upvote_count":{"type":"integer","title":"Upvote Count","default":0},"downvote_count":{"type":"integer","title":"Downvote Count","default":0},"my_vote":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"My Vote"},"chapter_sequence_numbers":{"items":{"type":"integer"},"type":"array","title":"Chapter Sequence Numbers","default":[]},"chapter_ids":{"items":{"type":"string"},"type":"array","title":"Chapter Ids","default":[]},"gender_segments":{"items":{"$ref":"#/components/schemas/fastapi_app__schemas__novel__GenderSegmentResponse"},"type":"array","title":"Gender Segments","default":[]},"hidden_segments":{"items":{"$ref":"#/components/schemas/fastapi_app__schemas__novel__HiddenSegmentResponse"},"type":"array","title":"Hidden Segments","default":[]},"kind":{"anyOf":[{"type":"string","enum":["character","place","item","material","technique","organization","concept","title","other","junk"]},{"type":"null"}],"title":"Kind"},"canonical":{"anyOf":[{"$ref":"#/components/schemas/EntityRef"},{"type":"null"}]},"alias_entities":{"items":{"$ref":"#/components/schemas/EntityRef"},"type":"array","title":"Alias Entities","default":[]},"original_pinyin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Pinyin"},"is_excluded":{"type":"boolean","title":"Is Excluded","default":false},"applies":{"type":"boolean","title":"Applies","default":true},"local_entity":{"anyOf":[{"$ref":"#/components/schemas/NovelLocalEntityRef"},{"type":"null"}]},"in_effect":{"type":"string","enum":["general","local","none"],"title":"In Effect","default":"general"}},"type":"object","required":["id","original_name","gender","source_type"],"title":"NovelGeneralEntityResponse","description":"A general (shared) entity as ONE novel sees it: a glossary row whose\n`total_occurrences` / `chapter_appearances` and wiki fields are this\nnovel's, plus what the novel does with the term."},"NovelInLibraryCardResponse":{"properties":{"novel_id":{"type":"integer","title":"Novel Id"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"reading_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reading Status"},"rating":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rating"},"current_chapter_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Chapter Number"},"last_read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Read At"},"chapter_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chapter Count"},"unread_chapters":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unread Chapters"},"last_chapter_update_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Chapter Update At"},"preview":{"type":"boolean","title":"Preview","default":false},"last_read_relative":{"type":"string","title":"Last Read Relative","default":""},"last_updated_relative":{"type":"string","title":"Last Updated Relative","default":""},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},"type":"object","required":["novel_id"],"title":"NovelInLibraryCardResponse","description":"The library row without the three fields no caller reads\n(`is_bookmarked`, `stored_chapter_count`, `stored_unread_chapters`):\n`GET /user-novels/bookmarks?view=card` and the `/home/me` shelves\n(2026-10-13). The base of `NovelInLibraryResponse`, so a full row is\nalso a valid card row."},"NovelInLibraryResponse":{"properties":{"novel_id":{"type":"integer","title":"Novel Id"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"reading_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reading Status"},"rating":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rating"},"current_chapter_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Chapter Number"},"last_read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Read At"},"chapter_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chapter Count"},"unread_chapters":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unread Chapters"},"last_chapter_update_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Chapter Update At"},"preview":{"type":"boolean","title":"Preview","default":false},"last_read_relative":{"type":"string","title":"Last Read Relative","default":""},"last_updated_relative":{"type":"string","title":"Last Updated Relative","default":""},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"is_bookmarked":{"type":"boolean","title":"Is Bookmarked"},"stored_chapter_count":{"type":"integer","title":"Stored Chapter Count","default":0},"stored_unread_chapters":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stored Unread Chapters"}},"type":"object","required":["novel_id","is_bookmarked"],"title":"NovelInLibraryResponse"},"NovelLocalEntityRef":{"properties":{"id":{"type":"integer","title":"Id"},"original_name":{"type":"string","title":"Original Name"},"translated_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Name"},"is_hidden":{"type":"boolean","title":"Is Hidden","default":false}},"type":"object","required":["id","original_name"],"title":"NovelLocalEntityRef","description":"The novel's own row for the Chinese name a general entity carries: a\nfork's copy, or the row the general overrides while it applies."},"NovelMetadataResponse":{"properties":{"chapter_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chapter Count","default":0},"stored_chapter_count":{"type":"integer","title":"Stored Chapter Count","default":0},"release_pace":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Release Pace","default":0.0},"rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Count","default":0},"review_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Review Count","default":0},"good_rating_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Good Rating Percent","default":0},"neutral_rating_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Neutral Rating Percent","default":0},"bad_rating_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bad Rating Percent","default":0},"score_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Score Percent"},"rating_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Score"},"views":{"type":"string","title":"Views","default":""},"bookmark_count":{"type":"string","title":"Bookmark Count","default":""},"reader_count":{"type":"string","title":"Reader Count","default":""},"word_count":{"type":"string","title":"Word Count","default":""},"last_added":{"type":"string","title":"Last Added","default":""},"last_added_relative":{"type":"string","title":"Last Added Relative","default":""},"daily_readers":{"type":"string","title":"Daily Readers","default":""},"weekly_readers":{"type":"string","title":"Weekly Readers","default":""},"monthly_readers":{"type":"string","title":"Monthly Readers","default":""},"daily_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Rank"},"weekly_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weekly Rank"},"monthly_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Rank"},"all_time_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"All Time Rank"},"daily_rank_change":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Rank Change"},"weekly_rank_change":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weekly Rank Change"},"monthly_rank_change":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Rank Change"}},"type":"object","title":"NovelMetadataResponse"},"NovelTagResponse":{"properties":{"original_name":{"type":"string","title":"Original Name"},"translated_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Name"}},"type":"object","required":["original_name"],"title":"NovelTagResponse"},"PaginatedEntityResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/NovelEntityWithStatsResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"novel":{"$ref":"#/components/schemas/NovelEnvelope"}},"type":"object","required":["items","total","novel"],"title":"PaginatedEntityResponse"},"PaginatedNovelGeneralEntityResponse":{"properties":{"main_genre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Main Genre"},"glossary_genres":{"items":{"type":"string"},"type":"array","title":"Glossary Genres","default":[]},"is_fanfic":{"type":"boolean","title":"Is Fanfic","default":false},"items":{"items":{"$ref":"#/components/schemas/NovelGeneralEntityResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"exclude_all_general_entities":{"type":"boolean","title":"Exclude All General Entities"},"occurring_total":{"type":"integer","title":"Occurring Total"},"excluded_total":{"type":"integer","title":"Excluded Total"},"novel":{"$ref":"#/components/schemas/NovelEnvelope"}},"type":"object","required":["items","total","exclude_all_general_entities","occurring_total","excluded_total","novel"],"title":"PaginatedNovelGeneralEntityResponse","description":"GET /novels/{id}/general-entities. `total` counts the rows matching the\nfilters; `occurring_total` every general linked in the novel's chapters and\n`excluded_total` every one it has switched off, whatever the filters.\n`main_genre` / `glossary_genres` / `is_fanfic` (2026-10-10) drive the\nextra-glossary-genres control beside the novel-wide switch."},"PopularNovel":{"properties":{"in_library":{"type":"boolean","title":"In Library","default":false},"library_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Library Status"},"uploader_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uploader User Id"},"uploader_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploader Username"},"uploader_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploader Image Url"},"uploader_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uploader Level"},"uploader_selected_title":{"anyOf":[{"$ref":"#/components/schemas/EarnedTitle"},{"type":"null"}]},"id":{"type":"integer","title":"Id"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"original_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Author"},"original_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Category"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"translated_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Author"},"translated_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Category"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"novel_metadata":{"anyOf":[{"$ref":"#/components/schemas/NovelMetadataResponse"},{"type":"null"}]},"preview":{"type":"boolean","title":"Preview","default":false},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"fandoms":{"items":{"type":"string"},"type":"array","title":"Fandoms","default":[]},"list_move":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Move"},"list_new":{"type":"boolean","title":"List New","default":false}},"type":"object","required":["id"],"title":"PopularNovel"},"PopularNovelCard":{"properties":{"in_library":{"type":"boolean","title":"In Library","default":false},"library_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Library Status"},"id":{"type":"integer","title":"Id"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"original_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Title"},"translated_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Title"},"original_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Author"},"translated_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Author"},"original_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Category"},"translated_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translated Category"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"preview":{"type":"boolean","title":"Preview","default":false},"synopsis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Synopsis"},"novel_metadata":{"anyOf":[{"$ref":"#/components/schemas/NovelCardMetadata"},{"type":"null"}]},"list_move":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Move"},"list_new":{"type":"boolean","title":"List New","default":false}},"type":"object","required":["id"],"title":"PopularNovelCard"},"PopularResponse":{"properties":{"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/PopularNovel"},"type":"array"},{"items":{"$ref":"#/components/schemas/PopularNovelCard"},"type":"array"}],"title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"PopularResponse"},"RecapArcDetail":{"properties":{"index":{"type":"integer","title":"Index"},"start_seq":{"type":"integer","title":"Start Seq"},"end_seq":{"type":"integer","title":"End Seq"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"recap":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recap"},"status":{"type":"string","enum":["ready","writing","waiting","pending","incomplete"],"title":"Status"}},"type":"object","required":["index","start_seq","end_seq","status"],"title":"RecapArcDetail"},"RecapArcResponse":{"properties":{"novel_id":{"type":"integer","title":"Novel Id"},"arc":{"$ref":"#/components/schemas/RecapArcDetail"},"chapters":{"items":{"$ref":"#/components/schemas/ChapterSummaryItem"},"type":"array","title":"Chapters"}},"type":"object","required":["novel_id","arc","chapters"],"title":"RecapArcResponse"},"RecapArcSummary":{"properties":{"index":{"type":"integer","title":"Index"},"start_seq":{"type":"integer","title":"Start Seq"},"end_seq":{"type":"integer","title":"End Seq"},"summary_count":{"type":"integer","title":"Summary Count","default":0},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview"},"status":{"type":"string","enum":["ready","writing","waiting","pending","incomplete"],"title":"Status"}},"type":"object","required":["index","start_seq","end_seq","status"],"title":"RecapArcSummary"},"RecapTreeResponse":{"properties":{"volume_count":{"type":"integer","title":"Volume Count","default":0},"written_volume_count":{"type":"integer","title":"Written Volume Count","default":0},"arc_count":{"type":"integer","title":"Arc Count","default":0},"summary_count":{"type":"integer","title":"Summary Count","default":0},"is_preview":{"type":"boolean","title":"Is Preview","default":false},"novel_id":{"type":"integer","title":"Novel Id"},"novel":{"$ref":"#/components/schemas/NovelEnvelope"},"total_chapters":{"type":"integer","title":"Total Chapters"},"arc_size":{"type":"integer","title":"Arc Size"},"volume_size":{"type":"integer","title":"Volume Size"},"current_chapter_sequence":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Chapter Sequence"},"current_arc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Arc"},"open_arc":{"type":"integer","title":"Open Arc"},"volumes":{"items":{"$ref":"#/components/schemas/RecapVolume"},"type":"array","title":"Volumes"}},"type":"object","required":["novel_id","novel","total_chapters","arc_size","volume_size","open_arc","volumes"],"title":"RecapTreeResponse"},"RecapVolume":{"properties":{"index":{"type":"integer","title":"Index"},"start_seq":{"type":"integer","title":"Start Seq"},"end_seq":{"type":"integer","title":"End Seq"},"summary_count":{"type":"integer","title":"Summary Count","default":0},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview"},"recap":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recap"},"status":{"type":"string","enum":["ready","writing","waiting","pending","incomplete"],"title":"Status"},"arcs":{"items":{"$ref":"#/components/schemas/RecapArcSummary"},"type":"array","title":"Arcs"}},"type":"object","required":["index","start_seq","end_seq","status","arcs"],"title":"RecapVolume"},"SortOption":{"type":"string","enum":["last_read","last_updated","unread_chapters","last_added"],"title":"SortOption"},"TagFacetGroupResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"label":{"type":"string","title":"Label"},"tags":{"items":{"$ref":"#/components/schemas/NovelTagResponse"},"type":"array","title":"Tags","default":[]}},"type":"object","required":["slug","label"],"title":"TagFacetGroupResponse","description":"One facet of a novel's tags, for the grouped novel-page display.\n\n`slug` is the stable identifier to switch on; `label` is display text and may\nbe re-worded. Only facets the novel actually has are emitted, in the reading\norder defined by canonical_tags.TAG_FACET_DISPLAY."},"TimeRange":{"type":"string","enum":["daily","weekly","monthly","all_time"],"title":"TimeRange"},"UserLibraryCardResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/NovelInLibraryCardResponse"},"type":"array","title":"Items"},"status_counts":{"anyOf":[{"$ref":"#/components/schemas/LibraryStatusCounts"},{"type":"null"}]}},"type":"object","required":["total","items"],"title":"UserLibraryCardResponse","description":"`/bookmarks?view=card`: `UserLibraryResponse` with card rows."},"UserLibraryResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/NovelInLibraryResponse"},"type":"array","title":"Items"},"status_counts":{"anyOf":[{"$ref":"#/components/schemas/LibraryStatusCounts"},{"type":"null"}]}},"type":"object","required":["total","items"],"title":"UserLibraryResponse"},"UserNovelResponse":{"properties":{"novel_id":{"type":"integer","title":"Novel Id"},"is_bookmarked":{"type":"boolean","title":"Is Bookmarked"},"reading_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reading Status"},"rating":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rating"},"review":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review"},"current_chapter_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Chapter Id"},"current_chapter_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Chapter Title"},"current_chapter_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Chapter Number"},"last_read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Read At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"mute_updates":{"type":"boolean","title":"Mute Updates","default":false},"auto_change":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auto Change"},"progress_conflict":{"type":"boolean","title":"Progress Conflict","default":false}},"type":"object","required":["novel_id","is_bookmarked","created_at","updated_at"],"title":"UserNovelResponse"},"UserReviewResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"public_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Username"},"public_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Image Url"},"selected_title":{"anyOf":[{"$ref":"#/components/schemas/EarnedTitle"},{"type":"null"}]},"level":{"type":"integer","title":"Level","default":0},"is_mod":{"type":"boolean","title":"Is Mod","default":false},"is_bot":{"type":"boolean","title":"Is Bot","default":false},"rating":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rating"},"review":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review"},"content_translated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Translated"},"content_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Language"},"gif":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Gif"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"current_chapter_sequence":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Chapter Sequence"},"reply_count":{"type":"integer","title":"Reply Count","default":0},"upvote_count":{"type":"integer","title":"Upvote Count","default":0},"downvote_count":{"type":"integer","title":"Downvote Count","default":0},"user_vote":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"User Vote"},"created_at":{"type":"string","title":"Created At","default":""}},"type":"object","required":["user_id","updated_at"],"title":"UserReviewResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"fastapi_app__schemas__novel__GenderSegmentResponse":{"properties":{"starts_at_chapter_id":{"type":"integer","title":"Starts At Chapter Id"},"starts_at_chapter_sequence_number":{"type":"integer","title":"Starts At Chapter Sequence Number"},"gender":{"$ref":"#/components/schemas/GenderEnum"},"single_chapter":{"type":"boolean","title":"Single Chapter","default":false}},"type":"object","required":["starts_at_chapter_id","starts_at_chapter_sequence_number","gender"],"title":"GenderSegmentResponse","description":"Chapter-bounded gender override for an entity. From the named chapter\nonwards, the entity's effective gender is `gender`. Always empty for\ngeneral entities."},"fastapi_app__schemas__novel__HiddenSegmentResponse":{"properties":{"starts_at_chapter_id":{"type":"integer","title":"Starts At Chapter Id"},"starts_at_chapter_sequence_number":{"type":"integer","title":"Starts At Chapter Sequence Number"},"is_hidden":{"type":"boolean","title":"Is Hidden"},"single_chapter":{"type":"boolean","title":"Single Chapter","default":false}},"type":"object","required":["starts_at_chapter_id","starts_at_chapter_sequence_number","is_hidden"],"title":"HiddenSegmentResponse","description":"Chapter-bounded active/inactive override for an entity. Always empty\nfor general entities."}},"securitySchemes":{"personalKey":{"type":"http","scheme":"bearer","description":"A personal API key, rtk_..."},"session":{"type":"apiKey","in":"cookie","name":"patreon_session"}}},"x-rt-routes":[{"id":"novels_search","method":"GET","path":"/api/v1/novels/","cost":5,"freshness":"live","description":"Search and browse novels: title or author text, genre, tags, fandom, status and sort, 20 a page.","personal":false,"scope":"read:catalog","example_request":"GET /api/v1/novels/?title=sword&limit=2","example_response":{"items":[{"id":1234,"slug":"sword-god","translated_title":"Sword God","original_title":"剑神","translated_author":"Ink Pavilion","translated_category":"Xianxia","status":"Ongoing"}],"total":87}},{"id":"novels_hub","method":"GET","path":"/api/v1/novels/hub","cost":5,"freshness":"up to 1 hour","description":"Every genre, fandom and tag with its number of novels: the values novels_search filters on.","personal":false,"scope":"read:catalog","example_request":"GET /api/v1/novels/hub","example_response":{"totals":{"works":41200,"genres":24,"fandoms":310,"tags":1450},"genres":[{"name":"Xianxia","count":5120}],"fandoms":[{"name":"Naruto","count":412}],"tags":[{"name":"Cultivation","count":6011}]}},{"id":"novels_popular","method":"GET","path":"/api/v1/novels/popular/{time_range}","cost":5,"freshness":"up to 10 minutes","description":"The most read novels for daily, weekly, monthly or all time, with each novel's movement on the list.","personal":false,"scope":"read:catalog","example_request":"GET /api/v1/novels/popular/weekly?include_fanfiction=all&limit=2","example_response":{"items":[{"id":1234,"translated_title":"Sword God","novel_metadata":{"reader_count":"8.1K"},"list_move":3,"list_new":false}],"total":200}},{"id":"novel_detail","method":"GET","path":"/api/v1/novels/{novel_id}","cost":1,"freshness":"live","description":"One novel: titles, author, synopsis, genre, tags, status, chapter count, your shelf and place. No source address.","personal":false,"scope":"read:catalog","example_request":"GET /api/v1/novels/1234","example_response":{"id":1234,"translated_title":"Sword God","original_title":"剑神","translated_author":"Ink Pavilion","translated_category":"Xianxia","novel_metadata":{"chapter_count":1520,"word_count":"4.6M"},"user_bookmarked":true,"user_reading_status":"READING","current_chapter_sequence":37}},{"id":"novel_chapters","method":"GET","path":"/api/v1/novels/{novel_id}/chapters/page","cost":5,"freshness":"up to 1 minute","description":"One page of a novel's chapter list: numbers and titles, never chapter text. Search by title or number.","personal":false,"scope":"read:catalog","example_request":"GET /api/v1/novels/1234/chapters/page?skip=0&limit=2","example_response":{"items":[{"id":99001,"sequence_number":1,"translated_title":"The Broken Sword","original_title":"断剑","word_count":"3.1K"}],"total":1520,"skip":0,"chapter_count":1520,"current_sequence":37}},{"id":"novel_glossary","method":"GET","path":"/api/v1/novels/{novel_id}/entities","cost":5,"freshness":"live","description":"A page of the novel's glossary: characters, places and terms with their English names.","personal":false,"scope":"read:glossary","example_request":"GET /api/v1/novels/1234/entities?limit=2","example_response":{"items":[{"id":501,"original_name":"林凡","translated_name":"Lin Fan","kind":"character","total_occurrences":4120}],"total":340}},{"id":"novel_glossary_search","method":"GET","path":"/api/v1/novels/{novel_id}/entities/search","cost":5,"freshness":"live","description":"Search the novel's glossary by Chinese or English name.","personal":false,"scope":"read:glossary","example_request":"GET /api/v1/novels/1234/entities/search?query=Lin","example_response":{"items":[{"id":501,"original_name":"林凡","translated_name":"Lin Fan","kind":"character","total_occurrences":4120}],"total":1}},{"id":"novel_general_glossary","method":"GET","path":"/api/v1/novels/{novel_id}/general-entities","cost":5,"freshness":"live","description":"The shared glossary terms (fandom and genre-wide names) that apply to this novel.","personal":false,"scope":"read:glossary","example_request":"GET /api/v1/novels/1234/general-entities?limit=2","example_response":{"items":[{"id":77,"original_name":"筑基","translated_name":"Foundation Establishment"}],"total":52}},{"id":"novel_recaps","method":"GET","path":"/api/v1/novels/{novel_id}/recaps","cost":1,"freshness":"live","description":"The novel's volume and arc recap tree, opened at your arc; view=structure leaves out story text.","personal":false,"scope":"read:recaps","example_request":"GET /api/v1/novels/1234/recaps?view=structure","example_response":{"novel_id":1234,"total_chapters":1200,"arc_size":25,"volume_size":100,"current_chapter_sequence":37,"current_arc":1,"open_arc":1,"volumes":[{"index":0,"start_seq":1,"end_seq":100,"status":"ready"}]}},{"id":"novel_recap_arc","method":"GET","path":"/api/v1/novels/{novel_id}/recaps/arcs/{arc_index}","cost":1,"freshness":"live","description":"One arc's recap and its chapter summaries.","personal":false,"scope":"read:recaps","example_request":"GET /api/v1/novels/1234/recaps/arcs/1","example_response":{"novel_id":1234,"arc":{"index":1,"start_seq":26,"end_seq":50,"title":"Leaving the Village","recap":"Lin Fan leaves the village..."},"chapters":[{"chapter_id":99026,"sequence_number":26,"translated_title":"The Sect Gate","summary":"Lin Fan reaches the sect gate."}]}},{"id":"library","method":"GET","path":"/api/v1/user-novels/bookmarks","cost":5,"freshness":"live","description":"Your library: a page of your saved novels with reading status and where you are in each.","personal":true,"scope":"read:library","example_request":"GET /api/v1/user-novels/bookmarks?limit=2","example_response":{"total":41,"items":[{"novel_id":1234,"translated_title":"Sword God","reading_status":"READING","current_chapter_number":37}]}},{"id":"library_entry","method":"GET","path":"/api/v1/user-novels/{novel_id}","cost":1,"freshness":"live","description":"Your library entry for one novel: status, rating and your reading position.","personal":true,"scope":"read:library","example_request":"GET /api/v1/user-novels/1234","example_response":{"novel_id":1234,"is_bookmarked":true,"reading_status":"READING","current_chapter_id":99037,"current_chapter_number":37,"last_read_at":"2026-11-01T20:14:03Z"}},{"id":"notifications","method":"GET","path":"/api/v1/user-novels/notifications","cost":5,"freshness":"live","description":"A page of your notifications: new chapters, replies and announcements.","personal":true,"scope":"read:library","example_request":"GET /api/v1/user-novels/notifications?limit=2","example_response":{"total":9,"items":[{"id":8812,"notification_type":"CHAPTER_UPDATE","title":"Sword God","message":"3 new chapters","is_read":false,"created_at":"2026-11-02T06:00:00Z"}]}},{"id":"my_limits","method":"GET","path":"/api/v1/limits/me","cost":1,"freshness":"live","description":"Your limits today: chapters (one ceiling for site, downloads and tools), read-aloud, originals, key units.","personal":true,"scope":"read:library","example_request":"GET /api/v1/limits/me","example_response":{"day_resets_at":"2026-11-03T00:00:00Z","chapters":{"used":212,"limit":1500,"remaining":1288},"api_units":{"used_minute":6,"limit_minute":120,"used_day":340,"limit_day":10000},"tts_characters":{"used":48210,"limit":1200000,"remaining":1151790},"original_views":{"used":0,"limit":1500,"remaining":1500}}}]}