Overview
The SonoVault API gives you access to music metadata for 80 million tracks and counting. Look up ISRC codes, artist credits, label, genre tags, release dates, and cross-platform IDs — all from a single REST endpoint.
Use it to power music discovery apps, catalog management, sync and royalty tools, or any workflow that needs accurate track-level data.
All responses are JSON. Every request requires an API key in the x-api-key header. There are no SDKs to install — any HTTP client works.
What you can do
- Search tracks by artist and title — returns ISRC, duration, genre, and artist credits.
- Look up by ISRC — get full metadata for a specific recording.
- Resolve cross-platform IDs — given a Spotify, Beatport, Apple Music, Tidal, Discogs, or MusicBrainz ID, get matching IDs on all other platforms.
- Search artists and releases — find artists by name or browse their discography.
- New releases — paginated feed of the latest releases, sorted by artist popularity.
Try it without signing up
Every endpoint on this page has a Try it out button that opens the API explorer. It uses a public demo key so you can make real requests and see live responses — no account required. Click Try it out on any endpoint to get started.
Quickstart
Get from zero to your first API response in under 5 minutes. Create a free account to get an API key — no credit card required.
1. Get your API key
After signing up, your API key is available immediately on your dashboard. All requests must include your key in the x-api-key header.
2. Make your first request
Search for a track by artist and title. The response includes ISRC, duration, genre, and full artist credits.
curl https://api.sonovault.now/v1/tracks/search \-H "x-api-key: YOUR_API_KEY" \-G -d "artist=Daft Punk" \-d "title=One More Time"
3. Explore the API
Now that you have your first result, try looking up the ISRC with the ISRC lookup endpoint or resolve cross-platform links with Platform links.
Authentication
All API requests require a valid API key passed in the x-api-key header.
x-api-key: svk_live_xxxxxxxxxxxxxxxxxx
Test keys prefixed svk_test_ return mocked data. Live keys prefixed svk_live_ hit the real database.
Base URL
All API requests use the following base URL:
https://api.sonovault.now
All endpoints return JSON with Content-Type: application/json. Request parameters are passed as query strings for GET requests.
Rate limits
Rate limits are enforced per API key on a rolling 60-second window. If you exceed your limit, requests return 429 Too Many Requests.
| Tier | Requests/month | Burst (per 60s) |
|---|---|---|
| Free | 1,000 | 20 |
| Starter | 50,000 | 60 |
| Growth | 500,000 | 300 |
| Scale | 5,000,000 | 1,000 |
Every response includes rate limit headers so you can track your usage and avoid hitting limits:
| Header | Description |
|---|---|
RateLimit-Limit | Your burst limit (max requests per 60-second window). |
RateLimit-Remaining | Requests remaining in the current window. |
RateLimit-Reset | Seconds until the current window resets and RateLimit-Remaining refills. |
When you receive a 429 response, wait the number of seconds in RateLimit-Reset before retrying. For batch workloads, check RateLimit-Remaining and throttle proactively rather than waiting for a rejection.
Errors
All errors return a JSON object with an error string:
{"error": "Not found"}
| Status | Description |
|---|---|
| 400 | Missing or invalid parameters. |
| 401 | Missing or invalid API key. |
| 403 | Endpoint requires a paid plan. Upgrade to access browse. |
| 410 | Endpoint disabled. The endpoint will return in another form later. |
| 404 | No matching track or resource. |
| 429 | Rate limit exceeded. Check RateLimit-Reset header for retry timing. |
| 500 | Unexpected server error. |
Track search
Search for tracks by artist and title. Returns ISRC, genre, release dates, and full metadata.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| artist | string | required | Artist name. |
| title | string | required | Track title. |
| limit | integer | optional | Max results, 1–100. Default 20. |
| cursor | string | optional | Cursor from previous response for pagination. |
| source | integer | optional | Filter by source: 0 (Spotify), 1 (Beatport), 2 (Discogs), 3 (MusicBrainz). |
| include | string[] | optional | Extra fields: label, releaseDate, genre. |
Pagination
When more results are available, the response includes a nextCursor string. Pass it as the cursor parameter to fetch the next page:
curl https://api.sonovault.now/v1/tracks/search \-H "x-api-key: YOUR_API_KEY" \-G -d "artist=Daft Punk" \-d "title=Around" \-d "cursor=eyJpZCI6MTIzfQ"
When nextCursor is null, you have reached the last page.
Example response
ISRC lookup
Exact lookup by ISRC code. Returns full track detail including genre and subgenre.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| isrc | string | required | ISRC code (e.g. GBDUW0000053). |
Example response
Track by ID
Get a single track by its internal SonoVault track ID. Returns the same track payload as ISRC lookup — title, artists, release, ISRC, duration, genre, and subgenre.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | required | Internal SonoVault track ID. |
Example response
Platform links
Lightweight cross-platform ID resolver. Given an ISRC or a source-specific ID, returns all known external platform links.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | optional | Internal SonoVault track ID. Provide one lookup param at a time. |
| isrc | string | optional | ISRC code. |
| spotify_id | string | optional | Spotify track ID. |
| beatport_id | string | optional | Beatport track ID. |
| discogs_id | string | optional | Discogs release ID. |
| musicbrainz_id | string | optional | MusicBrainz recording ID. |
| applemusic_id | string | optional | Apple Music track ID. |
| tidal_id | string | optional | Tidal track ID. |
Provide exactly one lookup parameter per request: isrc, spotify, beatport, discogs, musicbrainz, applemusic, or tidal.
Example response
Artist search
Search for artists by name. Returns each artist with country, formation year (and full formation date when day-level precision is known), social links, and Wikidata ID where available.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | required | Artist name to search. |
| limit | integer | optional | Max results, 1–100. Default 20. |
| cursor | string | optional | Cursor from previous response for pagination. |
Pagination
When more results are available, the response includes a nextCursor string. Pass it as the cursor parameter to fetch the next page:
curl https://api.sonovault.now/v1/artists/search \-H "x-api-key: YOUR_API_KEY" \-G -d "name=Daft Punk" \-d "cursor=0:5000000:1"
When nextCursor is null, you have reached the last page.
Example response
Artist by ID
Get artist by ID. Returns the public artist object (country, formation_year + optional formation_date, social_links, wikidata_id) plus a release_count summary. For the actual release list, use /v1/artists/:id/releases — the embedded array was removed because it became huge for prolific artists.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | required | Artist ID. |
Example response
Releases by artist
Paginated feed of releases by a specific artist, ordered by release date (newest first). Use this instead of the embedded releases array on /v1/artists/:id when you need pagination.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | required | Artist ID. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | optional | Max results, 1–100. Default 20. |
| cursor | string | optional | Cursor from previous response for pagination. |
Example response
Label search
Search for record labels by name. Returns labels sorted by relevance and release count.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | required | Label name to search. |
| limit | integer | optional | Max results, 1–100. Default 20. |
| cursor | string | optional | Cursor from previous response for pagination. |
Pagination
When more results are available, the response includes a nextCursor string. Pass it as the cursor parameter to fetch the next page:
curl https://api.sonovault.now/v1/labels/search \-H "x-api-key: YOUR_API_KEY" \-G -d "name=Drumcode" \-d "cursor=0:42:1"
When nextCursor is null, you have reached the last page.
Example response
Label by ID
Get label by ID. Returns the public label object plus release_count and artist_count summaries. For the actual lists, use /v1/labels/:id/releases and /v1/labels/:id/artists — embedded arrays were removed because they became huge for prolific labels.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | required | Label ID. |
Example response
Releases by label
Paginated feed of releases on a specific label, ordered by release date (newest first). Each result carries the primary artist, label name, catalog number, and track count.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | required | Label ID. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | optional | Max results, 1–100. Default 20. |
| cursor | string | optional | Cursor from previous response for pagination. |
Example response
Artists by label
Paginated list of artists with releases on a specific label, ordered by number of releases on that label (descending). Each artist carries the public profile fields and a release_count scoped to this label.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | required | Label ID. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | optional | Max results, 1–100. Default 20. |
| cursor | string | optional | Cursor from previous response for pagination. |
Example response
Release search
Search for releases by title, optionally filtered by artist.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| title | string | required | Release title to search. |
| artist | string | optional | Artist name filter. |
| limit | integer | optional | Max results, 1–100. Default 20. |
| cursor | string | optional | Cursor from previous response for pagination. |
Pagination
When more results are available, the response includes a nextCursor string. Pass it as the cursor parameter to fetch the next page:
curl https://api.sonovault.now/v1/releases/search \-H "x-api-key: YOUR_API_KEY" \-G -d "title=Discovery" \-d "cursor=0:85:1"
When nextCursor is null, you have reached the last page.
Example response
Release by ID
Get release by ID with all tracks, including ISRC, genre, subgenre, and artist credits.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | required | Release ID. |
Example response
New releases
Paginated feed of releases ordered by release date (newest first).
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | optional | 1–100. Default 20. |
| cursor | string | optional | Cursor from previous response for pagination. |
Pagination
When more results are available, the response includes a nextCursor string. Pass it as the cursor parameter to fetch the next page:
curl https://api.sonovault.now/v1/releases/new \-H "x-api-key: YOUR_API_KEY" \-G -d "limit=20" \-d "cursor=2026-03-22:789"
When nextCursor is null, you have reached the last page.
Example response
Browse tracks
Discover tracks by filtering on label, artist, genre, and year. Returns 20 random tracks sampled from matching results.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| labelId | integer | optional | Filter by label ID. |
| artistId | integer | optional | Filter by artist ID. |
| genre | string | optional | Exact genre name (case-insensitive). House matches House but not Tech House. |
| year | integer | optional | Release year (e.g. 2025). |
Example response
FAQ
Click Try it out on any endpoint to load it here.