# API (StreamNexus)

## Entrada
https://api.plusmovie.pw/streamnexus/api.php/movie/page/1

## Rutas

La API soporta estas formas de llamada:

- `api.php/movie/page/1`
- `api.php/movie/id/12`
- `api.php/movie/latest`
- `api.php/movie/updated`
- `api.php/movie/all`
- `api.php/anime/page/1`
- `api.php/anime/id/12`
- `api.php/anime/latest`
- `api.php/anime/updated`
- `api.php/anime/all`
- `api.php/anime_seasons/12`
- `api.php/anime_episodes/12`
- `api.php/anime_videos/12`
- `api.php/series/page/1`
- `api.php/series/id/12`
- `api.php/series/latest`
- `api.php/series/updated`
- `api.php/series/newEpisodes`
- `api.php/series/all`
- `api.php/movie_videos/12`
- `api.php/seasons/12`
- `api.php/seasons/id/12`
- `api.php/seasons/updated`
- `api.php/episodes/12`
- `api.php/episodes/latest`
- `api.php/serie_videos/12`
- `api.php/featureds`
- `api.php/featureds/id/12`
- `api.php/livetvs`
- `api.php/livetv_videos/12`
- `api.php/search?q=naruto`
- `api.php?path=/movie/latest`
- `api.php?path=/movie/updated`
- `api.php?path=/movie/all`
- `api.php?path=/anime/page/1`
- `api.php?path=/anime/id/12`
- `api.php?path=/anime/latest`
- `api.php?path=/anime/updated`
- `api.php?path=/anime/all`
- `api.php?path=/anime_seasons/12`
- `api.php?path=/anime_episodes/12`
- `api.php?path=/anime_videos/12`
- `api.php?path=/series/page/1`
- `api.php?path=/movie_videos/12`
- `api.php?path=/seasons/12`
- `api.php?path=/seasons/id/12`
- `api.php?path=/seasons/updated`
- `api.php?path=/episodes/12`
- `api.php?path=/episodes/latest`
- `api.php?path=/serie_videos/12`
- `api.php?path=/featureds`
- `api.php?path=/livetvs`
- `api.php?path=/livetv_videos/12`
- `api.php?path=/search&q=naruto`

Si tu servidor está configurado con rewrite para apuntar todo a `api.php`, entonces también puedes usar:

- `/movie/page/1`
- `/movie/id/12`
- `/movie/latest`
- `/movie/updated`
- `/anime/page/1`
- `/anime/id/12`
- `/anime/latest`
- `/anime/updated`
- `/anime_seasons/12`
- `/anime_episodes/12`
- `/anime_videos/12`
- `/series/page/1`
- `/series/id/12`
- `/series/latest`
- `/series/updated`
- `/series/newEpisodes`
- `/movie_videos/12`
- `/seasons/12`
- `/seasons/updated`
- `/episodes/12`
- `/episodes/latest`
- `/serie_videos/12`
- `/featureds`
- `/featureds/id/12`
- `/livetvs`
- `/livetv_videos/12`
- `/search?q=naruto`

## Search

### Búsqueda por nombre (movies + series + animes)

- Ruta: `GET /search`
- Query obligatorio: `q` (texto a buscar)
- Query opcional: `limit` (1 a 50, por defecto 20)
- Ejemplo: `/search?q=naruto&limit=20`

Devuelve una lista combinada de resultados con un campo `type` que indica si el registro es `movie`, `series` o `anime`. La búsqueda es insensible a mayúsculas/minúsculas.

## Movies

### Listado con paginación

- Ruta: `GET /movie/page/{page}`
- Query opcional: `per_page` (1 a 100, por defecto 20)
- Ejemplo: `/movie/page/1?per_page=20`

Respuesta incluye:

- `page`, `per_page`, `total`, `total_pages`
- `data`: lista de filas de la tabla `movies`
- `meta.fields`: descripción corta de cada campo

### Detalle por ID

