# Kitsu

> Search Kitsu's anime and manga catalogue and read or change a Kitsu library. Look a title up by name and get its synopsis, its score as a number you can compare, its categories, its episodes or chapters, its characters, what it is a sequel to and where it streams, with everything Kitsu returns as a bare link already resolved. Read anybody's public library to see what they are watching and how far through they are. Add an account to the connection and you can also change your own: put a title on a shelf, record progress, score it out of ten and take it off again. The catalogue needs no account at all, and nor does reading somebody else's public library; only changing a library, and reading your own, do.

App · Film, TV & Fandom · 17 actions. Web page: https://docs.lodol.com/docs/integrations/kitsu

## Actions

### Add or update a library entry

Put a title on the connected account's shelf, or change where it sits: its status, how far through it you are, a score out of ten, a private note. Kitsu has no upsert and refuses a second entry for a title already in the library, so this looks first and then either creates or updates, and says which it did. Every field left blank is left alone on an entry that already existed, and a new entry with no status given starts as watching or reading now. Needs the Kitsu account on this connection: install it with an email and a password.

**Inputs**

- Anime or manga (`media`, text, required): Which title. Give the title itself, its Kitsu id, its slug, or its kitsu.app URL from an earlier step: all four work. Capitals, accents and punctuation do not matter. A title that fits more than one record is reported with the ones it fits rather than guessed at.
- Anime or manga (`media_type`, text): Optional. Which half of the catalogue the title is in. Anime by default. Kitsu keeps the two apart, so the same id can mean a different title in each. One of: `anime`, `manga`. Default: `anime`.
- Shelf (`status`, text): Optional. Which shelf to put it on. Left alone on an entry that already exists; a new entry with nothing given starts as watching or reading now. One of: `current` (Watching or reading now), `planned`, `completed`, `on_hold` (On hold), `dropped`.
- Progress (`progress`, number): Optional. How many episodes or chapters in you are. Kitsu moves an entry's 'last watched' timestamp when this changes, which is what a progress digest reads. At least 0.
- Score out of 10 (`rating`, number): Optional. Your score, from 1 to 10, in halves - 7 and 7.5 are scores, 7.3 is not. This is the scale the Kitsu site shows; it is converted to the one out of twenty that Kitsu stores. From 1 to 10.
- Note (`notes`, text): Optional. A private note on the entry, visible only to the account that owns it.
- Keep this entry private (`private`, true/false): Optional. Hide the entry from everyone but this account. Left alone when not given.
- Rewatching or rereading (`reconsuming`, true/false): Optional. Mark that you are going through it again. Left alone when not given.
- Volumes owned (`volumes_owned`, number): Optional. How many volumes you own. Manga only; giving it for an anime is refused rather than silently dropped. At least 0.

**Outputs**

- `created` (true/false): True when the title was not in the library and an entry was made for it; false when an entry already existed and was changed.
- `entry` (object): One row of a Kitsu library: a title, where the person is up to in it, and what they thought of it.

**Example output**

```json
{
  "created": false,
  "entry": {
    "created_at": "2023-01-14T18:22:04.713Z",
    "finished_at": null,
    "id": "8412773",
    "media": {
      "id": "1",
      "slug": "cowboy-bebop",
      "title": "Cowboy Bebop",
      "type": "anime",
      "url": "https://kitsu.app/anime/cowboy-bebop"
    },
    "media_type": "anime",
    "notes": null,
    "private": false,
    "progress": 13,
    "progressed_at": "2026-09-02T08:11:48.037Z",
    "rating": 8.5,
    "rating_twenty": 17,
    "reconsume_count": 0,
    "reconsuming": false,
    "started_at": "2023-01-14T18:22:04.713Z",
    "status": "current",
    "updated_at": "2026-09-02T08:11:48.037Z",
    "user_id": "142706",
    "user_name": "sakura",
    "volumes_owned": 0
  }
}
```

### Get a Kitsu user

Get a Kitsu profile by its slug, its display name, its id or its profile URL: the bio, the location, the follower and rating counts, the avatar. Display names are not unique on Kitsu and slugs are, so a name that fits several profiles is reported with the ones it fits. No Kitsu account needed.

**Inputs**

- User (`user`, text, required): Which Kitsu user. Their profile slug (the last part of kitsu.app/users/<slug>), their display name, their numeric id or the profile URL itself all work.

**Outputs**

- `user` (object): One Kitsu profile. The last five fields are only ever filled in on the account this connection signs in as; Kitsu omits them from everybody else's profile.

**Example output**

```json
{
  "user": {
    "about": "Watching more than I finish.",
    "avatar": {
      "original": "https://media.kitsu.app/users/avatars/142706/original.jpg",
      "tiny": "https://media.kitsu.app/users/avatars/142706/tiny.jpg",
      "url": "https://media.kitsu.app/users/avatars/142706/original.jpg"
    },
    "country": "PT",
    "cover_image": null,
    "created_at": "2015-06-22T19:11:04.000Z",
    "email": "sakura@example.com",
    "favorites_count": 31,
    "followers_count": 184,
    "following_count": 212,
    "id": "142706",
    "location": "Lisbon",
    "name": "sakura",
    "posts_count": 96,
    "pro_tier": null,
    "rating_system": "advanced",
    "ratings_count": 412,
    "reviews_count": 4,
    "sfw_filter": true,
    "slug": "sakura",
    "time_zone": "Europe/Lisbon",
    "updated_at": "2026-08-30T12:04:11.447Z",
    "url": "https://kitsu.app/users/sakura",
    "waifu_or_husbando": "Waifu"
  }
}
```

### Get a manga

Get one manga in full: its titles, its synopsis, its score, its rank, how many people track it, its chapter and volume counts, the magazine it was serialised in, its poster, its categories named, and its pages on MyAnimeList and AniList. No Kitsu account needed.

**Inputs**

- Manga (`manga`, text, required): Which manga. Give the title itself, its Kitsu id, its slug, or its kitsu.app URL from an earlier step: all four work. Capitals, accents and punctuation do not matter. A title that fits more than one record is reported with the ones it fits rather than guessed at.

