STREAMIXSTREAMIXBack to platform

STREAMIX DEVELOPERS

Build the next
great story.

One calm, predictable API for the STREAMIX catalog. Authenticate with a developer key, pay per request with tokens, and keep your product focused on the experience.

Secure by defaultKeys are shown once and stored hashed.
Transparent usageEvery request has a token cost and log.
Fast catalog accessRedis-backed caching keeps reads quick.

QUICKSTART

Start in under five minutes.

1. Connectez-vous et créez une clé développeur depuis votre compte (/account).
2. Gardez la clé côté serveur : ne l'intégrez jamais dans un bundle navigateur ni un dépôt public.
3. Envoyez-la avec chaque requête dans l'en-tête X-API-Key.

cURL
curl https://flix.syrixvision.com/api/developer/v1/movies \
  -H "X-API-Key: syrix-your-key"
JavaScript
const response = await fetch(
  "https://flix.syrixvision.com/api/developer/v1/search?q=signal",
  { headers: { "X-API-Key": process.env.SYRIX_KEY } }
);
const body = await response.json();
if (!body.success) throw new Error(body.error.code);
console.log(body.data);
Python
import os, requests

r = requests.get(
    "https://flix.syrixvision.com/api/developer/v1/movies",
    headers={"X-API-Key": os.environ["SYRIX_KEY"]},
    timeout=10,
)
body = r.json()
if not body["success"]:
    raise RuntimeError(body["error"]["code"])
print(body["data"])

FULL ACCESS

Une clé, tout le catalogue.

Vérifiez votre clé gratuitement : GET https://flix.syrixvision.com/api/developer/v1/ renvoie la liste des endpoints (0 token).

CONCEPTS

Les identifiants à connaître.

TermeSignification
slugIdentifiant lisible d'un titre (ex. one-piece). Il vient des listes et de la recherche et sert dans /movies/{slug}, /series/{slug}, /anime/{slug}, /dramas/{slug}, /webtoons/{slug}.
episode_idIdentifiant d'un épisode, fourni par le DÉTAIL du titre (episodes[].episode_id). Films : first_episode_id. Séries : numérique, à envoyer à /episodes/{episode_id}/servers. Anime et dramas : texte (ex. one-piece-1100-vostfr), à envoyer au paramètre ?episode=.
chapter_idIdentifiant d'un chapitre (chapters[].chapter_id). Manga / manhwa / webtoon : UUID à envoyer à /comics/chapters/{chapter_id}/pages. Ancienne source /webtoons : paramètre ?chapter=.
type (comics)Catégorie de /comics : manga (Japon), manhwa (Corée), manhua (Chine) ou webtoon (lecture verticale). Un titre peut être à la fois manhwa et webtoon (is_webtoon = true).
server_typeembed = page de lecteur à afficher dans une balise <iframe>. direct = fichier vidéo (.mp4, .m3u8) à lire avec une balise <video> (les .m3u8 demandent hls.js sur la plupart des navigateurs de bureau).
versionLangue / sous-titres de la source : VF, VOSTFR, etc. Un même titre peut exister en plusieurs versions.
imageURL absolue d'une affiche ou d'une page, servie par le proxy SYRIX (https). Elle peut être affichée directement dans <img>.
metaInformations de pagination : page, last_page, genre, sort. Bouclez de page à last_page pour tout lire.

GUIDES

Regarder, lire, parcourir : étape par étape.

Regarder un film

Trois appels : chercher, ouvrir la fiche, récupérer les liens de lecture.

  1. GET /search?q=<titre> (ou GET /movies) : récupérez le slug du film.
  2. GET /movies/{slug} : lisez data.first_episode_id.
  3. GET /episodes/{first_episode_id}/servers : vous obtenez la liste des serveurs.
  4. Affichez le premier serveur : <iframe src=server_link> si server_type = embed, sinon <video src=server_link>. Gardez les autres serveurs comme solutions de secours.
cURL
curl "https://flix.syrixvision.com/api/developer/v1/movies/my-movie" \
  -H "X-API-Key: syrix-your-key"

# data.first_episode_id = 48213
curl "https://flix.syrixvision.com/api/developer/v1/episodes/48213/servers" \
  -H "X-API-Key: syrix-your-key"
Regarder un épisode de série

