BYTETOOLS

Openwhyd API

Free curated playlist API with no key: human-picked tracks by genre, each linking to YouTube, SoundCloud or Bandcamp, with repost and like counts. Tested example included.

No API key requiredHTTPSFree tier

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

What is the Openwhyd API?

Openwhyd is an open-source music curation platform whose feeds are readable as JSON with no API key. Requesting a genre's hot feed returns tracks curated by real people, each with the source platform's identifier and engagement counts.

Openwhyd does not host audio. It is a layer of human curation over YouTube, SoundCloud, Bandcamp and Vimeo — people collect tracks into playlists, and the platform ranks what is resonating. That makes the data qualitatively different from an algorithmic chart: what you get is what listeners deliberately chose to save and share.

The `eId` field is where the cross-platform design shows. It encodes both the source and the identifier in one string — `/yt/v_tS20htL1w` means YouTube with that video id — so a client can route playback to the right embed without a separate lookup. Paging is unusual too: rather than page numbers, `hasMore.skip` returns the offset for the next request, which you feed back as `skip`. Adding `format=json` to any feed path is what switches it from HTML to the API response.

Quick facts

Base URL
https://openwhyd.org
Authentication
No API key for public feeds and playlists. A session cookie is needed only to post or modify tracks.
Rate limit
No published limit. It is a small community-run open-source project — keep request volumes low.
Pricing
Free. Openwhyd is open source and non-commercial.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the Openwhyd 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 the hot tracks for a genre

GET https://openwhyd.org/hot/electro?format=json&limit=1

curl
curl 'https://openwhyd.org/hot/electro?format=json&limit=1'
JavaScript (fetch)
const res = await fetch("https://openwhyd.org/hot/electro?format=json&limit=1");
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://openwhyd.org/hot/electro?format=json&limit=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "hasMore": {
    "skip": 1
  },
  "tracks": [
    {
      "_id": "6a7f6fbf394b6d8102cbdadc",
      "eId": "/yt/v_tS20htL1w",
      "name": " Lip Lift - battlefield",
      "img": "https://i.ytimg.com/vi/v_tS20htL1w/hqdefault.jpg",
      "uId": "5911f8e098267ba4b34b8424",
      "uNm": "ROBIT",
      "pl": {
        "id": 329,
        "name": "Indie, pop, alternative, new wave 298"
      },
      "pId": "6a7f6fbf394b6d8102cbdadc",
      "nbR": 5,
      "nbL": 3,
      "score": 8,
      "trackUrl": "//youtube.com/watch?v=v_tS20htL1w"
    }
  ]
}

Parameters

ParameterTypeRequiredDescription
formatqueryRequiredSet to `json` to get the API response rather than the HTML page. Without it you get a web page. json
(genre)pathOptionalGenre slug appended to `/hot`, such as `electro`, `rock` or `hiphop`. Omit for the overall feed. electro
limitqueryOptionalHow many tracks to return. 1
skipqueryOptionalOffset for the next page. Take the value from `hasMore.skip` on the previous response. 1

Response fields

tracksarray
The curated tracks, ranked by score.
tracks[].namestring
Track title as entered by the curator. Formatting is inconsistent — leading spaces and mixed conventions are common.
tracks[].eIdstring
External identifier encoding source and id together, as in `/yt/VIDEOID` for YouTube. Parse this to choose the right player.
tracks[].trackUrlstring
Protocol-relative URL to the source, beginning `//`. Prefix `https:` before using it.
tracks[].imgstring
Thumbnail from the source platform.
tracks[].uId / uNmstring
Id and display name of the curator who added the track.
tracks[].plobject
The playlist it belongs to, with the playlist's own `id` and `name`.
tracks[].nbR / nbLinteger
Repost and like counts.
tracks[].scoreinteger
Ranking score combining the engagement counters — what the hot feed sorts on.
hasMore.skipinteger
Offset to send as `skip` for the next page. Absent when there is nothing more.

What you can build with the Openwhyd API

  • Surface human-curated music by genre instead of algorithmic recommendations
  • Build a cross-platform player that routes to YouTube or SoundCloud from one feed
  • Track which curators are driving discovery in a genre
  • Seed a radio-style queue from community picks

Common errors and how to fix them

HTML instead of JSON

The `format=json` parameter was omitted.

Fix: It is required on every feed path. Without it the same URL serves the web page.

Broken thumbnail or dead link

Tracks point at third-party platforms where content gets removed.

Fix: Handle 404s on `trackUrl` and `img` gracefully — link rot is inherent to a curation layer.

Protocol-relative URL fails

`trackUrl` starts with `//` rather than a scheme.

Fix: Prefix `https:` before using it outside a browser context.

Paging repeats the same tracks

Page numbers do not work here.

Fix: Use `hasMore.skip` from the previous response as your next `skip` value.

Openwhyd API — frequently asked questions

Is the Openwhyd API free?

Yes, free with no key for reading public feeds and playlists. It is an open-source, non-commercial project, so keep request volumes considerate.

Does Openwhyd host the music?

No. It is a curation layer over YouTube, SoundCloud, Bandcamp and Vimeo. The `eId` field tells you which platform a track lives on so you can embed the right player.

How do I read the eId field?

It is a path encoding source and identifier together — `/yt/` for YouTube, `/sc/` for SoundCloud, followed by that platform's id. Split on the slashes to route playback.

How does paging work?

Not by page number. Each response carries `hasMore.skip`, and you pass that value back as the `skip` parameter to fetch the next batch.

Tools that pair with this API

Openwhyd 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.