**Outputs**

- `manga` (object): One anime or one manga. Both halves of the catalogue come back in this one shape: the fields that only apply to the other half are present and null, so a step that handles a mixed list never has to branch on 'type' before it can read a title.
- `matched_by` (text): How the text that named this title was read: "id", "slug" or "title". Worth checking in a workflow that passes a person's words through: "title" means it was matched by searching.

**Example output**

```json
{
  "manga": {
    "abbreviated_titles": [
      "AoT"
    ],
    "age_rating": "R",
    "age_rating_guide": "Horror",
    "average_rating": 82.47,
    "average_rating_out_of_ten": 8.25,
    "categories": [
      "Action"
    ],
    "category_list": [
      {
        "child_count": 0,
        "description": "Anime with a lot of fighting, chases or stunts.",
        "id": "155",
        "image": null,
        "nsfw": false,
        "slug": "action",
        "title": "Action",
        "total_media_count": 6234
      }
    ],
    "chapter_count": 141,
    "cover_image": null,
    "created_at": "2013-12-18T13:59:39.232Z",
    "end_date": "2021-04-09",
    "episode_count": null,
    "episode_length_minutes": null,
    "external_links": [],
    "favorites_count": 1206,
    "id": "14916",
    "nsfw": false,
    "popularity_rank": 2,
    "poster_image": {
      "original": "https://media.kitsu.app/manga/14916/poster_image/original.jpg",
      "tiny": "https://media.kitsu.app/manga/14916/poster_image/tiny.jpg",
      "url": "https://media.kitsu.app/manga/14916/poster_image/original.jpg"
    },
    "rating_rank": 138,
    "serialization": "Bessatsu Shounen Magazine",
    "slug": "shingeki-no-kyojin",
    "start_date": "2009-09-09",
    "status": "finished",
    "subtype": "manga",
    "synopsis": "Several hundred years ago, humans were nearly exterminated by titans, and now live behind three concentric walls.",
    "tba": null,
    "title": "Attack on Titan",
    "title_english": "Attack on Titan",
    "title_japanese": "\u9032\u6483\u306e\u5de8\u4eba",
    "title_romaji": "Shingeki no Kyojin",
    "titles": {
      "en": "Attack on Titan",
      "en_jp": "Shingeki no Kyojin",
      "ja_jp": "\u9032\u6483\u306e\u5de8\u4eba"
    },
    "trailer_url": null,
    "type": "manga",
    "updated_at": "2024-03-24T00:00:19.819Z",
    "url": "https://kitsu.app/manga/shingeki-no-kyojin",
    "user_count": 24518,
    "volume_count": 34,
    "youtube_video_id": null
  },
  "matched_by": "title"
}
```

### Get an anime

Get one anime in full: its titles in every language Kitsu holds, its synopsis, its score, its rank, how many people track it, its run dates, its episode count and length, its trailer, its poster, its categories named, and its pages on MyAnimeList, AniList and AniDB. Kitsu returns categories and mappings as bare links; they are resolved here, so a title costs one step rather than three. No Kitsu account needed.

**Inputs**

- Anime (`anime`, text, required): Which anime. Give the title itself, its Kitsu id, its slug, or its kitsu.app URL from an earlier step: all four work. Capitals, accents and punctuation do not matter. A title that fits more than one record is reported with the ones it fits rather than guessed at.

**Outputs**

- `anime` (object): One anime or one manga. Both halves of the catalogue come back in this one shape: the fields that only apply to the other half are present and null, so a step that handles a mixed list never has to branch on 'type' before it can read a title.
- `matched_by` (text): How the text that named this title was read: "id", "slug" or "title". Worth checking in a workflow that passes a person's words through: "title" means it was matched by searching.

**Example output**

```json
{
  "anime": {
    "abbreviated_titles": [
      "COWBOY BEBOP"
    ],
    "age_rating": "R",
    "age_rating_guide": "17+ (violence & profanity)",
    "average_rating": 82.36,
    "average_rating_out_of_ten": 8.24,
    "categories": [
      "Action",
      "Space"
    ],
    "category_list": [
      {
        "child_count": 0,
        "description": "Anime with a lot of fighting, chases or stunts.",
        "id": "155",
        "image": null,
        "nsfw": false,
        "slug": "action",
        "title": "Action",
        "total_media_count": 6234
      },
      {
        "child_count": 0,
        "description": "Set beyond the atmosphere.",
        "id": "18",
        "image": null,
        "nsfw": false,
        "slug": "space",
        "title": "Space",
        "total_media_count": 812
      }
    ],
    "chapter_count": null,
    "cover_image": {
      "large": "https://media.kitsu.app/anime/cover_images/1/large.jpg",
      "original": "https://media.kitsu.app/anime/cover_images/1/original.jpg",
      "small": "https://media.kitsu.app/anime/cover_images/1/small.jpg",
      "tiny": "https://media.kitsu.app/anime/cover_images/1/tiny.jpg",
      "url": "https://media.kitsu.app/anime/cover_images/1/original.jpg"
    },
    "created_at": "2013-02-20T16:00:13.609Z",
    "end_date": "1999-04-24",
    "episode_count": 26,
    "episode_length_minutes": 24,
    "external_links": [
      {
        "external_id": "1",
        "site": "myanimelist/anime",
        "url": "https://myanimelist.net/anime/1"
      }
    ],
    "favorites_count": 5420,
    "id": "1",
    "nsfw": false,
    "popularity_rank": 15,
    "poster_image": {
      "large": "https://media.kitsu.app/anime/1/poster_image/large.jpg",
      "medium": "https://media.kitsu.app/anime/1/poster_image/medium.jpg",
      "original": "https://media.kitsu.app/anime/1/poster_image/original.jpg",
      "small": "https://media.kitsu.app/anime/1/poster_image/small.jpg",
      "tiny": "https://media.kitsu.app/anime/1/poster_image/tiny.jpg",
      "url": "https://media.kitsu.app/anime/1/poster_image/original.jpg"
    },
    "rating_rank": 12,
    "serialization": null,
    "slug": "cowboy-bebop",
    "start_date": "1998-04-03",
    "status": "finished",
    "subtype": "TV",
    "synopsis": "In the year 2071, humanity has colonised several of the planets and moons of the solar system, leaving the now uninhabitable surface of planet Earth behind.",
    "tba": null,
    "title": "Cowboy Bebop",
    "title_english": "Cowboy Bebop",
    "title_japanese": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
    "title_romaji": "Cowboy Bebop",
    "titles": {
      "en": "Cowboy Bebop",
      "en_jp": "Cowboy Bebop",
      "ja_jp": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7"
    },
    "trailer_url": "https://www.youtube.com/watch?v=qig4KOK2R2g",
    "type": "anime",
    "updated_at": "2024-07-11T00:00:09.270Z",
    "url": "https://kitsu.app/anime/cowboy-bebop",
    "user_count": 105430,
    "volume_count": null,
    "youtube_video_id": "qig4KOK2R2g"
  },
  "matched_by": "title"
}
```

