# Bandcamp API

> Bandcamp returns album details and genre-based releases as a workflow and API.

Get album returns album details, tracks, prices, formats, and shown supporter counts from a title or link, optionally with artist. List releases by genre returns releases in best-selling or new-arrivals order, with required genre and optional format and result maximum.

- Page: https://fous.com/tools/bandcamp
- Handle: `@bandcamp`
- Category: [Entertainment](https://fous.com/tools/category/entertainment)
- Source website: https://bandcamp.com
- Last verified: Oct 7, 2026

## Methods

### Get album

Operation `get_album`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get a Bandcamp album by title and optional artist, or by album link. Includes available prices, physical formats, tracks and album details; supporter count covers only profiles shown on the page, and copies left is given only when displayed.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `album` | string | yes | `"https://boardsofcanada.bandcamp.com/album/music-has-the-right-to-children"` | Album title or Bandcamp album link, for example Titanic Rising or https://weyesblood.bandcamp.com/album/titanic-rising. |
| `artist` | string | no | `"Weyes Blood"` | Artist name to distinguish albums with the same title, for example Weyes Blood. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "album"
  ],
  "properties": {
    "album": {
      "type": "string",
      "description": "Album title or Bandcamp album link, for example Titanic Rising or https://weyesblood.bandcamp.com/album/titanic-rising.",
      "examples": [
        "https://boardsofcanada.bandcamp.com/album/music-has-the-right-to-children",
        "Titanic Rising",
        "UNTITLED (Black Is)"
      ]
    },
    "artist": {
      "type": "string",
      "default": "",
      "description": "Artist name to distinguish albums with the same title, for example Weyes Blood.",
      "examples": [
        "Weyes Blood",
        "SAULT"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "album": "https://boardsofcanada.bandcamp.com/album/music-has-the-right-to-children"
    },
    {
      "album": "Titanic Rising",
      "artist": "Weyes Blood"
    },
    {
      "album": "UNTITLED (Black Is)",
      "artist": "SAULT"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `tags` | array |  |  |
| `title` | string | `"Music Has The Right To Children"` | Album title. |
| `artist` | string or null | `"Boards of Canada"` | Album artist. |
| `tracks` | array |  |  |
| `tracks[].title` | string | `"Wildlife Analysis"` |  |
| `tracks[].length` | string or null | `"1:15"` |  |
| `tracks[].number` | integer | `1` |  |
| `credits` | string or null | `"1998, Warp Records"` |  |
| `album_link` | string | `"https://boardsofcanada.bandcamp.com/album/music-has-the-right-to-children"` |  |
| `release_date` | string or null | `"1998-04-20"` | Release date in YYYY-MM-DD. |
| `digital_price` | any |  | Digital album price and any pay-what-you-want minimum. |
| `artist_location` | string or null | `"Los Angeles, California"` |  |
| `cover_image_link` | string or null | `"https://f4.bcbits.com/img/a3351001335_5.jpg"` |  |
| `physical_formats` | array |  |  |
| `physical_formats[].price` | number or null | `28` |  |
| `physical_formats[].currency` | string or null | `"GBP"` |  |
| `physical_formats[].sold_out` | boolean | `false` |  |
| `physical_formats[].copies_left` | integer or null |  |  |
| `physical_formats[].format_name` | string | `"2 x Vinyl LP"` |  |
| `supporters_shown` | integer or null | `63` | Number of unique supporter profiles displayed, not the total number of purchasers. |

**Example input**

```json
{
  "album": "https://boardsofcanada.bandcamp.com/album/music-has-the-right-to-children"
}
```

**Example output**

```json
{
  "tags": [
    "alternative",
    "electronic"
  ],
  "title": "Music Has The Right To Children",
  "artist": "Boards of Canada",
  "tracks": [
    {
      "title": "Wildlife Analysis",
      "length": "1:15",
      "number": 1
    },
    {
      "title": "An Eagle In Your Mind",
      "length": "6:25",
      "number": 2
    },
    {
      "title": "The Color Of The Fire",
      "length": "1:45",
      "number": 3
    }
  ],
  "credits": "1998, Warp Records",
  "album_link": "https://boardsofcanada.bandcamp.com/album/music-has-the-right-to-children",
  "release_date": "1998-04-20",
  "digital_price": {
    "amount": 9,
    "minimum": 9,
    "currency": "GBP",
    "name_your_price": true
  },
  "artist_location": null,
  "cover_image_link": "https://f4.bcbits.com/img/a3351001335_5.jpg",
  "physical_formats": [
    {
      "price": 28,
      "currency": "GBP",
      "sold_out": false,
      "copies_left": null,
      "format_name": "2 x Vinyl LP"
    },
    {
      "price": 12,
      "currency": "GBP",
      "sold_out": false,
      "copies_left": null,
      "format_name": "Compact Disc (CD)"
    }
  ],
  "supporters_shown": 63
}
```

### List releases by genre

Operation `list_releases_by_genre`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Browse Bandcamp releases in a genre in best-selling or new-arrivals order, filtered by format. Physical-format prices are from the matching item when available; releases without a fixed price have no price.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `sort` | string | no | `"new_arrivals"` | Listing order, for example new_arrivals. |
| `genre` | string | yes | `"electronic"` | Genre to browse, such as electronic, hip-hop, jazz, or metal. |
| `format` | string | no | `"vinyl"` | Release format, for example vinyl. |
| `max_results` | integer | no | `12` | Maximum albums to return, for example 30. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "genre"
  ],
  "properties": {
    "sort": {
      "enum": [
        "best_selling",
        "new_arrivals"
      ],
      "type": "string",
      "default": "best_selling",
      "description": "Listing order, for example new_arrivals.",
      "examples": [
        "new_arrivals",
        "best_selling"
      ]
    },
    "genre": {
      "type": "string",
      "minLength": 1,
      "description": "Genre to browse, such as electronic, hip-hop, jazz, or metal.",
      "examples": [
        "electronic",
        "jazz",
        "metal"
      ]
    },
    "format": {
      "enum": [
        "all",
        "digital",
        "vinyl",
        "cd",
        "cassette"
      ],
      "type": "string",
      "default": "all",
      "description": "Release format, for example vinyl.",
      "examples": [
        "vinyl",
        "cassette",
        "cd"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 30,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum albums to return, for example 30.",
      "x-fous-developer": true,
      "examples": [
        12,
        5,
        65
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "genre": "electronic"
    },
    {
      "sort": "new_arrivals",
      "genre": "jazz",
      "format": "vinyl",
      "max_results": 12
    },
    {
      "sort": "new_arrivals",
      "genre": "metal",
      "format": "cassette",
      "max_results": 5
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `releases` | array |  | Releases in Bandcamp listing order. |
| `releases[].genre` | string | `"electronic"` | Selected genre. |
| `releases[].price` | number or null | `10` | Displayed price in the listed currency, if present. |
| `releases[].artist` | string | `"King Gizzard & The Lizard Wizard"` | Album artist. |
| `releases[].currency` | string or null | `"USD"` | Three-letter currency code, if a price is present. |
| `releases[].album_url` | string | `"https://kinggizzard.bandcamp.com/album/alien-metal?from=discover_page"` | Album page link. |
| `releases[].album_title` | string | `"Alien Metal"` | Album title. |
| `releases[].release_date` | string or null | `"2026-08-14"` | Release date when shown. |
| `releases[].cover_image_url` | string or null | `"https://f4.bcbits.com/img/a2759728592_16.jpg"` | Album artwork link. |

**Example input**

```json
{
  "genre": "electronic"
}
```

**Example output**

```json
{
  "releases": [
    {
      "genre": "electronic",
      "price": null,
      "artist": "King Gizzard & The Lizard Wizard",
      "currency": null,
      "album_url": "https://kinggizzard.bandcamp.com/album/alien-metal?from=discover_page",
      "album_title": "Alien Metal",
      "release_date": "2026-08-14",
      "cover_image_url": "https://f4.bcbits.com/img/a2759728592_16.jpg"
    },
    {
      "genre": "electronic",
      "price": 10,
      "artist": "Ocean Company",
      "currency": "USD",
      "album_url": "https://hotelpoolsmusic.bandcamp.com/album/ocean-company?from=discover_page",
      "album_title": "Ocean Company",
      "release_date": "2026-10-16",
      "cover_image_url": "https://f4.bcbits.com/img/a4072557709_16.jpg"
    },
    {
      "genre": "electronic",
      "price": 1,
      "artist": "Lammoth",
      "currency": "USD",
      "album_url": "https://lammothofficial.bandcamp.com/album/onward?from=discover_page",
      "album_title": "Onward",
      "release_date": "2026-08-07",
      "cover_image_url": "https://f4.bcbits.com/img/a2574057637_16.jpg"
    }
  ]
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@bandcamp",
  "visibility": "public",
  "operation": "get_album",
  "version": 1,
  "input": {
    "album": "https://boardsofcanada.bandcamp.com/album/music-has-the-right-to-children"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@bandcamp\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_album\",\n  \"version\": 1,\n  \"input\": {\n    \"album\": \"https://boardsofcanada.bandcamp.com/album/music-has-the-right-to-children\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@bandcamp",
  "visibility": "public",
  "operation": "get_album",
  "version": 1,
  "input": {
    "album": "https://boardsofcanada.bandcamp.com/album/music-has-the-right-to-children"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/bandcamp`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_album`: Get album. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `list_releases_by_genre`: List releases by genre. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-bandcamp https://api.fous.com/mcp/tools/bandcamp --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Compare album prices and physical formats before purchasing.
- Review track lists and release details for albums.
- Browse genre releases by popularity or new arrivals.
- Find releases in a specific physical format.

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this Bandcamp tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a Bandcamp account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from bandcamp.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Oct 7, 2026.

### What tracks are on an album?

Get album returns track titles, lengths, and track numbers when available.

### What prices and physical formats are available?

Get album returns available digital prices and physical formats, including displayed prices and sold-out status.

### Which releases are listed in a genre?

List releases by genre returns releases for the required genre, ordered by best-selling or new arrivals.

## Related

- [Apple Music API](https://fous.com/tools/apple-music.md): Apple Music returns albums, tracks, artist profiles, latest releases, top music, matching songs, and current charts; prices, previews, and older albums may be unavailable.
- [Spotify API](https://fous.com/tools/spotify.md): Spotify returns public artist profiles, album credits and ordered tracks, song details and play counts, up to 500 playlist songs, keyword results, and country-based podcast charts; dates and regional options vary.
- [Deezer API](https://fous.com/tools/deezer.md): Deezer provides albums with ordered tracklists, song recording details, and current worldwide charts or official country-playlist tracks; previews and some tempo data may be unavailable or expire.
- [Pitchfork API](https://fous.com/tools/pitchfork.md): Pitchfork provides music reviews and coverage, including the newest matching album reviews with ratings and details and recent reviews filterable by genre or Best New Music; broad-title searches may miss results beyond the first 120.
- [Discogs API](https://fous.com/tools/discogs.md): Discogs provides releases, collections and marketplace information, including edition and track details, community counts, available price statistics, and artists’ discographies; sold prices may be unavailable.
- [MusicBrainz API](https://fous.com/tools/musicbrainz.md): MusicBrainz provides community-maintained recording and release information, matching songs to identifiers and release dates and providing artist details and links when available; some release information may be incomplete.
- [Bandsintown API](https://fous.com/tools/bandsintown.md): Bandsintown provides artist tour dates and concert listings with venues, lineups and ticket or event links; results reflect listed upcoming shows and may include nearby venues.
- [Last.fm API](https://fous.com/tools/last-fm.md): Last.fm provides listening statistics, artist profiles, discovery, up to 50 tracks or albums, similar artists without percentages, and upcoming events that may be absent.
- [All Entertainment tools](https://fous.com/tools/category/entertainment)
