Skip to main content

Get user activity feed

This endpoint reads the most recent activities of a user, including games played, puzzles solved, tournaments joined, and more.
Activity data is collected in daily intervals and may not reflect real-time activity.

Endpoint

GET https://lichess.org/api/user/{username}/activity

Path Parameters

username
string
required
The username of the user whose activity to fetch

Example Request

curl "https://lichess.org/api/user/DrNykterstein/activity"

Response

Returns an array of activity objects, each representing activity in a specific time interval (typically 1-2 weeks).
interval
object
Time period for this activity
games
object
Games played during this interval, grouped by performance type
puzzles
object
Puzzle training activity
tournaments
object
Tournament participation
practice
array
Practice positions completedEach entry contains:
  • url: Link to the practice study
  • name: Name of the practice study
  • nbPositions: Number of positions completed
simuls
array
Simul participation (simultaneous exhibitions)
correspondenceMoves
object
Moves made in correspondence games
correspondenceEnds
object
Correspondence games completed, grouped by variantEach variant contains:
  • score: Win/loss/draw counts
  • games: Sample completed games
follows
object
Following activity
studies
array
Studies created during this periodEach entry contains:
  • id: Study ID
  • name: Study name
teams
array
Teams joinedEach entry contains:
  • url: Team URL
  • name: Team name
  • flair: Team flair (optional)
posts
array
Forum posts made
patron
object
Patron support activity
stream
boolean
Whether the user streamed during this period
storm
object
Puzzle Storm activity
racer
object
Puzzle Racer activity
streak
object
Puzzle Streak activity

Example Response

[
  {
    "interval": {
      "start": 1708300800000,
      "end": 1708905600000
    },
    "games": {
      "blitz": {
        "win": 45,
        "loss": 32,
        "draw": 8,
        "rp": {
          "before": 2987,
          "after": 3003
        }
      },
      "rapid": {
        "win": 12,
        "loss": 7,
        "draw": 3,
        "rp": {
          "before": 2939,
          "after": 2927
        }
      }
    },
    "puzzles": {
      "score": {
        "win": 87,
        "loss": 13,
        "rp": {
          "before": 2845,
          "after": 2891
        }
      }
    },
    "tournaments": {
      "nb": 3,
      "best": [
        {
          "tournament": {
            "id": "abc123",
            "name": "Titled Arena Feb '24"
          },
          "nbGames": 23,
          "score": 67,
          "rank": 1,
          "rankPercent": 1
        }
      ]
    },
    "correspondenceMoves": {
      "nb": 45,
      "games": [
        {
          "id": "xyz789",
          "color": "white",
          "url": "https://lichess.org/xyz789/white",
          "opponent": {
            "user": "opponent123",
            "rating": 2400
          }
        }
      ]
    },
    "follows": {
      "in": {
        "ids": ["user1", "user2", "user3"]
      },
      "out": {
        "ids": ["user4", "user5"]
      }
    },
    "storm": {
      "runs": 12,
      "score": 89
    }
  }
]

Notes

  • Activity is aggregated in time intervals, typically covering 1-2 weeks
  • The most recent activities are returned first
  • Empty activity periods may be omitted from the response
  • Some fields are only present if there was activity in that category

Build docs developers (and LLMs) love