### Get an episode

Get one episode by its Kitsu id, with its synopsis, air date, running time, thumbnail and the anime it belongs to named. The id is the one the episode listing returns; Kitsu gives episodes no slug and no page of their own, so there is nothing else to identify one by. No Kitsu account needed.

**Inputs**

- Episode id (`episode_id`, text, required): The episode's Kitsu id, as returned by the episode listing. A Kitsu API URL for the episode works too.

**Outputs**

- `episode` (object): One episode of an anime.

**Example output**

```json
{
  "episode": {
    "abbreviated_titles": [],
    "airdate": "1998-04-03",
    "anime": {
      "id": "1",
      "slug": "cowboy-bebop",
      "title": "Cowboy Bebop",
      "type": "anime",
      "url": "https://kitsu.app/anime/cowboy-bebop"
    },
    "created_at": "2013-02-20T18:20:39.003Z",
    "id": "28",
    "length_minutes": 24,
    "number": 1,
    "relative_number": 1,
    "season_number": 1,
    "synopsis": "Spike and Jet chase a bounty on Tijuana, where a drug deal is about to go badly wrong.",
    "thumbnail": {
      "original": "https://media.kitsu.app/episodes/thumbnails/28/original.jpg",
      "url": "https://media.kitsu.app/episodes/thumbnails/28/original.jpg"
    },
    "title": "Asteroid Blues",
    "title_english": null,
    "title_japanese": null,
    "title_romaji": "Asteroid Blues",
    "titles": {
      "en_jp": "Asteroid Blues"
    },
    "updated_at": "2014-11-18T16:20:14.856Z"
  }
}
```

### Get the connected account

Get the Kitsu account this connection signs in as, including the fields Kitsu shows nobody else: the email, the country, the time zone, the rating scale and whether mature content is switched on. This is the action that proves the credentials work, and it is where the id the library actions need comes from. Needs the Kitsu account on this connection: install it with an email and a password.

**Inputs**: None.

**Outputs**

- `user` (object): One Kitsu profile. The last five fields are only ever filled in on the account this connection signs in as; Kitsu omits them from everybody else's profile.

**Example output**

```json
{
  "user": {
    "about": "Watching more than I finish.",
    "avatar": {
      "original": "https://media.kitsu.app/users/avatars/142706/original.jpg",
      "tiny": "https://media.kitsu.app/users/avatars/142706/tiny.jpg",
      "url": "https://media.kitsu.app/users/avatars/142706/original.jpg"
    },
    "country": "PT",
    "cover_image": null,
    "created_at": "2015-06-22T19:11:04.000Z",
    "email": "sakura@example.com",
    "favorites_count": 31,
    "followers_count": 184,
    "following_count": 212,
    "id": "142706",
    "location": "Lisbon",
    "name": "sakura",
    "posts_count": 96,
    "pro_tier": null,
    "rating_system": "advanced",
    "ratings_count": 412,
    "reviews_count": 4,
    "sfw_filter": true,
    "slug": "sakura",
    "time_zone": "Europe/Lisbon",
    "updated_at": "2026-08-30T12:04:11.447Z",
    "url": "https://kitsu.app/users/sakura",
    "waifu_or_husbando": "Waifu"
  }
}
```

### List a library

Read what somebody is watching or reading, how far through they are and what they scored it, narrowed to one shelf, one half of the catalogue, a title, or everything changed since a date. Each entry comes back with the title it refers to already named, and the whole library's shelf counts come with it, so a digest can say "24 in progress, 152 finished" without paging through to count. Naming a user reads their public library, and a public library needs no Kitsu account. Leaving the user blank reads this connection's own instead, private entries included, and that does: needs the Kitsu account on this connection: install it with an email and a password.

**Inputs**

