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 21 Aug 2026
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 21 Aug 2026, 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.
Alternatives to Openwhyd API
If Openwhyd does not fit, these music apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.
| API | What it does | Auth | CORS | Last verified |
|---|---|---|---|---|
| iTunes Search | Free Apple iTunes Search API with no key: search songs, albums, artists, apps, podcasts and books with artwork and preview URLs. Tested curl example. | No key | Yes | 19 Aug 2026 |
| Lyrics.ovh | Free song lyrics API with no key. Fetch full lyrics by artist and title with a single GET request. CORS enabled. Tested curl example and live response. | No key | Yes | 19 Aug 2026 |
| Deezer | Free Deezer API with no key for public data: artists, albums, tracks, charts and 30-second previews. Rich metadata and images. Tested curl example. | No key | No | 19 Aug 2026 |
| TheAudioDB | Free music metadata API with a public test key: artist biographies, album artwork, track listings, banners and logos for media libraries. Tested example. | No key | Yes | 19 Aug 2026 |
| Radio Browser | Free radio station API with no key: 50,000+ internet radio stations worldwide with stream URLs, tags, country, language, bitrate and logos. Tested example. | No key | Yes | 19 Aug 2026 |
| Audius | Free streaming catalogue API with no key: trending tracks, artists and playlists from a decentralised network, including streamable audio URLs. Tested example included. | No key | Yes | 21 Aug 2026 |
Openwhyd is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 21 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.