Bitpanda Platform API

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). X-Api-Key header auth, cursor pagination.

OpenAPI Specification

bitpanda-platform-openapi.yml Raw ↑
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 }