- Whose library (`user`, text): Optional. Whose library to read, by profile slug, display name, id or profile URL. Leave it empty to read the library of the account on this connection, which is the only way to see entries marked private.
- Anime or manga (`media_type`, list): Optional. Keep only entries of these kinds. Leave it empty for the whole library, which is what a library normally is: Kitsu keeps anime and manga on one set of shelves. One or more of: `anime`, `manga`.
- Shelves (`statuses`, list): Optional. Keep only entries on these shelves. Leave empty for the whole library. One or more of: `current` (Watching or reading now), `planned`, `completed`, `on_hold` (On hold), `dropped`.
- Title contains (`title`, text): Optional. Keep only entries whose title matches this text. This searches inside the library rather than the catalogue.
- Changed since (`since`, text): Optional. Keep only entries changed on or after this date. A plain date or a full timestamp both work. This is what makes a daily digest of somebody's progress possible.
- Order by (`sort`, text): Optional. What to order the entries by. Last watched or read by default, which is the order a progress digest wants. One of: `recently_progressed` (Last watched or read), `recently_updated` (Recently changed), `recently_added` (Recently added), `oldest_first` (Added longest ago), `highest_rated` (Highest rated), `status` (By shelf). Default: `recently_progressed`.
- Number of results (`limit`, number): Optional. How many entries to return in this page. Between 1 and 500, which is the higher cap Kitsu allows on libraries; 10 by default. From 1 to 500. Default: `10`.
- Skip (`offset`, number): Optional. How many records to skip before this page. Pass the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `count` (number): How many records came back in this page.
- `entries` (list): The library entries on this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `status_counts` (object): How many titles are on each shelf of this library in total, whatever this page happened to hold. Kitsu sends these beside the page, so a workflow can report "42 completed" without paging through to count.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.
- `user` (object): Whose library was read.

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "created_at": "2023-01-14T18:22:04.713Z",
      "finished_at": null,
      "id": "8412773",
      "media": {
        "id": "1",
        "slug": "cowboy-bebop",
        "title": "Cowboy Bebop",
        "type": "anime",
        "url": "https://kitsu.app/anime/cowboy-bebop"
      },
      "media_type": "anime",
      "notes": null,
      "private": false,
      "progress": 13,
      "progressed_at": "2026-09-02T08:11:48.037Z",
      "rating": 8.5,
      "rating_twenty": 17,
      "reconsume_count": 0,
      "reconsuming": false,
      "started_at": "2023-01-14T18:22:04.713Z",
      "status": "current",
      "updated_at": "2026-09-02T08:11:48.037Z",
      "user_id": "142706",
      "user_name": "sakura",
      "volumes_owned": 0
    }
  ],
  "has_more": true,
  "limit": 10,
  "next_offset": 1,
  "offset": 0,
  "signed_in": true,
  "status_counts": {
    "completed": 152,
    "current": 24,
    "dropped": 3,
    "on_hold": 8,
    "planned": 131
  },
  "total_count": 318,
  "user": {
    "id": "142706",
    "name": "sakura",
    "slug": "sakura",
    "url": "https://kitsu.app/users/sakura"
  }
}
```

### List a manga's chapters

List the chapters of one manga, first to last or last to first, with each one's title, synopsis, publication date, page count and the volume it is collected in. Kitsu stores a chapter's page count in the same field it uses for an episode's running time, so it comes back here named for what it holds. No Kitsu account needed.

**Inputs**

- Manga (`manga`, text, required): Which manga. Give the title itself, its Kitsu id, its slug, or its kitsu.app URL from an earlier step: all four work. Capitals, accents and punctuation do not matter. A title that fits more than one record is reported with the ones it fits rather than guessed at.
- Order (`order`, text): Optional. Which end to start from. First to last by default. One of: `first_to_last` (First to last), `last_to_first` (Last to first). Default: `first_to_last`.
- Number of results (`limit`, number): Optional. How many records to return in this page. Between 1 and 20, which is Kitsu's own cap; 10 by default. From 1 to 20. Default: `10`.
- Skip (`offset`, number): Optional. How many records to skip before this page. Pass the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `chapters` (list): The chapters on this page.
- `count` (number): How many records came back in this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `manga_id` (text): The Kitsu id of the manga they belong to.
- `manga_title` (text): Its title, as Kitsu records it.
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.

**Example output**

```json
{
  "chapters": [
    {
      "abbreviated_titles": [],
      "created_at": "2017-07-27T22:21:26.824Z",
      "id": "403830",
      "manga": {
        "id": "14916",
        "slug": "shingeki-no-kyojin",
        "title": "Attack on Titan",
        "type": "manga",
        "url": "https://kitsu.app/manga/shingeki-no-kyojin"
      },
      "number": 1,
      "page_count": 55,
      "published": "2009-09-09",
      "synopsis": "The wall is breached for the first time in a century.",
      "thumbnail": null,
      "title": "To You, in 2000 Years",
      "title_english": null,
      "title_japanese": null,
      "title_romaji": "To You, in 2000 Years",
      "titles": {
        "en_jp": "To You, in 2000 Years"
      },
      "updated_at": "2017-07-27T22:47:45.129Z",
      "volume_number": 1
    }
  ],
  "count": 1,
  "has_more": true,
  "limit": 10,
  "manga_id": "14916",
  "manga_title": "Attack on Titan",
  "next_offset": 1,
  "offset": 0,
  "signed_in": false,
  "total_count": 141
}
```

### List a title's characters

List who is in an anime or a manga, each with the part they play in it, their description and their portrait. Kitsu keeps the role on a join row and the name on the character, so this asks for both and returns one row per character rather than a list of links. No Kitsu account needed.

**Inputs**

- Anime or manga (`media`, text, required): Which title. Give the title itself, its Kitsu id, its slug, or its kitsu.app URL from an earlier step: all four work. Capitals, accents and punctuation do not matter. A title that fits more than one record is reported with the ones it fits rather than guessed at.
- Anime or manga (`media_type`, text): Optional. Which half of the catalogue the title is in. Anime by default. Kitsu keeps the two apart, so the same id can mean a different title in each. One of: `anime`, `manga`. Default: `anime`.
- Number of results (`limit`, number): Optional. How many records to return in this page. Between 1 and 20, which is Kitsu's own cap; 10 by default. From 1 to 20. Default: `10`.
- Skip (`offset`, number): Optional. How many records to skip before this page. Pass the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `characters` (list): The characters on this page, each with their role in this title.
- `count` (number): How many records came back in this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `media_id` (text): The Kitsu id of the title.
- `media_title` (text): Its title, as Kitsu records it.
- `media_type` (text): Which half of the catalogue was read.
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.

**Example output**

```json
{
  "characters": [
    {
      "character_id": "2",
      "description": "A bounty hunter aboard the Bebop, and a former member of the Red Dragon syndicate.",
      "id": "1",
      "image": {
        "original": "https://media.kitsu.app/characters/images/2/original.jpg",
        "url": "https://media.kitsu.app/characters/images/2/original.jpg"
      },
      "mal_id": 1,
      "name": "Spike Spiegel",
      "role": "main",
      "slug": "spike-spiegel",
      "url": "https://kitsu.app/characters/spike-spiegel"
    }
  ],
  "count": 1,
  "has_more": true,
  "limit": 10,
  "media_id": "1",
  "media_title": "Cowboy Bebop",
  "media_type": "anime",
  "next_offset": 1,
  "offset": 0,
  "signed_in": false,
  "total_count": 24
}
```

### List an anime's episodes

List the episodes of one anime, first to last or last to first, with each one's title, synopsis, air date, running time and thumbnail. Every episode carries both its absolute number and its number within its season, which differ for anything with more than one season, so a workflow never has to work out which it is holding. No Kitsu account needed.

**Inputs**

- Anime (`anime`, text, required): Which anime. Give the title itself, its Kitsu id, its slug, or its kitsu.app URL from an earlier step: all four work. Capitals, accents and punctuation do not matter. A title that fits more than one record is reported with the ones it fits rather than guessed at.
- Order (`order`, text): Optional. Which end to start from. First to last by default. One of: `first_to_last` (First to last), `last_to_first` (Last to first). Default: `first_to_last`.
- Number of results (`limit`, number): Optional. How many records to return in this page. Between 1 and 20, which is Kitsu's own cap; 10 by default. From 1 to 20. Default: `10`.
- Skip (`offset`, number): Optional. How many records to skip before this page. Pass the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `anime_id` (text): The Kitsu id of the anime they belong to.
- `anime_title` (text): Its title, as Kitsu records it.
- `count` (number): How many records came back in this page.
- `episodes` (list): The episodes on this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.

**Example output**

```json
{
  "anime_id": "1",
  "anime_title": "Cowboy Bebop",
  "count": 1,
  "episodes": [
    {
      "abbreviated_titles": [],
      "airdate": "1998-04-03",
      "anime": {
        "id": "1",
        "slug": "cowboy-bebop",
        "title": "Cowboy Bebop",
        "type": "anime",
        "url": "https://kitsu.app/anime/cowboy-bebop"
      },
      "created_at": "2013-02-20T18:20:39.003Z",
      "id": "28",
      "length_minutes": 24,
      "number": 1,
      "relative_number": 1,
      "season_number": 1,
      "synopsis": "Spike and Jet chase a bounty on Tijuana, where a drug deal is about to go badly wrong.",
      "thumbnail": {
        "original": "https://media.kitsu.app/episodes/thumbnails/28/original.jpg",
        "url": "https://media.kitsu.app/episodes/thumbnails/28/original.jpg"
      },
      "title": "Asteroid Blues",
      "title_english": null,
      "title_japanese": null,
      "title_romaji": "Asteroid Blues",
      "titles": {
        "en_jp": "Asteroid Blues"
      },
      "updated_at": "2014-11-18T16:20:14.856Z"
    }
  ],
  "has_more": true,
  "limit": 10,
  "next_offset": 1,
  "offset": 0,
  "signed_in": false,
  "total_count": 26
}
```

### List categories

List the categories Kitsu files titles under, either all of them or the ones beneath one parent. The slugs this returns are exactly what the two search actions' category filter takes, which is the point of it: nothing else tells a workflow that the slug for Slice of Life is slice-of-life. No Kitsu account needed.

**Inputs**

- Under which category (`parent`, text): Optional. List only the categories beneath this one, named by its slug, its title or its Kitsu id. Leave it empty to list the whole vocabulary.
- Order by (`sort`, text): Optional. What to order them by. By name by default. One of: `title` (By name), `most_titles` (Most titles first). Default: `title`.
- Number of results (`limit`, number): Optional. How many categories to return in this page. Between 1 and 100; 10 by default. Kitsu has a few hundred in all. From 1 to 100. Default: `10`.
- Skip (`offset`, number): Optional. How many records to skip before this page. Pass the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `categories` (list): The categories on this page.
- `count` (number): How many records came back in this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `parent_id` (text): The Kitsu id of the parent that was asked for, or null when the whole vocabulary was listed.
- `parent_title` (text): That parent's name, or null.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.

**Example output**

```json
{
  "categories": [
    {
      "child_count": 0,
      "description": "Anime with a lot of fighting, chases or stunts.",
      "id": "155",
      "image": null,
      "nsfw": false,
      "slug": "action",
      "title": "Action",
      "total_media_count": 6234
    },
    {
      "child_count": 0,
      "description": "Set beyond the atmosphere.",
      "id": "18",
      "image": null,
      "nsfw": false,
      "slug": "space",
      "title": "Space",
      "total_media_count": 812
    }
  ],
  "count": 2,
  "has_more": true,
  "limit": 10,
  "next_offset": 2,
  "offset": 0,
  "parent_id": null,
  "parent_title": null,
  "signed_in": false,
  "total_count": 229
}
```

### List related titles

List what a title leads to and comes from: its sequels, prequels, side stories, spin-offs, alternative versions and the manga an anime was adapted from. Each row names the relationship and the title on the other end of it, so a workflow watching for a sequel reads a title rather than following a link to find out what it points at. No Kitsu account needed.

**Inputs**

- Anime or manga (`media`, text, required): Which title. Give the title itself, its Kitsu id, its slug, or its kitsu.app URL from an earlier step: all four work. Capitals, accents and punctuation do not matter. A title that fits more than one record is reported with the ones it fits rather than guessed at.
- Anime or manga (`media_type`, text): Optional. Which half of the catalogue the title is in. Anime by default. Kitsu keeps the two apart, so the same id can mean a different title in each. One of: `anime`, `manga`. Default: `anime`.
- Number of results (`limit`, number): Optional. How many records to return in this page. Between 1 and 20, which is Kitsu's own cap; 10 by default. From 1 to 20. Default: `10`.
- Skip (`offset`, number): Optional. How many records to skip before this page. Pass the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `count` (number): How many records came back in this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `media_id` (text): The Kitsu id of the title asked about.
- `media_title` (text): Its title, as Kitsu records it.
- `media_type` (text): Which half of the catalogue was read.
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `related` (list): The related titles on this page.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.

**Example output**

```json
{
  "count": 1,
  "has_more": true,
  "limit": 10,
  "media_id": "1",
  "media_title": "Cowboy Bebop",
  "media_type": "anime",
  "next_offset": 1,
  "offset": 0,
  "related": [
    {
      "id": "8801",
      "media": {
        "id": "5",
        "slug": "cowboy-bebop-tengoku-no-tobira",
        "title": "Cowboy Bebop: The Movie",
        "type": "anime",
        "url": "https://kitsu.app/anime/cowboy-bebop-tengoku-no-tobira"
      },
      "role": "side_story",
      "role_text": "side story"
    }
  ],
  "signed_in": false,
  "total_count": 3
}
```

### List what is trending

Read Kitsu's own trending feed for anime or for manga: what the site is putting in front of people right now, in the order it puts them. This is not a search and takes no filters, which is what makes it a good opening step for a weekly digest. No Kitsu account needed.

**Inputs**

- Anime or manga (`media_type`, text): Optional. Which half of the catalogue the title is in. Anime by default. Kitsu keeps the two apart, so the same id can mean a different title in each. One of: `anime`, `manga`. Default: `anime`.
- Number of results (`limit`, number): Optional. How many records to return in this page. Between 1 and 20, which is Kitsu's own cap; 10 by default. From 1 to 20. Default: `10`.

**Outputs**

- `count` (number): How many records came back in this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `media` (list): The trending titles, in Kitsu's own order.
- `media_type` (text): Which feed was read: "anime" or "manga".
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "limit": 10,
  "media": [
    {
      "abbreviated_titles": [
        "COWBOY BEBOP"
      ],
      "age_rating": "R",
      "age_rating_guide": "17+ (violence & profanity)",
      "average_rating": 82.36,
      "average_rating_out_of_ten": 8.24,
      "categories": [
        "Action",
        "Space"
      ],
      "category_list": [
        {
          "child_count": 0,
          "description": "Anime with a lot of fighting, chases or stunts.",
          "id": "155",
          "image": null,
          "nsfw": false,
          "slug": "action",
          "title": "Action",
          "total_media_count": 6234
        },
        {
          "child_count": 0,
          "description": "Set beyond the atmosphere.",
          "id": "18",
          "image": null,
          "nsfw": false,
          "slug": "space",
          "title": "Space",
          "total_media_count": 812
        }
      ],
      "chapter_count": null,
      "cover_image": {
        "large": "https://media.kitsu.app/anime/cover_images/1/large.jpg",
        "original": "https://media.kitsu.app/anime/cover_images/1/original.jpg",
        "small": "https://media.kitsu.app/anime/cover_images/1/small.jpg",
        "tiny": "https://media.kitsu.app/anime/cover_images/1/tiny.jpg",
        "url": "https://media.kitsu.app/anime/cover_images/1/original.jpg"
      },
      "created_at": "2013-02-20T16:00:13.609Z",
      "end_date": "1999-04-24",
      "episode_count": 26,
      "episode_length_minutes": 24,
      "external_links": [
        {
          "external_id": "1",
          "site": "myanimelist/anime",
          "url": "https://myanimelist.net/anime/1"
        }
      ],
      "favorites_count": 5420,
      "id": "1",
      "nsfw": false,
      "popularity_rank": 15,
      "poster_image": {
        "large": "https://media.kitsu.app/anime/1/poster_image/large.jpg",
        "medium": "https://media.kitsu.app/anime/1/poster_image/medium.jpg",
        "original": "https://media.kitsu.app/anime/1/poster_image/original.jpg",
        "small": "https://media.kitsu.app/anime/1/poster_image/small.jpg",
        "tiny": "https://media.kitsu.app/anime/1/poster_image/tiny.jpg",
        "url": "https://media.kitsu.app/anime/1/poster_image/original.jpg"
      },
      "rating_rank": 12,
      "serialization": null,
      "slug": "cowboy-bebop",
      "start_date": "1998-04-03",
      "status": "finished",
      "subtype": "TV",
      "synopsis": "In the year 2071, humanity has colonised several of the planets and moons of the solar system, leaving the now uninhabitable surface of planet Earth behind.",
      "tba": null,
      "title": "Cowboy Bebop",
      "title_english": "Cowboy Bebop",
      "title_japanese": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
      "title_romaji": "Cowboy Bebop",
      "titles": {
        "en": "Cowboy Bebop",
        "en_jp": "Cowboy Bebop",
        "ja_jp": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7"
      },
      "trailer_url": "https://www.youtube.com/watch?v=qig4KOK2R2g",
      "type": "anime",
      "updated_at": "2024-07-11T00:00:09.270Z",
      "url": "https://kitsu.app/anime/cowboy-bebop",
      "user_count": 105430,
      "volume_count": null,
      "youtube_video_id": "qig4KOK2R2g"
    }
  ],
  "media_type": "anime",
  "next_offset": null,
  "offset": 0,
  "signed_in": false,
  "total_count": null
}
```

