Query parameter
Simplest option for browsers and curl:
MeowApi resolves playable audio streams from multiple music providers through a single unified REST interface. Every response is same-origin, signed, and ready to play.
Every request requires an API key. Create one in the admin panel under Admin → API keys, then authenticate using any of the following methods.
Simplest option for browsers and curl:
Send the key as a request header:
Standard Authorization header:
All API routes live under /api and accept the same authentication. Parameters are passed as query strings.
Returns uptime plus a per-provider availability map. Use it for load-balancer checks.
Lists every platform slug with its supported operations (search, albums, artists, playlists, stream) and the exact quality IDs accepted by /api/track — including MP4 video tiers. Build UIs from this instead of hard-coding values.
| Parameter | Description |
|---|---|
platform | tidal · deezer · gaana · jiosaavn · spotify · youtube_music · youtube · soundcloud · apple_music · amazon_music · qobuz |
query | Search text (required) |
type | track default · artist · album · playlist — providers that cannot filter server-side label results by type where possible |
limit | 1–100 (Gaana caps at 50). Default 10 |
auth | auto default uses a connected account when one exists, otherwise public access · session forces an account · public forbids accounts |
/api/resolve is an alias. Give it any supported URL — short links such as link.deezer.com, deezer.page.link and youtu.be are expanded automatically. Album and playlist responses keep provider ordering and include per-track qualities.
| Parameter | Description |
|---|---|
url | Provider URL (or use type+id for known IDs) |
type | Optional override: track · album · artist · playlist |
id | Optional provider ID when you have no URL |
limit | Caps resolved collection size (default 100) |
account | Named connected account, default default |
Same parameters as /api/resource, shaped as {results:[…]} for OneGrab-compatible clients.
Returns stream metadata including cdnurl — a signed, same-origin URL valid for 24 hours that plays directly in any client. Passing an album, playlist or artist URL streams the first track of that collection. Gaana answers with either a progressive MP4 or a same-origin HLS proxy manifest depending on availability.
| Parameter | Description |
|---|---|
url | Track (or collection) URL — platform auto-detected from the host |
platform | Optional explicit slug; required only when passing bare ids |
quality | Platform-specific tier — see table below |
video | true requests the music-video render as progressive MP4 where the platform provides videos (YouTube, YouTube Music, SoundCloud). The response may include extra.separate_audio_url for muxing |
auth / account | Credential selection, identical semantics to /api/resource |
| Platform | Audio qualities | Video (video=true) |
|---|---|---|
tidal | low AAC 96k · high AAC 320k · lossless FLAC 16/44 · hires FLAC 24/192* | — |
qobuz | 5 MP3 320 · 6 FLAC CD · 7 Hi-Res 24/96+ · 27 max available | — |
deezer | 128 · 320 · lossless FLAC (subscription) | — |
spotify | low 96k · high 160k · 320 · lossless FLAC* | — |
gaana | low 16k · medium 64k · high 128k · very_high 320k | — |
jiosaavn | 12 · 48 · 96 · 160 · 320 AAC | — |
soundcloud | 128 Opus · 256 AAC (Go+) | MP4 where the upload has artwork video |
youtube / youtube_music | mp3_64…mp3_320 · m4a_320 · opus_320 · source | video_720 · video_1080 · video_2160 H.264/VP9 MP4 |
apple_music | aac 256k web playback | — |
amazon_music | SD · HD · UHD† · ATMOS · RA360 | — |
* Tidal Hi-Res and Spotify lossless need an active paid subscription on the connected account. † Amazon UHD/ATMOS/RA360 need Music Unlimited.
JSON body {platform, account, credentials}. Device-code flows return {url, code, pending:true}; poll by re-posting until active:true. The admin panel automates this — prefer it for interactive logins.
/downloads/* serves bundled files and /stream/gaana/manifest + /segment proxy Gaana HLS. All are HMAC-signed and expire — never construct them manually, always play the returned cdnurl.
Errors use conventional HTTP status codes and return a JSON body of the form {"code":404,"message":"..."}. Server-side failures intentionally return a generic message; the specific cause stays in server logs only.
| Status | When | Typical fix |
|---|---|---|
400 | Missing or invalid parameters (no query, bad auth value, unparseable URL) | Check the request parameters |
401 | API key missing/invalid, or the platform requires a connected account and auth=session was set | Create a key, or connect the provider account in the admin panel |
404 | The URL/ID could not be resolved on the provider | Verify the link opens on the provider site |
429 | Rate limit or quota exhausted (see X-RateLimit-*/Retry-After headers) | Wait for the window to reset or raise the key’s tier |
501 | Operation not supported for that platform (e.g. login on public providers) | Use a different platform or operation |
502 | The music provider failed mid-request (upstream outage, rejected credentials) | Retry; check account status if it persists |
504 | The provider took too long to respond | Retry — repeated lookups are served from cache faster |
Test every endpoint live. Your key is stored in this browser only.
// response will appear here