Même principe que pour un film, mais l'episode_id vient de la liste des épisodes.

  1. GET /series/{slug} : parcourez data.episodes (season, number, episode_id).
  2. Choisissez un épisode, puis GET /episodes/{episode_id}/servers.
  3. Lisez le serveur choisi (iframe ou video selon server_type).
cURL
curl "https://flix.syrixvision.com/api/developer/v1/series/my-series" \
  -H "X-API-Key: syrix-your-key"

# episodes[0].episode_id = 90211
curl "https://flix.syrixvision.com/api/developer/v1/episodes/90211/servers" \
  -H "X-API-Key: syrix-your-key"
Regarder un anime ou un K-Drama

Ici le slug du titre ET l'episode_id (texte) sont nécessaires. Le numéro d'épisode seul ne suffit pas.

  1. GET /anime/{slug} (ou /dramas/{slug}) : récupérez data.episodes.
  2. Prenez episodes[n].episode_id, par exemple one-piece-1100-vostfr.
  3. GET /anime/{slug}/servers?episode={episode_id}.
  4. Affichez server_link dans un <iframe> (server_type = embed).
cURL
curl "https://flix.syrixvision.com/api/developer/v1/anime/one-piece" \
  -H "X-API-Key: syrix-your-key"

curl "https://flix.syrixvision.com/api/developer/v1/anime/one-piece/servers?episode=one-piece-1100-vostfr" \
  -H "X-API-Key: syrix-your-key"
Lire un webtoon

Liste des chapitres, puis images d'un chapitre.

  1. GET /webtoons/{slug} : lisez data.chapters.
  2. GET /webtoons/{slug}/pages?chapter={chapter_id} : affichez chaque image dans l'ordre (champ page).
cURL
curl "https://flix.syrixvision.com/api/developer/v1/webtoons/my-webtoon/pages?chapter=12" \
  -H "X-API-Key: syrix-your-key"
Lire un manga, un manhwa ou un webtoon

Quatre étapes : lister, ouvrir la fiche, choisir un chapitre, afficher les pages. Tout est gratuit (aucun token).

  1. GET /comics?type=manhwa&lang=fr (ou /comics/home?type=manhwa) : récupérez le slug (UUID) d'un titre.
  2. GET /comics/{slug}?lang=fr : lisez data.chapters. Vide ? Voyez available_languages et réessayez avec une autre langue.
  3. GET /comics/chapters/{chapter_id}/pages?quality=data-saver : récupérez data.pages.
  4. Affichez chaque page.image dans une balise <img> à la suite (lecture verticale), dans l'ordre du champ page. Affichez aussi « Source : MangaDex » et le nom de data.group.
cURL
curl "https://flix.syrixvision.com/api/developer/v1/comics?type=manhwa&lang=fr&per_page=5" \
  -H "X-API-Key: syrix-your-key"

# data[0].slug = 11111111-1111-4111-8111-111111111111
curl "https://flix.syrixvision.com/api/developer/v1/comics/11111111-1111-4111-8111-111111111111?lang=fr" \
  -H "X-API-Key: syrix-your-key"

# data.chapters[0].chapter_id = aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa
curl "https://flix.syrixvision.com/api/developer/v1/comics/chapters/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/pages?quality=data-saver" \
  -H "X-API-Key: syrix-your-key"
Récupérer tout un catalogue

Toutes les listes sont paginées : parcourez les pages jusqu'à meta.last_page.

  1. GET /anime?page=1 : lisez meta.last_page.
  2. Répétez avec page=2, 3 … jusqu'à last_page.
  3. Respectez la limite par minute de votre plan et mettez les résultats en cache chez vous (5 minutes minimum).

CATALOG API

Small surface. Clear contracts.

URL de base : https://flix.syrixvision.com/api/developer/v1

GET/Découverte de l'API

Renvoie la liste des endpoints disponibles. Gratuit (0 token) : pratique pour vérifier qu'une clé fonctionne.

ParamètreTypeRequisDescription
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": {
    "name": "STREAMIX Developer API",
    "version": "v1",
    "base_url": "https://flix.syrixvision.com/api/developer/v1",
    "endpoints": [ { "path": "/movies", "title": "..." } ]
  }
}
GET/moviesLister les films

Catalogue des films, du plus récent au plus ancien. Chaque élément contient le slug à utiliser dans /movies/{slug}.

