Two ways to connect
- Platform import (sitemap plus API)
- Website sitemap (self serve)
For a brand with its own video platform and metadata API. You send us the details below, and AgentTV sets up the mapping for your account. The mapping is configuration, not custom code.
What you provide
The import reads a list of your videos (a video sitemap or a JSON Feed) plus your metadata API.1. Your video sitemap
A standard video sitemap, or a sitemap index of them. Tell us:- The sitemap URL. It must be https. Child sitemaps must be on the same host.
- Where the id sits. Either in the page URL (
<loc>) or in the player URL (<video:player_loc>). - A pattern for the id. A regular expression with one capture group that pulls your id out of that URL. Entries it does not match are skipped.
video:publication_date), lastmod, duration and thumbnail when present. Publish dates help AI apps judge how fresh a video is, so include them.
Large sitemaps are fine. AgentTV reads the sitemap in the background into a stored index and reads it again every 12 hours. Nothing waits on a live sitemap read.
If your sitemap gives each video a video:title, search in the console covers your whole catalog at once.
A JSON Feed instead of a sitemap
In place of a sitemap, the list can be a JSON Feed 1.1. AgentTV tells the two apart by the document. Each item is one video:
Three optional fields go under an
_agentcdn object on the item:
default_audio_languageis the language the video is spoken in (BCP 47). It holds until the transcript detects the language. It can differ fromlanguage: an English page for a video spoken in Spanish. See Languages.windowis the one time range of the video to import, in seconds of the source. The feed owns it: an item with a window imports only that range, and a console pick cannot change it. An item with no window imports whole.expiresis when your licence for the video ends. After it, the video is not played, listed or used in answers. A changed or removedexpiresmoves or clears the end on the next read. Anexpiresthat is not a time keeps the item out of the list.
next_url, on the same host. An item with no usable id or page URL is skipped. Caption tracks come from the HLS stream’s subtitle renditions.
2. Read access to your metadata API
AgentTV reads one item per video from your API. Tell us:- The API origin, for example
https://api.example.com. Every request and redirect stays on this origin. - The item path with
{id}where your id goes, for example/v3/videos/{id}. - Any headers the API needs, and an optional token step: one call at the start of each run that returns a token for the item reads.
- Where each field sits in the response, as a dot path such as
data.attributes.title:
3. The playback URL
Pick one:- A field in the API answer that holds the HLS master playlist URL.
- A manifest URL template when your playback URL follows from the id. It is an https URL with
{id}in the path or query, for examplehttps://play.example.com/{id}/master.m3u8. The id is URL-encoded. The host is fixed in the template, so an id can never pick the host.
.m3u8 playlists.
4. Your stream hosts
AgentTV plays and reads streams only from hosts on your account’s allow list. Send us each stream host, and each caption host if it differs. Rules:- https only. No ports, no credentials, no private addresses.
- One account’s list never serves another account’s video.
- To remove a host later, tell us. Videos on that host stop importing and playing through AgentTV.
AgentTV reads your API and plays your streams only after you give your written OK.
Pick what to import
Nothing from your back catalog imports on its own. In the console, open Imports and the Video catalog card. You browse your catalog newest first, search it, and pick videos. One pick takes up to 100 videos. AgentTV copies and processes them in the background. The account MCP toolimport_catalog_items (POST /v1/catalog-source/imports) does the same. See Account tools.
Each video shows a status:
New videos and the daily sync
The day you connect the catalog sets the baseline. Every video listed then is back catalog. A video that first appears after that is a new video. Once a day, AgentTV reads your catalog again. It refreshes imported videos whoselastmod moved, and it handles new videos by your new video policy:
Under
automatic and review_first, videos you already imported still refresh.
What is refused
A video does not import when its stream is:- Encrypted or DRM protected. AgentTV cannot read the media.
- Live. Only finished video on demand imports. A live slot with no replay shows as “stream not found”.
- Byte-range. Playlists that address segments by byte range.
- On a host that is not on your list.
- Too large. The largest copy is 40 GB, enough for a 14 hour replay at 6 Mbps.
expires (item_expired) and a feed item whose window is not two numbers with the start before the end (window_malformed).
The reason shows on the video in the console, for example media_encrypted, live_playlist, media_byterange, stream_host_not_allowed or media_too_large. A few reasons can pass on their own (stream_unreachable, copy_failed, metadata_unreadable). Pick those videos again to retry.
Long videos
The import handles event replays of 4 to 14 hours and several GB. A copy that stops halfway resumes where it stopped. Transcription takes at most 10 hours of audio per file. For a longer replay, import one time range of it.Import one time range
You can import only part of a video, for example one day of a multi-day replay. In the console, set the range on the video before you pick it. Withimport_catalog_items, send windows: one start_seconds and end_seconds per picked video, in seconds of the video as your source plays it.
- The imported video is that range. Its times start at 0 at the range’s start.
- HLS is cut on whole segments, so the range widens to the segment edges.
- A range can be at most
window_max_secondslong.get_catalog_sourcereturns that limit. - A video your JSON Feed gives a
windowkeeps the feed’s range.