Zenix Embed API

Embed the Zenix player on partner sites via a simple iframe. Auto-selects the best streaming source (VF/VO) with zero backend exposure.

Interactive Builder

Testez l'embed en direct — changez le TMDB ID et voyez le résultat immédiatement.


                

Sécurité & intégration

  • Ne pas utiliser l'attribut sandbox sur l'iframe, ou inclure au minimum allow-scripts allow-same-origin allow-popups.
  • Utilise uniquement l’iframe générée par Zenix : les lecteurs <video>, HLS ou MP4 maison ne sont pas pris en charge.
  • Le lecteur démarre automatiquement. La cadence Smartlink reste gérée à l’intérieur de l’iframe, sur les interactions réelles du lecteur.
  • Mode strict : définir EMBED_FRAME_ANCESTORS_MODE=whitelist et EMBED_ALLOWED_ORIGINS sur le serveur.
  • Les URLs de flux sont signées et liées à la session (expiration ~15 min).

Introduction

The Zenix Embed API lets you integrate a fully-hosted video player into any website using a single <iframe> tag. The player handles source selection, Smartlink cadence and playback — no server-side code required on your end. Raw stream extraction and native-player relays are not supported.

Confidential: This documentation page is not linked from the main https://zenix.rest site. It is provided exclusively to authorized partners.

Quick Start

Copy this snippet to embed a movie:

<iframe
  src="https://zenix.rest/embed/zenix?tmdb=550&type=movie&lang=vf"
  width="100%" height="500" frameborder="0"
  allowfullscreen allow="autoplay; fullscreen; encrypted-media">
</iframe>

For TV series, add season and episode:

<iframe
  src="https://zenix.rest/embed/zenix?tmdb=71712&type=tv&season=1&episode=1&lang=vf"
  width="100%" height="500" frameborder="0"
  allowfullscreen allow="autoplay; fullscreen; encrypted-media">
</iframe>
Important pour sites partenaires

N'utilisez pas defer_play ni parent_gate dans l'URL embed — réservés au site Zenix. Sur votre site, utilisez uniquement l'URL ci-dessus : le lecteur démarre automatiquement et affiche son propre contrôle si un navigateur mobile exige un geste. L'iframe doit avoir allow="autoplay; fullscreen; encrypted-media" sans attribut sandbox.

Parameters

ParameterTypeRequiredDescription
tmdbintegerYesTMDB content ID
typestringYesmovie or tv
seasonintegerTV onlySeason number (default: 1)
episodeintegerTV onlyEpisode number (default: 1)
langstringNovf (French) or vo (original). Auto-selects best source.

Availability API

Check whether content is available before embedding:

GET https://zenix.rest/api/embed-player/availability?tmdb=&type=&season=&episode=

Response

{
  "ok": true,
  "vf": true,
  "vo": false,
  "available": true,
  "meta": { "title": "Fight Club", "type": "movie" }
}
FieldTypeDescription
okbooleanRequest succeeded
vfboolean | nullFrench dub: true if confirmed on a source, false if absent, null if not verified. Includes confirmed S3 results.
voboolean | nullOriginal version availability; null means not verified.
availableboolean | nullAt least one source confirmed. Never treat null as false.
pendingbooleanVerification is incomplete. Do not hide the player solely because a source is unverified.
should_embedbooleanPresentation recommendation: true unless absence is confirmed. This does not claim that unknown content is available.
availability_statusstringconfirmed_available, confirmed_unavailable, unknown, or last_known_available (temporary cached evidence).
availability_cacheobjectchecked_at, age_seconds and stale describe the real verification time. A positive fallback expires after 15 minutes and stays separate for every episode, language and permission context.
sources.s3boolean | nullS3 evidence for the requested language and episode. Provider errors or cooldowns are unknown, not confirmed absence.
metaobjectContent metadata (title, type, etc.)
Ne masquez pas le lecteur sur une panne API

HTTP 202 ou null signifie « non vérifié », jamais « absent ». Ne testez pas if (data.available). Pour la langue demandée, masquez uniquement lorsque son champ vaut strictement false ; sur erreur réseau, conservez le lecteur.

let showReader = true;
try {
  const response = await fetch(availabilityUrl);
  if (response.ok) {
    const data = await response.json();
    // requestedLanguage vaut "vf" ou "vo".
    showReader = data.available !== false && data[requestedLanguage] !== false;
  }
} catch (_) { /* On garde le lecteur : pas de fausse absence. */ }
reader.hidden = !showReader;

Les sites déjà intégrés doivent adopter cette condition : le serveur Fluxora ne peut pas corriger à distance leur propre JavaScript. Les permissions d’accès au lecteur restent inchangées.

Embed URL

Base pattern:

https://zenix.rest/embed/zenix?tmdb=ID&type=movie|tv&season=1&episode=1&lang=vf|vo

Integration Examples

HTML

<!-- Movie -->
<iframe
  src="https://zenix.rest/embed/zenix?tmdb=550&type=movie&lang=vf"
  width="100%" height="500" frameborder="0"
  allowfullscreen allow="autoplay; fullscreen; encrypted-media">
</iframe>

<!-- TV Series -->
<iframe
  src="https://zenix.rest/embed/zenix?tmdb=71712&type=tv&season=1&episode=1&lang=vf"
  width="100%" height="500" frameborder="0"
  allowfullscreen allow="autoplay; fullscreen; encrypted-media">
</iframe>

React

function ZenixPlayer({ tmdb, type = 'movie', season = 1, episode = 1, lang = 'vf' }) {
  const params = new URLSearchParams({ tmdb, type, lang });
  if (type === 'tv') { params.set('season', season); params.set('episode', episode); }
  const src = `https://zenix.rest/embed/zenix?${params}`;

  return (
    <iframe
      src={src}
      width="100%" height="500"
      frameBorder="0"
      allowFullScreen
      allow="autoplay; fullscreen; encrypted-media"
      title="Zenix Player"
    />
  );
}

WordPress

// functions.php — shortcode [zenix tmdb="550" type="movie" lang="vf"]
function zenix_embed_shortcode($atts) {
    $a = shortcode_atts([
        'tmdb' => '', 'type' => 'movie',
        'season' => '1', 'episode' => '1', 'lang' => 'vf'
    ], $atts);
    if (!$a['tmdb']) return '';
    $url = 'https://zenix.rest/embed/zenix?' . http_build_query(array_filter([
        'tmdb' => $a['tmdb'], 'type' => $a['type'],
        'season' => $a['type'] === 'tv' ? $a['season'] : null,
        'episode' => $a['type'] === 'tv' ? $a['episode'] : null,
        'lang' => $a['lang']
    ]));
    return '<iframe src="' . esc_url($url) . '" width="100%" height="500" '
         . 'frameborder="0" allowfullscreen '
         . 'allow="autoplay; fullscreen; encrypted-media"></iframe>';
}
add_shortcode('zenix', 'zenix_embed_shortcode');

Usage: [zenix tmdb="550" type="movie" lang="vf"]