Cinextream API

EMBED API

Biggest and Fastest Streaming API

115K+Movies
79K+Shows
9K+Anime

Select content and press Load to start streaming

Features

Easy to Use

Intuitive and simple. Just construct the URL and embed the player anywhere with minimal setup.

Huge Library

With content aggregated from multiple sources, we have one of the largest streaming libraries available.

Auto-Updated

Content is automatically updated with higher-quality versions when they become available from sources.

Fully Responsive

The player works seamlessly across desktops, mobiles, and tablets with adaptive quality selection.

High Quality

Links offer the highest available quality, with most content in 1080p Full HD resolution.

Fast Servers

Our player uses a list of the fastest streaming servers for buffer-free, smooth playback.

Customizable

Customize the player's appearance using simple query parameters to match your brand.

Autoplay & Auto-Next

Automatic playback on load and smart next-episode detection for seamless binge-watching.

API Documentation

Embed Movies

Use TMDB ID from The Movie Database API.

/api/cinero/movie/[ID]

Returns an HTML page with the Cinero player embeddable in an iframe.

Embed TV Series

TMDB ID, season, and episode numbers, all in the URL path.

/api/cinero/tv/[ID]/[season]/[episode]

Supports autoplay, auto-next episode detection, and resume playback.

Embed Anime

AniList ID or MAL ID + episode number. Supports sub & dub.

/api/cinero/anime/[lang]/[AniList-ID]/[episode]
/api/cinero/anime/mal/[lang]/[MAL-ID]/[episode]

Supports autoplay, auto-next episode detection, and resume playback.

Player Customization

color=[HEX_CODE]

Changes the player UI theme color (e.g., color=e91e63 for pink, color=E6B800 for gold)

autoplay=[true/false]

Attempts to autoplay the video when the player loads. Note: browsers may block autoplay.

logo=[URL]

Displays a custom logo image in the top-left corner of the player overlay.

title=[STRING]

Overrides the default title displayed in the player. Useful for custom naming.

/api/cinero/tv/94997/1/1?color=e91e63&logo=[URL]

Integration Examples

Basic HTML Embed

The simplest way to embed the player is using an HTML iframe. Just place the following code on your webpage and replace the TMDB ID with your content identifier. The player handles everything including stream fetching, quality selection, and subtitle loading.

<iframe
  src="https://cinextream.net/api/cinero/tv/94997/1/1"
  width="100%"
  style="aspect-ratio: 16/9;"
  frameborder="0"
  allowfullscreen
  allow="autoplay; encrypted-media">
</iframe>

PostMessage Event Handling

The player broadcasts events to the parent window using the postMessage API. You can listen for these events to implement custom behaviors like auto-navigation, analytics tracking, or error recovery.

window.addEventListener('message', (event) => {
  const data = typeof event.data === 'string'
    ? JSON.parse(event.data) : event.data;

  switch (data.event) {
    case 'player_ready':
      console.log('Player loaded successfully');
      break;
    case 'time':
      // { time: seconds, duration: seconds }
      console.log(`Playing: ${data.time}/${data.duration}`);
      break;
    case 'complete':
      console.log('Video finished');
      break;
    case 'player_error':
      // { reason: 'stream_error' | 'all_servers_failed' }
      console.error('Error:', data.reason);
      break;
    case 'VIDEO_ENDED':
      // { tmdbId, season, episode }
      console.log('Auto-next →', data.season, data.episode);
      break;
  }
});

React Component Example

Here is a complete React component that wraps the embed player. It accepts TMDB ID, season, and episode as props, making it easy to drop into any React application. The component also handles loading states and errors gracefully.

function StreamPlayer({ tmdbId, type, season, episode, color }) {
  const [loading, setLoading] = useState(true);

  const url = type === 'series'
    ? `/api/cinero/tv/${tmdbId}/${season || 1}/${episode || 1}${color ? '?color=' + color : ''}`
    : `/api/cinero/movie/${tmdbId}${color ? '?color=' + color : ''}`;

  return (
    <div style={{ position: 'relative', width: '100%', paddingTop: '56.25%' }}>
      {loading && (
        <div style={{
          position: 'absolute', inset: 0, zIndex: 10,
          display: 'flex', alignItems: 'center', justifyContent: 'center',
          background: 'rgba(0,0,0,0.7)'
        }}>
          <p>Loading player...</p>
        </div>
      )}
      <iframe
        src={url}
        style={{ position: 'absolute', inset: 0,
          width: '100%', height: '100%', border: 'none' }}
        allowFullScreen
        allow="autoplay; encrypted-media"
        onLoad={() => setLoading(false)}
      />
    </div>
  );
}

Event Handling (PostMessage API)

The player broadcasts events to the parent window using the postMessage API. You can listen for these events to implement custom behaviors like auto-navigation, analytics tracking, or error recovery. Below are the available events and their data payloads.

window.addEventListener('message', (event) => {
  const data = typeof event.data === 'string'
    ? JSON.parse(event.data) : event.data;

  switch (data.event) {
    case 'player_ready':
      // Player has loaded and is ready
      console.log('Player is ready');
      break;

    case 'time':
      // Time update: { time: seconds, duration: seconds }
      console.log(`Time: ${data.time}/${data.duration}`);
      break;

    case 'complete':
      // Video finished playing
      console.log('Video completed');
      break;

    case 'player_error':
      // Error occurred: { reason: string }
      console.error('Player error:', data.reason);
      break;

    case 'VIDEO_ENDED':
      // Auto-next: { tmdbId, season, episode }
      console.log(`Next: S${data.season}E${data.episode}`);
      break;
  }
});

Event Reference

EventPayloadDescription
player_ready{}Fired when the player has fully loaded and is ready to play content.
time{ time, duration }Emitted continuously during playback with current time and total duration in seconds.
complete{}Fired when the video reaches the end and playback is complete.
player_error{ reason }Sent on error. Reason: 'stream_error' (auto-switched) or 'all_servers_failed'.
VIDEO_ENDED{ tmdbId, season, episode }Broadcast when auto-next triggers with the next episode's details.

Frequently Asked Questions