yamd2
v1.4.0
Published
A Node.js wrapper for the Yandex.Music API (Unofficial) http://music.yandex.ru
Downloads
101
Maintainers
Readme
Yandex.Music API (Unofficial) for Node
This is a Node.js wrapper for the Yandex.Music API that is used in mobile apps (iOS/Android).
Localization
Installation
NPM
npm install yamd2Yarn
yarn add yamd2PNPM
pnpm add yamd2Bun
bun add yamd2From GitHub
npm install github:Dirold2/yamd2#__dist__Usage
import { YMApi, WrappedYMApi, Types } from "yamd2";
// Basic API usage — methods are organized by domain
const api = new YMApi();
await api.init({ access_token: "EXAMPLE_TOKEN", uid: 0 });
const searchResult = await api.search.query("gorillaz", { type: "artist" });
const artist = searchResult.artists?.results?.[0];
const tracks = await api.artists.getArtistTracks(artist.id);
console.log(tracks);
// Enhanced API with additional features
const wrappedApi = new WrappedYMApi();
await wrappedApi.init({ access_token: "EXAMPLE_TOKEN", uid: 0 });
// Get track download info with codec support
const downloadInfo = await wrappedApi.getDownloadInfo("123456", {
codec: "flac",
quality: "lossless"
});
// Get best available download URL
const bestUrl = await wrappedApi.getBestDownloadUrl("123456");
// Support for URLs and IDs
const track = await wrappedApi.getTrack("https://music.yandex.ru/track/123456");Get token from here and uid from here.
Available methods
Methods are organized into domain fields on the YMApi instance:
api.auth
init(config)— Authenticate and initialize the API
api.account
getAccountStatus()— Get current user account statusgetFeed()— Get user feed (generated playlists, days)
api.landing
getChart(chartType?)— Get chartgetNewReleases()— Get new album releasesgetNewPlaylists()— Get new playlistsgetPodcasts()— Get podcastsgetGenres()— Get list of music genres
api.search
query(q, options?)— Search across all or specific typeartists(q, options?)— Search artists onlytracks(q, options?)— Search tracks onlyalbums(q, options?)— Search albums onlyall(q, options?)— Search all types
api.tracks
getTrack(trackId)— Get track(s) by IDgetSingleTrack(trackId)— Get single trackgetTracks(trackIds)— Get multiple tracksgetTrackSupplement(trackId)— Get track supplementgetTrackLyrics(trackId, format?)— Get track lyricsgetTrackTrailer(trackId)— Get track trailergetTrackFullInfo(trackId)— Get full track info (including similar, supplement, etc.)getTrackDownloadInfo(trackId, quality?, canUseStreaming?)— Get download infogetTrackDownloadInfoNew(trackId, quality?, codecs?, transport?)— New API endpointgetTrackDirectLink(downloadUrl, short?)— Resolve direct download linkgetTrackDirectLinkNew(trackUrl)— Resolve new format direct linkgetTrackShareLink(track)— Generate share URLgetSimilarTracks(trackId)— Get similar tracks
api.albums
getAlbum(albumId, withTracks?)— Get albumgetAlbums(albumIds)— Get multiple albumsgetAlbumWithTracks(albumId)— Get album with volumes/tracksgetAlbumSimilarEntities(albumId)— Get similar entities for albumgetAlbumTrailer(albumId)— Get album trailer
api.artists
getArtist(artistId)— Get artist infogetArtists(artistIds)— Get multiple artistsgetArtistTracks(artistId, options?)— Get artist tracksgetArtistBriefInfo(artistId)— Get artist brief infogetArtistDirectAlbums(artistId, options?)— Get direct albumsgetArtistSimilar(artistId)— Get similar artistsgetArtistLinks(artistId)— Get artist linksgetArtistAlsoAlbums(artistId, options?)— Get also albumsgetArtistDiscographyAlbums(artistId, options?)— Get discography albumsgetArtistSafeDirectAlbums(artistId, options?)— Get safe direct albumsgetArtistTrackIds(artistId, options?)— Get artist track IDsgetArtistAbout(artistId)— Get artist about infogetArtistClips(artistId)— Get artist clipsgetArtistDonation(artistId)— Get artist donation infogetArtistInfo(artistId)— Get extended artist infogetArtistSkeleton(artistId, skeletonId?)— Get artist skeletongetArtistTrailer(artistId)— Get artist trailer
api.playlists
getPlaylist(playlistId, user?)— Get playlistgetPlaylistNew(playlistId)— Get playlist by string IDgetPlaylists(playlistIds, user?, options?)— Get multiple playlistsgetUserPlaylists(userId)— Get user playlistsgetPlaylistRecommendations(kind, userId?)— Get playlist recommendationsgetPlaylistKinds(userId?)— Get user playlist kindsgetPlaylistTrailer(kind, userId?)— Get playlist trailergetPlaylistSimilarEntities(playlistUuid)— Get similar entitiescreatePlaylist(name, options?)— Create playlistremovePlaylist(playlistId)— Remove playlistrenamePlaylist(playlistId, name)— Rename playlistaddTracksToPlaylist(playlistId, tracks, revision, options?)— Add tracksremoveTracksFromPlaylist(playlistId, tracks, revision, options?)— Remove trackssetPlaylistVisibility(playlistId, visibility, userId?)— Set playlist visibilitysetPlaylistDescription(playlistId, description, userId?)— Set playlist descriptioncollectiveJoin(userId, token)— Join collective playlistgetUserSettings(userId?)— Get user settings
api.radio
getAllStationsList(language?)— Get all stationsgetRecomendedStationsList()— Get recommended stationsgetStationTracks(stationId, queue?)— Get station tracksgetStationInfo(stationId)— Get station infocreateRotorSession(seeds, includeTracksInResponse?)— Create rotor sessionpostRotorSessionTracks(sessionId, options)— Get rotor session tracks
api.user
getLikedTracks(userId?)— Get liked trackslikeTracks(trackIds, userId?)— Like tracksunlikeTracks(trackIds, userId?)— Unlike tracksgetLikedAlbums(userId?)— Get liked albumslikeAlbums(albumIds, userId?)— Like albumsunlikeAlbums(albumIds, userId?)— Unlike albumsgetLikedArtists(userId?)— Get liked artistslikeArtists(artistIds, userId?)— Like artistsunlikeArtists(artistIds, userId?)— Unlike artistsgetLikedPlaylists(userId?)— Get liked playlistslikePlaylists(playlistIds, userId?)— Like playlistsunlikePlaylists(playlistIds, userId?)— Unlike playlistsgetLikedClips(userId?, page?, pageSize?)— Get liked clipslikeClip(clipId, userId?)— Like a clipunlikeClip(clipId, userId?)— Unlike a clipgetDislikedTracks(userId?)— Get disliked tracksdislikeTracks(trackIds, userId?)— Dislike tracksundislikeTracks(trackIds, userId?)— Undislike tracksgetDislikedArtists(userId?)— Get disliked artistsdislikeArtist(artistId, userId?)— Dislike artistundislikeArtist(artistId, userId?)— Undislike artist
api.queues
getQueues()— Get all queuesgetQueue(queueId)— Get specific queue
api.labels
getLabel(labelId)— Get label infogetLabelAlbums(labelId, options?)— Get label albumsgetLabelArtists(labelId, options?)— Get label artists
api.credits
getTrackCredits(trackId)— Get track creditsgetClipCredits(clipId)— Get clip credits
api.disclaimers
getTrackDisclaimer(trackId)— Get track disclaimergetAlbumDisclaimer(albumId)— Get album disclaimergetArtistDisclaimer(artistId)— Get artist disclaimergetClipDisclaimer(clipId)— Get clip disclaimer
api.metatags
getMetatags()— Get all metatagsgetMetatag(metatagId, options?)— Get metatag with entitiesgetMetatagAlbums(metatagId, options?)— Get metatag albumsgetMetatagArtists(metatagId, options?)— Get metatag artistsgetMetatagPlaylists(metatagId, options?)— Get metatag playlists
api.clips
getClips(clipIds)— Get clips by IDsgetClipsWillLike(page?, pageSize?)— Get clips the user will like
api.pins
getPins()— Get all pinspinAlbum(albumId)— Pin albumunpinAlbum(albumId)— Unpin albumpinArtist(artistId)— Pin artistunpinArtist(artistId)— Unpin artistpinPlaylist(uid, kind)— Pin playlistunpinPlaylist(uid, kind)— Unpin playlistpinWave(seeds)— Pin waveunpinWave(seeds)— Unpin wave
api.presaves
getPresaves(options?)— Get presaved albumsaddPresave(albumId, options?)— Presave an albumremovePresave(albumId, options?)— Remove presave
api.musicHistory
getMusicHistory(fullModelsCount?)— Get music historygetMusicHistoryItems(items)— Get music history items by types
api.deviceAuth
requestDeviceCode(options?)— Request device code from OAuthpollDeviceToken(deviceCode, options?)— Poll for OAuth tokendeviceAuth(onCode, options?)— Full device auth flow (polling loop)
api.concerts
getArtistConcerts(artistId)— Get concerts for artistgetConcertInfo(concertId)— Get concert infogetConcertSkeleton(concertId, skeletonId?)— Get concert skeletongetConcertsFeed(locations?)— Get concerts feedgetConcertsLocations()— Get concert locationsgetConcertsTabConfig()— Get concerts tab config
Wrapped API (WrappedYMApi)
Enhanced API with additional features and convenience methods:
Tracks
- getDownloadInfo - Get download information with codec support
- getDownloadUrl - Get direct download URL
- getBestDownloadUrl - Get best available URL by codec priority
- getDownloadUrlForFFmpeg - Get FFmpeg-compatible URL (RAW MP3)
- getMp3DownloadInfo - Get MP3 download info
- getMp3DownloadUrl - Get MP3 download URL
- getAacDownloadInfo - Get AAC download info
- getAacDownloadUrl - Get AAC download URL
- getFlacDownloadInfo - Get FLAC download info
- getFlacDownloadUrl - Get FLAC download URL
- getFlacMP4DownloadInfo - Get FLAC-MP4 download info
- getFlacMP4DownloadUrl - Get FLAC-MP4 download URL
- getTrack - Get track by ID or URL
- isEncryptedUrl - Check if URL is encrypted
Playlist
- getPlaylist - Get playlist by ID or URL
Album
- getAlbum - Get album by ID or URL
- getAlbumWithTracks - Get album with tracks by ID or URL
Artist
- getArtist - Get artist by ID or URL
Etc
- getShortenedLink - Get shortened link
Features
Codec Support
The WrappedYMApi supports multiple audio codecs with automatic quality selection:
- FLAC - Lossless, high quality
- FLAC-MP4 - Lossless in MP4 container
- AAC - Standard compression
- AAC-MP4 - AAC in MP4 container
- HE-AAC - High efficiency
- HE-AAC-MP4 - HE-AAC in MP4 container
- MP3 - Wide compatibility
URL Support
All methods accept both entity IDs and URLs:
// By ID
const track = await wrappedApi.getTrack(123456);
// By URL
const track = await wrappedApi.getTrack("https://music.yandex.ru/track/123456");Error Handling
Comprehensive error handling with specific error types:
import { YMApiError, ExtractionError, DownloadError } from "yamd2";
try {
const result = await wrappedApi.getDownloadUrl("invalid-url");
} catch (error) {
if (error instanceof ExtractionError) {
console.log(`Failed to extract ID from URL: ${error.input}`);
} else if (error instanceof DownloadError) {
console.log(
`URL not found for track ${error.trackId} with codec ${error.codec}`
);
}
}Download Quality Priority
When using getBestDownloadUrl(), codecs are checked in priority order:
- FLAC-MP4
- FLAC
- AAC-MP4
- AAC
- HE-AAC-MP4
- HE-AAC
- MP3
Examples
See the examples directory for detailed usage examples:
