Kavita/openapi.json
2025-03-22 19:41:01 +00:00

25601 lines
No EOL
666 KiB
JSON

{
"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. Built against v0.8.5.13",
"license": {
"name": "GPL-3.0",
"url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE"
},
"version": "3.1.0"
},
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
},
"application/json": {
"schema": {
"type": "string"
}
},
"text/json": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/api/Chapter": {
"get": {
"tags": [
"Chapter"
],
"summary": "Gets a single chapter",
"parameters": [
{
"name": "chapterId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChapterDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChapterDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChapterDto"
}
}
}
}
}
},
"delete": {
"tags": [
"Chapter"
],
"summary": "Removes a Chapter",
"parameters": [
{
"name": "chapterId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/Chapter/delete-multiple": {
"post": {
"tags": [
"Chapter"
],
"summary": "Deletes multiple chapters and any volumes with no leftover chapters",
"parameters": [
{
"name": "seriesId",
"in": "query",
"description": "The ID of the series",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"description": "The IDs of the chapters to be deleted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeleteChaptersDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DeleteChaptersDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/DeleteChaptersDto"
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/Chapter/update": {
"post": {
"tags": [
"Chapter"
],
"summary": "Update chapter metadata",
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateChapterDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateChapterDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateChapterDto"
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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\n<remarks>UI does not contain controls to update title</remarks>",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK"
}
}
}
},
"/api/ColorScape/series": {
"get": {
"tags": [
"ColorScape"
],
"summary": "Returns the color scape for a series",
"parameters": [
{
"name": "id",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ColorScapeDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ColorScapeDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ColorScapeDto"
}
}
}
}
}
}
},
"/api/ColorScape/volume": {
"get": {
"tags": [
"ColorScape"
],
"summary": "Returns the color scape for a volume",
"parameters": [
{
"name": "id",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ColorScapeDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ColorScapeDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ColorScapeDto"
}
}
}
}
}
}
},
"/api/ColorScape/chapter": {
"get": {
"tags": [
"ColorScape"
],
"summary": "Returns the color scape for a chapter",
"parameters": [
{
"name": "id",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ColorScapeDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ColorScapeDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ColorScapeDto"
}
}
}
}
}
}
},
"/api/Device/create": {
"post": {
"tags": [
"Device"
],
"summary": "Creates a new Device",
"requestBody": {
"description": "",
"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": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DeviceDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeviceDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DeviceDto"
}
}
}
}
}
}
},
"/api/Device/update": {
"post": {
"tags": [
"Device"
],
"summary": "Updates an existing Device",
"requestBody": {
"description": "",
"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": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DeviceDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeviceDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DeviceDto"
}
}
}
}
}
}
},
"/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": "OK"
}
}
},
"get": {
"tags": [
"Device"
],
"responses": {
"200": {
"description": "OK",
"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": "OK"
}
}
}
},
"/api/Device/send-series-to": {
"post": {
"tags": [
"Device"
],
"summary": "Attempts to send a whole series to a device.",
"requestBody": {
"description": "",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Download/series": {
"get": {
"tags": [
"Download"
],
"parameters": [
{
"name": "seriesId",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Email/all": {
"get": {
"tags": [
"Email"
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/EmailHistoryDto"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/EmailHistoryDto"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/EmailHistoryDto"
}
}
}
}
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Filter": {
"get": {
"tags": [
"Filter"
],
"responses": {
"200": {
"description": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Image/publisher": {
"get": {
"tags": [
"Image"
],
"summary": "Returns the image associated with a publisher",
"parameters": [
{
"name": "publisherName",
"in": "query",
"description": "",
"schema": {
"type": "string"
}
},
{
"name": "apiKey",
"in": "query",
"description": "",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Image/person-cover": {
"get": {
"tags": [
"Image"
],
"summary": "Returns cover image for Person",
"parameters": [
{
"name": "personId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "apiKey",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Image/person-cover-by-name": {
"get": {
"tags": [
"Image"
],
"summary": "Returns cover image for Person",
"parameters": [
{
"name": "name",
"in": "query",
"description": "",
"schema": {
"type": "string"
}
},
{
"name": "apiKey",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/api/Library/scan-multiple": {
"post": {
"tags": [
"Library"
],
"summary": "Enqueues a bunch of library scans",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BulkActionDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BulkActionDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/BulkActionDto"
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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
}
},
{
"name": "forceColorscape",
"in": "query",
"schema": {
"type": "boolean",
"default": true
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Library/refresh-metadata-multiple": {
"post": {
"tags": [
"Library"
],
"parameters": [
{
"name": "forceColorscape",
"in": "query",
"schema": {
"type": "boolean",
"default": true
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BulkActionDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BulkActionDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/BulkActionDto"
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Library/analyze": {
"post": {
"tags": [
"Library"
],
"parameters": [
{
"name": "libraryId",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Library/analyze-multiple": {
"post": {
"tags": [
"Library"
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BulkActionDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BulkActionDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/BulkActionDto"
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Library/copy-settings-from": {
"post": {
"tags": [
"Library"
],
"summary": "Copy the library settings (adv tab + optional type) to a set of other libraries.",
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CopySettingsFromLibraryDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CopySettingsFromLibraryDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CopySettingsFromLibraryDto"
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Library/delete": {
"delete": {
"tags": [
"Library"
],
"summary": "Deletes the library and all series within it.",
"description": "This does not touch any files",
"parameters": [
{
"name": "libraryId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/Library/delete-multiple": {
"delete": {
"tags": [
"Library"
],
"summary": "Deletes multiple libraries and all series within it.",
"description": "This does not touch any files",
"parameters": [
{
"name": "libraryIds",
"in": "query",
"description": "",
"schema": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
}
],
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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 registered with the instance. Does not check Kavita+ API",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/License/info": {
"get": {
"tags": [
"License"
],
"summary": "Asks Kavita+ for the latest license info",
"parameters": [
{
"name": "forceCheck",
"in": "query",
"description": "Force checking the API and skip the 8 hour cache",
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/LicenseInfoDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/LicenseInfoDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/LicenseInfoDto"
}
}
}
}
}
}
},
"/api/License": {
"delete": {
"tags": [
"License"
],
"summary": "Remove the Kavita+ License on the Server",
"responses": {
"200": {
"description": "OK"
}
}
},
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Locale": {
"get": {
"tags": [
"Locale"
],
"summary": "Returns all applicable locales on the server",
"description": "This can be cached as it will not change per version.",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/KavitaLocale"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/KavitaLocale"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/KavitaLocale"
}
}
}
}
}
}
}
},
"/api/Manage/series-metadata": {
"post": {
"tags": [
"Manage"
],
"summary": "Returns a list of all Series that is Kavita+ applicable to metadata match and the status of it",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ManageMatchFilterDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ManageMatchFilterDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ManageMatchFilterDto"
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ManageMatchSeriesDto"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ManageMatchSeriesDto"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ManageMatchSeriesDto"
}
}
}
}
}
}
}
},
"/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"
}
},
{
"name": "context",
"in": "query",
"description": "Context from which this API was invoked",
"schema": {
"enum": [
1,
2,
3,
4
],
"type": "integer",
"description": "For complex queries, Library has certain restrictions where the library should not be included in results.\r\nThis enum dictates which field to use for the lookup.",
"format": "int32",
"default": 1
}
}
],
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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/language-title": {
"get": {
"tags": [
"Metadata"
],
"summary": "Given a language code returns the display name",
"parameters": [
{
"name": "code",
"in": "query",
"description": "",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
},
"application/json": {
"schema": {
"type": "string"
}
},
"text/json": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/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": "OK",
"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": "OK"
}
}
},
"get": {
"tags": [
"Opds"
],
"parameters": [
{
"name": "apiKey",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Opds/{apiKey}/smart-filters/{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": "OK"
}
}
}
},
"/api/Opds/{apiKey}/smart-filters": {
"get": {
"tags": [
"Opds"
],
"parameters": [
{
"name": "apiKey",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Opds/{apiKey}/external-sources": {
"get": {
"tags": [
"Opds"
],
"parameters": [
{
"name": "apiKey",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Opds/{apiKey}/libraries": {
"get": {
"tags": [
"Opds"
],
"parameters": [
{
"name": "apiKey",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Opds/{apiKey}/collections": {
"get": {
"tags": [
"Opds"
],
"parameters": [
{
"name": "apiKey",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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"
}
},
{
"name": "pageNumber",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Opds/{apiKey}/series": {
"get": {
"tags": [
"Opds"
],
"summary": "OPDS Search endpoint",
"parameters": [
{
"name": "apiKey",
"in": "path",
"description": "",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "query",
"in": "query",
"description": "",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Opds/{apiKey}/search": {
"get": {
"tags": [
"Opds"
],
"parameters": [
{
"name": "apiKey",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Opds/{apiKey}/favicon": {
"get": {
"tags": [
"Opds"
],
"parameters": [
{
"name": "apiKey",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProgressDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProgressDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProgressDto"
}
}
}
}
}
}
},
"/api/Person": {
"get": {
"tags": [
"Person"
],
"parameters": [
{
"name": "name",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PersonDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PersonDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PersonDto"
}
}
}
}
}
}
},
"/api/Person/roles": {
"get": {
"tags": [
"Person"
],
"summary": "Returns all roles for a Person",
"parameters": [
{
"name": "personId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"enum": [
1,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15
],
"type": "integer",
"format": "int32"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"enum": [
1,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15
],
"type": "integer",
"format": "int32"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"enum": [
1,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15
],
"type": "integer",
"format": "int32"
}
}
}
}
}
}
}
},
"/api/Person/all": {
"post": {
"tags": [
"Person"
],
"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"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrowsePersonDto"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrowsePersonDto"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrowsePersonDto"
}
}
}
}
}
}
}
},
"/api/Person/update": {
"post": {
"tags": [
"Person"
],
"summary": "Updates the Person",
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdatePersonDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdatePersonDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdatePersonDto"
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PersonDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PersonDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PersonDto"
}
}
}
}
}
}
},
"/api/Person/fetch-cover": {
"post": {
"tags": [
"Person"
],
"summary": "Attempts to download the cover from CoversDB (Note: Not yet release in Kavita)",
"parameters": [
{
"name": "personId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
},
"application/json": {
"schema": {
"type": "string"
}
},
"text/json": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/api/Person/series-known-for": {
"get": {
"tags": [
"Person"
],
"summary": "Returns the top 20 series that the \"person\" is known for. This will use Average Rating when applicable (Kavita+ field), else it's a random sort",
"parameters": [
{
"name": "personId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"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/Person/chapters-by-role": {
"get": {
"tags": [
"Person"
],
"summary": "Returns all individual chapters by role. Limited to 20 results.",
"parameters": [
{
"name": "personId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "role",
"in": "query",
"description": "",
"schema": {
"enum": [
1,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15
],
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/StandaloneChapterDto"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/StandaloneChapterDto"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/StandaloneChapterDto"
}
}
}
}
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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"
}
},
{
"name": "extractPdf",
"in": "query",
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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 authenticated 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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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"
],
"summary": "Deletes the user's personal table of content for the given chapter",
"parameters": [
{
"name": "chapterId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "pageNum",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "title",
"in": "query",
"description": "",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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 the given series within it.",
"parameters": [
{
"name": "seriesId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"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-chapter": {
"get": {
"tags": [
"ReadingList"
],
"summary": "Returns all Reading Lists the user has access to that has the given chapter within it.",
"parameters": [
{
"name": "chapterId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/ReadingList/promote-multiple": {
"post": {
"tags": [
"ReadingList"
],
"summary": "Promote/UnPromote multiple reading lists in one go. Will only update the authenticated user's reading lists and will only work if the user has promotion role",
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PromoteReadingListsDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PromoteReadingListsDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/PromoteReadingListsDto"
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/ReadingList/delete-multiple": {
"post": {
"tags": [
"ReadingList"
],
"summary": "Delete multiple reading lists in one go",
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeleteReadingListsDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DeleteReadingListsDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/DeleteReadingListsDto"
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/api/Scrobbling/anilist-token": {
"get": {
"tags": [
"Scrobbling"
],
"summary": "Get the current user's AniList token",
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/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": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/Scrobbling/generate-scrobble-events": {
"post": {
"tags": [
"Scrobbling"
],
"summary": "When a user request to generate scrobble events from history. Should only be ran once per user.",
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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"
],
"summary": "Searches against different entities in the system against a query string",
"parameters": [
{
"name": "queryString",
"in": "query",
"description": "",
"schema": {
"type": "string"
}
},
{
"name": "includeChapterAndFiles",
"in": "query",
"description": "Include Chapter and Filenames in the entities. This can slow down the search on larger systems",
"schema": {
"type": "boolean",
"default": true
}
}
],
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK",
"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/{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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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
}
},
{
"name": "context",
"in": "query",
"description": "For complex queries, Library has certain restrictions where the library should not be included in results.\r\nThis enum dictates which field to use for the lookup.",
"schema": {
"enum": [
1,
2,
3,
4
],
"type": "integer",
"description": "For complex queries, Library has certain restrictions where the library should not be included in results.\r\nThis enum dictates which field to use for the lookup.",
"format": "int32",
"default": 1
}
}
],
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/NextExpectedChapterDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/NextExpectedChapterDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/NextExpectedChapterDto"
}
}
}
}
}
}
},
"/api/Series/match": {
"post": {
"tags": [
"Series"
],
"summary": "Sends a request to Kavita+ API for all potential matches, sorted by relevance",
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MatchSeriesDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MatchSeriesDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/MatchSeriesDto"
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ExternalSeriesMatchDto"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ExternalSeriesMatchDto"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ExternalSeriesMatchDto"
}
}
}
}
}
}
}
},
"/api/Series/update-match": {
"post": {
"tags": [
"Series"
],
"summary": "This will perform the fix match",
"parameters": [
{
"name": "seriesId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "aniListId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "malId",
"in": "query",
"schema": {
"type": "integer",
"format": "int64"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Series/dont-match": {
"post": {
"tags": [
"Series"
],
"summary": "When true, will not perform a match and will prevent Kavita from attempting to match/scrobble against this series",
"parameters": [
{
"name": "seriesId",
"in": "query",
"description": "",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "dontMatch",
"in": "query",
"description": "",
"schema": {
"type": "boolean"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Server/clear-cache": {
"post": {
"tags": [
"Server"
],
"summary": "Performs an ad-hoc cleanup of Cache",
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Server/cleanup": {
"post": {
"tags": [
"Server"
],
"summary": "Performs the nightly maintenance work on the Server. Can be heavy.",
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Server/backup-db": {
"post": {
"tags": [
"Server"
],
"summary": "Performs an ad-hoc backup of the Database",
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ServerInfoSlimDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServerInfoSlimDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ServerInfoSlimDto"
}
}
}
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Server/logs": {
"get": {
"tags": [
"Server"
],
"summary": "Downloads all the log files via a zip",
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Server/check-update": {
"get": {
"tags": [
"Server"
],
"summary": "Checks for updates, if no updates that are > current version installed, returns null",
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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",
"parameters": [
{
"name": "count",
"in": "query",
"description": "How many releases from the latest to return",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
}
],
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/api/Server/bust-kavitaplus-cache": {
"post": {
"tags": [
"Server"
],
"summary": "Bust Kavita+ Cache",
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Server/sync-themes": {
"post": {
"tags": [
"Server"
],
"summary": "Runs the Sync Themes task",
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/api/Settings/base-url": {
"get": {
"tags": [
"Settings"
],
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/EmailTestResultDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/EmailTestResultDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/EmailTestResultDto"
}
}
}
}
}
}
},
"/api/Settings/metadata-settings": {
"get": {
"tags": [
"Settings"
],
"summary": "Get the metadata settings for Kavita+ users.",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MetadataSettingsDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MetadataSettingsDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MetadataSettingsDto"
}
}
}
}
}
},
"post": {
"tags": [
"Settings"
],
"summary": "Update the metadata settings for Kavita+ users",
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MetadataSettingsDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MetadataSettingsDto"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/MetadataSettingsDto"
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MetadataSettingsDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MetadataSettingsDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MetadataSettingsDto"
}
}
}
}
}
}
},
"/api/Stats/user/{userId}/read": {
"get": {
"tags": [
"Stats"
],
"parameters": [
{
"name": "userId",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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/server/file-extension": {
"get": {
"tags": [
"Stats"
],
"summary": "Generates a csv of all file paths for a given extension",
"parameters": [
{
"name": "fileExtension",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/Theme": {
"get": {
"tags": [
"Theme"
],
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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",
"description": "",
"format": "binary"
}
}
},
"encoding": {
"formFile": {
"style": "form"
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/api/Upload/volume": {
"post": {
"tags": [
"Upload"
],
"summary": "Replaces volume cover image and locks it with a base64 encoded image.",
"description": "This will not update the underlying chapter",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
},
"/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": "OK"
}
},
"deprecated": true
}
},
"/api/Upload/person": {
"post": {
"tags": [
"Upload"
],
"summary": "Replaces person 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": "OK"
}
}
}
},
"/api/Users/delete-user": {
"delete": {
"tags": [
"Users"
],
"parameters": [
{
"name": "username",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/Users/update-preferences": {
"post": {
"tags": [
"Users"
],
"summary": "Update the user preferences",
"description": "If the user has ReadOnly role, they will not be able to perform this action",
"requestBody": {
"description": "",
"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": "OK",
"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": "OK",
"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": "OK",
"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/Users/tokens": {
"get": {
"tags": [
"Users"
],
"summary": "Returns all users with tokens registered and their token information. Does not send the tokens.",
"description": "Kavita+ only",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/UserTokenInfo"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/UserTokenInfo"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/UserTokenInfo"
}
}
}
}
}
}
}
},
"/api/Volume": {
"get": {
"tags": [
"Volume"
],
"parameters": [
{
"name": "volumeId",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/VolumeDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/VolumeDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/VolumeDto"
}
}
}
}
}
},
"delete": {
"tags": [
"Volume"
],
"parameters": [
{
"name": "volumeId",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "boolean"
}
},
"application/json": {
"schema": {
"type": "boolean"
}
},
"text/json": {
"schema": {
"type": "boolean"
}
}
}
}
}
}
},
"/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": "OK",
"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": "OK",
"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": "OK",
"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": "OK"
}
}
}
},
"/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": "OK"
}
}
}
}
},
"components": {
"schemas": {
"ALMediaTitle": {
"type": "object",
"properties": {
"englishTitle": {
"type": "string",
"nullable": true
},
"romajiTitle": {
"type": "string",
"nullable": true
},
"nativeTitle": {
"type": "string",
"nullable": true
},
"preferredTitle": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"AgeRatingDto": {
"required": [
"title"
],
"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": {
"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": "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": {
"required": [
"ageRating",
"normalizedTitle",
"title"
],
"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",
"nullable": true
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"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 \n 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
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"nullable": true
},
"coverImageLocked": {
"type": "boolean"
},
"itemCount": {
"type": "integer",
"description": "Number of Series in the Collection",
"format": "int32"
},
"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 \n separated string of all missing series",
"nullable": true
}
},
"additionalProperties": false
},
"AppUserDashboardStream": {
"required": [
"name"
],
"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": {
"required": [
"apiKey",
"host",
"name"
],
"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": {
"required": [
"theme"
],
"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<example>\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</example>",
"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
},
"aniListScrobblingEnabled": {
"type": "boolean",
"description": "Should this account have Scrobbling enabled for AniList"
},
"wantToReadSync": {
"type": "boolean",
"description": "Should this account have Want to Read Sync enabled"
},
"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,
"deprecated": 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": {
"required": [
"name"
],
"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,
9
],
"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": {
"required": [
"filter",
"name"
],
"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": {
"required": [
"chapterId",
"pageNumber",
"seriesId",
"title"
],
"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": {
"required": [
"seriesId"
],
"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
},
"BrowsePersonDto": {
"required": [
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string",
"nullable": true
},
"coverImageLocked": {
"type": "boolean"
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"nullable": true
},
"coverImage": {
"type": "string",
"nullable": true
},
"description": {
"type": "string",
"nullable": true
},
"asin": {
"type": "string",
"description": "ASIN for person",
"nullable": true
},
"aniListId": {
"type": "integer",
"description": "https://anilist.co/staff/{AniListId}/",
"format": "int32"
},
"malId": {
"type": "integer",
"description": "https://myanimelist.net/people/{MalId}/\r\nhttps://myanimelist.net/character/{MalId}/CharacterName",
"format": "int64"
},
"hardcoverId": {
"type": "string",
"description": "https://hardcover.app/authors/{HardcoverId}",
"nullable": true
},
"seriesCount": {
"type": "integer",
"description": "Number of Series this Person is the Writer for",
"format": "int32"
},
"issueCount": {
"type": "integer",
"description": "Number or Issues this Person is the Writer for",
"format": "int32"
}
},
"additionalProperties": false,
"description": "Used to browse writers and click in to see their series"
},
"BulkActionDto": {
"type": "object",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
},
"nullable": true
},
"force": {
"type": "boolean",
"nullable": true
}
},
"additionalProperties": false
},
"BulkRemoveBookmarkForSeriesDto": {
"type": "object",
"properties": {
"seriesIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
},
"nullable": true
}
},
"additionalProperties": false
},
"BulkUpdateSideNavStreamVisibilityDto": {
"required": [
"ids",
"visibility"
],
"type": "object",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
},
"nullable": true
},
"visibility": {
"type": "boolean"
}
},
"additionalProperties": false
},
"Chapter": {
"required": [
"number",
"range"
],
"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",
"nullable": true
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"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": "number",
"format": "float"
},
"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
},
"ageRatingLocked": {
"type": "boolean"
},
"titleNameLocked": {
"type": "boolean"
},
"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"
},
"languageLocked": {
"type": "boolean"
},
"summaryLocked": {
"type": "boolean"
},
"isbnLocked": {
"type": "boolean"
},
"releaseDateLocked": {
"type": "boolean"
},
"people": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChapterPeople"
},
"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": "number",
"format": "float"
},
"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"
},
"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"
},
"coverImage": {
"type": "string",
"nullable": true
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"nullable": true
}
},
"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"
},
"ChapterPeople": {
"required": [
"role"
],
"type": "object",
"properties": {
"chapterId": {
"type": "integer",
"format": "int32"
},
"chapter": {
"$ref": "#/components/schemas/Chapter"
},
"personId": {
"type": "integer",
"format": "int32"
},
"person": {
"$ref": "#/components/schemas/Person"
},
"role": {
"enum": [
1,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15
],
"type": "integer",
"format": "int32"
}
},
"additionalProperties": false
},
"CollectionTag": {
"required": [
"normalizedTitle",
"title"
],
"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
},
"ColorScapeDto": {
"type": "object",
"properties": {
"primary": {
"type": "string",
"nullable": true
},
"secondary": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false,
"description": "A set of colors for the color scape system in the UI"
},
"ConfirmEmailDto": {
"required": [
"email",
"password",
"token",
"username"
],
"type": "object",
"properties": {
"email": {
"minLength": 1,
"type": "string"
},
"token": {
"minLength": 1,
"type": "string"
},
"password": {
"maxLength": 256,
"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": 256,
"minLength": 6,
"type": "string"
}
},
"additionalProperties": false
},
"CopySettingsFromLibraryDto": {
"type": "object",
"properties": {
"sourceLibraryId": {
"type": "integer",
"format": "int32"
},
"targetLibraryIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
},
"nullable": true
},
"includeType": {
"type": "boolean",
"description": "Include copying over the type"
}
},
"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": {
"required": [
"chapterId",
"libraryId",
"pageNumber",
"seriesId",
"title",
"volumeId"
],
"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": {
"required": [
"name"
],
"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"
},
"DeleteChaptersDto": {
"type": "object",
"properties": {
"chapterIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
},
"nullable": true
}
},
"additionalProperties": false
},
"DeleteCollectionsDto": {
"required": [
"collectionIds"
],
"type": "object",
"properties": {
"collectionIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
},
"additionalProperties": false
},
"DeleteReadingListsDto": {
"required": [
"readingListIds"
],
"type": "object",
"properties": {
"readingListIds": {
"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
},
"EmailHistoryDto": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"sent": {
"type": "boolean"
},
"sendDate": {
"type": "string",
"format": "date-time"
},
"emailTemplate": {
"type": "string",
"nullable": true
},
"errorMessage": {
"type": "string",
"nullable": true
},
"toUserName": {
"type": "string",
"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": {
"required": [
"coverUrl",
"name",
"url"
],
"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": {
"required": [
"body",
"bodyJustText",
"provider"
],
"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"
},
"ExternalSeriesDetailDto": {
"type": "object",
"properties": {
"name": {
"type": "string",
"nullable": true
},
"aniListId": {
"type": "integer",
"format": "int32",
"nullable": true
},
"malId": {
"type": "integer",
"format": "int64",
"nullable": true
},
"synonyms": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"plusMediaFormat": {
"enum": [
1,
2,
3,
4,
5
],
"type": "integer",
"description": "Represents PlusMediaFormat",
"format": "int32"
},
"siteUrl": {
"type": "string",
"nullable": true
},
"coverUrl": {
"type": "string",
"nullable": true
},
"genres": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"staff": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SeriesStaffDto"
},
"nullable": true
},
"tags": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MetadataTagDto"
},
"nullable": true
},
"summary": {
"type": "string",
"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"
},
"startDate": {
"type": "string",
"format": "date-time",
"nullable": true
},
"endDate": {
"type": "string",
"format": "date-time",
"nullable": true
},
"averageScore": {
"type": "integer",
"format": "int32"
},
"chapters": {
"type": "integer",
"format": "int32"
},
"volumes": {
"type": "integer",
"format": "int32"
},
"relations": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SeriesRelationship"
},
"nullable": true
},
"characters": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SeriesCharacter"
},
"nullable": true
}
},
"additionalProperties": false,
"description": "This is AniListSeries"
},
"ExternalSeriesDto": {
"required": [
"coverUrl",
"name",
"url"
],
"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
},
"ExternalSeriesMatchDto": {
"type": "object",
"properties": {
"series": {
"$ref": "#/components/schemas/ExternalSeriesDetailDto"
},
"matchRating": {
"type": "number",
"format": "float"
}
},
"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, 0 - 100",
"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": {
"required": [
"apiKey",
"host",
"id",
"name"
],
"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
},
"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,
16
],
"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,
32
],
"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": {
"required": [
"path"
],
"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": {
"required": [
"normalizedTitle",
"title"
],
"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": {
"required": [
"title"
],
"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": "number",
"description": "Estimated average hours to read the selection",
"format": "float"
}
},
"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"
},
"KavitaLocale": {
"type": "object",
"properties": {
"fileName": {
"type": "string",
"nullable": true
},
"renderName": {
"type": "string",
"nullable": true
},
"translationCompletion": {
"type": "number",
"format": "float"
},
"isRtL": {
"type": "boolean"
},
"hash": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"LanguageDto": {
"required": [
"isoCode",
"title"
],
"type": "object",
"properties": {
"isoCode": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"Library": {
"required": [
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string",
"nullable": true
},
"coverImage": {
"type": "string",
"nullable": true
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"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"
},
"allowMetadataMatching": {
"type": "boolean",
"description": "Allow any series within this Library to download metadata."
},
"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
},
"allowMetadataMatching": {
"type": "boolean",
"description": "Allow any series within this Library to download metadata."
}
},
"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
},
"LicenseInfoDto": {
"type": "object",
"properties": {
"expirationDate": {
"type": "string",
"description": "If cancelled, will represent cancellation date. If not, will represent repayment date",
"format": "date-time"
},
"isActive": {
"type": "boolean",
"description": "If cancelled or not"
},
"isCancelled": {
"type": "boolean",
"description": "If will be or is cancelled"
},
"isValidVersion": {
"type": "boolean",
"description": "Is the installed version valid for Kavita+ (aka within 3 releases)"
},
"registeredEmail": {
"type": "string",
"description": "The email on file",
"nullable": true
},
"totalMonthsSubbed": {
"type": "integer",
"description": "Number of months user has been subscribed",
"format": "int32"
},
"hasLicense": {
"type": "boolean",
"description": "A license is stored within Kavita"
}
},
"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": {
"required": [
"author",
"restackCount",
"seriesCount",
"stackId",
"title",
"url"
],
"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": {
"required": [
"accessToken",
"username"
],
"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"
},
"ManageMatchFilterDto": {
"type": "object",
"properties": {
"matchStateOption": {
"enum": [
0,
1,
2,
3,
4
],
"type": "integer",
"description": "Represents an option in the UI layer for Filtering",
"format": "int32"
},
"searchTerm": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"ManageMatchSeriesDto": {
"type": "object",
"properties": {
"series": {
"$ref": "#/components/schemas/SeriesDto"
},
"isMatched": {
"type": "boolean"
},
"validUntilUtc": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"MangaFile": {
"required": [
"filePath"
],
"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",
"description": "Absolute path to the archive file (normalized)",
"nullable": true
},
"pages": {
"type": "integer",
"description": "Number of pages for the given file",
"format": "int32"
},
"bytes": {
"type": "integer",
"description": "How many bytes make up this file",
"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"
},
"extension": {
"type": "string",
"description": "File extension",
"nullable": true
}
},
"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"
},
"MatchSeriesDto": {
"type": "object",
"properties": {
"dontMatch": {
"type": "boolean",
"description": "When set, Kavita will stop attempting to match this series and will not perform any scrobbling"
},
"seriesId": {
"type": "integer",
"description": "Series Id to pull internal metadata from to improve matching",
"format": "int32"
},
"query": {
"type": "string",
"description": "Free form text to query for. Can be a url and ids will be parsed from it",
"nullable": true
}
},
"additionalProperties": false,
"description": "Used for matching a series with Kavita+ for metadata and scrobbling"
},
"MediaErrorDto": {
"required": [
"extension",
"filePath"
],
"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
},
"createdUtc": {
"type": "string",
"format": "date-time"
}
},
"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."
},
"MetadataFieldMappingDto": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"sourceType": {
"enum": [
0,
1
],
"type": "integer",
"format": "int32"
},
"destinationType": {
"enum": [
0,
1
],
"type": "integer",
"format": "int32"
},
"sourceValue": {
"type": "string",
"description": "The string in the source",
"nullable": true
},
"destinationValue": {
"type": "string",
"description": "Write the string as this in the Destination (can also just be the Source)",
"nullable": true
},
"excludeFromSource": {
"type": "boolean",
"description": "If true, the tag will be Moved over vs Copied over"
}
},
"additionalProperties": false
},
"MetadataSettingsDto": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"description": "If writing any sort of metadata from upstream (AniList, Hardcover) source is allowed"
},
"enableSummary": {
"type": "boolean",
"description": "Allow the Summary to be written"
},
"enablePublicationStatus": {
"type": "boolean",
"description": "Allow Publication status to be derived and updated"
},
"enableRelationships": {
"type": "boolean",
"description": "Allow Relationships between series to be set"
},
"enablePeople": {
"type": "boolean",
"description": "Allow People to be created (including downloading images)"
},
"enableStartDate": {
"type": "boolean",
"description": "Allow Start date to be set within the Series"
},
"enableLocalizedName": {
"type": "boolean",
"description": "Allow setting the Localized name"
},
"enableCoverImage": {
"type": "boolean",
"description": "Allow setting the cover image"
},
"enableGenres": {
"type": "boolean"
},
"enableTags": {
"type": "boolean"
},
"firstLastPeopleNaming": {
"type": "boolean",
"description": "For Authors and Writers, how should names be stored (Exclusively applied for AniList). This does not affect Character names."
},
"ageRatingMappings": {
"type": "object",
"additionalProperties": {
"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": "Any Genres or Tags that if present, will trigger an Age Rating Override. Highest rating will be prioritized for matching.",
"nullable": true
},
"fieldMappings": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MetadataFieldMappingDto"
},
"description": "A list of rules that allow mapping a genre/tag to another genre/tag",
"nullable": true
},
"overrides": {
"type": "array",
"items": {
"enum": [
1,
2,
3,
4,
5,
6,
7,
8,
9
],
"type": "integer",
"description": "Represents which field that can be written to as an override when already locked",
"format": "int32"
},
"description": "A list of overrides that will enable writing to locked fields",
"nullable": true
},
"blacklist": {
"type": "array",
"items": {
"type": "string"
},
"description": "Do not allow any Genre/Tag in this list to be written to Kavita",
"nullable": true
},
"whitelist": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only allow these Tags to be written to Kavita",
"nullable": true
},
"personRoles": {
"type": "array",
"items": {
"enum": [
1,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15
],
"type": "integer",
"format": "int32"
},
"description": "Which Roles to allow metadata downloading for",
"nullable": true
}
},
"additionalProperties": false
},
"MetadataTagDto": {
"type": "object",
"properties": {
"name": {
"type": "string",
"nullable": true
},
"description": {
"type": "string",
"nullable": true,
"readOnly": true
},
"rank": {
"type": "integer",
"format": "int32",
"nullable": true,
"readOnly": true
},
"isGeneralSpoiler": {
"type": "boolean",
"readOnly": true
},
"isMediaSpoiler": {
"type": "boolean",
"readOnly": true
},
"isAdult": {
"type": "boolean",
"readOnly": true
}
},
"additionalProperties": false
},
"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": {
"required": [
"name",
"normalizedName"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string",
"nullable": true
},
"normalizedName": {
"type": "string",
"nullable": true
},
"coverImage": {
"type": "string",
"nullable": true
},
"coverImageLocked": {
"type": "boolean"
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"nullable": true
},
"description": {
"type": "string",
"nullable": true
},
"asin": {
"type": "string",
"description": "ASIN for person",
"nullable": true
},
"aniListId": {
"type": "integer",
"description": "https://anilist.co/staff/{AniListId}/",
"format": "int32"
},
"malId": {
"type": "integer",
"description": "https://myanimelist.net/people/{MalId}/\r\nhttps://myanimelist.net/character/{MalId}/CharacterName",
"format": "int64"
},
"hardcoverId": {
"type": "string",
"description": "https://hardcover.app/authors/{HardcoverId}",
"nullable": true
},
"chapterPeople": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChapterPeople"
},
"description": "https://metron.cloud/creator/{slug}/",
"nullable": true
},
"seriesMetadataPeople": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SeriesMetadataPeople"
},
"nullable": true
}
},
"additionalProperties": false
},
"PersonDto": {
"required": [
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string",
"nullable": true
},
"coverImageLocked": {
"type": "boolean"
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"nullable": true
},
"coverImage": {
"type": "string",
"nullable": true
},
"description": {
"type": "string",
"nullable": true
},
"asin": {
"type": "string",
"description": "ASIN for person",
"nullable": true
},
"aniListId": {
"type": "integer",
"description": "https://anilist.co/staff/{AniListId}/",
"format": "int32"
},
"malId": {
"type": "integer",
"description": "https://myanimelist.net/people/{MalId}/\r\nhttps://myanimelist.net/character/{MalId}/CharacterName",
"format": "int64"
},
"hardcoverId": {
"type": "string",
"description": "https://hardcover.app/authors/{HardcoverId}",
"nullable": true
}
},
"additionalProperties": false
},
"PersonalToCDto": {
"required": [
"chapterId",
"pageNumber",
"title"
],
"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
},
"PromoteReadingListsDto": {
"type": "object",
"properties": {
"readingListIds": {
"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": {
"required": [
"chapterNumber",
"seriesName",
"userName"
],
"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"
},
"readDateUtc": {
"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": {
"required": [
"ageRating",
"normalizedTitle",
"title"
],
"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",
"nullable": true
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"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
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"nullable": true
},
"itemCount": {
"type": "integer",
"description": "Number of Items in the Reading List",
"format": "int32"
},
"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"
},
"summary": {
"type": "string",
"description": "The chapter summary",
"nullable": true
},
"isSpecial": {
"type": "boolean"
}
},
"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."
},
"forceColorscape": {
"type": "boolean",
"description": "Should the task force re-calculation of colorscape."
}
},
"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": 256,
"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": 256,
"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": {
"required": [
"localizedName",
"name",
"normalizedLocalizedName",
"normalizedName",
"originalName",
"sortName"
],
"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. ex: 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"
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"nullable": true
},
"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": "number",
"format": "float"
},
"dontMatch": {
"type": "boolean",
"description": "Do not match the series with any external Metadata service. This will automatically opt it out of scrobbling."
},
"isBlacklisted": {
"type": "boolean",
"description": "If the series was unable to match, it will be blacklisted until a manual metadata match overrides it"
},
"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
},
"SeriesCharacter": {
"required": [
"description",
"url"
],
"type": "object",
"properties": {
"name": {
"type": "string",
"nullable": true
},
"description": {
"type": "string",
"nullable": true
},
"url": {
"type": "string",
"nullable": true
},
"imageUrl": {
"type": "string",
"nullable": true
},
"role": {
"enum": [
0,
1,
2
],
"type": "integer",
"format": "int32"
}
},
"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
},
"series": {
"$ref": "#/components/schemas/ExternalSeriesDetailDto"
}
},
"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": "number",
"format": "float"
},
"folderPath": {
"type": "string",
"description": "The highest level folder for this 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": "The last time the folder for this series was scanned",
"format": "date-time"
},
"dontMatch": {
"type": "boolean",
"description": "Do not match the series with any external Metadata service. This will automatically opt it out of scrobbling."
},
"isBlacklisted": {
"type": "boolean",
"description": "If the series was unable to match, it will be blacklisted until a manual metadata match overrides it"
},
"coverImage": {
"type": "string",
"nullable": true
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"nullable": true
}
},
"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
},
"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"
},
"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/SeriesMetadataPeople"
},
"description": "All people attached at a Series level.",
"nullable": true
},
"seriesId": {
"type": "integer",
"format": "int32"
},
"series": {
"$ref": "#/components/schemas/Series"
},
"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
},
"SeriesMetadataPeople": {
"required": [
"role"
],
"type": "object",
"properties": {
"seriesMetadataId": {
"type": "integer",
"format": "int32"
},
"seriesMetadata": {
"$ref": "#/components/schemas/SeriesMetadata"
},
"personId": {
"type": "integer",
"format": "int32"
},
"person": {
"$ref": "#/components/schemas/Person"
},
"kavitaPlusConnection": {
"type": "boolean",
"description": "The source of this connection. If not Kavita, this implies Metadata Download linked this and it can be removed between matches"
},
"orderWeight": {
"type": "integer",
"description": "A weight that allows lower numbers to sort first",
"format": "int32"
},
"role": {
"enum": [
1,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15
],
"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"
},
"SeriesRelationship": {
"type": "object",
"properties": {
"aniListId": {
"type": "integer",
"format": "int32"
},
"malId": {
"type": "integer",
"format": "int32",
"nullable": true
},
"seriesName": {
"$ref": "#/components/schemas/ALMediaTitle"
},
"relation": {
"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"
},
"provider": {
"enum": [
0,
1,
2
],
"type": "integer",
"description": "Misleading name but is the source of data (like a review coming from AniList)",
"format": "int32"
},
"plusMediaFormat": {
"enum": [
1,
2,
3,
4,
5
],
"type": "integer",
"description": "Represents PlusMediaFormat",
"format": "int32"
}
},
"additionalProperties": false
},
"SeriesStaffDto": {
"required": [
"name",
"role",
"url"
],
"type": "object",
"properties": {
"name": {
"type": "string",
"nullable": true
},
"firstName": {
"type": "string",
"nullable": true
},
"lastName": {
"type": "string",
"nullable": true
},
"url": {
"type": "string",
"nullable": true
},
"role": {
"type": "string",
"nullable": true
},
"imageUrl": {
"type": "string",
"nullable": true
},
"gender": {
"type": "string",
"nullable": true
},
"description": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"ServerInfoSlimDto": {
"required": [
"installId",
"kavitaVersion"
],
"type": "object",
"properties": {
"installId": {
"type": "string",
"description": "Unique Id that represents a unique install",
"nullable": true
},
"isDocker": {
"type": "boolean",
"description": "If the Kavita install is using Docker"
},
"kavitaVersion": {
"type": "string",
"description": "Version of Kavita",
"nullable": true
},
"firstInstallDate": {
"type": "string",
"description": "The Date Kavita was first installed",
"format": "date-time",
"nullable": true
},
"firstInstallVersion": {
"type": "string",
"description": "The Version of Kavita on the first run",
"nullable": true
}
},
"additionalProperties": false,
"description": "This is just for the Server tab on UI"
},
"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"
},
"firstInstallDate": {
"type": "string",
"description": "The Date Kavita was first installed",
"format": "date-time",
"nullable": true
},
"firstInstallVersion": {
"type": "string",
"description": "The Version of Kavita on the first run",
"nullable": true
}
},
"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": {
"required": [
"name"
],
"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,
9
],
"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": {
"required": [
"fileName",
"name",
"normalizedName"
],
"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": {
"required": [
"fileName",
"name",
"normalizedName"
],
"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": {
"required": [
"filter",
"name"
],
"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"
},
"StandaloneChapterDto": {
"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"
},
"minHoursToRead": {
"type": "integer",
"format": "int32"
},
"maxHoursToRead": {
"type": "integer",
"format": "int32"
},
"avgHoursToRead": {
"type": "number",
"format": "float"
},
"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"
},
"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"
},
"coverImage": {
"type": "string",
"nullable": true
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"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"
},
"volumeTitle": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false,
"description": "Used on Person Profile page"
},
"Tag": {
"required": [
"normalizedTitle",
"title"
],
"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": {
"required": [
"title"
],
"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": "number",
"description": "Amount of time read on Comic libraries",
"format": "float"
},
"booksTime": {
"type": "number",
"description": "Amount of time read on",
"format": "float"
},
"mangaTime": {
"type": "number",
"format": "float"
}
},
"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
},
"UpdateChapterDto": {
"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 Chapter",
"nullable": true
},
"tags": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagDto"
},
"description": "Collection of all Tags from underlying chapters for a 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
},
"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"
},
"language": {
"type": "string",
"description": "Language of the content (BCP-47 code)",
"nullable": true
},
"ageRatingLocked": {
"type": "boolean",
"description": "Locked by user so metadata updates from scan loop will not override AgeRating"
},
"titleNameLocked": {
"type": "boolean"
},
"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"
},
"languageLocked": {
"type": "boolean"
},
"summaryLocked": {
"type": "boolean"
},
"isbnLocked": {
"type": "boolean"
},
"releaseDateLocked": {
"type": "boolean"
},
"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"
},
"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
},
"releaseDate": {
"type": "string",
"description": "Date which chapter was released",
"format": "date-time"
},
"titleName": {
"type": "string",
"description": "Chapter title",
"nullable": true
}
},
"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": [
"allowMetadataMatching",
"allowScrobbling",
"excludePatterns",
"fileGroupTypes",
"folders",
"folderWatching",
"id",
"includeInDashboard",
"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"
},
"includeInSearch": {
"type": "boolean"
},
"manageCollections": {
"type": "boolean"
},
"manageReadingLists": {
"type": "boolean"
},
"allowScrobbling": {
"type": "boolean"
},
"allowMetadataMatching": {
"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": {
"required": [
"selectedLibraries",
"username"
],
"type": "object",
"properties": {
"username": {
"type": "string",
"nullable": true
},
"selectedLibraries": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LibraryDto"
},
"nullable": true
}
},
"additionalProperties": false
},
"UpdateLicenseDto": {
"required": [
"email",
"license"
],
"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": {
"required": [
"currentVersion",
"publishDate",
"updateBody",
"updateTitle",
"updateUrl",
"updateVersion"
],
"type": "object",
"properties": {
"currentVersion": {
"type": "string",
"description": "Current installed Version",
"nullable": true
},
"updateVersion": {
"type": "string",
"description": "Semver of the release version\r\n<example>0.4.3</example>",
"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"
},
"added": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"removed": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"changed": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"fixed": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"theme": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"developer": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"api": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"featureRequests": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"knownIssues": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"blogPart": {
"type": "string",
"description": "The part above the changelog part",
"nullable": true
}
},
"additionalProperties": false,
"description": "Update Notification denoting a new release available for user to update to"
},
"UpdatePersonDto": {
"required": [
"coverImageLocked",
"id",
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"coverImageLocked": {
"type": "boolean"
},
"name": {
"minLength": 1,
"type": "string"
},
"description": {
"type": "string",
"nullable": true
},
"aniListId": {
"type": "integer",
"format": "int32",
"nullable": true
},
"malId": {
"type": "integer",
"format": "int64",
"nullable": true
},
"hardcoverId": {
"type": "string",
"nullable": true
},
"asin": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"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"
},
"email": {
"type": "string",
"description": "Email of the user",
"nullable": true
}
},
"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": {
"required": [
"id",
"url"
],
"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
},
"lockCover": {
"type": "boolean",
"description": "Lock the cover or not"
}
},
"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<example>\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</example>",
"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"
},
"aniListScrobblingEnabled": {
"type": "boolean",
"description": "Kavita+: Should this account have Scrobbling enabled for AniList"
},
"wantToReadSync": {
"type": "boolean",
"description": "Kavita+: Should this account have Want to Read Sync enabled"
}
},
"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"
},
"UserTokenInfo": {
"type": "object",
"properties": {
"userId": {
"type": "integer",
"format": "int32"
},
"username": {
"type": "string",
"nullable": true
},
"isAniListTokenSet": {
"type": "boolean"
},
"isAniListTokenValid": {
"type": "boolean"
},
"aniListValidUntilUtc": {
"type": "string",
"format": "date-time"
},
"isMalTokenSet": {
"type": "boolean"
}
},
"additionalProperties": false,
"description": "Represents information around a user's tokens and their status"
},
"Volume": {
"required": [
"maxNumber",
"minNumber",
"name"
],
"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"
},
"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",
"nullable": true
},
"coverImageLocked": {
"type": "boolean"
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"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": "number",
"format": "float"
},
"chapters": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Chapter"
},
"nullable": true
},
"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": "number",
"format": "float"
},
"wordCount": {
"type": "integer",
"format": "int64"
},
"coverImage": {
"type": "string",
"nullable": true
},
"primaryColor": {
"type": "string",
"nullable": true
},
"secondaryColor": {
"type": "string",
"nullable": true
}
},
"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": "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": "Manage",
"description": "All things centered around Managing the Kavita instance, that isn't aligned with an entity"
},
{
"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"
}
]
}