Kitsu JSON:API Documentation (edge)

Download OpenAPI specification:Download

Kitsu is a modern anime discovery platform that helps you track the anime you're watching, discover new anime and socialize with other fans.

With the Kitsu API you can do everything the client can do and much more.

Base API path: https://kitsu.io/api/edge

JSON:API

The Kitsu API implements the JSON:API specification. This means there are some notable semantics to how you consume it, but understanding it will take a lot of the work of using it out of your hands.

We have included a short overview of the capabilities, but you can consult the JSON:API Specification for more information.

You can be more specific about the data you want to retrieve by using URL parameters and are outlined below.

NOTE: This documentation will display parameters with brackets ([ and ]) for readability, but actual URLs will need to be percent-encoded (%5B and %5D).

Request Headers

As per the JSON:API specification, all requests to the API should contain these headers:

Accept: application/vnd.api+json
Content-Type: application/vnd.api+json

Pagination

You can choose how much of a resource to receive by specifying pagination parameters.

Pagination is supported via limit and offset. Resources are paginated in groups of 10 by default and can be increased to a maximum of 20 (some routes may increase the limit).

/anime?page[limit]=5&page[offset]=0

The response will include URLs for the first, next and last page of resources in the links object based on your request.

https://jsonapi.org/format/#fetching-pagination

Sorting

Sorting by attributes is also supported. By default, sorts are applied in ascending order. You can request a descending order by prepending - to the parameter.

You can use a comma-delimited list to sort by multiple attributes.

/users?sort=-followersCount,-followingCount

https://jsonapi.org/format/#fetching-sorting

Sparse Fieldsets

You can request a resource to only return a specific set of fields in its response. For example, to only receive a user's name and creation date:

/users?fields[users]=name,createdAt

https://jsonapi.org/format/#fetching-sparse-fieldsets

Client Implementations

JSON:API has a great advantage in that since its standardised, API-agnostic tools can be made to abstract away the semantics of consuming and working with the data. It is recommended that you use a JSON:API client to implement the Kitsu API for this reason.

Many implementations in over 13 languages can be found on the JSON:API website.

Authentication

Kitsu uses OAuth 2 for authentication. Authentication is not required for most public-facing GET endpoints.

It is advised to use an OAuth2 client for the language you're using, however it is not required.

NOTE: NSFW/R18 content (feed posts, media, categories etc.) are hidden for all unauthenticated requests and for accounts that have NSFW content disabled in their settings.

OAuth2

Security Scheme Type OAuth2
password OAuth Flow
Token URL: https://kitsu.io/api/oauth/token
Scopes:
  • read -

    Not yet implemented

  • write -

    Not yet implemented

  • admin -

    Not yet implemented

Request Headers

OAuth does not use the JSON:API headers, instead one of the following headers are required:

Header json x-www-form-urlencoded
Content-Type application/json application/x-www-form-urlencoded

App Registration

After registering your app, you will receieve a client ID and a client secret. The client ID is considered public information and is used to build login URLs or included in source code. The client secret must be kept confidential.

NOTE: Application registration has not yet been implemented. For now, client_id and client_secret can be omitted, provided as empty strings or with the following:

CLIENT_ID: dd031b32d2f56c990b1425efe6c42ad847e7fe3ab46bf1299f05ecd856bdb7dd
CLIENT_SECRET: 54d7307928f63414defd96399fc31ba847961ceaecef3a5fd93144e960c0e151

Obtaining an Access Token

Password Grant

Send a POST request to https://kitsu.io/api/oauth/token with the following body:

application/json

{
  grant_type: 'password',
  username: '<email|slug>',
  password: '<password>' // RFC3986 URl encoded string
}

application/x-www-form-urlencoded

grant_type=password&username=<email|slug>&password=<password>

IMPORTANT: If you use x-www-form-urlencoded, you must URL encode the password field using the RFC3986 encoding scheme.

Refreshing an Access Token

Send a POST request to https://kitsu.io/api/oauth/token with the following body:

NOTE: If the token was issued using a client_secret then the client_id and client_secret parameters must be provided.

application/json

{
  grant_type: 'refresh_token',
  refresh_token: '<refresh_token>'
}

application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=<refresh_token>

Using an Access Token

Once you've obtained the access_token using one of the grant types, you can add the following header to all API requests:

Authorization: Bearer <access_token>

Access Token Responses

Successful Response

If the request for an access token is valid, the server will respond with the following data:

