> ## Documentation Index
> Fetch the complete documentation index at: https://vyla.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Paths and playback events

> The complete Stream API playback contract, unified for movies and TV episodes.

## Playback paths

The API supports both the short paths below and `/api`-prefixed equivalents. A movie needs only `id`; a TV episode also needs `season` and `episode`.

| Media | Path | Response |
| - | - | - |
| Movie | `GET /movie?id=:id` | Server-Sent Events |
| TV episode | `GET /tv?id=:id&season=:season&episode=:episode` | Server-Sent Events |

`id` is a TMDB ID. For example:

```bash theme={null}
curl -N "http://localhost:7860/movie?id=155"
curl -N "http://localhost:7860/tv?id=1396&season=1&episode=1"
```

## Event contract

Playback routes use `text/event-stream`, not a single JSON document. Read each `data: ` line as JSON.

### `meta`

Sent before source resolution completes. It can include TMDB metadata and an array of subtitle tracks.

```json theme={null}
{
  "type": "meta",
  "meta": { "id": 155, "title": "The Dark Knight" },
  "subtitles": [{ "label": "English", "file": "https://…", "type": "vtt", "source": "v1" }]
}
```

### `source`

One event for each candidate that passes the service's verification pipeline.

```json theme={null}
{
  "type": "source",
  "source": {
    "source": "provider-key",
    "label": "Provider name",
    "url": "http://localhost:7860/api?url=…"
  }
}
```

The `url` is ready for a player. HLS sources may be wrapped by Vyla's proxy so manifest segments and keys can be fetched with the appropriate upstream headers. Some configured sources bypass proxying. Do not assume a filename extension alone determines playback behavior.

### `done`

Sent after the configured attempts are complete.

```json theme={null}
{ "type": "done", "total": 3 }
```

`total: 0` means no playable sources were produced for that request. The SSE connection itself can still be successful.

## Client rules

1. Start playback as soon as the first `source` arrives.
2. Queue every later source for manual switching or automatic fallback.
3. Attach subtitle tracks from `meta` without blocking playback.
4. Treat an empty result as a normal product state, not a malformed response.
5. Abort the request when the viewer leaves the page or chooses another title.

The [integration guide](/guides/integrations) contains a practical player pattern; [error handling](/guides/error-handling) covers fallback behavior.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.