ParamètreTypeRequisDescription
pagenumberNonNuméro de page (défaut 1). La réponse contient meta.last_page.
genrestring (slug)NonFiltre par genre, ex. action, romance, drama.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/movies?page=1" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    {
      "title": "Exemple",
      "slug": "exemple",
      "image": "https://flix.syrixvision.com/api/image-proxy?url=...",
      "version": "VOSTFR",
      "type": "movie"
    }
  ],
  "meta": { "page": 1, "last_page": 12, "genre": null }
}
GET/movies/{slug}Détail d'un film

Fiche complète : synopsis, genres, année, et surtout first_episode_id — l'identifiant à envoyer à /episodes/{episode_id}/servers pour obtenir les liens de lecture.

ParamètreTypeRequisDescription
slugstring (chemin)OuiIdentifiant du film, pris dans le champ slug d'une liste ou d'une recherche.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/movies/my-movie" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": {
    "title": "My Movie",
    "slug": "my-movie",
    "type": "movie",
    "image": "https://...",
    "synopsis": "...",
    "genres": ["Action", "Thriller"],
    "year": "2024",
    "status": "Completed",
    "version": "VF",
    "first_episode_id": "48213",
    "related": [ { "title": "...", "slug": "...", "image": "..." } ]
  }
}
GET/seriesLister les séries

Catalogue des séries. Même format que /movies.

ParamètreTypeRequisDescription
pagenumberNonNuméro de page (défaut 1). La réponse contient meta.last_page.
genrestring (slug)NonFiltre par genre, ex. action, romance, drama.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/series?page=1" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    {
      "title": "Exemple",
      "slug": "exemple",
      "image": "https://flix.syrixvision.com/api/image-proxy?url=...",
      "version": "VOSTFR",
      "type": "series"
    }
  ],
  "meta": { "page": 1, "last_page": 12, "genre": null }
}
GET/series/{slug}Détail d'une série + épisodes

Fiche de la série avec la liste complète de ses épisodes (saison, numéro, episode_id). Pour regarder un épisode : /episodes/{episode_id}/servers.

ParamètreTypeRequisDescription
slugstring (chemin)OuiIdentifiant de la série, pris dans le champ slug d'une liste ou d'une recherche.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/series/my-series" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": {
    "title": "My Series",
    "slug": "my-series",
    "type": "series",
    "synopsis": "...",
    "genres": ["Crime"],
    "episodes": [
      { "episode_id": "90211", "season": "1", "number": "1", "title": "Épisode 1" },
      { "episode_id": "90212", "season": "1", "number": "2", "title": "Épisode 2" }
    ],
    "first_episode_id": "90211"
  }
}
GET/episodes/{episode_id}/serversLiens de lecture — films & séries

Retourne les serveurs de lecture d'un film (utilisez first_episode_id) ou d'un épisode de série (episodes[].episode_id). C'est CET endpoint qui permet de regarder les films et les séries.

ParamètreTypeRequisDescription
episode_idstring (chemin)OuiIdentifiant numérique pris dans le détail du film (first_episode_id) ou de la série (episodes[].episode_id).
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/episodes/90211/servers" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    {
      "server_name": "Serveur 1",
      "server_link": "https://player.example/embed/abc123",
      "server_type": "embed",
      "version": "VOSTFR"
    }
  ]
}
GET/animeLister les animes

Catalogue des animes. Tri par défaut : les plus récents.

ParamètreTypeRequisDescription
pagenumberNonNuméro de page (défaut 1). La réponse contient meta.last_page.
genrestring (slug)NonFiltre par genre, ex. action, romance, drama.
sortlatest | azNonTri : latest (défaut) = plus récents, az = ordre alphabétique.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/anime?sort=latest&page=1" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    {
      "title": "Exemple",
      "slug": "exemple",
      "image": "https://flix.syrixvision.com/api/image-proxy?url=...",
      "version": "VOSTFR",
      "type": "anime"
    }
  ],
  "meta": { "page": 1, "last_page": 12, "genre": null }
}
GET/anime/{slug}Détail d'un anime + épisodes

Fiche de l'anime avec tous ses épisodes. Le champ episodes[].episode_id est la valeur à passer au paramètre episode des serveurs.

ParamètreTypeRequisDescription
slugstring (chemin)OuiIdentifiant de l'anime, pris dans le champ slug d'une liste ou d'une recherche.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/anime/one-piece" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": {
    "title": "One Piece",
    "slug": "one-piece",
    "type": "anime",
    "synopsis": "...",
    "genres": ["Aventure"],
    "year": "1999",
    "status": "En cours",
    "episodes": [
      { "episode_id": "one-piece-1100-vostfr", "number": "1100", "title": "Épisode 1100", "version": "VOSTFR" }
    ],
    "first_episode_id": "one-piece-1-vostfr"
  }
}
GET/anime/{slug}/serversLiens de lecture — anime

