Turn a song into sheet music
October 16, 2026
Table of contents
https://api.useapi.net/v1/mureka/music/score
Transcribe the main melody and chords of a song into sheet music, the same as the Score tool on mureka.ai. You get a link to a .zip with three files:
<title>_staff.musicxml, to open in MuseScore, Sibelius, Finale, Dorico and other notation software<title>_staff.pdf, staff notation<title>_numbered_notation.pdf, numbered (jianpu) notation
The source can be one of your Mureka songs, a YouTube link, or an audio file you uploaded with POST /files or POST /files/vocal. The audio must be 10 seconds to 10 minutes long.
A score costs 10 Mureka Gold. Scoring the same YouTube link again returned the earlier zip, with its original file names, and was not charged in our tests. The call waits for the result, which takes about 5 to 15 seconds, plus up to 15 seconds to fetch a YouTube link. Mureka recommends a solo song with clear vocals, a steady tempo and a consistent rhythm. Songs with tempo changes or frequent rhythm changes are not supported well.
Tutorial: How to Turn a Song or YouTube Link into Sheet Music with the Mureka API, one real score step by step with curl, the zip’s three files and how to open the MusicXML in MuseScore.
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
API tokenis required, see Setup useapi.net for details.
Request Body
{
"song_id": "user:777-mureka:12345678901234-song:33445566"
}
{
"account": "12345678901234",
"url": "https://www.youtube.com/watch?v=f_YMI6Rc9Ok"
}
-
accountis optional when only one account is configured or whensong_idis provided. However, if you have multiple accounts configured andsong_idis not provided, this parameter becomes required. song_idis optional, one of your songs.
Thesong_idvalue returned by one of the following endpoints:-
urlis optional, either a YouTube link or theurlof a file uploaded with POST /files or POST /files/vocal (ahttps://static-cos.mureka.ai/…link).
Maximum length: 2048 characters.Specify
song_idorurl, but not both. titleis optional, the name used for the files in the zip when the source is aurl. It defaults to the YouTube video title. Asong_idsource always uses the song’s own title.
Maximum length: 100 characters.
Responses
-
{ "title": "Hold My Hand", "url": "https://static-cos.mureka.ai/cos-prod/skm/music-staff/20261016/<id>.zip" } -
{ "error": "Please specify song_id or url but not both", "code": 400 } -
{ "error": "Wrong username/password combination.", "code": 401 } -
The account does not have enough Mureka Gold (10 Gold per score).
{ "error": "User balance is not enough to operate (6310)", "code": 412 } -
596 Account Error
Returned when the account has an error state preventing API calls.
{ "error": "Session refresh failed 2026-01-19T14:31:15.000Z, manual update required", "code": "REFRESH_FAILED" }Possible error codes:
ACCOUNT_ERROR- Account has a blocking errorREFRESH_FAILED- Automatic token refresh failedREFRESH_IN_PROGRESS- Token refresh already in progress, retry shortlySESSION_EXPIRED- Session expired and no auto-refresh availableCOOKIE_EXPIRED- Google cookie has expired
To resolve, update your account configuration via POST /accounts.
Model
{
title: string // file name used inside the zip
url: string // .zip with MusicXML, staff PDF and numbered-notation PDF
}
Examples
-
curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST https://api.useapi.net/v1/mureka/music/score \ -d '{"song_id": "…"}' -
const song_id = "user:777-mureka:12345678901234-song:33445566"; const apiUrl = `https://api.useapi.net/v1/mureka/music/score`; const api_token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${api_token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ song_id }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); -
import requests apiUrl = f"https://api.useapi.net/v1/mureka/music/score" api_token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {api_token}" } body = { "song_id": "user:777-mureka:12345678901234-song:33445566" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json())
Try It
A score takes about 5 to 15 seconds, plus up to 15 seconds to fetch a YouTube link.