Resonance catalogue
Everything released through Resonance: tracks, artists, albums, genres, credits, play counts. Charts, discovery bots, stats pages and "now playing" cards live off this. No key, no account, no registration.
text
Base URL https://resonance-api.aperturesyndicate.com/api/v1/catalogEndpoints
| Method | Endpoint | |
|---|---|---|
GET | /tracks | Published tracks, most played first. ?q= searches, ?genre= filters |
GET | /tracks/:id | One track with full credits |
GET | /artists | Artists, most monthly listeners first. ?q= searches |
GET | /artists/:slug | Artist with albums, top tracks and appearances on other artists' tracks |
GET | /artists/:slug/tracks/:trackSlug | Track by its public address, with its album |
GET | /albums | Published albums, newest first |
GET | /albums/:id | Album with its tracks and artist |
GET | /taxonomy | Genres by category, moods, languages |
GET | /version | A cheap signature that changes when something is published |
Lists take limit (1–100, default 50) and offset, and return a total count.
The catalogue serves metadata only. Audio, lyrics and download links are not part of the public API — link people to the track on Resonance to listen.
Example
bash
curl "https://resonance-api.aperturesyndicate.com/api/v1/catalog/tracks?limit=1"json
{
"tracks": [{
"id": "f021f894-97cb-471e-b2f5-2b312e418e4a",
"title": "Нежные порезы",
"slug": "nezhnye-porezy",
"artistSlug": "lar4ick",
"durationMs": 102896,
"coverUrl": "https://media.aperturesyndicate.com/…/cover-v2.jpg",
"coverThumb": "https://media.aperturesyndicate.com/…/cover-v2.jpg.thumb.webp",
"genres": ["hip-hop", "rap", "boom bap"],
"language": ["ru"],
"bpm": 92,
"playCount": 190,
"explicit": false,
"artists": [
{ "slug": "lar4ick", "name": "Lar4ick", "role": "primary" },
{ "slug": "kinechu", "name": "kinechu", "role": "producer" }
],
"waveform": [89, 81, 56, "…"]
}],
"count": 11142
}The public page of a track is https://resonance.aperturesyndicate.com/artist/<artistSlug>/<slug>, of an artist https://resonance.aperturesyndicate.com/artist/<artistSlug> — use them for the link back.
Track fields
| Field | |
|---|---|
id, slug, title | Identity; slug is unique within the artist |
artistId, artistSlug, albumId | Owner and album (albumId may be null for a single) |
artists | Everyone credited: role is primary, featured, producer and so on |
durationMs, bpm | Length and tempo |
coverUrl, coverThumb | Full cover and a small webp preview |
genres, moods, language | Tags from /taxonomy |
playCount | Total plays |
explicit | Explicit lyrics |
releaseDate, label, isrc, copyright | Release data, when the artist gave it |
waveform | 72 loudness values 0–100 for drawing a waveform |
externalSource, externalUrl | Set for tracks from the open catalogue we mirror — credit and link the original |
videoUrl, videoDurationMs | Short video, if the track has one |
Limits
- 300 requests per minute per IP, shared across the catalogue. Pages are cached for about a minute, so polling faster than that gets you nothing new — use
/version. - Browser calls are blocked by CORS. Call the catalogue from your server and cache the result.
- An unknown id answers
400, a missing track or artist404with{"error":"not_found","code":"NOT_FOUND"}.