Serveurs de lecture d'un épisode d'anime. Le slug ET l'episode_id doivent venir du détail de l'anime. Forme équivalente : /anime/{slug}?episode={episode_id}.

ParamètreTypeRequisDescription
slugstring (chemin)OuiIdentifiant de l'anime, pris dans le champ slug d'une liste ou d'une recherche.
episodestringOuiepisode_id pris dans episodes[] du détail (ex. one-piece-1100-vostfr). Ce n'est PAS un simple numéro.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/anime/one-piece/servers?episode=one-piece-1100-vostfr" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    {
      "server_name": "Serveur 1",
      "server_link": "https://player.example/embed/abc123",
      "server_type": "embed",
      "version": "VOSTFR"
    }
  ]
}
GET/dramasLister les K-Dramas

Catalogue des K-Dramas. Même format et mêmes paramètres que /anime.

ParamètreTypeRequisDescription
pagenumberNonNuméro de page (défaut 1). La réponse contient meta.last_page.
genrestring (slug)NonFiltre par genre, ex. action, romance, drama.
sortlatest | azNonTri : latest (défaut) = plus récents, az = ordre alphabétique.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/dramas?page=1" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    {
      "title": "Exemple",
      "slug": "exemple",
      "image": "https://flix.syrixvision.com/api/image-proxy?url=...",
      "version": "VOSTFR",
      "type": "drama"
    }
  ],
  "meta": { "page": 1, "last_page": 12, "genre": null }
}
GET/dramas/{slug}Détail d'un K-Drama + épisodes

Fiche du drama avec la liste des épisodes (episode_id, numéro, version).

ParamètreTypeRequisDescription
slugstring (chemin)OuiIdentifiant du drama, pris dans le champ slug d'une liste ou d'une recherche.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/dramas/my-drama" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": {
    "title": "My Drama",
    "slug": "my-drama",
    "type": "drama",
    "episodes": [ { "episode_id": "my-drama-1-vostfr", "number": "1", "title": "Épisode 1", "version": "VOSTFR" } ],
    "first_episode_id": "my-drama-1-vostfr"
  }
}
GET/dramas/{slug}/serversLiens de lecture — K-Drama

Serveurs de lecture d'un épisode de K-Drama. Forme équivalente : /dramas/{slug}?episode={episode_id}.

ParamètreTypeRequisDescription
slugstring (chemin)OuiIdentifiant du drama, pris dans le champ slug d'une liste ou d'une recherche.
episodestringOuiepisode_id pris dans episodes[] du détail du drama.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/dramas/my-drama/servers?episode=my-drama-1-vostfr" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    {
      "server_name": "Serveur 1",
      "server_link": "https://player.example/embed/abc123",
      "server_type": "embed",
      "version": "VOSTFR"
    }
  ]
}
GET/webtoonsLister les webtoons

Source héritée (peut être indisponible). Préférez GET /comics?type=webtoon, plus complet et fiable.

ParamètreTypeRequisDescription
pagenumberNonNuméro de page (défaut 1). La réponse contient meta.last_page.
genrestring (slug)NonFiltre par genre, ex. action, romance, drama.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/webtoons" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    {
      "title": "Exemple",
      "slug": "exemple",
      "image": "https://flix.syrixvision.com/api/image-proxy?url=...",
      "version": "VOSTFR",
      "type": "webtoon"
    }
  ],
  "meta": { "page": 1, "last_page": 12, "genre": null }
}
GET/webtoons/{slug}Détail d'un webtoon + chapitres

Fiche du webtoon avec la liste des chapitres. chapters[].chapter_id sert à récupérer les pages.

ParamètreTypeRequisDescription
slugstring (chemin)OuiIdentifiant du webtoon, pris dans le champ slug d'une liste ou d'une recherche.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/webtoons/my-webtoon" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": {
    "title": "My Webtoon",
    "slug": "my-webtoon",
    "type": "webtoon",
    "chapters": [ { "chapter_id": "12", "number": "12", "title": "Chapitre 12" } ],
    "first_chapter_id": "1"
  }
}
GET/webtoons/{slug}/pagesPages d'un chapitre

