Catalog
Query features, series, episodes, seasons, streams, and miniseries from the Rad TV GraphQL catalog using Relay connections.
Build browse and discovery experiences. The Rad TV catalog gives you access to all published content — features (standalone videos), series with episodes, streams, and more. Every item supports likes and comments out of the box.
List fields return Relay connections (edges → node). See Pagination for the connection shape and arguments (first, after, last, before).
Content Type Hierarchy
Channel
├── Feature (standalone feature-length content)
├── Serie
│ └── Season
│ └── Episode
├── Miniseries
│ └── Episode
└── Stream (playable stream)Queries
Every catalog type has a single-item query and a paginated connection query:
| Query | Returns | Auth Required |
|---|---|---|
feature(id: DID!) | Feature | Yes |
features(first, after, last, before) | FeatureConnection! | Yes |
serie(id: DID!) | Serie | Yes |
series(first, after, last, before) | SerieConnection! | Yes |
season(id: DID!) | Season | Yes |
seasons(first, after, last, before) | SeasonConnection! | Yes |
episode(id: DID!) | Episode | Yes |
episodes(first, after, last, before) | EpisodeConnection! | Yes |
miniserie(id: DID!) | Miniseries | Yes |
miniseries(first, after, last, before) | MiniseriesConnection! | Yes |
stream(id: DID!) | Stream | Yes |
streams(first, after, last, before) | StreamConnection! | Yes |
Single-item queries return null when the resource is not found or not accessible.
Features
The most common content type — standalone feature-length videos.
curl -X POST https://api.rad.live/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"query": "{ features(first: 10) { totalCount edges { node { id metadata { title summary keywords } assets { videos { url width height duration } images { url purpose } } likes { count isLiked } commentCount } } pageInfo { hasNextPage endCursor } } }"
}'const response = await fetch('https://api.rad.live/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY',
},
body: JSON.stringify({
query: `{
features(first: 10) {
totalCount
edges {
node {
id
metadata { title summary keywords }
assets {
videos { url width height duration }
images { url purpose }
}
likes { count isLiked }
commentCount
}
}
pageInfo { hasNextPage endCursor }
}
}`,
}),
});response = requests.post(
"https://api.rad.live/graphql",
headers={
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY",
},
json={
"query": """
{
features(first: 10) {
totalCount
edges {
node {
id
metadata { title summary keywords }
assets {
videos { url width height duration }
images { url purpose }
}
likes { count isLiked }
commentCount
}
}
pageInfo { hasNextPage endCursor }
}
}
"""
},
)Episodes
Episodes belong to a season or miniseries:
{
episode(id: "did:rad.live:content/episode/789") {
id
metadata {
title
number
duration
rating { system code label }
isPremiere
isFinale
}
associatedSeason { id metadata { title } }
associatedMiniseries { id metadata { title } }
likes { count isLiked }
}
}Series and Seasons
{
serie(id: "did:rad.live:content/serie/101") {
id
metadata { title summary }
assets { images { url purpose } }
}
}{
season(id: "did:rad.live:content/season/202") {
id
metadata { title number }
}
}Streams
{
streams(first: 5) {
edges {
node {
id
metadata { title type acl }
assets { videos { url } }
likes { count }
}
}
}
}Channel Content
Query a channel's catalog using nested connection fields. Select fields on each node:
{
channel(id: "did:rad.live:channel/abc") {
features(first: 10) {
edges { node { id metadata { title } } }
}
series(first: 5) {
edges { node { id metadata { title } } }
}
episodes(first: 20) {
edges { node { id metadata { title number } } }
}
streams(first: 5) {
edges { node { id metadata { title } } }
}
}
}Shared Fields
All catalog types share these fields via interfaces:
| Field | Type | Source | Description |
|---|---|---|---|
id | DID! | — | Decentralized identifier |
createdAt | DateTime | — | Creation timestamp |
metadata | *Metadata | — | Type-specific metadata |
assets | MediaAssets! | — | Videos and images |
likes | ContentLikes! | Likeable | Like count and user status |
commentCount | Int! | Commentable | Number of comments |
isCommented | Boolean! | Commentable | Whether user has commented |
comments(first, after, last, before) | CommentConnection! | Commentable | Paginated comments |
structuredData | JSON | — | Schema.org SEO markup |