### List where to watch

List the services that legally stream one anime, with the link to it on each and the languages it is subtitled and dubbed in. Kitsu records the service as a separate record, so a link on its own says only what the URL says; the service is named here. No Kitsu account needed.

**Inputs**

- Anime (`anime`, text, required): Which anime. Give the title itself, its Kitsu id, its slug, or its kitsu.app URL from an earlier step: all four work. Capitals, accents and punctuation do not matter. A title that fits more than one record is reported with the ones it fits rather than guessed at.
- Number of results (`limit`, number): Optional. How many records to return in this page. Between 1 and 20, which is Kitsu's own cap; 10 by default. From 1 to 20. Default: `10`.
- Skip (`offset`, number): Optional. How many records to skip before this page. Pass the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `anime_id` (text): The Kitsu id of the anime.
- `anime_title` (text): Its title, as Kitsu records it.
- `count` (number): How many records came back in this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `streaming_links` (list): Where it streams. Empty when Kitsu knows of nowhere, which is common for older and for unlicensed titles.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.

**Example output**

```json
{
  "anime_id": "1",
  "anime_title": "Cowboy Bebop",
  "count": 1,
  "has_more": true,
  "limit": 10,
  "next_offset": 1,
  "offset": 0,
  "signed_in": false,
  "streaming_links": [
    {
      "dubs": [
        "ja",
        "en"
      ],
      "id": "25467",
      "streamer": "Crunchyroll",
      "streamer_id": "3",
      "subtitles": [
        "en",
        "es"
      ],
      "url": "https://www.crunchyroll.com/cowboy-bebop"
    }
  ],
  "total_count": 2
}
```