Retourne les images (dans l'ordre de lecture) d'un chapitre de webtoon.

ParamètreTypeRequisDescription
slugstring (chemin)OuiIdentifiant du webtoon, pris dans le champ slug d'une liste ou d'une recherche.
chapterstringOuichapter_id pris dans chapters[] du détail.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/webtoons/my-webtoon/pages?chapter=12" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    { "page": 1, "image": "https://flix.syrixvision.com/api/image-proxy?url=..." },
    { "page": 2, "image": "https://flix.syrixvision.com/api/image-proxy?url=..." }
  ]
}
GET/comicsManga, manhwa & webtoon — lister / rechercher

Catalogue unifié (source MangaDex). Filtrez par catégorie avec type. Seuls les titres ayant des chapitres lisibles dans la langue demandée sont renvoyés. Gratuit : aucun token débité.

ParamètreTypeRequisDescription
typemanga | manhwa | manhua | webtoonNonmanga (Japon), manhwa (Corée), manhua (Chine) ou webtoon (lecture verticale, toutes origines). Absent = tout.
qstringNonRecherche texte (2 à 100 caractères).
pagenumberNonPage ≥ 1 (défaut 1). Voir meta.last_page.
per_pagenumberNon1 à 40 (défaut 20).
langstringNonLangue des chapitres : fr (défaut), en, es, pt-br, it, de… ou all.
sortpopular | latest | new | rating | az | relevanceNonpopular (défaut), latest = nouveaux chapitres, new = nouveaux titres, rating, az. relevance avec q.
genrestringNonNom de genre exact, voir /comics/genres (ex. Action, Romance).
statusongoing | completed | hiatus | cancelledNonStatut de publication.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/comics?type=manhwa&lang=fr&sort=popular" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [
    {
      "title": "Mon manhwa",
      "slug": "11111111-1111-4111-8111-111111111111",
      "url": "https://mangadex.org/title/...",
      "image": "https://flix.syrixvision.com/api/comic-image?u=...",
      "version": "FR",
      "type": "manhwa",
      "is_webtoon": true,
      "status": "ongoing",
      "year": 2022,
      "genres": ["Action", "Fantasy"],
      "latest_chapter": "120"
    }
  ],
  "meta": { "page": 1, "per_page": 20, "total": 340, "last_page": 17, "source": "MangaDex" }
}
GET/comics/homeManga, manhwa & webtoon — rangées d'accueil

Trois rangées prêtes à afficher pour une page catégorie : popular, latest (nouveaux chapitres), new (nouveaux titres).

ParamètreTypeRequisDescription
typemanga | manhwa | manhua | webtoonNonCatégorie.
langstringNonLangue des chapitres (défaut fr).
per_pagenumberNon1 à 24 (défaut 12).
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/comics/home?type=webtoon" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": { "popular": [ { "title": "...", "slug": "...", "image": "..." } ], "latest": [ ], "new": [ ] },
  "meta": { "type": "webtoon", "lang": "fr", "source": "MangaDex" }
}
GET/comics/{id}Manga, manhwa & webtoon — détail + chapitres

Fiche complète et liste de TOUS les chapitres lisibles (du premier au dernier, une version par numéro). Si chapters est vide, le titre n'a que des liens officiels ou aucun chapitre dans cette langue : essayez une autre langue (voir available_languages).

ParamètreTypeRequisDescription
idUUID (chemin)OuiLe champ slug d'une liste ou d'une recherche.
langstringNonLangue des chapitres (défaut fr).
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/comics/11111111-1111-4111-8111-111111111111?lang=fr" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": {
    "title": "Mon manhwa",
    "slug": "11111111-1111-4111-8111-111111111111",
    "type": "manhwa",
    "is_webtoon": true,
    "synopsis": "...",
    "genres": ["Action"],
    "authors": ["Auteur"],
    "status": "ongoing",
    "available_languages": ["fr", "en"],
    "lang": "fr",
    "chapters": [
      { "chapter_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa", "number": "1", "title": "Chapitre 1", "language": "fr", "pages": 35, "group": "Nom du groupe", "published_at": "2024-05-01T10:00:00+00:00" }
    ],
    "first_chapter_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
    "credits": { "source": "MangaDex", "source_url": "https://mangadex.org/title/..." }
  }
}
GET/comics/{id}/chaptersManga, manhwa & webtoon — chapitres paginés

