API Docs

Using the FMA for Music Information Retrieval (MIR) or Other Research

Due to cost and bandwidth limitations, the FMA is unable to directly support researchers wishing to use its content for analysis. If you are interested in using the FMA for Machine Learning, Music Information Retrieval, or other research, please see this data set prepared by Michaël Defferard et al. at EPFL.

Please note that we are no longer granting API keys.


Free Music Archive provides a basic API to access artist, album, track, genre and curator data, in XML, JSON or JSONP format.

You can access all the data by formatting URLs like so:


For example:


...will return a list of FMA curators in XML format.

Special APIs

We have a special API for performing a search over artists, albums, and track names; here is an example:


Which returns:

    "page_cache_key": "anonuser_pagecache_\/api\/trackSearch?q=deerhoof&limit=10",
    "page_title": "Free Music Archive",
    "aRows": [
        "[Deerhoof] Panda Panda Panda (7172)",
        "[Deerhoof] All Rise (7173)",
        "[Deerhoof] Basket Ball Get Your Groove Back (Live @ KEXP) (8466)",
        "[Dr. David Suendermann] Fresh Born (Deerhoof Cover) (9641)",
        "[Keith Kawaii] Fresh Born (Deerhoof Cover) (9640)",
        "[Deerhoof] Deerhoof at ATP NY (20586)",
        "[Deerhoof] Come See The Duck (23189)",
        "[Matt LeGroulx] New Sneakers (Deerhoof) (84040)"

The number in parentheses is the track ID and the string in the brackets is the artist name.

We make the list of recently added tracks available at:


And featured tracks and mixes:



Certain parameters can be passed via query string to your request to sort, paginate, and filter the resulting dataset.

Pagination & Sorting

All results are paginated and set to a limit of 20 per page by default. This can be set directly via a 'limit' query string parameter, with a maximum allowed value of 50, like so:


You can also page a 'page' query string parameter to navigate to specific result pages of the dataset:


Each dataset indicates the total number of records ('total'), the total number of pages ('pages'), the current page ('page'), and the current record limit per page ('limit').

Each dataset can also be sorted by any field that is returned, using 'sort_by' and 'sort_dir' (sort direction) query string parameters. The 'sort_by' parameter can be any field returned in the set (listed below) and 'sort_dir' can be set to 'asc' (ascending) or 'desc' (descending).


Certain datasets can also take extra query string parameters to filter results. For example, albums can be filtered by an artist's 'artist_id' value, like so:


All records accessible via the api have corresponding "handles", which are unique string identifiers for each record. You can can find handles at the end of the URLs throughout the site, and use them instead of ids. For instance, WFMU's curator page is here:


'wfmu' is the "curator_handle", which you can use to query all of WFMU's albums:


Specific filter options are listed per dataset below.

  • Curators

    • curator_id
    • curator_handle
    • curator_url
    • curator_site_url
    • curator_image_file
    • curator_type
    • curator_title
    • curator_tagline
    • curator_bio
    • curator_site_url
    • curator_favorites
    • curator_comments
    • curator_playlists
    • curator_date_created
  • Genres

    • genre_id
    • genre_parent_id
    • genre_title
    • genre_handle
    • genre_color
  • Artists

    • artist_id
    • artist_handle
    • artist_url
    • artist_name
    • artist_bio
    • artist_members
    • artist_website
    • artist_wikipedia_page
    • artist_donation_url
    • artist_contact
    • artist_location
    • artist_active_year_begin
    • artist_active_year_end
    • artist_related_projects
    • artist_associated_labels
    • artist_comments
    • artist_favorites
    • artist_date_created
    • artist_flattr_name
    • artist_paypal_name
    • artist_latitude
    • artist_longitude
    • artist_image_file
    • artist_images
  • Albums

    • album_id
    • album_title
    • album_handle
    • album_url
    • album_type
    • artist_name
    • artist_url
    • album_producer
    • album_engineer
    • album_information
    • album_date_released
    • album_comments
    • album_favorites
    • album_tracks
    • album_listens
    • album_date_created
    • album_image_file
    • album_images
    • album_handle

      (string) include album with album handle

    • artist_id

      (integer) include albums with artist id

    • artist_handle

      (string) include albums with artist handle

    • genre_handle

      (string) include albums with genre handle

    • curator_handle

      (string) include albums with curator handle

    • album_url

      (string) include albums with album url

    • album_title

      (string) include albums with album title

    • alblum_handle

      (string) include albums with album handle

  • Tracks

    • track_id
    • track_title
    • track_url
    • track_image_file
    • artist_id
    • artist_name
    • artist_url
    • artist_website
    • album_id
    • album_title
    • album_url
    • license_title
    • license_url
    • track_language_code
    • track_duration
    • track_number
    • track_disc_number
    • track_explicit
    • track_explicit_notes
    • track_copyright_c
    • track_copyright_p
    • track_composer
    • track_lyricist
    • track_publisher
    • track_instrumental
    • track_information
    • track_date_recorded
    • track_comments
    • track_favorites
    • track_listens
    • track_interest
    • track_bit_rate
    • track_date_created
    • track_file
    • license_image_file
    • license_image_file_large
    • license_parent_id
    • track_id

      (integer) include only track with track id

    • artist_id

      (integer) include tracks with artist id

    • album_id

      (integer) include tracks with album id

    • genre_id

      (integer) include tracks with genre id

    • genre_handle

      (string) include tracks with genre handle

    • artist_handle

      (string) include tracks with artist handle

    • curator_handle

      (string) include tracks with curator handle

    • album_url

      (string) include tracks with album url

    • album_title

      (string) include tracks with album title

    • alblum_handle

      (string) include tracks with album handle

    • commercial

      (boolean) include tracks where permitted use for commercial purposes

    • remix

      (boolean) include tracks where permitted to remix

    • podcast

      (boolean) include tracks where permitted to add to podcast

    • video

      (boolean) include tracks where permitted to sync with video

    • added_week

      (boolean) include tracks added in the last week

    • added_month

      (boolean) include tracks added in the last month

    • only_instrumental

      (boolean) include only instrumental tracks

    • only_radio_safe

      (boolean) include only radio safe tracks

    • min_duration

      (time) include tracks at leasts as long as (must be in 'HH:MM:SS' format)

    • max_duration

      (time) include tracks no longer than (must be in 'HH:MM:SS' format)

Downloading Tracks

To download a track, append '/download' to 'track_url' as returned by the '/get/tracks.xml' or '/get/tracks.json' endpoints.

Friendly Usage

Make an effort to avoid excessive queries. Cache responses to avoid duplicating queries. If you expect a large volume of traffic (more than 10000 per day), please contact us (dev@freemusicarchive.org) to discuss.