- Ruta: `GET /movie/id/{id}`
- Ejemplo: `/movie/id/12`

Si no existe devuelve `404` con `error: "not_found"`.

### Últimas añadidas (por `created_at`)

- Ruta: `GET /movie/latest`
- Query opcional: `limit` (1 a 50, por defecto 10)
- Ejemplo: `/movie/latest?limit=10`

### Últimas actualizadas (por `updated_at`)

- Ruta: `GET /movie/updated`
- Query opcional: `limit` (1 a 50, por defecto 10)
- Ejemplo: `/movie/updated?limit=10`

### Listado completo (sin paginación)

- Ruta: `GET /movie/all`
- Ejemplo: `/movie/all`

Devuelve todas las películas de la base de datos. ¡Cuidado con el tamaño de la respuesta!

## Anime

### Listado con paginación

- Ruta: `GET /anime/page/{page}`
- Query opcional: `per_page` (1 a 100, por defecto 20)
- Ejemplo: `/anime/page/1?per_page=20`

Respuesta incluye:

- `page`, `per_page`, `total`, `total_pages`
- `data`: lista de filas de la tabla `animes`
- `meta.fields`: descripción corta de cada campo

### Detalle por ID

- Ruta: `GET /anime/id/{id}`
- Ejemplo: `/anime/id/12`

Si no existe devuelve `404` con `error: "not_found"`.

### Últimos añadidos (por `created_at`)

- Ruta: `GET /anime/latest`
- Query opcional: `limit` (1 a 50, por defecto 10)
- Ejemplo: `/anime/latest?limit=10`

### Últimos actualizados (por `updated_at`)

- Ruta: `GET /anime/updated`
- Query opcional: `limit` (1 a 50, por defecto 10)
- Ejemplo: `/anime/updated?limit=10`

### Listado completo (sin paginación)

- Ruta: `GET /anime/all`
- Ejemplo: `/anime/all`

Devuelve todos los animes de la base de datos. ¡Cuidado con el tamaño de la respuesta!

## Anime Seasons

### Búsqueda por anime_id

- Ruta: `GET /anime_seasons/{anime_id}`
- Ejemplo: `/anime_seasons/12`

Devuelve las temporadas de ese anime (tabla `anime_seasons`). Si no hay resultados devuelve `ok: true` con `message: "no_results"` y `data: []`.

## Anime Episodes

### Búsqueda por anime_season_id

- Ruta: `GET /anime_episodes/{anime_season_id}`
- Ejemplo: `/anime_episodes/12`

Devuelve los episodios de esa temporada (tabla `anime_episodes`). Si no hay resultados devuelve `ok: true` con `message: "no_results"` y `data: []`.

## Anime Videos

### Búsqueda por anime_episode_id

- Ruta: `GET /anime_videos/{anime_episode_id}`
- Ejemplo: `/anime_videos/12`

Devuelve una lista de videos para ese episodio (tabla `anime_videos`). Si no hay resultados devuelve `ok: true` con `message: "no_results"` y `data: []`.

Los objetos de video incluyen: `id`, `server`, `link`, `lang`, `embed`, `hls`, `supported_hosts`, `header`.

## Series

### Listado con paginación

- Ruta: `GET /series/page/{page}` (también funciona `GET /serie/page/{page}`)
- Query opcional: `per_page` (1 a 100, por defecto 20)
- Ejemplo: `/series/page/1?per_page=20`

### Detalle por ID

- Ruta: `GET /series/id/{id}` (también funciona `GET /serie/id/{id}`)
- Ejemplo: `/series/id/12`

Si no existe devuelve `404` con `error: "not_found"`.

### Últimas añadidas (por `created_at`)

- Ruta: `GET /series/latest`
- Query opcional: `limit` (1 a 50, por defecto 10)
- Ejemplo: `/series/latest?limit=10`

### Últimas actualizadas (por `updated_at`)

- Ruta: `GET /series/updated`
- Query opcional: `limit` (1 a 50, por defecto 10)
- Ejemplo: `/series/updated?limit=10`

