Skip to content

Kitsu

KitsuMeta is the Kitsu front-end, backed by the public kitsu.io JSON:API. Kitsu’s catalogue is smaller than AniList’s or MAL’s, but it ships a rich cross-source mapping graph — making it especially useful when callers already have a Kitsu ID, or when you want to enrich your IMediaMappings with AniList/MAL/AniDB/TVDB links.

No API key required.

import { HttpClient, KitsuMeta, AllmangaProvider } from 'anime-sdk';
const http = new HttpClient();
const meta = new KitsuMeta(http);
const info = await meta.fetchMediaInfo('kitsu:anime:1');
console.log(info.mappings); // { kitsu: 1, mal: ..., anilist: ..., anidb: ... }
const allmanga = new AllmangaProvider(http);
const stream = await meta.resolveStream('kitsu:anime:1', 1, allmanga, 'sub');

Like MAL, Kitsu integer IDs aren’t globally unique across anime/manga. The URN encodes the catalogue kind:

kitsu:anime:1
kitsu:manga:13

Legacy bare URNs (kitsu:1) still resolve.

Kitsu’s relationship graph publishes per-record mappings to MAL, AniList, AniDB, and TheTVDB. KitsuMeta.fetchMediaInfo pulls them through to IMediaMetadata.mappings, so you can pivot to a different metadata layer without a second lookup:

const info = await kitsuMeta.fetchMediaInfo('kitsu:anime:1');
if (info.mappings?.anilist) {
const anilistInfo = await anilistMeta.fetchMediaInfo(`anilist:${info.mappings.anilist}`);
}
FeatureDetails
CataloguesAnime + Manga
Native ID shapekitsu:anime:<integer> / kitsu:manga:<integer>
Endpointkitsu.io/api/edge (free, keyless)
Rate limit (built-in)100 req/min
Enrichmentscross-source mappings (AniList / MAL / AniDB / TVDB)
Browsenot implemented