The Programming API covers everything related to content programs stored in Tunarr’s database and how they are arranged into channel lineups. You can search across all programs, look up individual items or groupings (shows, seasons, artists, albums), retrieve or replace a channel’s programming, and use Tunarr’s built-in scheduling tools to auto-generate a schedule from a time-slot or random-slot template.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/chrisbenincasa/tunarr/llms.txt
Use this file to discover all available pages before exploring further.
Search Programs
Full-text and filtered search across all programs indexed by Tunarr’s search engine (Meilisearch).ProgramSearchRequest object:
Free-text search query.
Structured filter object (genres, years, media source IDs, etc.).
Pagination offset. Default
0.Maximum results. Default
25.200 — ProgramSearchResponse with matching programs plus facet data.
Get Program
Returns a single content program by its internal UUID, including season and show metadata for episodes, and album/artist metadata for tracks.Program UUID.
200 — TerminalProgram object:
Program identifier.
movie | episode | track | music_video | other_video.Program title.
Duration in milliseconds.
Origin media source type:
plex | jellyfin | emby | local.Release year (may be null).
Parent show (episodes only).
Parent season (episodes only).
Parent album (tracks only).
Parent artist (tracks only).
404 — program not found.
Get Program by External ID
Looks up a program by its externalsourceType|sourceId|itemId composite key. This is useful when you have a Plex or Jellyfin item key and need the Tunarr UUID.
Pipe-delimited composite:
Example:
{sourceType}|{mediaSourceId}|{externalKey}.Example:
plex|my-server|12345200 — TerminalProgram object.
Response 400 — invalid source type.
Response 404 — program not found.
Batch Lookup Programs by External IDs
Fetches multiple programs at once by their external IDs. Returns a map ofuuid → program.
List of pipe-delimited external ID strings:
["plex|server1|111", "jellyfin|server2|222"].200 — Record<string, TerminalProgram> keyed by program UUID.
Get Program Grouping
Returns a program grouping (show, season, music artist, or album) by its UUID, including nested children.Grouping UUID.
200 — ProgramGrouping (show, season, artist, or album object).
Response 404 — grouping not found.
Get Program Children
Returns the immediate children of a grouping: episodes for a season, tracks for an album, seasons for a show, or albums for an artist.Grouping UUID (show, season, artist, or album).
Pagination offset.
Pagination limit.
Optional: scope children to those used in a specific channel.
200 — ProgramChildrenResult with total, size, and result: { type, programs }.
Response 404 — grouping not found.
Get Program Descendants
Returns all leaf-level programs that belong to a grouping at any depth (e.g. all episodes in a show, all tracks in an artist).Grouping or program UUID.
200 — array of ContentProgram objects.
Response 404 — not found.
Get Show
Returns a TV show grouping with its seasons (and optionally all episodes).Show UUID.
Include all episodes across all seasons. Default
false.200 — show object with nested seasons[].
Get Show Seasons
Returns only the season groupings for a given show.Show UUID.
200 — array of season objects.
Get Season
Returns a single season grouping.Season UUID.
200 — season object.
Get Channel Programming (Condensed)
Returns the condensed programming configuration for a channel, suitable for display in the channel editor.Channel UUID.
Pagination offset. Default
0.Pagination limit. Pass
-1 for all. Default -1.200 — CondensedChannelProgramming object.
Response 404 — channel or lineup not found.
Update Channel Programming
Replaces the channel’s entire lineup. After updating, Tunarr regenerates the EPG guide automatically.Channel UUID.
UpdateChannelProgrammingRequest:
Lineup type:
"manual" for an explicit ordered list.Ordered array of program references. Each entry identifies a program in Tunarr’s database or a flex/filler slot.
200 — updated CondensedChannelProgramming.
Response 404 — channel not found.
Response 500 — lineup update failed.
Apply Time-Slot Schedule
Generates a lineup from a time-slot schedule definition and previews (but does not save) the result. Use the response to review the generated schedule before saving it with Update Channel Programming.Channel UUID.
A
TimeSlotSchedule object:type(string) —"time"(discriminator)slots(array) — list of slot definitions, each with astartTime,order, and content sourceperiod(string) — how often the schedule repeats:"day"|"week"|"month"maxDays(integer) — how many days ahead to materializepadStyle(string) — filler padding strategylatenessMs(number) — lateness tolerance in milliseconds
200 — TimeSlotScheduleWithPrograms — the generated lineup with materialized program objects.
Response 400 — invalid slot configuration.
Response 404 — channel not found.
Apply Random-Slot Schedule
Generates a lineup from a random-slot schedule (content is randomly ordered within configurable time windows).Channel UUID.
A
RandomSlotSchedule object:type(string) —"random"(discriminator)slots(array) — slot definitions specifying content sources and durationsperiod(string) —"day"|"week"|"month"maxDays(integer) — how many days ahead to materializepadStyle(string) — filler padding strategy
200 — SlotScheduleWithPrograms — the generated lineup with materialized program objects.
Response 400 — invalid slot configuration.
Response 404 — channel not found.
Get Channel Schedule
Returns the currently persisted (materialized) schedule for a channel, if one exists.Channel UUID.
200 — { "schedule": MaterializedSchedule | undefined }.
Get Facet Values
Returns the distinct values (and their counts) for a given facet field across all indexed programs.The field to facet on (e.g.
"genre", "year", "studio").Filter facet values to those containing this string.
Scope facets to programs from a specific media source.
Scope facets to programs from a specific library.
Structured filter to apply before computing facets.
200 — { "facetValues": Record<string, number> }.