# 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/workflows/bandcamp
- Handle: `@bandcamp`
- Category: [Entertainment](https://fous.com/workflows/category/entertainment)
- Source website: https://bandcamp.com
- Last verified: Sep 29, 2026
- Fous is not affiliated with Bandcamp.

## Methods

### Get album

Operation `get_album`, version 1. 1 credit per call.

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 call.

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 | `"jazz"` | Selected genre. |
| `releases[].price` | number or null | `30` | Displayed price in the listed currency, if present. |
| `releases[].artist` | string | `"Guillaume Perret"` | Album artist. |
| `releases[].currency` | string or null | `"EUR"` | Three-letter currency code, if a price is present. |
| `releases[].album_url` | string | `"https://guillaumeperret.bandcamp.com/album/guillaume-perret-the-electric-epic?from=discover_page"` | Album page link. |
| `releases[].album_title` | string | `"Guillaume Perret & the Electric Epic"` | Album title. |
| `releases[].release_date` | string or null | `"2023-04-21"` | Release date when shown. |
| `releases[].cover_image_url` | string or null | `"https://f4.bcbits.com/img/a2455268493_16.jpg"` | Album artwork link. |

**Example input**

```json
{
  "sort": "new_arrivals",
  "genre": "jazz",
  "format": "vinyl",
  "max_results": 12
}
```

**Example output**

```json
{
  "releases": [
    {
      "genre": "jazz",
      "price": 30,
      "artist": "Guillaume Perret",
      "currency": "EUR",
      "album_url": "https://guillaumeperret.bandcamp.com/album/guillaume-perret-the-electric-epic?from=discover_page",
      "album_title": "Guillaume Perret & the Electric Epic",
      "release_date": "2023-04-21",
      "cover_image_url": "https://f4.bcbits.com/img/a2455268493_16.jpg"
    },
    {
      "genre": "jazz",
      "price": 14,
      "artist": "Siggatunez",
      "currency": "EUR",
      "album_url": "https://gooeyeditz.bandcamp.com/album/gooey-editz-7?from=discover_page",
      "album_title": "GOOEY EDITZ #7",
      "release_date": "2026-10-16",
      "cover_image_url": "https://f4.bcbits.com/img/a2573031273_16.jpg"
    },
    {
      "genre": "jazz",
      "price": 24,
      "artist": "PULSE, Tilo Weber",
      "currency": "EUR",
      "album_url": "https://pulse-pulse.bandcamp.com/album/rainbows?from=discover_page",
      "album_title": "RAINBOWS",
      "release_date": "2026-10-16",
      "cover_image_url": "https://f4.bcbits.com/img/a3352341322_16.jpg"
    }
  ]
}
```

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_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.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

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=120) 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.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_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);
```

Or describe the data in plain language: send `{"api":"@bandcamp","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## 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

### Is Fous affiliated with Bandcamp?

No. Fous is not affiliated with Bandcamp. This workflow reads the public bandcamp.com website and returns its data.

### How much does it cost?

Each run costs 1 credit. 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; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 29, 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/workflows/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/workflows/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/workflows/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/workflows/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/workflows/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/workflows/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/workflows/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/workflows/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 workflows](https://fous.com/workflows/category/entertainment)