### Remove a library entry

Take a title off the connected account's shelf. This takes the entry's own id rather than a title, on purpose: it is the one action here that destroys something, and an id that came out of a library listing or out of the action that wrote it cannot be a title that resolved to the wrong show. The entry is read before it is removed, so the step reports what it took off and an id belonging to somebody else's library is named rather than relayed as a bare refusal. Needs the Kitsu account on this connection: install it with an email and a password.

**Inputs**

- Library entry id (`entry_id`, text, required): The entry's own Kitsu id, as returned by Add or update a library entry and by List a library. This is not the anime's or the manga's id.

**Outputs**

- `deleted` (true/false): Always true when the step succeeded.
- `entry` (object): One row of a Kitsu library: a title, where the person is up to in it, and what they thought of it.

**Example output**

```json
{
  "deleted": true,
  "entry": {
    "created_at": "2023-01-14T18:22:04.713Z",
    "finished_at": null,
    "id": "8412773",
    "media": {
      "id": "1",
      "slug": "cowboy-bebop",
      "title": "Cowboy Bebop",
      "type": "anime",
      "url": "https://kitsu.app/anime/cowboy-bebop"
    },
    "media_type": "anime",
    "notes": null,
    "private": false,
    "progress": 13,
    "progressed_at": "2026-09-02T08:11:48.037Z",
    "rating": 8.5,
    "rating_twenty": 17,
    "reconsume_count": 0,
    "reconsuming": false,
    "started_at": "2023-01-14T18:22:04.713Z",
    "status": "current",
    "updated_at": "2026-09-02T08:11:48.037Z",
    "user_id": "142706",
    "user_name": "sakura",
    "volumes_owned": 0
  }
}
```

