openapi: 3.0.3
tags:
- name: Manga
- name: Cover
- name: Author
- name: Search
- name: Auth
- name: ScanlationGroup
- name: Feed
- name: CustomList
- name: Captcha
- name: AtHome
- name: Legacy
- name: Infrastructure
info:
title: MangaDex API
version: 5.1.4
contact:
name: MangaDex staff team
email: mangadexstaff@gmail.com
description: |-
MangaDex is an ad-free manga reader offering high-quality images!
This document details our API as it is right now. It is in no way a promise to never change it, although we will endeavour to publicly notify any major change.
# Authentication
You can login with the `/auth/login` endpoint. On success, it will return a JWT that remains valid for 15 minutes along with a session token that allows refreshing without re-authenticating for 1 month.
# Rate limits
The API enforces rate-limits to protect our servers against malicious and/or mistaken use. The API keeps track of the requests on an IP-by-IP basis.
Hence, if you're on a VPN, proxy or a shared network in general, the requests of other users on this network might affect you.
At first, a **global limit of 5 requests per second per IP address** is in effect.
> This limit is enforced across multiple load-balancers, and thus
is not an exact value but rather a lower-bound that we guarantee. The exact value will be somewhere in the range `[5, 5*n]` (with `n` being the number of
load-balancers currently active). The exact value within this range will depend on the current traffic patterns we are experiencing.
On top of this, **some endpoints are further restricted** as follows:
| Endpoint | Requests per time period | Time period in minutes |
|------------------------------------|-------------------------- |------------------------|
| `POST /account/create` | 1 | 60 |
| `GET /account/activate/{code}` | 30 | 60 |
| `POST /account/activate/resend` | 5 | 60 |
| `POST /account/recover` | 5 | 60 |
| `POST /account/recover/{code}` | 5 | 60 |
| `POST /auth/login` | 30 | 60 |
| `POST /auth/refresh` | 30 | 60 |
| `POST /author` | 10 | 60 |
| `PUT /author` | 10 | 1 |
| `DELETE /author/{id}` | 10 | 10 |
| `POST /captcha/solve` | 10 | 10 |
| `POST /chapter/{id}/read` | 300 | 10 |
| `PUT /chapter/{id}` | 10 | 1 |
| `DELETE /chapter/{id}` | 10 | 1 |
| `POST /manga` | 10 | 60 |
| `PUT /manga/{id}` | 10 | 60 |
| `DELETE /manga/{id}` | 10 | 10 |
| `POST /cover` | 10 | 1 |
| `PUT /cover/{id}` | 10 | 1 |
| `DELETE /cover/{id}` | 10 | 10 |
| `POST /group` | 10 | 60 |
| `PUT /group/{id}` | 10 | 1 |
| `DELETE /group/{id}` | 10 | 10 |
| `GET /at-home/server/{id}` | 60 | 1 |
Calling these endpoints will further provide details via the following headers about your remaining quotas:
| Header | Description |
|---------------------------|-----------------------------------------------------------------------------|
| `X-RateLimit-Limit` | Maximal number of requests this endpoint allows per its time period |
| `X-RateLimit-Remaining` | Remaining number of requests within your quota for the current time period |
| `X-RateLimit-Retry-After` | Timestamp of the end of the current time period, as UNIX timestamp |
# Result Limit
Most of our listing endpoints will return a maximum number of total results that is currently capped at 10.000 items. Beyond that you will not receive any more items no matter how far you paginate and the results will become empty instead. This is for performance reasons and a limitation we will not lift.
Note that the limit is applied to a search query and list endpoints with or without any filters are search queries.
If you need to retrieve more items, use filters to narrow down your search.
# Reference Expansion
Reference Expansion is a feature of certain endpoints where relationships of a resource are expanded with their attributes, which reduces the amount of requests that need to be sent to the API to retrieve a complete set of data.
It works by appending a list of includes to the query with the type names from the relationships. If an endpoint supports this feature is indicated by the presence of the optional `includes` parameter.
## Example
To fetch a specific manga with `author`, `artist` and `cover_art` expanded, you can send the following request: `GET /manga/f9c33607-9180-4ba6-b85c-e4b5faee7192?includes[]=author&includes[]=artist&includes[]=cover_art`. You will now find the objects attributes inside the returned relationships array.
## Note
Your current user needs `*.view` permission on each type of reference you want to expand. Guests have most of these permissions and for logged-in user accounts you can check `GET /auth/check` to list all permissions you have been granted. For example, to be able to expand `cover_art`, you need to have been granted the `cover.view` permission, for `author` and `artist` types you need the `author.view` permission and so on.
If a reference can't be expanded, the request will still succeed and no error indication will be visible.
# Captchas
Some endpoints may require captchas to proceed, in order to slow down automated malicious traffic.
Legitimate users might also be affected, based on the frequency of write requests or due certain endpoints being particularly sensitive to malicious use, such as user signup.
Once an endpoint decides that a captcha needs to be solved, a 403 Forbidden response will be returned, with the error code `captcha_required_exception`.
The sitekey needed for recaptcha to function is provided in both the `X-Captcha-Sitekey` header field, as well as in the error context, specified as `siteKey` parameter.
The captcha result of the client can either be passed into the repeated original request with the `X-Captcha-Result` header or alternatively to the `POST /captcha/solve` endpoint.
The time a solved captcha is remembered varies across different endpoints and can also be influenced by individual client behavior.
Authentication is not required for the `POST /captcha/solve` endpoint, captchas are tracked both by client ip and logged in user id.
If you are logged in, you want to send the session token along, so you validate the captcha for your client ip and user id at the same time, but it is not required.
# Reading a chapter using the API
## Retrieving pages from the MangaDex@Home network
A valid [MangaDex@Home network](https://mangadex.network) page URL is in the following format: `{server-specific base url}/{temporary access token}/{quality mode}/{chapter hash}/{filename}`
There are currently 2 quality modes:
- `data`: Original upload quality
- `data-saver`: Compressed quality
Upon fetching a chapter from the API, you will find 4 fields necessary to compute MangaDex@Home page URLs:
| Field | Type | Description |
|------------------------------|----------|-----------------------------------|
| `.data.id` | `string` | API Chapter ID |
| `.data.attributes.hash` | `string` | MangaDex@Home Chapter Hash |
| `.data.attributes.data` | `array` | data quality mode filenames |
| `.data.attributes.dataSaver` | `array` | data-saver quality mode filenames |
Example
```json
GET /chapter/{id}
{
...,
"data": {
"id": "e46e5118-80ce-4382-a506-f61a24865166",
...,
"attributes": {
...,
"hash": "e199c7d73af7a58e8a4d0263f03db660",
"data": [
"x1-b765e86d5ecbc932cf3f517a8604f6ac6d8a7f379b0277a117dc7c09c53d041e.png",
...
],
"dataSaver": [
"x1-ab2b7c8f30c843aa3a53c29bc8c0e204fba4ab3e75985d761921eb6a52ff6159.jpg",
...
]
}
}
}
```
From this point you miss only the base URL to an assigned MangaDex@Home server for your client and chapter. This is retrieved via a `GET` request
to `/at-home/server/{ chapter .data.id }`.
Example:
```json
GET /at-home/server/e46e5118-80ce-4382-a506-f61a24865166
{
"baseUrl": "https://abcdefg.hijklmn.mangadex.network:12345/some-token"
}
```
The full URL is the constructed as follows
```
{ server .baseUrl }/{ quality mode }/{ chapter .data.attributes.hash }/{ chapter .data.attributes.{ quality mode }.[*] }
Examples
data quality: https://abcdefg.hijklmn.mangadex.network:12345/some-token/data/e199c7d73af7a58e8a4d0263f03db660/x1-b765e86d5ecbc932cf3f517a8604f6ac6d8a7f379b0277a117dc7c09c53d041e.png
base url: https://abcdefg.hijklmn.mangadex.network:12345/some-token
quality mode: data
chapter hash: e199c7d73af7a58e8a4d0263f03db660
filename: x1-b765e86d5ecbc932cf3f517a8604f6ac6d8a7f379b0277a117dc7c09c53d041e.png
data-saver quality: https://abcdefg.hijklmn.mangadex.network:12345/some-token/data-saver/e199c7d73af7a58e8a4d0263f03db660/x1-ab2b7c8f30c843aa3a53c29bc8c0e204fba4ab3e75985d761921eb6a52ff6159.jpg
base url: https://abcdefg.hijklmn.mangadex.network:12345/some-token
quality mode: data-saver
chapter hash: e199c7d73af7a58e8a4d0263f03db660
filename: x1-ab2b7c8f30c843aa3a53c29bc8c0e204fba4ab3e75985d761921eb6a52ff6159.jpg
```
If the server you have been assigned fails to serve images, you are allowed to call the `/at-home/server/{ chapter id }` endpoint again to get another server.
Whether successful or not, **please do report the result you encountered as detailed below**. This is so we can pull the faulty server out of the network.
## Report
In order to keep track of the health of the servers in the network and to improve the quality of service and reliability, we ask that you call the
MangaDex@Home report endpoint after each image you retrieve, whether successfully or not.
It is a `POST` request against `https://api.mangadex.network/report` and expects the following payload with our example above:
| Field | Type | Description |
|-----------------------------|------------|-------------------------------------------------------------------------------------|
| `url` | `string` | The full URL of the image |
| `success` | `boolean` | Whether the image was successfully retrieved |
| `cached ` | `boolean` | `true` iff the server returned an `X-Cache` header with a value starting with `HIT` |
| `bytes` | `number` | The size in bytes of the retrieved image |
| `duration` | `number` | The time in miliseconds that the complete retrieval (not TTFB) of this image took |
Examples herafter.
**Success:**
```json
POST https://api.mangadex.network/report
Content-Type: application/json
{
"url": "https://abcdefg.hijklmn.mangadex.network:12345/some-token/data/e199c7d73af7a58e8a4d0263f03db660/x1-b765e86d5ecbc932cf3f517a8604f6ac6d8a7f379b0277a117dc7c09c53d041e.png",
"success": true,
"bytes": 727040,
"duration": 235,
"cached": true
}
```
**Failure:**
```json
POST https://api.mangadex.network/report
Content-Type: application/json
{
"url": "https://abcdefg.hijklmn.mangadex.network:12345/some-token/data/e199c7d73af7a58e8a4d0263f03db660/x1-b765e86d5ecbc932cf3f517a8604f6ac6d8a7f379b0277a117dc7c09c53d041e.png",
"success": false,
"bytes": 25,
"duration": 235,
"cached": false
}
```
While not strictly necessary, this helps us monitor the network's healthiness, and we appreciate your cooperation towards this goal. If no one reports
successes and failures, we have no way to know that a given server is slow/broken, which eventually results in broken image retrieval for everyone.
# Retrieving Covers from the API
## Construct Cover URLs
### Source (original/best quality)
`https://uploads.mangadex.org/covers/{ manga.id }/{ cover.filename }`
The extension can be png, jpeg or gif.
Example: `https://uploads.mangadex.org/covers/8f3e1818-a015-491d-bd81-3addc4d7d56a/4113e972-d228-4172-a885-cb30baffff97.jpg`
### <=512px wide thumbnail
`https://uploads.mangadex.org/covers/{ manga.id }/{ cover.filename }.512.jpg`
The extension is always jpg.
Example: `https://uploads.mangadex.org/covers/8f3e1818-a015-491d-bd81-3addc4d7d56a/4113e972-d228-4172-a885-cb30baffff97.jpg.512.jpg`
### <=256px wide thumbnail
`https://uploads.mangadex.org/covers/{ manga.id }/{ cover.filename }.256.jpg`
The extension is always jpg.
Example: `https://uploads.mangadex.org/covers/8f3e1818-a015-491d-bd81-3addc4d7d56a/4113e972-d228-4172-a885-cb30baffff97.jpg.256.jpg`
## ℹ️ Where to find Cover filename ?
Look at the [Get cover operation](#operation/get-cover) endpoint to get Cover information.
Also, if you get a Manga resource, you'll have, if available a `covert_art` relationship which is the main cover id.
# Static data
## Manga publication demographic
| Value | Description |
|------------------|---------------------------|
| shounen | Manga is a Shounen |
| shoujo | Manga is a Shoujo |
| josei | Manga is a Josei |
| seinen | Manga is a Seinen |
## Manga status
| Value | Description |
|------------------|---------------------------|
| ongoing | Manga is still going on |
| completed | Manga is completed |
| hiatus | Manga is paused |
| cancelled | Manga has been cancelled |
## Manga reading status
| Value |
|------------------|
| reading |
| on_hold |
| plan\_to\_read |
| dropped |
| re\_reading |
| completed |
## Manga content rating
| Value | Description |
|------------------|---------------------------|
| safe | Safe content |
| suggestive | Suggestive content |
| erotica | Erotica content |
| pornographic | Pornographic content |
## CustomList visibility
| Value | Description |
|------------------|---------------------------|
| public | CustomList is public |
| private | CustomList is private |
## Relationship types
| Value | Description |
|------------------|--------------------------------|
| manga | Manga resource |
| chapter | Chapter resource |
| cover_art | A Cover Art for a manga `*` |
| author | Author resource |
| artist | Author resource (drawers only) |
| scanlation_group | ScanlationGroup resource |
| tag | Tag resource |
| user | User resource |
| custom_list | CustomList resource |
`*` Note, that on manga resources you get only one cover_art resource relation marking the primary cover if there are more than one.
By default this will be the latest volume's cover art. If you like to see all the covers for a given manga, use the cover search endpoint for your mangaId and select the one you wish to display.
## Manga links data
In Manga attributes you have the `links` field that is a JSON object with some strange keys, here is how to decode this object:
| Key | Related site | URL | URL details |
|-------|---------------|-----------------------------------------------------------------------------------------------|----------------------------------------------------------------|
| al | anilist | https://anilist.co/manga/`{id}` | Stored as id |
| ap | animeplanet | https://www.anime-planet.com/manga/`{slug}` | Stored as slug |
| bw | bookwalker.jp | https://bookwalker.jp/`{slug}` | Stored has "series/{id}" |
| mu | mangaupdates | https://www.mangaupdates.com/series.html?id=`{id}` | Stored has id |
| nu | novelupdates | https://www.novelupdates.com/series/`{slug}` | Stored has slug |
| kt | kitsu.io | https://kitsu.io/api/edge/manga/`{id}` or https://kitsu.io/api/edge/manga?filter[slug]={slug} | If integer, use id version of the URL, otherwise use slug one |
| amz | amazon | N/A | Stored as full URL |
| ebj | ebookjapan | N/A | Stored as full URL |
| mal | myanimelist | https://myanimelist.net/manga/{id} | Store as id |
| raw | N/A | N/A | Stored as full URL, untranslated stuff URL (original language) |
| engtl | N/A | N/A | Stored as full URL, official english licenced URL |
servers:
- url: 'https://api.mangadex.org'
description: MangaDex Api
paths:
/ping:
get:
summary: Ping the server
tags:
- Infrastructure
security: []
responses:
'200':
description: Pong
content:
application/json:
schema:
type: string
default: pong
/manga:
get:
summary: Manga list
tags:
- Manga
- Search
responses:
'200':
description: Manga list
content:
application/json:
schema:
$ref: '#/components/schemas/MangaList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-search-manga
description: Search a list of Manga.
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
- schema:
type: string
in: query
name: title
- schema:
type: array
items:
type: string
format: uuid
in: query
name: authors
- schema:
type: array
items:
type: string
format: uuid
in: query
name: artists
- schema:
type: integer
in: query
name: year
description: Year of release
- schema:
type: array
items:
type: string
format: uuid
in: query
name: includedTags
- schema:
type: string
enum:
- AND
- OR
default: AND
in: query
name: includedTagsMode
- schema:
type: array
items:
type: string
format: uuid
in: query
name: excludedTags
- schema:
type: string
enum:
- AND
- OR
default: OR
in: query
name: excludedTagsMode
- schema:
type: array
items:
type: string
enum:
- ongoing
- completed
- hiatus
- cancelled
in: query
name: status
- schema:
type: array
items:
type: string
pattern: ^[a-zA-Z\-]{2,5}$
in: query
name: originalLanguage
- schema:
type: array
items:
type: string
enum:
- shounen
- shoujo
- josei
- seinen
- none
in: query
name: publicationDemographic
- schema:
type: array
items:
type: string
format: uuid
in: query
name: ids
description: Manga ids (limited to 100 per request)
- schema:
type: array
default: [none, safe, suggestive, erotica]
items:
type: string
enum:
- none
- safe
- suggestive
- erotica
- pornographic
in: query
name: contentRating
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: createdAtSince
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: updatedAtSince
- schema:
type: object
properties:
createdAt:
type: string
enum:
- asc
- desc
updatedAt:
type: string
enum:
- asc
- desc
in: query
name: order
- schema:
type: array
items:
type: string
in: query
name: includes
security: []
post:
summary: Create Manga
operationId: post-manga
responses:
'200':
description: Manga Created
content:
application/json:
schema:
$ref: '#/components/schemas/MangaResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MangaCreate'
description: The size of the body is limited to 16KB.
description: Create a new Manga.
tags:
- Manga
'/manga/{id}/aggregate':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: Manga ID
get:
summary: Get Manga volumes & chapters
security: []
tags:
- Manga
parameters:
- schema:
type: array
items:
type: string
pattern: '^[a-zA-Z\-]{2,5}$'
in: query
name: translatedLanguage
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
result:
type: string
default: ok
volumes:
type: object
additionalProperties:
type: object
properties:
volume:
type: string
count:
type: integer
chapters:
type: object
additionalProperties:
type: object
properties:
chapter:
type: string
count:
type: integer
'/manga/{id}':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: Manga ID
get:
summary: View Manga
tags:
- Manga
parameters:
- schema:
type: array
items:
type: string
in: query
name: includes
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MangaResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Manga no content
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-manga-id
description: View Manga.
security: []
put:
summary: Update Manga
operationId: put-manga-id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MangaResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MangaEdit'
description: The size of the body is limited to 16KB.
tags:
- Manga
delete:
summary: Delete Manga
operationId: delete-manga-id
responses:
'200':
description: Manga has been deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Manga
/auth/login:
post:
summary: Login
tags:
- Auth
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LoginResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
operationId: post-auth-login
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Login'
description: The size of the body is limited to 2KB.
security: []
/auth/check:
get:
summary: Check token
tags:
- Auth
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CheckResponse'
operationId: get-auth-check
/auth/logout:
post:
summary: Logout
tags:
- Auth
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LogoutResponse'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: post-auth-logout
/auth/refresh:
post:
summary: Refresh token
tags:
- Auth
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RefreshResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: post-auth-refresh
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RefreshToken'
description: The size of the body is limited to 2KB.
security: []
/account/create:
post:
summary: Create Account
operationId: post-account-create
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAccount'
description: The size of the body is limited to 4KB.
tags:
- Account
'/account/activate/{code}':
parameters:
- schema:
type: string
pattern: '[0-9a-fA-F-]+'
name: code
in: path
required: true
get:
summary: Activate account
tags:
- Account
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AccountActivateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-account-activate-code
parameters: []
security: []
/group:
get:
summary: Scanlation Group list
tags:
- ScanlationGroup
- Search
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ScanlationGroupList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-search-group
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
- schema:
type: array
items:
type: string
format: uuid
in: query
name: ids
description: ScanlationGroup ids (limited to 100 per request)
- schema:
type: string
in: query
name: name
- schema:
type: array
items:
type: string
in: query
name: includes
security: []
post:
summary: Create Scanlation Group
operationId: post-group
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ScanlationGroupResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- ScanlationGroup
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateScanlationGroup'
description: The size of the body is limited to 8KB.
'/group/{id}':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: Scanlation Group ID
get:
summary: View Scanlation Group
tags:
- ScanlationGroup
parameters:
- schema:
type: array
items:
type: string
in: query
name: includes
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ScanlationGroupResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: ScanlationGroup not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-group-id
security: []
put:
summary: Update Scanlation Group
operationId: put-group-id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ScanlationGroupResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- ScanlationGroup
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ScanlationGroupEdit'
description: The size of the body is limited to 8KB.
delete:
summary: Delete Scanlation Group
operationId: delete-group-id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- ScanlationGroup
'/group/{id}/follow':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
post:
summary: Follow Scanlation Group
operationId: post-group-id-follow
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- ScanlationGroup
delete:
summary: Unfollow Scanlation Group
operationId: delete-group-id-follow
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- ScanlationGroup
/list:
post:
summary: Create CustomList
operationId: post-list
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CustomListResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- CustomList
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomListCreate'
description: The size of the body is limited to 8KB.
'/list/{id}':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: CustomList ID
get:
summary: Get CustomList
tags:
- CustomList
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CustomListResponse'
'404':
description: CustomList not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-list-id
security: []
put:
summary: Update CustomList
operationId: put-list-id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CustomListResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- CustomList
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomListEdit'
description: The size of the body is limited to 8KB.
delete:
summary: Delete CustomList
operationId: delete-list-id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- CustomList
'/manga/{id}/list/{listId}':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: Manga ID
- schema:
type: string
format: uuid
name: listId
in: path
required: true
description: CustomList ID
post:
summary: Add Manga in CustomList
operationId: post-manga-id-list-listId
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Manga
- CustomList
delete:
summary: Remove Manga in CustomList
operationId: delete-manga-id-list-listId
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- CustomList
- Manga
/user/list:
get:
summary: Get logged User CustomList list
tags:
- CustomList
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CustomListList'
operationId: get-user-list
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
description: This will list public and private CustomList
'/user/{id}/list':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: User ID
get:
summary: Get User's CustomList list
tags:
- CustomList
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CustomListList'
operationId: get-user-id-list
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
description: This will list only public CustomList
'/user':
get:
summary: User list
tags:
- User
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/UserList'
operationId: get-user
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
- schema:
type: array
items:
type: string
format: uuid
in: query
name: ids
description: User ids (limited to 100 per request)
- schema:
type: string
in: query
name: username
- schema:
type: object
properties:
username:
type: string
enum: ['asc', 'desc']
in: query
name: order
'/user/{id}':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: User ID
get:
summary: Get User
tags:
- User
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
operationId: get-user-id
security: []
/user/password:
post:
summary: Update User password
tags:
- User
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
operationId: post-user-password
requestBody:
content:
application/json:
schema:
description: ''
type: object
properties:
oldPassword:
type: string
minLength: 8
maxLength: 1024
newPassword:
type: string
minLength: 8
maxLength: 1024
required:
- oldPassword
- newPassword
/user/email:
post:
summary: Update User email
tags:
- User
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
operationId: post-user-email
requestBody:
content:
application/json:
schema:
description: ''
type: object
properties:
email:
type: string
format: email
required:
- email
/chapter:
parameters: []
get:
summary: Chapter list
description: Chapter list. If you want the Chapters of a given Manga, please check the feed endpoints.
operationId: get-chapter
responses:
'200':
description: Chapter list
content:
application/json:
schema:
$ref: '#/components/schemas/ChapterList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
- schema:
type: array
items:
type: string
format: uuid
in: query
name: ids
description: Chapter ids (limited to 100 per request)
- schema:
type: string
in: query
name: title
- schema:
type: array
items:
type: string
format: uuid
in: query
name: groups
- schema:
type: string
format: uuid
in: query
name: uploader
- schema:
type: string
format: uuid
in: query
name: manga
- schema:
oneOf:
- type: string
- type: array
items:
type: string
in: query
name: volume
- schema:
oneOf:
- type: string
- type: array
items:
type: string
in: query
name: chapter
- schema:
type: array
items:
type: string
pattern: '^[a-zA-Z\-]{2,5}$'
in: query
name: translatedLanguage
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: createdAtSince
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: updatedAtSince
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: publishAtSince
- schema:
type: object
properties:
createdAt:
type: string
enum:
- asc
- desc
updatedAt:
type: string
enum:
- asc
- desc
publishAt:
type: string
enum:
- asc
- desc
volume:
type: string
enum:
- asc
- desc
chapter:
type: string
enum:
- asc
- desc
in: query
name: order
- schema:
type: array
items:
type: string
in: query
name: includes
tags:
- Chapter
- Search
security: []
'/chapter/{id}':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: Chapter ID
get:
summary: Get Chapter
tags:
- Chapter
parameters:
- schema:
type: array
items:
type: string
in: query
name: includes
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ChapterResponse'
examples:
example-1:
value:
result: ok
data:
id: 497f6eca-6276-4993-bfeb-53cbbbba6f08
type: chapter
attributes:
title: string
volume: null
chapter: null
translatedLanguage: jp
data:
- x1-b765e86d5ecbc932cf3f517a8604f6ac6d8a7f379b0277a117dc7c09c53d041e.png
- x2-fc7c198880083b053bf4e8aebfc0eec1adbe52878a6c5ff08d25544a1d5502ef.png
- x3-90f15bc8b91deb0dc88473b532e42a99f93ee9e2c8073795c81b01fff428af80.png
dataSaver:
- x1-ab2b7c8f30c843aa3a53c29bc8c0e204fba4ab3e75985d761921eb6a52ff6159.jpg
- x2-3e057d937e01696adce2ac2865f62f6f6a15f03cef43d929b88e99a4b8482e03.jpg
- x3-128742088f99806b022bbc8006554456f2a20d0d176d7f3264a65ff9a549d0dd.jpg
uploader: 4df808f4-cdf8-4d1c-80e6-4af8e6ce09b8
version: 1
groups:
- 497f6eca-6276-4993-bfeb-53cbbbba6f08
manga: e7116dd3-e4ad-4d10-a3ef-6a64d730c341
relationships:
- id: 497f6eca-6276-4993-bfeb-53cbbbba6f08
type: string
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Chapter not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-chapter-id
security: []
put:
summary: Update Chapter
operationId: put-chapter-id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ChapterResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ChapterEdit'
description: The size of the body is limited to 32KB.
tags:
- Chapter
delete:
summary: Delete Chapter
operationId: delete-chapter-id
responses:
'200':
description: Chapter has been deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Chapter
/user/follows/manga/feed:
get:
summary: Get logged User followed Manga feed (Chapter list)
tags:
- Manga
- Chapter
- Feed
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ChapterList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: User not Found
operationId: get-user-follows-manga-feed
parameters:
- schema:
type: integer
default: 100
minimum: 1
maximum: 500
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
- schema:
type: array
items:
type: string
pattern: '^[a-zA-Z\-]{2,5}$'
in: query
name: translatedLanguage
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: createdAtSince
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: updatedAtSince
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: publishAtSince
- schema:
type: object
properties:
createdAt:
type: string
enum:
- asc
- desc
updatedAt:
type: string
enum:
- asc
- desc
publishAt:
type: string
enum:
- asc
- desc
volume:
type: string
enum:
- asc
- desc
chapter:
type: string
enum:
- asc
- desc
in: query
name: order
'/list/{id}/feed':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
get:
summary: CustomList Manga feed
tags:
- CustomList
- Feed
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ChapterList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-list-id-feed
parameters:
- schema:
type: integer
default: 100
minimum: 1
maximum: 500
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
- schema:
type: array
items:
type: string
pattern: '^[a-zA-Z\-]{2,5}$'
in: query
name: translatedLanguage
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: createdAtSince
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: updatedAtSince
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: publishAtSince
- schema:
type: object
properties:
volume:
type: string
enum:
- asc
- desc
chapter:
type: string
enum:
- asc
- desc
in: query
name: order
'/manga/{id}/follow':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
delete:
summary: Unfollow Manga
operationId: delete-manga-id-follow
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Manga
post:
summary: Follow Manga
operationId: post-manga-id-follow
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Manga
/cover:
get:
summary: CoverArt list
tags:
- Cover
- Search
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CoverList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-cover
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
- schema:
type: array
items:
type: string
format: uuid
in: query
name: manga
description: Manga ids (limited to 100 per request)
- schema:
type: array
items:
type: string
format: uuid
in: query
name: ids
description: Covers ids (limited to 100 per request)
- schema:
type: array
items:
type: string
format: uuid
in: query
name: uploaders
description: User ids (limited to 100 per request)
- schema:
type: object
properties:
createdAt:
type: string
enum:
- asc
- desc
updatedAt:
type: string
enum:
- asc
- desc
volume:
type: string
enum:
- asc
- desc
in: query
name: order
- schema:
type: array
items:
type: string
in: query
name: includes
security: []
/cover/{mangaId}:
post:
summary: Upload Cover
tags:
- Cover
- Upload
operationId: upload-cover
parameters:
- schema:
type: string
format: uuid
name: mangaId
in: path
required: true
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CoverResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/cover/{coverId}:
parameters:
- schema:
type: string
format: uuid
name: coverId
in: path
required: true
get:
summary: Get Cover
tags:
- Cover
operationId: get-cover-id
parameters:
- schema:
type: array
items:
type: string
in: query
name: includes
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CoverResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: CoverArt not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security: []
put:
summary: Edit Cover
tags:
- Cover
operationId: edit-cover
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CoverEdit'
description: The size of the body is limited to 2KB.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CoverResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
summary: Delete Cover
tags:
- Cover
operationId: delete-cover
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/author:
get:
summary: Author list
tags:
- Author
- Search
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-author
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
- schema:
type: array
items:
type: string
format: uuid
in: query
name: ids
description: Author ids (limited to 100 per request)
- schema:
type: string
in: query
name: name
- schema:
type: object
properties:
name:
type: string
enum: ['asc', 'desc']
in: query
name: order
- schema:
type: array
items:
type: string
in: query
name: includes
security: []
post:
summary: Create Author
operationId: post-author
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Author
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorCreate'
description: The size of the body is limited to 2KB.
'/author/{id}':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: Author ID
get:
summary: Get Author
tags:
- Author
parameters:
- schema:
type: array
items:
type: string
in: query
name: includes
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Author no content
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-author-id
security: []
put:
summary: Update Author
operationId: put-author-id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorEdit'
description: The size of the body is limited to 2KB.
tags:
- Author
delete:
summary: Delete Author
operationId: delete-author-id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Author
/legacy/mapping:
post:
summary: Legacy ID mapping
operationId: post-legacy-mapping
responses:
'200':
description: This response will give you an array of mappings of resource identifiers ; the `data.attributes.newId` field corresponds to the new UUID.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/MappingIdResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Legacy
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MappingIdBody'
description: The size of the body is limited to 10KB.
security: []
'/manga/{id}/feed':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
description: Manga ID
get:
summary: Manga feed
tags:
- Manga
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ChapterList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-manga-id-feed
parameters:
- schema:
type: integer
default: 100
minimum: 1
maximum: 500
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
- schema:
type: array
items:
type: string
pattern: '^[a-zA-Z\-]{2,5}$'
in: query
name: translatedLanguage
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: createdAtSince
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: updatedAtSince
- schema:
type: string
description: "DateTime string with following format: YYYY-MM-DDTHH:MM:SS"
pattern: ^\d{4}-[0-1]\d-([0-2]\d|3[0-1])T([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$
in: query
name: publishAtSince
- schema:
type: object
properties:
volume:
type: string
enum:
- asc
- desc
chapter:
type: string
enum:
- asc
- desc
in: query
name: order
- schema:
type: array
items:
type: string
in: query
name: includes
security: []
'/manga/{id}/read':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
get:
summary: Manga read markers
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
result:
type: string
enum:
- ok
data:
type: array
items:
type: string
format: uuid
examples:
example-1:
value:
result: ok
data:
- 00057883-357b-4734-9469-52967e59ef4c
- 000b7978-d9bd-49ec-a8f6-a0737368415f
- 0015b621-a175-47f5-81fb-5976c88e18c4
operationId: get-manga-chapter-readmarkers
description: A list of chapter ids that are marked as read for the specified manga
tags:
- Manga
'/manga/read':
get:
summary: Manga read markers
parameters:
- schema:
type: array
items:
type: string
format: uuid
in: query
name: ids
description: Manga ids
required: true
- name: grouped
in: query
schema:
type: boolean
description: Group results by manga ids
required: false
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
result:
type: string
enum:
- ok
data:
oneOf:
- type: array
items:
type: string
format: uuid
- type: object
additionalProperties:
type: array
items:
type: string
format: uuid
examples:
example-default:
value:
result: ok
data:
- 00057883-357b-4734-9469-52967e59ef4c
- 000b7978-d9bd-49ec-a8f6-a0737368415f
- 0015b621-a175-47f5-81fb-5976c88e18c4
example-grouped:
value:
result: ok
data:
40529c30-0d25-4da5-a25a-f71a961ab855:
- 00057883-357b-4734-9469-52967e59ef4c
- 000b7978-d9bd-49ec-a8f6-a0737368415f
- 0015b621-a175-47f5-81fb-5976c88e18c4
operationId: get-manga-chapter-readmarkers-2
description: A list of chapter ids that are marked as read for the given manga ids
tags:
- Manga
'/chapter/{id}/read':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
post:
summary: Mark Chapter read
tags:
- Chapter
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
result:
type: string
enum:
- ok
- error
operationId: chapter-id-read
description: Mark chapter as read for the current user
delete:
summary: Mark Chapter unread
tags:
- Chapter
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
result:
type: string
enum:
- ok
- error
operationId: chapter-id-unread
description: Mark chapter as unread for the current user
/manga/random:
get:
summary: Get a random Manga
tags:
- Manga
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MangaResponse'
operationId: get-manga-random
parameters:
- schema:
type: array
items:
type: string
in: query
name: includes
security: []
'/at-home/server/{chapterId}':
parameters:
- schema:
type: string
format: uuid
name: chapterId
in: path
required: true
description: Chapter ID
get:
summary: Get MangaDex@Home server URL
tags:
- AtHome
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
baseUrl:
type: string
description: |-
The base URL to construct final image URLs from.
The URL returned is valid for the requested chapter only, and for a duration of 15 minutes from the time of the response.
example:
baseUrl: https://abcdef.xyz123.mangadex.network:12345/some-temporary-access-token
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: get-at-home-server-chapterId
parameters:
- schema:
type: boolean
default: false
in: query
name: forcePort443
description: |-
Force selecting from MangaDex@Home servers that use the standard HTTPS port 443.
While the conventional port for HTTPS traffic is 443 and servers are encouraged to use it, it is not a hard requirement as it technically isn't
anything special.
However, some misbehaving school/office network will at time block traffic to non-standard ports, and setting this flag to `true` will ensure
selection of a server that uses these.
security: []
/manga/tag:
get:
summary: Tag list
tags:
- Manga
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TagResponse'
operationId: get-manga-tag
security: []
/account/activate/resend:
post:
summary: Resend Activation code
operationId: post-account-activate-resend
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AccountActivateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Account
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SendAccountActivationCode'
description: The size of the body is limited to 1KB.
security: []
/account/recover:
post:
summary: Recover given Account
operationId: post-account-recover
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AccountActivateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: ''
tags:
- Account
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SendAccountActivationCode'
description: The size of the body is limited to 1KB.
security: []
'/account/recover/{code}':
parameters:
- schema:
type: string
name: code
in: path
required: true
post:
summary: Complete Account recover
operationId: post-account-recover-code
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AccountActivateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Account
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RecoverCompleteBody'
description: The size of the body is limited to 2KB.
security: []
/user/me:
get:
summary: Logged User details
tags:
- User
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
operationId: get-user-me
/user/follows/group:
get:
summary: Get logged User followed Groups
tags:
- ScanlationGroup
- User
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ScanlationGroupList'
operationId: get-user-follows-group
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
/user/follows/user:
get:
summary: Get logged User followed User list
tags:
- User
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/UserList'
operationId: get-user-follows-user
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
/user/follows/manga:
get:
summary: Get logged User followed Manga list
tags:
- Manga
- User
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MangaList'
operationId: get-user-follows-manga
parameters:
- schema:
type: integer
default: 10
minimum: 1
maximum: 100
in: query
name: limit
- schema:
type: integer
minimum: 0
in: query
name: offset
/manga/status:
get:
summary: Get all Manga reading status for logged User
operationId: get-manga-status
tags:
- Manga
parameters:
- schema:
type: string
enum:
- reading
- on_hold
- plan_to_read
- dropped
- re_reading
- completed
in: query
name: status
description: Used to filter the list by given status
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
result:
type: string
default: ok
statuses:
type: object
additionalProperties:
type: string
enum:
- reading
- on_hold
- plan_to_read
- dropped
- re_reading
- completed
examples:
unfiltered:
summary: /manga/status
value:
result: ok
statuses:
b019ea5d-5fe6-44d4-abbc-f546f210884d: reading
2394a5c7-1d2e-461f-acde-18726b9e37d6: dropped
filtered:
summary: /manga/status?status=reading
value:
result: ok
statuses:
b019ea5d-5fe6-44d4-abbc-f546f210884d: reading
'/manga/{id}/status':
parameters:
- schema:
type: string
format: uuid
name: id
in: path
required: true
get:
summary: Get a Manga reading status
operationId: get-manga-id-status
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
result:
type: string
default: ok
status:
type: string
enum:
- reading
- on_hold
- plan_to_read
- dropped
- re_reading
- completed
example:
result: ok
status: reading
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Manga
post:
summary: Update Manga reading status
operationId: post-manga-id-status
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
tags:
- Manga
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMangaStatus'
description: Using a `null` value in `status` field will remove the Manga reading status. The size of the body is limited to 2KB.
/captcha/solve:
post:
summary: Solve Captcha
tags:
- Captcha
responses:
'200':
description: 'OK: Captcha has been solved'
content:
application/json:
schema:
type: object
properties:
result:
type: string
enum:
- ok
- error
'400':
description: 'Bad Request: Captcha challenge result was wrong, the Captcha Verification service was down or other, refer to the error message and the errorCode inside the error context'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: post-captcha-solve
requestBody:
content:
application/json:
schema:
description: ''
type: object
properties:
captchaChallenge:
type: string
minLength: 1
required:
- captchaChallenge
examples:
example-1:
value:
captchaChallenge: string
description: |-
Captchas can be solved explicitly through this endpoint, another way is to add a `X-Captcha-Result` header to any request. The same logic will verify the captcha and is probably more convenient because it takes one less request.
Authentication is optional. Captchas are tracked for both the client ip and for the user id, if you are logged in you want to send your session token but that is not required.
security:
- Bearer: []
components:
schemas:
MangaRequest:
description: ''
type: object
title: MangaRequest
properties:
title:
$ref: '#/components/schemas/LocalizedString'
altTitles:
type: array
items:
$ref: '#/components/schemas/LocalizedString'
description:
$ref: '#/components/schemas/LocalizedString'
authors:
type: array
items:
type: string
format: uuid
artists:
type: array
items:
type: string
format: uuid
links:
type: object
additionalProperties:
type: string
originalLanguage:
type: string
pattern: '^[a-zA-Z\-]{2,5}$'
lastVolume:
type: string
nullable: true
lastChapter:
type: string
nullable: true
publicationDemographic:
type: string
nullable: true
enum:
- shounen
- shoujo
- josei
- seinen
status:
type: string
nullable: true
enum:
- ongoing
- completed
- hiatus
- cancelled
year:
type: integer
nullable: true
maximum: 9999
minimum: 1
description: Year of release
contentRating:
type: string
nullable: true
enum:
- safe
- suggestive
- erotica
- pornographic
modNotes:
type: string
nullable: true
version:
type: integer
minimum: 1
LocalizedString:
type: object
title: LocalizedString
additionalProperties:
type: string
pattern: "^[a-z]{2,8}$"
MangaResponse:
title: MangaResponse
type: object
properties:
result:
type: string
enum:
- ok
- error
data:
$ref: '#/components/schemas/Manga'
relationships:
type: array
items:
$ref: '#/components/schemas/Relationship'
ChapterResponse:
title: ChapterResponse
type: object
properties:
result:
type: string
enum:
- ok
- error
data:
$ref: '#/components/schemas/Chapter'
relationships:
type: array
items:
$ref: '#/components/schemas/Relationship'
Relationship:
title: Relationship
type: object
properties:
id:
type: string
format: uuid
type:
type: string
attributes:
description: If Reference Expansion is applied, contains objects attributes
nullable: true
type: object
Chapter:
title: Chapter
type: object
x-examples:
example:
id: a05de006-df86-4fe1-9d20-32664a78c1cc
type: chapter
attributes:
title: Chapter title
volume: 1
chapter: '15.1'
uploader:
id: 23d52040-3a77-4ffe-84dd-6dbf259e32ed
type: user
attributes: []
manga:
id: 439ea5a9-e922-44d1-b9c1-a3e1158bd55f
type: manga
attributes: []
groups:
- id: cb4cf9ac-ee21-486f-ab0f-21b17ba0ab7f
type: scanlation_group
attributes: []
translatedLanguage: en
data:
- x1-b765e86d5ecbc932cf3f517a8604f6ac6d8a7f379b0277a117dc7c09c53d041e.png
- x2-fc7c198880083b053bf4e8aebfc0eec1adbe52878a6c5ff08d25544a1d5502ef.png
- x3-90f15bc8b91deb0dc88473b532e42a99f93ee9e2c8073795c81b01fff428af80.png
dataSaver:
- x1-ab2b7c8f30c843aa3a53c29bc8c0e204fba4ab3e75985d761921eb6a52ff6159.jpg
- x2-3e057d937e01696adce2ac2865f62f6f6a15f03cef43d929b88e99a4b8482e03.jpg
- x3-128742088f99806b022bbc8006554456f2a20d0d176d7f3264a65ff9a549d0dd.jpg
version: 1
properties:
id:
type: string
format: uuid
type:
type: string
enum:
- chapter
attributes:
$ref: '#/components/schemas/ChapterAttributes'
Manga:
title: Manga
type: object
x-examples:
example:
id: a05de006-df86-4fe1-9d20-32664a78c1cc
type: manga
attributes:
title:
en: English title
de: Deutscher Titel
jp: 日本語題名
altTitles:
- en: Secondary english title
- en: Third english title
- romaji: Romaji title
description:
en: Nice description
isLocked: false
originalLanguage: jp
year: 2020
version: 1
properties:
id:
type: string
format: uuid
type:
type: string
enum:
- manga
attributes:
$ref: '#/components/schemas/MangaAttributes'
ErrorResponse:
title: ErrorResponse
type: object
properties:
result:
type: string
default: error
errors:
type: array
items:
$ref: '#/components/schemas/Error'
Error:
title: Error
type: object
properties:
id:
type: string
status:
type: integer
title:
type: string
detail:
type: string
ChapterAttributes:
title: ChapterAttributes
type: object
properties:
title:
type: string
maxLength: 255
volume:
type: string
nullable: true
chapter:
type: string
nullable: true
maxLength: 8
translatedLanguage:
type: string
pattern: '^[a-zA-Z\-]{2,5}$'
hash:
type: string
data:
type: array
items:
type: string
dataSaver:
type: array
items:
type: string
uploader:
type: string
format: uuid
version:
type: integer
minimum: 1
createdAt:
type: string
updatedAt:
type: string
publishAt:
type: string
MangaAttributes:
title: MangaAttributes
type: object
properties:
title:
$ref: '#/components/schemas/LocalizedString'
altTitles:
type: array
items:
$ref: '#/components/schemas/LocalizedString'
description:
$ref: '#/components/schemas/LocalizedString'
isLocked:
type: boolean
links:
type: object
additionalProperties:
type: string
originalLanguage:
type: string
lastVolume:
type: string
nullable: true
lastChapter:
type: string
nullable: true
publicationDemographic:
type: string
nullable: true
status:
type: string
nullable: true
year:
type: integer
nullable: true
description: Year of release
contentRating:
type: string
nullable: true
tags:
type: array
items:
$ref: '#/components/schemas/Tag'
version:
type: integer
minimum: 1
createdAt:
type: string
updatedAt:
type: string
MangaCreate:
allOf:
- $ref: '#/components/schemas/MangaRequest'
- required:
- title
MangaEdit:
allOf:
- $ref: '#/components/schemas/MangaRequest'
- required:
- version
ChapterEdit:
allOf:
- $ref: '#/components/schemas/ChapterRequest'
- required:
- version
Response:
title: Response
type: object
properties:
result:
type: string
enum:
- ok
- error
Login:
type: object
title: Login
additionalProperties: false
properties:
username:
type: string
minLength: 1
maxLength: 64
password:
type: string
minLength: 8
maxLength: 1024
required:
- username
- password
LoginResponse:
title: LoginResponse
type: object
properties:
result:
type: string
enum:
- ok
- error
token:
type: object
properties:
session:
type: string
refresh:
type: string
CheckResponse:
title: CheckResponse
type: object
description: ''
properties:
result:
type: string
default: ok
isAuthenticated:
type: boolean
roles:
type: array
items:
type: string
permissions:
type: array
items:
type: string
LogoutResponse:
title: LogoutResponse
type: object
properties:
result:
type: string
enum:
- ok
- error
RefreshToken:
type: object
title: RefreshToken
additionalProperties: false
properties:
token:
type: string
minLength: 1
required:
- token
RefreshResponse:
title: RefreshResponse
type: object
properties:
result:
type: string
enum:
- ok
- error
token:
type: object
properties:
session:
type: string
refresh:
type: string
message:
type: string
required:
- result
AccountActivateResponse:
title: AccountActivateResponse
type: object
properties:
result:
type: string
enum:
- ok
CreateAccount:
title: CreateAccount
type: object
properties:
username:
type: string
minLength: 1
maxLength: 64
password:
type: string
minLength: 8
maxLength: 1024
email:
type: string
format: email
required:
- username
- password
- email
ScanlationGroupResponse:
title: ScanlationGroupResponse
type: object
properties:
result:
type: string
enum:
- ok
data:
$ref: '#/components/schemas/ScanlationGroup'
relationships:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
type:
type: string
ScanlationGroup:
title: ScanlationGroup
type: object
properties:
id:
type: string
format: uuid
type:
type: string
enum:
- scanlation_group
attributes:
$ref: '#/components/schemas/ScanlationGroupAttributes'
ScanlationGroupAttributes:
title: ScanlationGroupAttributes
type: object
properties:
name:
type: string
leader:
$ref: '#/components/schemas/User'
version:
type: integer
minimum: 1
createdAt:
type: string
updatedAt:
type: string
User:
title: User
type: object
properties:
id:
type: string
format: uuid
type:
type: string
enum:
- user
attributes:
$ref: '#/components/schemas/UserAttributes'
UserAttributes:
title: UserAttributes
type: object
properties:
username:
type: string
version:
type: integer
minimum: 1
CreateScanlationGroup:
title: CreateScanlationGroup
type: object
properties:
name:
type: string
leader:
type: string
format: uuid
members:
type: array
items:
type: string
format: uuid
version:
type: integer
minimum: 1
required:
- name
ScanlationGroupEdit:
title: ScanlationGroupEdit
type: object
properties:
name:
type: string
leader:
type: string
format: uuid
members:
type: array
items:
type: string
format: uuid
version:
type: integer
minimum: 1
required:
- version
CustomListCreate:
title: CustomListCreate
type: object
properties:
name:
type: string
visibility:
type: string
enum:
- public
- private
manga:
type: array
items:
type: string
format: uuid
version:
type: integer
minimum: 1
required:
- name
CustomListEdit:
title: CustomListEdit
type: object
properties:
name:
type: string
visibility:
type: string
enum:
- public
- private
manga:
type: array
items:
type: string
format: uuid
version:
type: integer
minimum: 1
required:
- version
CustomListResponse:
title: CustomListResponse
type: object
properties:
result:
type: string
enum:
- ok
- error
data:
$ref: '#/components/schemas/CustomList'
relationships:
type: array
items:
$ref: '#/components/schemas/Relationship'
CustomList:
title: CustomList
type: object
properties:
id:
type: string
format: uuid
type:
type: string
enum:
- custom_list
attributes:
$ref: '#/components/schemas/CustomListAttributes'
CustomListAttributes:
title: CustomListAttributes
type: object
properties:
name:
type: string
visibility:
type: string
enum:
- private
- public
owner:
$ref: '#/components/schemas/User'
version:
type: integer
minimum: 1
CoverResponse:
title: CoverResponse
type: object
properties:
result:
type: string
data:
$ref: '#/components/schemas/Cover'
relationships:
type: array
items:
$ref: '#/components/schemas/Relationship'
Cover:
title: Cover
type: object
properties:
id:
type: string
format: uuid
type:
type: string
enum:
- cover_art
attributes:
$ref: '#/components/schemas/CoverAttributes'
CoverAttributes:
title: CoverAttributes
type: object
properties:
volume:
type: string
nullable: true
fileName:
type: string
description:
type: string
nullable: true
version:
type: integer
minimum: 1
createdAt:
type: string
updatedAt:
type: string
CoverEdit:
title: CoverEdit
type: object
properties:
volume:
type: string
nullable: true
minLength: 0
maxLength: 8
description:
type: string
nullable: true
minLength: 0
maxLength: 512
version:
type: integer
minimum: 1
required:
- version
- volume
AuthorResponse:
title: AuthorResponse
type: object
properties:
result:
type: string
data:
$ref: '#/components/schemas/Author'
relationships:
type: array
items:
$ref: '#/components/schemas/Relationship'
Author:
title: Author
type: object
properties:
id:
type: string
format: uuid
type:
type: string
enum:
- author
attributes:
$ref: '#/components/schemas/AuthorAttributes'
AuthorAttributes:
title: AuthorAttributes
type: object
properties:
name:
type: string
imageUrl:
type: string
biography:
type: object
additionalProperties:
type: string
version:
type: integer
minimum: 1
createdAt:
type: string
updatedAt:
type: string
AuthorEdit:
title: AuthorEdit
type: object
properties:
name:
type: string
version:
type: integer
minimum: 1
required:
- version
AuthorCreate:
type: object
title: AuthorCreate
additionalProperties: false
properties:
name:
type: string
version:
type: integer
minimum: 1
required:
- name
MappingIdBody:
type: object
title: MappingIdBody
additionalProperties: false
properties:
type:
type: string
enum:
- group
- manga
- chapter
- tag
ids:
type: array
items:
type: integer
MappingIdResponse:
title: MappingIdResponse
type: object
properties:
result:
type: string
enum:
- ok
data:
$ref: '#/components/schemas/MappingId'
relationships:
type: array
items:
$ref: '#/components/schemas/Relationship'
MappingId:
title: MappingId
type: object
properties:
id:
type: string
format: uuid
type:
type: string
enum:
- mapping_id
attributes:
$ref: '#/components/schemas/MappingIdAttributes'
MappingIdAttributes:
title: MappingIdAttributes
type: object
properties:
type:
type: string
enum:
- manga
- chapter
- group
- tag
legacyId:
type: integer
newId:
type: string
format: uuid
TagResponse:
title: TagResponse
type: object
properties:
result:
type: string
enum:
- ok
data:
$ref: '#/components/schemas/Tag'
relationships:
type: array
items:
$ref: '#/components/schemas/Relationship'
Tag:
title: Tag
type: object
properties:
id:
type: string
format: uuid
type:
type: string
enum:
- tag
attributes:
$ref: '#/components/schemas/TagAttributes'
TagAttributes:
title: TagAttributes
type: object
properties:
name:
$ref: '#/components/schemas/LocalizedString'
description:
$ref: '#/components/schemas/LocalizedString'
group:
type: string
version:
type: integer
minimum: 1
UserResponse:
title: UserResponse
type: object
properties:
result:
type: string
enum:
- ok
data:
$ref: '#/components/schemas/User'
relationships:
type: array
items:
$ref: '#/components/schemas/Relationship'
SendAccountActivationCode:
type: object
title: SendAccountActivationCode
additionalProperties: false
properties:
email:
type: string
format: email
required:
- email
RecoverCompleteBody:
type: object
title: RecoverCompleteBody
additionalProperties: false
properties:
newPassword:
type: string
minLength: 8
maxLength: 1024
required:
- newPassword
UpdateMangaStatus:
title: UpdateMangaStatus
type: object
properties:
status:
type: string
nullable: true
enum:
- reading
- on_hold
- plan_to_read
- dropped
- re_reading
- completed
required:
- status
ChapterRequest:
title: ChapterRequest
type: object
properties:
title:
type: string
maxLength: 255
volume:
type: string
nullable: true
chapter:
type: string
nullable: true
maxLength: 8
translatedLanguage:
type: string
pattern: '^[a-zA-Z\-]{2,5}$'
data:
type: array
items:
type: string
dataSaver:
type: array
items:
type: string
version:
type: integer
minimum: 1
CoverList:
title: CoverList
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/CoverResponse'
limit:
type: integer
offset:
type: integer
total:
type: integer
AuthorList:
title: AuthorList
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/AuthorResponse'
limit:
type: integer
offset:
type: integer
total:
type: integer
ChapterList:
title: ChapterList
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/ChapterResponse'
limit:
type: integer
offset:
type: integer
total:
type: integer
ScanlationGroupList:
title: ScanlationGroupList
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/ScanlationGroupResponse'
limit:
type: integer
offset:
type: integer
total:
type: integer
MangaList:
title: MangaList
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/MangaResponse'
limit:
type: integer
offset:
type: integer
total:
type: integer
CustomListList:
title: CustomListList
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/CustomListResponse'
limit:
type: integer
offset:
type: integer
total:
type: integer
UserList:
title: UserList
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/UserResponse'
limit:
type: integer
offset:
type: integer
total:
type: integer
securitySchemes:
Bearer:
type: http
scheme: bearer
security:
- Bearer: []