🎧 SaavnAPI — The Complete JioSaavn Async Toolkit
⚡ v2026.7.11 — Fast, fully-async Python library for JioSaavn with 70+ features: core APIs, downloads, AI analysis, smart discovery, sync with Spotify/YouTube, MCP/GraphQL/WebSocket servers, and more.
📦 Installation
# Base install
pip install -e .
# With extras
pip install -e ".[download]" # ID3 tagging (mutagen)
pip install -e ".[servers]" # MCP, GraphQL, WebSocket
pip install -e ".[sync]" # Spotify/YouTube sync
pip install -e ".[all]" # everything
pip install -e ".[dev]" # dev/test tools
Docs: open index.html in your browser, or visit saavn-api.netlify.app.
🚀 Quick Start
import asyncio
from JioSaavn import JioSaavnClient
async def main():
async with JioSaavnClient() as client:
results = await client.search_songs("Kesariya", limit=5)
for s in results:
print(s["name"], "—", s["primaryArtists"])
asyncio.run(main())
🧭 Feature Map (70+)
1. Core Music APIs (26)
| Category | Functions |
|---|---|
| Song | get_song, get_songs, get_lyrics, get_suggestions |
| Album | get_album, get_album_by_url |
| Artist | get_artist, get_artist_top_songs, get_artist_top_albums |
| Playlist | get_playlist, get_playlist_by_url |
| Search | search, search_songs, search_albums, search_artists, search_playlists, search_all |
| Discovery | get_trending, get_new_releases, get_top_searches, get_charts, get_featured_playlists, get_modules, get_radio |
| Resolve | get_song_by_url |
2. Download Helper Pro
download_with_lyrics(client, song_id, path, bitrate=320)— 320kbps + ID3 tags + embedded USLT lyricsDownloadManager— persistent SQLite-backed queue with retry, resume, and progress
from JioSaavn.Modules.DownloadPro import DownloadManager, download_with_lyrics
await download_with_lyrics(client, "song_id", "./out.mp3")
3. Language / Mood / Genre Browse
Supported: 16 languages · 12 moods · 14 genres (see JioSaavn/Modules/Browse.py-equivalent via search filters).
4. AI Analysis
analyze_playlist(songs)— stats, top artists, avg duration, language mixfind_duplicates(songs, threshold=0.9)— fuzzy duplicate finderinfer_mood(song)— mood classificationrecommend_from_history(client, history)— personalized recssimilar_songs_deep(client, seed_id, hops=2)— graph-walk similarity
5. Smart Playback
SmartQueue— infinite auto-refill queue based on current trackcrossfade_plan(current, next_, fade_seconds=6)— crossfade timing metadata
6. Sync & Backup
sync_spotify_playlist(client, url_or_id)— match Spotify → JioSaavnsync_youtube_playlist(client, url_or_id)— match YouTube → JioSaavnbackup_library(data, path, format="json"|"sqlite")/restore_library(path)
7. Advanced Search
fuzzy_search(client, query, min_score=0.5)— typo-tolerantsearch_by_lyrics(client, snippet)— find songs by lyric fragmentssearch_filters(...)— combine language/year/duration constraints
8. Discovery Pack
daily_mix(client, seed_songs, size=30)time_machine(client, year, limit=30)— by release yearregional_charts(client, language)artist_radio(client, artist_id, size=30)
9. Social / Metadata
get_song_credits(client, song_id)— full creditsget_release_calendar(client, days_back=30)compare_artists(client, id_a, id_b)
10. Webhooks
WebhookNotifier— push new releases / chart changes to a URL with HMAC signing
11. Dev Servers
| Server | Module | Purpose |
|---|---|---|
| MCP | JioSaavn.Servers.MCP |
Model Context Protocol server for LLMs |
| GraphQL | JioSaavn.Servers.GraphQL |
Strawberry-based GraphQL API |
| WebSocket | JioSaavn.Servers.WebSocket |
Now-playing hub for real-time apps |
12. Infrastructure
- Async LRU cache with TTL (
Utils/Cache) - Token-bucket rate limiter (
Utils/RateLimit) - Typed exception hierarchy (
Core/Errors) - Exponential backoff + auto-retry HTTP layer
- Full type hints (
py.typed) +TypedDictmodels - GitHub Actions CI (tests + lint)
🧪 Testing
Run the interactive tester covering all 70+ features:
python Testing.py # run all suites
python Testing.py --suite core # core APIs only
python Testing.py --suite mega # AI / discovery / smart queue
python Testing.py --suite servers # MCP / GraphQL / WebSocket smoke
python Testing.py --list # show all available tests
Last full run: 45 / 47 passing (2 geo-blocked in test region).
📚 Examples
Playlist analysis
from JioSaavn.Analysis.Playlist import analyze_playlist, find_duplicates
pl = await client.get_playlist("110858205")
stats = analyze_playlist(pl["songs"])
dupes = find_duplicates(pl["songs"])
Daily mix
from JioSaavn.Modules.Discovery import daily_mix
mix = await daily_mix(client, seed_songs=["5WXAlMNt", "9BjJPi9d"], size=30)
Spotify → JioSaavn
from JioSaavn.Modules.Sync import sync_spotify_playlist
result = await sync_spotify_playlist(client, "https://open.spotify.com/playlist/...")
MCP server (for Claude / LLMs)
python -m JioSaavn.Servers.MCP
📜 License
MIT — free for personal & educational use. Not affiliated with JioSaavn.
🙏 Credits
Maintained by the SaavnAPI community. PRs welcome — see CONTRIBUTING.md.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file saavnapi-2026.7.11.tar.gz.
File metadata
- Download URL: saavnapi-2026.7.11.tar.gz
- Upload date:
- Size: 32.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe4378ff7b4b2416788bf106f19e82b875d3782b526741695e066d043c3cdde9
|
|
| MD5 |
ded4de409da0217cb1fcfeaf3c5b28f2
|
|
| BLAKE2b-256 |
ec51e66a595655b9f7e26090317509b9480c0e55cd35dec25d6e259da9f950fd
|
File details
Details for the file saavnapi-2026.7.11-py3-none-any.whl.
File metadata
- Download URL: saavnapi-2026.7.11-py3-none-any.whl
- Upload date:
- Size: 49.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14c9f656b8992ede24eacd3fd11e71f2f20dce5f2ec036425c37807451eac2e0
|
|
| MD5 |
098383aecebf0898894163bcd0fb3fbf
|
|
| BLAKE2b-256 |
57262163a32513cc66c1801dfb2dc4d101e6ae511667754fe563e779b1f65085
|