Même liste de chapitres que le détail, paginée (utile pour les très longues séries).

ParamètreTypeRequisDescription
idUUID (chemin)OuiIdentifiant du titre.
langstringNonLangue (défaut fr).
orderasc | descNonOrdre (défaut asc = du premier au dernier).
pagenumberNonPage ≥ 1.
per_pagenumberNon1 à 500 (défaut 100).
dedupe1 | 0Non1 (défaut) = une seule version par numéro ; 0 = toutes les versions (groupes).
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/comics/11111111-1111-4111-8111-111111111111/chapters?order=desc&per_page=50" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [ { "chapter_id": "...", "number": "120", "title": "Chapitre 120", "pages": 40, "group": "Nom du groupe" } ],
  "meta": { "page": 1, "per_page": 50, "total": 120, "last_page": 3, "first_chapter_id": "...", "last_chapter_id": "..." }
}
GET/comics/chapters/{chapter_id}/pagesManga, manhwa & webtoon — pages d'un chapitre

Images d'un chapitre, dans l'ordre de lecture. Les URLs sont absolues (https, servies par STREAMIX) et valables quelques minutes : demandez-les à l'ouverture du lecteur, ne les stockez pas.

ParamètreTypeRequisDescription
chapter_idUUID (chemin)Ouichapters[].chapter_id du détail ou de la liste des chapitres.
qualitydata-saver | dataNondata-saver (défaut) = images compressées, rapides sur mobile ; data = qualité originale.
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/comics/chapters/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/pages?quality=data-saver" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": {
    "chapter_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
    "manga_title": "Mon manhwa",
    "chapter": "1",
    "language": "fr",
    "group": { "id": "...", "name": "Nom du groupe" },
    "quality": "data-saver",
    "count": 35,
    "pages": [ { "page": 1, "image": "https://flix.syrixvision.com/api/comic-image?u=..." } ],
    "credits": { "source": "MangaDex", "source_url": "https://mangadex.org/chapter/...", "scanlation_group": "Nom du groupe" }
  }
}
GET/comics/genresManga, manhwa & webtoon — genres

Liste des genres, thèmes et formats. Passez le champ name au paramètre genre de /comics.

ParamètreTypeRequisDescription
Exemple
curl "https://flix.syrixvision.com/api/developer/v1/comics/genres" \
  -H "X-API-Key: syrix-your-key"
Réponse
{
  "success": true,
  "data": [ { "id": "391b0423-d847-456f-aff0-8b0cfc03066b", "name": "Action", "group": "genre" } ]
}

PLAYER

Afficher la vidéo dans votre application.

Chaque serveur contient server_link et server_type. Proposez plusieurs serveurs à l'utilisateur : si l'un ne répond pas, passez au suivant.

HTML
<!-- Lecture d'un serveur renvoyé par l'API -->
<!-- server_type = "embed" -->
<iframe src="SERVER_LINK" allow="autoplay; fullscreen" allowfullscreen
        referrerpolicy="no-referrer" style="width:100%;aspect-ratio:16/9;border:0"></iframe>

<!-- server_type = "direct" (.mp4) -->
<video src="SERVER_LINK" controls playsinline style="width:100%"></video>

<!-- server_type = "direct" (.m3u8) -->
<video id="v" controls playsinline style="width:100%"></video>
<script src="https://cdn.jsdelivr.net/npm/hls.js@1"></script>
<script>
  const v = document.getElementById("v"), src = "SERVER_LINK";
  if (v.canPlayType("application/vnd.apple.mpegurl")) v.src = src;
  else if (Hls.isSupported()) { const h = new Hls(); h.loadSource(src); h.attachMedia(v); }
</script>

READY-TO-USE CLIENTS

Copiez, collez, regardez.

Ces petits clients gèrent la différence entre films/séries et animes/dramas pour vous. Gardez la clé dans une variable d'environnement (SYRIX_KEY) côté serveur.

JavaScript (Node 18+)
// syrix-client.js — client minimal (Node 18+). La clé reste côté serveur.
const BASE = "https://flix.syrixvision.com/api/developer/v1";

export class SyrixClient {
  constructor(apiKey) { this.apiKey = apiKey; }