{
  access_token: 'abc123', // Token used in Authorization header
  created_at: 1518235801,
  expires_in: 2591963, // Seconds until the access_token expires (30 days default)
  refresh_token: '123abc', // Token used to get a new access_token
  scope: 'public',
  token_type: 'bearer'
}

Unsuccessful Response

If the access token request is invalid, the server will respond with one of six errors in the following format:

{
  error: 'invalid_request',
  error_description: '<reason_why>'
}

These six errors are:

Error Status Explanation
invalid_request 400 The request is missing a parameter, uses an unsupported parameter or repeats a parameter.
invalid_client 401 The request contains an invalid client ID or secret.
invalid_grant 400 The authorization code (or password with the password grant) is invalid or expired.
invalid_scope 400 The request contains an invalid scope (password or client credential grants).
unauthorized_client 400 The client is not authorized to use the requested grant type.
unsupported_grant_type 400 The grant type requested is not recognized by the server.

Algolia

Kitsu uses Algolia for searching. Algolia's search provides more accurate search results and allows you to build complex search filters to find exactly what you want. Refer to the Algolia Docs for further usage.

IMPORTANT:

  • These keys are not static;
  • These keys respect user content settings - Mature content will not be visible if:
    • The keys are requested without a valid Authorization header
    • The user associated with the Authorization header has mature content disabled in their settings.
  • These keys are unique for each logged-in user and must not be shared.
    • Sharing keys requested with a valid Authorization header will leak blocked accounts, blocked media and private groups the user has joined.

All Algolia Keys

Get all the Algolia Keys needed to search Kitsu with Algolia.

These keys can contain private information for requests with a valid Authorization header - check the Algolia section description for details.

Responses

Response Schema: application/vnd.api+json
object

Search-only API Key and Index for characters

object

Search-only API Key and Index for groups

object

Search-only API Key and Index for anime and manga

object

Search-only API Key and Index for posts

object

Search-only API Key and Index for users

Response samples

Content type
application/vnd.api+json
{
  • "characters": {
    },
  • "groups": {
    },
  • "media": {
    },
  • "posts": {
    },
  • "users": {
    }
}

Single Algolia Key

Get an Algolia Key needed to search Kitsu with Algolia.

These keys can contain private information for requests with a valid Authorization header - check the Algolia section description for details.

path Parameters
index
required
string (algoliaIndex)
Enum: "character" "group" "media" "post" "user"

Short name of the Algolia Search Index

Responses

Response Schema: application/vnd.api+json
One of
object

Search-only API Key and Index for characters

Response samples

Content type
application/vnd.api+json
Example
{
  • "characters": {
    }
}

Anime

Anime with an age rating of R18 requires a valid Authorization header and mature content enabled in the users' settings

Get Anime Collection

Get a collection of anime resources

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Responses

Response Schema: application/vnd.api+json
required
Array of objects (schemas)
required
object (pagination)
required
object
Array of objects

Included resources. Only present with the include={relationship} query parameter

Response samples

Content type
application/vnd.api+json
{}

Create Anime

Create an anime resource

Authorizations:
OAuth2 (admin)
query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Request Body schema: application/vnd.api+json
required
object (schemas)

Responses

Response Schema: application/vnd.api+json
required
object (schemas)
Array of objects

Included resources. Only present with the include={relationship} query parameter

Request samples

Content type
application/vnd.api+json
{
  • "data": {
    },
  • "included": [
    ]
}

Response samples

Content type
application/vnd.api+json
{}

Get Anime

Get an anime resource

path Parameters
id
required
string
Example: 1

Resource ID

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Responses

Response Schema: application/vnd.api+json
required
object (schemas)
Array of objects

Included resources. Only present with the include={relationship} query parameter

Response samples

Content type
application/vnd.api+json
{}

Update Anime

Update an anime resource

Authorizations:
OAuth2 (admin)
path Parameters
id
required
string
Example: 1

Resource ID

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Request Body schema: application/vnd.api+json
required
object (schemas)

Responses

Response Schema: application/vnd.api+json
required
object (schemas)
Array of objects

Included resources. Only present with the include={relationship} query parameter

Request samples

Content type
application/vnd.api+json
{
  • "data": {
    },
  • "included": [
    ]
}

Response samples

Content type
application/vnd.api+json
{}

Delete Anime

Delete an anime resource

Authorizations:
OAuth2 (admin)
path Parameters
id
required
string
Example: 1

Resource ID

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Responses

Response samples

Content type
application/vnd.api+json
{
  • "errors": {
    }
}

Manga

Manga with an age rating of R18 requires a valid Authorization header and mature content enabled in the users' settings

