Skip to main content

GraphQL Query Examples

All examples can be run directly in the Playground.

Movie Detail​

query GetMovie($id: Int!, $language: String) {
media(type: movie, id: $id, language: $language) {
... on MovieDetail {
tmdbId
title
originalTitle
overview
poster
backdrop
logo
releaseDate
genres { id name }
voteAverage
imdbRating
imdbVotes
runtime
certification
tagline
status
trailers
productionCompanies { id name logo }
collection { id name poster }
credits {
cast { id name character profile order }
crew { id name job department profile }
}
}
}
}

Variables:

{ "id": 245891, "language": "en-US" }

TV Show Detail​

query GetTV($id: Int!, $language: String) {
media(type: tv, id: $id, language: $language) {
... on TVDetail {
tmdbId
title
originalTitle
overview
poster
backdrop
logo
releaseDate
genres { id name }
voteAverage
imdbRating
certification
numberOfSeasons
numberOfEpisodes
status
tagline
networks { id name logo }
productionCompanies { id name logo }
seasons {
id
name
seasonNumber
episodeCount
poster
airDate
}
trailers
credits {
cast { id name character profile order }
}
}
}
}

Variables:

{ "id": 1396, "language": "en-US" }

Season Detail​

query GetSeason($tvId: Int!, $season: Int!, $language: String) {
season(tvId: $tvId, season: $season, language: $language) {
id
name
seasonNumber
overview
poster
airDate
episodes {
id
name
overview
still
episodeNumber
seasonNumber
airDate
voteAverage
runtime
}
}
}

Variables:

{ "tvId": 1396, "season": 1, "language": "en-US" }

Full Detail Page in One Request​

Instead of 4 separate REST calls — one GraphQL query:

query DetailPage($type: MediaType!, $id: Int!, $language: String) {
media(type: $type, id: $id, language: $language) {
... on MovieDetail {
tmdbId title overview poster backdrop logo
voteAverage imdbRating certification runtime
genres { name }
trailers
credits { cast { id name character profile order } }
}
... on TVDetail {
tmdbId title overview poster backdrop logo
voteAverage imdbRating certification
numberOfSeasons numberOfEpisodes
genres { name }
trailers
credits { cast { id name character profile order } }
seasons { id name seasonNumber episodeCount poster }
}
}

similar: similar(type: $type, id: $id, language: $language) {
items {
tmdbId title poster backdrop voteAverage releaseDate genres { name }
}
}

relatedByCast: relatedByCast(type: $type, id: $id, language: $language) {
items {
tmdbId title poster voteAverage releaseDate
}
}
}

query Search($q: String, $type: SearchType, $language: String, $page: Int) {
search(q: $q, type: $type, language: $language, page: $page) {
page
totalPages
totalResults
items {
... on MediaItem {
tmdbId
title
poster
releaseDate
voteAverage
genres { name }
}
... on PersonSearchItem {
tmdbId
name
profile
department
}
}
}
}

Variables:

{ "q": "Spider-Man", "type": "multi", "language": "en-US", "page": 1 }

Filtered Search (no text query)​

query SearchFiltered($genre: String, $yearFrom: Int, $ratingFrom: Float, $language: String) {
search(
genre: $genre
yearFrom: $yearFrom
ratingFrom: $ratingFrom
sortBy: "vote_average.desc"
language: $language
) {
items {
... on MediaItem {
tmdbId title poster voteAverage releaseDate
}
}
totalResults
}
}

Variables:

{ "genre": "28", "yearFrom": 2020, "ratingFrom": 7.5, "language": "en-US" }

query Trending($type: MediaType, $language: String, $page: Int) {
trending(type: $type, language: $language, page: $page) {
items {
tmdbId
title
poster
backdrop
voteAverage
releaseDate
mediaType
genres { name }
}
page
totalPages
totalResults
}
}

Person & Filmography​

query PersonPage($id: Int!, $language: String) {
person(id: $id, language: $language) {
tmdbId
name
profile
department
}

personCredits(id: $id, language: $language) {
items {
tmdbId
title
poster
releaseDate
voteAverage
mediaType
role
creditType
}
totalResults
}
}

Favorites (requires token)​

query Favorites($language: String, $page: Int) {
favorites(language: $language, page: $page) {
items {
tmdbId
title
poster
backdrop
voteAverage
mediaType
mediaId
createdAt
}
page
totalPages
totalResults
}
}

Header:

Authorization: Bearer <your_access_token>

Watch Progress (requires token)​

Get progress​

query SyncProgress {
syncProgress {
mediaId
mediaType
season
episode
progress
updatedAt
title
poster
backdrop
episodeName
episodeStill
}
}

Save progress​

mutation UpsertProgress(
$mediaId: Int!
$mediaType: MediaType
$season: Int
$episode: Int
$progress: Float!
) {
upsertProgress(
mediaId: $mediaId
mediaType: $mediaType
season: $season
episode: $episode
progress: $progress
) {
mediaId
progress
updatedAt
}
}

Variables (movie):

{ "mediaId": 245891, "mediaType": "movie", "progress": 0.75 }

Variables (TV episode):

{ "mediaId": 1396, "mediaType": "tv", "season": 2, "episode": 3, "progress": 0.42 }

Batch sync​

mutation BatchSync($items: [SyncProgressInput!]!) {
batchSyncProgress(items: $items) {
count
items {
mediaId
mediaType
progress
updatedAt
}
}
}

Player​

query Player(
$provider: PlayerProvider!
$tmdbId: Int
$kpId: Int
$imdbId: String
$season: Int
$episode: Int
) {
player(
provider: $provider
tmdbId: $tmdbId
kpId: $kpId
imdbId: $imdbId
season: $season
episode: $episode
) {
provider
url
type
}
}

Variables:

{ "provider": "alloha", "tmdbId": 245891 }

Health Check​

query Health {
health {
status
version
timestamp
}
}