Bandcamp API endpoint
Returns one Bandcamp album or track page: title, artist, label, release date, tags, about text, credits, digital price, tracklist with durations, physical packages with prices and, for a track, its parent album and ISRC. Audio stream and download URLs are never returned.
/bandcamp/releaseurl is required: https://{artist}.bandcamp.com/album/{slug} or .../track/{slug}, as returned in the url field of bandcamp-discover and bandcamp-artist. Only artist subdomains of bandcamp.com are accepted; custom artist domains (about 1% of albums) and other hosts are rejected with 400. A release that does not exist returns 404.
Notable response behavior:
type is album or track. release_date is RFC 3339 UTC.price is the digital offer in major units; minimum_price is the artist's minimum. free_download is true when Bandcamp offers a free download: its own free flag, or a name-your-price release with a zero minimum. The download link itself is never returned.track_count is the largest of the release's own track count and the rows on the page. tracks lists the rows the page shows, which can be fewer than track_count (a 6-track album can show one row), and a pre-order track has no duration. tracks lists each track's number, id, title, duration in seconds and page URL (and lyrics where the artist published them). Audio stream and download URLs are never returned.packages are the physical and bundle products offered with the release, each with a type, title, description and price.album and album_url name its parent album and isrc is returned when published. label is the publishing page.tags are the artist-chosen tags (the last is often a location).| Field | Filled in, of 4 checked | Values in the sample |
|---|---|---|
| number | 4 | 1 to 4, median 2 |
| id | 4 | |
| title | 4 | “Tom Fucking Pearl” and 3 other values |
| url | 4 | menstrualdisfigurment.bandcamp.com |
| duration_seconds | 4 | 4.29 to 92.92, median 45.32 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| url | string | Yes | Album or track URL on an artist subdomain | https://theforeverwinter.bandcamp.com/album/the-forever-winter-original-soundtrack | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/bandcamp/release?url=https%3A%2F%2Ftheforeverwinter.bandcamp.com%2Falbum%2Fthe-forever-winter-original-soundtrack" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"id": 151201061,
"type": "album",
"title": "The Forever Winter Original Soundtrack",
"url": "https://theforeverwinter.bandcamp.com/album/the-forever-winter-original-soundtrack",
"artist": "The Forever Winter",
"artist_id": 569467791,
"artist_url": "https://theforeverwinter.bandcamp.com",
"label": "The Forever Winter",
"release_date": "2026-10-30T00:00:00Z",
"tags": [
"Soundtrack",
"ambient",
"doom",
"maidcore",
"post rock instrumental",
"video game music",
"Los Angeles"
],
"about": "12'' Vinyl LP of the Forever Winter Soundtrack\r\n\r\n(The Digital version includes 3 bonus tracks - 1 previously unreleased)",
"credits": "Composed, Produced and Performed by Jason Willey.",
"price": {
"amount": 5,
"currency": "USD"
},
"minimum_price": 5,
"free_download": false,
"preorder": false,
"track_count": 15,
"image_url": "https://f4.bcbits.com/img/a1844021036_10.jpg",
"tracks": [
{
"number": 1,
"id": 1473943846,
"title": "Lost Souls",
"url": "https://theforeverwinter.bandcamp.com/track/lost-souls-2",
"duration_seconds": 170.443
},
{
"number": 2,
"id": 689407450,
"title": "Black Echo",
"url": "https://theforeverwinter.bandcamp.com/track/black-echo-2",
"duration_seconds": 189.713
}
],
"packages": [
{
"id": 4064253782,
"type": "Vinyl LP",
"title": "Limited Edition 12'' Vinyl of The Forever Winter Original Soundtrack",
"description": "Curated Tracklist: We had to condense the soundtrack down from over 100 tracks on Steam to a tight, 12-track selection to properly fit the format.\n\nAudiophile Quality: We prioritized the highest possible audio quality over everything else. This dictated our track lengths and our choice to stick with classic black vinyl for the best sound.\n\nCustom Masters: Every single track went through special mixes specifically mastered for vinyl.\n\nThe digital only version contains 3 bonus tracks and 1 new unreleased track.",
"url": "https://theforeverwinter.bandcamp.com/album/the-forever-winter-original-soundtrack",
"price": {
"amount": 30,
"currency": "USD"
}
}
]
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/bandcamp.releaseResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | bandcamp.ReleaseResponse | No | ||||
| data.about | string | No | ||||
| data.album | string | No | ||||
| data.album_url | string | No | ||||
| data.artist | string | No | ||||
| data.artist_id | integer | No | ||||
| data.artist_url | string | No | ||||
| data.credits | string | No | ||||
| data.free_download | boolean | No | ||||
| data.id | integer | No | ||||
| data.image_url | string | No | ||||
| data.isrc | string | No | ||||
| data.label | string | No | ||||
| data.minimum_price | number | No | ||||
| data.packages | array | No | ||||
| data.packages[].description | string | No | ||||
| data.packages[].id | integer | No | ||||
| data.packages[].price | bandcamp.Price | No | ||||
| data.packages[].price.amount | number | No | ||||
| data.packages[].price.currency | string | No | ||||
| data.packages[].title | string | No | ||||
| data.packages[].type | string | No | ||||
| data.packages[].url | string | No | ||||
| data.preorder | boolean | No | ||||
| data.price | bandcamp.Price | No | ||||
| data.price.amount | number | No | ||||
| data.price.currency | string | No | ||||
| data.release_date | string | No | ||||
| data.tags | array | No | ||||
| data.title | string | No | ||||
| data.track_count | integer | No | ||||
| data.tracks | array | No | ||||
| data.tracks[].duration_seconds | number | No | ||||
| data.tracks[].id | integer | No | ||||
| data.tracks[].lyrics | string | No | ||||
| data.tracks[].number | integer | No | ||||
| data.tracks[].title | string | No | ||||
| data.tracks[].url | string | No | ||||
| data.type | string | No | ||||
| data.url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/bandcamp/release?url=https%3A%2F%2Ftheforeverwinter.bandcamp.com%2Falbum%2Fthe-forever-winter-original-soundtrack" \
-H "x-api-key: $CRAWLORA_API_KEY"