Skip to content

Repository files navigation

Bitpanda Portfolio for Home Assistant

A read-only custom integration for Bitpanda's new Public API. One config entry represents one Bitpanda account and exposes portfolio totals plus per-asset balances, valuation, acquisition price, and return metrics.

This is deliberately separate from defi_portfolio: Bitpanda is a centralized-custody account, not a wallet on one EVM chain.

API contract

The integration uses only the new API at https://api.public.bitpanda.com:

  • GET /v1/portfolio supplies balances, invested amounts, average buy prices, current values, total returns, and return percentages.
  • GET /v1/assets supplies stable asset UUIDs, names, symbols, types, and groups.
  • GET /v1/currencies resolves EUR and its stable UUID.
  • GET /v1/earn/configs supplies APR, mode/type, enabled, and sold-out status for Earn products.

The integration does not reconstruct cost basis from trades. Bitpanda's own portfolio accounting remains authoritative. Missing API values remain unavailable. The client accepts both the camelCase field names in the published OpenAPI schema and the snake_case field names currently returned by the live API.

Installation

Add this repository to HACS as a custom integration repository, install Bitpanda Portfolio, and restart Home Assistant. Then add the integration from Settings → Devices & services → Add integration.

Create an API key in Bitpanda → Account Settings → API with only the Read scope. Paste it into the config flow. The key is stored as config-entry secret, sent only as x-api-key, and redacted from diagnostics.

Entities

Portfolio entities:

  • API status (complete, partial, or unavailable) with explicit errors
  • current value
  • invested amount
  • total return
  • total return percentage

Each discovered asset exposes:

  • amount, available amount, and derived committed amount/percentage
  • invested amount
  • average buy price
  • current value and derived current price
  • total return and total return percentage
  • Earn APR when exactly one configuration exists
  • an Earn availability binary sensor

Earn availability means that at least one configuration is enabled and not sold out. It does not guarantee regional or account eligibility. STAKING_EARN denotes proof-of-stake products and STABLE_COIN_EARN denotes Bitpanda's stablecoin lending product. FLEXIBLE and LOCKED are exposed as API-native attributes; the API does not supply the corresponding unlock duration.

Committed amount is calculated as balance - available_balance, clamped at zero. It is deliberately not named "staked amount" because pending account restrictions could produce the same balance difference.

Discovery runs on every refresh. A non-zero asset first returned after setup is added automatically with the complete sensor set above. Fiat cash balances are also exposed; reporting-currency cash contributes to current portfolio value but is excluded from investment cost and return totals because Bitpanda does not provide performance fields for cash.

Entity discovery does not depend on generated entity IDs. Every entity exposes integration_domain, config_entry_id, resource_type, resource_id, and metric_id; asset entities also expose asset_id and asset_symbol.

Zero-balance holdings are hidden by default and can be enabled in integration options. A hidden zero-balance asset will be discovered automatically if its balance later becomes non-zero. The default polling interval is 15 minutes, with a minimum of 5 minutes. This is well below Bitpanda's documented read limit of 300 requests per minute and 3,000 per hour.

Current limitations

  • Display currency is EUR because the initial use case and source portfolio use EUR. The API model keeps the stable currency UUID so additional currencies can be added without changing entity identity.
  • No custom Lovelace card is included initially. Standard Home Assistant entity, gauge, statistics, and history cards cover these sensors well.
  • Portfolio history and operations endpoints are not polled. Recorder provides Home Assistant history from the current snapshot onward.
  • Earn reward history is not aggregated yet. The operations endpoint can support this later without changing the current entity identities.

Development

uv sync --locked --dev
uv run ruff check custom_components tests tests_ha
uv run ruff format --check custom_components tests tests_ha
uv run pytest -q

uv sync creates the repository-local .venv from the committed uv.lock.

License

MIT

About

Read-only Bitpanda Public API portfolio integration for Home Assistant

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages