Musixmatch APImusixmatch.com ↗
Access Musixmatch lyrics, song metadata, artist profiles, album tracklists, and translation coverage via a structured JSON API. 7 endpoints.
What is the Musixmatch API?
This API provides structured access to Musixmatch data across 7 endpoints covering lyrics, song metadata, artist profiles, and full discographies. The get_song_lyrics endpoint returns the complete lyrics text, ISO language code, and a verification flag for any track identified by its artist and track vanity slugs. Additional endpoints expose translation completion percentages, mood and theme tags, writer credits, album tracklists, and a curated discover feed.
curl -X GET 'https://api.parse.bot/scraper/63f6e22b-d8f9-4a3f-a671-a3f30a5eca54/get_song_lyrics?language=en&track_vanity=shape-of-you&artist_vanity=ed-sheeran' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace musixmatch-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Musixmatch SDK — lyrics, metadata, artist profiles, and discographies."""
from parse_apis.musixmatch_lyrics_metadata_api import (
Musixmatch, Song, SongNotFound
)
client = Musixmatch()
# Fetch a song's full metadata including moods, themes, and writers.
song = client.songs.get(artist_vanity="ed-sheeran", track_vanity="shape-of-you")
print(song.title, "by", song.artist.name)
print("Album:", song.album.name, "| Moods:", song.moods)
# Drill into lyrics and translations from the Song instance.
lyrics = song.lyrics(language="en")
print("Language:", lyrics.language, "| Verified:", lyrics.verified)
print("Lyrics preview:", lyrics.lyrics[:80] if lyrics.lyrics else "N/A")
translations = song.translations()
print("Available translations:", len(translations.translations), "languages")
# Explore an artist's profile and discography.
artist = client.artist(vanity_id="ed-sheeran").profile()
print("\nArtist:", artist.name, "| Genres:", artist.genres)
print("Discography:", artist.discography_summary.album_count, "albums")
for item in artist.discography(limit=3):
print(f" - {item.title} ({item.type}, {item.track_count} tracks)")
# Fetch album details with full tracklist.
album = client.albums.get(artist_vanity="Ed-Sheeran", album_vanity="x-Deluxe-Edition")
print(f"\nAlbum: {album.title} ({album.track_count} tracks)")
for track in album.tracks[:3]:
print(f" {track.title} — has_lyrics={track.has_lyrics}")
# Typed error handling for a non-existent song.
try:
client.songs.get(artist_vanity="ed-sheeran", track_vanity="nonexistent-track-xyz")
except SongNotFound as exc:
print(f"\nSong not found: {exc.artist_vanity}/{exc.track_vanity}")
# Discover feed for trending content.
feed = client.discoverfeeds.get()
print(f"\nDiscover: {len(feed.genres)} genres, {len(feed.chart_artists)} chart artists")
print("\nExercised: songs.get / song.lyrics / song.translations / artist.profile / artist.discography / albums.get / discoverfeeds.get")
Retrieve full lyrics for a specific song in a specified language. Returns the complete lyrics text, language, and verification status. The lyrics page is fetched using the artist and track vanity slugs as they appear in Musixmatch URLs.
| Param | Type | Description |
|---|---|---|
| language | string | ISO 639-2 language code for the lyrics language (e.g. 'it', 'es', 'fr', 'en'). |
| track_vanityrequired | string | Track vanity ID (slug from URL, e.g. 'shape-of-you'). |
| artist_vanityrequired | string | Artist vanity ID (slug from URL, e.g. 'ed-sheeran'). |
{
"type": "object",
"fields": {
"track": "string track vanity ID",
"artist": "string artist vanity ID",
"lyrics": "string containing the full song lyrics text",
"language": "string ISO language code",
"verified": "boolean or null indicating if lyrics are verified"
},
"sample": {
"data": {
"track": "shape-of-you",
"artist": "ed-sheeran",
"lyrics": "The club isn′t the best place to find a lover...",
"language": "en",
"verified": true
},
"status": "success"
}
}About the Musixmatch API
Lyrics and Song Metadata
get_song_lyrics accepts artist_vanity and track_vanity slug parameters (matching the path segments in Musixmatch URLs) and returns the full lyrics string, the ISO 639-2 language code, and a verified boolean. An optional language parameter lets you request lyrics in a specific language where available. get_song_details uses the same slug pair to return richer metadata: a meaning object with explanation and type, arrays of moods and themes, a writers array, and an album object carrying name, release_date, type, and track_count.
Translations and Artist Data
get_song_translations returns a translations map from ISO language codes to integer completion percentages (0–100), so you can see at a glance how fully a song has been translated into each language. get_artist_profile returns the artist's genres array, a popular_songs list (each with title, album, and vanity_id), and a discography_summary with album_count and single_count. Note that first access to artist pages requires solving a reCAPTCHA, which the API handles automatically.
Discography and Album Details
get_artist_discography returns an items array where each entry includes title, id, type, release_year, track_count, and vanity_id. The vanity_id from these results feeds directly into get_album_details, which returns the full tracklist as an array of objects with title, id, has_lyrics, and vanity_id per track, along with the album's release_date as a Unix timestamp in milliseconds.
Discover Feed
get_discover_feed requires no parameters and returns four collections: community_featured cards (with title, description, and link), top_lyric_videos (with YouTube URLs), chart_artists, and a genres list with slugs. This endpoint is useful for surfacing trending content without needing a specific artist or track as a starting point.
The Musixmatch API is a managed, monitored endpoint for musixmatch.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when musixmatch.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official musixmatch.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display synced lyrics pages in a music player app using
get_song_lyricswith language filtering - Build a song credits database by extracting
writers,moods, andthemesfromget_song_details - Show translation progress badges per language using the completion percentages from
get_song_translations - Populate an artist bio page with genre tags, popular songs, and discography counts from
get_artist_profile - Generate a complete album catalog with tracklists by chaining
get_artist_discographyandget_album_details - Drive a music discovery widget using chart artists and lyric video URLs from
get_discover_feed - Flag which tracks in a playlist have verified lyrics using the
verifiedfield fromget_song_lyrics
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Musixmatch have an official developer API?+
What does `get_song_translations` actually return, and how is completion measured?+
translations object keyed by ISO 639-2 language codes (e.g. 'fr', 'es'). Each value is an integer from 0 to 100 representing the percentage of lyric lines that have been translated into that language by the Musixmatch community. A value of 100 means every line has a translation; lower values indicate partial coverage.Is lyrics search by song title or ISRC supported?+
artist_vanity and track_vanity slugs that appear in Musixmatch URLs. Free-text search by title or lookup by ISRC or Spotify track ID are not covered. You can fork this API on Parse and revise it to add a search endpoint that accepts a plain-text query.Are there any known limitations when accessing artist and album pages?+
get_artist_profile and get_album_details note that a reCAPTCHA challenge is required on first access to those page types. The API handles this automatically, but it can result in slightly higher latency compared to song-level endpoints. Additionally, release_date in get_album_details is returned as a Unix timestamp in milliseconds, so client-side conversion is needed to display a human-readable date.Does the API return chart rankings or real-time streaming popularity data?+
get_discover_feed endpoint includes chart_artists with name and vanity ID, but no numeric chart positions, stream counts, or historical rank trends are exposed. You can fork this API on Parse and revise it to add an endpoint that retrieves chart position data from Musixmatch chart pages.