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. 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
Request Body
{
    "song_id": "user:777-mureka:12345678901234-song:33445566"
}
{
    "account": "12345678901234",
    "url": "https://www.youtube.com/watch?v=f_YMI6Rc9Ok"
}
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.