canonical: https://jentic.com/apis/my-tv-channel.com/my-tv-channel

# My TV Channel Agent API

The My TV Channel Agent API creates and runs 24/7 linear TV channels that simply play, streamed at a handle subdomain of my-tv-channel.com and in the iOS, iPadOS, tvOS, macOS, Android, Fire TV, and Roku apps. You import videos from a public URL or a YouTube video the owner proves they uploaded, the service transcodes them, and it builds a continuous schedule weighted by how often each video should play. A channel goes on air automatically once it has at least 4 ready assets and 15 minutes of content with a weight above zero. On Pro tier and above you can also place specific assets manually and set a durable ruleset for the schedule, and a validate call previews any ruleset on a simulated 24-hour grid without saving it.

## For AI agents

Create a 24/7 linear TV channel, import videos by URL or from YouTube, poll transcoding until the channel launches, tune how often each video airs, and read or rebuild the programme guide.

## Scope

Does not handle live event streaming, on-demand video libraries with viewer search, or video editing. Use for building and running continuous 24/7 linear TV channels on My TV Channel only.

## Capabilities

- Check the owner's tier, rolling 7-day upload and streaming quota, and each channel's launchGaps with GET `/users/status.php` before doing anything else
- Create a thematic or location channel with POST `/channels/create.php` after confirming the handle is free with GET `/channels/check-handle.php`
- Import a video from a direct public media URL, including a finite .m3u8, with POST `/assets/import-url.php` so the server fetches it for you
- Poll transcoding and summary.meetsLaunchRequirements with GET `/assets/status.php`, then watch scheduleStatus on GET `/channels/get.php` until it reads active
- Set how often a video airs with a weight from 0 to 10 through PUT `/assets/update.php`, then rebuild the schedule with POST `/schedule/regenerate.php`
- Dry-run a scheduling ruleset with POST `/schedule/validate.php`, which saves nothing and returns errors, warnings, and a 24-hour preview
- Read the public programme guide for a channel with GET `/channels/schedule.php`, which needs no authentication

## Use cases

### Launch a channel end to end through Jentic

An agent can take a channel from nothing to on air for its owner using the owner's API key. Through Jentic it finds each My TV Channel operation by intent: GET `/users/status.php` for the tier and quota, GET `/channels/check-handle.php` and POST `/channels/create.php` for the channel, POST `/assets/import-url.php` for each video, then GET `/assets/status.php` until summary.meetsLaunchRequirements is true and GET `/channels/get.php` until scheduleStatus is active. The agent then reports the watch URL to the owner.

Example prompt: Call GET `/users/status.php`, GET `/channels/check-handle.php` with handle 'retro-cartoons', POST `/channels/create.php` with handle 'retro-cartoons', name 'Retro Cartoons', and channel_type thematic, then POST `/assets/import-url.php` for four public MP4 URLs and poll GET `/assets/status.php` until meetsLaunchRequirements is true

### Tune rotation with weights

Not every video should air equally often. Each asset carries a weight from 0 to 10, default 5, set through PUT `/assets/update.php` with asset_id in the body; 0 removes a video from scheduling without deleting it. Weights only reach the air when the schedule is generated, so on a channel that is already live the agent follows weight changes with POST `/schedule/regenerate.php.`

Example prompt: Call GET `/assets/my.php` with channel_id 42, call PUT `/assets/update.php` with asset_id 9001 and weight 10, then call POST `/schedule/regenerate.php` with channel_id 42

### Programming rules for timed blocks

Owners on Pro tier and above can describe durable programming intent, such as a morning block, as a ruleset the scheduler re-honours on every rebuild. PUT `/schedule/rules.php` replaces the whole ruleset rather than merging, so the agent reads the current one with GET `/schedule/rules.php`, validates the new payload with POST `/schedule/validate.php` for errors, warnings, and a 24-hour preview, and only then commits it with the channel timezone set.

Example prompt: Call GET `/schedule/rules.php` with channel_id 42, add a rule to the returned rules, call POST `/schedule/validate.php` with channel_id 42, timezone 'Europe/Paris', and the full rules array, and only if valid is true call PUT `/schedule/rules.php` with the same payload

### Public programme guide on your own site

A website or companion app can show what is on now and next without holding any key. GET `/channels/schedule.php` returns the electronic programme guide for a channel_id with no authentication, and unlike every other endpoint its data field is a bare array rather than an object, so a client should read it as a list.

