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. 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.
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. It defaults to the song title or the YouTube video 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.