diff --git a/openapi.json b/openapi.json index e81c7b987..3bc98012b 100644 --- a/openapi.json +++ b/openapi.json @@ -2,12 +2,12 @@ "openapi": "3.0.4", "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.7.17", + "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.7.18", "license": { "name": "GPL-3.0", "url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE" }, - "version": "0.8.7.17" + "version": "0.8.7.18" }, "servers": [ { @@ -968,6 +968,84 @@ } } }, + "/api/Annotation/all-filtered": { + "post": { + "tags": [ + "Annotation" + ], + "summary": "Returns a list of annotations for browsing", + "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/BrowseAnnotationFilterDto" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BrowseAnnotationFilterDto" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/BrowseAnnotationFilterDto" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnnotationDto" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnnotationDto" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnnotationDto" + } + } + } + } + } + } + } + }, "/api/Annotation/all": { "get": { "tags": [ @@ -1156,7 +1234,7 @@ "tags": [ "Annotation" ], - "summary": "Update the modifable fields (Spoiler, highlight slot, and comment) for an annotation", + "summary": "Update the modifiable fields (Spoiler, highlight slot, and comment) for an annotation", "requestBody": { "description": "", "content": { @@ -1225,6 +1303,147 @@ } } }, + "/api/Annotation/bulk-delete": { + "post": { + "tags": [ + "Annotation" + ], + "summary": "Removes annotations in bulk. Requires every annotation to be owned by the authenticated user", + "requestBody": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/Annotation/export-filter": { + "post": { + "tags": [ + "Annotation" + ], + "summary": "Exports annotations for the given users", + "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/BrowseAnnotationFilterDto" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BrowseAnnotationFilterDto" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/BrowseAnnotationFilterDto" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/Annotation/export": { + "post": { + "tags": [ + "Annotation" + ], + "summary": "Exports Annotations for the User", + "requestBody": { + "description": "Export annotations with the given ids", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, "/api/Book/{chapterId}/book-info": { "get": { "tags": [ @@ -4480,7 +4699,7 @@ "tags": [ "License" ], - "summary": "Has any license registered with the instance. Does not check Kavita+ API", + "summary": "Has any license registered with the instance. Does not validate against Kavita+ API", "responses": { "200": { "description": "OK", @@ -4621,6 +4840,36 @@ } } }, + "/api/License/resend-license": { + "post": { + "tags": [ + "License" + ], + "summary": "Resend the welcome email to the user", + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + } + } + } + }, "/api/Locale": { "get": { "tags": [ @@ -5392,10 +5641,12 @@ "tags": [ "Opds" ], + "summary": "Returns the Catalogue for Kavita's OPDS Service", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5412,10 +5663,12 @@ "tags": [ "Opds" ], + "summary": "Returns the Catalogue for Kavita's OPDS Service", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5434,7 +5687,7 @@ "tags": [ "Opds" ], - "summary": "Returns the Series matching this smart filter. If FromDashboard, will only return 20 records.", + "summary": "Get the User's Smart Filter series - Supports Pagination", "parameters": [ { "name": "apiKey", @@ -5459,7 +5712,7 @@ "schema": { "type": "integer", "format": "int32", - "default": 0 + "default": 1 } } ], @@ -5475,10 +5728,12 @@ "tags": [ "Opds" ], + "summary": "Get the User's Smart Filters (Dashboard Context) - Supports Pagination", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5487,10 +5742,11 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", - "default": 0 + "default": 1 } } ], @@ -5506,14 +5762,26 @@ "tags": [ "Opds" ], + "summary": "Get the User's Libraries - No Pagination Support", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" } + }, + { + "name": "pageNumber", + "in": "query", + "description": "", + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } } ], "responses": { @@ -5528,10 +5796,12 @@ "tags": [ "Opds" ], + "summary": "Get the User's Want to Read list - Supports Pagination", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5540,10 +5810,11 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", - "default": 0 + "default": 1 } } ], @@ -5559,10 +5830,12 @@ "tags": [ "Opds" ], + "summary": "Get all Collections - Supports Pagination", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5571,10 +5844,11 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", - "default": 0 + "default": 1 } } ], @@ -5590,10 +5864,12 @@ "tags": [ "Opds" ], + "summary": "Get Series for a given Collection - Supports Pagination", "parameters": [ { "name": "collectionId", "in": "path", + "description": "", "required": true, "schema": { "type": "integer", @@ -5603,6 +5879,7 @@ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5611,10 +5888,11 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", - "default": 0 + "default": 1 } } ], @@ -5630,10 +5908,12 @@ "tags": [ "Opds" ], + "summary": "Get a User's Reading Lists - Supports Pagination", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5642,10 +5922,11 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", - "default": 0 + "default": 1 } } ], @@ -5661,10 +5942,12 @@ "tags": [ "Opds" ], + "summary": "Returns individual items (chapters) from Reading List by ID - Supports Pagination", "parameters": [ { "name": "readingListId", "in": "path", + "description": "", "required": true, "schema": { "type": "integer", @@ -5674,6 +5957,7 @@ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5682,10 +5966,11 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", - "default": 0 + "default": 1 } } ], @@ -5701,10 +5986,12 @@ "tags": [ "Opds" ], + "summary": "Returns Series from the Library - Supports Pagination", "parameters": [ { "name": "libraryId", "in": "path", + "description": "", "required": true, "schema": { "type": "integer", @@ -5714,6 +6001,7 @@ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5722,10 +6010,11 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", - "default": 0 + "default": 1 } } ], @@ -5741,10 +6030,12 @@ "tags": [ "Opds" ], + "summary": "Returns Recently Added (Dashboard Feed) - Supports Pagination", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5753,6 +6044,7 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", @@ -5772,10 +6064,12 @@ "tags": [ "Opds" ], + "summary": "Returns More In a Genre (Dashboard Feed) - Supports Pagination", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5784,6 +6078,7 @@ { "name": "genreId", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32" @@ -5792,6 +6087,7 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", @@ -5811,7 +6107,7 @@ "tags": [ "Opds" ], - "summary": "Returns recently updated series. While pagination is avaible, total amount of pages is not due to implementation\ndetails", + "summary": "Get the Recently Updated Series (Dashboard) - Pagination available, total pages will not be filled due to underlying implementation", "parameters": [ { "name": "apiKey", @@ -5845,10 +6141,12 @@ "tags": [ "Opds" ], + "summary": "Get the On Deck (Dashboard) - Supports Pagination", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5857,6 +6155,7 @@ { "name": "pageNumber", "in": "query", + "description": "", "schema": { "type": "integer", "format": "int32", @@ -5930,10 +6229,12 @@ "tags": [ "Opds" ], + "summary": "Returns the items within a Series (Series Detail)", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5942,6 +6243,7 @@ { "name": "seriesId", "in": "path", + "description": "", "required": true, "schema": { "type": "integer", @@ -5961,10 +6263,12 @@ "tags": [ "Opds" ], + "summary": "Returns items for a given Volume", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -5973,6 +6277,7 @@ { "name": "seriesId", "in": "path", + "description": "", "required": true, "schema": { "type": "integer", @@ -5982,6 +6287,7 @@ { "name": "volumeId", "in": "path", + "description": "", "required": true, "schema": { "type": "integer", @@ -6001,10 +6307,12 @@ "tags": [ "Opds" ], + "summary": "Gets items for a given Chapter", "parameters": [ { "name": "apiKey", "in": "path", + "description": "", "required": true, "schema": { "type": "string" @@ -6013,6 +6321,7 @@ { "name": "seriesId", "in": "path", + "description": "", "required": true, "schema": { "type": "integer", @@ -6022,6 +6331,7 @@ { "name": "volumeId", "in": "path", + "description": "", "required": true, "schema": { "type": "integer", @@ -6031,6 +6341,7 @@ { "name": "chapterId", "in": "path", + "description": "", "required": true, "schema": { "type": "integer", @@ -6050,7 +6361,7 @@ "tags": [ "Opds" ], - "summary": "Downloads a file", + "summary": "Downloads a file (user must have download permission)", "parameters": [ { "name": "apiKey", @@ -17078,6 +17389,14 @@ "description": "Rich text Comment", "nullable": true }, + "commentHtml": { + "type": "string", + "nullable": true + }, + "commentPlainText": { + "type": "string", + "nullable": true + }, "chapterTitle": { "type": "string", "description": "Title of the TOC Chapter within Epub (not Chapter Entity)", @@ -17141,6 +17460,71 @@ "additionalProperties": false, "description": "Represents an annotation on a book" }, + "AnnotationFilterStatementDto": { + "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": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer", + "format": "int32" + }, + "value": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "AnnotationSortOptions": { + "type": "object", + "properties": { + "sortField": { + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "format": "int32" + }, + "isAscending": { + "type": "boolean" + } + }, + "additionalProperties": false, + "description": "All Sorting Options for a query related to Annotation Entity" + }, "AppRole": { "type": "object", "properties": { @@ -17503,6 +17887,16 @@ "description": "Rich text Comment", "nullable": true }, + "commentHtml": { + "type": "string", + "description": "The annotation in html format, this is generated by the UI (quill)", + "nullable": true + }, + "commentPlainText": { + "type": "string", + "description": "All html stripped from API.Entities.AppUserAnnotation.CommentHtml, this is done by the backend", + "nullable": true + }, "highlightCount": { "type": "integer", "description": "The number of characters selected", @@ -17538,6 +17932,9 @@ "type": "integer", "format": "int32" }, + "series": { + "$ref": "#/components/schemas/Series" + }, "volumeId": { "type": "integer", "format": "int32" @@ -18565,15 +18962,6 @@ "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." }, - "bookReaderEpubPageCalculationMethod": { - "enum": [ - 0, - 1 - ], - "type": "integer", - "description": "Book Reader Option: Different calculation modes for the page due to a bleed bug that devs cannot reproduce reliably or fix", - "format": "int32" - }, "pdfTheme": { "enum": [ 0, @@ -19078,6 +19466,45 @@ }, "additionalProperties": false }, + "BrowseAnnotationFilterDto": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "Not used - For parity with Series Filter", + "format": "int32" + }, + "name": { + "type": "string", + "description": "Not used - For parity with Series Filter", + "nullable": true + }, + "statements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnnotationFilterStatementDto" + }, + "nullable": true + }, + "combination": { + "enum": [ + 0, + 1 + ], + "type": "integer", + "format": "int32" + }, + "sortOptions": { + "$ref": "#/components/schemas/AnnotationSortOptions" + }, + "limitTo": { + "type": "integer", + "description": "Limit the number of rows returned. Defaults to not applying a limit (aka 0)", + "format": "int32" + } + }, + "additionalProperties": false + }, "BrowseGenreDto": { "required": [ "title" @@ -22152,7 +22579,8 @@ 29, 30, 31, - 32 + 32, + 33 ], "type": "integer", "description": "Represents the field which will dictate the value type and the Extension used for filtering", @@ -22337,11 +22765,6 @@ "type": "integer", "format": "int32" }, - "title": { - "type": "string", - "description": "Hex representation", - "nullable": true - }, "slotNumber": { "type": "integer", "format": "int32" @@ -28831,6 +29254,10 @@ "UserDto": { "type": "object", "properties": { + "id": { + "type": "integer", + "format": "int32" + }, "username": { "type": "string", "nullable": true @@ -29015,7 +29442,6 @@ "allowAutomaticWebtoonReaderDetection", "autoCloseMenu", "backgroundColor", - "bookReaderEpubPageCalculationMethod", "bookReaderFontFamily", "bookReaderFontSize", "bookReaderImmersiveMode", @@ -29193,15 +29619,6 @@ "bookReaderImmersiveMode": { "type": "boolean" }, - "bookReaderEpubPageCalculationMethod": { - "enum": [ - 0, - 1 - ], - "type": "integer", - "description": "Due to a bleeding text bug in the Epub reader with 1/2 column layout, multiple calculation modes are present", - "format": "int32" - }, "pdfTheme": { "enum": [ 0,