{ "openapi": "3.1.0", "info": { "title": "Mangarr API", "description": "", "version": "1.0.0" }, "servers": [ { "url": "/", "description": "" } ], "paths": { "/api/jobs": { "get": { "operationId": "api_jobs_get_collection", "tags": [ "Job" ], "responses": { "200": { "description": "Job collection", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Job" } } }, "application/ld+json": { "schema": { "type": "object", "properties": { "hydra:member": { "type": "array", "items": { "$ref": "#/components/schemas/Job.jsonld" } }, "hydra:totalItems": { "type": "integer", "minimum": 0 }, "hydra:view": { "type": "object", "properties": { "@id": { "type": "string", "format": "iri-reference" }, "@type": { "type": "string" }, "hydra:first": { "type": "string", "format": "iri-reference" }, "hydra:last": { "type": "string", "format": "iri-reference" }, "hydra:previous": { "type": "string", "format": "iri-reference" }, "hydra:next": { "type": "string", "format": "iri-reference" } }, "example": { "@id": "string", "type": "string", "hydra:first": "string", "hydra:last": "string", "hydra:previous": "string", "hydra:next": "string" } }, "hydra:search": { "type": "object", "properties": { "@type": { "type": "string" }, "hydra:template": { "type": "string" }, "hydra:variableRepresentation": { "type": "string" }, "hydra:mapping": { "type": "array", "items": { "type": "object", "properties": { "@type": { "type": "string" }, "variable": { "type": "string" }, "property": { "type": [ "string", "null" ] }, "required": { "type": "boolean" } } } } } } }, "required": [ "hydra:member" ] } }, "text/html": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Job" } } }, "application/hal+json": { "schema": { "type": "object", "properties": { "_embedded": { "type": "array", "items": { "$ref": "#/components/schemas/Job.jsonhal" } }, "totalItems": { "type": "integer", "minimum": 0 }, "itemsPerPage": { "type": "integer", "minimum": 0 }, "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } }, "first": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } }, "last": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } }, "next": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } }, "previous": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } } }, "required": [ "_links", "_embedded" ] } } } } }, "summary": "Retrieves the collection of Job resources.", "description": "Retrieves the collection of Job resources.", "parameters": [ { "name": "status", "in": "query", "description": "Filtrer par status (s\u00e9par\u00e9s par des virgules pour plusieurs statuts, ex: \"pending,in_progress\" ou sous forme de tableau avec \"status[]=\")", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "oneOf": [ { "type": "string", "example": "pending,in_progress" }, { "type": "array", "items": { "type": "string", "enum": [ "pending", "in_progress", "completed", "failed", "cancelled" ] }, "example": [ "pending", "in_progress" ] } ] }, "style": "form", "explode": false, "allowReserved": false }, { "name": "type", "in": "query", "description": "Filtrer par type de job (ex: scraping_job)", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string" }, "style": "form", "explode": false, "allowReserved": false }, { "name": "createdAfter", "in": "query", "description": "Date de cr\u00e9ation minimum (format ISO8601)", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "format": "date-time" }, "style": "form", "explode": false, "allowReserved": false }, { "name": "createdBefore", "in": "query", "description": "Date de cr\u00e9ation maximum (format ISO8601)", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "format": "date-time" }, "style": "form", "explode": false, "allowReserved": false }, { "name": "page", "in": "query", "description": "Num\u00e9ro de la page", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer", "default": 1, "minimum": 1 }, "style": "form", "explode": false, "allowReserved": false }, { "name": "limit", "in": "query", "description": "Nombre d'\u00e9l\u00e9ments par page", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer", "default": 20, "minimum": 1 }, "style": "form", "explode": false, "allowReserved": false }, { "name": "sortBy", "in": "query", "description": "Champ de tri", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "enum": [ "createdAt", "type", "status" ], "default": "createdAt" }, "style": "form", "explode": false, "allowReserved": false }, { "name": "sortOrder", "in": "query", "description": "Ordre de tri", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "enum": [ "ASC", "DESC" ], "default": "DESC" }, "style": "form", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/manga/chapters/fetch": { "post": { "operationId": "api_mangachaptersfetch_post", "tags": [ "MangaChapters" ], "responses": { "202": { "description": "MangaChapters resource created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MangaChapters" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/MangaChapters.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/MangaChapters" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/MangaChapters.jsonhal" } } }, "links": {} }, "400": { "description": "Invalid input" }, "422": { "description": "Unprocessable entity" } }, "summary": "Creates a MangaChapters resource.", "description": "Creates a MangaChapters resource.", "parameters": [], "requestBody": { "description": "The new MangaChapters resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MangaChapters" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/MangaChapters.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/MangaChapters" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/MangaChapters.jsonhal" } } }, "required": true }, "deprecated": false }, "parameters": [] }, "/api/mangadex-search": { "get": { "operationId": "api_mangadex-search_get", "tags": [ "Mangadex" ], "responses": { "200": { "description": "Mangadex resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Mangadex.MangaSearchCollection" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/Mangadex.MangaSearchCollection.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/Mangadex.MangaSearchCollection" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/Mangadex.MangaSearchCollection.jsonhal" } } } }, "404": { "description": "Resource not found" } }, "summary": "Retrieves a Mangadex resource.", "description": "Retrieves a Mangadex resource.", "parameters": [ { "name": "title", "in": "query", "description": "The title to search for", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string" }, "style": "form", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/mangas": { "get": { "operationId": "api_mangas_get_collection", "tags": [ "Manga" ], "responses": { "200": { "description": "Manga collection", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Manga.MangaCollection" } } }, "application/ld+json": { "schema": { "type": "object", "properties": { "hydra:member": { "type": "array", "items": { "$ref": "#/components/schemas/Manga.MangaCollection.jsonld" } }, "hydra:totalItems": { "type": "integer", "minimum": 0 }, "hydra:view": { "type": "object", "properties": { "@id": { "type": "string", "format": "iri-reference" }, "@type": { "type": "string" }, "hydra:first": { "type": "string", "format": "iri-reference" }, "hydra:last": { "type": "string", "format": "iri-reference" }, "hydra:previous": { "type": "string", "format": "iri-reference" }, "hydra:next": { "type": "string", "format": "iri-reference" } }, "example": { "@id": "string", "type": "string", "hydra:first": "string", "hydra:last": "string", "hydra:previous": "string", "hydra:next": "string" } }, "hydra:search": { "type": "object", "properties": { "@type": { "type": "string" }, "hydra:template": { "type": "string" }, "hydra:variableRepresentation": { "type": "string" }, "hydra:mapping": { "type": "array", "items": { "type": "object", "properties": { "@type": { "type": "string" }, "variable": { "type": "string" }, "property": { "type": [ "string", "null" ] }, "required": { "type": "boolean" } } } } } } }, "required": [ "hydra:member" ] } }, "text/html": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Manga.MangaCollection" } } }, "application/hal+json": { "schema": { "type": "object", "properties": { "_embedded": { "type": "array", "items": { "$ref": "#/components/schemas/Manga.MangaCollection.jsonhal" } }, "totalItems": { "type": "integer", "minimum": 0 }, "itemsPerPage": { "type": "integer", "minimum": 0 }, "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } }, "first": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } }, "last": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } }, "next": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } }, "previous": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } } }, "required": [ "_links", "_embedded" ] } } } } }, "summary": "Retrieves the collection of Manga resources.", "description": "Retrieves the collection of Manga resources.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "allowEmptyValue": true, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/mangas/by-id/{id}": { "get": { "operationId": "api_mangasby-id_id_get", "tags": [ "Manga" ], "responses": { "200": { "description": "Manga resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Manga.MangaDetail" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/Manga.MangaDetail.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/Manga.MangaDetail" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/Manga.MangaDetail.jsonhal" } } } }, "404": { "description": "Resource not found" } }, "summary": "Retrieves a Manga resource.", "description": "Retrieves a Manga resource.", "parameters": [ { "name": "id", "in": "path", "description": "The manga identifier", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string" }, "style": "simple", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/mangas/by-slug/{slug}": { "get": { "operationId": "get_manga_by_slug", "tags": [ "Manga" ], "responses": { "200": { "description": "Manga resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Manga.MangaDetail" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/Manga.MangaDetail.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/Manga.MangaDetail" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/Manga.MangaDetail.jsonhal" } } } }, "404": { "description": "Resource not found" } }, "summary": "Retrieves a Manga resource.", "description": "Retrieves a Manga resource.", "parameters": [ { "name": "slug", "in": "path", "description": "GetMangaBySlugResource identifier", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string" }, "style": "simple", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/mangas/create": { "post": { "operationId": "api_mangascreate_post", "tags": [ "Manga" ], "responses": { "201": { "description": "Manga resource created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Manga" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/Manga.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/Manga" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/Manga.jsonhal" } } }, "links": {} }, "400": { "description": "Invalid input" }, "422": { "description": "Unprocessable entity" } }, "summary": "Create a new manga directly", "description": "Creates a new manga with provided data", "parameters": [], "requestBody": { "description": "The new Manga resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Manga" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/Manga.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/Manga" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/Manga.jsonhal" } } }, "required": true }, "deprecated": false }, "parameters": [] }, "/api/mangas/create-from-mangadex": { "post": { "operationId": "api_mangascreate-from-mangadex_post", "tags": [ "Manga" ], "responses": { "201": { "description": "Manga resource created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Manga" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/Manga.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/Manga" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/Manga.jsonhal" } } }, "links": {} }, "400": { "description": "Invalid input" }, "422": { "description": "Unprocessable entity" } }, "summary": "Create a new manga from Mangadex", "description": "Creates a new manga by fetching its data from Mangadex using an external ID", "parameters": [], "requestBody": { "description": "", "content": { "application/json": { "schema": { "type": "object", "required": [ "externalId" ], "properties": { "externalId": { "type": "string", "description": "The Mangadex ID of the manga" } } } } }, "required": false }, "deprecated": false }, "parameters": [] }, "/api/mangas/search": { "get": { "operationId": "api_mangassearch_get", "tags": [ "Manga" ], "responses": { "200": { "description": "R\u00e9sultats de la recherche", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaSearchItem" } } } } } } }, "400": { "description": "Param\u00e8tres de recherche invalides" } }, "summary": "Recherche des mangas dans la biblioth\u00e8que locale", "description": "Recherche des mangas par titre, slug ou auteur (minimum 3 caract\u00e8res)", "parameters": [ { "name": "q", "in": "query", "description": "Terme de recherche (minimum 3 caract\u00e8res)", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "minLength": 3 }, "style": "form", "explode": false, "allowReserved": false }, { "name": "page", "in": "query", "description": "Num\u00e9ro de page", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer", "default": 1, "minimum": 1 }, "style": "form", "explode": false, "allowReserved": false }, { "name": "limit", "in": "query", "description": "Nombre de r\u00e9sultats par page", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer", "default": 20, "minimum": 1, "maximum": 50 }, "style": "form", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/mangas/{id}/chapters": { "get": { "operationId": "api_mangas_idchapters_get", "tags": [ "MangaChapters" ], "responses": { "200": { "description": "MangaChapters resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MangaChapters.ChapterCollection" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/MangaChapters.ChapterCollection.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/MangaChapters.ChapterCollection" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/MangaChapters.ChapterCollection.jsonhal" } } } }, "404": { "description": "Resource not found" } }, "summary": "Retrieves a MangaChapters resource.", "description": "Retrieves a MangaChapters resource.", "parameters": [ { "name": "id", "in": "path", "description": "The manga identifier", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string" }, "style": "simple", "explode": false, "allowReserved": false }, { "name": "page", "in": "query", "description": "The page number", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": false, "allowReserved": false }, { "name": "limit", "in": "query", "description": "Number of items per page", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer", "default": 20 }, "style": "form", "explode": false, "allowReserved": false }, { "name": "sortOrder", "in": "query", "description": "Sort order for chapters", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" }, "style": "form", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/reader/chapter/{chapterId}": { "get": { "operationId": "api_readerchapter_chapterId_get", "tags": [ "Reader" ], "responses": { "200": { "description": "Contexte du chapitre", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "number": { "type": "string" }, "manga": { "type": "object", "properties": { "id": { "type": "string" }, "title": { "type": "string" } } }, "navigation": { "type": "object", "properties": { "previous": { "type": "object", "nullable": true, "properties": { "id": { "type": "string" }, "number": { "type": "string" } } }, "next": { "type": "object", "nullable": true, "properties": { "id": { "type": "string" }, "number": { "type": "string" } } } } } } } } } }, "404": { "description": "Chapitre non trouv\u00e9" } }, "summary": "R\u00e9cup\u00e8re le contexte d'un chapitre", "description": "Retourne les m\u00e9tadonn\u00e9es du chapitre et sa navigation", "parameters": [ { "name": "chapterId", "in": "path", "description": "", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string" }, "style": "simple", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/reader/chapter/{chapterId}/page/{pageNumber}": { "get": { "operationId": "api_readerchapter_chapterIdpage_pageNumber_get", "tags": [ "Reader" ], "responses": { "200": { "description": "Page du chapitre", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "pageNumber": { "type": "integer" }, "base64Content": { "type": "string", "description": "Contenu de l'image en base64" }, "mimeType": { "type": "string", "example": "image/jpeg" }, "dimensions": { "type": "object", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" } } } } } } } }, "404": { "description": "Chapitre ou page non trouv\u00e9" } }, "summary": "R\u00e9cup\u00e8re une page sp\u00e9cifique d'un chapitre", "description": "Retourne le contenu d'une page en base64 avec ses m\u00e9tadonn\u00e9es", "parameters": [ { "name": "chapterId", "in": "path", "description": "L'identifiant du chapitre", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string" }, "style": "simple", "explode": false, "allowReserved": false }, { "name": "pageNumber", "in": "path", "description": "Le num\u00e9ro de la page \u00e0 r\u00e9cup\u00e9rer", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer", "minimum": 1 }, "style": "simple", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/reader/chapter/{chapterId}/pages": { "get": { "operationId": "api_readerchapter_chapterIdpages_get", "tags": [ "Reader" ], "responses": { "200": { "description": "Collection pagin\u00e9e des pages du chapitre", "content": { "application/json": { "schema": { "type": "object", "properties": { "pages": { "type": "array", "items": { "type": "object", "properties": { "number": { "type": "integer" }, "dimensions": { "type": "object", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" } } } } } }, "totalItems": { "type": "integer" }, "currentPage": { "type": "integer" }, "itemsPerPage": { "type": "integer" }, "totalPages": { "type": "integer" } } } } } }, "404": { "description": "Chapitre non trouv\u00e9" } }, "summary": "R\u00e9cup\u00e8re les pages d'un chapitre", "description": "Retourne une collection pagin\u00e9e des pages du chapitre", "parameters": [ { "name": "chapterId", "in": "path", "description": "", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string" }, "style": "simple", "explode": false, "allowReserved": false }, { "name": "page", "in": "query", "description": "", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": false, "allowReserved": false }, { "name": "itemsPerPage", "in": "query", "description": "", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer", "default": 20 }, "style": "form", "explode": false, "allowReserved": false } ], "deprecated": false }, "parameters": [] }, "/api/scraping/chapters": { "post": { "operationId": "api_scrapingchapters_post", "tags": [ "Scraping" ], "responses": { "202": { "description": "Scraping resource created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Scraping" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/Scraping.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/Scraping" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/Scraping.jsonhal" } } }, "links": {} }, "400": { "description": "Invalid input" }, "422": { "description": "Unprocessable entity" } }, "summary": "Creates a Scraping resource.", "description": "Creates a Scraping resource.", "parameters": [], "requestBody": { "description": "The new Scraping resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Scraping" } }, "application/ld+json": { "schema": { "$ref": "#/components/schemas/Scraping.jsonld" } }, "text/html": { "schema": { "$ref": "#/components/schemas/Scraping" } }, "application/hal+json": { "schema": { "$ref": "#/components/schemas/Scraping.jsonhal" } } }, "required": true }, "deprecated": false }, "parameters": [] } }, "components": { "schemas": { "ChapterListItem": { "type": "object", "description": "", "deprecated": false, "properties": { "id": { "type": "string" }, "number": { "type": "number" }, "title": { "type": [ "string", "null" ] }, "volume": { "type": [ "integer", "null" ] }, "isVisible": { "type": "boolean" }, "isAvailable": { "type": "boolean" }, "createdAt": { "type": "string" } } }, "ChapterListItem.jsonhal": { "type": "object", "description": "", "deprecated": false, "properties": { "id": { "type": "string" }, "number": { "type": "number" }, "title": { "type": [ "string", "null" ] }, "volume": { "type": [ "integer", "null" ] }, "isVisible": { "type": "boolean" }, "isAvailable": { "type": "boolean" }, "createdAt": { "type": "string" } } }, "ChapterListItem.jsonld": { "type": "object", "description": "", "deprecated": false, "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "id": { "type": "string" }, "number": { "type": "number" }, "title": { "type": [ "string", "null" ] }, "volume": { "type": [ "integer", "null" ] }, "isVisible": { "type": "boolean" }, "isAvailable": { "type": "boolean" }, "createdAt": { "type": "string" } } }, "Job": { "type": "object", "description": "Liste des jobs", "deprecated": false, "properties": { "id": { "description": "Identifiant unique du job", "type": "string" }, "type": { "description": "Type du job (ex: scraping_job)", "type": "string" }, "status": { "description": "Status du job", "type": "string" }, "createdAt": { "description": "Date de cr\u00e9ation du job", "type": "string", "format": "date-time" }, "startedAt": { "description": "Date de d\u00e9but d'ex\u00e9cution du job", "type": [ "string", "null" ], "format": "date-time" }, "completedAt": { "description": "Date de fin d'ex\u00e9cution du job", "type": [ "string", "null" ], "format": "date-time" }, "failureReason": { "description": "Raison de l'\u00e9chec si le job a \u00e9chou\u00e9", "type": [ "string", "null" ] }, "attempts": { "minimum": 0, "description": "Nombre de tentatives effectu\u00e9es", "type": "integer" }, "maxAttempts": { "exclusiveMinimum": 0, "description": "Nombre maximum de tentatives autoris\u00e9es", "type": "integer" }, "context": { "description": "Donn\u00e9es contextuelles du job", "type": "array", "items": { "type": "string" } } }, "required": [ "type", "status", "createdAt" ] }, "Job.jsonhal": { "type": "object", "description": "Liste des jobs", "deprecated": false, "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } }, "id": { "description": "Identifiant unique du job", "type": "string" }, "type": { "description": "Type du job (ex: scraping_job)", "type": "string" }, "status": { "description": "Status du job", "type": "string" }, "createdAt": { "description": "Date de cr\u00e9ation du job", "type": "string", "format": "date-time" }, "startedAt": { "description": "Date de d\u00e9but d'ex\u00e9cution du job", "type": [ "string", "null" ], "format": "date-time" }, "completedAt": { "description": "Date de fin d'ex\u00e9cution du job", "type": [ "string", "null" ], "format": "date-time" }, "failureReason": { "description": "Raison de l'\u00e9chec si le job a \u00e9chou\u00e9", "type": [ "string", "null" ] }, "attempts": { "minimum": 0, "description": "Nombre de tentatives effectu\u00e9es", "type": "integer" }, "maxAttempts": { "exclusiveMinimum": 0, "description": "Nombre maximum de tentatives autoris\u00e9es", "type": "integer" }, "context": { "description": "Donn\u00e9es contextuelles du job", "type": "array", "items": { "type": "string" } } }, "required": [ "type", "status", "createdAt" ] }, "Job.jsonld": { "type": "object", "description": "Liste des jobs", "deprecated": false, "properties": { "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "id": { "description": "Identifiant unique du job", "type": "string" }, "type": { "description": "Type du job (ex: scraping_job)", "type": "string" }, "status": { "description": "Status du job", "type": "string" }, "createdAt": { "description": "Date de cr\u00e9ation du job", "type": "string", "format": "date-time" }, "startedAt": { "description": "Date de d\u00e9but d'ex\u00e9cution du job", "type": [ "string", "null" ], "format": "date-time" }, "completedAt": { "description": "Date de fin d'ex\u00e9cution du job", "type": [ "string", "null" ], "format": "date-time" }, "failureReason": { "description": "Raison de l'\u00e9chec si le job a \u00e9chou\u00e9", "type": [ "string", "null" ] }, "attempts": { "minimum": 0, "description": "Nombre de tentatives effectu\u00e9es", "type": "integer" }, "maxAttempts": { "exclusiveMinimum": 0, "description": "Nombre maximum de tentatives autoris\u00e9es", "type": "integer" }, "context": { "description": "Donn\u00e9es contextuelles du job", "type": "array", "items": { "type": "string" } } }, "required": [ "type", "status", "createdAt" ] }, "Manga": { "type": "object", "description": "", "deprecated": false, "required": [ "title", "slug", "description", "author", "publicationYear", "genres", "status" ], "properties": { "title": { "minLength": 1, "maxLength": 255, "type": "string" }, "slug": { "pattern": "^([a-z0-9-]+)$", "type": "string" }, "description": { "type": "string" }, "author": { "type": "string" }, "publicationYear": { "minimum": 1900, "maximum": 2100, "type": "integer" }, "genres": { "minItems": 1, "type": "array", "items": { "type": "string" } }, "status": { "enum": [ "ongoing", "completed", "hiatus" ], "type": "string" }, "externalId": { "type": [ "string", "null" ] }, "imageUrl": { "format": "uri", "externalDocs": { "url": "https://schema.org/url" }, "type": [ "string", "null" ] }, "rating": { "minimum": 0, "maximum": 5, "type": [ "number", "null" ] } } }, "Manga.MangaCollection": { "type": "object", "description": "", "deprecated": false, "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaListItem" } }, "total": { "type": "integer" }, "page": { "type": "integer" }, "limit": { "type": "integer" }, "hasNextPage": { "type": "boolean" }, "hasPreviousPage": { "type": "boolean" } } }, "Manga.MangaCollection.jsonhal": { "type": "object", "description": "", "deprecated": false, "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaListItem.jsonhal" } }, "total": { "type": "integer" }, "page": { "type": "integer" }, "limit": { "type": "integer" }, "hasNextPage": { "type": "boolean" }, "hasPreviousPage": { "type": "boolean" } } }, "Manga.MangaCollection.jsonld": { "type": "object", "description": "", "deprecated": false, "properties": { "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaListItem.jsonld" } }, "total": { "type": "integer" }, "page": { "type": "integer" }, "limit": { "type": "integer" }, "hasNextPage": { "type": "boolean" }, "hasPreviousPage": { "type": "boolean" } } }, "Manga.MangaDetail": { "type": "object", "description": "", "deprecated": false, "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "slug": { "type": "string" }, "description": { "type": "string" }, "author": { "type": "string" }, "publicationYear": { "type": "integer" }, "genres": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" }, "externalId": { "type": [ "string", "null" ] }, "imageUrl": { "type": [ "string", "null" ] }, "rating": { "type": [ "number", "null" ] } } }, "Manga.MangaDetail.jsonhal": { "type": "object", "description": "", "deprecated": false, "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } }, "id": { "type": "string" }, "title": { "type": "string" }, "slug": { "type": "string" }, "description": { "type": "string" }, "author": { "type": "string" }, "publicationYear": { "type": "integer" }, "genres": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" }, "externalId": { "type": [ "string", "null" ] }, "imageUrl": { "type": [ "string", "null" ] }, "rating": { "type": [ "number", "null" ] } } }, "Manga.MangaDetail.jsonld": { "type": "object", "description": "", "deprecated": false, "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "id": { "type": "string" }, "title": { "type": "string" }, "slug": { "type": "string" }, "description": { "type": "string" }, "author": { "type": "string" }, "publicationYear": { "type": "integer" }, "genres": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" }, "externalId": { "type": [ "string", "null" ] }, "imageUrl": { "type": [ "string", "null" ] }, "rating": { "type": [ "number", "null" ] } } }, "Manga.MangaSearchCollection": { "type": "object", "description": "", "deprecated": false, "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaSearchItem" } } } }, "Manga.MangaSearchCollection.jsonhal": { "type": "object", "description": "", "deprecated": false, "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaSearchItem.jsonhal" } } } }, "Manga.MangaSearchCollection.jsonld": { "type": "object", "description": "", "deprecated": false, "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaSearchItem.jsonld" } } } }, "Manga.jsonhal": { "type": "object", "description": "", "deprecated": false, "required": [ "title", "slug", "description", "author", "publicationYear", "genres", "status" ], "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } }, "title": { "minLength": 1, "maxLength": 255, "type": "string" }, "slug": { "pattern": "^([a-z0-9-]+)$", "type": "string" }, "description": { "type": "string" }, "author": { "type": "string" }, "publicationYear": { "minimum": 1900, "maximum": 2100, "type": "integer" }, "genres": { "minItems": 1, "type": "array", "items": { "type": "string" } }, "status": { "enum": [ "ongoing", "completed", "hiatus" ], "type": "string" }, "externalId": { "type": [ "string", "null" ] }, "imageUrl": { "format": "uri", "externalDocs": { "url": "https://schema.org/url" }, "type": [ "string", "null" ] }, "rating": { "minimum": 0, "maximum": 5, "type": [ "number", "null" ] } } }, "Manga.jsonld": { "type": "object", "description": "", "deprecated": false, "required": [ "title", "slug", "description", "author", "publicationYear", "genres", "status" ], "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "title": { "minLength": 1, "maxLength": 255, "type": "string" }, "slug": { "pattern": "^([a-z0-9-]+)$", "type": "string" }, "description": { "type": "string" }, "author": { "type": "string" }, "publicationYear": { "minimum": 1900, "maximum": 2100, "type": "integer" }, "genres": { "minItems": 1, "type": "array", "items": { "type": "string" } }, "status": { "enum": [ "ongoing", "completed", "hiatus" ], "type": "string" }, "externalId": { "type": [ "string", "null" ] }, "imageUrl": { "format": "uri", "externalDocs": { "url": "https://schema.org/url" }, "type": [ "string", "null" ] }, "rating": { "minimum": 0, "maximum": 5, "type": [ "number", "null" ] } } }, "MangaChapters": { "type": "object", "description": "", "deprecated": false, "required": [ "externalId" ], "properties": { "externalId": { "type": "string" } } }, "MangaChapters.ChapterCollection": { "type": "object", "description": "", "deprecated": false, "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/ChapterListItem" } }, "total": { "type": "integer" }, "page": { "type": "integer" }, "limit": { "type": "integer" }, "hasNextPage": { "type": "boolean" }, "hasPreviousPage": { "type": "boolean" } } }, "MangaChapters.ChapterCollection.jsonhal": { "type": "object", "description": "", "deprecated": false, "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/ChapterListItem.jsonhal" } }, "total": { "type": "integer" }, "page": { "type": "integer" }, "limit": { "type": "integer" }, "hasNextPage": { "type": "boolean" }, "hasPreviousPage": { "type": "boolean" } } }, "MangaChapters.ChapterCollection.jsonld": { "type": "object", "description": "", "deprecated": false, "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/ChapterListItem.jsonld" } }, "total": { "type": "integer" }, "page": { "type": "integer" }, "limit": { "type": "integer" }, "hasNextPage": { "type": "boolean" }, "hasPreviousPage": { "type": "boolean" } } }, "MangaChapters.jsonhal": { "type": "object", "description": "", "deprecated": false, "required": [ "externalId" ], "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } }, "externalId": { "type": "string" } } }, "MangaChapters.jsonld": { "type": "object", "description": "", "deprecated": false, "required": [ "externalId" ], "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "externalId": { "type": "string" } } }, "MangaListItem": { "type": "object", "description": "", "deprecated": false, "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "description": { "type": "string" }, "slug": { "type": "string" }, "imageUrl": { "type": [ "string", "null" ] }, "thumbnailUrl": { "type": [ "string", "null" ] }, "author": { "type": "string" }, "publicationYear": { "type": "integer" }, "genres": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" }, "rating": { "type": [ "number", "null" ] }, "createdAt": { "type": "string", "format": "date-time" } } }, "MangaListItem.jsonhal": { "type": "object", "description": "", "deprecated": false, "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "description": { "type": "string" }, "slug": { "type": "string" }, "imageUrl": { "type": [ "string", "null" ] }, "thumbnailUrl": { "type": [ "string", "null" ] }, "author": { "type": "string" }, "publicationYear": { "type": "integer" }, "genres": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" }, "rating": { "type": [ "number", "null" ] }, "createdAt": { "type": "string", "format": "date-time" } } }, "MangaListItem.jsonld": { "type": "object", "description": "", "deprecated": false, "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "id": { "type": "string" }, "title": { "type": "string" }, "description": { "type": "string" }, "slug": { "type": "string" }, "imageUrl": { "type": [ "string", "null" ] }, "thumbnailUrl": { "type": [ "string", "null" ] }, "author": { "type": "string" }, "publicationYear": { "type": "integer" }, "genres": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" }, "rating": { "type": [ "number", "null" ] }, "createdAt": { "type": "string", "format": "date-time" } } }, "MangaSearchItem": { "type": "object", "description": "", "deprecated": false, "properties": { "externalId": { "type": "string" }, "title": { "type": "string" }, "slug": { "type": "string" }, "description": { "type": "string" }, "author": { "type": "string" }, "publicationYear": { "type": "integer" }, "genres": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" }, "imageUrl": { "type": [ "string", "null" ] }, "thumbnailUrl": { "type": [ "string", "null" ] }, "rating": { "type": [ "number", "null" ] } } }, "MangaSearchItem.jsonhal": { "type": "object", "description": "", "deprecated": false, "properties": { "externalId": { "type": "string" }, "title": { "type": "string" }, "slug": { "type": "string" }, "description": { "type": "string" }, "author": { "type": "string" }, "publicationYear": { "type": "integer" }, "genres": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" }, "imageUrl": { "type": [ "string", "null" ] }, "thumbnailUrl": { "type": [ "string", "null" ] }, "rating": { "type": [ "number", "null" ] } } }, "MangaSearchItem.jsonld": { "type": "object", "description": "", "deprecated": false, "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "externalId": { "type": "string" }, "title": { "type": "string" }, "slug": { "type": "string" }, "description": { "type": "string" }, "author": { "type": "string" }, "publicationYear": { "type": "integer" }, "genres": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" }, "imageUrl": { "type": [ "string", "null" ] }, "thumbnailUrl": { "type": [ "string", "null" ] }, "rating": { "type": [ "number", "null" ] } } }, "Mangadex.MangaSearchCollection": { "type": "object", "description": "", "deprecated": false, "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaSearchItem" } } } }, "Mangadex.MangaSearchCollection.jsonhal": { "type": "object", "description": "", "deprecated": false, "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaSearchItem.jsonhal" } } } }, "Mangadex.MangaSearchCollection.jsonld": { "type": "object", "description": "", "deprecated": false, "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/MangaSearchItem.jsonld" } } } }, "Reader": { "type": "object", "description": "", "deprecated": false }, "Reader.jsonhal": { "type": "object", "description": "", "deprecated": false, "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } } } }, "Reader.jsonld": { "type": "object", "description": "", "deprecated": false, "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" } } }, "Scraping": { "type": "object", "description": "", "deprecated": false, "required": [ "chapterId" ], "properties": { "chapterId": { "description": "ID du chapitre \u00e0 scraper", "type": "string" } } }, "Scraping.jsonhal": { "type": "object", "description": "", "deprecated": false, "required": [ "chapterId" ], "properties": { "_links": { "type": "object", "properties": { "self": { "type": "object", "properties": { "href": { "type": "string", "format": "iri-reference" } } } } }, "chapterId": { "description": "ID du chapitre \u00e0 scraper", "type": "string" } } }, "Scraping.jsonld": { "type": "object", "description": "", "deprecated": false, "required": [ "chapterId" ], "properties": { "@context": { "readOnly": true, "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "@vocab": { "type": "string" }, "hydra": { "type": "string", "enum": [ "http://www.w3.org/ns/hydra/core#" ] } }, "required": [ "@vocab", "hydra" ], "additionalProperties": true } ] }, "@id": { "readOnly": true, "type": "string" }, "@type": { "readOnly": true, "type": "string" }, "chapterId": { "description": "ID du chapitre \u00e0 scraper", "type": "string" } } } }, "responses": {}, "parameters": {}, "examples": {}, "requestBodies": {}, "headers": {}, "securitySchemes": { "access_token": { "type": "http", "description": "", "scheme": "bearer" } } }, "security": [ { "access_token": [] } ], "tags": [] }