Get Manga Collection

Get a collection of manga resources

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Responses

Response Schema: application/vnd.api+json
required
Array of objects (schemas)
required
object (pagination)
required
object
included
Array of objects

Included resources. Only present with the include={relationship} query parameter

Response samples

Content type
application/vnd.api+json
{}

Create Manga

Create a manga resource

Authorizations:
OAuth2 (admin)
query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Request Body schema: application/vnd.api+json
required
object (schemas)

Responses

Response Schema: application/vnd.api+json
required
object (schemas)
included
Array of objects

Included resources. Only present with the include={relationship} query parameter

Request samples

Content type
application/vnd.api+json
{
  • "data": {
    }
}

Response samples

Content type
application/vnd.api+json
{}

Get Manga

Get a manga resource

path Parameters
id
required
string
Example: 1

Resource ID

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Responses

Response Schema: application/vnd.api+json
required
object (schemas)
included
Array of objects

Included resources. Only present with the include={relationship} query parameter

Response samples

Content type
application/vnd.api+json
{}

Update Manga

Update a manga resource

Authorizations:
OAuth2 (admin)
path Parameters
id
required
string
Example: 1

Resource ID

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Request Body schema: application/vnd.api+json
required
object (schemas)

Responses

Response Schema: application/vnd.api+json
required
object (schemas)
included
Array of objects

Included resources. Only present with the include={relationship} query parameter

Request samples

Content type
application/vnd.api+json
{
  • "data": {
    }
}

Response samples

Content type
application/vnd.api+json
{}

Delete Manga

Delete a manga resource

Authorizations:
OAuth2 (admin)
path Parameters
id
required
string
Example: 1

Resource ID

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Responses

Response samples

Content type
application/vnd.api+json
{
  • "errors": {
    }
}

Episodes

Get Episode Collection

Get a collection of episode resources

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Responses

Response Schema: application/vnd.api+json
required
Array of objects (schemas)
required
object (pagination)
required
object
included
Array of objects

Included resources. Only present with the include={relationship} query parameter

Response samples

Content type
application/vnd.api+json
{}

Create Episode

Create an episode resource

Authorizations:
OAuth2 (admin)
query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Request Body schema: application/vnd.api+json
required
object (schemas)

Responses

Response Schema: application/vnd.api+json
required
object (schemas)
included
Array of objects

Included resources. Only present with the include={relationship} query parameter

Request samples

Content type
application/vnd.api+json
{
  • "data": {
    }
}

Response samples

Content type
application/vnd.api+json
{
  • "data": {},
  • "included": [
    ]
}

Get Episode

Get an episode resource

path Parameters
id
required
string
Example: 1

Resource ID

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Responses

Response Schema: application/vnd.api+json
required
object (schemas)
included
Array of objects

Included resources. Only present with the include={relationship} query parameter

Response samples

Content type
application/vnd.api+json
{
  • "data": {},
  • "included": [
    ]
}

Update Episode

Update an episode resource

Authorizations:
OAuth2 (admin)
path Parameters
id
required
string
Example: 1

Resource ID

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Request Body schema: application/vnd.api+json
required
object (schemas)

Responses

Response Schema: application/vnd.api+json
required
object (schemas)
included
Array of objects

Included resources. Only present with the include={relationship} query parameter

Request samples

Content type
application/vnd.api+json
{
  • "data": {
    }
}

Response samples

Content type
application/vnd.api+json
{
  • "data": {},
  • "included": [
    ]
}

Delete Episode

Delete an episode resource

Authorizations:
OAuth2 (admin)
path Parameters
id
required
string
Example: 1

Resource ID

query Parameters
object
Example: fields[anime]=slug&fields[categories]=slug,title

Return only the provided attributes and relationships in the request response. Use a comma-deliminated list for multiple attributes/relationships

Sparse Fieldsets

filter
object
Example: filter[filter1]=1,2&filter[filter2]=example

Filter resources

Filtering and Search

include
string
Example: include=characters,staff.person

Include related resources. Use a dot-seperated path to include relationships of relationships. Use a comma-deliminated list to include multiple relationships

Inclusion of Related Resources

object
Example: page[limit]=20&page[offset]=0

Resource pagination

Pagination

sort
string
Example: sort=id

Sort by ID or resource attributes in ascending order. Prefix with - to sort descending. Use a comma-deliminated list to sort by multiple attributes.

Sorting

Responses

Response samples

Content type
application/vnd.api+json
{
  • "errors": {
    }
}