BYTETOOLS

Audius API

Free streaming catalogue API with no key: trending tracks, artists and playlists from a decentralised network, including streamable audio URLs. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Audius API?

Audius exposes its entire catalogue through a public API needing no key — only a self-declared `app_name` string. Trending tracks come back with full metadata, artwork, play counts and a streamable audio endpoint per track.

What separates Audius from the other catalogue APIs is that it will actually give you the audio. Most services hand over metadata and stop at a thirty-second preview behind a licensing wall; Audius hosts the recordings itself under artist-granted terms, so `/v1/tracks/{id}/stream` returns playable audio for anything marked `is_streamable`. That makes it the rare music API you can build a working player on.

The one piece of setup that trips people up is the host. Audius runs as a network of independent discovery nodes rather than a single API server, and the canonical way to start is to fetch `https://api.audius.co`, which returns a list of healthy node hostnames to pick from. The example here calls one node directly for reproducibility, but a production client should select from that list and fail over when a node goes quiet. The `app_name` parameter is required on every request — it is a courtesy identifier you invent yourself, not a key to register for.

Quick facts

Base URL
https://discoveryprovider.audius.co/v1
Authentication
No API key or account. Every request must carry an `app_name` query parameter, which is a string you choose yourself so the network can attribute traffic.
Rate limit
Set per discovery node rather than centrally. Rotate across nodes from the api.audius.co list for anything sustained.
Pricing
Free. The protocol is open and the nodes are community-operated.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Audius API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch currently trending tracks

GET https://discoveryprovider.audius.co/v1/tracks/trending?app_name=ByteToolsDirectory

curl
curl 'https://discoveryprovider.audius.co/v1/tracks/trending?app_name=ByteToolsDirectory'
JavaScript (fetch)
const res = await fetch("https://discoveryprovider.audius.co/v1/tracks/trending?app_name=ByteToolsDirectory");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://discoveryprovider.audius.co/v1/tracks/trending?app_name=ByteToolsDirectory", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "data": [
    {
      "track_id": 1561303129,
      "description": "Like the track? Click the [↻ Repost] button!\n\nNEW ONE FOR THA CULTURE\nSHOUTOUT STUNNA POSSE X ARTIST INFLUENCE\n\nM?STIC\nwww.facebook.com/soundsbymystic\nwww.twitter.com/soundsbymystic\nwww.instagram.com/soundsbymystic\nwww.facebook.com/badmouthrecs\nwww.badmouthmgmt.com\n\n@STUNNAPOSSECULT\n\nPATREON:\nwww.patreon.com/soundsbymystic\n\nSAMPLE PACKS:\nwww.stunnaposse.gumroad.com",
      "genre": "Electronic",
      "id": "qb1AW4E",
      "track_cid": "baeaaaiqseddqcd2ki2msxebm32fs2vkoyp5sr6op575g7beaoqvri4lvasd7y",
      "preview_cid": null,
      "orig_file_cid": "baeaaaiqsed5oflfvh3t6dy4o74uo2biz7lchxcmcxqctpuxz73y33lwch2doe",
      "orig_filename": "M?STIC & SPECKZ - PAIN KILLER (MASTERED).wav",
      "is_original_available": false,
      "mood": "Gritty",
      "release_date": "2026-08-14T19:22:19Z",
      "repost_count": 31,
      "favorite_count": 38,
      "comment_count": 6,
      "tags": "mstic,speckz,painkiller,artistinfluence",
      "title": "M?STIC & SPECKZ - PAIN KILLER ",
      "slug": "mstic-speckz-pain-killer",
      "duration": 195,
      "is_downloadable": false,
      "play_count": 464,
      "ddex_app": null,
      "pinned_comment_id": null,
      "playlists_containing_track": [
        1795117483,
        1078557990
      ],
      "playlists_previously_containing_track": {},
      "album_backlink": null,
      "blocknumber": 120712437,
      "create_date": null,
      "created_at": "2026-08-14T19:22:19.170262Z",
      "cover_art_sizes": "baeaaaiqsebjzyngiazcgayukx47wvt3ydu7ekpq

Parameters

ParameterTypeRequiredDescription
app_namequeryRequiredIdentifier for your application. Any descriptive string; there is nothing to register. ByteToolsDirectory
limitqueryOptionalHow many tracks to return. 10
genrequeryOptionalRestrict trending to one genre, such as `Electronic` or `Hip-Hop`. Electronic
timequeryOptionalTrending window: `week`, `month`, `year` or `allTime`. week

Response fields

data[].idstring
Short base-encoded track id used everywhere else in the API — this, not `track_id`, is what the stream and detail endpoints take.
data[].title / descriptionstring
Track title and the artist's own description, which is free text and frequently long.
data[].genre / moodstring
Artist-declared genre and mood tags.
data[].durationinteger
Length in seconds.
data[].play_count / favorite_count / repost_count / comment_countinteger
Engagement counters, which are what the trending ranking is built on.
data[].is_streamable / is_downloadableboolean
Whether audio can be streamed or downloaded. Check `is_streamable` before building a player URL.
data[].bpm / musical_keyinteger / string
Tempo and key, where the uploader supplied or the network analysed them.
data[].artworkobject
Cover art at several square sizes, keyed by pixel dimensions.
data[].userobject
The uploading artist — handle, display name, follower count and profile art.
data[].permalinkstring
Path on audius.co for the human-facing page.
data[].release_date / created_at / updated_atstring
Timestamps. `release_date` is artist-declared and can differ sharply from `created_at`.

What you can build with the Audius API

  • Build a working music player with genuinely streamable audio
  • Surface trending independent tracks by genre in a discovery app
  • Analyse engagement patterns across a decentralised music network
  • Pull BPM and key metadata for a DJ or set-planning tool

Common errors and how to fix them

400 missing app_name

The parameter is mandatory on every request.

Fix: Append `app_name=YourApp`. It needs no registration but the request is rejected without it.

Node returns 5xx or hangs

Discovery nodes are independently operated and go down individually.

Fix: Fetch the node list from `https://api.audius.co` and fail over to another host rather than hard-coding one.

Stream URL 404s

The track is not streamable, or you used `track_id` instead of `id`.

Fix: Check `is_streamable` first, and pass the short string `id` — the numeric `track_id` is an internal value.

Descriptions full of promotional text

`description` is uploader-controlled free text.

Fix: Truncate it for display and escape it. Some entries run to hundreds of characters of social links.

Audius API — frequently asked questions

Does the Audius API need an API key?

No key and no account. It does require an `app_name` query parameter on every request, but that is a string you invent yourself so the network can attribute traffic.

Can I actually stream the audio?

Yes, which is unusual. Audius hosts the recordings under artist-granted terms, so `/v1/tracks/{id}/stream` serves playable audio for any track flagged `is_streamable`.

Which host should I call?

Fetch `https://api.audius.co` for a list of healthy discovery nodes and pick one, rather than pinning a single hostname. Nodes are independently run and go down individually.

Why are there two different track ids?

`id` is the short base-encoded identifier the API uses in paths and is what you should pass everywhere. `track_id` is an internal numeric value that appears in responses but is not the one endpoints accept.

Tools that pair with this API

Audius is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.