{ "openapi": "3.0.1", "info": { "title": "Kavita", "description": "Kavita provides a set of APIs that are authenticated by JWT. JWT token can be copied from local storage. Assume all fields of a payload are required.", "license": { "name": "GPL-3.0", "url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE" }, "version": "0.8.1.3" }, "servers": [ { "url": "{protocol}://{hostpath}", "variables": { "protocol": { "default": "http", "enum": [ "http", "https" ] }, "hostpath": { "default": "localhost:5000" } } } ], "paths": { "/api/Account/reset-password": { "post": { "tags": [ "Account" ], "summary": "Update a user's password", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResetPasswordDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ResetPasswordDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ResetPasswordDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Account/register": { "post": { "tags": [ "Account" ], "summary": "Register the first user (admin) on the server. Will not do anything if an admin is already confirmed", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/RegisterDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/RegisterDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } } } }, "/api/Account/login": { "post": { "tags": [ "Account" ], "summary": "Perform a login. Will send JWT Token of the logged in user back.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/LoginDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/LoginDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } } } }, "/api/Account/refresh-account": { "get": { "tags": [ "Account" ], "summary": "Returns an up-to-date user account", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } } } }, "/api/Account/refresh-token": { "post": { "tags": [ "Account" ], "summary": "Refreshes the user's JWT token", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenRequestDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/TokenRequestDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/TokenRequestDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/TokenRequestDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/TokenRequestDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/TokenRequestDto" } } } } } } }, "/api/Account/roles": { "get": { "tags": [ "Account" ], "summary": "Get All Roles back. See API.Constants.PolicyConstants", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "type": "string" } } }, "application/json": { "schema": { "type": "array", "items": { "type": "string" } } }, "text/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } }, "/api/Account/reset-api-key": { "post": { "tags": [ "Account" ], "summary": "Resets the API Key assigned with a user", "description": "This will log unauthorized requests to Security log", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Account/update/email": { "post": { "tags": [ "Account" ], "summary": "Initiates the flow to update a user's email address.\r\n \r\nIf email is not setup, then the email address is not changed in this API. A confirmation link is sent/dumped which will\r\nvalidate the email. It must be confirmed for the email to update.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateEmailDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateEmailDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateEmailDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Account/update/age-restriction": { "post": { "tags": [ "Account" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAgeRestrictionDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateAgeRestrictionDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateAgeRestrictionDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Account/update": { "post": { "tags": [ "Account" ], "summary": "Update the user account. This can only affect Username, Email (will require confirming), Roles, and Library access.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateUserDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateUserDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Account/invite-url": { "get": { "tags": [ "Account" ], "summary": "Requests the Invite Url for the UserId. Will return error if user is already validated.", "parameters": [ { "name": "userId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "withBaseUrl", "in": "query", "description": "Include the \"https://ip:port/\" in the generated link", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Account/invite": { "post": { "tags": [ "Account" ], "summary": "Invites a user to the server. Will generate a setup link for continuing setup. If email is not setup, a link will be presented to user to continue setup.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InviteUserDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/InviteUserDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/InviteUserDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Account/confirm-email": { "post": { "tags": [ "Account" ], "summary": "Last step in authentication flow, confirms the email token for email", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConfirmEmailDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ConfirmEmailDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ConfirmEmailDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } } } }, "/api/Account/confirm-email-update": { "post": { "tags": [ "Account" ], "summary": "Final step in email update change. Given a confirmation token and the email, this will finish the email change.", "description": "This will force connected clients to re-authenticate", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConfirmEmailUpdateDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ConfirmEmailUpdateDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ConfirmEmailUpdateDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Account/confirm-password-reset": { "post": { "tags": [ "Account" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConfirmPasswordResetDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ConfirmPasswordResetDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ConfirmPasswordResetDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Account/forgot-password": { "post": { "tags": [ "Account" ], "summary": "Will send user a link to update their password to their email or prompt them if not accessible", "parameters": [ { "name": "email", "in": "query", "description": "", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Account/email-confirmed": { "get": { "tags": [ "Account" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Account/confirm-migration-email": { "post": { "tags": [ "Account" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConfirmMigrationEmailDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ConfirmMigrationEmailDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ConfirmMigrationEmailDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } } } }, "/api/Account/resend-confirmation-email": { "post": { "tags": [ "Account" ], "summary": "Resend an invite to a user already invited", "parameters": [ { "name": "userId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/InviteUserResponse" } }, "application/json": { "schema": { "$ref": "#/components/schemas/InviteUserResponse" } }, "text/json": { "schema": { "$ref": "#/components/schemas/InviteUserResponse" } } } } } } }, "/api/Account/opds-url": { "get": { "tags": [ "Account" ], "summary": "Returns the OPDS url for this user", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Account/is-email-valid": { "get": { "tags": [ "Account" ], "summary": "Is the user's current email valid or not", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Admin/exists": { "get": { "tags": [ "Admin" ], "summary": "Checks if an admin exists on the system. This is essentially a check to validate if the system has been setup.", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Admin/update-chapter-progress": { "post": { "tags": [ "Admin" ], "summary": "Set the progress information for a particular user", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserProgressDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateUserProgressDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateUserProgressDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Book/{chapterId}/book-info": { "get": { "tags": [ "Book" ], "summary": "Retrieves information for the PDF and Epub reader", "description": "This only applies to Epub or PDF files", "parameters": [ { "name": "chapterId", "in": "path", "description": "", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/BookInfoDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/BookInfoDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/BookInfoDto" } } } } } } }, "/api/Book/{chapterId}/book-resources": { "get": { "tags": [ "Book" ], "summary": "This is an entry point to fetch resources from within an epub chapter/book.", "parameters": [ { "name": "chapterId", "in": "path", "description": "", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "file", "in": "query", "description": "", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Book/{chapterId}/chapters": { "get": { "tags": [ "Book" ], "summary": "This will return a list of mappings from ID -> page num. ID will be the xhtml key and page num will be the reading order\r\nthis is used to rewrite anchors in the book text so that we always load properly in our reader.", "description": "This is essentially building the table of contents", "parameters": [ { "name": "chapterId", "in": "path", "description": "", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookChapterItem" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookChapterItem" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookChapterItem" } } } } } } } }, "/api/Book/{chapterId}/book-page": { "get": { "tags": [ "Book" ], "summary": "This returns a single page within the epub book. All html will be rewritten to be scoped within our reader,\r\nall css is scoped, etc.", "parameters": [ { "name": "chapterId", "in": "path", "description": "", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "page", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Cbl/validate": { "post": { "tags": [ "Cbl" ], "summary": "The first step in a cbl import. This validates the cbl file that if an import occured, would it be successful.\r\nIf this returns errors, the cbl will always be rejected by Kavita.", "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "ContentType": { "type": "string" }, "ContentDisposition": { "type": "string" }, "Headers": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } } }, "Length": { "type": "integer", "format": "int64" }, "Name": { "type": "string" }, "FileName": { "type": "string" }, "comicVineMatching": { "type": "boolean", "default": false } } }, "encoding": { "ContentType": { "style": "form" }, "ContentDisposition": { "style": "form" }, "Headers": { "style": "form" }, "Length": { "style": "form" }, "Name": { "style": "form" }, "FileName": { "style": "form" }, "comicVineMatching": { "style": "form" } } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/CblImportSummaryDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/CblImportSummaryDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/CblImportSummaryDto" } } } } } } }, "/api/Cbl/import": { "post": { "tags": [ "Cbl" ], "summary": "Performs the actual import (assuming dryRun = false)", "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "ContentType": { "type": "string" }, "ContentDisposition": { "type": "string" }, "Headers": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } } }, "Length": { "type": "integer", "format": "int64" }, "Name": { "type": "string" }, "FileName": { "type": "string" }, "dryRun": { "type": "boolean", "default": false }, "comicVineMatching": { "type": "boolean", "default": false } } }, "encoding": { "ContentType": { "style": "form" }, "ContentDisposition": { "style": "form" }, "Headers": { "style": "form" }, "Length": { "style": "form" }, "Name": { "style": "form" }, "FileName": { "style": "form" }, "dryRun": { "style": "form" }, "comicVineMatching": { "style": "form" } } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/CblImportSummaryDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/CblImportSummaryDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/CblImportSummaryDto" } } } } } } }, "/api/Collection": { "get": { "tags": [ "Collection" ], "summary": "Returns all Collection tags for a given User", "parameters": [ { "name": "ownedOnly", "in": "query", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" } } } } } } }, "delete": { "tags": [ "Collection" ], "summary": "Removes the collection tag from the user", "parameters": [ { "name": "tagId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Collection/single": { "get": { "tags": [ "Collection" ], "summary": "Returns a single Collection tag by Id for a given user", "parameters": [ { "name": "collectionId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" } } } } } } } }, "/api/Collection/all-series": { "get": { "tags": [ "Collection" ], "summary": "Returns all collections that contain the Series for the user with the option to allow for promoted collections (non-user owned)", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "ownedOnly", "in": "query", "description": "", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" } } } } } } } }, "/api/Collection/name-exists": { "get": { "tags": [ "Collection" ], "summary": "Checks if a collection exists with the name", "parameters": [ { "name": "name", "in": "query", "description": "If empty or null, will return true as that is invalid", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Collection/update": { "post": { "tags": [ "Collection" ], "summary": "Updates an existing tag with a new title, promotion status, and summary.\r\nUI does not contain controls to update title", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AppUserCollectionDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/AppUserCollectionDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/AppUserCollectionDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Collection/promote-multiple": { "post": { "tags": [ "Collection" ], "summary": "Promote/UnPromote multiple collections in one go. Will only update the authenticated user's collections and will only work if the user has promotion role", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromoteCollectionsDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/PromoteCollectionsDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/PromoteCollectionsDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Collection/delete-multiple": { "post": { "tags": [ "Collection" ], "summary": "Delete multiple collections in one go", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteCollectionsDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/DeleteCollectionsDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/DeleteCollectionsDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Collection/update-for-series": { "post": { "tags": [ "Collection" ], "summary": "Adds multiple series to a collection. If tag id is 0, this will create a new tag.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CollectionTagBulkAddDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/CollectionTagBulkAddDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/CollectionTagBulkAddDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Collection/update-series": { "post": { "tags": [ "Collection" ], "summary": "For a given tag, update the summary if summary has changed and remove a set of series from the tag.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesForTagDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesForTagDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesForTagDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Collection/mal-stacks": { "get": { "tags": [ "Collection" ], "summary": "For the authenticated user, if they have an active Kavita+ subscription and a MAL username on record,\r\nfetch their Mal interest stacks (including restacks)", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MalStackDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MalStackDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MalStackDto" } } } } } } } }, "/api/Collection/import-stack": { "post": { "tags": [ "Collection" ], "summary": "Imports a MAL Stack into Kavita", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MalStackDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MalStackDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MalStackDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Device/create": { "post": { "tags": [ "Device" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateDeviceDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/CreateDeviceDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/CreateDeviceDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Device/update": { "post": { "tags": [ "Device" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateDeviceDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateDeviceDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateDeviceDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Device": { "delete": { "tags": [ "Device" ], "summary": "Deletes the device from the user", "parameters": [ { "name": "deviceId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } }, "get": { "tags": [ "Device" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DeviceDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DeviceDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DeviceDto" } } } } } } } }, "/api/Device/send-to": { "post": { "tags": [ "Device" ], "summary": "Sends a collection of chapters to the user's device", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SendToDeviceDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SendToDeviceDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/SendToDeviceDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Device/send-series-to": { "post": { "tags": [ "Device" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SendSeriesToDeviceDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SendSeriesToDeviceDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/SendSeriesToDeviceDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Download/volume-size": { "get": { "tags": [ "Download" ], "summary": "For a given volume, return the size in bytes", "parameters": [ { "name": "volumeId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "integer", "format": "int64" } }, "application/json": { "schema": { "type": "integer", "format": "int64" } }, "text/json": { "schema": { "type": "integer", "format": "int64" } } } } } } }, "/api/Download/chapter-size": { "get": { "tags": [ "Download" ], "summary": "For a given chapter, return the size in bytes", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "integer", "format": "int64" } }, "application/json": { "schema": { "type": "integer", "format": "int64" } }, "text/json": { "schema": { "type": "integer", "format": "int64" } } } } } } }, "/api/Download/series-size": { "get": { "tags": [ "Download" ], "summary": "For a series, return the size in bytes", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "integer", "format": "int64" } }, "application/json": { "schema": { "type": "integer", "format": "int64" } }, "text/json": { "schema": { "type": "integer", "format": "int64" } } } } } } }, "/api/Download/volume": { "get": { "tags": [ "Download" ], "summary": "Downloads all chapters within a volume. If the chapters are multiple zips, they will all be zipped up.", "parameters": [ { "name": "volumeId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Download/chapter": { "get": { "tags": [ "Download" ], "summary": "Returns the zip for a single chapter. If the chapter contains multiple files, they will be zipped.", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Download/series": { "get": { "tags": [ "Download" ], "parameters": [ { "name": "seriesId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Download/bookmarks": { "post": { "tags": [ "Download" ], "summary": "Downloads all bookmarks in a zip for", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DownloadBookmarkDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/DownloadBookmarkDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/DownloadBookmarkDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Filter/update": { "post": { "tags": [ "Filter" ], "summary": "Creates or Updates the filter", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Filter": { "get": { "tags": [ "Filter" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SmartFilterDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SmartFilterDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SmartFilterDto" } } } } } } }, "delete": { "tags": [ "Filter" ], "parameters": [ { "name": "filterId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Filter/encode": { "post": { "tags": [ "Filter" ], "summary": "Encode the Filter", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Filter/decode": { "post": { "tags": [ "Filter" ], "summary": "Decodes the Filter", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DecodeFilterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/DecodeFilterDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/DecodeFilterDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } } } } } } }, "/api/Health": { "get": { "tags": [ "Health" ], "responses": { "200": { "description": "Success" } } } }, "/api/Image/chapter-cover": { "get": { "tags": [ "Image" ], "summary": "Returns cover image for Chapter", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Image/library-cover": { "get": { "tags": [ "Image" ], "summary": "Returns cover image for Library", "parameters": [ { "name": "libraryId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Image/volume-cover": { "get": { "tags": [ "Image" ], "summary": "Returns cover image for Volume", "parameters": [ { "name": "volumeId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Image/series-cover": { "get": { "tags": [ "Image" ], "summary": "Returns cover image for Series", "parameters": [ { "name": "seriesId", "in": "query", "description": "Id of Series", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Image/collection-cover": { "get": { "tags": [ "Image" ], "summary": "Returns cover image for Collection", "parameters": [ { "name": "collectionTagId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Image/readinglist-cover": { "get": { "tags": [ "Image" ], "summary": "Returns cover image for a Reading List", "parameters": [ { "name": "readingListId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Image/bookmark": { "get": { "tags": [ "Image" ], "summary": "Returns image for a given bookmark page", "description": "This request is served unauthenticated, but user must be passed via api key to validate", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "pageNum", "in": "query", "description": "Starts at 0", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "description": "API Key for user. Needed to authenticate request", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Image/web-link": { "get": { "tags": [ "Image" ], "summary": "Returns the image associated with a web-link", "parameters": [ { "name": "url", "in": "query", "schema": { "type": "string" } }, { "name": "apiKey", "in": "query", "description": "", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Image/cover-upload": { "get": { "tags": [ "Image" ], "summary": "Returns a temp coverupload image", "parameters": [ { "name": "filename", "in": "query", "description": "Filename of file. This is used with upload/upload-by-url", "schema": { "type": "string" } }, { "name": "apiKey", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Library/create": { "post": { "tags": [ "Library" ], "summary": "Creates a new Library. Upon library creation, adds new library to all Admin accounts.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateLibraryDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateLibraryDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateLibraryDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Library/list": { "get": { "tags": [ "Library" ], "summary": "Returns a list of directories for a given path. If path is empty, returns root drives.", "parameters": [ { "name": "path", "in": "query", "description": "", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DirectoryDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DirectoryDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DirectoryDto" } } } } } } } }, "/api/Library": { "get": { "tags": [ "Library" ], "summary": "Return a specific library", "parameters": [ { "name": "libraryId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/LibraryDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/LibraryDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/LibraryDto" } } } } } } }, "/api/Library/libraries": { "get": { "tags": [ "Library" ], "summary": "Return all libraries in the Server", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/LibraryDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/LibraryDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/LibraryDto" } } } } } } } }, "/api/Library/jump-bar": { "get": { "tags": [ "Library" ], "summary": "For a given library, generate the jump bar information", "parameters": [ { "name": "libraryId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/JumpKeyDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/JumpKeyDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/JumpKeyDto" } } } } } } } }, "/api/Library/grant-access": { "post": { "tags": [ "Library" ], "summary": "Grants a user account access to a Library", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateLibraryForUserDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateLibraryForUserDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateLibraryForUserDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/MemberDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/MemberDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MemberDto" } } } } } } }, "/api/Library/scan": { "post": { "tags": [ "Library" ], "summary": "Scans a given library for file changes.", "parameters": [ { "name": "libraryId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "force", "in": "query", "description": "If true, will ignore any optimizations to avoid file I/O and will treat similar to a first scan", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Library/scan-all": { "post": { "tags": [ "Library" ], "summary": "Scans a given library for file changes. If another scan task is in progress, will reschedule the invocation for 3 hours in future.", "parameters": [ { "name": "force", "in": "query", "description": "If true, will ignore any optimizations to avoid file I/O and will treat similar to a first scan", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Library/refresh-metadata": { "post": { "tags": [ "Library" ], "parameters": [ { "name": "libraryId", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "force", "in": "query", "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Library/analyze": { "post": { "tags": [ "Library" ], "parameters": [ { "name": "libraryId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Library/scan-folder": { "post": { "tags": [ "Library" ], "summary": "Given a valid path, will invoke either a Scan Series or Scan Library. If the folder does not exist within Kavita, the request will be ignored", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScanFolderDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ScanFolderDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ScanFolderDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Library/delete": { "delete": { "tags": [ "Library" ], "parameters": [ { "name": "libraryId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Library/name-exists": { "get": { "tags": [ "Library" ], "summary": "Checks if the library name exists or not", "parameters": [ { "name": "name", "in": "query", "description": "If empty or null, will return true as that is invalid", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Library/update": { "post": { "tags": [ "Library" ], "summary": "Updates an existing Library with new name, folders, and/or type.", "description": "Any folder or type change will invoke a scan.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateLibraryDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateLibraryDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateLibraryDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Library/type": { "get": { "tags": [ "Library" ], "summary": "Returns the type of the underlying library", "parameters": [ { "name": "libraryId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" } }, "application/json": { "schema": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" } }, "text/json": { "schema": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" } } } } } } }, "/api/License/valid-license": { "get": { "tags": [ "License" ], "summary": "Checks if the user's license is valid or not", "parameters": [ { "name": "forceCheck", "in": "query", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/License/has-license": { "get": { "tags": [ "License" ], "summary": "Has any license", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/License": { "delete": { "tags": [ "License" ], "responses": { "200": { "description": "Success" } } }, "post": { "tags": [ "License" ], "summary": "Updates server license", "description": "Caches the result", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateLicenseDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateLicenseDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateLicenseDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/License/reset": { "post": { "tags": [ "License" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateLicenseDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateLicenseDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateLicenseDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Locale": { "get": { "tags": [ "Locale" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "type": "string" } } }, "application/json": { "schema": { "type": "array", "items": { "type": "string" } } }, "text/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } }, "/api/Metadata/genres": { "get": { "tags": [ "Metadata" ], "summary": "Fetches genres from the instance", "parameters": [ { "name": "libraryIds", "in": "query", "description": "String separated libraryIds or null for all genres", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/GenreTagDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/GenreTagDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/GenreTagDto" } } } } } } } }, "/api/Metadata/people-by-role": { "get": { "tags": [ "Metadata" ], "summary": "Fetches people from the instance by role", "parameters": [ { "name": "role", "in": "query", "description": "role", "schema": { "enum": [ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ], "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" } } } } } } } }, "/api/Metadata/people": { "get": { "tags": [ "Metadata" ], "summary": "Fetches people from the instance", "parameters": [ { "name": "libraryIds", "in": "query", "description": "String separated libraryIds or null for all people", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" } } } } } } } }, "/api/Metadata/tags": { "get": { "tags": [ "Metadata" ], "summary": "Fetches all tags from the instance", "parameters": [ { "name": "libraryIds", "in": "query", "description": "String separated libraryIds or null for all tags", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TagDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TagDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TagDto" } } } } } } } }, "/api/Metadata/age-ratings": { "get": { "tags": [ "Metadata" ], "summary": "Fetches all age ratings from the instance", "description": "This API is cached for 1 hour, varying by libraryIds", "parameters": [ { "name": "libraryIds", "in": "query", "description": "String separated libraryIds or null for all ratings", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AgeRatingDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AgeRatingDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AgeRatingDto" } } } } } } } }, "/api/Metadata/publication-status": { "get": { "tags": [ "Metadata" ], "summary": "Fetches all publication status' from the instance", "description": "This API is cached for 1 hour, varying by libraryIds", "parameters": [ { "name": "libraryIds", "in": "query", "description": "String separated libraryIds or null for all publication status", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AgeRatingDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AgeRatingDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AgeRatingDto" } } } } } } } }, "/api/Metadata/languages": { "get": { "tags": [ "Metadata" ], "summary": "Fetches all age languages from the libraries passed (or if none passed, all in the server)", "description": "This does not perform RBS for the user if they have Library access due to the non-sensitive nature of languages", "parameters": [ { "name": "libraryIds", "in": "query", "description": "String separated libraryIds or null for all ratings", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/LanguageDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/LanguageDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/LanguageDto" } } } } } } } }, "/api/Metadata/all-languages": { "get": { "tags": [ "Metadata" ], "summary": "Returns all languages Kavita can accept", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/LanguageDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/LanguageDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/LanguageDto" } } } } } } } }, "/api/Metadata/chapter-summary": { "get": { "tags": [ "Metadata" ], "summary": "Returns summary for the chapter", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Metadata/force-refresh": { "post": { "tags": [ "Metadata" ], "summary": "If this Series is on Kavita+ Blacklist, removes it. If already cached, invalidates it.\r\nThis then attempts to refresh data from Kavita+ for this series.", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Metadata/series-detail-plus": { "get": { "tags": [ "Metadata" ], "summary": "Fetches the details needed from Kavita+ for Series Detail page", "description": "This will hit upstream K+ if the data in local db is 2 weeks old", "parameters": [ { "name": "seriesId", "in": "query", "description": "Series Id", "schema": { "type": "integer", "format": "int32" } }, { "name": "libraryType", "in": "query", "description": "Library Type", "schema": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SeriesDetailPlusDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDetailPlusDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SeriesDetailPlusDto" } } } } } } }, "/api/Opds/{apiKey}": { "post": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } }, "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/smart-filter/{filterId}": { "get": { "tags": [ "Opds" ], "summary": "Returns the Series matching this smart filter. If FromDashboard, will only return 20 records.", "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "filterId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/smart-filters": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/external-sources": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/libraries": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/want-to-read": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/collections": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/collections/{collectionId}": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "collectionId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/reading-list": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/reading-list/{readingListId}": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "readingListId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/libraries/{libraryId}": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "libraryId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/recently-added": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 1 } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/more-in-genre": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "genreId", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 1 } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/recently-updated": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 1 } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/on-deck": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 1 } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/series": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "query", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/search": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/series/{seriesId}": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "seriesId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/series/{seriesId}/volume/{volumeId}": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "seriesId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "volumeId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/series/{seriesId}/volume/{volumeId}/chapter/{chapterId}": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "seriesId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "volumeId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "chapterId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/series/{seriesId}/volume/{volumeId}/chapter/{chapterId}/download/{filename}": { "get": { "tags": [ "Opds" ], "summary": "Downloads a file", "parameters": [ { "name": "apiKey", "in": "path", "description": "User's API Key", "required": true, "schema": { "type": "string" } }, { "name": "seriesId", "in": "path", "description": "", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "volumeId", "in": "path", "description": "", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "chapterId", "in": "path", "description": "", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "filename", "in": "path", "description": "Not used. Only for Chunky to allow download links", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/image": { "get": { "tags": [ "Opds" ], "summary": "This returns a streamed image following OPDS-PS v1.2", "parameters": [ { "name": "apiKey", "in": "path", "description": "", "required": true, "schema": { "type": "string" } }, { "name": "libraryId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "volumeId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "pageNumber", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "saveProgress", "in": "query", "description": "Optional parameter. Can pass false and progress saving will be suppressed", "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Opds/{apiKey}/favicon": { "get": { "tags": [ "Opds" ], "parameters": [ { "name": "apiKey", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Panels/save-progress": { "post": { "tags": [ "Panels" ], "summary": "Saves the progress of a given chapter.", "parameters": [ { "name": "apiKey", "in": "query", "description": "", "schema": { "type": "string" } } ], "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Panels/get-progress": { "get": { "tags": [ "Panels" ], "summary": "Gets the Progress of a given chapter", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "description": "", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ProgressDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } } } } } } }, "/api/Plugin/authenticate": { "post": { "tags": [ "Plugin" ], "summary": "Authenticate with the Server given an apiKey. This will log you in by returning the user object and the JWT token.", "description": "This API is not fully built out and may require more information in later releases", "parameters": [ { "name": "apiKey", "in": "query", "description": "API key which will be used to authenticate and return a valid user token back", "required": true, "schema": { "type": "string" } }, { "name": "pluginName", "in": "query", "description": "Name of the Plugin", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } } } }, "/api/Plugin/version": { "get": { "tags": [ "Plugin" ], "summary": "Returns the version of the Kavita install", "description": "This will log unauthorized requests to Security log", "parameters": [ { "name": "apiKey", "in": "query", "description": "Required for authenticating to get result", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Rating/overall": { "get": { "tags": [ "Rating" ], "parameters": [ { "name": "seriesId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/RatingDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/RatingDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/RatingDto" } } } } } } }, "/api/Reader/pdf": { "get": { "tags": [ "Reader" ], "summary": "Returns the PDF for the chapterId.", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Reader/image": { "get": { "tags": [ "Reader" ], "summary": "Returns an image for a given chapter. Will perform bounding checks", "description": "This will cache the chapter images for reading", "parameters": [ { "name": "chapterId", "in": "query", "description": "Chapter Id", "schema": { "type": "integer", "format": "int32" } }, { "name": "page", "in": "query", "description": "Page in question", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "description": "User's API Key for authentication", "schema": { "type": "string" } }, { "name": "extractPdf", "in": "query", "description": "Should Kavita extract pdf into images. Defaults to false.", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Reader/thumbnail": { "get": { "tags": [ "Reader" ], "summary": "Returns a thumbnail for the given page number", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "pageNum", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "description": "", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Reader/bookmark-image": { "get": { "tags": [ "Reader" ], "summary": "Returns an image for a given bookmark series. Side effect: This will cache the bookmark images for reading.", "description": "We must use api key as bookmarks could be leaked to other users via the API", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "apiKey", "in": "query", "description": "Api key for the user the bookmarks are on", "schema": { "type": "string" } }, { "name": "page", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Reader/file-dimensions": { "get": { "tags": [ "Reader" ], "summary": "Returns the file dimensions for all pages in a chapter. If the underlying chapter is PDF, use extractPDF to unpack as images.", "description": "This has a side effect of caching the images.\r\n This will only be populated on archive filetypes and not in bookmark mode", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "extractPdf", "in": "query", "description": "", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FileDimensionDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FileDimensionDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FileDimensionDto" } } } } } } } }, "/api/Reader/chapter-info": { "get": { "tags": [ "Reader" ], "summary": "Returns various information about a Chapter. Side effect: This will cache the chapter images for reading.", "description": "This is generally the first call when attempting to read to allow pre-generation of assets needed for reading", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "extractPdf", "in": "query", "description": "Should Kavita extract pdf into images. Defaults to false.", "schema": { "type": "boolean", "default": false } }, { "name": "includeDimensions", "in": "query", "description": "Include file dimensions. Only useful for image based reading", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ChapterInfoDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ChapterInfoDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ChapterInfoDto" } } } } } } }, "/api/Reader/bookmark-info": { "get": { "tags": [ "Reader" ], "summary": "Returns various information about all bookmark files for a Series. Side effect: This will cache the bookmark images for reading.", "parameters": [ { "name": "seriesId", "in": "query", "description": "Series Id for all bookmarks", "schema": { "type": "integer", "format": "int32" } }, { "name": "includeDimensions", "in": "query", "description": "Include file dimensions (extra I/O). Defaults to true.", "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/BookmarkInfoDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/BookmarkInfoDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/BookmarkInfoDto" } } } } } } }, "/api/Reader/mark-read": { "post": { "tags": [ "Reader" ], "summary": "Marks a Series as read. All volumes and chapters will be marked as read during this process.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarkReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MarkReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MarkReadDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/mark-unread": { "post": { "tags": [ "Reader" ], "summary": "Marks a Series as Unread. All volumes and chapters will be marked as unread during this process.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarkReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MarkReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MarkReadDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/mark-volume-unread": { "post": { "tags": [ "Reader" ], "summary": "Marks all chapters within a volume as unread", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarkVolumeReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MarkVolumeReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MarkVolumeReadDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/mark-volume-read": { "post": { "tags": [ "Reader" ], "summary": "Marks all chapters within a volume as Read", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarkVolumeReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MarkVolumeReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MarkVolumeReadDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/mark-multiple-read": { "post": { "tags": [ "Reader" ], "summary": "Marks all chapters within a list of volumes as Read. All volumes must belong to the same Series.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarkVolumesReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MarkVolumesReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MarkVolumesReadDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/mark-multiple-unread": { "post": { "tags": [ "Reader" ], "summary": "Marks all chapters within a list of volumes as Unread. All volumes must belong to the same Series.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarkVolumesReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MarkVolumesReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MarkVolumesReadDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/mark-multiple-series-read": { "post": { "tags": [ "Reader" ], "summary": "Marks all chapters within a list of series as Read.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarkMultipleSeriesAsReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MarkMultipleSeriesAsReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MarkMultipleSeriesAsReadDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/mark-multiple-series-unread": { "post": { "tags": [ "Reader" ], "summary": "Marks all chapters within a list of series as Unread.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarkMultipleSeriesAsReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MarkMultipleSeriesAsReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MarkMultipleSeriesAsReadDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/get-progress": { "get": { "tags": [ "Reader" ], "summary": "Returns Progress (page number) for a chapter for the logged in user", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ProgressDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } } } } } } }, "/api/Reader/progress": { "post": { "tags": [ "Reader" ], "summary": "Save page against Chapter for logged in user", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ProgressDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/continue-point": { "get": { "tags": [ "Reader" ], "summary": "Continue point is the chapter which you should start reading again from. If there is no progress on a series, then the first chapter will be returned (non-special unless only specials).\r\nOtherwise, loop through the chapters and volumes in order to find the next chapter which has progress.", "parameters": [ { "name": "seriesId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ChapterDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ChapterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ChapterDto" } } } } } } }, "/api/Reader/has-progress": { "get": { "tags": [ "Reader" ], "summary": "Returns if the user has reading progress on the Series", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Reader/chapter-bookmarks": { "get": { "tags": [ "Reader" ], "summary": "Returns a list of bookmarked pages for a given Chapter", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } } } } } } }, "/api/Reader/all-bookmarks": { "post": { "tags": [ "Reader" ], "summary": "Returns a list of all bookmarked pages for a User", "requestBody": { "description": "Only supports SeriesNameQuery", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } } } } } } }, "/api/Reader/remove-bookmarks": { "post": { "tags": [ "Reader" ], "summary": "Removes all bookmarks for all chapters linked to a Series", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RemoveBookmarkForSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/RemoveBookmarkForSeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/RemoveBookmarkForSeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/bulk-remove-bookmarks": { "post": { "tags": [ "Reader" ], "summary": "Removes all bookmarks for all chapters linked to a Series", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BulkRemoveBookmarkForSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/BulkRemoveBookmarkForSeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/BulkRemoveBookmarkForSeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/volume-bookmarks": { "get": { "tags": [ "Reader" ], "summary": "Returns all bookmarked pages for a given volume", "parameters": [ { "name": "volumeId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } } } } } } }, "/api/Reader/series-bookmarks": { "get": { "tags": [ "Reader" ], "summary": "Returns all bookmarked pages for a given series", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } } } } } } }, "/api/Reader/bookmark": { "post": { "tags": [ "Reader" ], "summary": "Bookmarks a page against a Chapter", "description": "This has a side effect of caching the chapter files to disk", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BookmarkDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/BookmarkDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/BookmarkDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/unbookmark": { "post": { "tags": [ "Reader" ], "summary": "Removes a bookmarked page for a Chapter", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BookmarkDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/BookmarkDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/BookmarkDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/next-chapter": { "get": { "tags": [ "Reader" ], "summary": "Returns the next logical chapter from the series.", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "volumeId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "currentChapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "integer", "format": "int32" } }, "application/json": { "schema": { "type": "integer", "format": "int32" } }, "text/json": { "schema": { "type": "integer", "format": "int32" } } } } } } }, "/api/Reader/prev-chapter": { "get": { "tags": [ "Reader" ], "summary": "Returns the previous logical chapter from the series.", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "volumeId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "currentChapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "integer", "format": "int32" } }, "application/json": { "schema": { "type": "integer", "format": "int32" } }, "text/json": { "schema": { "type": "integer", "format": "int32" } } } } } } }, "/api/Reader/time-left": { "get": { "tags": [ "Reader" ], "summary": "For the current user, returns an estimate on how long it would take to finish reading the series.", "description": "For Epubs, this does not check words inside a chapter due to overhead so may not work in all cases.", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/HourEstimateRangeDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/HourEstimateRangeDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/HourEstimateRangeDto" } } } } } } }, "/api/Reader/ptoc": { "get": { "tags": [ "Reader" ], "summary": "Returns the user's personal table of contents for the given chapter", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonalToCDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonalToCDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonalToCDto" } } } } } } }, "delete": { "tags": [ "Reader" ], "parameters": [ { "name": "chapterId", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "pageNum", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "title", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Reader/create-ptoc": { "post": { "tags": [ "Reader" ], "summary": "Create a new personal table of content entry for a given chapter", "description": "The title and page number must be unique to that book", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatePersonalToCDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/CreatePersonalToCDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/CreatePersonalToCDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Reader/all-chapter-progress": { "get": { "tags": [ "Reader" ], "summary": "Get all progress events for a given chapter", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FullProgressDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FullProgressDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FullProgressDto" } } } } } } } }, "/api/ReadingList": { "get": { "tags": [ "ReadingList" ], "summary": "Fetches a single Reading List", "parameters": [ { "name": "readingListId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" } } } } } } }, "delete": { "tags": [ "ReadingList" ], "summary": "Deletes a reading list", "parameters": [ { "name": "readingListId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/lists": { "post": { "tags": [ "ReadingList" ], "summary": "Returns reading lists (paginated) for a given user.", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } }, { "name": "includePromoted", "in": "query", "description": "Include Promoted Reading Lists along with user's Reading Lists. Defaults to true", "schema": { "type": "boolean", "default": true } }, { "name": "sortByLastModified", "in": "query", "description": "Sort by last modified (most recent first) or by title (alphabetical)", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" } } } } } } } }, "/api/ReadingList/lists-for-series": { "get": { "tags": [ "ReadingList" ], "summary": "Returns all Reading Lists the user has access to that have a series within it.", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" } } } } } } } }, "/api/ReadingList/items": { "get": { "tags": [ "ReadingList" ], "summary": "Fetches all reading list items for a given list including rich metadata around series, volume, chapters, and progress", "description": "This call is expensive", "parameters": [ { "name": "readingListId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListItemDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListItemDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListItemDto" } } } } } } } }, "/api/ReadingList/update-position": { "post": { "tags": [ "ReadingList" ], "summary": "Updates an items position", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListPosition" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListPosition" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListPosition" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/delete-item": { "post": { "tags": [ "ReadingList" ], "summary": "Deletes a list item from the list. Will reorder all item positions afterwards", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListPosition" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListPosition" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListPosition" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/remove-read": { "post": { "tags": [ "ReadingList" ], "summary": "Removes all entries that are fully read from the reading list", "parameters": [ { "name": "readingListId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/create": { "post": { "tags": [ "ReadingList" ], "summary": "Creates a new List with a unique title. Returns the new ReadingList back", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateReadingListDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/CreateReadingListDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/CreateReadingListDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ReadingListDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ReadingListDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ReadingListDto" } } } } } } }, "/api/ReadingList/update": { "post": { "tags": [ "ReadingList" ], "summary": "Update the properties (title, summary) of a reading list", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/update-by-series": { "post": { "tags": [ "ReadingList" ], "summary": "Adds all chapters from a Series to a reading list", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListBySeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListBySeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListBySeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/update-by-multiple": { "post": { "tags": [ "ReadingList" ], "summary": "Adds all chapters from a list of volumes and chapters to a reading list", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByMultipleDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByMultipleDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByMultipleDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/update-by-multiple-series": { "post": { "tags": [ "ReadingList" ], "summary": "Adds all chapters from a list of series to a reading list", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByMultipleSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByMultipleSeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByMultipleSeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/update-by-volume": { "post": { "tags": [ "ReadingList" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByVolumeDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByVolumeDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByVolumeDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/update-by-chapter": { "post": { "tags": [ "ReadingList" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByChapterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByChapterDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateReadingListByChapterDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/ReadingList/characters": { "get": { "tags": [ "ReadingList" ], "summary": "Returns a list of characters associated with the reading list", "parameters": [ { "name": "readingListId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" } } } } } } } }, "/api/ReadingList/next-chapter": { "get": { "tags": [ "ReadingList" ], "summary": "Returns the next chapter within the reading list", "parameters": [ { "name": "currentChapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "readingListId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "integer", "format": "int32" } }, "application/json": { "schema": { "type": "integer", "format": "int32" } }, "text/json": { "schema": { "type": "integer", "format": "int32" } } } } } } }, "/api/ReadingList/prev-chapter": { "get": { "tags": [ "ReadingList" ], "summary": "Returns the prev chapter within the reading list", "parameters": [ { "name": "currentChapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "readingListId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "integer", "format": "int32" } }, "application/json": { "schema": { "type": "integer", "format": "int32" } }, "text/json": { "schema": { "type": "integer", "format": "int32" } } } } } } }, "/api/ReadingList/name-exists": { "get": { "tags": [ "ReadingList" ], "summary": "Checks if a reading list exists with the name", "parameters": [ { "name": "name", "in": "query", "description": "If empty or null, will return true as that is invalid", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Recommended/quick-reads": { "get": { "tags": [ "Recommended" ], "summary": "Quick Reads are series that should be readable in less than 10 in total and are not Ongoing in release.", "parameters": [ { "name": "libraryId", "in": "query", "description": "Library to restrict series to", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Recommended/quick-catchup-reads": { "get": { "tags": [ "Recommended" ], "summary": "Quick Catchup Reads are series that should be readable in less than 10 in total and are Ongoing in release.", "parameters": [ { "name": "libraryId", "in": "query", "description": "Library to restrict series to", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Recommended/highly-rated": { "get": { "tags": [ "Recommended" ], "summary": "Highly Rated based on other users ratings. Will pull series with ratings > 4.0, weighted by count of other users.", "parameters": [ { "name": "libraryId", "in": "query", "description": "Library to restrict series to", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Recommended/more-in": { "get": { "tags": [ "Recommended" ], "summary": "Chooses a random genre and shows series that are in that without reading progress", "parameters": [ { "name": "libraryId", "in": "query", "description": "Library to restrict series to", "schema": { "type": "integer", "format": "int32" } }, { "name": "genreId", "in": "query", "description": "Genre Id", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Recommended/rediscover": { "get": { "tags": [ "Recommended" ], "summary": "Series that are fully read by the user in no particular order", "parameters": [ { "name": "libraryId", "in": "query", "description": "Library to restrict series to", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Review": { "post": { "tags": [ "Review" ], "summary": "Updates the review for a given series", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserReviewDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateUserReviewDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateUserReviewDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserReviewDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserReviewDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserReviewDto" } } } } } }, "delete": { "tags": [ "Review" ], "summary": "Deletes the user's review for the given series", "parameters": [ { "name": "seriesId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Scrobbling/anilist-token": { "get": { "tags": [ "Scrobbling" ], "summary": "Get the current user's AniList token", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Scrobbling/mal-token": { "get": { "tags": [ "Scrobbling" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/MalUserInfoDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/MalUserInfoDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MalUserInfoDto" } } } } } } }, "/api/Scrobbling/update-anilist-token": { "post": { "tags": [ "Scrobbling" ], "summary": "Update the current user's AniList token", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AniListUpdateDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/AniListUpdateDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/AniListUpdateDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Scrobbling/update-mal-token": { "post": { "tags": [ "Scrobbling" ], "summary": "Update the current user's MAL token (Client ID) and Username", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MalUserInfoDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/MalUserInfoDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/MalUserInfoDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Scrobbling/token-expired": { "get": { "tags": [ "Scrobbling" ], "summary": "Checks if the current Scrobbling token for the given Provider has expired for the current user", "parameters": [ { "name": "provider", "in": "query", "description": "", "schema": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Misleading name but is the source of data (like a review coming from AniList)", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Scrobbling/scrobble-errors": { "get": { "tags": [ "Scrobbling" ], "summary": "Returns all scrobbling errors for the instance", "description": "Requires admin", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleErrorDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleErrorDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleErrorDto" } } } } } } } }, "/api/Scrobbling/clear-errors": { "post": { "tags": [ "Scrobbling" ], "summary": "Clears the scrobbling errors table", "responses": { "200": { "description": "Success" } } } }, "/api/Scrobbling/scrobble-events": { "post": { "tags": [ "Scrobbling" ], "summary": "Returns the scrobbling history for the user", "description": "User must have a valid license", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScrobbleEventFilter" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ScrobbleEventFilter" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ScrobbleEventFilter" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleEventDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleEventDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleEventDto" } } } } } } } }, "/api/Scrobbling/holds": { "get": { "tags": [ "Scrobbling" ], "summary": "Returns all scrobble holds for the current user", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleHoldDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleHoldDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleHoldDto" } } } } } } } }, "/api/Scrobbling/has-hold": { "get": { "tags": [ "Scrobbling" ], "summary": "If there is an active hold on the series", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Scrobbling/library-allows-scrobbling": { "get": { "tags": [ "Scrobbling" ], "summary": "Does the library the series is in allow scrobbling?", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Scrobbling/add-hold": { "post": { "tags": [ "Scrobbling" ], "summary": "Adds a hold against the Series for user's scrobbling", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Scrobbling/remove-hold": { "delete": { "tags": [ "Scrobbling" ], "summary": "Adds a hold against the Series for user's scrobbling", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Search/series-for-mangafile": { "get": { "tags": [ "Search" ], "summary": "Returns the series for the MangaFile id. If the user does not have access (shouldn't happen by the UI),\r\nthen null is returned", "parameters": [ { "name": "mangaFileId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SeriesDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SeriesDto" } } } } } } }, "/api/Search/series-for-chapter": { "get": { "tags": [ "Search" ], "summary": "Returns the series for the Chapter id. If the user does not have access (shouldn't happen by the UI),\r\nthen null is returned", "parameters": [ { "name": "chapterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SeriesDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SeriesDto" } } } } } } }, "/api/Search/search": { "get": { "tags": [ "Search" ], "parameters": [ { "name": "queryString", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SearchResultGroupDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SearchResultGroupDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SearchResultGroupDto" } } } } } } }, "/api/Series": { "post": { "tags": [ "Series" ], "summary": "Gets series with the applied Filter", "description": "This is considered v1 and no longer used by Kavita, but will be supported for sometime. See series/v2", "parameters": [ { "name": "libraryId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Series" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Series" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Series" } } } } } }, "deprecated": true } }, "/api/Series/v2": { "post": { "tags": [ "Series" ], "summary": "Gets series with the applied Filter", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Series" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Series" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Series" } } } } } } } }, "/api/Series/{seriesId}": { "get": { "tags": [ "Series" ], "summary": "Fetches a Series for a given Id", "parameters": [ { "name": "seriesId", "in": "path", "description": "Series Id to fetch details for", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SeriesDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SeriesDto" } } } } } }, "delete": { "tags": [ "Series" ], "summary": "Deletes a series from Kavita", "parameters": [ { "name": "seriesId", "in": "path", "description": "", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Series/delete-multiple": { "post": { "tags": [ "Series" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/DeleteSeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/DeleteSeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Series/volumes": { "get": { "tags": [ "Series" ], "summary": "Returns All volumes for a series with progress information and Chapters", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/VolumeDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/VolumeDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/VolumeDto" } } } } } } } }, "/api/Series/volume": { "get": { "tags": [ "Series" ], "parameters": [ { "name": "volumeId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/VolumeDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/VolumeDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/VolumeDto" } } } } } } }, "/api/Series/chapter": { "get": { "tags": [ "Series" ], "parameters": [ { "name": "chapterId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ChapterDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ChapterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ChapterDto" } } } } } } }, "/api/Series/chapter-metadata": { "get": { "tags": [ "Series" ], "parameters": [ { "name": "chapterId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ChapterMetadataDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ChapterMetadataDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ChapterMetadataDto" } } } } }, "deprecated": true } }, "/api/Series/update-rating": { "post": { "tags": [ "Series" ], "summary": "Update the user rating for the given series", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesRatingDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesRatingDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesRatingDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Series/update": { "post": { "tags": [ "Series" ], "summary": "Updates the Series", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Series/recently-added": { "post": { "tags": [ "Series" ], "summary": "Gets all recently added series. Obsolete, use recently-added-v2", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } }, { "name": "libraryId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } }, "deprecated": true } }, "/api/Series/recently-added-v2": { "post": { "tags": [ "Series" ], "summary": "Gets all recently added series", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Series/recently-updated-series": { "post": { "tags": [ "Series" ], "summary": "Returns series that were recently updated, like adding or removing a chapter", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/RecentlyAddedItemDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/RecentlyAddedItemDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/RecentlyAddedItemDto" } } } } } } } }, "/api/Series/all-v2": { "post": { "tags": [ "Series" ], "summary": "Returns all series for the library", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } }, { "name": "libraryId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Series/all": { "post": { "tags": [ "Series" ], "summary": "Returns all series for the library. Obsolete, use all-v2", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } }, { "name": "libraryId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } }, "deprecated": true } }, "/api/Series/on-deck": { "post": { "tags": [ "Series" ], "summary": "Fetches series that are on deck aka have progress on them.", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } }, { "name": "libraryId", "in": "query", "description": "Default of 0 meaning all libraries", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Series/remove-from-on-deck": { "post": { "tags": [ "Series" ], "summary": "Removes a series from displaying on deck until the next read event on that series", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Series/refresh-metadata": { "post": { "tags": [ "Series" ], "summary": "Runs a Cover Image Generation task", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/RefreshSeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/RefreshSeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Series/scan": { "post": { "tags": [ "Series" ], "summary": "Scan a series and force each file to be updated. This should be invoked via the User, hence why we force.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/RefreshSeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/RefreshSeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Series/analyze": { "post": { "tags": [ "Series" ], "summary": "Run a file analysis on the series.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/RefreshSeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/RefreshSeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Series/metadata": { "get": { "tags": [ "Series" ], "summary": "Returns metadata for a given series", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SeriesMetadataDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SeriesMetadataDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SeriesMetadataDto" } } } } } }, "post": { "tags": [ "Series" ], "summary": "Update series metadata", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesMetadataDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesMetadataDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateSeriesMetadataDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Series/series-by-collection": { "get": { "tags": [ "Series" ], "summary": "Returns all Series grouped by the passed Collection Id with Pagination.", "parameters": [ { "name": "collectionId", "in": "query", "description": "Collection Id to pull series from", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Series/series-by-ids": { "post": { "tags": [ "Series" ], "summary": "Fetches Series for a set of Ids. This will check User for permission access and filter out any Ids that don't exist or\r\nthe user does not have access to.", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SeriesByIdsDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SeriesByIdsDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/SeriesByIdsDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Series/age-rating": { "get": { "tags": [ "Series" ], "summary": "Get the age rating for the API.Entities.Enums.AgeRating enum value", "description": "This is cached for an hour", "parameters": [ { "name": "ageRating", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Series/series-detail": { "get": { "tags": [ "Series" ], "summary": "Get a special DTO for Series Detail page.", "description": "Do not rely on this API externally. May change without hesitation.", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SeriesDetailDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDetailDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SeriesDetailDto" } } } } } } }, "/api/Series/related": { "get": { "tags": [ "Series" ], "summary": "Fetches the related series for a given series", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } }, { "name": "relation", "in": "query", "description": "Type of Relationship to pull back", "schema": { "enum": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ], "type": "integer", "description": "Represents a relationship between Series", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/Series/all-related": { "get": { "tags": [ "Series" ], "summary": "Returns all related series against the passed series Id", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/RelatedSeriesDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/RelatedSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/RelatedSeriesDto" } } } } } } }, "/api/Series/update-related": { "post": { "tags": [ "Series" ], "summary": "Update the relations attached to the Series. Does not generate associated Sequel/Prequel pairs on target series.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateRelatedSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateRelatedSeriesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateRelatedSeriesDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Series/external-series-detail": { "get": { "tags": [ "Series" ], "parameters": [ { "name": "aniListId", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "malId", "in": "query", "schema": { "type": "integer", "format": "int64" } }, { "name": "seriesId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ExternalSeriesDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ExternalSeriesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ExternalSeriesDto" } } } } } } }, "/api/Series/next-expected": { "get": { "tags": [ "Series" ], "summary": "Based on the delta times between when chapters are added, for series that are not Completed/Cancelled/Hiatus, forecast the next\r\ndate when it will be available.", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/NextExpectedChapterDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/NextExpectedChapterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/NextExpectedChapterDto" } } } } } } }, "/api/Server/clear-cache": { "post": { "tags": [ "Server" ], "summary": "Performs an ad-hoc cleanup of Cache", "responses": { "200": { "description": "Success" } } } }, "/api/Server/cleanup-want-to-read": { "post": { "tags": [ "Server" ], "summary": "Performs an ad-hoc cleanup of Want To Read, by removing want to read series for users, where the series are fully read and in Completed publication status.", "responses": { "200": { "description": "Success" } } } }, "/api/Server/backup-db": { "post": { "tags": [ "Server" ], "summary": "Performs an ad-hoc backup of the Database", "responses": { "200": { "description": "Success" } } } }, "/api/Server/analyze-files": { "post": { "tags": [ "Server" ], "summary": "This is a one time task that needs to be ran for v0.7 statistics to work", "responses": { "200": { "description": "Success" } } } }, "/api/Server/server-info": { "get": { "tags": [ "Server" ], "summary": "Returns non-sensitive information about the current system", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ServerInfoDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ServerInfoDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ServerInfoDto" } } } } } } }, "/api/Server/server-info-slim": { "get": { "tags": [ "Server" ], "summary": "Returns non-sensitive information about the current system", "description": "This is just for the UI and is extremely lightweight", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ServerInfoDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ServerInfoDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ServerInfoDto" } } } } } } }, "/api/Server/convert-media": { "post": { "tags": [ "Server" ], "summary": "Triggers the scheduling of the convert media job. This will convert all media to the target encoding (except for PNG). Only one job will run at a time.", "responses": { "200": { "description": "Success" } } } }, "/api/Server/logs": { "get": { "tags": [ "Server" ], "summary": "Downloads all the log files via a zip", "responses": { "200": { "description": "Success" } } } }, "/api/Server/check-for-updates": { "get": { "tags": [ "Server" ], "summary": "Checks for updates and pushes an event to the UI", "description": "Some users have websocket issues so this is not always reliable to alert the user", "responses": { "200": { "description": "Success" } } } }, "/api/Server/check-update": { "get": { "tags": [ "Server" ], "summary": "Checks for updates, if no updates that are > current version installed, returns null", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UpdateNotificationDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UpdateNotificationDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateNotificationDto" } } } } } } }, "/api/Server/check-out-of-date": { "get": { "tags": [ "Server" ], "summary": "Returns how many versions out of date this install is", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "integer", "format": "int32" } }, "application/json": { "schema": { "type": "integer", "format": "int32" } }, "text/json": { "schema": { "type": "integer", "format": "int32" } } } } } } }, "/api/Server/changelog": { "get": { "tags": [ "Server" ], "summary": "Pull the Changelog for Kavita from Github and display", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/UpdateNotificationDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/UpdateNotificationDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/UpdateNotificationDto" } } } } } } } }, "/api/Server/jobs": { "get": { "tags": [ "Server" ], "summary": "Returns a list of reoccurring jobs. Scheduled ad-hoc jobs will not be returned.", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/JobDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/JobDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/JobDto" } } } } } } } }, "/api/Server/media-errors": { "get": { "tags": [ "Server" ], "summary": "Returns a list of issues found during scanning or reading in which files may have corruption or bad metadata (structural metadata)", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MediaErrorDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MediaErrorDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MediaErrorDto" } } } } } } } }, "/api/Server/clear-media-alerts": { "post": { "tags": [ "Server" ], "summary": "Deletes all media errors", "responses": { "200": { "description": "Success" } } } }, "/api/Server/bust-kavitaplus-cache": { "post": { "tags": [ "Server" ], "summary": "Bust Kavita+ Cache", "responses": { "200": { "description": "Success" } } } }, "/api/Settings/base-url": { "get": { "tags": [ "Settings" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Settings": { "get": { "tags": [ "Settings" ], "summary": "Returns the server settings", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } } } } } }, "post": { "tags": [ "Settings" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } } } } } } }, "/api/Settings/reset": { "post": { "tags": [ "Settings" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } } } } } } }, "/api/Settings/reset-ip-addresses": { "post": { "tags": [ "Settings" ], "summary": "Resets the IP Addresses", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } } } } } } }, "/api/Settings/reset-base-url": { "post": { "tags": [ "Settings" ], "summary": "Resets the Base url", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ServerSettingDto" } } } } } } }, "/api/Settings/is-email-setup": { "get": { "tags": [ "Settings" ], "summary": "Is the minimum information setup for Email to work", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Settings/task-frequencies": { "get": { "tags": [ "Settings" ], "summary": "All values allowed for Task Scheduling APIs. A custom cron job is not included. Disabled is not applicable for Cleanup.", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "type": "string" } } }, "application/json": { "schema": { "type": "array", "items": { "type": "string" } } }, "text/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } }, "/api/Settings/library-types": { "get": { "tags": [ "Settings" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "type": "string" } } }, "application/json": { "schema": { "type": "array", "items": { "type": "string" } } }, "text/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } }, "/api/Settings/log-levels": { "get": { "tags": [ "Settings" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "type": "string" } } }, "application/json": { "schema": { "type": "array", "items": { "type": "string" } } }, "text/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } }, "/api/Settings/opds-enabled": { "get": { "tags": [ "Settings" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Settings/is-valid-cron": { "get": { "tags": [ "Settings" ], "summary": "Is the cron expression valid for Kavita's scheduler", "parameters": [ { "name": "cronExpression", "in": "query", "description": "", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Settings/test-email-url": { "post": { "tags": [ "Settings" ], "summary": "Sends a test email to see if email settings are hooked up correctly", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/EmailTestResultDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/EmailTestResultDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/EmailTestResultDto" } } } } } } }, "/api/Stats/user/{userId}/read": { "get": { "tags": [ "Stats" ], "parameters": [ { "name": "userId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserReadStatistics" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserReadStatistics" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserReadStatistics" } } } } } } }, "/api/Stats/server/stats": { "get": { "tags": [ "Stats" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ServerStatisticsDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ServerStatisticsDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ServerStatisticsDto" } } } } } } }, "/api/Stats/server/count/year": { "get": { "tags": [ "Stats" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } } } } } } }, "/api/Stats/server/count/publication-status": { "get": { "tags": [ "Stats" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PublicationStatusStatCount" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PublicationStatusStatCount" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PublicationStatusStatCount" } } } } } } } }, "/api/Stats/server/count/manga-format": { "get": { "tags": [ "Stats" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MangaFormatStatCount" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MangaFormatStatCount" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MangaFormatStatCount" } } } } } } } }, "/api/Stats/server/top/years": { "get": { "tags": [ "Stats" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } } } } } } }, "/api/Stats/server/top/users": { "get": { "tags": [ "Stats" ], "summary": "Returns users with the top reads in the server", "parameters": [ { "name": "days", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TopReadDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TopReadDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TopReadDto" } } } } } } } }, "/api/Stats/server/file-breakdown": { "get": { "tags": [ "Stats" ], "summary": "A breakdown of different files, their size, and format", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FileExtensionBreakdownDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FileExtensionBreakdownDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FileExtensionBreakdownDto" } } } } } } } }, "/api/Stats/reading-count-by-day": { "get": { "tags": [ "Stats" ], "summary": "Returns reading history events for a give or all users, broken up by day, and format", "parameters": [ { "name": "userId", "in": "query", "description": "If 0, defaults to all users, else just userId", "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "days", "in": "query", "description": "If 0, defaults to all time, else just those days asked for", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DateTimePagesReadOnADayCount" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DateTimePagesReadOnADayCount" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DateTimePagesReadOnADayCount" } } } } } } } }, "/api/Stats/day-breakdown": { "get": { "tags": [ "Stats" ], "parameters": [ { "name": "userId", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DayOfWeekStatCount" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DayOfWeekStatCount" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DayOfWeekStatCount" } } } } } } } }, "/api/Stats/user/reading-history": { "get": { "tags": [ "Stats" ], "parameters": [ { "name": "userId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadHistoryEvent" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadHistoryEvent" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ReadHistoryEvent" } } } } } } } }, "/api/Stats/pages-per-year": { "get": { "tags": [ "Stats" ], "summary": "Returns a count of pages read per year for a given userId.", "parameters": [ { "name": "userId", "in": "query", "description": "If userId is 0 and user is not an admin, API will default to userId", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } } } } } } }, "/api/Stats/words-per-year": { "get": { "tags": [ "Stats" ], "summary": "Returns a count of words read per year for a given userId.", "parameters": [ { "name": "userId", "in": "query", "description": "If userId is 0 and user is not an admin, API will default to userId", "schema": { "type": "integer", "format": "int32", "default": 0 } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } } } } } } }, "/api/Stats/kavitaplus-metadata-breakdown": { "get": { "tags": [ "Stats" ], "summary": "Returns for Kavita+ the number of Series that have been processed, errored, and not processed", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Int32StatCount" } } } } } } } }, "/api/Stream/dashboard": { "get": { "tags": [ "Stream" ], "summary": "Returns the layout of the user's dashboard", "parameters": [ { "name": "visibleOnly", "in": "query", "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DashboardStreamDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DashboardStreamDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DashboardStreamDto" } } } } } } } }, "/api/Stream/sidenav": { "get": { "tags": [ "Stream" ], "summary": "Return's the user's side nav", "parameters": [ { "name": "visibleOnly", "in": "query", "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SideNavStreamDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SideNavStreamDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SideNavStreamDto" } } } } } } } }, "/api/Stream/external-sources": { "get": { "tags": [ "Stream" ], "summary": "Return's the user's external sources", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalSourceDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalSourceDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalSourceDto" } } } } } } } }, "/api/Stream/create-external-source": { "post": { "tags": [ "Stream" ], "summary": "Create an external Source", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } } } } } } }, "/api/Stream/update-external-source": { "post": { "tags": [ "Stream" ], "summary": "Updates an existing external source", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ExternalSourceDto" } } } } } } }, "/api/Stream/external-source-exists": { "get": { "tags": [ "Stream" ], "summary": "Validates the external source by host is unique (for this user)", "parameters": [ { "name": "host", "in": "query", "description": "", "schema": { "type": "string" } }, { "name": "name", "in": "query", "schema": { "type": "string" } }, { "name": "apiKey", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Stream/delete-external-source": { "delete": { "tags": [ "Stream" ], "summary": "Delete's the external source", "parameters": [ { "name": "externalSourceId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Stream/add-dashboard-stream": { "post": { "tags": [ "Stream" ], "summary": "Creates a Dashboard Stream from a SmartFilter and adds it to the user's dashboard as visible", "parameters": [ { "name": "smartFilterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/DashboardStreamDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/DashboardStreamDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/DashboardStreamDto" } } } } } } }, "/api/Stream/update-dashboard-stream": { "post": { "tags": [ "Stream" ], "summary": "Updates the visibility of a dashboard stream", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DashboardStreamDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/DashboardStreamDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/DashboardStreamDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Stream/update-dashboard-position": { "post": { "tags": [ "Stream" ], "summary": "Updates the position of a dashboard stream", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateStreamPositionDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateStreamPositionDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateStreamPositionDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Stream/add-sidenav-stream": { "post": { "tags": [ "Stream" ], "summary": "Creates a SideNav Stream from a SmartFilter and adds it to the user's sidenav as visible", "parameters": [ { "name": "smartFilterId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SideNavStreamDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SideNavStreamDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SideNavStreamDto" } } } } } } }, "/api/Stream/add-sidenav-stream-from-external-source": { "post": { "tags": [ "Stream" ], "summary": "Creates a SideNav Stream from a SmartFilter and adds it to the user's sidenav as visible", "parameters": [ { "name": "externalSourceId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SideNavStreamDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SideNavStreamDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SideNavStreamDto" } } } } } } }, "/api/Stream/update-sidenav-stream": { "post": { "tags": [ "Stream" ], "summary": "Updates the visibility of a dashboard stream", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SideNavStreamDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SideNavStreamDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/SideNavStreamDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Stream/update-sidenav-position": { "post": { "tags": [ "Stream" ], "summary": "Updates the position of a dashboard stream", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateStreamPositionDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateStreamPositionDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateStreamPositionDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Stream/bulk-sidenav-stream-visibility": { "post": { "tags": [ "Stream" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BulkUpdateSideNavStreamVisibilityDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/BulkUpdateSideNavStreamVisibilityDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/BulkUpdateSideNavStreamVisibilityDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Tachiyomi/latest-chapter": { "get": { "tags": [ "Tachiyomi" ], "summary": "Given the series Id, this should return the latest chapter that has been fully read.", "parameters": [ { "name": "seriesId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/ChapterDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/ChapterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/ChapterDto" } } } } } } }, "/api/Tachiyomi/mark-chapter-until-as-read": { "post": { "tags": [ "Tachiyomi" ], "summary": "Marks every chapter that is sorted below the passed number as Read. This will not mark any specials as read.", "description": "This is built for Tachiyomi and is not expected to be called by any other place", "parameters": [ { "name": "seriesId", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "chapterNumber", "in": "query", "schema": { "type": "number", "format": "float" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Theme": { "get": { "tags": [ "Theme" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SiteThemeDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SiteThemeDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SiteThemeDto" } } } } } } }, "delete": { "tags": [ "Theme" ], "summary": "Attempts to delete a theme. If already in use by users, will not allow", "parameters": [ { "name": "themeId", "in": "query", "description": "", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DownloadableSiteThemeDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DownloadableSiteThemeDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DownloadableSiteThemeDto" } } } } } } } }, "/api/Theme/update-default": { "post": { "tags": [ "Theme" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateDefaultThemeDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateDefaultThemeDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateDefaultThemeDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Theme/download-content": { "get": { "tags": [ "Theme" ], "summary": "Returns css content to the UI. UI is expected to escape the content", "parameters": [ { "name": "themeId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Theme/browse": { "get": { "tags": [ "Theme" ], "summary": "Browse themes that can be used on this server", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DownloadableSiteThemeDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DownloadableSiteThemeDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DownloadableSiteThemeDto" } } } } } } } }, "/api/Theme/download-theme": { "post": { "tags": [ "Theme" ], "summary": "Downloads a SiteTheme from upstream", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DownloadableSiteThemeDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/DownloadableSiteThemeDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/DownloadableSiteThemeDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SiteThemeDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SiteThemeDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SiteThemeDto" } } } } } } }, "/api/Theme/upload-theme": { "post": { "tags": [ "Theme" ], "summary": "Uploads a new theme file", "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "formFile": { "type": "string", "format": "binary" } } }, "encoding": { "formFile": { "style": "form" } } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/SiteThemeDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/SiteThemeDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/SiteThemeDto" } } } } } } }, "/api/Upload/upload-by-url": { "post": { "tags": [ "Upload" ], "summary": "This stores a file (image) in temp directory for use in a cover image replacement flow.\r\nThis is automatically cleaned up.", "requestBody": { "description": "Escaped url to download from", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadUrlDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UploadUrlDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UploadUrlDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "string" } }, "application/json": { "schema": { "type": "string" } }, "text/json": { "schema": { "type": "string" } } } } } } }, "/api/Upload/series": { "post": { "tags": [ "Upload" ], "summary": "Replaces series cover image and locks it with a base64 encoded image", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Upload/collection": { "post": { "tags": [ "Upload" ], "summary": "Replaces collection tag cover image and locks it with a base64 encoded image", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Upload/reading-list": { "post": { "tags": [ "Upload" ], "summary": "Replaces reading list cover image and locks it with a base64 encoded image", "description": "This is the only API that can be called by non-admins, but the authenticated user must have a readinglist permission", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Upload/chapter": { "post": { "tags": [ "Upload" ], "summary": "Replaces chapter cover image and locks it with a base64 encoded image. This will update the parent volume's cover image.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Upload/library": { "post": { "tags": [ "Upload" ], "summary": "Replaces library cover image with a base64 encoded image. If empty string passed, will reset to null.", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Upload/reset-chapter-lock": { "post": { "tags": [ "Upload" ], "summary": "Replaces chapter cover image and locks it with a base64 encoded image. This will update the parent volume's cover image.", "requestBody": { "description": "Does not use Url property", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UploadFileDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/Users/delete-user": { "delete": { "tags": [ "Users" ], "parameters": [ { "name": "username", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Users": { "get": { "tags": [ "Users" ], "summary": "Returns all users of this server", "parameters": [ { "name": "includePending", "in": "query", "description": "This will include pending members", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MemberDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MemberDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MemberDto" } } } } } } } }, "/api/Users/myself": { "get": { "tags": [ "Users" ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MemberDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MemberDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/MemberDto" } } } } } } } }, "/api/Users/has-reading-progress": { "get": { "tags": [ "Users" ], "parameters": [ { "name": "libraryId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Users/has-library-access": { "get": { "tags": [ "Users" ], "parameters": [ { "name": "libraryId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/Users/update-preferences": { "post": { "tags": [ "Users" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserPreferencesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserPreferencesDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UserPreferencesDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserPreferencesDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserPreferencesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserPreferencesDto" } } } } } } }, "/api/Users/get-preferences": { "get": { "tags": [ "Users" ], "summary": "Returns the preferences of the user", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/UserPreferencesDto" } }, "application/json": { "schema": { "$ref": "#/components/schemas/UserPreferencesDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UserPreferencesDto" } } } } } } }, "/api/Users/names": { "get": { "tags": [ "Users" ], "summary": "Returns a list of the user names within the system", "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "type": "string" } } }, "application/json": { "schema": { "type": "array", "items": { "type": "string" } } }, "text/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } }, "/api/want-to-read": { "post": { "tags": [ "WantToRead" ], "summary": "Return all Series that are in the current logged in user's Want to Read list, filtered (deprecated, use v2)", "description": "This will be removed in v0.8.x", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterDto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } }, "deprecated": true }, "get": { "tags": [ "WantToRead" ], "parameters": [ { "name": "seriesId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "boolean" } }, "application/json": { "schema": { "type": "boolean" } }, "text/json": { "schema": { "type": "boolean" } } } } } } }, "/api/want-to-read/v2": { "post": { "tags": [ "WantToRead" ], "summary": "Return all Series that are in the current logged in user's Want to Read list, filtered", "parameters": [ { "name": "PageNumber", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "PageSize", "in": "query", "description": "If set to 0, will set as MaxInt", "schema": { "type": "integer", "format": "int32" } } ], "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/FilterV2Dto" } } } }, "responses": { "200": { "description": "Success", "content": { "text/plain": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } }, "text/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" } } } } } } } }, "/api/want-to-read/add-series": { "post": { "tags": [ "WantToRead" ], "summary": "Given a list of Series Ids, add them to the current logged in user's Want To Read list", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateWantToReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateWantToReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateWantToReadDto" } } } }, "responses": { "200": { "description": "Success" } } } }, "/api/want-to-read/remove-series": { "post": { "tags": [ "WantToRead" ], "summary": "Given a list of Series Ids, remove them from the current logged in user's Want To Read list", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateWantToReadDto" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateWantToReadDto" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateWantToReadDto" } } } }, "responses": { "200": { "description": "Success" } } } } }, "components": { "schemas": { "AgeRatingDto": { "type": "object", "properties": { "value": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "Represents Age Rating for content.", "format": "int32" }, "title": { "type": "string", "nullable": true } }, "additionalProperties": false }, "AgeRestrictionDto": { "type": "object", "properties": { "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "The maximum age rating a user has access to. -1 if not applicable", "format": "int32" }, "includeUnknowns": { "type": "boolean", "description": "Are Unknowns explicitly allowed against age rating" } }, "additionalProperties": false }, "AniListUpdateDto": { "type": "object", "properties": { "token": { "type": "string", "nullable": true } }, "additionalProperties": false }, "AppRole": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "normalizedName": { "type": "string", "nullable": true }, "concurrencyStamp": { "type": "string", "nullable": true }, "userRoles": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserRole" }, "nullable": true } }, "additionalProperties": false }, "AppUser": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "userName": { "type": "string", "nullable": true }, "normalizedUserName": { "type": "string", "nullable": true }, "email": { "type": "string", "nullable": true }, "normalizedEmail": { "type": "string", "nullable": true }, "emailConfirmed": { "type": "boolean" }, "passwordHash": { "type": "string", "nullable": true }, "securityStamp": { "type": "string", "nullable": true }, "concurrencyStamp": { "type": "string", "nullable": true }, "phoneNumber": { "type": "string", "nullable": true }, "phoneNumberConfirmed": { "type": "boolean" }, "twoFactorEnabled": { "type": "boolean" }, "lockoutEnd": { "type": "string", "format": "date-time", "nullable": true }, "lockoutEnabled": { "type": "boolean" }, "accessFailedCount": { "type": "integer", "format": "int32" }, "created": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastActive": { "type": "string", "format": "date-time" }, "lastActiveUtc": { "type": "string", "format": "date-time" }, "libraries": { "type": "array", "items": { "$ref": "#/components/schemas/Library" }, "nullable": true }, "userRoles": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserRole" }, "nullable": true }, "progresses": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserProgress" }, "nullable": true }, "ratings": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserRating" }, "nullable": true }, "userPreferences": { "$ref": "#/components/schemas/AppUserPreferences" }, "bookmarks": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserBookmark" }, "description": "Bookmarks associated with this User", "nullable": true }, "readingLists": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingList" }, "description": "Reading lists associated with this user", "nullable": true }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollection" }, "description": "Collections associated with this user", "nullable": true }, "wantToRead": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserWantToRead" }, "description": "A list of Series the user want's to read", "nullable": true }, "devices": { "type": "array", "items": { "$ref": "#/components/schemas/Device" }, "description": "A list of Devices which allows the user to send files to", "nullable": true }, "tableOfContents": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserTableOfContent" }, "description": "A list of Table of Contents for a given Chapter", "nullable": true }, "apiKey": { "type": "string", "description": "An API Key to interact with external services, like OPDS", "nullable": true }, "confirmationToken": { "type": "string", "description": "The confirmation token for the user (invite). This will be set to null after the user confirms.", "nullable": true }, "ageRestriction": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "The highest age rating the user has access to. Not applicable for admins", "format": "int32" }, "ageRestrictionIncludeUnknowns": { "type": "boolean", "description": "If an age rating restriction is applied to the account, if Unknowns should be allowed for the user. Defaults to false." }, "aniListAccessToken": { "type": "string", "description": "The JWT for the user's AniList account. Expires after a year.", "nullable": true }, "malUserName": { "type": "string", "description": "The Username of the MAL user", "nullable": true }, "malAccessToken": { "type": "string", "description": "The Client ID for the user's MAL account. User should create a client on MAL for this.", "nullable": true }, "scrobbleHolds": { "type": "array", "items": { "$ref": "#/components/schemas/ScrobbleHold" }, "description": "A list of Series the user doesn't want scrobbling for", "nullable": true }, "smartFilters": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserSmartFilter" }, "description": "A collection of user Smart Filters for their account", "nullable": true }, "dashboardStreams": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserDashboardStream" }, "description": "An ordered list of Streams (pre-configured) or Smart Filters that makes up the User's Dashboard", "nullable": true }, "sideNavStreams": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserSideNavStream" }, "description": "An ordered list of Streams (pre-configured) or Smart Filters that makes up the User's SideNav", "nullable": true }, "externalSources": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserExternalSource" }, "nullable": true }, "rowVersion": { "type": "integer", "format": "int32", "readOnly": true } }, "additionalProperties": false }, "AppUserBookmark": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "page": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "volumeId": { "type": "integer", "format": "int32" }, "chapterId": { "type": "integer", "format": "int32" }, "fileName": { "type": "string", "description": "Filename in the Bookmark Directory", "nullable": true }, "appUserId": { "type": "integer", "format": "int32" }, "created": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" } }, "additionalProperties": false, "description": "Represents a saved page in a Chapter entity for a given user." }, "AppUserCollection": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "normalizedTitle": { "type": "string", "description": "A normalized string used to check if the collection already exists in the DB", "nullable": true }, "summary": { "type": "string", "nullable": true }, "promoted": { "type": "boolean", "description": "Reading lists that are promoted are only done by admins" }, "coverImage": { "type": "string", "description": "Path to the (managed) image file", "nullable": true }, "coverImageLocked": { "type": "boolean" }, "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "The highest age rating from all Series within the collection", "format": "int32" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/Series" }, "nullable": true }, "created": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "lastSyncUtc": { "type": "string", "description": "Last time Kavita Synced the Collection with an upstream source (for non Kavita sourced collections)", "format": "date-time" }, "source": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Who created/manages the list. Non-Kavita lists are not editable by the user, except to promote", "format": "int32" }, "sourceUrl": { "type": "string", "description": "For Non-Kavita sourced collections, the url to sync from", "nullable": true }, "totalSourceCount": { "type": "integer", "description": "Total number of items as of the last sync. Not applicable for Kavita managed collections.", "format": "int32" }, "missingSeriesFromSource": { "type": "string", "description": "A
separated string of all missing series", "nullable": true }, "appUser": { "$ref": "#/components/schemas/AppUser" }, "appUserId": { "type": "integer", "format": "int32" } }, "additionalProperties": false, "description": "Represents a Collection of Series for a given User" }, "AppUserCollectionDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "summary": { "type": "string", "nullable": true }, "promoted": { "type": "boolean" }, "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "Represents Age Rating for content.", "format": "int32" }, "coverImage": { "type": "string", "description": "This is used to tell the UI if it should request a Cover Image or not. If null or empty, it has not been set.", "nullable": true }, "coverImageLocked": { "type": "boolean" }, "owner": { "type": "string", "description": "Owner of the Collection", "nullable": true }, "lastSyncUtc": { "type": "string", "description": "Last time Kavita Synced the Collection with an upstream source (for non Kavita sourced collections)", "format": "date-time" }, "source": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Who created/manages the list. Non-Kavita lists are not editable by the user, except to promote", "format": "int32" }, "sourceUrl": { "type": "string", "description": "For Non-Kavita sourced collections, the url to sync from", "nullable": true }, "totalSourceCount": { "type": "integer", "description": "Total number of items as of the last sync. Not applicable for Kavita managed collections.", "format": "int32" }, "missingSeriesFromSource": { "type": "string", "description": "A
separated string of all missing series", "nullable": true } }, "additionalProperties": false }, "AppUserDashboardStream": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "isProvided": { "type": "boolean", "description": "Is System Provided" }, "order": { "type": "integer", "description": "Sort Order on the Dashboard", "format": "int32" }, "streamType": { "enum": [ 1, 2, 3, 4, 5 ], "type": "integer", "description": "For system provided", "format": "int32" }, "visible": { "type": "boolean" }, "smartFilter": { "$ref": "#/components/schemas/AppUserSmartFilter" }, "appUserId": { "type": "integer", "format": "int32" }, "appUser": { "$ref": "#/components/schemas/AppUser" } }, "additionalProperties": false }, "AppUserExternalSource": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "host": { "type": "string", "nullable": true }, "apiKey": { "type": "string", "nullable": true }, "appUserId": { "type": "integer", "format": "int32" }, "appUser": { "$ref": "#/components/schemas/AppUser" } }, "additionalProperties": false }, "AppUserPreferences": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "readingDirection": { "enum": [ 0, 1 ], "type": "integer", "description": "Manga Reader Option: What direction should the next/prev page buttons go", "format": "int32" }, "scalingOption": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "description": "Manga Reader Option: How should the image be scaled to screen", "format": "int32" }, "pageSplitOption": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "description": "Manga Reader Option: Which side of a split image should we show first", "format": "int32" }, "readerMode": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Manga Reader Option: How the manga reader should perform paging or reading of the file\r\n\r\nWebtoon uses scrolling to page, MANGA_LR uses paging by clicking left/right side of reader, MANGA_UD uses paging\r\nby clicking top/bottom sides of reader.\r\n", "format": "int32" }, "autoCloseMenu": { "type": "boolean", "description": "Manga Reader Option: Allow the menu to close after 6 seconds without interaction" }, "showScreenHints": { "type": "boolean", "description": "Manga Reader Option: Show screen hints to the user on some actions, ie) pagination direction change" }, "emulateBook": { "type": "boolean", "description": "Manga Reader Option: Emulate a book by applying a shadow effect on the pages" }, "layoutMode": { "enum": [ 1, 2, 3 ], "type": "integer", "description": "Manga Reader Option: How many pages to display in the reader at once", "format": "int32" }, "backgroundColor": { "type": "string", "description": "Manga Reader Option: Background color of the reader", "nullable": true }, "swipeToPaginate": { "type": "boolean", "description": "Manga Reader Option: Should swiping trigger pagination" }, "bookReaderMargin": { "type": "integer", "description": "Book Reader Option: Override extra Margin", "format": "int32" }, "bookReaderLineSpacing": { "type": "integer", "description": "Book Reader Option: Override line-height", "format": "int32" }, "bookReaderFontSize": { "type": "integer", "description": "Book Reader Option: Override font size", "format": "int32" }, "bookReaderFontFamily": { "type": "string", "description": "Book Reader Option: Maps to the default Kavita font-family (inherit) or an override", "nullable": true }, "bookReaderTapToPaginate": { "type": "boolean", "description": "Book Reader Option: Allows tapping on side of screens to paginate" }, "bookReaderReadingDirection": { "enum": [ 0, 1 ], "type": "integer", "description": "Book Reader Option: What direction should the next/prev page buttons go", "format": "int32" }, "bookReaderWritingStyle": { "enum": [ 0, 1 ], "type": "integer", "description": "Book Reader Option: Defines the writing styles vertical/horizontal", "format": "int32" }, "bookThemeName": { "type": "string", "description": "Book Reader Option: The color theme to decorate the book contents", "nullable": true }, "bookReaderLayoutMode": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Book Reader Option: The way a page from a book is rendered. Default is as book dictates, 1 column is fit to height,\r\n2 column is fit to height, 2 columns", "format": "int32" }, "bookReaderImmersiveMode": { "type": "boolean", "description": "Book Reader Option: A flag that hides the menu-ing system behind a click on the screen. This should be used with tap to paginate, but the app doesn't enforce this." }, "pdfTheme": { "enum": [ 0, 1 ], "type": "integer", "description": "PDF Reader: Theme of the Reader", "format": "int32" }, "pdfScrollMode": { "enum": [ 0, 1, 3 ], "type": "integer", "description": "PDF Reader: Scroll mode of the reader", "format": "int32" }, "pdfSpreadMode": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "PDF Reader: Spread Mode of the reader", "format": "int32" }, "theme": { "$ref": "#/components/schemas/SiteTheme" }, "globalPageLayoutMode": { "enum": [ 0, 1 ], "type": "integer", "description": "Global Site Option: If the UI should layout items as Cards or List items", "format": "int32" }, "blurUnreadSummaries": { "type": "boolean", "description": "UI Site Global Setting: If unread summaries should be blurred until expanded or unless user has read it already" }, "promptForDownloadSize": { "type": "boolean", "description": "UI Site Global Setting: Should Kavita prompt user to confirm downloads that are greater than 100 MB." }, "noTransitions": { "type": "boolean", "description": "UI Site Global Setting: Should Kavita disable CSS transitions" }, "collapseSeriesRelationships": { "type": "boolean", "description": "UI Site Global Setting: When showing series, only parent series or series with no relationships will be returned" }, "shareReviews": { "type": "boolean", "description": "UI Site Global Setting: Should series reviews be shared with all users in the server" }, "locale": { "type": "string", "description": "UI Site Global Setting: The language locale that should be used for the user", "nullable": true }, "appUser": { "$ref": "#/components/schemas/AppUser" }, "appUserId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "AppUserProgress": { "type": "object", "properties": { "id": { "type": "integer", "description": "Id of Entity", "format": "int32" }, "pagesRead": { "type": "integer", "description": "Pages Read for given Chapter", "format": "int32" }, "volumeId": { "type": "integer", "description": "Volume belonging to Chapter", "format": "int32" }, "seriesId": { "type": "integer", "description": "Series belonging to Chapter", "format": "int32" }, "libraryId": { "type": "integer", "description": "Library belonging to Chapter", "format": "int32" }, "chapterId": { "type": "integer", "description": "Chapter", "format": "int32" }, "bookScrollId": { "type": "string", "description": "For Book Reader, represents the nearest passed anchor on the screen that can be used to resume scroll point\r\non next load", "nullable": true }, "created": { "type": "string", "description": "When this was first created", "format": "date-time" }, "lastModified": { "type": "string", "description": "Last date this was updated", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "appUser": { "$ref": "#/components/schemas/AppUser" }, "appUserId": { "type": "integer", "description": "User this progress belongs to", "format": "int32" } }, "additionalProperties": false, "description": "Represents the progress a single user has on a given Chapter." }, "AppUserRating": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "rating": { "type": "number", "description": "A number between 0-5.0 that represents how good a series is.", "format": "float" }, "hasBeenRated": { "type": "boolean", "description": "If the rating has been explicitly set. Otherwise the 0.0 rating should be ignored as it's not rated" }, "review": { "type": "string", "description": "A short summary the user can write when giving their review.", "nullable": true }, "tagline": { "type": "string", "description": "An optional tagline for the review", "nullable": true }, "seriesId": { "type": "integer", "format": "int32" }, "series": { "$ref": "#/components/schemas/Series" }, "appUserId": { "type": "integer", "format": "int32" }, "appUser": { "$ref": "#/components/schemas/AppUser" } }, "additionalProperties": false }, "AppUserRole": { "type": "object", "properties": { "userId": { "type": "integer", "format": "int32" }, "roleId": { "type": "integer", "format": "int32" }, "user": { "$ref": "#/components/schemas/AppUser" }, "role": { "$ref": "#/components/schemas/AppRole" } }, "additionalProperties": false }, "AppUserSideNavStream": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "isProvided": { "type": "boolean", "description": "Is System Provided" }, "order": { "type": "integer", "description": "Sort Order on the Dashboard", "format": "int32" }, "libraryId": { "type": "integer", "description": "Library Id is for StreamType.Library only", "format": "int32", "nullable": true }, "externalSourceId": { "type": "integer", "description": "Only set for StreamType.ExternalSource", "format": "int32", "nullable": true }, "streamType": { "enum": [ 1, 2, 3, 4, 5, 6, 7, 8 ], "type": "integer", "description": "For system provided", "format": "int32" }, "visible": { "type": "boolean" }, "smartFilter": { "$ref": "#/components/schemas/AppUserSmartFilter" }, "appUserId": { "type": "integer", "format": "int32" }, "appUser": { "$ref": "#/components/schemas/AppUser" } }, "additionalProperties": false }, "AppUserSmartFilter": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "filter": { "type": "string", "description": "This is the Filter url encoded. It is decoded and reconstructed into a API.DTOs.Filtering.v2.FilterV2Dto", "nullable": true }, "appUserId": { "type": "integer", "format": "int32" }, "appUser": { "$ref": "#/components/schemas/AppUser" } }, "additionalProperties": false, "description": "Represents a Saved user Filter" }, "AppUserTableOfContent": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "pageNumber": { "type": "integer", "description": "The page to bookmark", "format": "int32" }, "title": { "type": "string", "description": "The title of the bookmark. Defaults to Page {PageNumber} if not set", "nullable": true }, "seriesId": { "type": "integer", "format": "int32" }, "series": { "$ref": "#/components/schemas/Series" }, "chapterId": { "type": "integer", "format": "int32" }, "chapter": { "$ref": "#/components/schemas/Chapter" }, "volumeId": { "type": "integer", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "bookScrollId": { "type": "string", "description": "For Book Reader, represents the nearest passed anchor on the screen that can be used to resume scroll point. If empty, the ToC point is the beginning of the page", "nullable": true }, "created": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "appUser": { "$ref": "#/components/schemas/AppUser" }, "appUserId": { "type": "integer", "description": "User this table of content belongs to", "format": "int32" } }, "additionalProperties": false, "description": "A personal table of contents for a given user linked with a given book" }, "AppUserWantToRead": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "series": { "$ref": "#/components/schemas/Series" }, "appUser": { "$ref": "#/components/schemas/AppUser" }, "appUserId": { "type": "integer", "description": "User this table of content belongs to", "format": "int32" } }, "additionalProperties": false }, "BookChapterItem": { "type": "object", "properties": { "title": { "type": "string", "description": "Name of the Chapter", "nullable": true }, "part": { "type": "string", "description": "A part represents the id of the anchor so we can scroll to it. 01_values.xhtml#h_sVZPaxUSy/", "nullable": true }, "page": { "type": "integer", "description": "Page Number to load for the chapter", "format": "int32" }, "children": { "type": "array", "items": { "$ref": "#/components/schemas/BookChapterItem" }, "nullable": true } }, "additionalProperties": false }, "BookInfoDto": { "type": "object", "properties": { "bookTitle": { "type": "string", "nullable": true }, "seriesId": { "type": "integer", "format": "int32" }, "volumeId": { "type": "integer", "format": "int32" }, "seriesFormat": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "seriesName": { "type": "string", "nullable": true }, "chapterNumber": { "type": "string", "nullable": true }, "volumeNumber": { "type": "string", "nullable": true }, "libraryId": { "type": "integer", "format": "int32" }, "pages": { "type": "integer", "format": "int32" }, "isSpecial": { "type": "boolean" }, "chapterTitle": { "type": "string", "nullable": true } }, "additionalProperties": false }, "BookmarkDto": { "required": [ "chapterId", "page", "seriesId", "volumeId" ], "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "page": { "type": "integer", "format": "int32" }, "volumeId": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "chapterId": { "type": "integer", "format": "int32" }, "series": { "$ref": "#/components/schemas/SeriesDto" } }, "additionalProperties": false }, "BookmarkInfoDto": { "type": "object", "properties": { "seriesName": { "type": "string", "nullable": true }, "seriesFormat": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "libraryType": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" }, "pages": { "type": "integer", "format": "int32" }, "pageDimensions": { "type": "array", "items": { "$ref": "#/components/schemas/FileDimensionDto" }, "description": "List of all files with their inner archive structure maintained in filename and dimensions", "nullable": true }, "doublePairs": { "type": "object", "additionalProperties": { "type": "integer", "format": "int32" }, "description": "For Double Page reader, this will contain snap points to ensure the reader always resumes on correct page", "nullable": true } }, "additionalProperties": false }, "BookmarkSearchResultDto": { "type": "object", "properties": { "libraryId": { "type": "integer", "format": "int32" }, "volumeId": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "chapterId": { "type": "integer", "format": "int32" }, "seriesName": { "type": "string", "nullable": true }, "localizedSeriesName": { "type": "string", "nullable": true } }, "additionalProperties": false }, "BulkRemoveBookmarkForSeriesDto": { "type": "object", "properties": { "seriesIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true } }, "additionalProperties": false }, "BulkUpdateSideNavStreamVisibilityDto": { "type": "object", "properties": { "ids": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "visibility": { "type": "boolean" } }, "additionalProperties": false }, "CblBookResult": { "type": "object", "properties": { "order": { "type": "integer", "description": "Order in the CBL", "format": "int32" }, "series": { "type": "string", "nullable": true }, "volume": { "type": "string", "nullable": true }, "number": { "type": "string", "nullable": true }, "libraryId": { "type": "integer", "description": "Used on Series conflict", "format": "int32" }, "seriesId": { "type": "integer", "description": "Used on Series conflict", "format": "int32" }, "readingListName": { "type": "string", "description": "The name of the reading list", "nullable": true }, "reason": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], "type": "integer", "format": "int32" } }, "additionalProperties": false }, "CblImportSummaryDto": { "type": "object", "properties": { "cblName": { "type": "string", "nullable": true }, "fileName": { "type": "string", "description": "Used only for Kavita's UI, the filename of the cbl", "nullable": true }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/CblBookResult" }, "nullable": true }, "success": { "enum": [ 0, 1, 2 ], "type": "integer", "format": "int32" }, "successfulInserts": { "type": "array", "items": { "$ref": "#/components/schemas/CblBookResult" }, "nullable": true } }, "additionalProperties": false, "description": "Represents the summary from the Import of a given CBL" }, "Chapter": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "range": { "type": "string", "description": "Range of numbers. Chapter 2-4 -> \"2-4\". Chapter 2 -> \"2\". If the chapter is a special, will return the Special Name", "nullable": true }, "number": { "type": "string", "description": "Smallest number of the Range. Can be a partial like Chapter 4.5", "nullable": true, "deprecated": true }, "minNumber": { "type": "number", "description": "Minimum Chapter Number.", "format": "float" }, "maxNumber": { "type": "number", "description": "Maximum Chapter Number", "format": "float" }, "sortOrder": { "type": "number", "description": "The sorting order of the Chapter. Inherits from MinNumber, but can be overridden.", "format": "float" }, "sortOrderLocked": { "type": "boolean", "description": "Can the sort order be updated on scan or is it locked from UI" }, "files": { "type": "array", "items": { "$ref": "#/components/schemas/MangaFile" }, "description": "The files that represent this Chapter", "nullable": true }, "created": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "coverImage": { "type": "string", "description": "Relative path to the (managed) image file representing the cover image", "nullable": true }, "coverImageLocked": { "type": "boolean" }, "pages": { "type": "integer", "description": "Total number of pages in all MangaFiles", "format": "int32" }, "isSpecial": { "type": "boolean", "description": "If this Chapter contains files that could only be identified as Series or has Special Identifier from filename" }, "title": { "type": "string", "description": "Used for books/specials to display custom title. For non-specials/books, will be set to API.Entities.Chapter.Range", "nullable": true }, "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "Age Rating for the issue/chapter", "format": "int32" }, "titleName": { "type": "string", "description": "Chapter title", "nullable": true }, "releaseDate": { "type": "string", "description": "Date which chapter was released", "format": "date-time" }, "summary": { "type": "string", "description": "Summary for the Chapter/Issue", "nullable": true }, "language": { "type": "string", "description": "Language for the Chapter/Issue", "nullable": true }, "totalCount": { "type": "integer", "description": "Total number of issues or volumes in the series. This is straight from ComicInfo", "format": "int32" }, "count": { "type": "integer", "description": "Number of the Total Count (progress the Series is complete)", "format": "int32" }, "seriesGroup": { "type": "string", "description": "SeriesGroup tag in ComicInfo", "nullable": true }, "storyArc": { "type": "string", "nullable": true }, "storyArcNumber": { "type": "string", "nullable": true }, "alternateNumber": { "type": "string", "nullable": true }, "alternateSeries": { "type": "string", "nullable": true }, "alternateCount": { "type": "integer", "description": "Not currently used in Kavita", "format": "int32" }, "wordCount": { "type": "integer", "description": "Total Word count of all chapters in this chapter.", "format": "int64" }, "minHoursToRead": { "type": "integer", "format": "int32" }, "maxHoursToRead": { "type": "integer", "format": "int32" }, "avgHoursToRead": { "type": "integer", "format": "int32" }, "webLinks": { "type": "string", "description": "Comma-separated link of urls to external services that have some relation to the Chapter", "nullable": true }, "isbn": { "type": "string", "nullable": true }, "people": { "type": "array", "items": { "$ref": "#/components/schemas/Person" }, "description": "All people attached at a Chapter level. Usually Comics will have different people per issue.", "nullable": true }, "genres": { "type": "array", "items": { "$ref": "#/components/schemas/Genre" }, "description": "Genres for the Chapter", "nullable": true }, "tags": { "type": "array", "items": { "$ref": "#/components/schemas/Tag" }, "nullable": true }, "userProgress": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserProgress" }, "nullable": true }, "volume": { "$ref": "#/components/schemas/Volume" }, "volumeId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "ChapterDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "range": { "type": "string", "description": "Range of chapters. Chapter 2-4 -> \"2-4\". Chapter 2 -> \"2\". If special, will be special name.", "nullable": true }, "number": { "type": "string", "description": "Smallest number of the Range.", "nullable": true, "deprecated": true }, "minNumber": { "type": "number", "description": "This may be 0 under the circumstance that the Issue is \"Alpha\" or other non-standard numbers.", "format": "float" }, "maxNumber": { "type": "number", "format": "float" }, "sortOrder": { "type": "number", "description": "The sorting order of the Chapter. Inherits from MinNumber, but can be overridden.", "format": "float" }, "pages": { "type": "integer", "description": "Total number of pages in all MangaFiles", "format": "int32" }, "isSpecial": { "type": "boolean", "description": "If this Chapter contains files that could only be identified as Series or has Special Identifier from filename" }, "title": { "type": "string", "description": "Used for books/specials to display custom title. For non-specials/books, will be set to API.DTOs.ChapterDto.Range", "nullable": true }, "files": { "type": "array", "items": { "$ref": "#/components/schemas/MangaFileDto" }, "description": "The files that represent this Chapter", "nullable": true }, "pagesRead": { "type": "integer", "description": "Calculated at API time. Number of pages read for this Chapter for logged in user.", "format": "int32" }, "lastReadingProgressUtc": { "type": "string", "description": "The last time a chapter was read by current authenticated user", "format": "date-time" }, "lastReadingProgress": { "type": "string", "description": "The last time a chapter was read by current authenticated user", "format": "date-time" }, "coverImageLocked": { "type": "boolean", "description": "If the Cover Image is locked for this entity" }, "volumeId": { "type": "integer", "description": "Volume Id this Chapter belongs to", "format": "int32" }, "createdUtc": { "type": "string", "description": "When chapter was created", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "created": { "type": "string", "description": "When chapter was created in local server time", "format": "date-time" }, "releaseDate": { "type": "string", "description": "When the chapter was released.", "format": "date-time" }, "titleName": { "type": "string", "description": "Title of the Chapter/Issue", "nullable": true }, "summary": { "type": "string", "description": "Summary of the Chapter", "nullable": true }, "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "Age Rating for the issue/chapter", "format": "int32" }, "wordCount": { "type": "integer", "description": "Total words in a Chapter (books only)", "format": "int64" }, "volumeTitle": { "type": "string", "description": "Formatted Volume title ie) Volume 2.", "nullable": true }, "minHoursToRead": { "type": "integer", "format": "int32" }, "maxHoursToRead": { "type": "integer", "format": "int32" }, "avgHoursToRead": { "type": "integer", "format": "int32" }, "webLinks": { "type": "string", "description": "Comma-separated link of urls to external services that have some relation to the Chapter", "nullable": true }, "isbn": { "type": "string", "description": "ISBN-13 (usually) of the Chapter", "nullable": true }, "writers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "coverArtists": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "publishers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "characters": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "pencillers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "inkers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "imprints": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "colorists": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "letterers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "editors": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "translators": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "teams": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "locations": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "genres": { "type": "array", "items": { "$ref": "#/components/schemas/GenreTagDto" }, "nullable": true }, "tags": { "type": "array", "items": { "$ref": "#/components/schemas/TagDto" }, "description": "Collection of all Tags from underlying chapters for a Series", "nullable": true }, "publicationStatus": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "format": "int32" }, "language": { "type": "string", "description": "Language for the Chapter/Issue", "nullable": true }, "count": { "type": "integer", "description": "Number in the TotalCount of issues", "format": "int32" }, "totalCount": { "type": "integer", "description": "Total number of issues for the series", "format": "int32" } }, "additionalProperties": false, "description": "A Chapter is the lowest grouping of a reading medium. A Chapter contains a set of MangaFiles which represents the underlying\r\nfile (abstracted from type)." }, "ChapterInfoDto": { "type": "object", "properties": { "chapterNumber": { "type": "string", "description": "The Chapter Number", "nullable": true }, "volumeNumber": { "type": "string", "description": "The Volume Number", "nullable": true }, "volumeId": { "type": "integer", "description": "Volume entity Id", "format": "int32" }, "seriesName": { "type": "string", "description": "Series Name", "nullable": true }, "seriesFormat": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Series Format", "format": "int32" }, "seriesId": { "type": "integer", "description": "Series entity Id", "format": "int32" }, "libraryId": { "type": "integer", "description": "Library entity Id", "format": "int32" }, "libraryType": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "description": "Library type", "format": "int32" }, "chapterTitle": { "type": "string", "description": "Chapter's title if set via ComicInfo.xml (Title field)", "nullable": true }, "pages": { "type": "integer", "description": "Total Number of pages in this Chapter", "format": "int32" }, "fileName": { "type": "string", "description": "File name of the chapter", "nullable": true }, "isSpecial": { "type": "boolean", "description": "If this is marked as a special in Kavita" }, "subtitle": { "type": "string", "description": "The subtitle to render on the reader", "nullable": true }, "title": { "type": "string", "description": "Series Title", "nullable": true }, "seriesTotalPages": { "type": "integer", "description": "Total pages for the series", "format": "int32" }, "seriesTotalPagesRead": { "type": "integer", "description": "Total pages read for the series", "format": "int32" }, "pageDimensions": { "type": "array", "items": { "$ref": "#/components/schemas/FileDimensionDto" }, "description": "List of all files with their inner archive structure maintained in filename and dimensions", "nullable": true }, "doublePairs": { "type": "object", "additionalProperties": { "type": "integer", "format": "int32" }, "description": "For Double Page reader, this will contain snap points to ensure the reader always resumes on correct page", "nullable": true } }, "additionalProperties": false, "description": "Information about the Chapter for the Reader to render" }, "ChapterMetadataDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "chapterId": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "writers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "coverArtists": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "publishers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "characters": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "pencillers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "inkers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "imprints": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "colorists": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "letterers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "editors": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "translators": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "teams": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "locations": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "genres": { "type": "array", "items": { "$ref": "#/components/schemas/GenreTagDto" }, "nullable": true }, "tags": { "type": "array", "items": { "$ref": "#/components/schemas/TagDto" }, "description": "Collection of all Tags from underlying chapters for a Series", "nullable": true }, "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "Represents Age Rating for content.", "format": "int32" }, "releaseDate": { "type": "string", "nullable": true }, "publicationStatus": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "format": "int32" }, "summary": { "type": "string", "description": "Summary for the Chapter/Issue", "nullable": true }, "language": { "type": "string", "description": "Language for the Chapter/Issue", "nullable": true }, "count": { "type": "integer", "description": "Number in the TotalCount of issues", "format": "int32" }, "totalCount": { "type": "integer", "description": "Total number of issues for the series", "format": "int32" }, "wordCount": { "type": "integer", "description": "Number of Words for this chapter. Only applies to Epub", "format": "int64" } }, "additionalProperties": false, "description": "Exclusively metadata about a given chapter" }, "CollectionTag": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "title": { "type": "string", "description": "Visible title of the Tag", "nullable": true }, "coverImage": { "type": "string", "description": "Absolute path to the (managed) image file", "nullable": true }, "coverImageLocked": { "type": "boolean", "description": "Denotes if the CoverImage has been overridden by the user. If so, it will not be updated during normal scan operations." }, "summary": { "type": "string", "description": "A description of the tag", "nullable": true }, "normalizedTitle": { "type": "string", "description": "A normalized string used to check if the tag already exists in the DB", "nullable": true }, "promoted": { "type": "boolean", "description": "A promoted collection tag will allow all linked seriesMetadata's Series to show for all users." }, "seriesMetadatas": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesMetadata" }, "nullable": true }, "rowVersion": { "type": "integer", "description": "Not Used due to not using concurrency update", "format": "int32", "readOnly": true } }, "additionalProperties": false, "description": "Represents a user entered field that is used as a tagging and grouping mechanism" }, "CollectionTagBulkAddDto": { "type": "object", "properties": { "collectionTagId": { "type": "integer", "description": "Collection Tag Id", "format": "int32" }, "collectionTagTitle": { "type": "string", "nullable": true }, "seriesIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "Series Ids to add onto Collection Tag", "nullable": true } }, "additionalProperties": false }, "ConfirmEmailDto": { "required": [ "email", "password", "token", "username" ], "type": "object", "properties": { "email": { "minLength": 1, "type": "string" }, "token": { "minLength": 1, "type": "string" }, "password": { "maxLength": 32, "minLength": 6, "type": "string" }, "username": { "minLength": 1, "type": "string" } }, "additionalProperties": false }, "ConfirmEmailUpdateDto": { "required": [ "email", "token" ], "type": "object", "properties": { "email": { "minLength": 1, "type": "string" }, "token": { "minLength": 1, "type": "string" } }, "additionalProperties": false }, "ConfirmMigrationEmailDto": { "type": "object", "properties": { "email": { "type": "string", "nullable": true }, "token": { "type": "string", "nullable": true } }, "additionalProperties": false }, "ConfirmPasswordResetDto": { "required": [ "email", "password", "token" ], "type": "object", "properties": { "email": { "minLength": 1, "type": "string" }, "token": { "minLength": 1, "type": "string" }, "password": { "maxLength": 32, "minLength": 6, "type": "string" } }, "additionalProperties": false }, "CreateDeviceDto": { "required": [ "emailAddress", "name", "platform" ], "type": "object", "properties": { "name": { "minLength": 1, "type": "string" }, "platform": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "description": "Platform of the device. If not know, defaults to \"Custom\"", "format": "int32" }, "emailAddress": { "minLength": 1, "type": "string" } }, "additionalProperties": false }, "CreatePersonalToCDto": { "type": "object", "properties": { "chapterId": { "type": "integer", "format": "int32" }, "volumeId": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "pageNumber": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "bookScrollId": { "type": "string", "nullable": true } }, "additionalProperties": false }, "CreateReadingListDto": { "type": "object", "properties": { "title": { "type": "string", "nullable": true } }, "additionalProperties": false }, "DashboardStreamDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "isProvided": { "type": "boolean", "description": "Is System Provided" }, "order": { "type": "integer", "description": "Sort Order on the Dashboard", "format": "int32" }, "smartFilterEncoded": { "type": "string", "description": "If Not IsProvided, the appropriate smart filter", "nullable": true }, "smartFilterId": { "type": "integer", "format": "int32", "nullable": true }, "streamType": { "enum": [ 1, 2, 3, 4, 5 ], "type": "integer", "description": "For system provided", "format": "int32" }, "visible": { "type": "boolean" } }, "additionalProperties": false }, "DateTimePagesReadOnADayCount": { "type": "object", "properties": { "value": { "type": "string", "description": "The day of the readings", "format": "date-time" }, "count": { "type": "integer", "description": "Number of pages read", "format": "int64" }, "format": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Format of those files", "format": "int32" } }, "additionalProperties": false }, "DayOfWeekStatCount": { "type": "object", "properties": { "value": { "enum": [ 0, 1, 2, 3, 4, 5, 6 ], "type": "integer", "format": "int32" }, "count": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "DecodeFilterDto": { "type": "object", "properties": { "encodedFilter": { "type": "string", "nullable": true } }, "additionalProperties": false, "description": "For requesting an encoded filter to be decoded" }, "DeleteCollectionsDto": { "required": [ "collectionIds" ], "type": "object", "properties": { "collectionIds": { "type": "array", "items": { "type": "integer", "format": "int32" } } }, "additionalProperties": false }, "DeleteSeriesDto": { "type": "object", "properties": { "seriesIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true } }, "additionalProperties": false }, "Device": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "ipAddress": { "type": "string", "description": "Last Seen IP Address of the device", "nullable": true }, "name": { "type": "string", "description": "A name given to this device", "nullable": true, "example": "Pixel 3a, John's Kindle" }, "emailAddress": { "type": "string", "description": "An email address associated with the device (ie Kindle). Will be used with Send to functionality", "nullable": true }, "platform": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "description": "Platform (ie) Windows 10", "format": "int32" }, "appUserId": { "type": "integer", "format": "int32" }, "appUser": { "$ref": "#/components/schemas/AppUser" }, "lastUsed": { "type": "string", "description": "Last time this device was used to send a file", "format": "date-time" }, "lastUsedUtc": { "type": "string", "format": "date-time" }, "created": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" } }, "additionalProperties": false, "description": "A Device is an entity that can receive data from Kavita (kindle)" }, "DeviceDto": { "type": "object", "properties": { "id": { "type": "integer", "description": "The device Id", "format": "int32" }, "name": { "type": "string", "description": "A name given to this device", "nullable": true, "example": "Pixel 3a, John's Kindle" }, "emailAddress": { "type": "string", "description": "An email address associated with the device (ie Kindle). Will be used with Send to functionality", "nullable": true }, "platform": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "description": "Platform (ie) Windows 10", "format": "int32" } }, "additionalProperties": false, "description": "A Device is an entity that can receive data from Kavita (kindle)" }, "DirectoryDto": { "type": "object", "properties": { "name": { "type": "string", "description": "Name of the directory", "nullable": true }, "fullPath": { "type": "string", "description": "Full Directory Path", "nullable": true } }, "additionalProperties": false }, "DownloadBookmarkDto": { "required": [ "bookmarks" ], "type": "object", "properties": { "bookmarks": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkDto" } } }, "additionalProperties": false }, "DownloadableSiteThemeDto": { "type": "object", "properties": { "name": { "type": "string", "description": "Theme Name", "nullable": true }, "cssUrl": { "type": "string", "description": "Url to download css file", "nullable": true }, "cssFile": { "type": "string", "nullable": true }, "previewUrls": { "type": "array", "items": { "type": "string" }, "description": "Url to preview image", "nullable": true }, "alreadyDownloaded": { "type": "boolean", "description": "If Already downloaded" }, "sha": { "type": "string", "description": "Sha of the file", "nullable": true }, "path": { "type": "string", "description": "Path of the Folder the files reside in", "nullable": true }, "author": { "type": "string", "description": "Author of the theme", "nullable": true }, "lastCompatibleVersion": { "type": "string", "description": "Last version tested against", "nullable": true }, "isCompatible": { "type": "boolean", "description": "If version compatible with version" }, "description": { "type": "string", "description": "Small blurb about the Theme", "nullable": true } }, "additionalProperties": false }, "EmailTestResultDto": { "type": "object", "properties": { "successful": { "type": "boolean" }, "errorMessage": { "type": "string", "nullable": true }, "emailAddress": { "type": "string", "nullable": true } }, "additionalProperties": false, "description": "Represents if Test Email Service URL was successful or not and if any error occured" }, "ExternalRating": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "averageScore": { "type": "integer", "format": "int32" }, "favoriteCount": { "type": "integer", "format": "int32" }, "provider": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Misleading name but is the source of data (like a review coming from AniList)", "format": "int32" }, "providerUrl": { "type": "string", "nullable": true }, "seriesId": { "type": "integer", "format": "int32" }, "externalSeriesMetadatas": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalSeriesMetadata" }, "nullable": true } }, "additionalProperties": false }, "ExternalRecommendation": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "coverUrl": { "type": "string", "nullable": true }, "url": { "type": "string", "nullable": true }, "summary": { "type": "string", "nullable": true }, "aniListId": { "type": "integer", "format": "int32", "nullable": true }, "malId": { "type": "integer", "format": "int64", "nullable": true }, "provider": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Misleading name but is the source of data (like a review coming from AniList)", "format": "int32" }, "seriesId": { "type": "integer", "description": "When null, represents an external series. When set, it is a Series", "format": "int32", "nullable": true }, "externalSeriesMetadatas": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalSeriesMetadata" }, "nullable": true } }, "additionalProperties": false }, "ExternalReview": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "tagline": { "type": "string", "nullable": true }, "body": { "type": "string", "nullable": true }, "bodyJustText": { "type": "string", "description": "Pure text version of the body", "nullable": true }, "rawBody": { "type": "string", "description": "Raw from the provider. Usually Markdown", "nullable": true }, "provider": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Misleading name but is the source of data (like a review coming from AniList)", "format": "int32" }, "siteUrl": { "type": "string", "nullable": true }, "username": { "type": "string", "description": "Reviewer's username", "nullable": true }, "rating": { "type": "integer", "description": "An Optional Rating coming from the Review", "format": "int32" }, "score": { "type": "integer", "description": "The media's overall Score", "format": "int32" }, "totalVotes": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "externalSeriesMetadatas": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalSeriesMetadata" }, "nullable": true } }, "additionalProperties": false, "description": "Represents an Externally supplied Review for a given Series" }, "ExternalSeriesDto": { "type": "object", "properties": { "name": { "type": "string", "nullable": true }, "coverUrl": { "type": "string", "nullable": true }, "url": { "type": "string", "nullable": true }, "summary": { "type": "string", "nullable": true }, "aniListId": { "type": "integer", "format": "int32", "nullable": true }, "malId": { "type": "integer", "format": "int64", "nullable": true }, "provider": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Misleading name but is the source of data (like a review coming from AniList)", "format": "int32" } }, "additionalProperties": false }, "ExternalSeriesMetadata": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "externalReviews": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalReview" }, "description": "External Reviews for the Series. Managed by Kavita for Kavita+ users", "nullable": true }, "externalRatings": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalRating" }, "nullable": true }, "externalRecommendations": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalRecommendation" }, "description": "External recommendations will include all recommendations and will have a seriesId if it's on this Kavita instance.", "nullable": true }, "averageExternalRating": { "type": "integer", "description": "Average External Rating. -1 means not set", "format": "int32" }, "aniListId": { "type": "integer", "format": "int32" }, "malId": { "type": "integer", "format": "int64" }, "googleBooksId": { "type": "string", "nullable": true }, "validUntilUtc": { "type": "string", "description": "Data is valid until this time", "format": "date-time" }, "series": { "$ref": "#/components/schemas/Series" }, "seriesId": { "type": "integer", "format": "int32" } }, "additionalProperties": false, "description": "External Metadata from Kavita+ for a Series" }, "ExternalSourceDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "host": { "type": "string", "nullable": true }, "apiKey": { "type": "string", "nullable": true } }, "additionalProperties": false }, "FileDimensionDto": { "type": "object", "properties": { "width": { "type": "integer", "format": "int32" }, "height": { "type": "integer", "format": "int32" }, "pageNumber": { "type": "integer", "format": "int32" }, "fileName": { "type": "string", "description": "The filename of the cached file. If this was nested in a subfolder, the foldername will be appended with _", "nullable": true, "example": "chapter01_page01.png" }, "isWide": { "type": "boolean" } }, "additionalProperties": false }, "FileExtensionBreakdownDto": { "type": "object", "properties": { "totalFileSize": { "type": "integer", "description": "Total bytes for all files", "format": "int64" }, "fileBreakdown": { "type": "array", "items": { "$ref": "#/components/schemas/FileExtensionDto" }, "nullable": true } }, "additionalProperties": false }, "FileExtensionDto": { "type": "object", "properties": { "extension": { "type": "string", "nullable": true }, "format": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "totalSize": { "type": "integer", "format": "int64" }, "totalFiles": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "FileFormatDto": { "type": "object", "properties": { "extension": { "type": "string", "description": "The extension with the ., in lowercase", "nullable": true }, "format": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Format of extension", "format": "int32" } }, "additionalProperties": false }, "FilterDto": { "type": "object", "properties": { "formats": { "type": "array", "items": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "description": "The type of Formats you want to be returned. An empty list will return all formats back", "nullable": true }, "readStatus": { "$ref": "#/components/schemas/ReadStatus" }, "libraries": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of library ids to restrict search to. Defaults to all libraries by passing empty list", "nullable": true }, "genres": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Genre ids to restrict search to. Defaults to all genres by passing an empty list", "nullable": true }, "writers": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Writers to restrict search to. Defaults to all Writers by passing an empty list", "nullable": true }, "penciller": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Penciller ids to restrict search to. Defaults to all Pencillers by passing an empty list", "nullable": true }, "inker": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Inker ids to restrict search to. Defaults to all Inkers by passing an empty list", "nullable": true }, "colorist": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Colorist ids to restrict search to. Defaults to all Colorists by passing an empty list", "nullable": true }, "letterer": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Letterer ids to restrict search to. Defaults to all Letterers by passing an empty list", "nullable": true }, "coverArtist": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of CoverArtist ids to restrict search to. Defaults to all CoverArtists by passing an empty list", "nullable": true }, "editor": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Editor ids to restrict search to. Defaults to all Editors by passing an empty list", "nullable": true }, "publisher": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Publisher ids to restrict search to. Defaults to all Publishers by passing an empty list", "nullable": true }, "character": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Character ids to restrict search to. Defaults to all Characters by passing an empty list", "nullable": true }, "translators": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Translator ids to restrict search to. Defaults to all Translatorss by passing an empty list", "nullable": true }, "collectionTags": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Collection Tag ids to restrict search to. Defaults to all Collection Tags by passing an empty list", "nullable": true }, "tags": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Tag ids to restrict search to. Defaults to all Tags by passing an empty list", "nullable": true }, "rating": { "type": "integer", "description": "Will return back everything with the rating and above\r\nAPI.Entities.AppUserRating.Rating", "format": "int32" }, "sortOptions": { "$ref": "#/components/schemas/SortOptions" }, "ageRating": { "type": "array", "items": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "Represents Age Rating for content.", "format": "int32" }, "description": "Age Ratings. Empty list will return everything back", "nullable": true }, "languages": { "type": "array", "items": { "type": "string" }, "description": "Languages (ISO 639-1 code) to filter by. Empty list will return everything back", "nullable": true }, "publicationStatus": { "type": "array", "items": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "format": "int32" }, "description": "Publication statuses to filter by. Empty list will return everything back", "nullable": true }, "seriesNameQuery": { "type": "string", "description": "An optional name string to filter by. Empty string will ignore.", "nullable": true }, "releaseYearRange": { "$ref": "#/components/schemas/Int32Range" } }, "additionalProperties": false }, "FilterStatementDto": { "type": "object", "properties": { "comparison": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ], "type": "integer", "format": "int32" }, "field": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 ], "type": "integer", "description": "Represents the field which will dictate the value type and the Extension used for filtering", "format": "int32" }, "value": { "type": "string", "nullable": true } }, "additionalProperties": false }, "FilterV2Dto": { "type": "object", "properties": { "id": { "type": "integer", "description": "Not used in the UI.", "format": "int32" }, "name": { "type": "string", "description": "The name of the filter", "nullable": true }, "statements": { "type": "array", "items": { "$ref": "#/components/schemas/FilterStatementDto" }, "nullable": true }, "combination": { "enum": [ 0, 1 ], "type": "integer", "format": "int32" }, "sortOptions": { "$ref": "#/components/schemas/SortOptions" }, "limitTo": { "type": "integer", "description": "Limit the number of rows returned. Defaults to not applying a limit (aka 0)", "format": "int32" } }, "additionalProperties": false, "description": "Metadata filtering for v2 API only" }, "FolderPath": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "path": { "type": "string", "nullable": true }, "lastScanned": { "type": "string", "description": "Used when scanning to see if we can skip if nothing has changed", "format": "date-time" }, "library": { "$ref": "#/components/schemas/Library" }, "libraryId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "FullProgressDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "chapterId": { "type": "integer", "format": "int32" }, "pagesRead": { "type": "integer", "format": "int32" }, "lastModified": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "created": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "appUserId": { "type": "integer", "format": "int32" }, "userName": { "type": "string", "nullable": true } }, "additionalProperties": false, "description": "A full progress Record from the DB (not all data, only what's needed for API)" }, "Genre": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "normalizedTitle": { "type": "string", "nullable": true }, "seriesMetadatas": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesMetadata" }, "nullable": true }, "chapters": { "type": "array", "items": { "$ref": "#/components/schemas/Chapter" }, "nullable": true } }, "additionalProperties": false }, "GenreTagDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true } }, "additionalProperties": false }, "HourEstimateRangeDto": { "type": "object", "properties": { "minHours": { "type": "integer", "description": "Min hours to read the selection", "format": "int32" }, "maxHours": { "type": "integer", "description": "Max hours to read the selection", "format": "int32" }, "avgHours": { "type": "integer", "description": "Estimated average hours to read the selection", "format": "int32" } }, "additionalProperties": false, "description": "A range of time to read a selection (series, chapter, etc)" }, "Int32Range": { "type": "object", "properties": { "min": { "type": "integer", "format": "int32" }, "max": { "type": "integer", "format": "int32" } }, "additionalProperties": false, "description": "Represents a range between two int/float/double" }, "Int32StatCount": { "type": "object", "properties": { "value": { "type": "integer", "format": "int32" }, "count": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "InviteUserDto": { "required": [ "email" ], "type": "object", "properties": { "email": { "minLength": 1, "type": "string" }, "roles": { "type": "array", "items": { "type": "string" }, "description": "List of Roles to assign to user. If admin not present, Pleb will be applied.\r\nIf admin present, all libraries will be granted access and will ignore those from DTO.", "nullable": true }, "libraries": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of libraries to grant access to", "nullable": true }, "ageRestriction": { "$ref": "#/components/schemas/AgeRestrictionDto" } }, "additionalProperties": false }, "InviteUserResponse": { "type": "object", "properties": { "emailLink": { "type": "string", "description": "Email link used to setup the user account", "nullable": true }, "emailSent": { "type": "boolean", "description": "Was an email sent (ie is this server accessible)" }, "invalidEmail": { "type": "boolean", "description": "When a user has an invalid email and is attempting to perform a flow." } }, "additionalProperties": false }, "JobDto": { "type": "object", "properties": { "id": { "type": "string", "description": "Job Id", "nullable": true }, "title": { "type": "string", "description": "Human Readable title for the Job", "nullable": true }, "createdAtUtc": { "type": "string", "description": "When the job was created", "format": "date-time", "nullable": true }, "lastExecutionUtc": { "type": "string", "description": "Last time the job was run", "format": "date-time", "nullable": true }, "cron": { "type": "string", "nullable": true } }, "additionalProperties": false }, "JumpKeyDto": { "type": "object", "properties": { "size": { "type": "integer", "description": "Number of items in this Key", "format": "int32" }, "key": { "type": "string", "description": "Code to use in URL (url encoded)", "nullable": true }, "title": { "type": "string", "description": "What is visible to user", "nullable": true } }, "additionalProperties": false, "description": "Represents an individual button in a Jump Bar" }, "LanguageDto": { "type": "object", "properties": { "isoCode": { "type": "string", "nullable": true }, "title": { "type": "string", "nullable": true } }, "additionalProperties": false }, "Library": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "coverImage": { "type": "string", "nullable": true }, "type": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" }, "folderWatching": { "type": "boolean", "description": "If Folder Watching is enabled for this library" }, "includeInDashboard": { "type": "boolean", "description": "Include Library series on Dashboard Streams" }, "includeInRecommended": { "type": "boolean", "description": "Include Library series on Recommended Streams" }, "includeInSearch": { "type": "boolean", "description": "Include library series in Search" }, "manageCollections": { "type": "boolean", "description": "Should this library create collections from Metadata" }, "manageReadingLists": { "type": "boolean", "description": "Should this library create reading lists from Metadata" }, "allowScrobbling": { "type": "boolean", "description": "Should this library allow Scrobble events to emit from it" }, "created": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "lastScanned": { "type": "string", "description": "Last time Library was scanned", "format": "date-time" }, "folders": { "type": "array", "items": { "$ref": "#/components/schemas/FolderPath" }, "nullable": true }, "appUsers": { "type": "array", "items": { "$ref": "#/components/schemas/AppUser" }, "nullable": true }, "series": { "type": "array", "items": { "$ref": "#/components/schemas/Series" }, "nullable": true }, "libraryFileTypes": { "type": "array", "items": { "$ref": "#/components/schemas/LibraryFileTypeGroup" }, "nullable": true }, "libraryExcludePatterns": { "type": "array", "items": { "$ref": "#/components/schemas/LibraryExcludePattern" }, "nullable": true } }, "additionalProperties": false }, "LibraryDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "lastScanned": { "type": "string", "description": "Last time Library was scanned", "format": "date-time" }, "type": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" }, "coverImage": { "type": "string", "description": "An optional Cover Image or null", "nullable": true }, "folderWatching": { "type": "boolean", "description": "If Folder Watching is enabled for this library" }, "includeInDashboard": { "type": "boolean", "description": "Include Library series on Dashboard Streams" }, "includeInRecommended": { "type": "boolean", "description": "Include Library series on Recommended Streams" }, "manageCollections": { "type": "boolean", "description": "Should this library create and manage collections from Metadata" }, "manageReadingLists": { "type": "boolean", "description": "Should this library create and manage reading lists from Metadata" }, "includeInSearch": { "type": "boolean", "description": "Include library series in Search" }, "allowScrobbling": { "type": "boolean", "description": "Should this library allow Scrobble events to emit from it" }, "folders": { "type": "array", "items": { "type": "string" }, "nullable": true }, "collapseSeriesRelationships": { "type": "boolean", "description": "When showing series, only parent series or series with no relationships will be returned" }, "libraryFileTypes": { "type": "array", "items": { "enum": [ 1, 2, 3, 4 ], "type": "integer", "description": "Represents a set of file types that can be scanned", "format": "int32" }, "description": "The types of file type groups the library will scan for", "nullable": true }, "excludePatterns": { "type": "array", "items": { "type": "string" }, "description": "A set of globs that will exclude matching content from being scanned", "nullable": true } }, "additionalProperties": false }, "LibraryDtoICount": { "type": "object", "properties": { "value": { "$ref": "#/components/schemas/LibraryDto" }, "count": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "LibraryExcludePattern": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "pattern": { "type": "string", "nullable": true }, "libraryId": { "type": "integer", "format": "int32" }, "library": { "$ref": "#/components/schemas/Library" } }, "additionalProperties": false }, "LibraryFileTypeGroup": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "fileTypeGroup": { "enum": [ 1, 2, 3, 4 ], "type": "integer", "description": "Represents a set of file types that can be scanned", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "library": { "$ref": "#/components/schemas/Library" } }, "additionalProperties": false }, "LoginDto": { "type": "object", "properties": { "username": { "type": "string", "nullable": true }, "password": { "type": "string", "nullable": true }, "apiKey": { "type": "string", "description": "If ApiKey is passed, will ignore username/password for validation", "nullable": true } }, "additionalProperties": false }, "MalStackDto": { "type": "object", "properties": { "title": { "type": "string", "nullable": true }, "stackId": { "type": "integer", "format": "int64" }, "url": { "type": "string", "nullable": true }, "author": { "type": "string", "nullable": true }, "seriesCount": { "type": "integer", "format": "int32" }, "restackCount": { "type": "integer", "format": "int32" }, "existingId": { "type": "integer", "description": "If an existing collection exists within Kavita", "format": "int32" } }, "additionalProperties": false, "description": "Represents an Interest Stack from MAL" }, "MalUserInfoDto": { "type": "object", "properties": { "username": { "type": "string", "nullable": true }, "accessToken": { "type": "string", "description": "This is actually the Client Id", "nullable": true } }, "additionalProperties": false, "description": "Information about a User's MAL connection" }, "MangaFile": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "fileName": { "type": "string", "description": "The filename without extension", "nullable": true }, "filePath": { "type": "string", "description": "Absolute path to the archive file", "nullable": true }, "pages": { "type": "integer", "description": "Number of pages for the given file", "format": "int32" }, "format": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "bytes": { "type": "integer", "description": "How many bytes make up this file", "format": "int64" }, "extension": { "type": "string", "description": "File extension", "nullable": true }, "created": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "description": "Last time underlying file was modified", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "lastFileAnalysis": { "type": "string", "description": "Last time file analysis ran on this file", "format": "date-time" }, "lastFileAnalysisUtc": { "type": "string", "format": "date-time" }, "chapter": { "$ref": "#/components/schemas/Chapter" }, "chapterId": { "type": "integer", "format": "int32" } }, "additionalProperties": false, "description": "Represents a wrapper to the underlying file. This provides information around file, like number of pages, format, etc." }, "MangaFileDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "filePath": { "type": "string", "nullable": true }, "pages": { "type": "integer", "format": "int32" }, "bytes": { "type": "integer", "format": "int64" }, "format": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "created": { "type": "string", "format": "date-time" } }, "additionalProperties": false }, "MangaFormatStatCount": { "type": "object", "properties": { "value": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "count": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "MarkMultipleSeriesAsReadDto": { "type": "object", "properties": { "seriesIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true } }, "additionalProperties": false }, "MarkReadDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "MarkVolumeReadDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" }, "volumeId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "MarkVolumesReadDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" }, "volumeIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of Volumes to mark read", "nullable": true }, "chapterIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of additional Chapters to mark as read", "nullable": true } }, "additionalProperties": false, "description": "This is used for bulk updating a set of volume and or chapters in one go" }, "MediaErrorDto": { "type": "object", "properties": { "extension": { "type": "string", "description": "Format Type (RAR, ZIP, 7Zip, Epub, PDF)", "nullable": true }, "filePath": { "type": "string", "description": "Full Filepath to the file that has some issue", "nullable": true }, "comment": { "type": "string", "description": "Developer defined string", "nullable": true }, "details": { "type": "string", "description": "Exception message", "nullable": true } }, "additionalProperties": false }, "MemberDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "username": { "type": "string", "nullable": true }, "email": { "type": "string", "nullable": true }, "isPending": { "type": "boolean", "description": "If the member is still pending or not" }, "ageRestriction": { "$ref": "#/components/schemas/AgeRestrictionDto" }, "created": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastActive": { "type": "string", "format": "date-time" }, "lastActiveUtc": { "type": "string", "format": "date-time" }, "libraries": { "type": "array", "items": { "$ref": "#/components/schemas/LibraryDto" }, "nullable": true }, "roles": { "type": "array", "items": { "type": "string" }, "nullable": true } }, "additionalProperties": false, "description": "Represents a member of a Kavita server." }, "NextExpectedChapterDto": { "type": "object", "properties": { "chapterNumber": { "type": "number", "format": "float" }, "volumeNumber": { "type": "number", "format": "float" }, "expectedDate": { "type": "string", "description": "Null if not applicable", "format": "date-time", "nullable": true }, "title": { "type": "string", "description": "The localized title to render on the card", "nullable": true } }, "additionalProperties": false }, "Person": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "normalizedName": { "type": "string", "nullable": true }, "role": { "enum": [ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ], "type": "integer", "format": "int32" }, "seriesMetadatas": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesMetadata" }, "nullable": true }, "chapterMetadatas": { "type": "array", "items": { "$ref": "#/components/schemas/Chapter" }, "nullable": true } }, "additionalProperties": false }, "PersonDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "role": { "enum": [ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ], "type": "integer", "format": "int32" } }, "additionalProperties": false }, "PersonalToCDto": { "type": "object", "properties": { "chapterId": { "type": "integer", "format": "int32" }, "pageNumber": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "bookScrollId": { "type": "string", "nullable": true } }, "additionalProperties": false }, "ProgressDto": { "required": [ "chapterId", "libraryId", "pageNum", "seriesId", "volumeId" ], "type": "object", "properties": { "volumeId": { "type": "integer", "format": "int32" }, "chapterId": { "type": "integer", "format": "int32" }, "pageNum": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "bookScrollId": { "type": "string", "description": "For EPUB reader, this can be an optional string of the id of a part marker, to help resume reading position\r\non pages that combine multiple \"chapters\".", "nullable": true }, "lastModifiedUtc": { "type": "string", "format": "date-time" } }, "additionalProperties": false }, "PromoteCollectionsDto": { "type": "object", "properties": { "collectionIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "promoted": { "type": "boolean" } }, "additionalProperties": false }, "PublicationStatusStatCount": { "type": "object", "properties": { "value": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "format": "int32" }, "count": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "RatingDto": { "type": "object", "properties": { "averageScore": { "type": "integer", "format": "int32" }, "favoriteCount": { "type": "integer", "format": "int32" }, "provider": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Misleading name but is the source of data (like a review coming from AniList)", "format": "int32" }, "providerUrl": { "type": "string", "nullable": true } }, "additionalProperties": false }, "ReadHistoryEvent": { "type": "object", "properties": { "userId": { "type": "integer", "format": "int32" }, "userName": { "type": "string", "nullable": true }, "libraryId": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "seriesName": { "type": "string", "nullable": true }, "readDate": { "type": "string", "format": "date-time" }, "chapterId": { "type": "integer", "format": "int32" }, "chapterNumber": { "type": "number", "format": "float" } }, "additionalProperties": false, "description": "Represents a single User's reading event" }, "ReadStatus": { "type": "object", "properties": { "notRead": { "type": "boolean" }, "inProgress": { "type": "boolean" }, "read": { "type": "boolean" } }, "additionalProperties": false, "description": "Represents the Reading Status. This is a flag and allows multiple statues" }, "ReadingList": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "normalizedTitle": { "type": "string", "description": "A normalized string used to check if the reading list already exists in the DB", "nullable": true }, "summary": { "type": "string", "nullable": true }, "promoted": { "type": "boolean", "description": "Reading lists that are promoted are only done by admins" }, "coverImage": { "type": "string", "description": "Absolute path to the (managed) image file", "nullable": true }, "coverImageLocked": { "type": "boolean" }, "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "The highest age rating from all Series within the reading list", "format": "int32" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListItem" }, "nullable": true }, "created": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "startingYear": { "type": "integer", "description": "Minimum Year the Reading List starts", "format": "int32" }, "startingMonth": { "type": "integer", "description": "Minimum Month the Reading List starts", "format": "int32" }, "endingYear": { "type": "integer", "description": "Maximum Year the Reading List starts", "format": "int32" }, "endingMonth": { "type": "integer", "description": "Maximum Month the Reading List starts", "format": "int32" }, "appUserId": { "type": "integer", "format": "int32" }, "appUser": { "$ref": "#/components/schemas/AppUser" } }, "additionalProperties": false, "description": "This is a collection of API.Entities.ReadingListItem which represent individual chapters and an order." }, "ReadingListDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "summary": { "type": "string", "nullable": true }, "promoted": { "type": "boolean", "description": "Reading lists that are promoted are only done by admins" }, "coverImageLocked": { "type": "boolean" }, "coverImage": { "type": "string", "description": "This is used to tell the UI if it should request a Cover Image or not. If null or empty, it has not been set.", "nullable": true }, "startingYear": { "type": "integer", "description": "Minimum Year the Reading List starts", "format": "int32" }, "startingMonth": { "type": "integer", "description": "Minimum Month the Reading List starts", "format": "int32" }, "endingYear": { "type": "integer", "description": "Maximum Year the Reading List starts", "format": "int32" }, "endingMonth": { "type": "integer", "description": "Maximum Month the Reading List starts", "format": "int32" } }, "additionalProperties": false }, "ReadingListItem": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "volumeId": { "type": "integer", "format": "int32" }, "chapterId": { "type": "integer", "format": "int32" }, "order": { "type": "integer", "description": "Order of the chapter within a Reading List", "format": "int32" }, "readingList": { "$ref": "#/components/schemas/ReadingList" }, "readingListId": { "type": "integer", "format": "int32" }, "series": { "$ref": "#/components/schemas/Series" }, "volume": { "$ref": "#/components/schemas/Volume" }, "chapter": { "$ref": "#/components/schemas/Chapter" } }, "additionalProperties": false }, "ReadingListItemDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "order": { "type": "integer", "format": "int32" }, "chapterId": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "seriesName": { "type": "string", "nullable": true }, "seriesFormat": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "pagesRead": { "type": "integer", "format": "int32" }, "pagesTotal": { "type": "integer", "format": "int32" }, "chapterNumber": { "type": "string", "nullable": true }, "volumeNumber": { "type": "string", "nullable": true }, "chapterTitleName": { "type": "string", "nullable": true }, "volumeId": { "type": "integer", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "libraryType": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" }, "libraryName": { "type": "string", "nullable": true }, "releaseDate": { "type": "string", "description": "Release Date from Chapter", "format": "date-time" }, "readingListId": { "type": "integer", "description": "Used internally only", "format": "int32" }, "lastReadingProgressUtc": { "type": "string", "description": "The last time a reading list item (underlying chapter) was read by current authenticated user", "format": "date-time" }, "fileSize": { "type": "integer", "description": "File size of underlying item", "format": "int64" } }, "additionalProperties": false }, "RecentlyAddedItemDto": { "type": "object", "properties": { "seriesName": { "type": "string", "nullable": true }, "seriesId": { "type": "integer", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "libraryType": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" }, "title": { "type": "string", "description": "This will automatically map to Volume X, Chapter Y, etc.", "nullable": true }, "created": { "type": "string", "format": "date-time" }, "chapterId": { "type": "integer", "description": "Chapter Id if this is a chapter. Not guaranteed to be set.", "format": "int32" }, "volumeId": { "type": "integer", "description": "Volume Id if this is a chapter. Not guaranteed to be set.", "format": "int32" }, "id": { "type": "integer", "description": "This is used only on the UI. It is just index of being added.", "format": "int32" }, "format": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" } }, "additionalProperties": false, "description": "A mesh of data for Recently added volume/chapters" }, "RecommendationDto": { "type": "object", "properties": { "ownedSeries": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "externalSeries": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalSeriesDto" }, "nullable": true } }, "additionalProperties": false }, "RefreshSeriesDto": { "type": "object", "properties": { "libraryId": { "type": "integer", "description": "Library Id series belongs to", "format": "int32" }, "seriesId": { "type": "integer", "description": "Series Id", "format": "int32" }, "forceUpdate": { "type": "boolean", "description": "Should the task force opening/re-calculation." } }, "additionalProperties": false, "description": "Used for running some task against a Series." }, "RegisterDto": { "required": [ "password", "username" ], "type": "object", "properties": { "username": { "minLength": 1, "type": "string" }, "email": { "type": "string", "description": "An email to register with. Optional. Provides Forgot Password functionality", "nullable": true }, "password": { "maxLength": 32, "minLength": 6, "type": "string" } }, "additionalProperties": false }, "RelatedSeriesDto": { "type": "object", "properties": { "sourceSeriesId": { "type": "integer", "description": "The parent relationship Series", "format": "int32" }, "sequels": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "prequels": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "spinOffs": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "adaptations": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "sideStories": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "characters": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "contains": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "others": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "alternativeSettings": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "alternativeVersions": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "doujinshis": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "parent": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "editions": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true }, "annuals": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "nullable": true } }, "additionalProperties": false }, "RemoveBookmarkForSeriesDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "ResetPasswordDto": { "required": [ "password", "userName" ], "type": "object", "properties": { "userName": { "minLength": 1, "type": "string", "description": "The Username of the User" }, "password": { "maxLength": 32, "minLength": 6, "type": "string", "description": "The new password" }, "oldPassword": { "type": "string", "description": "The old, existing password. If an admin is performing the change, this is not required. Otherwise, it is.", "nullable": true } }, "additionalProperties": false }, "ScanFolderDto": { "type": "object", "properties": { "apiKey": { "type": "string", "description": "Api key for a user with Admin permissions", "nullable": true }, "folderPath": { "type": "string", "description": "Folder Path to Scan", "nullable": true } }, "additionalProperties": false, "description": "DTO for requesting a folder to be scanned" }, "ScrobbleErrorDto": { "type": "object", "properties": { "comment": { "type": "string", "description": "Developer defined string", "nullable": true }, "details": { "type": "string", "description": "List of providers that could not", "nullable": true }, "seriesId": { "type": "integer", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "created": { "type": "string", "format": "date-time" } }, "additionalProperties": false }, "ScrobbleEventDto": { "type": "object", "properties": { "seriesName": { "type": "string", "nullable": true }, "seriesId": { "type": "integer", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "isProcessed": { "type": "boolean" }, "volumeNumber": { "type": "number", "format": "float", "nullable": true }, "chapterNumber": { "type": "integer", "format": "int32", "nullable": true }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "rating": { "type": "number", "format": "float", "nullable": true }, "scrobbleEventType": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "format": "int32" }, "isErrored": { "type": "boolean" }, "errorDetails": { "type": "string", "nullable": true } }, "additionalProperties": false }, "ScrobbleEventFilter": { "type": "object", "properties": { "field": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "description": "Which field to sort on", "format": "int32" }, "isDescending": { "type": "boolean", "description": "If the sort should be a descending sort" }, "query": { "type": "string", "description": "A query to search against", "nullable": true }, "includeReviews": { "type": "boolean", "description": "Include reviews in the result - Note: Review Scrobbling is disabled" } }, "additionalProperties": false }, "ScrobbleHold": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "series": { "$ref": "#/components/schemas/Series" }, "appUserId": { "type": "integer", "format": "int32" }, "appUser": { "$ref": "#/components/schemas/AppUser" }, "created": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" } }, "additionalProperties": false }, "ScrobbleHoldDto": { "type": "object", "properties": { "seriesName": { "type": "string", "nullable": true }, "seriesId": { "type": "integer", "format": "int32" }, "libraryId": { "type": "integer", "format": "int32" }, "created": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" } }, "additionalProperties": false }, "SearchResultDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "originalName": { "type": "string", "nullable": true }, "sortName": { "type": "string", "nullable": true }, "localizedName": { "type": "string", "nullable": true }, "format": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "libraryName": { "type": "string", "nullable": true }, "libraryId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "SearchResultGroupDto": { "type": "object", "properties": { "libraries": { "type": "array", "items": { "$ref": "#/components/schemas/LibraryDto" }, "nullable": true }, "series": { "type": "array", "items": { "$ref": "#/components/schemas/SearchResultDto" }, "nullable": true }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollectionDto" }, "nullable": true }, "readingLists": { "type": "array", "items": { "$ref": "#/components/schemas/ReadingListDto" }, "nullable": true }, "persons": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "genres": { "type": "array", "items": { "$ref": "#/components/schemas/GenreTagDto" }, "nullable": true }, "tags": { "type": "array", "items": { "$ref": "#/components/schemas/TagDto" }, "nullable": true }, "files": { "type": "array", "items": { "$ref": "#/components/schemas/MangaFileDto" }, "nullable": true }, "chapters": { "type": "array", "items": { "$ref": "#/components/schemas/ChapterDto" }, "nullable": true }, "bookmarks": { "type": "array", "items": { "$ref": "#/components/schemas/BookmarkSearchResultDto" }, "nullable": true } }, "additionalProperties": false, "description": "Represents all Search results for a query" }, "SendSeriesToDeviceDto": { "type": "object", "properties": { "deviceId": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "SendToDeviceDto": { "type": "object", "properties": { "deviceId": { "type": "integer", "format": "int32" }, "chapterIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true } }, "additionalProperties": false }, "Series": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "description": "The UI visible Name of the Series. This may or may not be the same as the OriginalName", "nullable": true }, "normalizedName": { "type": "string", "description": "Used internally for name matching. M:API.Services.Tasks.Scanner.Parser.Parser.Normalize(System.String)", "nullable": true }, "normalizedLocalizedName": { "type": "string", "description": "Used internally for localized name matching. M:API.Services.Tasks.Scanner.Parser.Parser.Normalize(System.String)", "nullable": true }, "sortName": { "type": "string", "description": "The name used to sort the Series. By default, will be the same as Name.", "nullable": true }, "localizedName": { "type": "string", "description": "Name in original language (Japanese for Manga). By default, will be same as Name.", "nullable": true }, "originalName": { "type": "string", "description": "Original Name on disk. Not exposed to UI.", "nullable": true }, "created": { "type": "string", "description": "Time of creation", "format": "date-time" }, "lastModified": { "type": "string", "description": "Whenever a modification occurs. Ie) New volumes, removed volumes, title update, etc", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "coverImage": { "type": "string", "description": "Absolute path to the (managed) image file", "nullable": true }, "coverImageLocked": { "type": "boolean", "description": "Denotes if the CoverImage has been overridden by the user. If so, it will not be updated during normal scan operations." }, "pages": { "type": "integer", "description": "Sum of all Volume page counts", "format": "int32" }, "folderPath": { "type": "string", "description": "Highest path (that is under library root) that contains the series.", "nullable": true }, "lowestFolderPath": { "type": "string", "description": "Lowest path (that is under library root) that contains all files for the series.", "nullable": true }, "lastFolderScanned": { "type": "string", "description": "Last time the folder was scanned", "format": "date-time" }, "lastFolderScannedUtc": { "type": "string", "description": "Last time the folder was scanned in Utc", "format": "date-time" }, "format": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "The type of all the files attached to this series", "format": "int32" }, "sortNameLocked": { "type": "boolean" }, "localizedNameLocked": { "type": "boolean" }, "lastChapterAdded": { "type": "string", "description": "When a Chapter was last added onto the Series", "format": "date-time" }, "lastChapterAddedUtc": { "type": "string", "format": "date-time" }, "wordCount": { "type": "integer", "description": "Total Word count of all chapters in this chapter.", "format": "int64" }, "minHoursToRead": { "type": "integer", "format": "int32" }, "maxHoursToRead": { "type": "integer", "format": "int32" }, "avgHoursToRead": { "type": "integer", "format": "int32" }, "metadata": { "$ref": "#/components/schemas/SeriesMetadata" }, "externalSeriesMetadata": { "$ref": "#/components/schemas/ExternalSeriesMetadata" }, "ratings": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserRating" }, "nullable": true }, "progress": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserProgress" }, "nullable": true }, "collections": { "type": "array", "items": { "$ref": "#/components/schemas/AppUserCollection" }, "nullable": true }, "relations": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesRelation" }, "description": "Relations to other Series, like Sequels, Prequels, etc", "nullable": true }, "relationOf": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesRelation" }, "nullable": true }, "volumes": { "type": "array", "items": { "$ref": "#/components/schemas/Volume" }, "nullable": true }, "library": { "$ref": "#/components/schemas/Library" }, "libraryId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "SeriesByIdsDto": { "type": "object", "properties": { "seriesIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true } }, "additionalProperties": false }, "SeriesDetailDto": { "type": "object", "properties": { "specials": { "type": "array", "items": { "$ref": "#/components/schemas/ChapterDto" }, "description": "Specials for the Series. These will have their title and range cleaned to remove the special marker and prepare", "nullable": true }, "chapters": { "type": "array", "items": { "$ref": "#/components/schemas/ChapterDto" }, "description": "All Chapters, excluding Specials and single chapters (0 chapter) for a volume", "nullable": true }, "volumes": { "type": "array", "items": { "$ref": "#/components/schemas/VolumeDto" }, "description": "Just the Volumes for the Series (Excludes Volume 0)", "nullable": true }, "storylineChapters": { "type": "array", "items": { "$ref": "#/components/schemas/ChapterDto" }, "description": "These are chapters that are in Volume 0 and should be read AFTER the volumes", "nullable": true }, "unreadCount": { "type": "integer", "description": "How many chapters are unread", "format": "int32" }, "totalCount": { "type": "integer", "description": "How many chapters are there", "format": "int32" } }, "additionalProperties": false, "description": "This is a special DTO for a UI page in Kavita. This performs sorting and grouping and returns exactly what UI requires for layout.\r\nThis is subject to change, do not rely on this Data model." }, "SeriesDetailPlusDto": { "type": "object", "properties": { "recommendations": { "$ref": "#/components/schemas/RecommendationDto" }, "reviews": { "type": "array", "items": { "$ref": "#/components/schemas/UserReviewDto" }, "nullable": true }, "ratings": { "type": "array", "items": { "$ref": "#/components/schemas/RatingDto" }, "nullable": true } }, "additionalProperties": false, "description": "All the data from Kavita+ for Series Detail" }, "SeriesDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "originalName": { "type": "string", "nullable": true }, "localizedName": { "type": "string", "nullable": true }, "sortName": { "type": "string", "nullable": true }, "pages": { "type": "integer", "format": "int32" }, "coverImageLocked": { "type": "boolean" }, "pagesRead": { "type": "integer", "description": "Sum of pages read from linked Volumes. Calculated at API-time.", "format": "int32" }, "latestReadDate": { "type": "string", "description": "DateTime representing last time the series was Read. Calculated at API-time.", "format": "date-time" }, "lastChapterAdded": { "type": "string", "description": "DateTime representing last time a chapter was added to the Series", "format": "date-time" }, "userRating": { "type": "number", "description": "Rating from logged in user. Calculated at API-time.", "format": "float" }, "hasUserRated": { "type": "boolean", "description": "If the user has set the rating or not" }, "format": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Represents the format of the file", "format": "int32" }, "created": { "type": "string", "format": "date-time" }, "nameLocked": { "type": "boolean" }, "sortNameLocked": { "type": "boolean" }, "localizedNameLocked": { "type": "boolean" }, "wordCount": { "type": "integer", "description": "Total number of words for the series. Only applies to epubs.", "format": "int64" }, "libraryId": { "type": "integer", "format": "int32" }, "libraryName": { "type": "string", "nullable": true }, "minHoursToRead": { "type": "integer", "format": "int32" }, "maxHoursToRead": { "type": "integer", "format": "int32" }, "avgHoursToRead": { "type": "integer", "format": "int32" }, "folderPath": { "type": "string", "description": "The highest level folder for this Series", "nullable": true }, "lastFolderScanned": { "type": "string", "description": "The last time the folder for this series was scanned", "format": "date-time" } }, "additionalProperties": false }, "SeriesDtoICount": { "type": "object", "properties": { "value": { "$ref": "#/components/schemas/SeriesDto" }, "count": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "SeriesMetadata": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "summary": { "type": "string", "nullable": true }, "collectionTags": { "type": "array", "items": { "$ref": "#/components/schemas/CollectionTag" }, "nullable": true, "deprecated": true }, "genres": { "type": "array", "items": { "$ref": "#/components/schemas/Genre" }, "nullable": true }, "tags": { "type": "array", "items": { "$ref": "#/components/schemas/Tag" }, "nullable": true }, "people": { "type": "array", "items": { "$ref": "#/components/schemas/Person" }, "description": "All people attached at a Series level.", "nullable": true }, "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "Highest Age Rating from all Chapters", "format": "int32" }, "releaseYear": { "type": "integer", "description": "Earliest Year from all chapters", "format": "int32" }, "language": { "type": "string", "description": "Language of the content (BCP-47 code)", "nullable": true }, "totalCount": { "type": "integer", "description": "Total expected number of issues/volumes in the series from ComicInfo.xml", "format": "int32" }, "maxCount": { "type": "integer", "description": "Max number of issues/volumes in the series (Max of Volume/Number field in ComicInfo)", "format": "int32" }, "publicationStatus": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "format": "int32" }, "webLinks": { "type": "string", "description": "A Comma-separated list of strings representing links from the series", "nullable": true }, "languageLocked": { "type": "boolean" }, "summaryLocked": { "type": "boolean" }, "ageRatingLocked": { "type": "boolean", "description": "Locked by user so metadata updates from scan loop will not override AgeRating" }, "publicationStatusLocked": { "type": "boolean", "description": "Locked by user so metadata updates from scan loop will not override PublicationStatus" }, "genresLocked": { "type": "boolean" }, "tagsLocked": { "type": "boolean" }, "writerLocked": { "type": "boolean" }, "characterLocked": { "type": "boolean" }, "coloristLocked": { "type": "boolean" }, "editorLocked": { "type": "boolean" }, "inkerLocked": { "type": "boolean" }, "imprintLocked": { "type": "boolean" }, "lettererLocked": { "type": "boolean" }, "pencillerLocked": { "type": "boolean" }, "publisherLocked": { "type": "boolean" }, "translatorLocked": { "type": "boolean" }, "teamLocked": { "type": "boolean" }, "locationLocked": { "type": "boolean" }, "coverArtistLocked": { "type": "boolean" }, "releaseYearLocked": { "type": "boolean" }, "series": { "$ref": "#/components/schemas/Series" }, "seriesId": { "type": "integer", "format": "int32" }, "rowVersion": { "type": "integer", "format": "int32", "readOnly": true } }, "additionalProperties": false }, "SeriesMetadataDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "summary": { "type": "string", "nullable": true }, "genres": { "type": "array", "items": { "$ref": "#/components/schemas/GenreTagDto" }, "description": "Genres for the Series", "nullable": true }, "tags": { "type": "array", "items": { "$ref": "#/components/schemas/TagDto" }, "description": "Collection of all Tags from underlying chapters for a Series", "nullable": true }, "writers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "coverArtists": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "publishers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "characters": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "pencillers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "inkers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "imprints": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "colorists": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "letterers": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "editors": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "translators": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "teams": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "locations": { "type": "array", "items": { "$ref": "#/components/schemas/PersonDto" }, "nullable": true }, "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "Highest Age Rating from all Chapters", "format": "int32" }, "releaseYear": { "type": "integer", "description": "Earliest Year from all chapters", "format": "int32" }, "language": { "type": "string", "description": "Language of the content (BCP-47 code)", "nullable": true }, "maxCount": { "type": "integer", "description": "Max number of issues/volumes in the series (Max of Volume/Issue field in ComicInfo)", "format": "int32" }, "totalCount": { "type": "integer", "description": "Total number of issues/volumes for the series", "format": "int32" }, "publicationStatus": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "Publication status of the Series", "format": "int32" }, "webLinks": { "type": "string", "description": "A comma-separated list of Urls", "nullable": true }, "languageLocked": { "type": "boolean" }, "summaryLocked": { "type": "boolean" }, "ageRatingLocked": { "type": "boolean", "description": "Locked by user so metadata updates from scan loop will not override AgeRating" }, "publicationStatusLocked": { "type": "boolean", "description": "Locked by user so metadata updates from scan loop will not override PublicationStatus" }, "genresLocked": { "type": "boolean" }, "tagsLocked": { "type": "boolean" }, "writerLocked": { "type": "boolean" }, "characterLocked": { "type": "boolean" }, "coloristLocked": { "type": "boolean" }, "editorLocked": { "type": "boolean" }, "inkerLocked": { "type": "boolean" }, "imprintLocked": { "type": "boolean" }, "lettererLocked": { "type": "boolean" }, "pencillerLocked": { "type": "boolean" }, "publisherLocked": { "type": "boolean" }, "translatorLocked": { "type": "boolean" }, "teamLocked": { "type": "boolean" }, "locationLocked": { "type": "boolean" }, "coverArtistLocked": { "type": "boolean" }, "releaseYearLocked": { "type": "boolean" }, "seriesId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "SeriesRelation": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "relationKind": { "enum": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ], "type": "integer", "description": "Represents a relationship between Series", "format": "int32" }, "targetSeries": { "$ref": "#/components/schemas/Series" }, "targetSeriesId": { "type": "integer", "description": "A is Sequel to B. In this example, TargetSeries is A. B will hold the foreign key.", "format": "int32" }, "series": { "$ref": "#/components/schemas/Series" }, "seriesId": { "type": "integer", "format": "int32" } }, "additionalProperties": false, "description": "A relation flows between one series and another.\r\nSeries ---kind---> target" }, "ServerInfoDto": { "type": "object", "properties": { "installId": { "type": "string", "description": "Unique Id that represents a unique install", "nullable": true }, "os": { "type": "string", "nullable": true }, "isDocker": { "type": "boolean", "description": "If the Kavita install is using Docker" }, "dotnetVersion": { "type": "string", "description": "Version of .NET instance is running", "nullable": true }, "kavitaVersion": { "type": "string", "description": "Version of Kavita", "nullable": true }, "numOfCores": { "type": "integer", "description": "Number of Cores on the instance", "format": "int32" }, "numberOfLibraries": { "type": "integer", "description": "The number of libraries on the instance", "format": "int32" }, "hasBookmarks": { "type": "boolean", "description": "Does any user have bookmarks" }, "activeSiteTheme": { "type": "string", "description": "The site theme the install is using", "nullable": true }, "mangaReaderMode": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "The reading mode the main user has as a preference", "format": "int32" }, "numberOfUsers": { "type": "integer", "description": "Number of users on the install", "format": "int32" }, "numberOfCollections": { "type": "integer", "description": "Number of collections on the install", "format": "int32" }, "numberOfReadingLists": { "type": "integer", "description": "Number of reading lists on the install (Sum of all users)", "format": "int32" }, "opdsEnabled": { "type": "boolean", "description": "Is OPDS enabled" }, "totalFiles": { "type": "integer", "description": "Total number of files in the instance", "format": "int32" }, "totalGenres": { "type": "integer", "description": "Total number of Genres in the instance", "format": "int32" }, "totalPeople": { "type": "integer", "description": "Total number of People in the instance", "format": "int32" }, "usersOnCardLayout": { "type": "integer", "description": "Number of users on this instance using Card Layout", "format": "int32" }, "usersOnListLayout": { "type": "integer", "description": "Number of users on this instance using List Layout", "format": "int32" }, "maxSeriesInALibrary": { "type": "integer", "description": "Max number of Series for any library on the instance", "format": "int32" }, "maxVolumesInASeries": { "type": "integer", "description": "Max number of Volumes for any library on the instance", "format": "int32" }, "maxChaptersInASeries": { "type": "integer", "description": "Max number of Chapters for any library on the instance", "format": "int32" }, "usingSeriesRelationships": { "type": "boolean", "description": "Does this instance have relationships setup between series" }, "mangaReaderBackgroundColors": { "type": "array", "items": { "type": "string" }, "description": "A list of background colors set on the instance", "nullable": true }, "mangaReaderPageSplittingModes": { "type": "array", "items": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "format": "int32" }, "description": "A list of Page Split defaults being used on the instance", "nullable": true }, "mangaReaderLayoutModes": { "type": "array", "items": { "enum": [ 1, 2, 3 ], "type": "integer", "format": "int32" }, "description": "A list of Layout Mode defaults being used on the instance", "nullable": true }, "fileFormats": { "type": "array", "items": { "$ref": "#/components/schemas/FileFormatDto" }, "description": "A list of file formats existing in the instance", "nullable": true }, "usingRestrictedProfiles": { "type": "boolean", "description": "If there is at least one user that is using an age restricted profile on the instance" }, "usersWithEmulateComicBook": { "type": "integer", "description": "Number of users using the Emulate Comic Book setting", "format": "int32" }, "percentOfLibrariesWithFolderWatchingEnabled": { "type": "number", "description": "Percent (0.0-1.0) of libraries with folder watching enabled", "format": "float" }, "percentOfLibrariesIncludedInSearch": { "type": "number", "description": "Percent (0.0-1.0) of libraries included in Search", "format": "float" }, "percentOfLibrariesIncludedInRecommended": { "type": "number", "description": "Percent (0.0-1.0) of libraries included in Recommended", "format": "float" }, "percentOfLibrariesIncludedInDashboard": { "type": "number", "description": "Percent (0.0-1.0) of libraries included in Dashboard", "format": "float" }, "totalReadingHours": { "type": "integer", "description": "Total reading hours of all users", "format": "int64" }, "encodeMediaAs": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "The encoding the server is using to save media", "format": "int32" }, "lastReadTime": { "type": "string", "description": "The last user reading progress on the server (in UTC)", "format": "date-time" } }, "additionalProperties": false, "description": "Represents information about a Kavita Installation" }, "ServerSettingDto": { "type": "object", "properties": { "cacheDirectory": { "type": "string", "nullable": true }, "taskScan": { "type": "string", "nullable": true }, "taskBackup": { "type": "string", "nullable": true }, "taskCleanup": { "type": "string", "nullable": true }, "loggingLevel": { "type": "string", "description": "Logging level for server. Managed in appsettings.json.", "nullable": true }, "port": { "type": "integer", "description": "Port the server listens on. Managed in appsettings.json.", "format": "int32" }, "ipAddresses": { "type": "string", "description": "Comma separated list of ip addresses the server listens on. Managed in appsettings.json", "nullable": true }, "allowStatCollection": { "type": "boolean", "description": "Allows anonymous information to be collected and sent to KavitaStats" }, "enableOpds": { "type": "boolean", "description": "Enables OPDS connections to be made to the server." }, "baseUrl": { "type": "string", "description": "Base Url for the kavita. Requires restart to take effect.", "nullable": true }, "bookmarksDirectory": { "type": "string", "description": "Where Bookmarks are stored.", "nullable": true }, "installVersion": { "type": "string", "nullable": true }, "installId": { "type": "string", "description": "Represents a unique Id to this Kavita installation. Only used in Stats to identify unique installs.", "nullable": true }, "encodeMediaAs": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "The format that should be used when saving media for Kavita", "format": "int32" }, "totalBackups": { "type": "integer", "description": "The amount of Backups before cleanup", "format": "int32" }, "enableFolderWatching": { "type": "boolean", "description": "If Kavita should watch the library folders and process changes" }, "totalLogs": { "type": "integer", "description": "Total number of days worth of logs to keep at a given time.", "format": "int32" }, "hostName": { "type": "string", "description": "The Host name (ie Reverse proxy domain name) for the server", "nullable": true }, "cacheSize": { "type": "integer", "description": "The size in MB for Caching API data", "format": "int64" }, "onDeckProgressDays": { "type": "integer", "description": "How many Days since today in the past for reading progress, should content be considered for On Deck, before it gets removed automatically", "format": "int32" }, "onDeckUpdateDays": { "type": "integer", "description": "How many Days since today in the past for chapter updates, should content be considered for On Deck, before it gets removed automatically", "format": "int32" }, "coverImageSize": { "enum": [ 1, 2, 3, 4 ], "type": "integer", "description": "How large the cover images should be", "format": "int32" }, "smtpConfig": { "$ref": "#/components/schemas/SmtpConfigDto" } }, "additionalProperties": false }, "ServerStatisticsDto": { "type": "object", "properties": { "chapterCount": { "type": "integer", "format": "int64" }, "volumeCount": { "type": "integer", "format": "int64" }, "seriesCount": { "type": "integer", "format": "int64" }, "totalFiles": { "type": "integer", "format": "int64" }, "totalSize": { "type": "integer", "format": "int64" }, "totalGenres": { "type": "integer", "format": "int64" }, "totalTags": { "type": "integer", "format": "int64" }, "totalPeople": { "type": "integer", "format": "int64" }, "totalReadingTime": { "type": "integer", "format": "int64" }, "mostReadSeries": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDtoICount" }, "nullable": true }, "mostPopularSeries": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDtoICount" }, "description": "Total users who have started/reading/read per series", "nullable": true }, "mostActiveUsers": { "type": "array", "items": { "$ref": "#/components/schemas/UserDtoICount" }, "nullable": true }, "mostActiveLibraries": { "type": "array", "items": { "$ref": "#/components/schemas/LibraryDtoICount" }, "nullable": true }, "recentlyRead": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDto" }, "description": "Last 5 Series read", "nullable": true } }, "additionalProperties": false }, "SideNavStreamDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "isProvided": { "type": "boolean", "description": "Is System Provided" }, "order": { "type": "integer", "description": "Sort Order on the Dashboard", "format": "int32" }, "smartFilterEncoded": { "type": "string", "description": "If Not IsProvided, the appropriate smart filter", "nullable": true }, "smartFilterId": { "type": "integer", "format": "int32", "nullable": true }, "externalSourceId": { "type": "integer", "description": "External Source Url if configured", "format": "int32" }, "externalSource": { "$ref": "#/components/schemas/ExternalSourceDto" }, "streamType": { "enum": [ 1, 2, 3, 4, 5, 6, 7, 8 ], "type": "integer", "description": "For system provided", "format": "int32" }, "visible": { "type": "boolean" }, "libraryId": { "type": "integer", "format": "int32", "nullable": true }, "library": { "$ref": "#/components/schemas/LibraryDto" } }, "additionalProperties": false }, "SingleStatCount": { "type": "object", "properties": { "value": { "type": "number", "format": "float" }, "count": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "SiteTheme": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "description": "Name of the Theme", "nullable": true }, "normalizedName": { "type": "string", "description": "Normalized name for lookups", "nullable": true }, "fileName": { "type": "string", "description": "File path to the content. Stored under API.Services.DirectoryService.SiteThemeDirectory.\r\nMust be a .css file", "nullable": true }, "isDefault": { "type": "boolean", "description": "Only one theme can have this. Will auto-set this as default for new user accounts" }, "provider": { "enum": [ 1, 2 ], "type": "integer", "description": "Where did the theme come from", "format": "int32" }, "created": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "gitHubPath": { "type": "string", "description": "The Url on the repo to download the file from", "nullable": true }, "shaHash": { "type": "string", "description": "Hash of the Css File", "nullable": true }, "previewUrls": { "type": "string", "description": "Pipe (|) separated urls of the images. Empty string if", "nullable": true }, "description": { "type": "string", "nullable": true }, "author": { "type": "string", "nullable": true }, "compatibleVersion": { "type": "string", "nullable": true } }, "additionalProperties": false, "description": "Represents a set of css overrides the user can upload to Kavita and will load into webui" }, "SiteThemeDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "description": "Name of the Theme", "nullable": true }, "normalizedName": { "type": "string", "description": "Normalized name for lookups", "nullable": true }, "fileName": { "type": "string", "description": "File path to the content. Stored under API.Services.DirectoryService.SiteThemeDirectory.\r\nMust be a .css file", "nullable": true }, "isDefault": { "type": "boolean", "description": "Only one theme can have this. Will auto-set this as default for new user accounts" }, "provider": { "enum": [ 1, 2 ], "type": "integer", "description": "Where did the theme come from", "format": "int32" }, "previewUrls": { "type": "array", "items": { "type": "string" }, "nullable": true }, "description": { "type": "string", "description": "Information about the theme", "nullable": true }, "author": { "type": "string", "description": "Author of the Theme (only applies to non-system provided themes)", "nullable": true }, "compatibleVersion": { "type": "string", "description": "Last compatible version. System provided will always be most current", "nullable": true }, "selector": { "type": "string", "nullable": true, "readOnly": true } }, "additionalProperties": false, "description": "Represents a set of css overrides the user can upload to Kavita and will load into webui" }, "SmartFilterDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "nullable": true }, "filter": { "type": "string", "description": "This is the Filter url encoded. It is decoded and reconstructed into a API.DTOs.Filtering.v2.FilterV2Dto", "nullable": true } }, "additionalProperties": false }, "SmtpConfigDto": { "type": "object", "properties": { "senderAddress": { "type": "string", "nullable": true }, "senderDisplayName": { "type": "string", "nullable": true }, "userName": { "type": "string", "nullable": true }, "password": { "type": "string", "nullable": true }, "host": { "type": "string", "nullable": true }, "port": { "type": "integer", "format": "int32" }, "enableSsl": { "type": "boolean" }, "sizeLimit": { "type": "integer", "description": "Limit in bytes for allowing files to be added as attachments. Defaults to 25MB", "format": "int32" }, "customizedTemplates": { "type": "boolean", "description": "Should Kavita use config/templates for Email templates or the default ones" } }, "additionalProperties": false }, "SortOptions": { "type": "object", "properties": { "sortField": { "enum": [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ], "type": "integer", "format": "int32" }, "isAscending": { "type": "boolean" } }, "additionalProperties": false, "description": "Sorting Options for a query" }, "Tag": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "normalizedTitle": { "type": "string", "nullable": true }, "seriesMetadatas": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesMetadata" }, "nullable": true }, "chapters": { "type": "array", "items": { "$ref": "#/components/schemas/Chapter" }, "nullable": true } }, "additionalProperties": false }, "TagDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true } }, "additionalProperties": false }, "TokenRequestDto": { "type": "object", "properties": { "token": { "type": "string", "nullable": true }, "refreshToken": { "type": "string", "nullable": true } }, "additionalProperties": false }, "TopReadDto": { "type": "object", "properties": { "userId": { "type": "integer", "format": "int32" }, "username": { "type": "string", "nullable": true }, "comicsTime": { "type": "integer", "description": "Amount of time read on Comic libraries", "format": "int64" }, "booksTime": { "type": "integer", "description": "Amount of time read on", "format": "int64" }, "mangaTime": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "UpdateAgeRestrictionDto": { "required": [ "ageRating", "includeUnknowns" ], "type": "object", "properties": { "ageRating": { "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1 ], "type": "integer", "description": "Represents Age Rating for content.", "format": "int32" }, "includeUnknowns": { "type": "boolean" } }, "additionalProperties": false }, "UpdateDefaultThemeDto": { "type": "object", "properties": { "themeId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "UpdateDeviceDto": { "required": [ "emailAddress", "id", "name", "platform" ], "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "minLength": 1, "type": "string" }, "platform": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "description": "Platform of the device. If not know, defaults to \"Custom\"", "format": "int32" }, "emailAddress": { "minLength": 1, "type": "string" } }, "additionalProperties": false }, "UpdateEmailDto": { "type": "object", "properties": { "email": { "type": "string", "nullable": true }, "password": { "type": "string", "nullable": true } }, "additionalProperties": false }, "UpdateLibraryDto": { "required": [ "allowScrobbling", "excludePatterns", "fileGroupTypes", "folders", "folderWatching", "id", "includeInDashboard", "includeInRecommended", "includeInSearch", "manageCollections", "manageReadingLists", "name", "type" ], "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "minLength": 1, "type": "string" }, "type": { "enum": [ 0, 1, 2, 3, 4, 5 ], "type": "integer", "format": "int32" }, "folders": { "type": "array", "items": { "type": "string" } }, "folderWatching": { "type": "boolean" }, "includeInDashboard": { "type": "boolean" }, "includeInRecommended": { "type": "boolean" }, "includeInSearch": { "type": "boolean" }, "manageCollections": { "type": "boolean" }, "manageReadingLists": { "type": "boolean" }, "allowScrobbling": { "type": "boolean" }, "fileGroupTypes": { "type": "array", "items": { "enum": [ 1, 2, 3, 4 ], "type": "integer", "description": "Represents a set of file types that can be scanned", "format": "int32" }, "description": "What types of files to allow the scanner to pickup" }, "excludePatterns": { "type": "array", "items": { "type": "string" }, "description": "A set of Glob patterns that the scanner will exclude processing" } }, "additionalProperties": false }, "UpdateLibraryForUserDto": { "type": "object", "properties": { "username": { "type": "string", "nullable": true }, "selectedLibraries": { "type": "array", "items": { "$ref": "#/components/schemas/LibraryDto" }, "nullable": true } }, "additionalProperties": false }, "UpdateLicenseDto": { "type": "object", "properties": { "license": { "type": "string", "description": "License Key received from Kavita+", "nullable": true }, "email": { "type": "string", "description": "Email registered with Stripe", "nullable": true }, "discordId": { "type": "string", "description": "Optional DiscordId", "nullable": true } }, "additionalProperties": false }, "UpdateNotificationDto": { "type": "object", "properties": { "currentVersion": { "type": "string", "description": "Current installed Version", "nullable": true }, "updateVersion": { "type": "string", "description": "Semver of the release version\r\n0.4.3", "nullable": true }, "updateBody": { "type": "string", "description": "Release body in HTML", "nullable": true }, "updateTitle": { "type": "string", "description": "Title of the release", "nullable": true }, "updateUrl": { "type": "string", "description": "Github Url", "nullable": true }, "isDocker": { "type": "boolean", "description": "If this install is within Docker" }, "isPrerelease": { "type": "boolean", "description": "Is this a pre-release" }, "publishDate": { "type": "string", "description": "Date of the publish", "nullable": true }, "isOnNightlyInRelease": { "type": "boolean", "description": "Is the server on a nightly within this release" }, "isReleaseNewer": { "type": "boolean", "description": "Is the server on an older version" }, "isReleaseEqual": { "type": "boolean", "description": "Is the server on this version" } }, "additionalProperties": false, "description": "Update Notification denoting a new release available for user to update to" }, "UpdateReadingListByChapterDto": { "type": "object", "properties": { "chapterId": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "readingListId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "UpdateReadingListByMultipleDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" }, "readingListId": { "type": "integer", "format": "int32" }, "volumeIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "chapterIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true } }, "additionalProperties": false }, "UpdateReadingListByMultipleSeriesDto": { "type": "object", "properties": { "readingListId": { "type": "integer", "format": "int32" }, "seriesIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true } }, "additionalProperties": false }, "UpdateReadingListBySeriesDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" }, "readingListId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "UpdateReadingListByVolumeDto": { "type": "object", "properties": { "volumeId": { "type": "integer", "format": "int32" }, "seriesId": { "type": "integer", "format": "int32" }, "readingListId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "UpdateReadingListDto": { "required": [ "readingListId" ], "type": "object", "properties": { "readingListId": { "type": "integer", "format": "int32" }, "title": { "type": "string", "nullable": true }, "summary": { "type": "string", "nullable": true }, "promoted": { "type": "boolean" }, "coverImageLocked": { "type": "boolean" }, "startingMonth": { "type": "integer", "format": "int32" }, "startingYear": { "type": "integer", "format": "int32" }, "endingMonth": { "type": "integer", "format": "int32" }, "endingYear": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "UpdateReadingListPosition": { "required": [ "readingListId", "readingListItemId", "toPosition" ], "type": "object", "properties": { "readingListId": { "type": "integer", "format": "int32" }, "readingListItemId": { "type": "integer", "format": "int32" }, "fromPosition": { "type": "integer", "format": "int32" }, "toPosition": { "type": "integer", "format": "int32" } }, "additionalProperties": false, "description": "DTO for moving a reading list item to another position within the same list" }, "UpdateRelatedSeriesDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" }, "adaptations": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "characters": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "contains": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "others": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "prequels": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "sequels": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "sideStories": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "spinOffs": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "alternativeSettings": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "alternativeVersions": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "doujinshis": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "editions": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true }, "annuals": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true } }, "additionalProperties": false }, "UpdateSeriesDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "localizedName": { "type": "string", "nullable": true }, "sortName": { "type": "string", "nullable": true }, "coverImageLocked": { "type": "boolean" }, "sortNameLocked": { "type": "boolean" }, "localizedNameLocked": { "type": "boolean" } }, "additionalProperties": false }, "UpdateSeriesForTagDto": { "type": "object", "properties": { "tag": { "$ref": "#/components/schemas/AppUserCollectionDto" }, "seriesIdsToRemove": { "type": "array", "items": { "type": "integer", "format": "int32" }, "nullable": true } }, "additionalProperties": false }, "UpdateSeriesMetadataDto": { "type": "object", "properties": { "seriesMetadata": { "$ref": "#/components/schemas/SeriesMetadataDto" } }, "additionalProperties": false }, "UpdateSeriesRatingDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" }, "userRating": { "type": "number", "format": "float" } }, "additionalProperties": false }, "UpdateStreamPositionDto": { "type": "object", "properties": { "fromPosition": { "type": "integer", "format": "int32" }, "toPosition": { "type": "integer", "format": "int32" }, "id": { "type": "integer", "format": "int32" }, "streamName": { "type": "string", "nullable": true } }, "additionalProperties": false }, "UpdateUserDto": { "type": "object", "properties": { "userId": { "type": "integer", "format": "int32" }, "username": { "type": "string", "nullable": true }, "roles": { "type": "array", "items": { "type": "string" }, "nullable": true }, "libraries": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "A list of libraries to grant access to", "nullable": true }, "ageRestriction": { "$ref": "#/components/schemas/AgeRestrictionDto" } }, "additionalProperties": false }, "UpdateUserProgressDto": { "type": "object", "properties": { "pageNum": { "type": "integer", "format": "int32" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" } }, "additionalProperties": false }, "UpdateUserReviewDto": { "type": "object", "properties": { "seriesId": { "type": "integer", "format": "int32" }, "body": { "type": "string", "nullable": true } }, "additionalProperties": false }, "UpdateWantToReadDto": { "type": "object", "properties": { "seriesIds": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "List of Series Ids that will be Added/Removed", "nullable": true } }, "additionalProperties": false, "description": "A list of Series to pass when working with Want To Read APIs" }, "UploadFileDto": { "type": "object", "properties": { "id": { "type": "integer", "description": "Id of the Entity", "format": "int32" }, "url": { "type": "string", "description": "Base Url encoding of the file to upload from (can be null)", "nullable": true } }, "additionalProperties": false }, "UploadUrlDto": { "required": [ "url" ], "type": "object", "properties": { "url": { "minLength": 1, "type": "string", "description": "External url" } }, "additionalProperties": false }, "UserDto": { "type": "object", "properties": { "username": { "type": "string", "nullable": true }, "email": { "type": "string", "nullable": true }, "token": { "type": "string", "nullable": true }, "refreshToken": { "type": "string", "nullable": true }, "apiKey": { "type": "string", "nullable": true }, "preferences": { "$ref": "#/components/schemas/UserPreferencesDto" }, "ageRestriction": { "$ref": "#/components/schemas/AgeRestrictionDto" }, "kavitaVersion": { "type": "string", "nullable": true } }, "additionalProperties": false }, "UserDtoICount": { "type": "object", "properties": { "value": { "$ref": "#/components/schemas/UserDto" }, "count": { "type": "integer", "format": "int64" } }, "additionalProperties": false }, "UserPreferencesDto": { "required": [ "autoCloseMenu", "backgroundColor", "blurUnreadSummaries", "bookReaderFontFamily", "bookReaderFontSize", "bookReaderImmersiveMode", "bookReaderLayoutMode", "bookReaderLineSpacing", "bookReaderMargin", "bookReaderReadingDirection", "bookReaderTapToPaginate", "bookReaderThemeName", "bookReaderWritingStyle", "collapseSeriesRelationships", "emulateBook", "globalPageLayoutMode", "layoutMode", "locale", "noTransitions", "pageSplitOption", "pdfLayoutMode", "pdfScrollMode", "pdfSpreadMode", "pdfTheme", "promptForDownloadSize", "readerMode", "readingDirection", "scalingOption", "shareReviews", "showScreenHints", "swipeToPaginate", "theme" ], "type": "object", "properties": { "readingDirection": { "enum": [ 0, 1 ], "type": "integer", "description": "Manga Reader Option: What direction should the next/prev page buttons go", "format": "int32" }, "scalingOption": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "description": "Manga Reader Option: How should the image be scaled to screen", "format": "int32" }, "pageSplitOption": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "description": "Manga Reader Option: Which side of a split image should we show first", "format": "int32" }, "readerMode": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "Manga Reader Option: How the manga reader should perform paging or reading of the file\r\n\r\nWebtoon uses scrolling to page, LeftRight uses paging by clicking left/right side of reader, UpDown uses paging\r\nby clicking top/bottom sides of reader.\r\n", "format": "int32" }, "layoutMode": { "enum": [ 1, 2, 3 ], "type": "integer", "description": "Manga Reader Option: How many pages to display in the reader at once", "format": "int32" }, "emulateBook": { "type": "boolean", "description": "Manga Reader Option: Emulate a book by applying a shadow effect on the pages" }, "backgroundColor": { "minLength": 1, "type": "string", "description": "Manga Reader Option: Background color of the reader" }, "swipeToPaginate": { "type": "boolean", "description": "Manga Reader Option: Should swiping trigger pagination" }, "autoCloseMenu": { "type": "boolean", "description": "Manga Reader Option: Allow the menu to close after 6 seconds without interaction" }, "showScreenHints": { "type": "boolean", "description": "Manga Reader Option: Show screen hints to the user on some actions, ie) pagination direction change" }, "bookReaderMargin": { "type": "integer", "description": "Book Reader Option: Override extra Margin", "format": "int32" }, "bookReaderLineSpacing": { "type": "integer", "description": "Book Reader Option: Override line-height", "format": "int32" }, "bookReaderFontSize": { "type": "integer", "description": "Book Reader Option: Override font size", "format": "int32" }, "bookReaderFontFamily": { "minLength": 1, "type": "string", "description": "Book Reader Option: Maps to the default Kavita font-family (inherit) or an override" }, "bookReaderTapToPaginate": { "type": "boolean", "description": "Book Reader Option: Allows tapping on side of screens to paginate" }, "bookReaderReadingDirection": { "enum": [ 0, 1 ], "type": "integer", "description": "Book Reader Option: What direction should the next/prev page buttons go", "format": "int32" }, "bookReaderWritingStyle": { "enum": [ 0, 1 ], "type": "integer", "description": "Book Reader Option: What writing style should be used, horizontal or vertical.", "format": "int32" }, "theme": { "$ref": "#/components/schemas/SiteThemeDto" }, "bookReaderThemeName": { "minLength": 1, "type": "string" }, "bookReaderLayoutMode": { "enum": [ 0, 1, 2 ], "type": "integer", "format": "int32" }, "bookReaderImmersiveMode": { "type": "boolean", "description": "Book Reader Option: A flag that hides the menu-ing system behind a click on the screen. This should be used with tap to paginate, but the app doesn't enforce this." }, "globalPageLayoutMode": { "enum": [ 0, 1 ], "type": "integer", "description": "Global Site Option: If the UI should layout items as Cards or List items", "format": "int32" }, "blurUnreadSummaries": { "type": "boolean", "description": "UI Site Global Setting: If unread summaries should be blurred until expanded or unless user has read it already" }, "promptForDownloadSize": { "type": "boolean", "description": "UI Site Global Setting: Should Kavita prompt user to confirm downloads that are greater than 100 MB." }, "noTransitions": { "type": "boolean", "description": "UI Site Global Setting: Should Kavita disable CSS transitions" }, "collapseSeriesRelationships": { "type": "boolean", "description": "When showing series, only parent series or series with no relationships will be returned" }, "shareReviews": { "type": "boolean", "description": "UI Site Global Setting: Should series reviews be shared with all users in the server" }, "locale": { "minLength": 1, "type": "string", "description": "UI Site Global Setting: The language locale that should be used for the user" }, "pdfTheme": { "enum": [ 0, 1 ], "type": "integer", "description": "PDF Reader: Theme of the Reader", "format": "int32" }, "pdfScrollMode": { "enum": [ 0, 1, 3 ], "type": "integer", "description": "PDF Reader: Scroll mode of the reader", "format": "int32" }, "pdfLayoutMode": { "enum": [ 0, 2 ], "type": "integer", "description": "PDF Reader: Layout Mode of the reader", "format": "int32" }, "pdfSpreadMode": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "PDF Reader: Spread Mode of the reader", "format": "int32" } }, "additionalProperties": false }, "UserReadStatistics": { "type": "object", "properties": { "totalPagesRead": { "type": "integer", "description": "Total number of pages read", "format": "int64" }, "totalWordsRead": { "type": "integer", "description": "Total number of words read", "format": "int64" }, "timeSpentReading": { "type": "integer", "description": "Total time spent reading based on estimates", "format": "int64" }, "chaptersRead": { "type": "integer", "format": "int64" }, "lastActive": { "type": "string", "format": "date-time" }, "avgHoursPerWeekSpentReading": { "type": "number", "format": "double" }, "percentReadPerLibrary": { "type": "array", "items": { "$ref": "#/components/schemas/SingleStatCount" }, "nullable": true } }, "additionalProperties": false }, "UserReviewDto": { "type": "object", "properties": { "tagline": { "type": "string", "description": "A tagline for the review", "nullable": true }, "body": { "type": "string", "description": "The main review", "nullable": true }, "bodyJustText": { "type": "string", "description": "The main body with just text, for review preview", "nullable": true }, "seriesId": { "type": "integer", "description": "The series this is for", "format": "int32" }, "libraryId": { "type": "integer", "description": "The library this series belongs in", "format": "int32" }, "username": { "type": "string", "description": "The user who wrote this", "nullable": true }, "totalVotes": { "type": "integer", "format": "int32" }, "rating": { "type": "number", "format": "float" }, "rawBody": { "type": "string", "nullable": true }, "score": { "type": "integer", "description": "How many upvotes this review has gotten", "format": "int32" }, "siteUrl": { "type": "string", "description": "If External, the url of the review", "nullable": true }, "isExternal": { "type": "boolean", "description": "Does this review come from an external Source" }, "provider": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "If this review is External, which Provider did it come from", "format": "int32" } }, "additionalProperties": false, "description": "Represents a User Review for a given Series" }, "Volume": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "name": { "type": "string", "description": "A String representation of the volume number. Allows for floats. Can also include a range (1-2).", "nullable": true }, "lookupName": { "type": "string", "description": "This is just the original Parsed volume number for lookups", "nullable": true }, "number": { "type": "integer", "description": "The minimum number in the Name field in Int form", "format": "int32", "deprecated": true }, "minNumber": { "type": "number", "description": "The minimum number in the Name field", "format": "float" }, "maxNumber": { "type": "number", "description": "The maximum number in the Name field (same as Minimum if Name isn't a range)", "format": "float" }, "chapters": { "type": "array", "items": { "$ref": "#/components/schemas/Chapter" }, "nullable": true }, "created": { "type": "string", "format": "date-time" }, "lastModified": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "coverImage": { "type": "string", "description": "Absolute path to the (managed) image file", "nullable": true }, "pages": { "type": "integer", "description": "Total pages of all chapters in this volume", "format": "int32" }, "wordCount": { "type": "integer", "description": "Total Word count of all chapters in this volume.", "format": "int64" }, "minHoursToRead": { "type": "integer", "format": "int32" }, "maxHoursToRead": { "type": "integer", "format": "int32" }, "avgHoursToRead": { "type": "integer", "format": "int32" }, "series": { "$ref": "#/components/schemas/Series" }, "seriesId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "VolumeDto": { "type": "object", "properties": { "id": { "type": "integer", "format": "int32" }, "minNumber": { "type": "number", "format": "float" }, "maxNumber": { "type": "number", "format": "float" }, "name": { "type": "string", "nullable": true }, "number": { "type": "integer", "description": "This will map to MinNumber. Number was removed in v0.7.13.8/v0.7.14", "format": "int32", "deprecated": true }, "pages": { "type": "integer", "format": "int32" }, "pagesRead": { "type": "integer", "format": "int32" }, "lastModifiedUtc": { "type": "string", "format": "date-time" }, "createdUtc": { "type": "string", "format": "date-time" }, "created": { "type": "string", "description": "When chapter was created in local server time", "format": "date-time" }, "lastModified": { "type": "string", "description": "When chapter was last modified in local server time", "format": "date-time" }, "seriesId": { "type": "integer", "format": "int32" }, "chapters": { "type": "array", "items": { "$ref": "#/components/schemas/ChapterDto" }, "nullable": true }, "minHoursToRead": { "type": "integer", "format": "int32" }, "maxHoursToRead": { "type": "integer", "format": "int32" }, "avgHoursToRead": { "type": "integer", "format": "int32" } }, "additionalProperties": false } }, "securitySchemes": { "Bearer": { "type": "apiKey", "description": "Please insert JWT with Bearer into field", "name": "Authorization", "in": "header" } } }, "security": [ { "Bearer": [ ] } ], "tags": [ { "name": "Account", "description": "All Account matters" }, { "name": "Cbl", "description": "Responsible for the CBL import flow" }, { "name": "Collection", "description": "APIs for Collections" }, { "name": "Device", "description": "Responsible interacting and creating Devices" }, { "name": "Download", "description": "All APIs related to downloading entities from the system. Requires Download Role or Admin Role." }, { "name": "Filter", "description": "This is responsible for Filter caching" }, { "name": "Image", "description": "Responsible for servicing up images stored in Kavita for entities" }, { "name": "Panels", "description": "For the Panels app explicitly" }, { "name": "Rating", "description": "Responsible for providing external ratings for Series" }, { "name": "Reader", "description": "For all things regarding reading, mainly focusing on non-Book related entities" }, { "name": "Search", "description": "Responsible for the Search interface from the UI" }, { "name": "Stream", "description": "Responsible for anything that deals with Streams (SmartFilters, ExternalSource, DashboardStream, SideNavStream)" }, { "name": "Tachiyomi", "description": "All APIs are for Tachiyomi extension and app. They have hacks for our implementation and should not be used for any\r\nother purposes." }, { "name": "Upload", "description": "" }, { "name": "WantToRead", "description": "Responsible for all things Want To Read" } ] }