curl --request GET \
--url https://api.example.com/api/tv/feed{
"t": "<string>",
"d": {
"id": "<string>",
"orientation": "<string>",
"players": [
{}
],
"ply": 123,
"uci": "<string>",
"san": "<string>",
"fen": "<string>",
"clock": {},
"winner": "<string>",
"status": "<string>"
}
}Stream real-time updates from a Lichess TV channel as games progress
curl --request GET \
--url https://api.example.com/api/tv/feed{
"t": "<string>",
"d": {
"id": "<string>",
"orientation": "<string>",
"players": [
{}
],
"ply": 123,
"uci": "<string>",
"san": "<string>",
"fen": "<string>",
"clock": {},
"winner": "<string>",
"status": "<string>"
}
}Documentation Index
Fetch the complete documentation index at: https://mintlify.com/lichess-org/lila/llms.txt
Use this file to discover all available pages before exploring further.
GET https://lichess.org/api/tv/feed
GET https://lichess.org/api/tv/:channel/feed
best - Top Rated (2150+ standard games)bullet - Bullet gamesblitz - Blitz gamesrapid - Rapid gamesclassical - Classical gameschess960 - Chess960 variantkingOfTheHill - King of the HillthreeCheck - Three-checkantichess - Antichessatomic - Atomichorde - HorderacingKings - Racing Kingscrazyhouse - CrazyhouseultraBullet - UltraBulletbot - Bot gamescomputer - Computer gamestrue, uses Server-Sent Events format. When false (default), uses newline-delimited JSON (NDJSON).bc=true, the stream uses Server-Sent Events format with text/event-stream content type.
curl https://lichess.org/api/tv/feed
curl https://lichess.org/api/tv/blitz/feed
curl https://lichess.org/api/tv/feed?bc=true
const response = await fetch('https://lichess.org/api/tv/bullet/feed');
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const lines = decoder.decode(value).split('\n');
for (const line of lines) {
if (line.trim()) {
const event = JSON.parse(line);
console.log('TV Update:', event);
}
}
}
const eventSource = new EventSource('https://lichess.org/api/tv/feed?bc=true');
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('TV Update:', data);
};
eventSource.onerror = (error) => {
console.error('Connection error:', error);
eventSource.close();
};
import requests
import json
url = 'https://lichess.org/api/tv/blitz/feed'
with requests.get(url, stream=True) as response:
for line in response.iter_lines():
if line:
event = json.loads(line)
print('TV Update:', event)
{
"t": "featured",
"d": {
"id": "q7ZvsdUF",
"orientation": "white",
"players": [
{
"color": "white",
"user": {
"name": "Magnus",
"id": "magnus",
"title": "GM"
},
"rating": 2847
},
{
"color": "black",
"user": {
"name": "Hikaru",
"id": "hikaru",
"title": "GM"
},
"rating": 2832
}
]
}
}
{
"t": "ply",
"d": {
"ply": 23,
"uci": "e2e4",
"san": "e4",
"fen": "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1",
"clock": {
"white": 600,
"black": 590
}
}
}
{
"t": "end",
"d": {
"winner": "white",
"status": "mate"
}
}
featured, ply, end, etc.Show Featured Game Fields
Show Move (Ply) Fields
app/controllers/Tv.scala:92-108conf/routes:43-44