Jellyfin API
jellyfin · Media
Jellyfin API API
Authentication
No authentication requiredFree to use with no key needed.
Sample Requests
GET
Gets all artists from a given item, folder, or the entire library.
Gets all artists from a given item, folder, or the entire library.
https://api.apis.guru/v2/specs/jellyfin.local/v1/Artists?tags=example&limit=10&years=example&fields=example&genres=example&person=example&userId=example&filters=example&studios=example&genreIds=example&parentId=example&personIds=example&studioIds=example&isFavorite=true&mediaTypes=example&searchTerm=example&startIndex=1&personTypes=example&enableImages=true&nameLessThan=example&enableUserData=true&imageTypeLimit=1&nameStartsWith=example&officialRatings=example&enableImageTypes=example&excludeItemTypes=example&includeItemTypes=example&minCommunityRating=1&enableTotalRecordCount=true&nameStartsWithOrGreater=example
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/jellyfin.local/v1/Artists?tags=example&limit=10&years=example&fields=example&genres=example&person=example&userId=example&filters=example&studios=example&genreIds=example&parentId=example&personIds=example&studioIds=example&isFavorite=true&mediaTypes=example&searchTerm=example&startIndex=1&personTypes=example&enableImages=true&nameLessThan=example&enableUserData=true&imageTypeLimit=1&nameStartsWith=example&officialRatings=example&enableImageTypes=example&excludeItemTypes=example&includeItemTypes=example&minCommunityRating=1&enableTotalRecordCount=true&nameStartsWithOrGreater=example"
import requests
params = {
"tags": "example",
"limit": "10",
"years": "example",
"fields": "example",
"genres": "example",
"person": "example",
"userId": "example",
"filters": "example",
"studios": "example",
"genreIds": "example",
"parentId": "example",
"personIds": "example",
"studioIds": "example",
"isFavorite": "true",
"mediaTypes": "example",
"searchTerm": "example",
"startIndex": "1",
"personTypes": "example",
"enableImages": "true",
"nameLessThan": "example",
"enableUserData": "true",
"imageTypeLimit": "1",
"nameStartsWith": "example",
"officialRatings": "example",
"enableImageTypes": "example",
"excludeItemTypes": "example",
"includeItemTypes": "example",
"minCommunityRating": "1",
"enableTotalRecordCount": "true",
"nameStartsWithOrGreater": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/jellyfin.local/v1/Artists",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/jellyfin.local/v1/Artists');
url.searchParams.set('tags', 'example');
url.searchParams.set('limit', '10');
url.searchParams.set('years', 'example');
url.searchParams.set('fields', 'example');
url.searchParams.set('genres', 'example');
url.searchParams.set('person', 'example');
url.searchParams.set('userId', 'example');
url.searchParams.set('filters', 'example');
url.searchParams.set('studios', 'example');
url.searchParams.set('genreIds', 'example');
url.searchParams.set('parentId', 'example');
url.searchParams.set('personIds', 'example');
url.searchParams.set('studioIds', 'example');
url.searchParams.set('isFavorite', 'true');
url.searchParams.set('mediaTypes', 'example');
url.searchParams.set('searchTerm', 'example');
url.searchParams.set('startIndex', '1');
url.searchParams.set('personTypes', 'example');
url.searchParams.set('enableImages', 'true');
url.searchParams.set('nameLessThan', 'example');
url.searchParams.set('enableUserData', 'true');
url.searchParams.set('imageTypeLimit', '1');
url.searchParams.set('nameStartsWith', 'example');
url.searchParams.set('officialRatings', 'example');
url.searchParams.set('enableImageTypes', 'example');
url.searchParams.set('excludeItemTypes', 'example');
url.searchParams.set('includeItemTypes', 'example');
url.searchParams.set('minCommunityRating', '1');
url.searchParams.set('enableTotalRecordCount', 'true');
url.searchParams.set('nameStartsWithOrGreater', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/jellyfin.local/v1/Artists")
q := baseURL.Query()
q.Set("tags", "example")
q.Set("limit", "10")
q.Set("years", "example")
q.Set("fields", "example")
q.Set("genres", "example")
q.Set("person", "example")
q.Set("userId", "example")
q.Set("filters", "example")
q.Set("studios", "example")
q.Set("genreIds", "example")
q.Set("parentId", "example")
q.Set("personIds", "example")
q.Set("studioIds", "example")
q.Set("isFavorite", "true")
q.Set("mediaTypes", "example")
q.Set("searchTerm", "example")
q.Set("startIndex", "1")
q.Set("personTypes", "example")
q.Set("enableImages", "true")
q.Set("nameLessThan", "example")
q.Set("enableUserData", "true")
q.Set("imageTypeLimit", "1")
q.Set("nameStartsWith", "example")
q.Set("officialRatings", "example")
q.Set("enableImageTypes", "example")
q.Set("excludeItemTypes", "example")
q.Set("includeItemTypes", "example")
q.Set("minCommunityRating", "1")
q.Set("enableTotalRecordCount", "true")
q.Set("nameStartsWithOrGreater", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/jellyfin.local/v1/Artists")
uri.query = URI.encode_www_form({
"tags" => "example",
"limit" => "10",
"years" => "example",
"fields" => "example",
"genres" => "example",
"person" => "example",
"userId" => "example",
"filters" => "example",
"studios" => "example",
"genreIds" => "example",
"parentId" => "example",
"personIds" => "example",
"studioIds" => "example",
"isFavorite" => "true",
"mediaTypes" => "example",
"searchTerm" => "example",
"startIndex" => "1",
"personTypes" => "example",
"enableImages" => "true",
"nameLessThan" => "example",
"enableUserData" => "true",
"imageTypeLimit" => "1",
"nameStartsWith" => "example",
"officialRatings" => "example",
"enableImageTypes" => "example",
"excludeItemTypes" => "example",
"includeItemTypes" => "example",
"minCommunityRating" => "1",
"enableTotalRecordCount" => "true",
"nameStartsWithOrGreater" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/jellyfin.local/v1/Artists?" . http_build_query([
"tags" => "example",
"limit" => "10",
"years" => "example",
"fields" => "example",
"genres" => "example",
"person" => "example",
"userId" => "example",
"filters" => "example",
"studios" => "example",
"genreIds" => "example",
"parentId" => "example",
"personIds" => "example",
"studioIds" => "example",
"isFavorite" => "true",
"mediaTypes" => "example",
"searchTerm" => "example",
"startIndex" => "1",
"personTypes" => "example",
"enableImages" => "true",
"nameLessThan" => "example",
"enableUserData" => "true",
"imageTypeLimit" => "1",
"nameStartsWith" => "example",
"officialRatings" => "example",
"enableImageTypes" => "example",
"excludeItemTypes" => "example",
"includeItemTypes" => "example",
"minCommunityRating" => "1",
"enableTotalRecordCount" => "true",
"nameStartsWithOrGreater" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET
Gets available channels.
Gets available channels.
https://api.apis.guru/v2/specs/jellyfin.local/v1/Channels?limit=10&userId=example&isFavorite=true&startIndex=1&supportsLatestItems=true&supportsMediaDeletion=true
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/jellyfin.local/v1/Channels?limit=10&userId=example&isFavorite=true&startIndex=1&supportsLatestItems=true&supportsMediaDeletion=true"
import requests
params = {
"limit": "10",
"userId": "example",
"isFavorite": "true",
"startIndex": "1",
"supportsLatestItems": "true",
"supportsMediaDeletion": "true"
}
response = requests.get(
"https://api.apis.guru/v2/specs/jellyfin.local/v1/Channels",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/jellyfin.local/v1/Channels');
url.searchParams.set('limit', '10');
url.searchParams.set('userId', 'example');
url.searchParams.set('isFavorite', 'true');
url.searchParams.set('startIndex', '1');
url.searchParams.set('supportsLatestItems', 'true');
url.searchParams.set('supportsMediaDeletion', 'true');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/jellyfin.local/v1/Channels")
q := baseURL.Query()
q.Set("limit", "10")
q.Set("userId", "example")
q.Set("isFavorite", "true")
q.Set("startIndex", "1")
q.Set("supportsLatestItems", "true")
q.Set("supportsMediaDeletion", "true")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/jellyfin.local/v1/Channels")
uri.query = URI.encode_www_form({
"limit" => "10",
"userId" => "example",
"isFavorite" => "true",
"startIndex" => "1",
"supportsLatestItems" => "true",
"supportsMediaDeletion" => "true"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/jellyfin.local/v1/Channels?" . http_build_query([
"limit" => "10",
"userId" => "example",
"isFavorite" => "true",
"startIndex" => "1",
"supportsLatestItems" => "true",
"supportsMediaDeletion" => "true"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET
Get Devices.
Get Devices.
https://api.apis.guru/v2/specs/jellyfin.local/v1/Devices?userId=example&supportsSync=true
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/jellyfin.local/v1/Devices?userId=example&supportsSync=true"
import requests
params = {
"userId": "example",
"supportsSync": "true"
}
response = requests.get(
"https://api.apis.guru/v2/specs/jellyfin.local/v1/Devices",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/jellyfin.local/v1/Devices');
url.searchParams.set('userId', 'example');
url.searchParams.set('supportsSync', 'true');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/jellyfin.local/v1/Devices")
q := baseURL.Query()
q.Set("userId", "example")
q.Set("supportsSync", "true")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/jellyfin.local/v1/Devices")
uri.query = URI.encode_www_form({
"userId" => "example",
"supportsSync" => "true"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/jellyfin.local/v1/Devices?" . http_build_query([
"userId" => "example",
"supportsSync" => "true"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- See official documentation for authentication and setup.
What can you build with Jellyfin API?
Jellyfin API is a Media API. Developers commonly use media APIs for:
- storing and delivering images, video, and audio
- building digital asset management and media libraries
- transcoding and optimising media for the web
- adding video streaming and playback to your app
- automating content tagging and metadata extraction
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Jellyfin API is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide