🌐 English · Русский
Getting started
Installation
dotnet add package YandexMusic
For dependency injection also add YandexMusic.DependencyInjection. Targets net8.0, net9.0 and net10.0.
Creating a client
using YandexMusic;
await using var client = new YandexMusicClient();
The constructor accepts YandexMusicClientOptions to configure the timeout, proxy, User-Agent,
device id and language:
using var client = new YandexMusicClient(new YandexMusicClientOptions
{
Timeout = TimeSpan.FromSeconds(30),
DeviceId = "my-app",
});
Authorization
client.Authentication.SignInWithToken("<oauth-token>");
Console.WriteLine(client.Authentication.IsAuthenticated);
See Authentication for session persistence.
Examples
// Track and a direct media link
var track = await client.Tracks.GetAsync("4");
string? link = await client.Tracks.GetDirectLinkAsync("4");
// Lyrics and similar tracks
var supplement = await client.Tracks.GetSupplementAsync("4");
var similar = await client.Tracks.GetSimilarAsync("4");
// Search and autocomplete
var found = await client.Search.SearchAsync("Queen");
var hints = await client.Search.SuggestAsync("que");
// Albums and artists (all catalogue ids are strings)
var album = await client.Albums.GetWithTracksAsync("3");
var artist = await client.Artists.GetBriefInfoAsync("79215");
var artistTracks = await client.Artists.GetTracksAsync("79215", page: 0, pageSize: 20);
// Playlists
var playlist = await client.Playlists.GetAsync("yamusic-daily", "1000");
// Account and library (read & write)
var status = await client.Account.GetStatusAsync();
var uid = status!.Account.Uid.ToString();
var liked = await client.Library.GetLikedTracksAsync(uid);
await client.Library.AddLikedTracksAsync(uid, ["4"]);
// Discovery: radio, landing, charts
var dashboard = await client.Radio.GetStationsDashboardAsync();
var chart = await client.Landing.GetChartAsync("russia");
var newReleases = await client.Landing.GetNewReleasesAsync();
Cancellation
Every asynchronous method accepts a CancellationToken:
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
var track = await client.Tracks.GetAsync("4", cts.Token);
Error handling
using YandexMusic;
try
{
var album = await client.Albums.GetAsync("0");
}
catch (YandexMusicApiException ex)
{
Console.WriteLine($"{(int)ex.StatusCode}: {ex.ErrorName}");
}
catch (YandexMusicAuthenticationException ex)
{
Console.WriteLine($"Authorization error: {ex.Message}");
}
See the exception hierarchy in Architecture.