openapi: 3.1.0
info:
title: Bitpanda Platform API
version: v1
description: >-
Read-only Bitpanda Developer (Platform) API for querying a Bitpanda account:
wallet balances, transactions, asset metadata, and live ticker prices across
all asset types (crypto, fiat, stocks, ETFs, metals, indices). Generated by
the API Evangelist enrichment pipeline from Bitpanda Labs' first-party API
reference (github.com/bitpanda-labs/agent-skills). Authentication is via an
X-Api-Key header; pagination is cursor-based.
contact:
name: Bitpanda Developer Portal
url: https://developers.bitpanda.com/platform/
license:
name: Bitpanda Terms and Conditions
url: https://www.bitpanda.com/en/legal/bitpanda-group-general-terms-conditions
servers:
- url: https://developer.bitpanda.com
description: Bitpanda Platform API (used by the official MCP server, CLI, and agent skill)
- url: https://api.bitpanda.com/v1
description: Bitpanda public API host (developers.bitpanda.com reference)
security:
- ApiKeyAuth: []
tags:
- name: wallets
description: Wallet balances across all asset types
- name: transactions
description: Transaction history across all asset types
- name: assets
description: Asset metadata lookup
- name: market-data
description: Live ticker prices
paths:
/v1/wallets/:
get:
operationId: listWallets
summary: List wallets (balances)
description: List all user wallets (balances) across all asset types. Cursor paginated.
tags: [wallets]
parameters:
- { name: asset_id, in: query, required: false, schema: { type: string, format: uuid }, description: Filter by asset ID }
- { name: index_asset_id, in: query, required: false, schema: { type: string, format: uuid }, description: Filter by index asset ID }
- { name: last_credited_at_from_including, in: query, required: false, schema: { type: string, format: date-time }, description: Wallets credited at >= date }
- { name: last_credited_at_to_excluding, in: query, required: false, schema: { type: string, format: date-time }, description: Wallets credited at < date }
- { name: before, in: query, required: false, schema: { type: string }, description: Return page before cursor }
- { name: after, in: query, required: false, schema: { type: string }, description: Return page after cursor }
- { name: page_size, in: query, required: false, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Items per page }
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/WalletPage'
'401': { $ref: '#/components/responses/Unauthorized' }
'500': { $ref: '#/components/responses/ServerError' }
/v1/transactions:
get:
operationId: listTransactions
summary: List transactions
description: List all user transactions across all asset types, newest first. Cursor paginated.
tags: [transactions]
parameters:
- { name: wallet_id, in: query, required: false, schema: { type: string, format: uuid }, description: Filter by wallet ID }
- { name: flow, in: query, required: false, schema: { type: string, enum: [incoming, outgoing] }, description: Filter by flow direction }
- { name: asset_id, in: query, required: false, schema: { type: array, items: { type: string, format: uuid } }, description: Filter by asset ID (repeatable) }
- { name: from_including, in: query, required: false, schema: { type: string, format: date-time }, description: Transactions credited at >= date }
- { name: to_excluding, in: query, required: false, schema: { type: string, format: date-time }, description: Transactions credited at < date }
- { name: before, in: query, required: false, schema: { type: string }, description: Return page before cursor }
- { name: after, in: query, required: false, schema: { type: string }, description: Return page after cursor }
- { name: page_size, in: query, required: false, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: Items per page }
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionPage'
'401': { $ref: '#/components/responses/Unauthorized' }
'500': { $ref: '#/components/responses/ServerError' }
/v1/assets/{asset_id}:
get:
operationId: getAsset
summary: Get asset
description: Get asset information (name, symbol) by asset ID.
tags: [assets]
parameters:
- { name: asset_id, in: path, required: true, schema: { type: string, format: uuid }, description: Asset ID }
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: object
properties:
data: { $ref: '#/components/schemas/Asset' }
'401': { $ref: '#/components/responses/Unauthorized' }
'404': { $ref: '#/components/responses/NotFound' }
'500': { $ref: '#/components/responses/ServerError' }
/v1/ticker:
get:
operationId: getTicker
summary: Get ticker prices
description: Returns current prices for all available assets. Cursor paginated.
tags: [market-data]
parameters:
- { name: page_size, in: query, required: false, schema: { type: integer, maximum: 500 }, description: Items per page }
- { name: cursor, in: query, required: false, schema: { type: string }, description: Cursor for next page }
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/TickerPage'
'401': { $ref: '#/components/responses/Unauthorized' }
'500': { $ref: '#/components/responses/ServerError' }
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-Api-Key
description: Bitpanda API key. Generate one at https://web.bitpanda.com/my-account/apikey
responses:
Unauthorized:
description: Invalid credentials / access token
NotFound:
description: Resource not found
ServerError:
description: Internal server error
schemas:
CursorPage:
type: object
properties:
start_cursor: { type: string }
end_cursor: { type: string }
has_previous_page: { type: boolean }
has_next_page: { type: boolean }
page_size: { type: integer, example: 25 }
Wallet:
type: object
properties:
wallet_id: { type: string, format: uuid }
asset_id: { type: string, format: uuid }
wallet_type: { type: [string, "null"], enum: [STAKING, CRYPTO_INDEX, null] }
index_asset_id: { type: [string, "null"], format: uuid }
last_credited_at: { type: string, format: date-time }
balance: { type: number, example: 1.23456789 }
WalletPage:
allOf:
- $ref: '#/components/schemas/CursorPage'
- type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Wallet' }
Transaction:
type: object
properties:
transaction_id: { type: string, format: uuid }
operation_id: { type: string, format: uuid }
asset_id: { type: string, format: uuid }
account_id: { type: string, format: uuid }
wallet_id: { type: string, format: uuid }
asset_amount: { type: number, example: 0.5 }
fee_amount: { type: number, example: 0.001 }
operation_type: { type: string, description: "buy | sell | deposit | withdrawal | transfer | staking, etc." }
transaction_type: { type: [string, "null"] }
flow: { type: string, enum: [incoming, outgoing] }
credited_at: { type: string, format: date-time }
compensates: { type: [string, "null"], format: uuid, description: Links to a reversed/corrected transaction }
trade_id: { type: [string, "null"], format: uuid, description: Present when the transaction resulted from a trade }
TransactionPage:
allOf:
- $ref: '#/components/schemas/CursorPage'
- type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Transaction' }
Asset:
type: object
properties:
id: { type: string, format: uuid }
name: { type: string, example: Bitcoin }
symbol: { type: string, example: BTC }
Ticker:
type: object
properties:
id: { type: string, format: uuid }
symbol: { type: string, example: BTC }
type: { type: string, example: cryptocoin }
currency: { type: string, example: EUR }
price: { type: string, example: "95000.00000000" }
price_change_day: { type: string, example: "1.33" }
TickerPage:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Ticker' }
next_cursor: { type: string }
has_next_page: { type: boolean }