### Search anime

Search Kitsu's anime catalogue by text and by every filter Kitsu documents: the season it aired in, its year, its age rating, the service that streams it, and the categories it is filed under. Each result comes back with its titles in every language Kitsu holds, its score as a number you can compare, its categories named, and its page on MyAnimeList and AniList. This is how a workflow turns what a person typed into the record the other actions take. No Kitsu account needed.

**Inputs**

- Search text (`query`, text): Optional. Words from the title. Kitsu matches across every language it holds a title in, so both "Attack on Titan" and "Shingeki no Kyojin" find the same show.
- Categories (`categories`, text): Optional. Keep only titles filed under these categories, named by their slugs ("slice-of-life", "mecha", "psychological"). List the categories to see the slugs Kitsu uses. Several can be given, separated by commas.
- Season (`season`, text): Optional. Keep only anime that started in this season. Pair it with a year to get one season's worth of shows. One of: `winter`, `spring`, `summer`, `fall`.
- Year (`season_year`, text): Optional. Keep only anime that started in this year. Several years can be given, separated by commas.
- Age ratings (`age_ratings`, list): Optional. Keep only anime with these ratings. Leave empty for all of them. R18 titles are invisible unless this connection has an account with mature content switched on. One or more of: `G` (G - general audiences), `PG` (PG - parental guidance), `R` (R - restricted), `R18` (R18 - explicit).
- Streaming service (`streamer`, text): Optional. Keep only anime this service streams, named as Kitsu names it.
- Order by (`sort`, text): Optional. What to order the results by. Best match is the default and is the only one worth using with a search term, because it is Kitsu's own relevance ranking; any other order replaces it. One of: `best_match` (Best match), `most_popular` (Most popular), `highest_rated` (Highest rated), `most_users` (Most people tracking it), `most_favorited` (Most favourited), `newest` (Newest first), `oldest` (Oldest first), `recently_updated` (Recently updated on Kitsu). Default: `best_match`.
- Number of results (`limit`, number): Optional. How many records to return in this page. Between 1 and 20, which is Kitsu's own cap; 10 by default. From 1 to 20. Default: `10`.
- Skip (`offset`, number): Optional. How many records to skip before this page. Pass the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `anime` (list): The anime that matched, most relevant first unless another order was asked for.
- `count` (number): How many records came back in this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.

**Example output**

```json
{
  "anime": [
    {
      "abbreviated_titles": [
        "COWBOY BEBOP"
      ],
      "age_rating": "R",
      "age_rating_guide": "17+ (violence & profanity)",
      "average_rating": 82.36,
      "average_rating_out_of_ten": 8.24,
      "categories": [
        "Action",
        "Space"
      ],
      "category_list": [
        {
          "child_count": 0,
          "description": "Anime with a lot of fighting, chases or stunts.",
          "id": "155",
          "image": null,
          "nsfw": false,
          "slug": "action",
          "title": "Action",
          "total_media_count": 6234
        },
        {
          "child_count": 0,
          "description": "Set beyond the atmosphere.",
          "id": "18",
          "image": null,
          "nsfw": false,
          "slug": "space",
          "title": "Space",
          "total_media_count": 812
        }
      ],
      "chapter_count": null,
      "cover_image": {
        "large": "https://media.kitsu.app/anime/cover_images/1/large.jpg",
        "original": "https://media.kitsu.app/anime/cover_images/1/original.jpg",
        "small": "https://media.kitsu.app/anime/cover_images/1/small.jpg",
        "tiny": "https://media.kitsu.app/anime/cover_images/1/tiny.jpg",
        "url": "https://media.kitsu.app/anime/cover_images/1/original.jpg"
      },
      "created_at": "2013-02-20T16:00:13.609Z",
      "end_date": "1999-04-24",
      "episode_count": 26,
      "episode_length_minutes": 24,
      "external_links": [
        {
          "external_id": "1",
          "site": "myanimelist/anime",
          "url": "https://myanimelist.net/anime/1"
        }
      ],
      "favorites_count": 5420,
      "id": "1",
      "nsfw": false,
      "popularity_rank": 15,
      "poster_image": {
        "large": "https://media.kitsu.app/anime/1/poster_image/large.jpg",
        "medium": "https://media.kitsu.app/anime/1/poster_image/medium.jpg",
        "original": "https://media.kitsu.app/anime/1/poster_image/original.jpg",
        "small": "https://media.kitsu.app/anime/1/poster_image/small.jpg",
        "tiny": "https://media.kitsu.app/anime/1/poster_image/tiny.jpg",
        "url": "https://media.kitsu.app/anime/1/poster_image/original.jpg"
      },
      "rating_rank": 12,
      "serialization": null,
      "slug": "cowboy-bebop",
      "start_date": "1998-04-03",
      "status": "finished",
      "subtype": "TV",
      "synopsis": "In the year 2071, humanity has colonised several of the planets and moons of the solar system, leaving the now uninhabitable surface of planet Earth behind.",
      "tba": null,
      "title": "Cowboy Bebop",
      "title_english": "Cowboy Bebop",
      "title_japanese": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
      "title_romaji": "Cowboy Bebop",
      "titles": {
        "en": "Cowboy Bebop",
        "en_jp": "Cowboy Bebop",
        "ja_jp": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7"
      },
      "trailer_url": "https://www.youtube.com/watch?v=qig4KOK2R2g",
      "type": "anime",
      "updated_at": "2024-07-11T00:00:09.270Z",
      "url": "https://kitsu.app/anime/cowboy-bebop",
      "user_count": 105430,
      "volume_count": null,
      "youtube_video_id": "qig4KOK2R2g"
    }
  ],
  "count": 1,
  "has_more": true,
  "limit": 10,
  "next_offset": 1,
  "offset": 0,
  "signed_in": false,
  "total_count": 312
}
```

