Turn a song into sheet music

October 16, 2026

Table of contents

  1. Request Headers
  2. Request Body
  3. Responses
  4. Model
  5. Examples
  6. Try It

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
Request Body
{
    "song_id": "user:777-mureka:12345678901234-song:33445566"
}
{
    "account": "12345678901234",
    "url": "https://www.youtube.com/watch?v=f_YMI6Rc9Ok"
}
  • account is optional when only one account is configured or when song_id is provided. However, if you have multiple accounts configured and song_id is not provided, this parameter becomes required.

  • song_id is optional, one of your songs.
    The song_id value returned by one of the following endpoints:
  • url is optional, either a YouTube link or the url of a file uploaded with POST /files or POST /files/vocal (a https://static-cos.mureka.ai/… link).
    Maximum length: 2048 characters.

    Specify song_id or url, but not both.

  • title is optional, the name used for the files in the zip when the source is a url. It defaults to the YouTube video title. A song_id source always uses the song’s own title.
    Maximum length: 100 characters.
Responses
  • 200 OK

    {
        "title": "Hold My Hand",
        "url": "https://static-cos.mureka.ai/cos-prod/skm/music-staff/20261016/<id>.zip"
    }
    
  • 400 Bad Request

    {
      "error": "Please specify song_id or url but not both",
      "code": 400
    }
    
  • 401 Unauthorized

    {
      "error": "Wrong username/password combination.",
      "code": 401
    }
    
  • 412 Precondition Failed

    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 error
    • REFRESH_FAILED - Automatic token refresh failed
    • REFRESH_IN_PROGRESS - Token refresh already in progress, retry shortly
    • SESSION_EXPIRED - Session expired and no auto-refresh available
    • COOKIE_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.