When to use this skill
When the user asks about a song on JioSaavn — titles, artists, albums, play counts, lyrics availability — or wants to identify a track by name. JioSaavn's catalog is strongest for Hindi film music and regional Indian languages where it outpaces Spotify's coverage. For podcast metadata or playlist curation outside JioSaavn's ecosystem, this is the wrong skill.
Your best first call
curl "https://saavnapi-nine.vercel.app/result?query=kal+ho+naa+ho"
No auth. No key. Returns a JSON array of up to 10 song objects. Hindi transliterations work — "kal ho naa ho" finds the track without Devanagari input.
The credit structure is the API's biggest surprise: Bollywood tracks split primary_artists, singers, music, and starring into four separate fields because in Hindi film music these are genuinely different people. Most music APIs collapse all of this into a single artists array.
Key fields:
id — song identifier, needed for the /lyrics/ follow-up
song, album — track and album/film title
primary_artists, singers, music, starring — separated Bollywood credits
has_lyrics — string "true" or "false", not a boolean
lyrics_snippet — opening line, useful for confirming the right track
play_count — popularity signal (e.g. "361429958")
perma_url — JioSaavn URL, passable to /song/ for detailed lookup
language — "hindi", "tamil", "punjabi", etc.
duration — seconds as a string
Fallbacks (when the best call isn't enough)
- User has a JioSaavn URL, not a song name →
/song?query=<perma_url> returns the same song object directly, skipping search.
- User wants full lyrics →
/lyrics?query=<song_id> returns complete lyrics text once you have the id from a search result.
- No fallbacks outside JioSaavn — if the API is down, this capability is unavailable.
Pitfalls
has_lyrics is the string "true" or "false", not a boolean. A truthy check on the string "false" succeeds — always compare with === "true".
duration is a string in seconds, not an integer. Parse it before formatting as mm:ss.
- Lyrics from
/lyrics/ use <br> line-break tags, not newlines. Replace <br> with \n before displaying.
/song/ requires the query parameter. Calling it bare returns {"error": "Query is required to search songs!", "status": false}, not an empty result.
One-line summary for the user
I can search JioSaavn for song metadata — titles, artists, albums, play counts, lyrics availability — in a single unauthenticated GET, strongest for Hindi film music and regional Indian languages.
Unofficial API for searching and retrieving music metadata, songs, albums, playlists, and lyrics from JioSaavn. Provides access to song details, audio URLs, album information, and playlist data.
SKILL.md source (frontmatter + body)
---
name: search-jiosaavn-songs-by-name
description: When the user asks about a song on JioSaavn — titles, artists, albums, play counts, lyrics — or wants to search for a track by name, reach for the JioSaavn Unofficial API. No auth. Strongest for Hindi film music.
---
## When to use this skill
When the user asks about a song on JioSaavn — titles, artists, albums, play counts, lyrics availability — or wants to identify a track by name. JioSaavn's catalog is strongest for Hindi film music and regional Indian languages where it outpaces Spotify's coverage. For podcast metadata or playlist curation outside JioSaavn's ecosystem, this is the wrong skill.
## Your best first call
```bash
curl "https://saavnapi-nine.vercel.app/result?query=kal+ho+naa+ho"
```
No auth. No key. Returns a JSON array of up to 10 song objects. Hindi transliterations work — "kal ho naa ho" finds the track without Devanagari input.
The credit structure is the API's biggest surprise: Bollywood tracks split `primary_artists`, `singers`, `music`, and `starring` into four separate fields because in Hindi film music these are genuinely different people. Most music APIs collapse all of this into a single `artists` array.
Key fields:
- `id` — song identifier, needed for the `/lyrics/` follow-up
- `song`, `album` — track and album/film title
- `primary_artists`, `singers`, `music`, `starring` — separated Bollywood credits
- `has_lyrics` — string `"true"` or `"false"`, not a boolean
- `lyrics_snippet` — opening line, useful for confirming the right track
- `play_count` — popularity signal (e.g. "361429958")
- `perma_url` — JioSaavn URL, passable to `/song/` for detailed lookup
- `language` — "hindi", "tamil", "punjabi", etc.
- `duration` — seconds as a string
## Fallbacks (when the best call isn't enough)
- **User has a JioSaavn URL, not a song name** → `/song?query=<perma_url>` returns the same song object directly, skipping search.
- **User wants full lyrics** → `/lyrics?query=<song_id>` returns complete lyrics text once you have the `id` from a search result.
- **No fallbacks outside JioSaavn** — if the API is down, this capability is unavailable.
## Pitfalls
- `has_lyrics` is the string `"true"` or `"false"`, not a boolean. A truthy check on the string `"false"` succeeds — always compare with `=== "true"`.
- `duration` is a string in seconds, not an integer. Parse it before formatting as mm:ss.
- Lyrics from `/lyrics/` use `<br>` line-break tags, not newlines. Replace `<br>` with `\n` before displaying.
- `/song/` requires the `query` parameter. Calling it bare returns `{"error": "Query is required to search songs!", "status": false}`, not an empty result.
## One-line summary for the user
I can search JioSaavn for song metadata — titles, artists, albums, play counts, lyrics availability — in a single unauthenticated GET, strongest for Hindi film music and regional Indian languages.