  async get(path, params = {}) {
    const url = new URL(BASE + path);
    for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, v);
    const res = await fetch(url, { headers: { "X-API-Key": this.apiKey } });
    const body = await res.json();
    if (!body.success) throw new Error(body.error.code + ": " + body.error.message);
    return body;
  }

  search(q)                 { return this.get("/search", { q }).then((b) => b.data); }
  list(type, page = 1)      { return this.get("/" + type, { page }); }          // movies | series | anime | dramas | webtoons
  detail(type, slug)        { return this.get("/" + type + "/" + slug).then((b) => b.data); }

  // Liens de lecture quel que soit le type de contenu
  async servers(type, slug, episodeId) {
    if (type === "movies" || type === "series") return (await this.get("/episodes/" + episodeId + "/servers")).data;
    return (await this.get("/" + type + "/" + slug + "/servers", { episode: episodeId })).data;
  }

  // Manga / manhwa / webtoon (gratuit). type = manga | manhwa | manhua | webtoon
  comics(params = {})       { return this.get("/comics", params); }
  comic(id, lang = "fr")    { return this.get("/comics/" + id, { lang }).then((b) => b.data); }          // détail + chapters[]
  comicPages(chapterId, quality = "data-saver") { return this.get("/comics/chapters/" + chapterId + "/pages", { quality }).then((b) => b.data); }

  // Raccourci : cherche un titre et renvoie le premier lien de lecture
  async watch(query) {
    const [hit] = (await this.search(query)).filter((r) => r.type !== "webtoon");
    if (!hit) throw new Error("Aucun résultat");
    const type = { movie: "movies", series: "series", anime: "anime", drama: "dramas" }[hit.type];
    const d = await this.detail(type, hit.slug);
    const episodeId = d.episodes?.[0]?.episode_id ?? d.first_episode_id;
    const servers = await this.servers(type, hit.slug, episodeId);
    return { title: d.title, episodeId, servers };
  }
}

// Utilisation
// const syrix = new SyrixClient(process.env.SYRIX_KEY);
// const { servers } = await syrix.watch("one piece");
// const { data } = await syrix.comics({ type: "manhwa", lang: "fr" });           // lister
// const title = await syrix.comic(data[0].slug);                                  // fiche + chapitres
// const reader = await syrix.comicPages(title.chapters[0].chapter_id);            // pages -> <img src=page.image>
// console.log(servers[0].server_link, servers[0].server_type);
Python
# syrix_client.py — client minimal (requests)
import os, requests

BASE = "https://flix.syrixvision.com/api/developer/v1"
TYPES = {"movie": "movies", "series": "series", "anime": "anime", "drama": "dramas"}

class Syrix:
    def __init__(self, key=None):
        self.key = key or os.environ["SYRIX_KEY"]

    def get(self, path, **params):
        r = requests.get(BASE + path, params=params, headers={"X-API-Key": self.key}, timeout=15)
        body = r.json()
        if not body["success"]:
            raise RuntimeError(f'{body["error"]["code"]}: {body["error"]["message"]}')
        return body

    def search(self, q):
        return self.get("/search", q=q)["data"]

    def detail(self, type_, slug):
        return self.get(f"/{type_}/{slug}")["data"]

    def servers(self, type_, slug, episode_id):
        if type_ in ("movies", "series"):
            return self.get(f"/episodes/{episode_id}/servers")["data"]
        return self.get(f"/{type_}/{slug}/servers", episode=episode_id)["data"]

    def comics(self, **params):               # type = manga | manhwa | manhua | webtoon
        return self.get("/comics", **params)

    def comic(self, id_, lang="fr"):          # détail + chapters[]
        return self.get(f"/comics/{id_}", lang=lang)["data"]

    def comic_pages(self, chapter_id, quality="data-saver"):
        return self.get(f"/comics/chapters/{chapter_id}/pages", quality=quality)["data"]

# Utilisation
# s = Syrix()
# hit = next(r for r in s.search("one piece") if r["type"] == "anime")
# d = s.detail("anime", hit["slug"])
# print(s.servers("anime", hit["slug"], d["episodes"][0]["episode_id"]))

TOKENS & LIMITES

Pay per request.

ERRORS

Stable error codes.

