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.
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 'https://openwhyd.org/hot/electro?format=json&limit=1'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);import requests
res = requests.get("https://openwhyd.org/hot/electro?format=json&limit=1", timeout=20)
res.raise_for_status()
print(res.json()){
"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
| Parameter | Type | Required | Description |
|---|---|---|---|
format | query | Required | Set to `json` to get the API response rather than the HTML page. Without it you get a web page. json |
(genre) | path | Optional | Genre slug appended to `/hot`, such as `electro`, `rock` or `hiphop`. Omit for the overall feed. electro |
limit | query | Optional | How many tracks to return. 1 |
skip | query | Optional | Offset 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
Random List Picker
Paste a list and pick random winners without repeats, or shuffle the whole list. A fair random name and item picker for giveaways, draws and raffles.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
URL Parser
Parse a URL into protocol, host, port, path, query parameters and hash. Handles relative URLs with a base and shows query params in a table. Free and private.
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.