Kavita Search API
Responsible for the Search interface from the UI
Responsible for the Search interface from the UI
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-search-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 Search 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: Search
description: Responsible for the Search interface from the UI
paths:
/api/Search/series-for-mangafile:
get:
tags:
- Search
summary: Returns the series for the MangaFile id.
parameters:
- name: mangaFileId
in: query
description: ''
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/SeriesDto'
application/json:
schema:
$ref: '#/components/schemas/SeriesDto'
text/json:
schema:
$ref: '#/components/schemas/SeriesDto'
operationId: getApiSearchSeriesForMangafile
x-operation-id-source: derived
/api/Search/series-for-chapter:
get:
tags:
- Search
summary: Returns the series for the Chapter id.
parameters:
- name: chapterId
in: query
description: ''
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/SeriesDto'
application/json:
schema:
$ref: '#/components/schemas/SeriesDto'
text/json:
schema:
$ref: '#/components/schemas/SeriesDto'
operationId: getApiSearchSeriesForChapter
x-operation-id-source: derived
/api/Search/search:
get:
tags:
- Search
summary: Searches against different entities in the system against a query string
parameters:
- name: queryString
in: query
description: ''
schema:
type: string
- name: includeChapterAndFiles
in: query
description: Include Chapter and Filenames in the entities. This can slow down the search on larger systems
schema:
type: boolean
default: true
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/SearchResultGroupDto'
application/json:
schema:
$ref: '#/components/schemas/SearchResultGroupDto'
text/json:
schema:
$ref: '#/components/schemas/SearchResultGroupDto'
operationId: getApiSearchSearch
x-operation-id-source: derived
/api/Search/chapters-by-series:
get:
tags:
- Search
summary: Returns all chapters for a given series with localized titles.
parameters:
- name: seriesId
in: query
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/ChapterDto'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ChapterDto'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/ChapterDto'
operationId: getApiSearchChaptersBySeries
x-operation-id-source: derived
components:
schemas:
MangaFormat:
enum:
- 0
- 1
- 2
- 3
- 4
type: integer
description: 'Members:
- `0` — Image
- `1` — Archive
- `2` — Unknown
- `3` — EPUB (Epub)
- `4` — PDF (Pdf)'
format: int32
x-enum-varnames:
- Image
- Archive
- Unknown
- Epub
- Pdf
x-enum-descriptions:
- Image
- Archive
- Unknown
- EPUB
- PDF
ReadingListProvider:
enum:
- 0
- 1
- 2
type: integer
description: 'Members:
- `0` — File (None)
- `1` — File
- `2` — Url'
format: int32
x-enum-varnames:
- None
- File
- Url
x-enum-descriptions:
- File
- File
- Url
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
BookmarkSearchResultDto:
type: object
properties:
libraryId:
type: integer
format: int32
volumeId:
type: integer
format: int32
seriesId:
type: integer
format: int32
chapterId:
type: integer
format: int32
seriesName:
type:
- string
- 'null'
localizedSeriesName:
type:
- string
- 'null'
additionalProperties: false
SearchResultGroupDto:
type: object
properties:
libraries:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/LibraryDto'
series:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/SearchResultDto'
collections:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/AppUserCollectionDto'
readingLists:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ReadingListDto'
persons:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
genres:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/GenreTagDto'
tags:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/TagDto'
files:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/MangaFileDto'
chapters:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ChapterDto'
bookmarks:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/BookmarkSearchResultDto'
annotations:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/AnnotationDto'
additionalProperties: false
AppUserCollectionDto:
type: object
properties:
id:
type: integer
format: int32
title:
type:
- string
- 'null'
summary:
type:
- string
- 'null'
promoted:
type: boolean
ageRating:
$ref: '#/components/schemas/AgeRating'
coverImage:
type:
- string
- 'null'
primaryColor:
type:
- string
- 'null'
secondaryColor:
type:
- string
- 'null'
coverImageLocked:
type: boolean
itemCount:
type: integer
format: int32
owner:
type:
- string
- 'null'
lastSyncUtc:
type: string
format: date-time
source:
$ref: '#/components/schemas/ScrobbleProvider'
sourceUrl:
type:
- string
- 'null'
totalSourceCount:
type: integer
format: int32
missingSeriesFromSource:
type:
- string
- 'null'
additionalProperties: false
ScrobbleProvider:
enum:
- 0
- 1
- 2
- 4
- 5
- 6
type: integer
description: 'Members:
- `0` — Kavita
- `1` — AniList
- `2` — Mal
- `4` — Cbr
- `5` — Hardcover
- `6` — MangaBaka'
format: int32
x-enum-varnames:
- Kavita
- AniList
- Mal
- Cbr
- Hardcover
- MangaBaka
x-enum-descriptions:
- Kavita
- AniList
- Mal
- Cbr
- Hardcover
- MangaBaka
SeriesDto:
type: object
properties:
id:
type: integer
format: int32
name:
type:
- string
- 'null'
originalName:
type:
- string
- 'null'
localizedName:
type:
- string
- 'null'
sortName:
type:
- string
- 'null'
pages:
type: integer
format: int32
coverImageLocked:
type: boolean
lastChapterAdded:
type: string
format: date-time
lastChapterAddedUtc:
type: string
format: date-time
userRating:
type: number
format: float
hasUserRated:
type: boolean
totalReads:
type: integer
format: int32
pagesRead:
type: integer
format: int32
latestReadDate:
type: string
format: date-time
format:
$ref: '#/components/schemas/MangaFormat'
created:
type: string
format: date-time
sortNameLocked:
type: boolean
localizedNameLocked:
type: boolean
nameLocked:
type: boolean
wordCount:
type: integer
format: int64
libraryId:
type: integer
format: int32
libraryName:
type:
- string
- 'null'
minHoursToRead:
type: integer
format: int32
maxHoursToRead:
type: integer
format: int32
avgHoursToRead:
type: number
format: float
folderPath:
type:
- string
- 'null'
lowestFolderPath:
type:
- string
- 'null'
lastFolderScanned:
type: string
format: date-time
dontMatch:
type: boolean
isBlacklisted:
type: boolean
isStandAlone:
type: boolean
metadataProviderOverride:
$ref: '#/components/schemas/MetadataProvider'
coverImage:
type:
- string
- 'null'
primaryColor:
type:
- string
- 'null'
secondaryColor:
type:
- string
- 'null'
aniListId:
type: integer
format: int32
malId:
type: integer
format: int64
hardcoverId:
type: integer
format: int32
metronId:
type: integer
format: int64
comicVineId:
type:
- string
- 'null'
mangaBakaId:
type: integer
format: int32
mangaBakaEditionId:
type:
- string
- 'null'
cbrId:
type: integer
format: int32
additionalProperties: false
ChapterDto:
type: object
properties:
id:
type: integer
format: int32
range:
type:
- string
- 'null'
number:
type:
- string
- 'null'
deprecated: true
minNumber:
type: number
format: float
maxNumber:
type: number
format: float
sortOrder:
type: number
format: float
pages:
type: integer
format: int32
isSpecial:
type: boolean
title:
type:
- string
- 'null'
files:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/MangaFileDto'
pagesRead:
type: integer
format: int32
totalReads:
type: integer
format: int32
lastReadingProgressUtc:
type: string
format: date-time
lastReadingProgress:
type: string
format: date-time
coverImageLocked:
type: boolean
volumeId:
type: integer
format: int32
createdUtc:
type: string
format: date-time
lastModifiedUtc:
type: string
format: date-time
created:
type: string
format: date-time
releaseDate:
type: string
format: date-time
titleName:
type:
- string
- 'null'
summary:
type:
- string
- 'null'
ageRating:
$ref: '#/components/schemas/AgeRating'
wordCount:
type: integer
format: int64
volumeTitle:
type:
- string
- 'null'
minHoursToRead:
type: integer
format: int32
maxHoursToRead:
type: integer
format: int32
avgHoursToRead:
type: number
format: float
webLinks:
type:
- string
- 'null'
isbn:
type:
- string
- 'null'
writers:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
coverArtists:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
publishers:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
characters:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
pencillers:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
inkers:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
imprints:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
colorists:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
letterers:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
editors:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
translators:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
teams:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
locations:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonDto'
genres:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/GenreTagDto'
tags:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/TagDto'
publicationStatus:
$ref: '#/components/schemas/PublicationStatus'
language:
type:
- string
- 'null'
count:
type: integer
format: int32
totalCount:
type: integer
format: int32
languageLocked:
type: boolean
summaryLocked:
type: boolean
ageRatingLocked:
type: boolean
publicationStatusLocked:
type: boolean
genresLocked:
type: boolean
tagsLocked:
type: boolean
writerLocked:
type: boolean
characterLocked:
type: boolean
coloristLocked:
type: boolean
editorLocked:
type: boolean
inkerLocked:
type: boolean
imprintLocked:
type: boolean
lettererLocked:
type: boolean
pencillerLocked:
type: boolean
publisherLocked:
type: boolean
translatorLocked:
type: boolean
teamLocked:
type: boolean
locationLocked:
type: boolean
coverArtistLocked:
type: boolean
releaseDateLocked:
type: boolean
titleNameLocked:
type: boolean
sortOrderLocked:
type: boolean
coverImage:
type:
- string
- 'null'
primaryColor:
type:
- string
- 'null'
secondaryColor:
type:
- string
- 'null'
format:
$ref: '#/components/schemas/MangaFormat'
aniListId:
type: integer
format: int32
malId:
type: integer
format: int64
hardcoverId:
type: integer
format: int32
metronId:
type: integer
format: int64
comicVineId:
type:
- string
- 'null'
mangaBakaId:
type: integer
format: int32
cbrId:
type: integer
format: int32
additionalProperties: false
AnnotationDto:
required:
- chapterId
- libraryId
- ownerUserId
- seriesId
- volumeId
- xPath
type: object
properties:
id:
type: integer
format: int32
xPath:
type:
- string
- 'null'
endingXPath:
type:
- string
- 'null'
selectedText:
type:
- string
- 'null'
comment:
type:
- string
- 'null'
commentHtml:
type:
- string
- 'null'
commentPlainText:
type:
- string
- 'null'
chapterTitle:
type:
- string
- 'null'
context:
type:
- string
- 'null'
highlightCount:
type: integer
format: int32
containsSpoiler:
type: boolean
pageNumber:
type: integer
format: int32
selectedSlotIndex:
type: integer
format: int32
likes:
type:
- array
- 'null'
items:
type: integer
format: int32
seriesName:
type:
- string
- 'null'
libraryName:
type:
- string
- 'null'
chapterId:
type: integer
format: int32
volumeId:
type: integer
format: int32
seriesId:
type: integer
format: int32
libraryId:
type: integer
format: int32
ownerUserId:
type: integer
format: int32
ownerUsername:
type:
- string
- 'null'
ageRating:
$ref: '#/components/schemas/AgeRating'
createdUtc:
type: string
format: date-time
lastModifiedUtc:
type: string
format: date-time
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
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
PersonRole:
enum:
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
type: integer
description: 'Members:
- `3` — Writer
- `4` — Penciller
- `5` — Inker
- `6` — Colorist
- `7` — Letterer
- `8` — CoverArtist
- `9` — Editor
- `10` — Publisher
- `11` — Character
- `12` — Translator
- `13` — Imprint
- `14` — Team
- `15` — Location'
format: int32
x-enum-varnames:
- Writer
- Penciller
- Inker
- Colorist
- Letterer
- CoverArtist
- Editor
- Publisher
- Character
- Translator
- Imprint
- Team
- Location
x-enum-descriptions:
- Writer
- Penciller
- Inker
- Colorist
- Letterer
- CoverArtist
- Editor
- Publisher
- Character
- Translator
- Imprint
- Team
- Location
ReadingListDto:
required:
- ageRating
type: object
properties:
id:
type: integer
format: int32
title:
type:
- string
- 'null'
summary:
type:
- string
- 'null'
promoted:
type: boolean
coverImageLocked:
type: boolean
coverImage:
type:
- string
- 'null'
primaryColor:
type:
- string
- 'null'
secondaryColor:
type:
- string
- 'null'
itemCount:
type: integer
format: int32
startingYear:
type: integer
format: int32
startingMonth:
type: integer
format: int32
endingYear:
type: integer
format: int32
endingMonth:
type: integer
format: int32
ageRating:
$ref: '#/components/schemas/AgeRating'
ownerUserName:
type:
- string
- 'null'
sourcePath:
type:
- string
- 'null'
downloadUrl:
type:
- string
- 'null'
shaHash:
type:
- string
- 'null'
provider:
$ref: '#/components/schemas/ReadingListProvider'
lastSyncCheckUtc:
type:
- string
- 'null'
format: date-time
lastSyncedUtc:
type:
- string
- 'null'
format: date-time
totalItemsAtImport:
type: integer
format: int32
tags:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ReadingListTagDto'
canSync:
type: boolean
additionalProperties: false
MangaFileDto:
type: object
properties:
id:
type: integer
format: int32
filePath:
type:
- string
- 'null'
pages:
type: integer
format: int32
bytes:
type: integer
format: int64
format:
$ref: '#/components/schemas/MangaFormat'
created:
type: string
format: date-time
extension:
type:
- string
- 'null'
koreaderHash:
type:
- string
- 'null'
additionalProperties: false
TagDto:
required:
- title
type: object
properties:
id:
type: integer
format: int32
title:
type:
- string
- 'null'
additionalProperties: false
ReadingListTagDto:
required:
- normalizedTitle
- title
type: object
properties:
id:
type: integer
format: int32
title:
type:
- string
- 'null'
normalizedTitle:
type:
- string
- 'null'
additionalProperties: false
PublicationStatus:
enum:
- 0
- 1
- 2
- 3
- 4
type: integer
description: 'Members:
- `0` — Ongoing (OnGoing)
- `1` — Hiatus
- `2` — Completed
- `3` — Cancelled
- `4` — Ended'
format: int32
x-enum-varnames:
- OnGoing
- Hiatus
- Completed
- Cancelled
- Ended
x-enum-descriptions:
- Ongoing
- Hiatus
- Completed
- Cancelled
- Ended
GenreTagDto:
required:
- title
type: object
properties:
id:
type: integer
format: int32
title:
type:
- string
- 'null'
additionalProperties: false
SearchResultDto:
type: object
properties:
seriesId:
type: integer
format: int32
name:
type:
- string
- 'null'
originalName:
type:
- string
- 'null'
sortName:
type:
- string
- 'null'
localizedName:
type:
- string
- 'null'
format:
$ref: '#/components/schemas/MangaFormat'
libraryName:
type:
- string
- 'null'
libraryId:
type: integer
format: int32
releaseYear:
type: integer
format: int32
volumeCount:
type: integer
format: int32
chapterCount:
type: integer
format: int32
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
PersonDto:
required:
- name
type: object
properties:
id:
type: integer
format: int32
name:
type:
- string
- 'null'
coverImageLocked:
type: boolean
primaryColor:
type:
- string
- 'null'
secondaryColor:
type:
- string
- 'null'
coverImage:
type:
- string
- 'null'
aliases:
type:
- array
- 'null'
items:
type: string
description:
type:
- string
- 'null'
asin:
type:
- string
- 'null'
aniListId:
type: integer
format: int32
malId:
type: integer
format: int64
hardcoverId:
type:
- string
- 'null'
webLinks:
type:
- array
- 'null'
items:
type: string
roles:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/PersonRole'
additionalProperties: false
securitySchemes:
AuthKey:
type: apiKey
description: Auth Key authentication. Enter your Auth key from your user settings
name: x-api-key
in: header