Get Current TV Channels
curl --request GET \
--url https://api.example.com/api/tv/channelsimport requests
url = "https://api.example.com/api/tv/channels"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/tv/channels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/tv/channels",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/tv/channels"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/tv/channels")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/tv/channels")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"[channelKey]": {
"user": {
"id": "<string>",
"name": "<string>",
"title": "<string>"
},
"rating": 123,
"gameId": "<string>",
"color": "<string>"
}
}TV & Streaming
Get Current TV Channels
Get the current games being played on each Lichess TV channel
GET
/
api
/
tv
/
channels
Get Current TV Channels
curl --request GET \
--url https://api.example.com/api/tv/channelsimport requests
url = "https://api.example.com/api/tv/channels"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/tv/channels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/tv/channels",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/tv/channels"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/tv/channels")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/tv/channels")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"[channelKey]": {
"user": {
"id": "<string>",
"name": "<string>",
"title": "<string>"
},
"rating": 123,
"gameId": "<string>",
"color": "<string>"
}
}Overview
This endpoint returns information about the current champion game for each TV channel on Lichess. TV channels feature ongoing games filtered by different criteria such as rating level, time control, or chess variant.Endpoint
GET https://lichess.org/api/tv/channels
Authentication
No authentication required. This is a public endpoint.Request
No parameters required.Example Request
cURL
curl https://lichess.org/api/tv/channels
JavaScript
fetch('https://lichess.org/api/tv/channels')
.then(response => response.json())
.then(data => console.log(data));
Python
import requests
response = requests.get('https://lichess.org/api/tv/channels')
channels = response.json()
print(channels)
Response
Returns a JSON object where each key is a channel name and the value contains information about the current featured game and player.Response Fields
object
Each channel key (e.g., “best”, “bullet”, “blitz”) contains a champion object
Show Champion Object
Show Champion Object
object
integer
The player’s rating in the relevant category
string
The ID of the featured game (8 characters)
string
The color the featured player is playing (“white” or “black”)
Available Channels
Lichess TV features the following channels:- best: Top Rated - Highest rated standard chess games (2150+ rating)
- bullet: Bullet games (less than 3 minutes)
- blitz: Blitz games (3-8 minutes)
- rapid: Rapid games (8-25 minutes)
- classical: Classical games (25+ minutes)
- chess960: Chess960 variant games
- kingOfTheHill: King of the Hill variant
- threeCheck: Three-check variant
- antichess: Antichess variant
- atomic: Atomic variant
- horde: Horde variant
- racingKings: Racing Kings variant
- crazyhouse: Crazyhouse variant
- ultraBullet: UltraBullet games (less than 30 seconds)
- bot: Games involving bots
- computer: Games against computer (AI)
Example Response
{
"best": {
"user": {
"id": "magnus",
"name": "Magnus",
"title": "GM"
},
"rating": 2847,
"gameId": "q7ZvsdUF",
"color": "white"
},
"bullet": {
"user": {
"id": "hikaru",
"name": "Hikaru",
"title": "GM"
},
"rating": 3201,
"gameId": "8ZhJgF3b",
"color": "black"
},
"blitz": {
"user": {
"id": "danya",
"name": "Danya"
},
"rating": 2963,
"gameId": "z6brKWaG",
"color": "white"
}
}
Rate Limiting
This endpoint follows standard Lichess API rate limits. Excessive polling is discouraged.Notes
- The champions and games update automatically as new games become available
- Not all channels may have active games at all times
- Games must be rated and meet minimum rating requirements for most channels
- Games are selected based on recency - they must have had a move recently to remain featured
Related Endpoints
- Get TV Channel Feed - Stream real-time updates for a TV channel
- Event Stream - Stream personal game and challenge events
Source Code Reference
- Controller:
app/controllers/Tv.scala:30(channels method) - Model:
modules/tv/src/main/Tv.scala:64-66(Champion case class) - Routes:
conf/routes:42(GET /api/tv/channels)

