From b9c8b05bc8b789b07db60df0588be7aa27aeb43e Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Fri, 27 Feb 2026 09:02:11 +0100 Subject: [PATCH] fix: resolve komga api errors --- komga-openapi.json | 14248 ++++++++++++++++++++ src/app/api/komga/books/[bookId]/route.ts | 5 +- src/lib/services/book.service.ts | 2 +- 3 files changed, 14253 insertions(+), 2 deletions(-) create mode 100644 komga-openapi.json diff --git a/komga-openapi.json b/komga-openapi.json new file mode 100644 index 0000000..050f01a --- /dev/null +++ b/komga-openapi.json @@ -0,0 +1,14248 @@ +{ + "openapi": "3.1.0", + "info": { + "description": "Komga REST API.\n\n## Reference\n\nCheck the API reference:\n- on the [Komga website](https://komga.org/docs/openapi/komga-api)\n- on any running Komga instance at `/swagger-ui.html`\n- on [GitHub](https://raw.githubusercontent.com/gotson/komga/refs/heads/master/komga/docs/openapi.json)\n\n## Authentication\n\nMost endpoints require authentication. Authentication is done using either:\n- Basic Authentication\n- Passing an API Key in the `X-API-Key` header\n\n## Sessions\n\nUpon successful authentication, a session is created, and can be reused.\n\n- By default, a `KOMGA-SESSION` cookie is set via `Set-Cookie` response header. This works well for browsers and clients that can handle cookies.\n- If you specify a header `X-Auth-Token` during authentication, the session ID will be returned via this same header. You can then pass that header again for subsequent requests to reuse the session.\n\nIf you need to set the session cookie later on, you can call `/api/v1/login/set-cookie` with `X-Auth-Token`. The response will contain the `Set-Cookie` header.\n\n## Remember Me\n\nDuring authentication, if a request parameter `remember-me` is passed and set to `true`, the server will also return a `komga-remember-me` cookie. This cookie will be used to login automatically even if the session has expired.\n\n## Logout\n\nYou can explicitly logout an existing session by calling `/api/logout`. This would return a `204`.\n\n## Deprecation\n\nAPI endpoints marked as deprecated will be removed in the next major version.", + "license": { + "name": "MIT", + "url": "https://github.com/gotson/komga/blob/master/LICENSE" + }, + "title": "Komga API", + "version": "1.24.1" + }, + "externalDocs": { + "description": "Komga documentation", + "url": "https://komga.org" + }, + "servers": [ + { + "url": "https://demo.komga.org", + "description": "Demo server" + }, + { + "url": "http://localhost:{port}", + "description": "Local development server", + "variables": { + "port": { + "enum": [ + "8080", + "25600" + ], + "default": "25600" + } + } + } + ], + "security": [ + { + "basicAuth": [] + }, + { + "apiKey": [] + } + ], + "tags": [ + { + "name": "Deprecated" + }, + { + "description": "Manage libraries.", + "name": "Libraries" + }, + { + "description": "Manage series.", + "name": "Series" + }, + { + "description": "Manage posters for series.", + "name": "Series Poster" + }, + { + "description": "Manage books.", + "name": "Books" + }, + { + "description": "Manage posters for books.", + "name": "Book Poster" + }, + { + "name": "Book Pages" + }, + { + "name": "WebPub Manifest" + }, + { + "name": "Import" + }, + { + "description": "Provide font files and CSS for the Epub Reader.", + "name": "Fonts" + }, + { + "description": "Manage duplicate pages. Duplicate pages are identified by a page hash.", + "name": "Duplicate Pages" + }, + { + "description": "Manage collections.", + "name": "Collections" + }, + { + "description": "Manage posters for collections.", + "name": "Collection Poster" + }, + { + "name": "Collection Series" + }, + { + "description": "Manage readlists.", + "name": "Readlists" + }, + { + "description": "Manage posters for readlists.", + "name": "Readlist Poster" + }, + { + "name": "Readlist Books" + }, + { + "description": "Retrieve referential metadata from all items in the Komga server.", + "name": "Referential metadata" + }, + { + "description": "Manage current user.", + "name": "Current user" + }, + { + "description": "Manage users.", + "name": "Users" + }, + { + "description": "Manage API Keys", + "name": "API Keys" + }, + { + "name": "User session" + }, + { + "description": "List registered OAuth2 providers", + "name": "OAuth2" + }, + { + "description": "Sync points are automatically created during a Kobo sync.", + "name": "Sync points" + }, + { + "description": "Claim a freshly installed Komga server.", + "name": "Claim" + }, + { + "description": "Manage server tasks", + "name": "Tasks" + }, + { + "description": "Server events history", + "name": "History" + }, + { + "description": "List files from the host server\u0027s file system", + "name": "File system" + }, + { + "description": "Store and retrieve server settings", + "name": "Server settings" + }, + { + "description": "Retrieve releases information", + "name": "Releases" + }, + { + "description": "Retrieve announcements from the Komga website", + "name": "Announcements" + }, + { + "description": "Manage server", + "name": "Management" + }, + { + "name": "Mihon" + }, + { + "name": "ComicRack" + }, + { + "description": "Store and retrieve global and per-user settings. Those settings are not used by Komga itself, but can be stored for convenience by client applications.", + "name": "Client settings" + } + ], + "paths": { + "/actuator/info": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getActuatorInfo", + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Example": { + "value": "{\n \"git\": {\n \"branch\": \"master\",\n \"commit\": {\n \"id\": \"9be980d\",\n \"time\": \"2025-03-12T03:40:38Z\"\n }\n },\n \"build\": {\n \"artifact\": \"komga\",\n \"name\": \"komga\",\n \"version\": \"1.21.2\",\n \"group\": \"komga\"\n },\n \"java\": {\n \"version\": \"23.0.2\",\n \"vendor\": {\n \"name\": \"Eclipse Adoptium\",\n \"version\": \"Temurin-23.0.2+7\"\n },\n \"runtime\": {\n \"name\": \"OpenJDK Runtime Environment\",\n \"version\": \"23.0.2+7\"\n },\n \"jvm\": {\n \"name\": \"OpenJDK 64-Bit Server VM\",\n \"vendor\": \"Eclipse Adoptium\",\n \"version\": \"23.0.2+7\"\n }\n },\n \"os\": {\n \"name\": \"Linux\",\n \"version\": \"6.8.0-57-generic\",\n \"arch\": \"amd64\"\n }\n}" + } + } + } + }, + "description": "OK" + } + }, + "summary": "Get server information", + "tags": [ + "Management" + ] + }, + "summary": "Get general information about the server" + }, + "/api/logout": { + "get": { + "description": "Invalidates the current session and clean up any remember-me authentication.", + "operationId": "postLogout", + "responses": { + "204": { + "description": "No Content" + } + }, + "summary": "Logout", + "tags": [ + "User session" + ] + }, + "post": { + "description": "Invalidates the current session and clean up any remember-me authentication.", + "operationId": "postLogout_1", + "responses": { + "204": { + "description": "No Content" + } + }, + "summary": "Logout", + "tags": [ + "User session" + ] + }, + "summary": "Logout current session" + }, + "/api/v1/age-ratings": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getAgeRatings", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List age ratings", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/announcements": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getAnnouncements", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonFeedDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Retrieve announcements", + "tags": [ + "Announcements" + ] + }, + "put": { + "description": "Required role: **ADMIN**", + "operationId": "markAnnouncementsRead", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark announcements as read", + "tags": [ + "Announcements" + ] + } + }, + "/api/v1/authors": { + "get": { + "deprecated": true, + "description": "Use GET /api/v2/authors instead. Deprecated since 1.20.0.", + "operationId": "getAuthorsDeprecated", + "parameters": [ + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "default": "" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "series_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthorDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List authors", + "tags": [ + "Deprecated", + "Referential metadata" + ] + } + }, + "/api/v1/authors/names": { + "get": { + "operationId": "getAuthorsNames", + "parameters": [ + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "default": "" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List authors\u0027 names", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/authors/roles": { + "get": { + "operationId": "getAuthorsRoles", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List authors\u0027 roles", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/books": { + "get": { + "deprecated": true, + "description": "Use POST /api/v1/books/list instead. Deprecated since 1.19.0.", + "operationId": "getAllBooksDeprecated", + "parameters": [ + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "media_status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNKNOWN", + "ERROR", + "READY", + "UNSUPPORTED", + "OUTDATED" + ] + } + } + }, + { + "in": "query", + "name": "read_status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNREAD", + "READ", + "IN_PROGRESS" + ] + } + } + }, + { + "in": "query", + "name": "released_after", + "required": false, + "schema": { + "type": "string", + "format": "date" + } + }, + { + "in": "query", + "name": "tag", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageBookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List books", + "tags": [ + "Books", + "Deprecated" + ] + } + }, + "/api/v1/books/duplicates": { + "get": { + "description": "Return books that have the same file hash.\n\nRequired role: **ADMIN**", + "operationId": "getBooksDuplicates", + "parameters": [ + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageBookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List duplicate books", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/import": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "importBooks", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BookImportBatchDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Import books", + "tags": [ + "Import" + ] + } + }, + "/api/v1/books/latest": { + "get": { + "description": "Return newly added or updated books.", + "operationId": "getBooksLatest", + "parameters": [ + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageBookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List latest books", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/list": { + "post": { + "operationId": "getBooks", + "parameters": [ + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BookSearch" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageBookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List books", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/metadata": { + "patch": { + "description": "Set a field to null to unset the metadata. You can omit fields you don\u0027t want to update.\n\nRequired role: **ADMIN**", + "operationId": "updateBookMetadataByBatch", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/BookMetadataUpdateDto" + }, + "description": "A map of book IDs which values are the metadata fields to update. Set a field to null to unset the metadata. You can omit fields you don\u0027t want to update." + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update book metadata in bulk", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/ondeck": { + "get": { + "description": "Return first unread book of series with at least one book read and no books in progress.", + "operationId": "getBooksOnDeck", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageBookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List books on deck", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/thumbnails": { + "put": { + "description": "Required role: **ADMIN**", + "operationId": "booksRegenerateThumbnails", + "parameters": [ + { + "in": "query", + "name": "for_bigger_result_only", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Regenerate books posters", + "tags": [ + "Book Poster" + ] + } + }, + "/api/v1/books/{bookId}": { + "get": { + "operationId": "getBookById", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get book details", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/analyze": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "bookAnalyze", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Analyze book", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/file": { + "delete": { + "description": "Required role: **ADMIN**", + "operationId": "deleteBookFile", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete book file", + "tags": [ + "Books" + ] + }, + "get": { + "description": "Download the book file.\n\nRequired role: **FILE_DOWNLOAD**", + "operationId": "downloadBookFile", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StreamingResponseBody" + } + }, + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/StreamingResponseBody" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Download book file", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/file/*": { + "get": { + "description": "Download the book file.\n\nRequired role: **FILE_DOWNLOAD**", + "operationId": "downloadBookFile_1", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StreamingResponseBody" + } + }, + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/StreamingResponseBody" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Download book file", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/manifest": { + "get": { + "operationId": "getBookWebPubManifest", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/divina+json": { + "schema": { + "$ref": "#/components/schemas/WPPublicationDto" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/WPPublicationDto" + } + }, + "application/webpub+json": { + "schema": { + "$ref": "#/components/schemas/WPPublicationDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get book\u0027s WebPub manifest", + "tags": [ + "WebPub Manifest" + ] + } + }, + "/api/v1/books/{bookId}/manifest/divina": { + "get": { + "operationId": "getBookWebPubManifestDivina", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/divina+json": { + "schema": { + "$ref": "#/components/schemas/WPPublicationDto" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/WPPublicationDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get book\u0027s WebPub manifest (DiViNa)", + "tags": [ + "WebPub Manifest" + ] + } + }, + "/api/v1/books/{bookId}/manifest/epub": { + "get": { + "operationId": "getBookWebPubManifestEpub", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WPPublicationDto" + } + }, + "application/webpub+json": { + "schema": { + "$ref": "#/components/schemas/WPPublicationDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get book\u0027s WebPub manifest (Epub)", + "tags": [ + "WebPub Manifest" + ] + } + }, + "/api/v1/books/{bookId}/manifest/pdf": { + "get": { + "operationId": "getBookWebPubManifestPdf", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WPPublicationDto" + } + }, + "application/webpub+json": { + "schema": { + "$ref": "#/components/schemas/WPPublicationDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get book\u0027s WebPub manifest (PDF)", + "tags": [ + "WebPub Manifest" + ] + } + }, + "/api/v1/books/{bookId}/metadata": { + "patch": { + "description": "Set a field to null to unset the metadata. You can omit fields you don\u0027t want to update.\n\nRequired role: **ADMIN**", + "operationId": "updateBookMetadata", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BookMetadataUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update book metadata", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/metadata/refresh": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "bookRefreshMetadata", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Refresh book metadata", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/next": { + "get": { + "operationId": "getBookSiblingNext", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get next book in series", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/pages": { + "get": { + "operationId": "getBookPages", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PageDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List book pages", + "tags": [ + "Book Pages" + ] + } + }, + "/api/v1/books/{bookId}/pages/{pageNumber}": { + "get": { + "description": "Required role: **PAGE_STREAMING**", + "operationId": "getBookPageByNumber", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "pageNumber", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "Convert the image to the provided format.", + "in": "query", + "name": "convert", + "required": false, + "schema": { + "type": "string", + "enum": [ + "jpeg", + "png" + ] + } + }, + { + "description": "If set to true, pages will start at index 0. If set to false, pages will start at index 1.", + "in": "query", + "name": "zero_based", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "description": "Some very limited server driven content negotiation is handled. If a book is a PDF book, and the Accept header contains \u0027application/pdf\u0027 as a more specific type than other \u0027image/\u0027 types, a raw PDF page will be returned.", + "in": "header", + "name": "Accept", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MediaType" + } + } + }, + { + "in": "query", + "name": "contentNegotiation", + "required": false, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "image/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get book page image", + "tags": [ + "Book Pages" + ] + } + }, + "/api/v1/books/{bookId}/pages/{pageNumber}/raw": { + "get": { + "description": "Returns the book page in raw format, without content negotiation.\n\nRequired role: **PAGE_STREAMING**", + "operationId": "getBookPageRawByNumber", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "pageNumber", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "byte" + } + }, + "application/json": { + "schema": { + "type": "string", + "format": "byte" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get raw book page", + "tags": [ + "Book Pages" + ] + } + }, + "/api/v1/books/{bookId}/pages/{pageNumber}/thumbnail": { + "get": { + "description": "The image is resized to 300px on the largest dimension.", + "operationId": "getBookPageThumbnailByNumber", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "pageNumber", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get book page thumbnail", + "tags": [ + "Book Pages" + ] + } + }, + "/api/v1/books/{bookId}/positions": { + "get": { + "description": "The Positions API is a proposed standard for OPDS 2 and Readium. It is used by the Epub Reader.", + "operationId": "getBookPositions", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/R2Positions" + } + }, + "application/vnd.readium.position-list+json": { + "schema": { + "$ref": "#/components/schemas/R2Positions" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List book\u0027s positions", + "tags": [ + "WebPub Manifest" + ] + } + }, + "/api/v1/books/{bookId}/previous": { + "get": { + "operationId": "getBookSiblingPrevious", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get previous book in series", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/progression": { + "get": { + "description": "The Progression API is a proposed standard for OPDS 2 and Readium. It is used by the Epub Reader.", + "operationId": "getBookProgression", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/R2Progression" + } + }, + "application/vnd.readium.progression+json": { + "schema": { + "$ref": "#/components/schemas/R2Progression" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get book progression", + "tags": [ + "WebPub Manifest" + ] + }, + "put": { + "description": "The Progression API is a proposed standard for OPDS 2 and Readium. It is used by the Epub Reader.", + "operationId": "updateBookProgression", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/R2Progression" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark book progression", + "tags": [ + "WebPub Manifest" + ] + } + }, + "/api/v1/books/{bookId}/read-progress": { + "delete": { + "description": "Mark book as unread", + "operationId": "deleteBookReadProgress", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark book as unread", + "tags": [ + "Books" + ] + }, + "patch": { + "description": "Mark book as read and/or change page progress.", + "operationId": "markBookReadProgress", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReadProgressUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark book\u0027s read progress", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/readlists": { + "get": { + "operationId": "getReadListsByBookId", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReadListDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List book\u0027s readlists", + "tags": [ + "Books" + ] + } + }, + "/api/v1/books/{bookId}/resource/{resource}": { + "get": { + "description": "Return a resource from within an Epub book.", + "operationId": "getBookEpubResource", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "resource", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "byte" + } + }, + "application/json": { + "schema": { + "type": "string", + "format": "byte" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "security": [], + "summary": "Get Epub resource", + "tags": [ + "WebPub Manifest" + ] + } + }, + "/api/v1/books/{bookId}/thumbnail": { + "get": { + "operationId": "getBookThumbnail", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get book\u0027s poster image", + "tags": [ + "Book Poster" + ] + } + }, + "/api/v1/books/{bookId}/thumbnails": { + "get": { + "operationId": "getBookThumbnails", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ThumbnailBookDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List book posters", + "tags": [ + "Book Poster" + ] + }, + "post": { + "description": "Required role: **ADMIN**", + "operationId": "addUserUploadedBookThumbnail", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "selected", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + }, + "required": [ + "file" + ] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThumbnailBookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Add book poster", + "tags": [ + "Book Poster" + ] + } + }, + "/api/v1/books/{bookId}/thumbnails/{thumbnailId}": { + "delete": { + "description": "Only uploaded posters can be deleted.\n\nRequired role: **ADMIN**", + "operationId": "deleteUserUploadedBookThumbnail", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete book poster", + "tags": [ + "Book Poster" + ] + }, + "get": { + "operationId": "getBookThumbnailById", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get book poster image", + "tags": [ + "Book Poster" + ] + } + }, + "/api/v1/books/{bookId}/thumbnails/{thumbnailId}/selected": { + "put": { + "description": "Required role: **ADMIN**", + "operationId": "markBookThumbnailSelected", + "parameters": [ + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark book poster as selected", + "tags": [ + "Book Poster" + ] + } + }, + "/api/v1/claim": { + "get": { + "description": "Check whether this server has already been claimed.", + "operationId": "getClaimStatus", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimStatus" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "security": [], + "summary": "Retrieve claim status", + "tags": [ + "Claim" + ] + }, + "post": { + "description": "Creates an admin user with the provided credentials.", + "operationId": "claimServer", + "parameters": [ + { + "in": "header", + "name": "X-Komga-Email", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Komga-Password", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "security": [], + "summary": "Claim server", + "tags": [ + "Claim" + ] + } + }, + "/api/v1/client-settings/global": { + "delete": { + "description": "Setting key should be a valid lowercase namespace string like \u0027application.domain.key\u0027\n\nRequired role: **ADMIN**", + "operationId": "deleteGlobalSettings", + "requestBody": { + "content": { + "application/json": { + "example": [ + "application.key1", + "application.key2" + ], + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete global settings", + "tags": [ + "Client settings" + ] + }, + "patch": { + "description": "Setting key should be a valid lowercase namespace string like \u0027application.domain.key\u0027\n\nRequired role: **ADMIN**", + "operationId": "saveGlobalSetting", + "requestBody": { + "content": { + "application/json": { + "example": { + "application.key1": { + "value": "a string value", + "allowUnauthorized": true + }, + "application.key2": { + "value": "{\"json\":\"object\"}", + "allowUnauthorized": false + } + }, + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/ClientSettingGlobalUpdateDto" + } + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Save global settings", + "tags": [ + "Client settings" + ] + } + }, + "/api/v1/client-settings/global/list": { + "get": { + "description": "For unauthenticated users, only settings with \u0027allowUnauthorized\u003dtrue\u0027 will be returned.", + "operationId": "getGlobalSettings", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/ClientSettingDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "security": [], + "summary": "Retrieve global client settings", + "tags": [ + "Client settings" + ] + } + }, + "/api/v1/client-settings/user": { + "delete": { + "description": "Setting key should be a valid lowercase namespace string like \u0027application.domain.key\u0027", + "operationId": "deleteUserSettings", + "requestBody": { + "content": { + "application/json": { + "example": [ + "application.key1", + "application.key2" + ], + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete user settings", + "tags": [ + "Client settings" + ] + }, + "patch": { + "description": "Setting key should be a valid lowercase namespace string like \u0027application.domain.key\u0027", + "operationId": "saveUserSetting", + "requestBody": { + "content": { + "application/json": { + "example": { + "application.key1": { + "value": "a string value" + }, + "application.key2": { + "value": "{\"json\":\"object\"}" + } + }, + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/ClientSettingUserUpdateDto" + } + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Save user settings", + "tags": [ + "Client settings" + ] + } + }, + "/api/v1/client-settings/user/list": { + "get": { + "operationId": "getUserSettings", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/ClientSettingDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Retrieve user client settings", + "tags": [ + "Client settings" + ] + } + }, + "/api/v1/collections": { + "get": { + "operationId": "getCollections", + "parameters": [ + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageCollectionDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List collections", + "tags": [ + "Collections" + ] + }, + "post": { + "description": "Required role: **ADMIN**", + "operationId": "createCollection", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CollectionCreationDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CollectionDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Create collection", + "tags": [ + "Collections" + ] + } + }, + "/api/v1/collections/{id}": { + "delete": { + "description": "Required role: **ADMIN**", + "operationId": "deleteCollectionById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete collection", + "tags": [ + "Collections" + ] + }, + "get": { + "operationId": "getCollectionById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CollectionDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get collection details", + "tags": [ + "Collections" + ] + }, + "patch": { + "description": "Required role: **ADMIN**", + "operationId": "updateCollectionById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CollectionUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update collection", + "tags": [ + "Collections" + ] + } + }, + "/api/v1/collections/{id}/series": { + "get": { + "operationId": "getSeriesByCollectionId", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ENDED", + "ONGOING", + "ABANDONED", + "HIATUS" + ] + } + } + }, + { + "in": "query", + "name": "read_status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNREAD", + "READ", + "IN_PROGRESS" + ] + } + } + }, + { + "in": "query", + "name": "publisher", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "language", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "genre", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "tag", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "age_rating", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "release_year", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "deleted", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "complete", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Author criteria in the format: name,role. Multiple author criteria are supported.", + "in": "query", + "name": "author", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageSeriesDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List collection\u0027s series", + "tags": [ + "Collection Series" + ] + } + }, + "/api/v1/collections/{id}/thumbnail": { + "get": { + "operationId": "getCollectionThumbnail", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get collection\u0027s poster image", + "tags": [ + "Collection Poster" + ] + } + }, + "/api/v1/collections/{id}/thumbnails": { + "get": { + "operationId": "getCollectionThumbnails", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ThumbnailSeriesCollectionDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List collection\u0027s posters", + "tags": [ + "Collection Poster" + ] + }, + "post": { + "description": "Required role: **ADMIN**", + "operationId": "addUserUploadedCollectionThumbnail", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "selected", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + }, + "required": [ + "file" + ] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThumbnailSeriesCollectionDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Add collection poster", + "tags": [ + "Collection Poster" + ] + } + }, + "/api/v1/collections/{id}/thumbnails/{thumbnailId}": { + "delete": { + "description": "Required role: **ADMIN**", + "operationId": "deleteUserUploadedCollectionThumbnail", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete collection poster", + "tags": [ + "Collection Poster" + ] + }, + "get": { + "operationId": "getCollectionThumbnailById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get collection poster image", + "tags": [ + "Collection Poster" + ] + } + }, + "/api/v1/collections/{id}/thumbnails/{thumbnailId}/selected": { + "put": { + "description": "Required role: **ADMIN**", + "operationId": "markCollectionThumbnailSelected", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark collection poster as selected", + "tags": [ + "Collection Poster" + ] + } + }, + "/api/v1/filesystem": { + "post": { + "description": "List folders and files from the host server\u0027s file system. If no request body is passed then the root directories are returned.\n\nRequired role: **ADMIN**", + "operationId": "getDirectoryListing", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DirectoryRequestDto" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DirectoryListingDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Directory listing", + "tags": [ + "File system" + ] + } + }, + "/api/v1/fonts/families": { + "get": { + "description": "List all available font families.", + "operationId": "getFonts", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List font families", + "tags": [ + "Fonts" + ] + } + }, + "/api/v1/fonts/resource/{fontFamily}/css": { + "get": { + "description": "Download a CSS file with the @font-face block for the font family. This is used by the Epub Reader to change fonts.", + "operationId": "getFontFamilyAsCss", + "parameters": [ + { + "in": "path", + "name": "fontFamily", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "text/css": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "security": [], + "summary": "Download CSS file", + "tags": [ + "Fonts" + ] + } + }, + "/api/v1/fonts/resource/{fontFamily}/{fontFile}": { + "get": { + "operationId": "getFontFile", + "parameters": [ + { + "in": "path", + "name": "fontFamily", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "fontFile", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "security": [], + "summary": "Download font file", + "tags": [ + "Fonts" + ] + } + }, + "/api/v1/genres": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getGenres", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List genres", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/history": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getHistoricalEvents", + "parameters": [ + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageHistoricalEventDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List historical events", + "tags": [ + "History" + ] + } + }, + "/api/v1/languages": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getLanguages", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List languages", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/libraries": { + "get": { + "description": "The libraries are filtered based on the current user\u0027s permissions", + "operationId": "getLibraries", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LibraryDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List all libraries", + "tags": [ + "Libraries" + ] + }, + "post": { + "description": "Required role: **ADMIN**", + "operationId": "addLibrary", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LibraryCreationDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LibraryDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Create a library", + "tags": [ + "Libraries" + ] + } + }, + "/api/v1/libraries/{libraryId}": { + "delete": { + "description": "Required role: **ADMIN**", + "operationId": "deleteLibraryById", + "parameters": [ + { + "in": "path", + "name": "libraryId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete a library", + "tags": [ + "Libraries" + ] + }, + "get": { + "operationId": "getLibraryById", + "parameters": [ + { + "in": "path", + "name": "libraryId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LibraryDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get details for a single library", + "tags": [ + "Libraries" + ] + }, + "patch": { + "description": "You can omit fields you don\u0027t want to update\n\nRequired role: **ADMIN**", + "operationId": "updateLibraryById", + "parameters": [ + { + "in": "path", + "name": "libraryId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LibraryUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update a library", + "tags": [ + "Libraries" + ] + }, + "put": { + "deprecated": true, + "description": "Use PATCH /api/v1/libraries/{libraryId} instead. Deprecated since 1.3.0.\n\nRequired role: **ADMIN**", + "operationId": "updateLibraryByIdDeprecated", + "parameters": [ + { + "in": "path", + "name": "libraryId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LibraryUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update a library", + "tags": [ + "Deprecated", + "Libraries" + ] + } + }, + "/api/v1/libraries/{libraryId}/analyze": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "libraryAnalyze", + "parameters": [ + { + "in": "path", + "name": "libraryId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Analyze a library", + "tags": [ + "Libraries" + ] + } + }, + "/api/v1/libraries/{libraryId}/empty-trash": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "libraryEmptyTrash", + "parameters": [ + { + "in": "path", + "name": "libraryId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Empty trash for a library", + "tags": [ + "Libraries" + ] + } + }, + "/api/v1/libraries/{libraryId}/metadata/refresh": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "libraryRefreshMetadata", + "parameters": [ + { + "in": "path", + "name": "libraryId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Refresh metadata for a library", + "tags": [ + "Libraries" + ] + } + }, + "/api/v1/libraries/{libraryId}/scan": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "libraryScan", + "parameters": [ + { + "in": "path", + "name": "libraryId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "deep", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Scan a library", + "tags": [ + "Libraries" + ] + } + }, + "/api/v1/login/set-cookie": { + "get": { + "description": "Forcefully return Set-Cookie header, even if the session is contained in the X-Auth-Token header.", + "operationId": "convertHeaderSessionToCookie", + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Set cookie", + "tags": [ + "User session" + ] + } + }, + "/api/v1/oauth2/providers": { + "get": { + "operationId": "getOAuth2Providers", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OAuth2ClientDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "security": [], + "summary": "List registered OAuth2 providers", + "tags": [ + "OAuth2" + ] + } + }, + "/api/v1/page-hashes": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getKnownPageHashes", + "parameters": [ + { + "in": "query", + "name": "action", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "DELETE_AUTO", + "DELETE_MANUAL", + "IGNORE" + ] + } + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PagePageHashKnownDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List known duplicates", + "tags": [ + "Duplicate Pages" + ] + }, + "put": { + "description": "Required role: **ADMIN**", + "operationId": "createOrUpdateKnownPageHash", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageHashCreationDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark duplicate page as known", + "tags": [ + "Duplicate Pages" + ] + } + }, + "/api/v1/page-hashes/unknown": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getUnknownPageHashes", + "parameters": [ + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PagePageHashUnknownDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List unknown duplicates", + "tags": [ + "Duplicate Pages" + ] + } + }, + "/api/v1/page-hashes/unknown/{pageHash}/thumbnail": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getUnknownPageHashThumbnail", + "parameters": [ + { + "in": "path", + "name": "pageHash", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "resize", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get unknown duplicate image thumbnail", + "tags": [ + "Duplicate Pages" + ] + } + }, + "/api/v1/page-hashes/{pageHash}": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getPageHashMatches", + "parameters": [ + { + "in": "path", + "name": "pageHash", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PagePageHashMatchDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List duplicate matches", + "tags": [ + "Duplicate Pages" + ] + } + }, + "/api/v1/page-hashes/{pageHash}/delete-all": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "deleteDuplicatePagesByPageHash", + "parameters": [ + { + "in": "path", + "name": "pageHash", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete all duplicate pages by hash", + "tags": [ + "Duplicate Pages" + ] + } + }, + "/api/v1/page-hashes/{pageHash}/delete-match": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "deleteSingleMatchByPageHash", + "parameters": [ + { + "in": "path", + "name": "pageHash", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageHashMatchDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete specific duplicate page", + "tags": [ + "Duplicate Pages" + ] + } + }, + "/api/v1/page-hashes/{pageHash}/thumbnail": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getKnownPageHashThumbnail", + "parameters": [ + { + "in": "path", + "name": "pageHash", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get known duplicate image thumbnail", + "tags": [ + "Duplicate Pages" + ] + } + }, + "/api/v1/publishers": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getPublishers", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List publishers", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/readlists": { + "get": { + "operationId": "getReadLists", + "parameters": [ + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageReadListDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List readlists", + "tags": [ + "Readlists" + ] + }, + "post": { + "description": "Required role: **ADMIN**", + "operationId": "createReadList", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReadListCreationDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReadListDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Create readlist", + "tags": [ + "Readlists" + ] + } + }, + "/api/v1/readlists/match/comicrack": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "matchComicRackList", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + }, + "required": [ + "file" + ] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReadListRequestMatchDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Match ComicRack list", + "tags": [ + "ComicRack" + ] + } + }, + "/api/v1/readlists/{id}": { + "delete": { + "description": "Required role: **ADMIN**", + "operationId": "deleteReadListById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete readlist", + "tags": [ + "Readlists" + ] + }, + "get": { + "operationId": "getReadListById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReadListDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get readlist details", + "tags": [ + "Readlists" + ] + }, + "patch": { + "description": "Required role: **ADMIN**", + "operationId": "updateReadListById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReadListUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update readlist", + "tags": [ + "Readlists" + ] + } + }, + "/api/v1/readlists/{id}/books": { + "get": { + "operationId": "getBooksByReadListId", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "read_status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNREAD", + "READ", + "IN_PROGRESS" + ] + } + } + }, + { + "in": "query", + "name": "tag", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "media_status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNKNOWN", + "ERROR", + "READY", + "UNSUPPORTED", + "OUTDATED" + ] + } + } + }, + { + "in": "query", + "name": "deleted", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Author criteria in the format: name,role. Multiple author criteria are supported.", + "in": "query", + "name": "author", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageBookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List readlist\u0027s books", + "tags": [ + "Readlist Books" + ] + } + }, + "/api/v1/readlists/{id}/books/{bookId}/next": { + "get": { + "operationId": "getBookSiblingNextInReadList", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get next book in readlist", + "tags": [ + "Readlist Books" + ] + } + }, + "/api/v1/readlists/{id}/books/{bookId}/previous": { + "get": { + "operationId": "getBookSiblingPreviousInReadList", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "bookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get previous book in readlist", + "tags": [ + "Readlist Books" + ] + } + }, + "/api/v1/readlists/{id}/file": { + "get": { + "description": "Download the whole readlist as a ZIP file.\n\nRequired role: **FILE_DOWNLOAD**", + "operationId": "downloadReadListAsZip", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StreamingResponseBody" + } + }, + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/StreamingResponseBody" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Download readlist", + "tags": [ + "Readlists" + ] + } + }, + "/api/v1/readlists/{id}/read-progress/tachiyomi": { + "get": { + "description": "Mihon specific, due to how read progress is handled in Mihon.", + "operationId": "getMihonReadProgressByReadListId", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TachiyomiReadProgressDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get readlist read progress (Mihon)", + "tags": [ + "Mihon" + ] + }, + "put": { + "description": "Mihon specific, due to how read progress is handled in Mihon.", + "operationId": "updateMihonReadProgressByReadListId", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TachiyomiReadProgressUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update readlist read progress (Mihon)", + "tags": [ + "Mihon" + ] + } + }, + "/api/v1/readlists/{id}/thumbnail": { + "get": { + "operationId": "getReadListThumbnail", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get readlist\u0027s poster image", + "tags": [ + "Readlist Poster" + ] + } + }, + "/api/v1/readlists/{id}/thumbnails": { + "get": { + "operationId": "getReadListThumbnails", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ThumbnailReadListDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List readlist\u0027s posters", + "tags": [ + "Readlist Poster" + ] + }, + "post": { + "description": "Required role: **ADMIN**", + "operationId": "addUserUploadedReadListThumbnail", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "selected", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + }, + "required": [ + "file" + ] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThumbnailReadListDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Add readlist poster", + "tags": [ + "Readlist Poster" + ] + } + }, + "/api/v1/readlists/{id}/thumbnails/{thumbnailId}": { + "delete": { + "description": "Required role: **ADMIN**", + "operationId": "deleteUserUploadedReadListThumbnail", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete readlist poster", + "tags": [ + "Readlist Poster" + ] + }, + "get": { + "operationId": "getReadListThumbnailById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get readlist poster image", + "tags": [ + "Readlist Poster" + ] + } + }, + "/api/v1/readlists/{id}/thumbnails/{thumbnailId}/selected": { + "put": { + "description": "Required role: **ADMIN**", + "operationId": "markReadListThumbnailSelected", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark readlist poster as selected", + "tags": [ + "Readlist Poster" + ] + } + }, + "/api/v1/releases": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getReleases", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReleaseDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List releases", + "tags": [ + "Releases" + ] + } + }, + "/api/v1/series": { + "get": { + "deprecated": true, + "description": "Use POST /api/v1/series/list instead. Deprecated since 1.19.0.", + "operationId": "getSeriesDeprecated", + "parameters": [ + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ENDED", + "ONGOING", + "ABANDONED", + "HIATUS" + ] + } + } + }, + { + "in": "query", + "name": "read_status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNREAD", + "READ", + "IN_PROGRESS" + ] + } + } + }, + { + "in": "query", + "name": "publisher", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "language", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "genre", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "tag", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "age_rating", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "release_year", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "sharing_label", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "deleted", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "complete", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "oneshot", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Search by regex criteria, in the form: regex,field. Supported fields are TITLE and TITLE_SORT.", + "in": "query", + "name": "search_regex", + "schema": { + "type": "string" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "description": "Author criteria in the format: name,role. Multiple author criteria are supported.", + "in": "query", + "name": "author", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageSeriesDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List series", + "tags": [ + "Series", + "Deprecated" + ] + } + }, + "/api/v1/series/alphabetical-groups": { + "get": { + "deprecated": true, + "description": "Use POST /api/v1/series/list/alphabetical-groups instead. Deprecated since 1.19.0.", + "operationId": "getSeriesAlphabeticalGroupsDeprecated", + "parameters": [ + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ENDED", + "ONGOING", + "ABANDONED", + "HIATUS" + ] + } + } + }, + { + "in": "query", + "name": "read_status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNREAD", + "READ", + "IN_PROGRESS" + ] + } + } + }, + { + "in": "query", + "name": "publisher", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "language", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "genre", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "tag", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "age_rating", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "release_year", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "sharing_label", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "deleted", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "complete", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "oneshot", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Search by regex criteria, in the form: regex,field. Supported fields are TITLE and TITLE_SORT.", + "in": "query", + "name": "search_regex", + "schema": { + "type": "string" + } + }, + { + "description": "Author criteria in the format: name,role. Multiple author criteria are supported.", + "in": "query", + "name": "author", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupCountDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List series groups", + "tags": [ + "Series", + "Deprecated" + ] + } + }, + "/api/v1/series/latest": { + "get": { + "description": "Return recently added or updated series.", + "operationId": "getSeriesLatest", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "deleted", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "oneshot", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageSeriesDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List latest series", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/list": { + "post": { + "operationId": "getSeries", + "parameters": [ + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesSearch" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageSeriesDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List series", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/list/alphabetical-groups": { + "post": { + "description": "List series grouped by the first character of their sort title.", + "operationId": "getSeriesAlphabeticalGroups", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesSearch" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupCountDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List series groups", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/new": { + "get": { + "description": "Return newly added series.", + "operationId": "getSeriesNew", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "deleted", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "oneshot", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageSeriesDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List new series", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/release-dates": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getSeriesReleaseDates", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List series release dates", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/series/updated": { + "get": { + "description": "Return recently updated series, but not newly added ones.", + "operationId": "getSeriesUpdated", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "deleted", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "oneshot", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageSeriesDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List updated series", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/{seriesId}": { + "get": { + "operationId": "getSeriesById", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get series details", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/{seriesId}/analyze": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "seriesAnalyze", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Analyze series", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/{seriesId}/books": { + "get": { + "deprecated": true, + "description": "Use POST /api/v1/books/list instead. Deprecated since 1.19.0.", + "operationId": "getBooksBySeriesId", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "media_status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNKNOWN", + "ERROR", + "READY", + "UNSUPPORTED", + "OUTDATED" + ] + } + } + }, + { + "in": "query", + "name": "read_status", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNREAD", + "READ", + "IN_PROGRESS" + ] + } + } + }, + { + "in": "query", + "name": "tag", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "deleted", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + }, + { + "description": "Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "description": "Author criteria in the format: name,role. Multiple author criteria are supported.", + "in": "query", + "name": "author", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageBookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List series\u0027 books", + "tags": [ + "Series", + "Deprecated" + ] + } + }, + "/api/v1/series/{seriesId}/collections": { + "get": { + "operationId": "getCollectionsBySeriesId", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CollectionDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List series\u0027 collections", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/{seriesId}/file": { + "delete": { + "description": "Delete all of the series\u0027 books files on disk.\n\nRequired role: **ADMIN**", + "operationId": "deleteSeriesFile", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete series files", + "tags": [ + "Series" + ] + }, + "get": { + "description": "Download the whole series as a ZIP file.\n\nRequired role: **FILE_DOWNLOAD**", + "operationId": "downloadSeriesAsZip", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StreamingResponseBody" + } + }, + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/StreamingResponseBody" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Download series", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/{seriesId}/metadata": { + "patch": { + "description": "Required role: **ADMIN**", + "operationId": "updateSeriesMetadata", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesMetadataUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update series metadata", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/{seriesId}/metadata/refresh": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "seriesRefreshMetadata", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Refresh series metadata", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/{seriesId}/read-progress": { + "delete": { + "description": "Mark all book for series as unread", + "operationId": "markSeriesAsUnread", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark series as unread", + "tags": [ + "Series" + ] + }, + "post": { + "description": "Mark all book for series as read", + "operationId": "markSeriesAsRead", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark series as read", + "tags": [ + "Series" + ] + } + }, + "/api/v1/series/{seriesId}/thumbnail": { + "get": { + "operationId": "getSeriesThumbnail", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get series\u0027 poster image", + "tags": [ + "Series Poster" + ] + } + }, + "/api/v1/series/{seriesId}/thumbnails": { + "get": { + "operationId": "getSeriesThumbnails", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ThumbnailSeriesDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List series posters", + "tags": [ + "Series Poster" + ] + }, + "post": { + "description": "Required role: **ADMIN**", + "operationId": "addUserUploadedSeriesThumbnail", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "selected", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + }, + "required": [ + "file" + ] + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThumbnailSeriesDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Add series poster", + "tags": [ + "Series Poster" + ] + } + }, + "/api/v1/series/{seriesId}/thumbnails/{thumbnailId}": { + "delete": { + "description": "Required role: **ADMIN**", + "operationId": "deleteUserUploadedSeriesThumbnail", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete series poster", + "tags": [ + "Series Poster" + ] + }, + "get": { + "operationId": "getSeriesThumbnailById", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + }, + "default": { + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "default response" + } + }, + "summary": "Get series poster image", + "tags": [ + "Series Poster" + ] + } + }, + "/api/v1/series/{seriesId}/thumbnails/{thumbnailId}/selected": { + "put": { + "description": "Required role: **ADMIN**", + "operationId": "markSeriesThumbnailSelected", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "thumbnailId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Mark series poster as selected", + "tags": [ + "Series Poster" + ] + } + }, + "/api/v1/settings": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getServerSettings", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SettingsDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Retrieve server settings", + "tags": [ + "Server settings" + ] + }, + "patch": { + "description": "You can omit fields you don\u0027t want to update\n\nRequired role: **ADMIN**", + "operationId": "updateServerSettings", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SettingsUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update server settings", + "tags": [ + "Server settings" + ] + } + }, + "/api/v1/sharing-labels": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getSharingLabels", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List sharing labels", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/syncpoints/me": { + "delete": { + "description": "If an API Key ID is passed, deletes only the sync points associated with that API Key. Deleting sync points will allow a Kobo to sync from scratch upon the next sync.", + "operationId": "deleteSyncPointsForCurrentUser", + "parameters": [ + { + "in": "query", + "name": "key_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete all sync points", + "tags": [ + "Sync points" + ] + } + }, + "/api/v1/tags": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getTags", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List tags", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/tags/book": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getBookTags", + "parameters": [ + { + "in": "query", + "name": "series_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "readlist_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List book tags", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/tags/series": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getSeriesTags", + "parameters": [ + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List series tags", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v1/tasks": { + "delete": { + "description": "Cancel all tasks queued\n\nRequired role: **ADMIN**", + "operationId": "emptyTaskQueue", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Clear task queue", + "tags": [ + "Tasks" + ] + } + }, + "/api/v1/transient-books": { + "post": { + "description": "Scan provided folder for transient books.\n\nRequired role: **ADMIN**", + "operationId": "scanTransientBooks", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScanRequestDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TransientBookDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Scan folder for transient books", + "tags": [ + "Import" + ] + } + }, + "/api/v1/transient-books/{id}/analyze": { + "post": { + "description": "Required role: **ADMIN**", + "operationId": "analyzeTransientBook", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransientBookDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Analyze transient book", + "tags": [ + "Import" + ] + } + }, + "/api/v1/transient-books/{id}/pages/{pageNumber}": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getPageByTransientBookId", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "pageNumber", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "byte" + } + }, + "application/json": { + "schema": { + "type": "string", + "format": "byte" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get transient book page", + "tags": [ + "Import" + ] + } + }, + "/api/v2/authors": { + "get": { + "description": "Can be filtered by various criteria", + "operationId": "getAuthors", + "parameters": [ + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "role", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "library_id", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + { + "in": "query", + "name": "collection_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "series_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "readlist_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageAuthorDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List authors", + "tags": [ + "Referential metadata" + ] + } + }, + "/api/v2/series/{seriesId}/read-progress/tachiyomi": { + "get": { + "description": "Mihon specific, due to how read progress is handled in Mihon.", + "operationId": "getMihonReadProgressBySeriesId", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TachiyomiReadProgressV2Dto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Get series read progress (Mihon)", + "tags": [ + "Mihon" + ] + }, + "put": { + "description": "Mihon specific, due to how read progress is handled in Mihon.", + "operationId": "updateMihonReadProgressBySeriesId", + "parameters": [ + { + "in": "path", + "name": "seriesId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TachiyomiReadProgressUpdateV2Dto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update series read progress (Mihon)", + "tags": [ + "Mihon" + ] + } + }, + "/api/v2/users": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getUsers", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "List users", + "tags": [ + "Users" + ] + }, + "post": { + "description": "Required role: **ADMIN**", + "operationId": "addUser", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserCreationDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDto" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Create user", + "tags": [ + "Users" + ] + } + }, + "/api/v2/users/authentication-activity": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getAuthenticationActivity", + "parameters": [ + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer", + "default": 20 + } + }, + { + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageAuthenticationActivityDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Retrieve authentication activity", + "tags": [ + "Users" + ] + } + }, + "/api/v2/users/me": { + "get": { + "operationId": "getCurrentUser", + "parameters": [ + { + "in": "query", + "name": "remember-me", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Retrieve current user", + "tags": [ + "Current user" + ] + } + }, + "/api/v2/users/me/api-keys": { + "get": { + "operationId": "getApiKeysForCurrentUser", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyDto" + } + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Retrieve API keys", + "tags": [ + "API Keys" + ] + }, + "post": { + "operationId": "createApiKeyForCurrentUser", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyRequestDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Create API key", + "tags": [ + "API Keys" + ] + } + }, + "/api/v2/users/me/api-keys/{keyId}": { + "delete": { + "operationId": "deleteApiKeyByKeyId", + "parameters": [ + { + "in": "path", + "name": "keyId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete API key", + "tags": [ + "API Keys" + ] + } + }, + "/api/v2/users/me/authentication-activity": { + "get": { + "operationId": "getAuthenticationActivityForCurrentUser", + "parameters": [ + { + "in": "query", + "name": "unpaged", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Zero-based page index (0..N)", + "in": "query", + "name": "page", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "description": "The size of the page to be returned", + "in": "query", + "name": "size", + "schema": { + "type": "integer", + "default": 20 + } + }, + { + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "in": "query", + "name": "sort", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageAuthenticationActivityDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Retrieve authentication activity for the current user", + "tags": [ + "Current user" + ] + } + }, + "/api/v2/users/me/password": { + "patch": { + "operationId": "updatePasswordForCurrentUser", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update current user\u0027s password", + "tags": [ + "Current user" + ] + } + }, + "/api/v2/users/{id}": { + "delete": { + "description": "Required role: **ADMIN**", + "operationId": "deleteUserById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Delete user", + "tags": [ + "Users" + ] + }, + "patch": { + "description": "Required role: **ADMIN**", + "operationId": "updateUserById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update user", + "tags": [ + "Users" + ] + } + }, + "/api/v2/users/{id}/authentication-activity/latest": { + "get": { + "description": "Required role: **ADMIN**", + "operationId": "getLatestAuthenticationActivityByUserId", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "apikey_id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationActivityDto" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Retrieve latest authentication activity for a user", + "tags": [ + "Users" + ] + } + }, + "/api/v2/users/{id}/password": { + "patch": { + "description": "Required role: **ADMIN**", + "operationId": "updatePasswordByUserId", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponse" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Update user\u0027s password", + "tags": [ + "Users" + ] + } + } + }, + "components": { + "schemas": { + "After": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + }, + { + "type": "object", + "properties": { + "dateTime": { + "type": "string", + "format": "date-time" + } + } + } + ], + "required": [ + "dateTime" + ] + }, + "AgeRating": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "ageRating": { + "oneOf": [ + { + "$ref": "#/components/schemas/GreaterThan" + }, + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/IsNotNullT" + }, + { + "$ref": "#/components/schemas/IsNullT" + }, + { + "$ref": "#/components/schemas/LessThan" + } + ] + } + } + } + ], + "required": [ + "ageRating" + ] + }, + "AgeRestrictionDto": { + "type": "object", + "properties": { + "age": { + "type": "integer", + "format": "int32" + }, + "restriction": { + "type": "string", + "enum": [ + "ALLOW_ONLY", + "EXCLUDE" + ] + } + }, + "required": [ + "age", + "restriction" + ] + }, + "AgeRestrictionUpdateDto": { + "type": "object", + "properties": { + "age": { + "type": "integer", + "format": "int32" + }, + "restriction": { + "type": "string", + "enum": [ + "ALLOW_ONLY", + "EXCLUDE", + "NONE" + ] + } + }, + "required": [ + "age", + "restriction" + ] + }, + "AllOfBook": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "allOf": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AllOfBook" + }, + { + "$ref": "#/components/schemas/AnyOfBook" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/MediaProfile" + }, + { + "$ref": "#/components/schemas/MediaStatus" + }, + { + "$ref": "#/components/schemas/NumberSort" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Poster" + }, + { + "$ref": "#/components/schemas/ReadListId" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesId" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + } + ] + } + } + } + } + ], + "required": [ + "allOf" + ] + }, + "AllOfSeries": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "allOf": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgeRating" + }, + { + "$ref": "#/components/schemas/AllOfSeries" + }, + { + "$ref": "#/components/schemas/AnyOfSeries" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/CollectionId" + }, + { + "$ref": "#/components/schemas/Complete" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/Genre" + }, + { + "$ref": "#/components/schemas/Language" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Publisher" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesStatus" + }, + { + "$ref": "#/components/schemas/SharingLabel" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + }, + { + "$ref": "#/components/schemas/TitleSort" + } + ] + } + } + } + } + ], + "required": [ + "allOf" + ] + }, + "AlternateTitleDto": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "label", + "title" + ] + }, + "AlternateTitleUpdateDto": { + "type": "object", + "properties": { + "label": { + "type": "string", + "minLength": 1 + }, + "title": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "label", + "title" + ] + }, + "AnyOfBook": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "anyOf": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AllOfBook" + }, + { + "$ref": "#/components/schemas/AnyOfBook" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/MediaProfile" + }, + { + "$ref": "#/components/schemas/MediaStatus" + }, + { + "$ref": "#/components/schemas/NumberSort" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Poster" + }, + { + "$ref": "#/components/schemas/ReadListId" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesId" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + } + ] + } + } + } + } + ], + "required": [ + "anyOf" + ] + }, + "AnyOfSeries": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "anyOf": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgeRating" + }, + { + "$ref": "#/components/schemas/AllOfSeries" + }, + { + "$ref": "#/components/schemas/AnyOfSeries" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/CollectionId" + }, + { + "$ref": "#/components/schemas/Complete" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/Genre" + }, + { + "$ref": "#/components/schemas/Language" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Publisher" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesStatus" + }, + { + "$ref": "#/components/schemas/SharingLabel" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + }, + { + "$ref": "#/components/schemas/TitleSort" + } + ] + } + } + } + } + ], + "required": [ + "anyOf" + ] + }, + "ApiKeyDto": { + "type": "object", + "properties": { + "comment": { + "type": "string" + }, + "createdDate": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string" + }, + "key": { + "type": "string" + }, + "lastModifiedDate": { + "type": "string", + "format": "date-time" + }, + "userId": { + "type": "string" + } + }, + "required": [ + "comment", + "createdDate", + "id", + "key", + "lastModifiedDate", + "userId" + ] + }, + "ApiKeyRequestDto": { + "type": "object", + "properties": { + "comment": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "comment" + ] + }, + "AuthenticationActivityDto": { + "type": "object", + "properties": { + "apiKeyComment": { + "type": "string" + }, + "apiKeyId": { + "type": "string" + }, + "dateTime": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string" + }, + "error": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "source": { + "type": "string" + }, + "success": { + "type": "boolean" + }, + "userAgent": { + "type": "string" + }, + "userId": { + "type": "string" + } + }, + "required": [ + "dateTime", + "success" + ] + }, + "Author": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "author": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "author" + ] + }, + "AuthorDto": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "role": { + "type": "string" + } + }, + "required": [ + "name", + "role" + ] + }, + "AuthorUpdateDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "role": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "name", + "role" + ] + }, + "Before": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + }, + { + "type": "object", + "properties": { + "dateTime": { + "type": "string", + "format": "date-time" + } + } + } + ], + "required": [ + "dateTime" + ] + }, + "BeginsWith": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "Book": {}, + "BookDto": { + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time" + }, + "deleted": { + "type": "boolean" + }, + "fileHash": { + "type": "string" + }, + "fileLastModified": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string" + }, + "lastModified": { + "type": "string", + "format": "date-time" + }, + "libraryId": { + "type": "string" + }, + "media": { + "$ref": "#/components/schemas/MediaDto" + }, + "metadata": { + "$ref": "#/components/schemas/BookMetadataDto" + }, + "name": { + "type": "string" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "oneshot": { + "type": "boolean" + }, + "readProgress": { + "$ref": "#/components/schemas/ReadProgressDto" + }, + "seriesId": { + "type": "string" + }, + "seriesTitle": { + "type": "string" + }, + "size": { + "type": "string" + }, + "sizeBytes": { + "type": "integer", + "format": "int64" + }, + "url": { + "type": "string" + } + }, + "required": [ + "created", + "deleted", + "fileHash", + "fileLastModified", + "id", + "lastModified", + "libraryId", + "media", + "metadata", + "name", + "number", + "oneshot", + "seriesId", + "seriesTitle", + "size", + "sizeBytes", + "url" + ] + }, + "BookImportBatchDto": { + "type": "object", + "properties": { + "books": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BookImportDto" + } + }, + "copyMode": { + "type": "string", + "enum": [ + "MOVE", + "COPY", + "HARDLINK" + ] + } + }, + "required": [ + "books", + "copyMode" + ] + }, + "BookImportDto": { + "type": "object", + "properties": { + "destinationName": { + "type": "string" + }, + "seriesId": { + "type": "string" + }, + "sourceFile": { + "type": "string" + }, + "upgradeBookId": { + "type": "string" + } + }, + "required": [ + "seriesId", + "sourceFile" + ] + }, + "BookMetadataAggregationDto": { + "type": "object", + "properties": { + "authors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthorDto" + } + }, + "created": { + "type": "string", + "format": "date-time" + }, + "lastModified": { + "type": "string", + "format": "date-time" + }, + "releaseDate": { + "type": "string", + "format": "date" + }, + "summary": { + "type": "string" + }, + "summaryNumber": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + "required": [ + "authors", + "created", + "lastModified", + "summary", + "summaryNumber", + "tags" + ] + }, + "BookMetadataDto": { + "type": "object", + "properties": { + "authors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthorDto" + } + }, + "authorsLock": { + "type": "boolean" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "isbn": { + "type": "string" + }, + "isbnLock": { + "type": "boolean" + }, + "lastModified": { + "type": "string", + "format": "date-time" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebLinkDto" + } + }, + "linksLock": { + "type": "boolean" + }, + "number": { + "type": "string" + }, + "numberLock": { + "type": "boolean" + }, + "numberSort": { + "type": "number", + "format": "float" + }, + "numberSortLock": { + "type": "boolean" + }, + "releaseDate": { + "type": "string", + "format": "date" + }, + "releaseDateLock": { + "type": "boolean" + }, + "summary": { + "type": "string" + }, + "summaryLock": { + "type": "boolean" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "tagsLock": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "titleLock": { + "type": "boolean" + } + }, + "required": [ + "authors", + "authorsLock", + "created", + "isbn", + "isbnLock", + "lastModified", + "links", + "linksLock", + "number", + "numberLock", + "numberSort", + "numberSortLock", + "releaseDateLock", + "summary", + "summaryLock", + "tags", + "tagsLock", + "title", + "titleLock" + ] + }, + "BookMetadataUpdateDto": { + "type": "object", + "description": "Metadata fields to update. Set a field to null to unset the metadata. You can omit fields you don\u0027t want to update.", + "properties": { + "authors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthorUpdateDto" + } + }, + "authorsLock": { + "type": "boolean" + }, + "isbn": { + "type": "string" + }, + "isbnLock": { + "type": "boolean" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebLinkUpdateDto" + } + }, + "linksLock": { + "type": "boolean" + }, + "number": { + "type": "string" + }, + "numberLock": { + "type": "boolean" + }, + "numberSort": { + "type": "number", + "format": "float" + }, + "numberSortLock": { + "type": "boolean" + }, + "releaseDate": { + "type": "string", + "format": "date" + }, + "releaseDateLock": { + "type": "boolean" + }, + "summary": { + "type": "string" + }, + "summaryLock": { + "type": "boolean" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "tagsLock": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "titleLock": { + "type": "boolean" + } + } + }, + "BookSearch": { + "type": "object", + "properties": { + "condition": { + "oneOf": [ + { + "$ref": "#/components/schemas/AllOfBook" + }, + { + "$ref": "#/components/schemas/AnyOfBook" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/MediaProfile" + }, + { + "$ref": "#/components/schemas/MediaStatus" + }, + { + "$ref": "#/components/schemas/NumberSort" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Poster" + }, + { + "$ref": "#/components/schemas/ReadListId" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesId" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + } + ] + }, + "fullTextSearch": { + "type": "string" + } + } + }, + "Boolean": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "ClaimStatus": { + "type": "object", + "properties": { + "isClaimed": { + "type": "boolean" + } + }, + "required": [ + "isClaimed" + ] + }, + "ClientSettingDto": { + "type": "object", + "properties": { + "allowUnauthorized": { + "type": "boolean" + }, + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + }, + "ClientSettingGlobalUpdateDto": { + "type": "object", + "properties": { + "allowUnauthorized": { + "type": "boolean" + }, + "value": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "allowUnauthorized", + "value" + ] + }, + "ClientSettingUserUpdateDto": { + "type": "object", + "properties": { + "value": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "value" + ] + }, + "CollectionCreationDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "ordered": { + "type": "boolean" + }, + "seriesIds": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + } + }, + "required": [ + "name", + "ordered", + "seriesIds" + ] + }, + "CollectionDto": { + "type": "object", + "properties": { + "createdDate": { + "type": "string", + "format": "date-time" + }, + "filtered": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "lastModifiedDate": { + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "ordered": { + "type": "boolean" + }, + "seriesIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "createdDate", + "filtered", + "id", + "lastModifiedDate", + "name", + "ordered", + "seriesIds" + ] + }, + "CollectionId": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "collectionId": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "collectionId" + ] + }, + "CollectionUpdateDto": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "ordered": { + "type": "boolean" + }, + "seriesIds": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Complete": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "complete": { + "oneOf": [ + { + "$ref": "#/components/schemas/IsFalse" + }, + { + "$ref": "#/components/schemas/IsTrue" + } + ] + } + } + } + ], + "required": [ + "complete" + ] + }, + "Contains": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "Date": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "Deleted": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "deleted": { + "oneOf": [ + { + "$ref": "#/components/schemas/IsFalse" + }, + { + "$ref": "#/components/schemas/IsTrue" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "deleted" + ] + }, + "DirectoryListingDto": { + "type": "object", + "properties": { + "directories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PathDto" + } + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PathDto" + } + }, + "parent": { + "type": "string" + } + }, + "required": [ + "directories", + "files" + ] + }, + "DirectoryRequestDto": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "showFiles": { + "type": "boolean" + } + }, + "required": [ + "path", + "showFiles" + ] + }, + "DoesNotBeginWith": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "DoesNotContain": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "DoesNotEndWith": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "EndsWith": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "EqualityAuthorMatch": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityMediaProfile": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityNullableString": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityPosterMatch": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityReadStatus": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityStatus": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityString": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "Genre": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "genre": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/IsNotNullT" + }, + { + "$ref": "#/components/schemas/IsNullT" + } + ] + } + } + } + ], + "required": [ + "genre" + ] + }, + "GreaterThan": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "type": "object", + "properties": { + "value": {} + } + }, + { + "$ref": "#/components/schemas/NumericFloat" + } + ], + "required": [ + "value" + ] + }, + "GroupCountDto": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + }, + "group": { + "type": "string" + } + }, + "required": [ + "count", + "group" + ] + }, + "HistoricalEventDto": { + "type": "object", + "properties": { + "bookId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "seriesId": { + "type": "string" + }, + "timestamp": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + } + }, + "required": [ + "id", + "properties", + "timestamp", + "type" + ] + }, + "Is": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "type": "object", + "properties": { + "value": {} + } + }, + { + "$ref": "#/components/schemas/EqualityAuthorMatch" + }, + { + "$ref": "#/components/schemas/EqualityString" + }, + { + "$ref": "#/components/schemas/EqualityNullableString" + }, + { + "$ref": "#/components/schemas/EqualityReadStatus" + }, + { + "$ref": "#/components/schemas/EqualityStatus" + }, + { + "$ref": "#/components/schemas/StringOp" + }, + { + "$ref": "#/components/schemas/EqualityMediaProfile" + }, + { + "$ref": "#/components/schemas/NumericFloat" + }, + { + "$ref": "#/components/schemas/EqualityPosterMatch" + } + ], + "required": [ + "value" + ] + }, + "IsFalse": { + "allOf": [ + { + "$ref": "#/components/schemas/Boolean" + } + ] + }, + "IsInTheLast": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + }, + { + "type": "object", + "properties": { + "duration": { + "type": "string" + } + } + } + ], + "required": [ + "duration" + ] + }, + "IsNot": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "type": "object", + "properties": { + "value": {} + } + }, + { + "$ref": "#/components/schemas/EqualityAuthorMatch" + }, + { + "$ref": "#/components/schemas/EqualityString" + }, + { + "$ref": "#/components/schemas/EqualityNullableString" + }, + { + "$ref": "#/components/schemas/EqualityReadStatus" + }, + { + "$ref": "#/components/schemas/EqualityStatus" + }, + { + "$ref": "#/components/schemas/StringOp" + }, + { + "$ref": "#/components/schemas/EqualityMediaProfile" + }, + { + "$ref": "#/components/schemas/NumericFloat" + }, + { + "$ref": "#/components/schemas/EqualityPosterMatch" + } + ], + "required": [ + "value" + ] + }, + "IsNotInTheLast": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + }, + { + "type": "object", + "properties": { + "duration": { + "type": "string" + } + } + } + ], + "required": [ + "duration" + ] + }, + "IsNotNull": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + } + ] + }, + "IsNotNullT": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "$ref": "#/components/schemas/EqualityNullableString" + } + ] + }, + "IsNull": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + } + ] + }, + "IsNullT": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "$ref": "#/components/schemas/EqualityNullableString" + } + ] + }, + "IsTrue": { + "allOf": [ + { + "$ref": "#/components/schemas/Boolean" + } + ] + }, + "ItemDto": { + "type": "object", + "properties": { + "_komga": { + "$ref": "#/components/schemas/KomgaExtensionDto" + }, + "author": { + "$ref": "#/components/schemas/AuthorDto" + }, + "content_html": { + "type": "string" + }, + "date_modified": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "tags" + ] + }, + "JsonFeedDto": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "home_page_url": { + "type": "string" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ItemDto" + } + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "items", + "title", + "version" + ] + }, + "KomgaExtensionDto": { + "type": "object", + "properties": { + "read": { + "type": "boolean" + } + }, + "required": [ + "read" + ] + }, + "Language": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "language": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "language" + ] + }, + "LessThan": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "type": "object", + "properties": { + "value": {} + } + }, + { + "$ref": "#/components/schemas/NumericFloat" + } + ], + "required": [ + "value" + ] + }, + "LibraryCreationDto": { + "type": "object", + "properties": { + "analyzeDimensions": { + "type": "boolean" + }, + "convertToCbz": { + "type": "boolean" + }, + "emptyTrashAfterScan": { + "type": "boolean" + }, + "hashFiles": { + "type": "boolean" + }, + "hashKoreader": { + "type": "boolean" + }, + "hashPages": { + "type": "boolean" + }, + "importBarcodeIsbn": { + "type": "boolean" + }, + "importComicInfoBook": { + "type": "boolean" + }, + "importComicInfoCollection": { + "type": "boolean" + }, + "importComicInfoReadList": { + "type": "boolean" + }, + "importComicInfoSeries": { + "type": "boolean" + }, + "importComicInfoSeriesAppendVolume": { + "type": "boolean" + }, + "importEpubBook": { + "type": "boolean" + }, + "importEpubSeries": { + "type": "boolean" + }, + "importLocalArtwork": { + "type": "boolean" + }, + "importMylarSeries": { + "type": "boolean" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "oneshotsDirectory": { + "type": "string" + }, + "repairExtensions": { + "type": "boolean" + }, + "root": { + "type": "string", + "minLength": 1 + }, + "scanCbx": { + "type": "boolean" + }, + "scanDirectoryExclusions": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "scanEpub": { + "type": "boolean" + }, + "scanForceModifiedTime": { + "type": "boolean" + }, + "scanInterval": { + "type": "string", + "enum": [ + "DISABLED", + "HOURLY", + "EVERY_6H", + "EVERY_12H", + "DAILY", + "WEEKLY" + ] + }, + "scanOnStartup": { + "type": "boolean" + }, + "scanPdf": { + "type": "boolean" + }, + "seriesCover": { + "type": "string", + "enum": [ + "FIRST", + "FIRST_UNREAD_OR_FIRST", + "FIRST_UNREAD_OR_LAST", + "LAST" + ] + } + }, + "required": [ + "analyzeDimensions", + "convertToCbz", + "emptyTrashAfterScan", + "hashFiles", + "hashKoreader", + "hashPages", + "importBarcodeIsbn", + "importComicInfoBook", + "importComicInfoCollection", + "importComicInfoReadList", + "importComicInfoSeries", + "importComicInfoSeriesAppendVolume", + "importEpubBook", + "importEpubSeries", + "importLocalArtwork", + "importMylarSeries", + "name", + "repairExtensions", + "root", + "scanCbx", + "scanDirectoryExclusions", + "scanEpub", + "scanForceModifiedTime", + "scanInterval", + "scanOnStartup", + "scanPdf", + "seriesCover" + ] + }, + "LibraryDto": { + "type": "object", + "properties": { + "analyzeDimensions": { + "type": "boolean" + }, + "convertToCbz": { + "type": "boolean" + }, + "emptyTrashAfterScan": { + "type": "boolean" + }, + "hashFiles": { + "type": "boolean" + }, + "hashKoreader": { + "type": "boolean" + }, + "hashPages": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "importBarcodeIsbn": { + "type": "boolean" + }, + "importComicInfoBook": { + "type": "boolean" + }, + "importComicInfoCollection": { + "type": "boolean" + }, + "importComicInfoReadList": { + "type": "boolean" + }, + "importComicInfoSeries": { + "type": "boolean" + }, + "importComicInfoSeriesAppendVolume": { + "type": "boolean" + }, + "importEpubBook": { + "type": "boolean" + }, + "importEpubSeries": { + "type": "boolean" + }, + "importLocalArtwork": { + "type": "boolean" + }, + "importMylarSeries": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "oneshotsDirectory": { + "type": "string" + }, + "repairExtensions": { + "type": "boolean" + }, + "root": { + "type": "string" + }, + "scanCbx": { + "type": "boolean" + }, + "scanDirectoryExclusions": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "scanEpub": { + "type": "boolean" + }, + "scanForceModifiedTime": { + "type": "boolean" + }, + "scanInterval": { + "type": "string", + "enum": [ + "DISABLED", + "HOURLY", + "EVERY_6H", + "EVERY_12H", + "DAILY", + "WEEKLY" + ] + }, + "scanOnStartup": { + "type": "boolean" + }, + "scanPdf": { + "type": "boolean" + }, + "seriesCover": { + "type": "string", + "enum": [ + "FIRST", + "FIRST_UNREAD_OR_FIRST", + "FIRST_UNREAD_OR_LAST", + "LAST" + ] + }, + "unavailable": { + "type": "boolean" + } + }, + "required": [ + "analyzeDimensions", + "convertToCbz", + "emptyTrashAfterScan", + "hashFiles", + "hashKoreader", + "hashPages", + "id", + "importBarcodeIsbn", + "importComicInfoBook", + "importComicInfoCollection", + "importComicInfoReadList", + "importComicInfoSeries", + "importComicInfoSeriesAppendVolume", + "importEpubBook", + "importEpubSeries", + "importLocalArtwork", + "importMylarSeries", + "name", + "repairExtensions", + "root", + "scanCbx", + "scanDirectoryExclusions", + "scanEpub", + "scanForceModifiedTime", + "scanInterval", + "scanOnStartup", + "scanPdf", + "seriesCover", + "unavailable" + ] + }, + "LibraryId": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "libraryId": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "libraryId" + ] + }, + "LibraryUpdateDto": { + "type": "object", + "description": "Fields to update. You can omit fields you don\u0027t want to update.", + "properties": { + "analyzeDimensions": { + "type": "boolean" + }, + "convertToCbz": { + "type": "boolean" + }, + "emptyTrashAfterScan": { + "type": "boolean" + }, + "hashFiles": { + "type": "boolean" + }, + "hashKoreader": { + "type": "boolean" + }, + "hashPages": { + "type": "boolean" + }, + "importBarcodeIsbn": { + "type": "boolean" + }, + "importComicInfoBook": { + "type": "boolean" + }, + "importComicInfoCollection": { + "type": "boolean" + }, + "importComicInfoReadList": { + "type": "boolean" + }, + "importComicInfoSeries": { + "type": "boolean" + }, + "importComicInfoSeriesAppendVolume": { + "type": "boolean" + }, + "importEpubBook": { + "type": "boolean" + }, + "importEpubSeries": { + "type": "boolean" + }, + "importLocalArtwork": { + "type": "boolean" + }, + "importMylarSeries": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "oneshotsDirectory": { + "type": "string" + }, + "repairExtensions": { + "type": "boolean" + }, + "root": { + "type": "string" + }, + "scanCbx": { + "type": "boolean" + }, + "scanDirectoryExclusions": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "scanEpub": { + "type": "boolean" + }, + "scanForceModifiedTime": { + "type": "boolean" + }, + "scanInterval": { + "type": "string", + "enum": [ + "DISABLED", + "HOURLY", + "EVERY_6H", + "EVERY_12H", + "DAILY", + "WEEKLY" + ] + }, + "scanOnStartup": { + "type": "boolean" + }, + "scanPdf": { + "type": "boolean" + }, + "seriesCover": { + "type": "string", + "enum": [ + "FIRST", + "FIRST_UNREAD_OR_FIRST", + "FIRST_UNREAD_OR_LAST", + "LAST" + ] + } + } + }, + "Location": { + "type": "object", + "properties": { + "fragments": { + "type": "array", + "items": { + "type": "string" + } + }, + "position": { + "type": "integer", + "format": "int32" + }, + "progression": { + "type": "number", + "format": "float" + }, + "totalProgression": { + "type": "number", + "format": "float" + } + }, + "required": [ + "fragments" + ] + }, + "MediaDto": { + "type": "object", + "properties": { + "comment": { + "type": "string" + }, + "epubDivinaCompatible": { + "type": "boolean" + }, + "epubIsKepub": { + "type": "boolean" + }, + "mediaProfile": { + "type": "string" + }, + "mediaType": { + "type": "string" + }, + "pagesCount": { + "type": "integer", + "format": "int32" + }, + "status": { + "type": "string" + } + }, + "required": [ + "comment", + "epubDivinaCompatible", + "epubIsKepub", + "mediaProfile", + "mediaType", + "pagesCount", + "status" + ] + }, + "MediaProfile": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "mediaProfile": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "mediaProfile" + ] + }, + "MediaStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "mediaStatus": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "mediaStatus" + ] + }, + "MediaType": { + "type": "object", + "properties": { + "charset": { + "type": "string" + }, + "concrete": { + "type": "boolean" + }, + "parameters": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "qualityValue": { + "type": "number", + "format": "double" + }, + "subtype": { + "type": "string" + }, + "subtypeSuffix": { + "type": "string" + }, + "type": { + "type": "string" + }, + "wildcardSubtype": { + "type": "boolean" + }, + "wildcardType": { + "type": "boolean" + } + } + }, + "NumberSort": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "numberSort": { + "oneOf": [ + { + "$ref": "#/components/schemas/GreaterThan" + }, + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/LessThan" + } + ] + } + } + } + ], + "required": [ + "numberSort" + ] + }, + "NumericFloat": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "NumericNullableInteger": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "OAuth2ClientDto": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "registrationId": { + "type": "string" + } + }, + "required": [ + "name", + "registrationId" + ] + }, + "OneShot": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "oneShot": { + "oneOf": [ + { + "$ref": "#/components/schemas/IsFalse" + }, + { + "$ref": "#/components/schemas/IsTrue" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "oneShot" + ] + }, + "PageAuthenticationActivityDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticationActivityDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PageAuthorDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthorDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PageBookDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BookDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PageCollectionDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CollectionDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PageDto": { + "type": "object", + "properties": { + "fileName": { + "type": "string" + }, + "height": { + "type": "integer", + "format": "int32" + }, + "mediaType": { + "type": "string" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "string" + }, + "sizeBytes": { + "type": "integer", + "format": "int64" + }, + "width": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "fileName", + "mediaType", + "number", + "size" + ] + }, + "PageHashCreationDto": { + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "DELETE_AUTO", + "DELETE_MANUAL", + "IGNORE" + ] + }, + "hash": { + "type": "string", + "minLength": 1 + }, + "size": { + "type": "integer", + "format": "int64" + } + }, + "required": [ + "action", + "hash" + ] + }, + "PageHashKnownDto": { + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "DELETE_AUTO", + "DELETE_MANUAL", + "IGNORE" + ] + }, + "created": { + "type": "string", + "format": "date-time" + }, + "deleteCount": { + "type": "integer", + "format": "int32" + }, + "hash": { + "type": "string" + }, + "lastModified": { + "type": "string", + "format": "date-time" + }, + "matchCount": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int64" + } + }, + "required": [ + "action", + "created", + "deleteCount", + "hash", + "lastModified", + "matchCount" + ] + }, + "PageHashMatchDto": { + "type": "object", + "properties": { + "bookId": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "fileSize": { + "type": "integer", + "format": "int64" + }, + "mediaType": { + "type": "string" + }, + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "url": { + "type": "string" + } + }, + "required": [ + "bookId", + "fileName", + "fileSize", + "mediaType", + "pageNumber", + "url" + ] + }, + "PageHashUnknownDto": { + "type": "object", + "properties": { + "hash": { + "type": "string" + }, + "matchCount": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int64" + } + }, + "required": [ + "hash", + "matchCount" + ] + }, + "PageHistoricalEventDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HistoricalEventDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PagePageHashKnownDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PageHashKnownDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PagePageHashMatchDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PageHashMatchDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PagePageHashUnknownDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PageHashUnknownDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PageReadListDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReadListDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PageSeriesDto": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SeriesDto" + } + }, + "empty": { + "type": "boolean" + }, + "first": { + "type": "boolean" + }, + "last": { + "type": "boolean" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "numberOfElements": { + "type": "integer", + "format": "int32" + }, + "pageable": { + "$ref": "#/components/schemas/PageableObject" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "totalElements": { + "type": "integer", + "format": "int64" + }, + "totalPages": { + "type": "integer", + "format": "int32" + } + } + }, + "PageableObject": { + "type": "object", + "properties": { + "offset": { + "type": "integer", + "format": "int64" + }, + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "paged": { + "type": "boolean" + }, + "sort": { + "$ref": "#/components/schemas/SortObject" + }, + "unpaged": { + "type": "boolean" + } + } + }, + "PasswordUpdateDto": { + "type": "object", + "properties": { + "password": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "password" + ] + }, + "PathDto": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ] + }, + "Poster": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "poster": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "poster" + ] + }, + "Publisher": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "publisher": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "publisher" + ] + }, + "R2Device": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "R2Locator": { + "type": "object", + "properties": { + "href": { + "type": "string" + }, + "koboSpan": { + "type": "string" + }, + "locations": { + "$ref": "#/components/schemas/Location" + }, + "text": { + "$ref": "#/components/schemas/Text" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "href", + "type" + ] + }, + "R2Positions": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/R2Locator" + } + }, + "total": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "positions", + "total" + ] + }, + "R2Progression": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/R2Device" + }, + "locator": { + "$ref": "#/components/schemas/R2Locator" + }, + "modified": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "device", + "locator", + "modified" + ] + }, + "ReadListCreationDto": { + "type": "object", + "properties": { + "bookIds": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "ordered": { + "type": "boolean" + }, + "summary": { + "type": "string" + } + }, + "required": [ + "bookIds", + "name", + "ordered", + "summary" + ] + }, + "ReadListDto": { + "type": "object", + "properties": { + "bookIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "createdDate": { + "type": "string", + "format": "date-time" + }, + "filtered": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "lastModifiedDate": { + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "ordered": { + "type": "boolean" + }, + "summary": { + "type": "string" + } + }, + "required": [ + "bookIds", + "createdDate", + "filtered", + "id", + "lastModifiedDate", + "name", + "ordered", + "summary" + ] + }, + "ReadListId": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "readListId": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "readListId" + ] + }, + "ReadListMatchDto": { + "type": "object", + "properties": { + "errorCode": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "errorCode", + "name" + ] + }, + "ReadListRequestBookDto": { + "type": "object", + "properties": { + "number": { + "type": "string" + }, + "series": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + "required": [ + "number", + "series" + ] + }, + "ReadListRequestBookMatchBookDto": { + "type": "object", + "properties": { + "bookId": { + "type": "string" + }, + "number": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "bookId", + "number", + "title" + ] + }, + "ReadListRequestBookMatchDto": { + "type": "object", + "properties": { + "books": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReadListRequestBookMatchBookDto" + } + }, + "series": { + "$ref": "#/components/schemas/ReadListRequestBookMatchSeriesDto" + } + }, + "required": [ + "books", + "series" + ] + }, + "ReadListRequestBookMatchSeriesDto": { + "type": "object", + "properties": { + "releaseDate": { + "type": "string", + "format": "date" + }, + "seriesId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "seriesId", + "title" + ] + }, + "ReadListRequestBookMatchesDto": { + "type": "object", + "properties": { + "matches": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReadListRequestBookMatchDto" + } + }, + "request": { + "$ref": "#/components/schemas/ReadListRequestBookDto" + } + }, + "required": [ + "matches", + "request" + ] + }, + "ReadListRequestMatchDto": { + "type": "object", + "properties": { + "errorCode": { + "type": "string" + }, + "readListMatch": { + "$ref": "#/components/schemas/ReadListMatchDto" + }, + "requests": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReadListRequestBookMatchesDto" + } + } + }, + "required": [ + "errorCode", + "readListMatch", + "requests" + ] + }, + "ReadListUpdateDto": { + "type": "object", + "properties": { + "bookIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "ordered": { + "type": "boolean" + }, + "summary": { + "type": "string" + } + } + }, + "ReadProgressDto": { + "type": "object", + "properties": { + "completed": { + "type": "boolean" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "deviceId": { + "type": "string" + }, + "deviceName": { + "type": "string" + }, + "lastModified": { + "type": "string", + "format": "date-time" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "readDate": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "completed", + "created", + "deviceId", + "deviceName", + "lastModified", + "page", + "readDate" + ] + }, + "ReadProgressUpdateDto": { + "type": "object", + "description": "page can be omitted if completed is set to true. completed can be omitted, and will be set accordingly depending on the page passed and the total number of pages in the book.", + "properties": { + "completed": { + "type": "boolean" + }, + "page": { + "type": "integer", + "format": "int32" + } + } + }, + "ReadStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "readStatus": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "readStatus" + ] + }, + "ReleaseDate": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "releaseDate": { + "oneOf": [ + { + "$ref": "#/components/schemas/After" + }, + { + "$ref": "#/components/schemas/Before" + }, + { + "$ref": "#/components/schemas/IsInTheLast" + }, + { + "$ref": "#/components/schemas/IsNotInTheLast" + }, + { + "$ref": "#/components/schemas/IsNotNull" + }, + { + "$ref": "#/components/schemas/IsNull" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "releaseDate" + ] + }, + "ReleaseDto": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "latest": { + "type": "boolean" + }, + "preRelease": { + "type": "boolean" + }, + "releaseDate": { + "type": "string", + "format": "date-time" + }, + "url": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "description", + "latest", + "preRelease", + "releaseDate", + "url", + "version" + ] + }, + "ScanRequestDto": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": [ + "path" + ] + }, + "Series": {}, + "SeriesDto": { + "type": "object", + "properties": { + "booksCount": { + "type": "integer", + "format": "int32" + }, + "booksInProgressCount": { + "type": "integer", + "format": "int32" + }, + "booksMetadata": { + "$ref": "#/components/schemas/BookMetadataAggregationDto" + }, + "booksReadCount": { + "type": "integer", + "format": "int32" + }, + "booksUnreadCount": { + "type": "integer", + "format": "int32" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "deleted": { + "type": "boolean" + }, + "fileLastModified": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string" + }, + "lastModified": { + "type": "string", + "format": "date-time" + }, + "libraryId": { + "type": "string" + }, + "metadata": { + "$ref": "#/components/schemas/SeriesMetadataDto" + }, + "name": { + "type": "string" + }, + "oneshot": { + "type": "boolean" + }, + "url": { + "type": "string" + } + }, + "required": [ + "booksCount", + "booksInProgressCount", + "booksMetadata", + "booksReadCount", + "booksUnreadCount", + "created", + "deleted", + "fileLastModified", + "id", + "lastModified", + "libraryId", + "metadata", + "name", + "oneshot", + "url" + ] + }, + "SeriesId": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "seriesId": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "seriesId" + ] + }, + "SeriesMetadataDto": { + "type": "object", + "properties": { + "ageRating": { + "type": "integer", + "format": "int32" + }, + "ageRatingLock": { + "type": "boolean" + }, + "alternateTitles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AlternateTitleDto" + } + }, + "alternateTitlesLock": { + "type": "boolean" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "genres": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "genresLock": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "languageLock": { + "type": "boolean" + }, + "lastModified": { + "type": "string", + "format": "date-time" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebLinkDto" + } + }, + "linksLock": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "publisherLock": { + "type": "boolean" + }, + "readingDirection": { + "type": "string" + }, + "readingDirectionLock": { + "type": "boolean" + }, + "sharingLabels": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "sharingLabelsLock": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "statusLock": { + "type": "boolean" + }, + "summary": { + "type": "string" + }, + "summaryLock": { + "type": "boolean" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "tagsLock": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "titleLock": { + "type": "boolean" + }, + "titleSort": { + "type": "string" + }, + "titleSortLock": { + "type": "boolean" + }, + "totalBookCount": { + "type": "integer", + "format": "int32" + }, + "totalBookCountLock": { + "type": "boolean" + } + }, + "required": [ + "ageRatingLock", + "alternateTitles", + "alternateTitlesLock", + "created", + "genres", + "genresLock", + "language", + "languageLock", + "lastModified", + "links", + "linksLock", + "publisher", + "publisherLock", + "readingDirection", + "readingDirectionLock", + "sharingLabels", + "sharingLabelsLock", + "status", + "statusLock", + "summary", + "summaryLock", + "tags", + "tagsLock", + "title", + "titleLock", + "titleSort", + "titleSortLock", + "totalBookCountLock" + ] + }, + "SeriesMetadataUpdateDto": { + "type": "object", + "description": "Metadata fields to update. Set a field to null to unset the metadata. You can omit fields you don\u0027t want to update.", + "properties": { + "ageRating": { + "type": "integer", + "format": "int32" + }, + "ageRatingLock": { + "type": "boolean" + }, + "alternateTitles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AlternateTitleUpdateDto" + } + }, + "alternateTitlesLock": { + "type": "boolean" + }, + "genres": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "genresLock": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "languageLock": { + "type": "boolean" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebLinkUpdateDto" + } + }, + "linksLock": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "publisherLock": { + "type": "boolean" + }, + "readingDirection": { + "type": "string", + "enum": [ + "LEFT_TO_RIGHT", + "RIGHT_TO_LEFT", + "VERTICAL", + "WEBTOON" + ] + }, + "readingDirectionLock": { + "type": "boolean" + }, + "sharingLabels": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "sharingLabelsLock": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "ENDED", + "ONGOING", + "ABANDONED", + "HIATUS" + ] + }, + "statusLock": { + "type": "boolean" + }, + "summary": { + "type": "string" + }, + "summaryLock": { + "type": "boolean" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "tagsLock": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "titleLock": { + "type": "boolean" + }, + "titleSort": { + "type": "string" + }, + "titleSortLock": { + "type": "boolean" + }, + "totalBookCount": { + "type": "integer", + "format": "int32" + }, + "totalBookCountLock": { + "type": "boolean" + } + } + }, + "SeriesSearch": { + "type": "object", + "properties": { + "condition": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgeRating" + }, + { + "$ref": "#/components/schemas/AllOfSeries" + }, + { + "$ref": "#/components/schemas/AnyOfSeries" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/CollectionId" + }, + { + "$ref": "#/components/schemas/Complete" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/Genre" + }, + { + "$ref": "#/components/schemas/Language" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Publisher" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesStatus" + }, + { + "$ref": "#/components/schemas/SharingLabel" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + }, + { + "$ref": "#/components/schemas/TitleSort" + } + ] + }, + "fullTextSearch": { + "type": "string" + } + } + }, + "SeriesStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "seriesStatus": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "seriesStatus" + ] + }, + "SettingMultiSourceInteger": { + "type": "object", + "properties": { + "configurationSource": { + "type": "integer", + "format": "int32" + }, + "databaseSource": { + "type": "integer", + "format": "int32" + }, + "effectiveValue": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "configurationSource", + "databaseSource", + "effectiveValue" + ] + }, + "SettingMultiSourceString": { + "type": "object", + "properties": { + "configurationSource": { + "type": "string" + }, + "databaseSource": { + "type": "string" + }, + "effectiveValue": { + "type": "string" + } + }, + "required": [ + "configurationSource", + "databaseSource", + "effectiveValue" + ] + }, + "SettingsDto": { + "type": "object", + "properties": { + "deleteEmptyCollections": { + "type": "boolean" + }, + "deleteEmptyReadLists": { + "type": "boolean" + }, + "kepubifyPath": { + "$ref": "#/components/schemas/SettingMultiSourceString" + }, + "koboPort": { + "type": "integer", + "format": "int32" + }, + "koboProxy": { + "type": "boolean" + }, + "rememberMeDurationDays": { + "type": "integer", + "format": "int64" + }, + "serverContextPath": { + "$ref": "#/components/schemas/SettingMultiSourceString" + }, + "serverPort": { + "$ref": "#/components/schemas/SettingMultiSourceInteger" + }, + "taskPoolSize": { + "type": "integer", + "format": "int32" + }, + "thumbnailSize": { + "type": "string", + "enum": [ + "DEFAULT", + "MEDIUM", + "LARGE", + "XLARGE" + ] + } + }, + "required": [ + "deleteEmptyCollections", + "deleteEmptyReadLists", + "kepubifyPath", + "koboProxy", + "rememberMeDurationDays", + "serverContextPath", + "serverPort", + "taskPoolSize", + "thumbnailSize" + ] + }, + "SettingsUpdateDto": { + "type": "object", + "description": "Fields to update. You can omit fields you don\u0027t want to update.", + "properties": { + "deleteEmptyCollections": { + "type": "boolean" + }, + "deleteEmptyReadLists": { + "type": "boolean" + }, + "kepubifyPath": { + "type": "string", + "deprecated": true, + "description": "Will be removed in a future version" + }, + "koboPort": { + "type": "integer", + "format": "int32", + "maximum": 65535 + }, + "koboProxy": { + "type": "boolean" + }, + "rememberMeDurationDays": { + "type": "integer", + "format": "int64" + }, + "renewRememberMeKey": { + "type": "boolean" + }, + "serverContextPath": { + "type": "string", + "pattern": "^/[\\w-/]*[a-zA-Z0-9]$" + }, + "serverPort": { + "type": "integer", + "format": "int32", + "maximum": 65535 + }, + "taskPoolSize": { + "type": "integer", + "format": "int32" + }, + "thumbnailSize": { + "type": "string", + "enum": [ + "DEFAULT", + "MEDIUM", + "LARGE", + "XLARGE" + ] + } + } + }, + "SharedLibrariesUpdateDto": { + "type": "object", + "properties": { + "all": { + "type": "boolean" + }, + "libraryIds": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + "required": [ + "all", + "libraryIds" + ] + }, + "SharingLabel": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "sharingLabel": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/IsNotNullT" + }, + { + "$ref": "#/components/schemas/IsNullT" + } + ] + } + } + } + ], + "required": [ + "sharingLabel" + ] + }, + "SortObject": { + "type": "object", + "properties": { + "empty": { + "type": "boolean" + }, + "sorted": { + "type": "boolean" + }, + "unsorted": { + "type": "boolean" + } + } + }, + "StreamingResponseBody": {}, + "StringOp": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "TachiyomiReadProgressDto": { + "type": "object", + "properties": { + "booksCount": { + "type": "integer", + "format": "int32" + }, + "booksInProgressCount": { + "type": "integer", + "format": "int32" + }, + "booksReadCount": { + "type": "integer", + "format": "int32" + }, + "booksUnreadCount": { + "type": "integer", + "format": "int32" + }, + "lastReadContinuousIndex": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "booksCount", + "booksInProgressCount", + "booksReadCount", + "booksUnreadCount", + "lastReadContinuousIndex" + ] + }, + "TachiyomiReadProgressUpdateDto": { + "type": "object", + "properties": { + "lastBookRead": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "lastBookRead" + ] + }, + "TachiyomiReadProgressUpdateV2Dto": { + "type": "object", + "properties": { + "lastBookNumberSortRead": { + "type": "number", + "format": "float" + } + }, + "required": [ + "lastBookNumberSortRead" + ] + }, + "TachiyomiReadProgressV2Dto": { + "type": "object", + "properties": { + "booksCount": { + "type": "integer", + "format": "int32" + }, + "booksInProgressCount": { + "type": "integer", + "format": "int32" + }, + "booksReadCount": { + "type": "integer", + "format": "int32" + }, + "booksUnreadCount": { + "type": "integer", + "format": "int32" + }, + "lastReadContinuousNumberSort": { + "type": "number", + "format": "float" + }, + "maxNumberSort": { + "type": "number", + "format": "float" + } + }, + "required": [ + "booksCount", + "booksInProgressCount", + "booksReadCount", + "booksUnreadCount", + "lastReadContinuousNumberSort", + "maxNumberSort" + ] + }, + "Tag": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "tag": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/IsNotNullT" + }, + { + "$ref": "#/components/schemas/IsNullT" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "tag" + ] + }, + "Text": { + "type": "object", + "properties": { + "after": { + "type": "string" + }, + "before": { + "type": "string" + }, + "highlight": { + "type": "string" + } + } + }, + "ThumbnailBookDto": { + "type": "object", + "properties": { + "bookId": { + "type": "string" + }, + "fileSize": { + "type": "integer", + "format": "int64" + }, + "height": { + "type": "integer", + "format": "int32" + }, + "id": { + "type": "string" + }, + "mediaType": { + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "width": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "bookId", + "fileSize", + "height", + "id", + "mediaType", + "selected", + "type", + "width" + ] + }, + "ThumbnailReadListDto": { + "type": "object", + "properties": { + "fileSize": { + "type": "integer", + "format": "int64" + }, + "height": { + "type": "integer", + "format": "int32" + }, + "id": { + "type": "string" + }, + "mediaType": { + "type": "string" + }, + "readListId": { + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "width": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "fileSize", + "height", + "id", + "mediaType", + "readListId", + "selected", + "type", + "width" + ] + }, + "ThumbnailSeriesCollectionDto": { + "type": "object", + "properties": { + "collectionId": { + "type": "string" + }, + "fileSize": { + "type": "integer", + "format": "int64" + }, + "height": { + "type": "integer", + "format": "int32" + }, + "id": { + "type": "string" + }, + "mediaType": { + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "width": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "collectionId", + "fileSize", + "height", + "id", + "mediaType", + "selected", + "type", + "width" + ] + }, + "ThumbnailSeriesDto": { + "type": "object", + "properties": { + "fileSize": { + "type": "integer", + "format": "int64" + }, + "height": { + "type": "integer", + "format": "int32" + }, + "id": { + "type": "string" + }, + "mediaType": { + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "seriesId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "width": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "fileSize", + "height", + "id", + "mediaType", + "selected", + "seriesId", + "type", + "width" + ] + }, + "Title": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "title": { + "oneOf": [ + { + "$ref": "#/components/schemas/BeginsWith" + }, + { + "$ref": "#/components/schemas/Contains" + }, + { + "$ref": "#/components/schemas/DoesNotBeginWith" + }, + { + "$ref": "#/components/schemas/DoesNotContain" + }, + { + "$ref": "#/components/schemas/DoesNotEndWith" + }, + { + "$ref": "#/components/schemas/EndsWith" + }, + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "title" + ] + }, + "TitleSort": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "titleSort": { + "oneOf": [ + { + "$ref": "#/components/schemas/BeginsWith" + }, + { + "$ref": "#/components/schemas/Contains" + }, + { + "$ref": "#/components/schemas/DoesNotBeginWith" + }, + { + "$ref": "#/components/schemas/DoesNotContain" + }, + { + "$ref": "#/components/schemas/DoesNotEndWith" + }, + { + "$ref": "#/components/schemas/EndsWith" + }, + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "titleSort" + ] + }, + "TransientBookDto": { + "type": "object", + "properties": { + "comment": { + "type": "string" + }, + "fileLastModified": { + "type": "string", + "format": "date-time" + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + }, + "id": { + "type": "string" + }, + "mediaType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "number": { + "type": "number", + "format": "float" + }, + "pages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PageDto" + } + }, + "seriesId": { + "type": "string" + }, + "size": { + "type": "string" + }, + "sizeBytes": { + "type": "integer", + "format": "int64" + }, + "status": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "comment", + "fileLastModified", + "files", + "id", + "mediaType", + "name", + "pages", + "size", + "sizeBytes", + "status", + "url" + ] + }, + "UserCreationDto": { + "type": "object", + "properties": { + "ageRestriction": { + "$ref": "#/components/schemas/AgeRestrictionUpdateDto" + }, + "email": { + "type": "string" + }, + "labelsAllow": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "labelsExclude": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "password": { + "type": "string", + "minLength": 1 + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "sharedLibraries": { + "$ref": "#/components/schemas/SharedLibrariesUpdateDto" + } + }, + "required": [ + "email", + "password", + "roles" + ] + }, + "UserDto": { + "type": "object", + "properties": { + "ageRestriction": { + "$ref": "#/components/schemas/AgeRestrictionDto" + }, + "email": { + "type": "string" + }, + "id": { + "type": "string" + }, + "labelsAllow": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "labelsExclude": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "roles": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "sharedAllLibraries": { + "type": "boolean" + }, + "sharedLibrariesIds": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + "required": [ + "email", + "id", + "labelsAllow", + "labelsExclude", + "roles", + "sharedAllLibraries", + "sharedLibrariesIds" + ] + }, + "UserUpdateDto": { + "type": "object", + "properties": { + "ageRestriction": { + "$ref": "#/components/schemas/AgeRestrictionUpdateDto" + }, + "labelsAllow": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "labelsExclude": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "roles": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "sharedLibraries": { + "$ref": "#/components/schemas/SharedLibrariesUpdateDto" + } + } + }, + "ValidationErrorResponse": { + "type": "object", + "properties": { + "violations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Violation" + } + } + }, + "required": [ + "violations" + ] + }, + "Violation": { + "type": "object", + "properties": { + "fieldName": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "WPBelongsToDto": { + "type": "object", + "properties": { + "collection": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPContributorDto" + } + }, + "series": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPContributorDto" + } + } + }, + "required": [ + "collection", + "series" + ] + }, + "WPContributorDto": { + "type": "object", + "properties": { + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPLinkDto" + } + }, + "name": { + "type": "string" + }, + "position": { + "type": "number", + "format": "float" + } + }, + "required": [ + "links", + "name" + ] + }, + "WPLinkDto": { + "type": "object", + "properties": { + "height": { + "type": "integer", + "format": "int32" + }, + "href": { + "type": "string" + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": {} + } + }, + "rel": { + "type": "string" + }, + "templated": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "width": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "properties" + ] + }, + "WPMetadataDto": { + "type": "object", + "properties": { + "artist": { + "type": "array", + "items": { + "type": "string" + } + }, + "author": { + "type": "array", + "items": { + "type": "string" + } + }, + "belongsTo": { + "$ref": "#/components/schemas/WPBelongsToDto" + }, + "colorist": { + "type": "array", + "items": { + "type": "string" + } + }, + "conformsTo": { + "type": "string" + }, + "contributor": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": { + "type": "string" + }, + "editor": { + "type": "array", + "items": { + "type": "string" + } + }, + "identifier": { + "type": "string" + }, + "illustrator": { + "type": "array", + "items": { + "type": "string" + } + }, + "inker": { + "type": "array", + "items": { + "type": "string" + } + }, + "language": { + "type": "string" + }, + "letterer": { + "type": "array", + "items": { + "type": "string" + } + }, + "modified": { + "type": "string", + "format": "date-time" + }, + "numberOfPages": { + "type": "integer", + "format": "int32" + }, + "penciler": { + "type": "array", + "items": { + "type": "string" + } + }, + "published": { + "type": "string", + "format": "date" + }, + "publisher": { + "type": "array", + "items": { + "type": "string" + } + }, + "readingProgression": { + "type": "string", + "enum": [ + "rtl", + "ltr", + "ttb", + "btt", + "auto" + ] + }, + "rendition": { + "type": "object", + "additionalProperties": {} + }, + "sortAs": { + "type": "string" + }, + "subject": { + "type": "array", + "items": { + "type": "string" + } + }, + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" + }, + "translator": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string" + } + }, + "required": [ + "artist", + "author", + "colorist", + "contributor", + "editor", + "illustrator", + "inker", + "letterer", + "penciler", + "publisher", + "rendition", + "subject", + "title", + "translator" + ] + }, + "WPPublicationDto": { + "type": "object", + "properties": { + "context": { + "type": "string" + }, + "images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPLinkDto" + } + }, + "landmarks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPLinkDto" + } + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPLinkDto" + } + }, + "metadata": { + "$ref": "#/components/schemas/WPMetadataDto" + }, + "pageList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPLinkDto" + } + }, + "readingOrder": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPLinkDto" + } + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPLinkDto" + } + }, + "toc": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WPLinkDto" + } + } + }, + "required": [ + "images", + "landmarks", + "links", + "metadata", + "pageList", + "readingOrder", + "resources", + "toc" + ] + }, + "WebLinkDto": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "label", + "url" + ] + }, + "WebLinkUpdateDto": { + "type": "object", + "properties": { + "label": { + "type": "string", + "minLength": 1 + }, + "url": { + "type": "string" + } + }, + "required": [ + "label" + ] + } + }, + "securitySchemes": { + "apiKey": { + "in": "header", + "name": "X-API-Key", + "type": "apiKey" + }, + "basicAuth": { + "scheme": "basic", + "type": "http" + } + } + }, + "x-tagGroups": [ + { + "name": "Deprecation", + "tags": [ + "Deprecated" + ] + }, + { + "name": "Libraries", + "tags": [ + "Libraries" + ] + }, + { + "name": "Series", + "tags": [ + "Series", + "Series Poster" + ] + }, + { + "name": "Books", + "tags": [ + "Books", + "Book Pages", + "Book Poster", + "Import", + "Duplicate Pages", + "WebPub Manifest", + "Fonts" + ] + }, + { + "name": "Collections", + "tags": [ + "Collections", + "Collection Series", + "Collection Poster" + ] + }, + { + "name": "Readlists", + "tags": [ + "Readlists", + "Readlist Books", + "Readlist Poster" + ] + }, + { + "name": "Referential", + "tags": [ + "Referential metadata" + ] + }, + { + "name": "Users", + "tags": [ + "Current user", + "Users", + "API Keys", + "User session", + "OAuth2", + "Sync points" + ] + }, + { + "name": "Server", + "tags": [ + "Claim", + "Server settings", + "Tasks", + "History", + "File system", + "Releases", + "Announcements", + "Management" + ] + }, + { + "name": "Integrations", + "tags": [ + "Client settings", + "Mihon", + "ComicRack" + ] + } + ] +} \ No newline at end of file diff --git a/src/app/api/komga/books/[bookId]/route.ts b/src/app/api/komga/books/[bookId]/route.ts index 6f3c6ee..d38644b 100644 --- a/src/app/api/komga/books/[bookId]/route.ts +++ b/src/app/api/komga/books/[bookId]/route.ts @@ -21,6 +21,9 @@ export async function GET( } catch (error) { logger.error({ err: error }, "API Books - Erreur:"); if (error instanceof AppError) { + const isNotFound = + error.code === ERROR_CODES.BOOK.NOT_FOUND || + (error.code === ERROR_CODES.KOMGA.HTTP_ERROR && (error as any).params?.status === 404); return NextResponse.json( { error: { @@ -29,7 +32,7 @@ export async function GET( message: getErrorMessage(error.code), } as AppError, }, - { status: 500 } + { status: isNotFound ? 404 : 500 } ); } return NextResponse.json( diff --git a/src/lib/services/book.service.ts b/src/lib/services/book.service.ts index 01ec23e..712bcb5 100644 --- a/src/lib/services/book.service.ts +++ b/src/lib/services/book.service.ts @@ -33,7 +33,7 @@ export class BookService extends BaseApiService { if ( error instanceof AppError && error.code === ERROR_CODES.KOMGA.HTTP_ERROR && - (error as any).context?.status === 404 + (error as any).params?.status === 404 ) { return null; }