CodeHTTPSignification
api_key_required401Aucune clé fournie. Envoyez X-API-Key ou un Bearer token.
invalid_api_key401Clé invalide, révoquée ou expirée.
insufficient_tokens402Solde de tokens insuffisant pour cette requête.
rate_limited429Trop de requêtes par minute. Ralentissez puis réessayez.
not_found404Ressource, titre ou épisode introuvable (vérifiez slug et episode_id).
wrong_type404Le slug existe mais pas dans cette catégorie (ex. une série demandée via /movies).
missing_episode400Le paramètre episode est obligatoire sur /anime/{slug}/servers et /dramas/{slug}/servers.
missing_chapter400Le paramètre chapter est obligatoire sur /webtoons/{slug}/pages.
query_too_short400La recherche q doit faire au moins 2 caractères.
invalid_id400Identifiant invalide : /comics attend un UUID (champ slug / chapter_id).
invalid_type400type doit valoir manga, manhwa, manhua ou webtoon.
invalid_lang400lang invalide (exemples : fr, en, es, pt-br, all).
invalid_status400status doit valoir ongoing, completed, hiatus ou cancelled.
unknown_genre400Genre inconnu : utilisez un name renvoyé par /comics/genres.
adult_disabled403Le contenu adulte n'est pas disponible via l'API.
source_rate_limited503La source limite temporairement les requêtes : réessayez dans quelques secondes.
no_servers404Aucune source de lecture disponible pour l'instant.
no_pages404Aucune page disponible pour ce chapitre.
source_unavailable502Le catalogue source est temporairement indisponible. Réessayez dans quelques instants.

Les erreurs upstream sont normalisées en codes stables comme not_found, query_too_short, no_servers et source_unavailable.

TROUBLESHOOTING

Un problème ? Commencez ici.

ProblèmeSolution
not_found sur /anime/{slug}/serversLe slug et l'episode_id doivent venir du MÊME détail (/anime/{slug}). L'episode_id d'un anime est un texte (ex. one-piece-1100-vostfr), pas un numéro.
Je ne trouve pas comment lire un film ou une sérieUtilisez /episodes/{episode_id}/servers avec first_episode_id (film) ou episodes[].episode_id (série), tirés de /movies/{slug} ou /series/{slug}.
no_serversAucune source disponible pour cet épisode à cet instant. Réessayez plus tard ou choisissez une autre version (VF / VOSTFR).
Le lecteur reste noir ou refuse de s'afficherTestez les autres serveurs de la liste. Les lecteurs embed doivent être affichés dans un <iframe> (pas téléchargés). Ne mettez pas de sandbox trop strict ; autorisez allow-scripts et allow-same-origin.
Les liens de lecture ne marchent plus après quelques heuresLes liens sont temporaires : ne les stockez pas, redemandez-les à chaque lecture (cache de 5 minutes maximum).
401 invalid_api_keyClé erronée, révoquée ou expirée. Envoyez-la dans X-API-Key ou Authorization: Bearer. Plusieurs clés invalides depuis la même IP bloquent temporairement l'IP.
402 insufficient_tokensVotre solde de tokens est insuffisant. Rechargez-le depuis votre compte.
429 rate_limitedVous dépassez la limite par minute de votre plan (120/min par défaut). Ajoutez un délai ou un cache entre vos appels.
Mes appels échouent depuis le navigateur (CORS) ou ma clé fuitN'appelez jamais l'API depuis le navigateur : créez un petit backend (Node, Python…) qui détient la clé et expose vos propres routes à votre frontend.
/comics/{id} renvoie chapters videBeaucoup de séries très populaires sont licenciées : seuls des liens officiels existent, aucun chapitre lisible. Regardez available_languages et réessayez avec lang=en (ou une autre langue), ou choisissez un autre titre.
Les images manga ne s'affichent pasUtilisez directement les URLs image renvoyées (https, domaine STREAMIX). N'essayez pas d'appeler MangaDex vous-même : il bloque le hotlink. Les URLs de pages expirent après quelques minutes : redemandez /pages à l'ouverture du chapitre.
Obligations pour utiliser les données mangaAffichez « Source : MangaDex » et le nom du groupe de scan (data.group / credits). Pas de publicité ni de service payant autour de ces données, et retirez un titre si un groupe le demande.
Le sport (scores, matchs en direct) est-il disponible avec une clé ?Non : les scores ESPN sont limités à un usage non commercial et les flux sont gratuits/publics, donc ils restent réservés au site STREAMIX (page Sport). Les clés couvrent films, séries, animes, K-Dramas, manga, manhwa et webtoons.
Où est le contenu 18+ ?Il n'est pas disponible via les clés développeur (vérification d'âge obligatoire). Il reste réservé au site, après contrôle d'âge.