### Search manga

Search Kitsu's manga catalogue by text and by category. Each result comes back with its titles in every language Kitsu holds, its score as a number you can compare, its chapter and volume counts, the magazine it ran in, and its pages on MyAnimeList and AniList. No Kitsu account needed.

**Inputs**

- Search text (`query`, text): Optional. Words from the title, in any language Kitsu holds a title in.
- Categories (`categories`, text): Optional. Keep only titles filed under these categories, named by their slugs ("slice-of-life", "mecha", "psychological"). List the categories to see the slugs Kitsu uses. Several can be given, separated by commas.
- Order by (`sort`, text): Optional. What to order the results by. Best match is the default and is the only one worth using with a search term, because it is Kitsu's own relevance ranking; any other order replaces it. One of: `best_match` (Best match), `most_popular` (Most popular), `highest_rated` (Highest rated), `most_users` (Most people tracking it), `most_favorited` (Most favourited), `newest` (Newest first), `oldest` (Oldest first), `recently_updated` (Recently updated on Kitsu). Default: `best_match`.
- Number of results (`limit`, number): Optional. How many records to return in this page. Between 1 and 20, which is Kitsu's own cap; 10 by default. From 1 to 20. Default: `10`.
- Skip (`offset`, number): Optional. How many records to skip before this page. Pass the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `count` (number): How many records came back in this page.
- `has_more` (true/false): Whether there is another page after this one.
- `limit` (number): The page size that was used.
- `manga` (list): The manga that matched, most relevant first unless another order was asked for.
- `next_offset` (number): The offset to pass back to this action for the next page, or null when this was the last one.
- `offset` (number): Where this page started.
- `signed_in` (true/false): Whether this ran as a signed-in Kitsu account. Kitsu hides explicit titles and categories from anonymous callers entirely, so a shorter result than expected with this false is Kitsu filtering rather than a gap in the catalogue.
- `total_count` (number): How many matched in total, which is usually far more than came back. Null on the few Kitsu endpoints that do not count.

**Example output**

```json
{
  "count": 1,
  "has_more": true,
  "limit": 10,
  "manga": [
    {
      "abbreviated_titles": [
        "AoT"
      ],
      "age_rating": "R",
      "age_rating_guide": "Horror",
      "average_rating": 82.47,
      "average_rating_out_of_ten": 8.25,
      "categories": [
        "Action"
      ],
      "category_list": [
        {
          "child_count": 0,
          "description": "Anime with a lot of fighting, chases or stunts.",
          "id": "155",
          "image": null,
          "nsfw": false,
          "slug": "action",
          "title": "Action",
          "total_media_count": 6234
        }
      ],
      "chapter_count": 141,
      "cover_image": null,
      "created_at": "2013-12-18T13:59:39.232Z",
      "end_date": "2021-04-09",
      "episode_count": null,
      "episode_length_minutes": null,
      "external_links": [],
      "favorites_count": 1206,
      "id": "14916",
      "nsfw": false,
      "popularity_rank": 2,
      "poster_image": {
        "original": "https://media.kitsu.app/manga/14916/poster_image/original.jpg",
        "tiny": "https://media.kitsu.app/manga/14916/poster_image/tiny.jpg",
        "url": "https://media.kitsu.app/manga/14916/poster_image/original.jpg"
      },
      "rating_rank": 138,
      "serialization": "Bessatsu Shounen Magazine",
      "slug": "shingeki-no-kyojin",
      "start_date": "2009-09-09",
      "status": "finished",
      "subtype": "manga",
      "synopsis": "Several hundred years ago, humans were nearly exterminated by titans, and now live behind three concentric walls.",
      "tba": null,
      "title": "Attack on Titan",
      "title_english": "Attack on Titan",
      "title_japanese": "\u9032\u6483\u306e\u5de8\u4eba",
      "title_romaji": "Shingeki no Kyojin",
      "titles": {
        "en": "Attack on Titan",
        "en_jp": "Shingeki no Kyojin",
        "ja_jp": "\u9032\u6483\u306e\u5de8\u4eba"
      },
      "trailer_url": null,
      "type": "manga",
      "updated_at": "2024-03-24T00:00:19.819Z",
      "url": "https://kitsu.app/manga/shingeki-no-kyojin",
      "user_count": 24518,
      "volume_count": 34,
      "youtube_video_id": null
    }
  ],
  "next_offset": 1,
  "offset": 0,
  "signed_in": false,
  "total_count": 74
}
```
