Kavita Library API
The Library API from Kavita — 25 operation(s) for library.
The Library API from Kavita — 25 operation(s) for library.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/kavita:kavita-library-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Kavita Library API
description: Kavita provides a set of APIs authenticated via an Auth Key passed in the `x-api-key` header. Generate an Auth Key under User Settings → Manage Auth Keys, paste it into the Authorize panel, and all Try It requests will include it. Assume all fields of a payload are required unless marked optional. Built against v0.9.1.15
license:
name: GPL-3.0
url: https://github.com/Kareadita/Kavita/blob/develop/LICENSE
version: 0.9.1.15
servers:
- url: '{protocol}://{hostpath}'
variables:
protocol:
default: http
enum:
- http
- https
hostpath:
default: localhost:5000
security:
- AuthKey: []
tags:
- name: Library
paths:
/api/Library/create:
post:
tags:
- Library
summary: Creates a new Library.
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateLibraryDto'
text/json:
schema:
$ref: '#/components/schemas/UpdateLibraryDto'
application/*+json:
schema:
$ref: '#/components/schemas/UpdateLibraryDto'
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/LibraryDto'
application/json:
schema:
$ref: '#/components/schemas/LibraryDto'
text/json:
schema:
$ref: '#/components/schemas/LibraryDto'
operationId: postApiLibraryCreate
x-operation-id-source: derived
/api/Library/list:
get:
tags:
- Library
summary: Returns a list of directories for a given path.
parameters:
- name: path
in: query
description: ''
schema:
type: string
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/DirectoryDto'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/DirectoryDto'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/DirectoryDto'
operationId: getApiLibraryList
x-operation-id-source: derived
/api/Library/has-files-at-root:
post:
tags:
- Library
summary: For each root, checks if there are any supported files at root to warn the user…
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CheckForFilesInFolderRootsDto'
text/json:
schema:
$ref: '#/components/schemas/CheckForFilesInFolderRootsDto'
application/*+json:
schema:
$ref: '#/components/schemas/CheckForFilesInFolderRootsDto'
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
type: string
application/json:
schema:
type: array
items:
type: string
text/json:
schema:
type: array
items:
type: string
operationId: postApiLibraryHasFilesAtRoot
x-operation-id-source: derived
/api/Library:
get:
tags:
- Library
summary: Return a specific library
description: If the user is not an admin, only id, type, and name will be returned (Kavita.Models.DTOs.LiteLibraryDto)
parameters:
- name: libraryId
in: query
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/LibraryDto'
application/json:
schema:
$ref: '#/components/schemas/LibraryDto'
text/json:
schema:
$ref: '#/components/schemas/LibraryDto'
operationId: getApiLibrary
x-operation-id-source: derived
/api/Library/libraries:
get:
tags:
- Library
summary: Return all libraries in the Server
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryDto'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryDto'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryDto'
operationId: getApiLibraryLibraries
x-operation-id-source: derived
/api/Library/user-libraries:
get:
tags:
- Library
summary: Gets libraries for the given user that you also have access to
parameters:
- name: userId
in: query
description: ''
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryDto'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryDto'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryDto'
operationId: getApiLibraryUserLibraries
x-operation-id-source: derived
/api/Library/jump-bar:
get:
tags:
- Library
summary: For a given library, generate the jump bar information
parameters:
- name: libraryId
in: query
description: ''
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/JumpKeyDto'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/JumpKeyDto'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/JumpKeyDto'
operationId: getApiLibraryJumpBar
x-operation-id-source: derived
/api/Library/grant-access:
post:
tags:
- Library
summary: Grants a user account access to a Library
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateLibraryForUserDto'
text/json:
schema:
$ref: '#/components/schemas/UpdateLibraryForUserDto'
application/*+json:
schema:
$ref: '#/components/schemas/UpdateLibraryForUserDto'
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/MemberDto'
application/json:
schema:
$ref: '#/components/schemas/MemberDto'
text/json:
schema:
$ref: '#/components/schemas/MemberDto'
operationId: postApiLibraryGrantAccess
x-operation-id-source: derived
/api/Library/scan:
post:
tags:
- Library
summary: Scans a given library for file changes
parameters:
- name: libraryId
in: query
description: ''
schema:
type: integer
format: int32
- name: force
in: query
description: If true, will ignore any optimizations to avoid file I/O and will treat similar to a first scan
schema:
type: boolean
default: false
responses:
'200':
description: OK
operationId: postApiLibraryScan
x-operation-id-source: derived
/api/Library/folder-watch/retry:
post:
tags:
- Library
summary: Watches the library again after its watcher missed a change or kept failing
parameters:
- name: libraryId
in: query
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/FolderWatchStatusDto'
application/json:
schema:
$ref: '#/components/schemas/FolderWatchStatusDto'
text/json:
schema:
$ref: '#/components/schemas/FolderWatchStatusDto'
operationId: postApiLibraryFolderWatchRetry
x-operation-id-source: derived
/api/Library/watch-status:
get:
tags:
- Library
summary: How the library notices changes now and why
parameters:
- name: libraryId
in: query
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/FolderWatchStatusDto'
application/json:
schema:
$ref: '#/components/schemas/FolderWatchStatusDto'
text/json:
schema:
$ref: '#/components/schemas/FolderWatchStatusDto'
operationId: getApiLibraryWatchStatus
x-operation-id-source: derived
/api/Library/scan-multiple:
post:
tags:
- Library
summary: Enqueues a bunch of library scans
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BulkActionDto'
text/json:
schema:
$ref: '#/components/schemas/BulkActionDto'
application/*+json:
schema:
$ref: '#/components/schemas/BulkActionDto'
responses:
'200':
description: OK
operationId: postApiLibraryScanMultiple
x-operation-id-source: derived
/api/Library/scan-all:
post:
tags:
- Library
summary: Scans a given library for file changes.
parameters:
- name: force
in: query
description: If true, will ignore any optimizations to avoid file I/O and will treat similar to a first scan
schema:
type: boolean
default: false
responses:
'200':
description: OK
operationId: postApiLibraryScanAll
x-operation-id-source: derived
/api/Library/refresh-metadata:
post:
tags:
- Library
parameters:
- name: libraryId
in: query
schema:
type: integer
format: int32
- name: force
in: query
schema:
type: boolean
default: true
- name: forceColorscape
in: query
schema:
type: boolean
default: true
responses:
'200':
description: OK
summary: Create api library refresh metadata
x-summary-source: derived
operationId: postApiLibraryRefreshMetadata
x-operation-id-source: derived
/api/Library/refresh-metadata-multiple:
post:
tags:
- Library
parameters:
- name: forceColorscape
in: query
schema:
type: boolean
default: true
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BulkActionDto'
text/json:
schema:
$ref: '#/components/schemas/BulkActionDto'
application/*+json:
schema:
$ref: '#/components/schemas/BulkActionDto'
responses:
'200':
description: OK
summary: Create api library refresh metadata multiple
x-summary-source: derived
operationId: postApiLibraryRefreshMetadataMultiple
x-operation-id-source: derived
/api/Library/copy-settings-from:
post:
tags:
- Library
summary: Copy the library settings (adv tab + optional type) to a set of other libraries
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/CopySettingsFromLibraryDto'
text/json:
schema:
$ref: '#/components/schemas/CopySettingsFromLibraryDto'
application/*+json:
schema:
$ref: '#/components/schemas/CopySettingsFromLibraryDto'
responses:
'200':
description: OK
operationId: postApiLibraryCopySettingsFrom
x-operation-id-source: derived
/api/Library/scan-folder:
post:
tags:
- Library
summary: Given a valid path, will invoke either a Scan Series or Scan Library.
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ScanFolderDto'
text/json:
schema:
$ref: '#/components/schemas/ScanFolderDto'
application/*+json:
schema:
$ref: '#/components/schemas/ScanFolderDto'
responses:
'200':
description: OK
operationId: postApiLibraryScanFolder
x-operation-id-source: derived
/api/Library/delete:
delete:
tags:
- Library
summary: Deletes the library and all series within it
description: This does not touch any files
parameters:
- name: libraryId
in: query
description: ''
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
type: boolean
application/json:
schema:
type: boolean
text/json:
schema:
type: boolean
operationId: deleteApiLibraryDelete
x-operation-id-source: derived
/api/Library/delete-multiple:
delete:
tags:
- Library
summary: Deletes multiple libraries and all series within it
description: This does not touch any files
requestBody:
description: ''
content:
application/json:
schema:
type: array
items:
type: integer
format: int32
text/json:
schema:
type: array
items:
type: integer
format: int32
application/*+json:
schema:
type: array
items:
type: integer
format: int32
responses:
'200':
description: OK
operationId: deleteApiLibraryDeleteMultiple
x-operation-id-source: derived
/api/Library/name-exists:
get:
tags:
- Library
summary: Checks if the library name exists or not
parameters:
- name: name
in: query
description: If empty or null, will return true as that is invalid
schema:
type: string
responses:
'200':
description: OK
content:
text/plain:
schema:
type: boolean
application/json:
schema:
type: boolean
text/json:
schema:
type: boolean
operationId: getApiLibraryNameExists
x-operation-id-source: derived
/api/Library/update:
post:
tags:
- Library
summary: Updates an existing Library with new name, folders, and/or type
description: Any folder or type change will invoke a scan.
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateLibraryDto'
text/json:
schema:
$ref: '#/components/schemas/UpdateLibraryDto'
application/*+json:
schema:
$ref: '#/components/schemas/UpdateLibraryDto'
responses:
'200':
description: OK
operationId: postApiLibraryUpdate
x-operation-id-source: derived
/api/Library/metadata-providers:
get:
tags:
- Library
summary: Return all Kavita.Models.Entities.Enums.MetadataProviders that are supported by…
parameters:
- name: libraryType
in: query
description: ''
schema:
$ref: '#/components/schemas/LibraryType'
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/MetadataProvider'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/MetadataProvider'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/MetadataProvider'
operationId: getApiLibraryMetadataProviders
x-operation-id-source: derived
/api/Library/metadata-enabled-libraries:
get:
tags:
- Library
summary: Kavita.Models.Entities.Enums.LibraryType with KavitaPlus metadata support
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryType'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryType'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryType'
operationId: getApiLibraryMetadataEnabledLibraries
x-operation-id-source: derived
/api/Library/scrobble-enabled-libraries:
get:
tags:
- Library
summary: Kavita.Models.Entities.Enums.LibraryType with KavitaPlus scrobble support
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryType'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryType'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/LibraryType'
operationId: getApiLibraryScrobbleEnabledLibraries
x-operation-id-source: derived
/api/Library/type:
get:
tags:
- Library
summary: Returns the type of the underlying library
parameters:
- name: libraryId
in: query
description: ''
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/LibraryType'
application/json:
schema:
$ref: '#/components/schemas/LibraryType'
text/json:
schema:
$ref: '#/components/schemas/LibraryType'
operationId: getApiLibraryType
x-operation-id-source: derived
components:
schemas:
LibraryDto:
type: object
properties:
id:
type: integer
format: int32
name:
type:
- string
- 'null'
type:
$ref: '#/components/schemas/LibraryType'
lastScanned:
type: string
format: date-time
coverImage:
type:
- string
- 'null'
folderWatchMode:
$ref: '#/components/schemas/FolderWatchMode'
includeInDashboard:
type: boolean
includeInRecommended:
type: boolean
manageCollections:
type: boolean
manageReadingLists:
type: boolean
includeInSearch:
type: boolean
allowScrobbling:
type: boolean
folders:
type:
- array
- 'null'
items:
type: string
collapseSeriesRelationships:
type: boolean
libraryFileTypes:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/FileTypeGroup'
excludePatterns:
type:
- array
- 'null'
items:
type: string
allowMetadataMatching:
type: boolean
enableMetadata:
type: boolean
removePrefixForSortName:
type: boolean
inheritWebLinksFromFirstChapter:
type: boolean
defaultLanguage:
type:
- string
- 'null'
metadataProvider:
$ref: '#/components/schemas/MetadataProvider'
additionalProperties: false
LibraryType:
enum:
- 0
- 1
- 2
- 3
- 4
- 5
type: integer
description: 'Members:
- `0` — Manga
- `1` — Comic (Flexible) (Comic)
- `2` — Book
- `3` — Image
- `4` — Light Novel (LightNovel)
- `5` — Comic (ComicVine)'
format: int32
x-enum-varnames:
- Manga
- Comic
- Book
- Image
- LightNovel
- ComicVine
x-enum-descriptions:
- Manga
- Comic (Flexible)
- Book
- Image
- Light Novel
- Comic
AgeRating:
enum:
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- -1
type: integer
description: 'Members:
- `0` — Unknown
- `1` — Rating Pending (RatingPending)
- `2` — Early Childhood (EarlyChildhood)
- `3` — Everyone
- `4` — G
- `5` — Everyone 10+ (Everyone10Plus)
- `6` — PG
- `7` — Kids to Adults (KidsToAdults)
- `8` — Teen
- `9` — MA15+ (Mature15Plus)
- `10` — Mature 17+ (Mature17Plus)
- `11` — M (Mature)
- `12` — R18+ (R18Plus)
- `13` — Adults Only 18+ (AdultsOnly)
- `14` — X18+ (X18Plus)
- `-1` — Not Applicable (NotApplicable)'
format: int32
x-enum-varnames:
- Unknown
- RatingPending
- EarlyChildhood
- Everyone
- G
- Everyone10Plus
- PG
- KidsToAdults
- Teen
- Mature15Plus
- Mature17Plus
- Mature
- R18Plus
- AdultsOnly
- X18Plus
- NotApplicable
x-enum-descriptions:
- Unknown
- Rating Pending
- Early Childhood
- Everyone
- G
- Everyone 10+
- PG
- Kids to Adults
- Teen
- MA15+
- Mature 17+
- M
- R18+
- Adults Only 18+
- X18+
- Not Applicable
FolderWatchFallbackReason:
enum:
- 0
- 1
type: integer
description: 'Members:
- `0` — Errors
- `1` — MissedChange'
format: int32
x-enum-varnames:
- Errors
- MissedChange
x-enum-descriptions:
- Errors
- MissedChange
UpdateLibraryDto:
required:
- allowMetadataMatching
- allowScrobbling
- enableMetadata
- excludePatterns
- fileGroupTypes
- folders
- id
- includeInDashboard
- includeInSearch
- inheritWebLinksFromFirstChapter
- manageCollections
- manageReadingLists
- name
- removePrefixForSortName
- type
type: object
properties:
id:
type: integer
format: int32
name:
minLength: 1
type: string
type:
$ref: '#/components/schemas/LibraryType'
folders:
type: array
items:
type: string
folderWatchMode:
$ref: '#/components/schemas/FolderWatchMode'
includeInDashboard:
type: boolean
includeInSearch:
type: boolean
manageCollections:
type: boolean
manageReadingLists:
type: boolean
allowScrobbling:
type: boolean
allowMetadataMatching:
type: boolean
enableMetadata:
type: boolean
removePrefixForSortName:
type: boolean
inheritWebLinksFromFirstChapter:
type: boolean
defaultLanguage:
type:
- string
- 'null'
metadataProvider:
$ref: '#/components/schemas/MetadataProvider'
fileGroupTypes:
type: array
items:
$ref: '#/components/schemas/FileTypeGroup'
excludePatterns:
type: array
items:
type: string
additionalProperties: false
FolderWatchMethod:
enum:
- 0
- 1
- 2
- 3
- 4
type: integer
description: 'Members:
- `0` — Off
- `1` — File Watcher (FileWatcher)
- `2` — Polling
- `3` — Trial
- `4` — Failed'
format: int32
x-enum-varnames:
- 'Off'
- FileWatcher
- Polling
- Trial
- Failed
x-enum-descriptions:
- 'Off'
- File Watcher
- Polling
- Trial
- Failed
BulkActionDto:
type: object
properties:
ids:
type:
- array
- 'null'
items:
type: integer
format: int32
force:
type:
- boolean
- 'null'
additionalProperties: false
FolderWatchMode:
enum:
- 0
- 1
- 2
- 3
type: integer
description: 'Members:
- `0` — Off
- `1` — Automatic
- `2` — File Watcher (FileWatcher)
- `3` — Polling'
format: int32
x-enum-varnames:
- 'Off'
- Automatic
- FileWatcher
- Polling
x-enum-descriptions:
- 'Off'
- Automatic
- File Watcher
- Polling
CopySettingsFromLibraryDto:
type: object
properties:
sourceLibraryId:
type: integer
format: int32
targetLibraryIds:
type:
- array
- 'null'
items:
type: integer
format: int32
includeType:
type: boolean
additionalProperties: false
MemberDto:
type: object
properties:
id:
type: integer
format: int32
username:
type:
- string
- 'null'
email:
type:
- string
- 'null'
isPending:
type: boolean
ageRestriction:
$ref: '#/components/schemas/AgeRestrictionDto'
created:
type: string
format: date-time
createdUtc:
type: string
format: date-time
lastActive:
type: string
format: date-time
lastActiveUtc:
type: string
format: date-time
libraries:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/LibraryDto'
roles:
type:
- array
- 'null'
items:
type: string
identityProvider:
$ref: '#/components/schemas/IdentityProvider'
additionalProperties: false
MetadataProvider:
enum:
- 2
- 3
- 4
type: integer
description: 'Members:
- `2` — Hardcover
- `3` — Mangabaka
- `4` — ComicBookRoundup'
format: int32
x-enum-varnames:
- Hardcover
- Mangabaka
- ComicBookRoundup
x-enum-descriptions:
- Hardcover
- Mangabaka
- ComicBookRoundup
AgeRestrictionDto:
required:
- ageRating
- includeUnknowns
type: object
properties:
ageRating:
$ref: '#/components/schemas/AgeRating'
includeUnknowns:
type: boolean
additionalProperties: false
CheckForFilesInFolderRootsDto:
type: object
properties:
roots:
type:
- array
- 'null'
items:
type: string
additionalProperties: false
ScanFolderDto:
type: object
properties:
apiKey:
type:
- string
- 'null'
folderPath:
type:
- string
- 'null'
abortOnNoSeriesMatch:
type: boolean
additionalProperties: false
IdentityProvider:
enum:
- 0
- 1
type: integer
description: 'Members:
- `0` — Kavita
- `1` — OpenID Connect (OpenIdConnect)'
format: int32
x-enum-varnames:
- Kavita
- OpenIdConnect
x-enum-descriptions:
- Kavita
- OpenID Connect
DirectoryDto:
type: object
properties:
name:
type:
- string
- 'null'
fullPath:
type:
- string
- 'null'
additionalProperties: false
FolderWatchStatusDto:
type: object
properties:
mode:
$ref: '#/components/schemas/FolderWatchMode'
method:
$ref: '#/components/schemas/FolderWatchMethod'
reason:
$ref: '#/components/schemas/FolderWatchFallbackReason'
folder:
type:
- string
- 'null'
successes:
type: integer
format: int32
successesNeeded:
type: integer
format: int32
needsLibraryScan:
type: boolean
enableFolderWatching:
type: boolean
additionalProperties: false
JumpKeyDto:
type: object
properties:
size:
type: integer
format: int32
key:
type:
- string
- 'null'
title:
type:
- string
- 'null'
additionalProperties: false
FileTypeGroup:
enum:
- 1
- 2
- 3
- 4
type: integer
description: 'Members:
- `1` — Archive
- `2` — EPub (Epub)
- `3` — Pdf
- `4` — Images'
format: int32
x-enum-varnames:
- Archive
- Epub
- Pdf
- Images
x-enum-descriptions:
- Archive
- EPub
- Pdf
- Images
UpdateLibraryForUserDto:
required:
- selectedLibraries
- username
type: object
properties:
username:
type:
- string
- 'null'
selectedLibraries:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/LibraryDto'
additionalProperties: false
securitySchemes:
AuthKey:
type: apiKey
description: Auth Key authentication. Enter your Auth key from your user settings
name: x-api-key
in: header