WhoSampled APIwhosampled.com ↗
Access WhoSampled data via API: search artists and tracks, retrieve sample connections, cover versions, artist profiles, and trending sample charts.
What is the WhoSampled API?
The WhoSampled API exposes 7 endpoints covering music sample lineage, cover versions, and remix connections sourced from WhoSampled.com. The get_track_detail endpoint returns a full connections summary including section, artist, year, and tag for every sample, cover, and remix tied to a track. Artist profiles, paginated sample histories, and a live Hot Samples chart round out the surface.
curl -X GET 'https://api.parse.bot/scraper/ce66773d-6622-4c56-a9ae-64dc0a37df1f/search?query=Daft+Punk' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace whosampled-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: WhoSampled SDK — bounded, re-runnable; every call capped."""
from parse_apis.WhoSampled_API import WhoSampled, Ob, ResourceNotFound
client = WhoSampled()
# Search for an artist
result = client.search_results.search(query="Daft Punk")
print(result.top_hit.name, result.top_hit.url)
for track_hit in result.tracks[:3]:
print(track_hit.name, track_hit.url)
# Fetch artist profile via constructible key
artist = client.artist(name="Daft-Punk")
# Browse tracks that use samples (paginated, capped)
for track in artist.samples_used(limit=3):
print(track.name, track.url)
for conn in track.connections:
print(conn.action, conn.name, conn.artist, conn.year)
# Get a specific track detail via sub-resource
try:
detail = artist.tracks.get(track_slug="Harder,-Better,-Faster,-Stronger")
print(detail.title, detail.artist, detail.album, detail.year)
for conn in detail.connections_summary[:2]:
print(conn.section, conn.name, conn.artist, conn.year)
except ResourceNotFound as e:
print("not found:", e.artist_slug)
# Get cover versions sorted by earliest (paginated)
for cover in artist.tracks.covers(track_slug="Harder,-Better,-Faster,-Stronger", ob=Ob.EARLIEST_TO_LATEST, limit=3):
print(cover.cover_artist, cover.cover_title, cover.year, cover.genre, cover.url)
# Browse trending samples
for sample in client.trending_samples.list(limit=3):
print(sample.name, sample.url)
print("exercised: search_results.search / artist.samples_used / tracks.get / tracks.covers / trending_samples.list")
Full-text search across artists and tracks on WhoSampled. Returns a top hit (the single best match), a list of matching artists, and a list of matching tracks. Results are ranked by relevance; no pagination.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword (artist or track name) |
{
"type": "object",
"fields": {
"tracks": "array of matching tracks, each with name and url",
"artists": "array of matching artists, each with name and url",
"top_hit": "object or null containing name and url of the top search result"
},
"sample": {
"data": {
"tracks": [
{
"url": "https://www.whosampled.com/Daft-Punk/Harder,-Better,-Faster,-Stronger/",
"name": "Harder, Better, Faster, Stronger"
}
],
"artists": [
{
"url": "https://www.whosampled.com/Indo-Silver-Club-(Daft-Punk-Alias)/",
"name": "Indo Silver Club (Daft Punk Alias)"
}
],
"top_hit": {
"url": "https://www.whosampled.com/Daft-Punk/",
"name": "Daft Punk"
}
},
"status": "success"
}
}About the WhoSampled API
Search and Artist Profiles
The search endpoint accepts a keyword and returns a top_hit, an artists array, and a tracks array — each entry carrying a name and url. Results are ranked by relevance and are not paginated, so it works best for exact or near-exact queries. The get_artist endpoint takes an artist_slug (matching the URL path on WhoSampled, e.g. Kanye-West) and returns name, real_name, aliases, groups, and a stats_summary string that encodes how many samples, covers, and remixes the artist is linked to.
Track Details and Sample Connections
get_track_detail requires both artist_slug and track_slug. The track_slug must exactly replicate the WhoSampled URL format, including commas for punctuation — for example, Harder,-Better,-Faster,-Stronger. The response includes title, artist, album, year, and a connections_summary array. Each connection object carries section, name, artist, year, tag, and url, giving you the full creative lineage of a track in one call.
Paginated Artist Histories and Cover Lookups
get_artist_samples_used returns a paginated list of tracks by an artist that contain samples, with each track's connections array detailing the source material. Both this endpoint and get_artist_covered_by accept an optional tag parameter (e.g. Drums, Vocals / Lyrics, Rock) to filter connection types, plus a page integer for pagination. For track-level cover lookups, get_track_covered_by returns an items array of cover versions with cover_artist, cover_title, year, and url, as well as total_count and a has_next_page boolean.
Trending Samples Chart
The get_trending_samples endpoint requires no inputs and returns the current Hot Samples chart — a flat list of the most-viewed sample connections in the last 24 hours. Each item carries a name and url. This endpoint is suitable for polling to detect what sample stories are gaining attention in near-real time.
The WhoSampled API is a managed, monitored endpoint for whosampled.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when whosampled.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official whosampled.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a music discovery tool that traces the sample lineage of any track using
get_track_detailconnections_summary fields. - Generate artist sample fingerprints by aggregating
get_artist_samples_usedconnections across all pages for a given artist_slug. - Monitor trending music samples daily by polling
get_trending_samplesand storing the resulting items list over time. - Identify which artists most frequently cover a specific song using
get_track_covered_bywith total_count and paginated results. - Enrich a music database with artist aliases, real names, and group memberships via the
get_artistprofile endpoint. - Filter an artist's sample usage by instrument type (e.g. tag='Drums') to study production styles through
get_artist_samples_used. - Power a 'covered by' feature in a streaming app by fetching cover versions per track with artist, title, year, and URL.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does WhoSampled have an official developer API?+
How precise does the track_slug need to be in get_track_detail?+
Can I retrieve which specific samples a track has been sampled in by other artists?+
get_track_detail returns a connections_summary that includes inbound sample references (tracks that sampled the given track) alongside outbound ones, labeled by section and tag. You can fork this API on Parse and revise it to add a dedicated endpoint that isolates inbound sample connections for a track.Does the API expose audio previews, album art, or streaming links for tracks?+
Are remix connections included in track and artist data?+
get_track_detail returns a connections_summary where each object has a section field that distinguishes samples, covers, and remixes. The tag field provides further granularity (e.g. instrument type or genre for covers). Artist-level remix data appears rolled into the stats_summary string returned by get_artist.