-
Notifications
You must be signed in to change notification settings - Fork 0
Quick Reference
dblike edited this page Feb 24, 2026
·
4 revisions
dotnet add package LichessSharpusing LichessSharp;
// Without authentication (limited endpoints)
using var client = new LichessClient();
// With personal access token
using var client = new LichessClient("lip_xxxxxxxx");
// With custom options
using var client = new LichessClient("lip_xxxxxxxx", new LichessClientOptions
{
DefaultTimeout = TimeSpan.FromSeconds(60),
AutoRetryOnRateLimit = true
});var profile = await client.Account.GetProfileAsync();
var email = await client.Account.GetEmailAsync();
var prefs = await client.Account.GetPreferencesAsync();
var kidMode = await client.Account.GetKidModeAsync();
await client.Account.SetKidModeAsync(true);var user = await client.Users.GetAsync("username");
var users = await client.Users.GetManyAsync(new[] { "user1", "user2" });
var statuses = await client.Users.GetRealTimeStatusAsync(new[] { "user1" });
var history = await client.Users.GetRatingHistoryAsync("username");
var top10 = await client.Users.GetAllTop10Async();
var leaders = await client.Users.GetLeaderboardAsync("blitz", 100);
var crosstable = await client.Users.GetCrosstableAsync("user1", "user2");
var streamers = await client.Users.GetLiveStreamersAsync();var game = await client.Games.ExportAsync("gameId");
var pgn = await client.Games.GetPgnAsync("gameId");
var ongoing = await client.Games.GetOngoingGamesAsync();
// Streaming
await foreach (var g in client.Games.StreamUserGamesAsync("username")) { }
await foreach (var g in client.Games.StreamByUsersAsync(userIds)) { }
await foreach (var move in client.Games.StreamGameMovesAsync("gameId")) { }// Event streams
await foreach (var evt in client.Bot.StreamEventsAsync()) { }
await foreach (var evt in client.Bot.StreamGameAsync(gameId)) { }
// Game actions
await client.Bot.MakeMoveAsync(gameId, "e2e4");
await client.Bot.WriteChatAsync(gameId, ChatRoom.Player, "gl");
await client.Bot.AbortAsync(gameId);
await client.Bot.ResignAsync(gameId);
await client.Bot.HandleDrawAsync(gameId, accept: true);
await client.Bot.ClaimVictoryAsync(gameId);
// Account
await client.Bot.UpgradeAccountAsync();
await foreach (var bot in client.Bot.GetOnlineBotsAsync(50)) { }// Event streams
await foreach (var evt in client.Board.StreamEventsAsync()) { }
await foreach (var evt in client.Board.StreamGameAsync(gameId)) { }
await foreach (var result in client.Board.SeekAsync(options)) { }
// Game actions
await client.Board.MakeMoveAsync(gameId, "e2e4");
await client.Board.WriteChatAsync(gameId, ChatRoom.Player, "gg");
await client.Board.AbortAsync(gameId);
await client.Board.ResignAsync(gameId);
await client.Board.HandleDrawAsync(gameId, accept: true);
await client.Board.BerserkAsync(gameId);var pending = await client.Challenges.GetPendingAsync();
var challenge = await client.Challenges.CreateAsync("opponent", options);
await client.Challenges.AcceptAsync(challengeId);
await client.Challenges.DeclineAsync(challengeId, ChallengeDeclineReason.TooFast);
await client.Challenges.CancelAsync(challengeId);
var aiGame = await client.Challenges.ChallengeAiAsync(options);
var open = await client.Challenges.CreateOpenAsync(options);
await client.Challenges.AddTimeAsync(gameId, 15);var daily = await client.Puzzles.GetDailyAsync();
var puzzle = await client.Puzzles.GetAsync("puzzleId");
var next = await client.Puzzles.GetNextAsync(angle: "mateIn2");
var batch = await client.Puzzles.GetBatchAsync("mix", nb: 10);
var dashboard = await client.Puzzles.GetDashboardAsync(30);
var storm = await client.Puzzles.GetStormDashboardAsync("username");
await foreach (var activity in client.Puzzles.StreamActivityAsync(50)) { }var team = await client.Teams.GetAsync("teamId");
var popular = await client.Teams.GetPopularAsync(page: 1);
var search = await client.Teams.SearchAsync("chess club");
var userTeams = await client.Teams.GetUserTeamsAsync("username"); // Requires OAuth
await foreach (var member in client.Teams.StreamMembersAsync("teamId")) { }
await client.Teams.JoinAsync("teamId", message: "Please let me join");
await client.Teams.LeaveAsync("teamId");await foreach (var user in client.Relations.StreamFollowingUsersAsync()) { }
await client.Relations.FollowUserAsync("username");
await client.Relations.UnfollowUserAsync("username");
await client.Relations.BlockUserAsync("username");
await client.Relations.UnblockUserAsync("username");var (authUrl, codeVerifier) = client.OAuth.CreateAuthorizationRequest(
clientId: "my-app",
redirectUri: "http://localhost/callback",
scopes: new[] { "preference:read", "board:play" }
);
var token = await client.OAuth.GetTokenAsync(new OAuthTokenRequest
{
Code = authCode,
CodeVerifier = codeVerifier,
RedirectUri = "http://localhost/callback",
ClientId = "my-app"
});
await client.OAuth.RevokeTokenAsync();
var tokenInfo = await client.OAuth.TestTokensAsync(new[] { token1, token2 });var channels = await client.Tv.GetChannelsAsync();
await foreach (var game in client.Tv.StreamCurrentTvGameAsync()) { }// Arena tournaments
var arena = await client.ArenaTournaments.GetAsync("tournamentId");
await foreach (var standing in client.ArenaTournaments.StreamStandingsAsync("id")) { }
// Swiss tournaments
var swiss = await client.SwissTournaments.GetAsync("swissId");
await foreach (var result in client.SwissTournaments.StreamResultsAsync("id")) { }var simuls = await client.Simuls.GetCurrentAsync();
// simuls.Started, simuls.Created, simuls.Finished, simuls.Pendingvar pgn = await client.Studies.ExportStudyPgnAsync("studyId");
await foreach (var study in client.Studies.StreamUserStudiesAsync("username")) { }
await client.Studies.ImportPgnAsync("studyId", pgn, new StudyImportOptions { Name = "Chapter" });await foreach (var b in client.Broadcasts.StreamOfficialBroadcastsAsync(nb: 10)) { }
var tournament = await client.Broadcasts.GetTournamentAsync("tournamentId");
var pgn = await client.Broadcasts.ExportRoundPgnAsync("roundId");await client.Messaging.SendAsync("username", "Hello!");var eval = await client.Analysis.GetCloudEvaluationAsync(fen, multiPv: 3);var masters = await client.OpeningExplorer.GetMastersAsync(fen);
var lichess = await client.OpeningExplorer.GetLichessAsync(fen, options);
var player = await client.OpeningExplorer.GetPlayerAsync(fen, "username", options);var result = await client.Tablebase.LookupAsync(fen);
// result.Category, result.Dtz, result.Movesvar player = await client.Fide.GetPlayerAsync(1503014); // FIDE ID
var results = await client.Fide.SearchPlayersAsync("Carlsen");var pairing = await client.BulkPairings.CreateAsync(options);
var pairings = await client.BulkPairings.GetAsync(pairingId);
await client.BulkPairings.StartClocksAsync(pairingId);var engines = await client.ExternalEngine.ListAsync();
var engine = await client.ExternalEngine.CreateAsync(registration);
await foreach (var line in client.ExternalEngine.AnalyseAsync("id", request)) { }await foreach (var evt in client.Bot.StreamGameAsync(gameId))
{
switch (evt)
{
case BotGameFullEvent full: /* First event */ break;
case BotGameStateEvent state: /* Move updates */ break;
case BotChatLineEvent chat: /* Chat messages */ break;
case BotOpponentGoneEvent gone: /* Opponent left */ break;
}
}await foreach (var evt in client.Board.StreamGameAsync(gameId))
{
switch (evt)
{
case GameFullEvent full: /* First event */ break;
case GameStateEvent state: /* Move updates */ break;
case ChatLineEvent chat: /* Chat messages */ break;
case OpponentGoneEvent gone: /* Opponent left */ break;
}
}new ChallengeCreateOptions
{
Rated = true,
ClockLimit = 300, // 5 minutes in seconds
ClockIncrement = 3, // 3 seconds
Color = ChallengeColor.Random,
Variant = "standard", // or "chess960", "crazyhouse", etc.
Rules = ChallengeRules.NoAbort | ChallengeRules.NoRematch
}new ChallengeAiOptions
{
Level = 8, // 1-8
ClockLimit = 300,
ClockIncrement = 0,
Color = ChallengeColor.White
}new ExportGameOptions
{
Moves = true,
PgnInJson = true,
Clocks = true,
Evals = true,
Opening = true
}new SeekOptions
{
Rated = true,
Time = 5, // minutes
Increment = 3, // seconds
RatingMin = 1500,
RatingMax = 2000
}| Scope | Description |
|---|---|
preference:read |
Read preferences |
preference:write |
Write preferences |
email:read |
Read email |
challenge:read |
Read challenges |
challenge:write |
Create/accept/decline challenges |
board:play |
Play with Board API |
bot:play |
Play with Bot API |
puzzle:read |
Read puzzle activity |
team:read |
Read team membership |
team:write |
Join/leave teams |
team:lead |
Manage teams |
follow:read |
Read followed users |
follow:write |
Follow/block users |
msg:write |
Send messages |
| Key | Description |
|---|---|
ultraBullet |
UltraBullet |
bullet |
Bullet |
blitz |
Blitz |
rapid |
Rapid |
classical |
Classical |
correspondence |
Correspondence |
chess960 |
Chess960 |
crazyhouse |
Crazyhouse |
antichess |
Antichess |
atomic |
Atomic |
horde |
Horde |
kingOfTheHill |
King of the Hill |
racingKings |
Racing Kings |
threeCheck |
Three-check |