Skip to main content

Python client for the SonoVault music metadata API — ISRC, ISWC, genre, labels, release dates, and cross-platform IDs for 90M+ tracks.

Project description

sonovault

CI PyPI

Python client for the SonoVault music metadata API. 90M+ tracks with ISRC, ISWC, genre, record label, canonical release dates, and cross-platform IDs for Spotify, Apple Music, Tidal, Beatport, Discogs, and MusicBrainz. One call resolves them all.

  • One key, no OAuth. A single x-api-key header, no approval queue.
  • Free tier. 1,000 requests/month, no credit card: get an API key.
  • Docs. Full API reference at sonovault.now/docs.

Install

pip install sonovault

Python 3.9+.

Quickstart

from sonovault import SonoVault

sv = SonoVault(api_key="YOUR_API_KEY")

# Find a track's ISRC from artist + title
page = sv.tracks.search(artist="Daft Punk", title="One More Time")
track = page["results"][0]
print(track["isrc"])   # "GBDUW0000053"
print(track["genre"], track["releases"][0]["label"]["name"])

# Resolve that ISRC to its ID on every platform
links = sv.tracks.links(isrc=track["isrc"])
for link in links["links"]:
    print(link["source"], link["url"])  # spotify https://open.spotify.com/track/...

# Recording to composition (ISWC), for royalty and publishing workflows
work = sv.tracks.iswc(isrc=track["isrc"])

Bulk resolve

Resolve up to 100 lines in one request: track names, ISRCs, or platform IDs. Useful for enriching play logs and library exports.

batch = sv.tracks.resolve(
    input_type="track_name",
    items=[
        {"artist": "Daft Punk", "title": "Harder, Better, Faster, Stronger"},
        {"artist": "Daft Punk", "title": "Around the World"},
    ],
)
for row in batch["results"]:
    print(row["status"], row["track"] and row["track"]["isrc"])

Pagination

List endpoints return {"results": [...], "next_cursor": ...}. Pass the cursor back for the next page. next_cursor is None on the last page.

from sonovault import paginate

for release in paginate(lambda cursor: sv.artists.releases(42, cursor=cursor)):
    print(release["title"])

Or walk the cursor yourself:

cursor = None
while True:
    page = sv.artists.releases(42, cursor=cursor)
    # ...use page["results"]
    cursor = page.get("next_cursor")
    if not cursor:
        break

Error handling

Non-2xx responses raise SonoVaultError:

from sonovault import SonoVaultError

try:
    sv.tracks.browse(genre="House")  # paid-tier endpoint
except SonoVaultError as err:
    print(err.status, err.is_forbidden, err)

Rate-limited responses that carry a Retry-After header are retried automatically. The default is 2 retries, configurable with max_retries.

Examples

Runnable scripts live in examples/: find an ISRC, resolve cross-platform links, enrich a play log, follow live stream events over SSE, and verify webhook deliveries.

API coverage

Namespace Methods
sv.tracks search, get, by_isrc, iswc, by_iswc, links, resolve, identify, identify_audio, browse
sv.artists search, get, releases
sv.labels search, get, releases, artists
sv.releases search, get, latest
sv.genres list
sv.suggestions submit, list
sv.streams create, list, get, update, history, report, live, stop
sv.webhooks create, list, get, update, delete, test, deliveries

Some endpoints (audio identify, browse, stream monitoring) need a paid tier. See pricing. Everything else works on the free tier.

Related

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sonovault-1.2.0.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sonovault-1.2.0-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file sonovault-1.2.0.tar.gz.

File metadata

  • Download URL: sonovault-1.2.0.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sonovault-1.2.0.tar.gz
Algorithm Hash digest
SHA256 81aba779c6f69a519860dbe51562eb1989e8725a7d576c6a0f95ede0142a9988
MD5 a288e619f6d9d2298db92f2b9a7eef3c
BLAKE2b-256 4ae138e35598a5446a96b443fd70456cd5f24587ed2b1c7b3d51c9b1e5fa6b67

See more details on using hashes here.

Provenance

The following attestation bundles were made for sonovault-1.2.0.tar.gz:

Publisher: publish.yml on rekordcloud/sonovault-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sonovault-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: sonovault-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 11.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sonovault-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 98f89c885f69f8fdfaf33e3bf80a767f963c8cb1088e90061a8cf0f31e270405
MD5 a0a113a5aa875addc08b50c635023f12
BLAKE2b-256 0131748b1323ee577b47c5b22844b8cc924d29f8b3abb780b3e0da8399bc5e5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for sonovault-1.2.0-py3-none-any.whl:

Publisher: publish.yml on rekordcloud/sonovault-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page