OpenAPI Specification
openapi: 3.1.0
info:
title: Bandcamp Account Sales API
version: 1.0.0
description: Bandcamp's gated artist/label/merch-fulfillment API. Provides account, sales reporting, and merchandise order management endpoints. Access is granted on request and uses OAuth 2.0 (client credentials grant) with one-hour access tokens that may be refreshed. All API requests use POST with a Bearer token in the Authorization header.
contact:
name: Bandcamp Developer
url: https://bandcamp.com/developer
servers:
- url: https://bandcamp.com
description: Production
tags:
- name: Sales
description: Sales reporting for labels
paths:
/api/sales/4/sales_report:
post:
tags:
- Sales
summary: Retrieve a synchronous sales report
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- band_id
- start_time
properties:
band_id:
type: integer
description: Unique identifier for the band or label.
start_time:
type: string
description: Earliest UTC sale time to include (ISO 8601).
end_time:
type: string
description: Latest UTC sale time to exclude. Defaults to now.
member_band_id:
type: integer
description: Filter to a specific band within a label.
format:
type: string
enum:
- json
default: json
responses:
'200':
description: Sales report
content:
application/json:
schema:
$ref: '#/components/schemas/SalesReportResponse'
/api/sales/4/generate_sales_report:
post:
tags:
- Sales
summary: Generate a sales report asynchronously
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- band_id
- start_time
properties:
band_id:
type: integer
start_time:
type: string
end_time:
type: string
member_band_id:
type: integer
format:
type: string
enum:
- csv
- json
default: json
responses:
'200':
description: Asynchronous report token
content:
application/json:
schema:
type: object
properties:
token:
type: string
/api/sales/4/fetch_sales_report:
post:
tags:
- Sales
summary: Fetch a previously generated sales report
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
properties:
token:
type: string
responses:
'200':
description: Report URL or error
content:
application/json:
schema:
oneOf:
- type: object
properties:
url:
type: string
format: uri
- $ref: '#/components/schemas/Error'
components:
schemas:
SalesRow:
type: object
properties:
bandcamp_transaction_id:
type: integer
bandcamp_transaction_item_id:
type: integer
bandcamp_related_transaction_id:
type:
- integer
- 'null'
date:
type: string
item_type:
type: string
item_name:
type: string
artist:
type: string
currency:
type: string
item_price:
type: number
quantity:
type: number
sub_total:
type: number
additional_fan_contribution:
type: number
transaction_fee:
type: number
item_total:
type: number
amount_you_received:
type: number
buyer_name:
type: string
buyer_email:
type: string
country:
type: string
SalesReportResponse:
type: object
properties:
report:
type: array
items:
$ref: '#/components/schemas/SalesRow'
Error:
type: object
properties:
error:
type: boolean
error_message:
type: string
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: OAuth 2.0 access token returned by `/oauth_token`.
oauth2:
type: oauth2
flows:
clientCredentials:
tokenUrl: https://bandcamp.com/oauth_token
scopes: {}