### Nuevos episodios (solo `newEpisodes = 1`)

- Ruta: `GET /series/newEpisodes`
- Query opcional: `limit` (1 a 50, por defecto 5)
- Ejemplo: `/series/newEpisodes?limit=5`

Si no hay resultados devuelve `ok: true` con `message: "no_new_episodes"` y `data: []`.

### Listado completo (sin paginación)

- Ruta: `GET /series/all`
- Ejemplo: `/series/all`

Devuelve todas las series de la base de datos. ¡Cuidado con el tamaño de la respuesta!

## Movie Videos

### Búsqueda por movie_id

- Ruta: `GET /movie_videos/{movie_id}`
- Ejemplo: `/movie_videos/12`

Devuelve una lista de videos para esa película (tabla `movie_videos`). Si no hay resultados devuelve `ok: true` con `message: "no_results"` y `data: []`.

Los objetos de video incluyen: `id`, `server`, `link`, `lang`, `embed`, `hls`, `supported_hosts`, `header`, `updated_at`.

## Seasons

### Búsqueda por serie_id

- Ruta: `GET /seasons/{serie_id}` (también funciona `GET /season/{serie_id}`)
- Ejemplo: `/seasons/12`

Devuelve las temporadas de esa serie (tabla `seasons`). Si no hay resultados devuelve `ok: true` con `message: "no_results"` y `data: []`.

### Detalle por ID

- Ruta: `GET /seasons/id/{id}` (también funciona `GET /season/id/{id}`)
- Ejemplo: `/seasons/id/12`

Si no existe devuelve `404` con `error: "not_found"`.

### Últimas actualizadas (por `updated_at`)

- Ruta: `GET /seasons/updated`
- Query opcional: `limit` (1 a 50, por defecto 10)
- Ejemplo: `/seasons/updated?limit=10`

## Episodes

### Búsqueda por season_id

- Ruta: `GET /episodes/{season_id}` (también funciona `GET /episode/{season_id}`)
- Ejemplo: `/episodes/12`

Devuelve los episodios de esa temporada (tabla `episodes`). Si no hay resultados devuelve `ok: true` con `message: "no_results"` y `data: []`.

### Últimos añadidos (por `created_at`)

- Ruta: `GET /episodes/latest`
- Query opcional: `limit` (1 a 50, por defecto 10)
- Ejemplo: `/episodes/latest?limit=10`

## Serie Videos

### Búsqueda por episode_id

- Ruta: `GET /serie_videos/{episode_id}`
- Ejemplo: `/serie_videos/12`

Devuelve una lista de videos para ese episodio (tabla `serie_videos`). Si no hay resultados devuelve `ok: true` con `message: "no_results"` y `data: []`.

Los objetos de video incluyen: `id`, `server`, `link`, `lang`, `embed`, `hls`, `supported_hosts`, `header`.

## Featureds

### Listado

- Ruta: `GET /featureds`
- Query opcional: `type` (ej: `movie`, `series`, `anime`)
- Ejemplo: `/featureds?type=movie`

### Detalle por ID

- Ruta: `GET /featureds/id/{id}`
- Ejemplo: `/featureds/id/12`

Si no existe devuelve `404` con `error: "not_found"`.

## Live TV

### Listado de canales

- Ruta: `GET /livetvs` (también funciona `GET /livetv`)
- Ejemplo: `/livetvs`

Devuelve el listado completo de canales de TV en vivo (tabla `livetvs`).

Respuesta incluye:

- `data`: lista de canales con `id`, `name`, `poster_path`, `backdrop_path`.

## Live TV Videos

### Búsqueda por livetv_id

- Ruta: `GET /livetv_videos/{livetv_id}`
- Ejemplo: `/livetv_videos/1`

Devuelve una lista de videos/enlaces para ese canal (tabla `livetv_videos`). Si no hay resultados devuelve `ok: true` con `message: "no_results"` y `data: []`.