Example prompt: Call GET `/channels/schedule.php` with channel_id 42 and return the titles of the current and next items from the data array

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/users/status.php` | Get tier, quotas, channels, and launch gaps |
| POST | `/channels/create.php` | Create a channel |
| POST | `/assets/import-url.php` | Import a video from a public URL |
| GET | `/assets/status.php` | Poll transcoding and launch readiness |
| GET | `/channels/get.php` | Get one channel and whether it is on air |
| PUT | `/assets/update.php` | Set a video's weight, title, or tags |
| POST | `/schedule/regenerate.php` | Rebuild the schedule with current weights |
| GET | `/channels/schedule.php` | Get the public programme guide |

## Key resources

- **Account status and quota** — Tier, real account limits, rolling 7-day upload and streaming quota, and per-channel launch gaps
- **Channels** — Handle checks, creation, updates, archiving, and on-air status with the watch URL
- **Assets** — Video uploads and imports by URL or from YouTube, transcode status, weights, soft delete, and retries
- **Schedule** — The programme guide, regeneration, manual placement, and Pro-tier rulesets with a no-save validator

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 65 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 87 / 100
  - Developer Experience & Jentic Compatibility: 63 / 100
  - AI-Readiness & Agent Experience: 47 / 100
  - Agent Usability: 94 / 100
  - Security: 60 / 100
  - AI Discoverability: 67 / 100
- **View full report:** https://jentic.com/apis/my-tv-channel.com/my-tv-channel/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring My TV Channel by hand means getting a mytv_sk_ bearer key from the owner, learning that channel ids go in the query string while asset ids go in the body, and handling the public programme guide's bare-array response. Through Jentic you install once, import My TV Channel from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** My TV Channel passes channel and asset ids in the query string or request body rather than as path segments, so rules bound which operations your agent may call, not which channel. You choose the operations it may call, so ones like archiving a channel or replacing a ruleset are not included unless you add them.
- **Credential handling:** The owner's My TV Channel key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'import a video into my TV channel' or 'check if my channel is live', and Jentic returns the matching My TV Channel operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Mux API** — Video encoding, on-demand and live streaming infrastructure for developers
- **api.video API** — Video hosting, transcoding, and live streaming with a hosted player
- **Vimeo API** — Video hosting and management for an existing library
- **YouTube Data API** — Search and manage YouTube videos and channels

## FAQ

### Is there a My TV Channel MCP server?

You don't need an MCP server to give your agent My TV Channel. Jentic connects it directly from the API Directory: import it, store the owner's API key once, and your agent calls it. Operations are discovered on demand, so no extra tool definitions sit in the agent's context.

### What authentication does the My TV Channel Agent API use?

Per its OpenAPI spec, the API uses an API key sent as Authorization: Bearer mytv_sk_..., created by the signed-in owner at my-tv-channel.com/agent-keys or in the app under Profile, Agent Access. It needs an active subscription and inherits the owner's tier limits, and an agent cannot mint its own key. GET `/channels/schedule.php` is the exception and needs no authentication. Through Jentic, the key is stored encrypted by your own Jentic One instance and injected at call time.

### Can I limit what my agent is allowed to do with the My TV Channel Agent API?

Yes. For example, write a rule that allows only GET `/users/status.php`, GET `/channels/list.php`, GET `/assets/my.php`, GET `/assets/status.php`, and POST `/assets/import-url.php.` Your agent can then add videos and watch them transcode, but it cannot archive channels, delete assets, or replace a ruleset, and every call it makes is logged.

### What are the rate limits for the My TV Channel Agent API?

The OpenAPI spec states a limit of 1,000 requests per hour per key. Going over returns 429 with a Retry-After header, which the agent should honour. Upload duration also counts against a rolling 7-day quota reported by GET `/users/status.php.`

### When does a My TV Channel channel go live?

Automatically, once it has at least 4 ready assets and at least 15 minutes of content with weight above 0. Poll GET `/assets/status.php` for summary.meetsLaunchRequirements, then GET `/channels/get.php` until scheduleStatus is active, and report the watchUrl to the owner.

### How do I add a video to a channel through Jentic?

Search Jentic for 'import a video into my TV channel', load the importVideoFromUrl operation, and call POST `/assets/import-url.php` with channel_id and a direct, public, unauthenticated media url such as an MP4 or a finite .m3u8. The server fetches the file itself. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Can I import YouTube videos into My TV Channel?

Only ones the owner can prove they uploaded. Get the owner's tag from GET `/users/device.php`, ask the owner to paste that exact MyTVChannelApp# string into the video's description or tags on YouTube, then call POST `/assets/import-youtube.php` with channel_id and the video url.
