Lichess TV API

Access Lichess TV channels and games. &

OpenAPI Specification

lichess-tv-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  version: 2.0.144
  title: Lichess.org API reference Account TV API
  contact:
    name: Lichess.org API
    url: https://lichess.org/api
    email: contact@lichess.org
  x-logo:
    url: https://lichess1.org/assets/logo/lichess-pad12.svg
  license:
    name: AGPL-3.0-or-later
    url: https://www.gnu.org/licenses/agpl-3.0.txt
  description: '# Introduction

    Welcome to the reference for the Lichess API! Lichess is free/libre,

    open-source chess server powered by volunteers and donations.

    - Get help in the [Lichess Discord channel](https://discord.gg/lichess)

    - API demo app with OAuth2 login and gameplay: [source](https://github.com/lichess-org/api-demo) / [demo](https://lichess-org.github.io/api-demo/)

    - API UI app with OAuth2 login and endpoint forms: [source](https://github.com/lichess-org/api-ui) / [website](https://lichess.org/api/ui)

    - [Contribute to this documentation on Github](https://github.com/lichess-org/api)

    - Check out [Lichess widgets to embed in your website](https://lichess.org/developers)

    - [Download all Lichess rated games](https://database.lichess.org/)

    - [Download all Lichess puzzles with themes, ratings and votes](https://database.lichess.org/#puzzles)

    - [Download all evaluated positions](https://database.lichess.org/#evals)


    ## Endpoint

    All requests go to `https://lichess.org` (unless otherwise specified).


    ## Clients

    - [Python general API](https://github.com/lichess-org/berserk)

    - [MicroPython general API](https://github.com/mkomon/uberserk)

    - [Python general API - async](https://pypi.org/project/async-lichess-sdk)

    - [Python Lichess Bot](https://github.com/lichess-bot-devs/lichess-bot)

    - [Python Board API for Certabo](https://github.com/haklein/certabo-lichess)

    - [Java general API](https://github.com/tors42/chariot)

    - [JavaScript & TypeScript general API](https://github.com/devjiwonchoi/equine)

    - [LichessNET - C# API Wrapper](https://github.com/Rabergsel/LichessNET)

    - [.NET general API](https://github.com/Dblike/LichessSharp)


    ## Rate limiting

    All requests are rate limited using various strategies,

    to ensure the API remains responsive for everyone.

    Only make one request at a time.

    If you receive an HTTP response with a [429 status](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#429),

    you have exceded one of the rate limits.

    In most cases, waiting one minute before retrying will be sufficient, but some limits may require longer.

    Reduce your request frequency before retrying.


    ## Streaming with ND-JSON

    Some API endpoints stream their responses as [Newline Delimited JSON a.k.a. **nd-json**](https://github.com/ndjson/ndjson-spec), with one JSON object per line.


    Here''s a [JavaScript utility function](https://gist.github.com/ornicar/a097406810939cf7be1df8ea30e94f3e) to help reading NDJSON streamed responses.


    ## Authentication

    ### Which authentication method is right for me?

    [Read about the Lichess API authentication methods and code examples](https://github.com/lichess-org/api/blob/master/example/README.md)


    ### Personal Access Token

    Personal API access tokens allow you to quickly interact with Lichess API without going through an OAuth flow.

    - [Generate a personal access token](https://lichess.org/account/oauth/token)

    - `curl https://lichess.org/api/account -H "Authorization: Bearer {token}"`

    - [NodeJS example](https://github.com/lichess-org/api/tree/master/example/oauth-personal-token)


    ### Token Security

    - Keep your tokens secret. Do not share them in public repositories or public forums.

    - Your tokens can be used to make your account perform arbitrary actions (within the limits of the tokens'' scope). You remain responsible for all activities on your account.

    - Do not hardcode tokens in your application''s code. Use environment variables or a secure storage and ensure they are not shipped/exposed to users. Be especially careful that they are not included in frontend bundles or apps that are shipped to users.

    - If you suspect a token has been compromised, revoke it immediately.


    To see your active tokens or revoke them, see [your Personal API access tokens](https://lichess.org/account/oauth/token).


    ### Authorization Code Flow with PKCE

    The authorization code flow with PKCE allows your users to **login with Lichess**.

    Lichess supports unregistered and public clients (no client authentication, choose any unique client id).

    The only accepted code challenge method is `S256`.

    Access tokens are long-lived (expect one year), unless they are revoked.

    Refresh tokens are not supported.


    See the [documentation for the OAuth endpoints](#tag/OAuth) or

    the [PKCE RFC](https://datatracker.ietf.org/doc/html/rfc7636#section-4) for a precise protocol description.


    - [Demo app](https://lichess-org.github.io/api-demo/)

    - [Minimal client-side example](https://github.com/lichess-org/api/tree/master/example/oauth-app)

    - [Flask/Python example](https://github.com/lakinwecker/lichess-oauth-flask)

    - [Java example](https://github.com/tors42/lichess-oauth-pkce-app)

    - [NodeJS Passport strategy to login with Lichess OAuth2](https://www.npmjs.com/package/passport-lichess)


    #### Real life examples

    - [PyChess](https://github.com/gbtami/pychess-variants) ([source code](https://github.com/gbtami/pychess-variants))

    - [Lichess4545](https://www.lichess4545.com/) ([source code](https://github.com/cyanfish/heltour))

    - [English Chess Federation](https://ecf.octoknight.com/)

    - [Rotherham Online Chess](https://rotherhamonlinechess.azurewebsites.net/tournaments)


    ### Token format

    Access tokens and authorization codes match `^[A-Za-z0-9_]+$`.

    The length of tokens can be increased without notice. Make sure your application can handle at least 512 characters.

    By convention tokens have a recognizable prefix, but do not rely on this.

    '
servers:
- url: https://lichess.org
- url: https://lichess.dev
- url: http://localhost:{port}
  variables:
    port:
      default: '8080'
- url: http://l.org
tags:
- name: TV
  description: 'Access Lichess TV channels and games.

    <https://lichess.org/tv> & <https://lichess.org/games>

    '
paths:
  /api/tv/channels:
    get:
      operationId: tvChannels
      summary: Get current TV games
      description: 'Get basic info about the best games being played for each speed and variant,

        but also computer games and bot games.

        See [lichess.org/tv](https://lichess.org/tv).

        '
      tags:
      - TV
      security: []
      responses:
        '200':
          description: The list of games being played for each speed and variant.
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                default: '''*'''
          content:
            application/json:
              schema:
                type: object
                required:
                - bot
                - blitz
                - racingKings
                - ultraBullet
                - bullet
                - classical
                - threeCheck
                - antichess
                - computer
                - horde
                - rapid
                - atomic
                - crazyhouse
                - chess960
                - kingOfTheHill
                - best
                properties:
                  bot:
                    $ref: '#/components/schemas/TvGame'
                  blitz:
                    $ref: '#/components/schemas/TvGame'
                  racingKings:
                    $ref: '#/components/schemas/TvGame'
                  ultraBullet:
                    $ref: '#/components/schemas/TvGame'
                  bullet:
                    $ref: '#/components/schemas/TvGame'
                  classical:
                    $ref: '#/components/schemas/TvGame'
                  threeCheck:
                    $ref: '#/components/schemas/TvGame'
                  antichess:
                    $ref: '#/components/schemas/TvGame'
                  computer:
                    $ref: '#/components/schemas/TvGame'
                  horde:
                    $ref: '#/components/schemas/TvGame'
                  rapid:
                    $ref: '#/components/schemas/TvGame'
                  atomic:
                    $ref: '#/components/schemas/TvGame'
                  crazyhouse:
                    $ref: '#/components/schemas/TvGame'
                  chess960:
                    $ref: '#/components/schemas/TvGame'
                  kingOfTheHill:
                    $ref: '#/components/schemas/TvGame'
                  best:
                    $ref: '#/components/schemas/TvGame'
              examples:
                default:
                  $ref: '#/components/examples/tv-getCurrentTvGames.json'
  /api/tv/feed:
    get:
      operationId: tvFeed
      summary: Stream current TV game
      description: 'Stream positions and moves of the current [TV game](https://lichess.org/tv) in [ndjson](#description/streaming-with-nd-json).

        Try it with `curl https://lichess.org/api/tv/feed`.

        '
      tags:
      - TV
      security: []
      responses:
        '200':
          description: The stream of the current TV game.
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/TvFeed'
              examples:
                new featured game:
                  $ref: '#/components/examples/tv-streamCurrentTvGame-newGame.json'
                move:
                  $ref: '#/components/examples/tv-streamCurrentTvGame-move.json'
  /api/tv/{channel}/feed:
    get:
      operationId: tvChannelFeed
      summary: Stream current TV game of a TV channel
      description: 'Stream positions and moves of a current [TV channel''s game](https://lichess.org/tv/rapid) in [ndjson](#description/streaming-with-nd-json).

        Try it with `curl https://lichess.org/api/tv/rapid/feed`.

        '
      tags:
      - TV
      security: []
      parameters:
      - in: path
        name: channel
        description: The name of the channel in camel case.
        schema:
          type: string
        required: true
      responses:
        '200':
          description: The stream of the current TV game of a TV channel.
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/TvFeed'
              examples:
                new featured game:
                  $ref: '#/components/examples/tv-streamCurrentTvGame-newGame.json'
                move:
                  $ref: '#/components/examples/tv-streamCurrentTvGame-move.json'
  /api/tv/{channel}:
    get:
      operationId: tvChannelGames
      summary: Get best ongoing games of a TV channel
      description: 'Get a list of ongoing games for a given TV channel. Similar to [lichess.org/games](https://lichess.org/games).

        Available in PGN or [ndjson](#description/streaming-with-nd-json) format, depending on the request `Accept` header.

        '
      tags:
      - TV
      security: []
      parameters:
      - $ref: '#/components/parameters/AcceptPgnOrNdjson'
      - in: path
        name: channel
        description: The name of the channel in camel case.
        schema:
          type: string
        required: true
      - in: query
        name: nb
        description: Number of games to fetch.
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 30
      - in: query
        name: moves
        description: Include the PGN moves.
        schema:
          type: boolean
          default: true
      - in: query
        name: pgnInJson
        description: Include the full PGN within the JSON response, in a `pgn` field.
        schema:
          type: boolean
          default: false
      - in: query
        name: tags
        description: Include the PGN tags.
        schema:
          type: boolean
          default: true
      - in: query
        name: clocks
        description: 'Include clock status when available.

          Either as PGN comments: `2. exd5 { [%clk 1:01:27] } e5 { [%clk 1:01:28] }`

          Or in a `clocks` JSON field, as centisecond integers, depending on the response type.

          '
        schema:
          type: boolean
          default: false
      - in: query
        name: opening
        description: 'Include the opening name.

          Example: `[Opening "King''s Gambit Accepted, King''s Knight Gambit"]`

          '
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: The representation of the games.
          content:
            application/x-chess-pgn:
              schema:
                $ref: '#/components/schemas/GamePgn'
              examples:
                pgn:
                  $ref: '#/components/examples/tv-getBestOngoingGamesOfTvChannel.pgn'
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/GameJson'
              examples:
                default:
                  $ref: '#/components/examples/tv-getBestOngoingGamesOfTvChannel.json'
components:
  schemas:
    TvFeedFen:
      type: object
      title: fen
      properties:
        t:
          type: string
          description: 'The type of message.

            A summary of the game is sent as the first message and when the featured game changes.

            Subsequent messages are just the X-FEN, last move, and clocks.

            '
          const: fen
        d:
          type: object
          description: The data of the message
          title: fen
          properties:
            fen:
              type: string
              description: The X-FEN of the current position
            lm:
              type: string
              description: 'The last move in UCI format (King to rook for Chess960-compatible

                castling notation)

                '
            wc:
              type: integer
              description: White's clock in seconds
            bc:
              type: integer
              description: Black's clock in seconds
          required:
          - fen
          - lm
          - wc
          - bc
      required:
      - t
      - d
    GameJson:
      type: object
      properties:
        id:
          type: string
        rated:
          type: boolean
        variant:
          $ref: '#/components/schemas/VariantKey'
        speed:
          $ref: '#/components/schemas/Speed'
        perf:
          type: string
        createdAt:
          type: integer
          format: int64
        lastMoveAt:
          type: integer
          format: int64
        status:
          $ref: '#/components/schemas/GameStatusName'
        source:
          type: string
        players:
          $ref: '#/components/schemas/GamePlayers'
        initialFen:
          type: string
        winner:
          $ref: '#/components/schemas/GameColor'
        opening:
          $ref: '#/components/schemas/GameOpening'
        moves:
          type: string
        pgn:
          type: string
        daysPerTurn:
          type: integer
        analysis:
          type: array
          items:
            $ref: '#/components/schemas/GameMoveAnalysis'
        tournament:
          type: string
        swiss:
          type: string
        clock:
          type: object
          properties:
            initial:
              type: integer
            increment:
              type: integer
            totalTime:
              type: integer
          required:
          - initial
          - increment
          - totalTime
        clocks:
          type: array
          items:
            type: integer
        division:
          type: object
          properties:
            middle:
              type: integer
              description: Ply at which the middlegame begins
            end:
              type: integer
              description: Ply at which the endgame begins
          required: []
      required:
      - id
      - rated
      - variant
      - speed
      - perf
      - createdAt
      - lastMoveAt
      - status
      - players
    PatronColor:
      type: integer
      description: 'Players can choose a color for their Patron wings.

        See [here for the color mappings](https://github.com/lichess-org/lila/blob/master/ui/lib/css/abstract/_patron-colors.scss).


        The presence of this field indicates the player is an active Patron.

        '
      minimum: 1
      maximum: 10
    TvGame:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/LightUser'
        rating:
          type: integer
        gameId:
          type: string
        color:
          $ref: '#/components/schemas/GameColor'
      required:
      - user
      - rating
      - gameId
      - color
    Patron:
      type: boolean
      deprecated: true
      description: 'Use patronColor value instead to determine if player is a patron.

        '
    VariantKey:
      type: string
      enum:
      - standard
      - chess960
      - crazyhouse
      - antichess
      - atomic
      - horde
      - kingOfTheHill
      - racingKings
      - threeCheck
      - fromPosition
      example: standard
      default: standard
    GameMoveAnalysis:
      type: object
      properties:
        eval:
          type: integer
          description: Evaluation in centipawns
        mate:
          type: integer
          description: Number of moves until forced mate
        best:
          type: string
          example: c2c3
          description: Best move in UCI notation (only if played move was inaccurate)
        variation:
          type: string
          example: c3 Nc6 d4 Qb6 Be2 Nge7 Na3 cxd4 cxd4 Nf5
          description: Best variation in SAN notation (only if played move was inaccurate)
        judgment:
          type: object
          description: Judgment annotation (only if played move was inaccurate)
          properties:
            name:
              type: string
              enum:
              - Inaccuracy
              - Mistake
              - Blunder
            comment:
              type: string
              example: Blunder. Nxg6 was best.
    GameColor:
      type: string
      enum:
      - white
      - black
    GamePgn:
      type: string
      example: '[Event "Rated Blitz game"]

        [Site "https://lichess.org/fY44h4OY"]

        [Date "2018.03.29"]

        [Round "-"]

        [White "pveldman"]

        [Black "thibault"]

        [Result "1-0"]

        [UTCDate "2018.03.29"]

        [UTCTime "01:38:15"]

        [WhiteElo "1610"]

        [BlackElo "1601"]

        [WhiteRatingDiff "+10"]

        [BlackRatingDiff "-10"]

        [Variant "Standard"]

        [TimeControl "180+0"]

        [ECO "C62"]

        [Opening "Ruy Lopez: Steinitz Defense"]

        [Termination "Normal"]


        1. e4 { [%clk 0:03:00] } e5 { [%clk 0:03:00] } 2. Nf3 { [%clk 0:02:59] } Nc6 { [%clk 0:02:58] } 3. Bb5 { [%clk 0:02:57] } d6 { [%clk 0:02:55] } 4. h3 { [%clk 0:02:54] } Nf6 { [%clk 0:02:52] } 5. Bxc6+ { [%clk 0:02:52] } bxc6 { [%clk 0:02:49] } 6. d3 { [%clk 0:02:51] } Be7 { [%clk 0:02:46] } 7. O-O { [%clk 0:02:47] } O-O { [%clk 0:02:45] } 8. b3 { [%clk 0:02:45] } d5 { [%clk 0:02:45] } 9. exd5 { [%clk 0:02:33] } cxd5 { [%clk 0:02:40] } 10. Nxe5 { [%clk 0:02:31] } Qd6 { [%clk 0:02:38] } 1-0

        '
    TvFeedFeatured:
      type: object
      title: featured
      properties:
        t:
          type: string
          description: 'The type of message.

            A summary of the game is sent as the first message and when the featured game changes.

            Subsequent messages are just the X-FEN, last move, and clocks.

            '
          const: featured
        d:
          type: object
          description: The data of the message
          title: featured
          properties:
            id:
              type: string
              description: The game ID
            orientation:
              $ref: '#/components/schemas/GameColor'
            players:
              type: array
              items:
                type: object
                properties:
                  color:
                    $ref: '#/components/schemas/GameColor'
                  user:
                    $ref: '#/components/schemas/LightUser'
                  rating:
                    type: integer
                  seconds:
                    type: integer
                    description: The player's remaining time in seconds
                required:
                - color
                - rating
                - seconds
                - user
              minItems: 2
              maxItems: 2
            fen:
              type: string
              description: The X-FEN of the current position
          required:
          - id
          - orientation
          - players
          - fen
      required:
      - t
      - d
    GameOpening:
      type: object
      properties:
        eco:
          type: string
        name:
          type: string
        ply:
          type: integer
      required:
      - eco
      - name
      - ply
    GamePlayers:
      type: object
      properties:
        white:
          $ref: '#/components/schemas/GamePlayerUser'
        black:
          $ref: '#/components/schemas/GamePlayerUser'
      required:
      - white
      - black
    Flair:
      type: string
      description: See [available flair list and images](https://github.com/lichess-org/lila/tree/master/public/flair)
    GameStatusName:
      type: string
      enum:
      - created
      - started
      - aborted
      - mate
      - resign
      - stalemate
      - timeout
      - draw
      - outoftime
      - cheat
      - noStart
      - unknownFinish
      - insufficientMaterialClaim
      - variantEnd
    Speed:
      type: string
      enum:
      - ultraBullet
      - bullet
      - blitz
      - rapid
      - classical
      - correspondence
    TvFeed:
      oneOf:
      - $ref: '#/components/schemas/TvFeedFeatured'
      - $ref: '#/components/schemas/TvFeedFen'
    LightUser:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        flair:
          $ref: '#/components/schemas/Flair'
        title:
          $ref: '#/components/schemas/Title'
        patron:
          $ref: '#/components/schemas/Patron'
        patronColor:
          $ref: '#/components/schemas/PatronColor'
      required:
      - id
      - name
    GamePlayerUser:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/LightUser'
        rating:
          type: integer
        ratingDiff:
          type: integer
        name:
          type: string
        provisional:
          type: boolean
        aiLevel:
          type: integer
        analysis:
          type: object
          properties:
            inaccuracy:
              type: integer
            mistake:
              type: integer
            blunder:
              type: integer
            acpl:
              type: integer
            accuracy:
              type: integer
          required:
          - inaccuracy
          - mistake
          - blunder
          - acpl
        team:
          type: string
      required:
      - user
      - rating
    Title:
      type: string
      enum:
      - GM
      - WGM
      - IM
      - WIM
      - FM
      - WFM
      - NM
      - CM
      - WCM
      - WNM
      - LM
      - BOT
      description: only appears if the user is a titled player or a bot user
  parameters:
    AcceptPgnOrNdjson:
      in: header
      name: Accept
      description: 'Specify the desired response format.

        Use `application/x-chess-pgn` to get the games in PGN format.

        Use `application/x-ndjson` to get the games in ndjson format. [Read about ndjson here](#description/streaming-with-nd-json) and how you can parse it in Javascript.

        '
      schema:
        type: string
        enum:
        - application/x-chess-pgn
        - application/x-ndjson
        default: application/x-chess-pgn
  examples:
    tv-streamCurrentTvGame-move.json:
      value:
        t: fen
        d:
          fen: 2n1rrk1/1p3ppp/3p4/pP1P2qn/2PB4/5Q2/P1N2PPP/4RRK1 b - - 6 21
          lm: a1e1
          wc: 39
          bc: 43
    tv-getCurrentTvGames.json:
      value:
        chess960:
          user:
            name: realNomenNescio
            id: realnomennescio
          rating: 2366
          gameId: doTaX3pm
          color: black
        best:
          user:
            name: DrawMerchant
            title: IM
            id: drawmerchant
          rating: 2787
          gameId: 2i3nCKuq
          color: black
        antichess:
          user:
            name: Penguinept
            flair: activity.puzzle-piece
            id: penguinept
          rating: 2197
          gameId: Mm5RSBXg
          color: white
        computer:
          user:
            name: AIDARED
            flair: food-drink.red-apple
            id: aidared
          rating: 2506
          gameId: Y1D9abkF
          color: white
        bullet:
          user:
            name: DrawMerchant
            title: IM
            id: drawmerchant
          rating: 2787
          gameId: 2i3nCKuq
          color: black
        horde:
          user:
            name: Andr88
            flair: symbols.triangular-flag
            id: andr88
          rating: 2133
          gameId: zv6BfeT6
          color: black
        atomic:
          user:
            name: cyberpunks
            flair: smileys.cold-face
            patron: true
            patronColor: 1
            id: cyberpunks
          rating: 1932
          gameId: EBddIJbc
          color: white
        bot:
          user:
            name: PetersBot
            title: BOT
            id: petersbot
          rating: 2921
          gameId: 0xBV4AeD
          color: black
        racingKings:
          user:
            name: AahaanTheChamp
            flair: food-drink.mango
            id: aahaanthechamp
          rating: 2135
          gameId: HEmN5MUd
          color: white
        ultraBullet:
          user:
            name: Lumbrerosky
            id: lumbrerosky
          rating: 1942
          gameId: v2WgmhmU
          color: black
        blitz:
          user:
            name: Bugzilla
            title: IM
            id: bugzilla
          rating: 2629
          gameId: Si5fCcRw
          color: white
        kingOfTheHill:
          user:
            name: sorrymyfault
            id: sorrymyfault
          rating: 2357
          gameId: ugZHqrgZ
          color: white
        crazyhouse:
          user:
            name: Mini_verse
            flair: smileys.skull
            id: mini_verse
          rating: 2295
          gameId: f2RI9DMl
          color: black
        threeCheck:
          user:
            name: blit2
            id: blit2
          rating: 1978
          gameId: ltR9SqXm
          color: black
        classical:
          user:
            name: Matador85
            id: matador85
          rating: 2356
          gameId: JBrftNJe
          color: white
        rapid:
          user:
            name: fito2
            title: FM
            id: fito2
          rating: 2479
          gameId: EUO98ic9
          color: white
    tv-getBestOngoingGamesOfTvChannel.pgn:
      value: '[Event "rated bullet game"]

        [Site "https://lichess.org/nQSXy8Zw"]

        [Date "2026.05.15"]

        [Round "-"]

        [White "Chess-uae"]

        [Black "eloWhitekingchess"]

        [Result "*"]

        [GameId "nQSXy8Zw"]

        [UTCDate "2026.05.15"]

        [UTCTime "02:36:59"]

        [WhiteElo "2995"]

        [BlackElo "2868"]

        [Variant "Standard"]

        [TimeControl "30+0"]

        [ECO "A00"]

        [Termination "Unterminated"]


        1. g3 Nf6 2. Bg2 d6 3. Nf3 g6 4. O-O Bg7 5. d4 O-O 6. c4 c6 *



        [Event "GRAN FINAL BULLET RAW ABRIL Team Battle"]

        [Site "https://lichess.org/9U5Mc8fc"]

        [Date "2026.05.15"]

        [Round "-"]

        [White "Goku102020newaccount"]

        [Black "Misterio666"]

        [Result "*"]

        [GameId "9U5Mc8fc"]

        [UTCDate "2026.05.15"]

        [UTCTime "02:36:36"]

        [WhiteElo "2826"]

        [BlackElo "2530"]

        [Variant "Standard"]

        [TimeControl "60+0"]

        [ECO "A40"]

        [Termination "Unterminated"]


        1. d4 e6 2. Bf4 Nf6 3. e3 d5 4. Nf3 Bd6 5. Bg3 Ne4 6. Nbd2 f5 7. c4 c6 8. Qb3 O-O 9. Bd3 Kh8 10. Bxe4 fxe4 11. Ne5 Bxe5 12. Bxe5 Nd7 13. Bg3 Nf6 *



        [Event "rated bullet game"]

        [Site "https://lichess.org/tQrb3I5l"]

        [Date "2026.05.15"]

        [Round "-"]

        [White "eloWhitekingchess"]

        [Black "Chess-uae"]

        [Result "0-1"]

        [GameId "tQrb3I5l"]

        [UTCDate "2026.05.15"]

        [UTCTime "02:36:23"]

        [WhiteElo "2872"]

        [BlackElo "2991"]

        [WhiteRatingDiff "-4"]

        [BlackRatingDiff "+4"]

        [Variant "Standard"]

        [TimeControl "30+0"]

        [ECO "A05"]

        [Termination "Normal"]


        1. Nf3 g6 2. d3 Nf6 3. g3 Bg7 4. Bg2 O-O 5. O-O d5 6. c3 c5 7. Qc2 Nc6 8. Nbd2 d4 9. e3 dxc3 10. bxc3 Bf5 11. e4 Bg4 12. Nc4 b5 13. Ne3 Rc8 14. Nxg4 Nxg4 15. h3 Nge5 16. Nxe5 Bxe5 17. Rd1 Bg7 18. Be3 b4 19. cxb4 Nxb4 20. Qb3 Bxa1 21. Rxa1 Qxd3 22. Qa4 Rfd8 23. Qxa7 Nc2 24. Rc1 Nxe3 25. Qxe7 Nxg2 26. Kxg2 Re8 0-1

        '
    tv-getBestOngoingGamesOfTvChannel.json:
      value:
        id: nQSXy8Zw
        rated: true
        variant: standard
        speed: bullet
        perf: bullet
        createdAt: 1778812619976
        lastMoveAt: 1778812625792
        status: started
        source: friend
        players:
          white:
            user:
              name: Chess-uae
              id: chess-uae
            rating: 2995
          black:
            user:
              name: eloWhitekingchess
              flair: nature.horse-face
              id: elowhitekingchess
            rating: 2868
        opening:
          eco: A00
          name: 'Hungarian Opening: Indian Defense'
          ply: 2
        moves: g3 Nf6 Bg2 d6 Nf3 g6 O-O Bg7 d4 O-O c4 c6
        clocks:
        - 3000
        - 3000
        - 3000
        - 3000
        - 3000
        - 2964
        - 3000
        - 2964
        - 3000
        - 2964
        - 3000
        - 2955
        pgn: '[Event "rated bullet game"]

          [Site "https://lichess.org/nQSXy8Zw"]

          [Date "2026.05.15"]

          [Round "-"]

          [White "Chess-uae"]

          [Black "eloWhitekingchess"]

          [Result "*"]

          [GameId "nQSXy8Zw"]

          [UTCDate "2026.05.15"]

          [UTCTime "02:36:59"]

          [WhiteElo "2995"]

          [BlackElo "2868"]

          [Variant "Standard"]

          [TimeControl "30+0"]

          [ECO "A00"]

          [Opening "Hungarian Opening: Indian Defense"]

          [Termination "Unterminated"]


          1. g3 { [%clk 0:00:30] } 1... Nf6 { [%clk 0:00:30] } 2. Bg2 { [%clk 0:00:30] } 2... d6 { [%clk 0:00:30] } 3. Nf3 { [%clk 0:00:30] } 3... g6 { [%clk 0:00:30] } 4. O-O { [%clk 0:00:30] } 4... Bg7 { [%clk 0:00:30] } 5. d4 { [%clk 0:00:30] } 5... O-O { [%clk 0:00:30] } 6. c4 { [%clk 0:00:30] } 6... c6 { [%clk 0:00:30] } *



          '
        clock:
          initial: 30
          increment: 0
          totalTime: 30
    tv-streamCurrentTvGame-newGame.json:
      value:
        t: featured
        d:
          id: 2i3nCKuq
          orientation: black
          players:
          - color: white
            user:
              name: DrawMerchant
              title: IM
              id: drawmerchant
            rating: 2787
            seconds: 60
          - color: black
            user:
              name: Empathy666
              flair: symbols.black-heart
              id: empathy666
            rating: 2876
            seconds: 60
          fen: 2n1rrk1/1p3ppp/3p4/pP1P2qn/2PB4/5Q2/P1N2PPP/R4RK1 w - - 5 21
  securitySchemes:
    OAuth2:
      type: oauth2
      description: 'Read [the introduction for how to make authenticated requests](#description/authentication).

        '
      flows:
        authorizationCode:
          authorizationUrl: https://lichess.org/oauth
          

# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lichess/refs/heads/main/openapi/lichess-tv-api-openapi.yml