Recommendation API for Music and Podcast Apps
A tired commuter with half an hour does not care whether the answer is an album or a podcast. TasteRay ranks both in one request and says why. It is for choosing what to play, and queueing stays with you.
TasteRay is a recommendation API for music and podcast apps. You send what a listener says and up to ten albums, shows or episodes from your catalog, and one request returns them ranked with a written reason. It suits a request in words across formats. Playback, queues and track-level sequencing remain in your app.
Listening apps are strong at "more like what you just played" and weaker when someone says what the next half hour is for. A commute, a run and a Sunday morning call for different answers from the same person, and that request can cross from music into speech. This page shows one, with two things in it your engineers need to handle.
The commute home, albums and podcasts in one list
We sent five albums and five podcasts, with a listener who is tired, wants calm for about 30 minutes, and does not want a news show. The daily news podcast stayed out, as did the multi-hour history show and the thrash metal. A design podcast, an ambient album and a hushed folk album came back, so one request crossed formats.
{
"vertical": "music and podcasts",
"context": {
"profile": "Commuting home after a tiring day, wants something calm that is not a news show.",
"preferences": [
"calm",
"about 30 minutes"
]
},
"items": [
{"id": "a7", "name": "Brian Eno — Music for Airports", "description": "Ambient album meant to be unobtrusive.", "metadata": {"type": "album"}},
{"id": "a4", "name": "99% Invisible", "description": "Podcast: stories about design and the built world, ~30 min.", "metadata": {"type": "podcast"}},
// ...and 8 more: The Daily, Hardcore History, Master of Puppets and others
],
"options": {"count": 3}
}meta.processing_time_ms 1,611. The model's sentences are verbatim.99% Invisible
92 out of 100, taste_match_score
You're looking for a mental exhale after a tiring day, not another headline. This podcast turns the ordinary world into a fascinating story that lets your brain rest while still feeling engaged.
- You explicitly asked for no news. 99% Invisible is a 'slow show' that focuses on the hidden design of everyday objects. It’s a mental break from the 24-hour news cycle that respects your need for peace.
- It satisfies the need for 'calm' by offering a steady, well-paced narrative. You don't have to work to understand it; you just listen and absorb.
Music for Airports — Brian Eno
90 out of 100, taste_match_score
This is the sonic equivalent of a deep breath. It’s designed specifically to be in the background, creating a calm atmosphere that helps you decompress without demanding your attention.
- You want something calm. This is the definitive ambient album, created to soothe the nerves of travelers in waiting areas. It’s the perfect soundtrack for a tiring commute.
Bon Iver — For Emma, Forever Ago
85 out of 100, taste_match_score
You need something that feels human and warm, not just background noise. This album’s intimate, cabin-recorded sound acts as a gentle emotional anchor, helping you transition from the external world to your personal space.
- You’re tired and need calm. The 'hushed' production style of this album is inherently soothing. The whispery vocals and sparse instrumentation create a cozy, intimate vibe that feels like a hug.
Fields shown: item.name, metadata.taste_match_score, explanation.why_match, explanation.key_factors.
Two things the capture teaches
First, in this earlier capture the name changed. We sent "Brian Eno — Music for Airports", and the result came back as "Music for Airports — Brian Eno". The API now returns your own name and id on each item, so match on item.id and the reordering no longer matters. Fewer results than you asked for can come back, because anything outside your list is dropped.
Second, length needs to come from you. We sent no runtime for that album, and one key factor stated a length in minutes and argued from it. We left that sentence out, along with a claim about the album being proven for stress reduction. Send runtime and show it from your own data.
const byId = new Map(items.map((i) => [i.id, i]));
const matched = response.recommendations
.map((r) => ({ item: byId.get(r.item.id), reason: r.explanation }))
.filter((r) => r.item);What changes in a listening app
- Choose the unit
- A request ranks ten things. In a catalog of millions, decide whether those are albums, artists, shows, episodes or your own playlists, then preselect by tags or embeddings you already hold. Our capture used albums and shows.
- It picks, and you play
- The API returns a ranked choice and a reason, with no audio, queue or crossfade. Starting playback and building the queue from a pick remain your product's job.
- Licensing by territory
- Filter candidates to what a listener can stream where they are. The API only returns items from the list you send, and it knows nothing about your deals.
- Context you already have
- Time of day, device and session length can go into
context.profileas a sentence. If a listener has not typed anything, a preset such as "Commute home, calm" is one cached request. - A few seconds is a long time in audio
- A listener expects sound immediately. Plan for a few seconds per response, with outliers, returned in
meta.processing_time_ms. Precompute by situation, and keep live requests for typed ones with something already playing.
Where else it fits, and where it does not
On an album or show page, ForMe answers "Is this for me?" with a button. Its medium is a free string, and its own docs list album and podcast.
For "next track" on a playing queue, or a recommendation on every row, a model trained on your listening events answers faster and more cheaply. Read build vs buy, or compare Recombee, whose site lists music and podcasts among its industries.
Sources and further reading
FAQs about Recommendation API for Music and Podcast Apps
Can one request recommend both albums and podcasts?
Yes. Items can be anything you can name and describe, and vertical is a free string. In a capture on 5 November 2026 we sent five albums and five podcasts with one sentence from a tired commuter, and both a podcast and two albums came back, each with a written reason.
Does TasteRay generate playlists or next-track queues?
No. TasteRay ranks up to ten items per request and explains each one, and it knows nothing about audio, transitions or your queue. It suits choosing what to play next from a stated need. Building a playlist from that pick, and picking the next track during playback, stay in your app.
How do we match TasteRay results to tracks and shows in our catalog?
Match on `item.id`, which the response returns exactly as you sent it along with your own `name`. In an earlier capture an album name came back with its artist and title swapped, which is why matching on id is safer than on name. Fewer results than you requested can come back, since anything not in your list is dropped. Take all metadata, including runtime, from your own catalog.
