From cf32fd5e4ac76a5bef209416d54e218ca994a255 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 21:30:04 +0000
Subject: [PATCH 1/5] Update providers/onchain-wallets.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
providers/onchain-wallets.mdx | 131 ++++++++++++++++++++++++++++++++++
1 file changed, 131 insertions(+)
create mode 100644 providers/onchain-wallets.mdx
diff --git a/providers/onchain-wallets.mdx b/providers/onchain-wallets.mdx
new file mode 100644
index 0000000..95aea79
--- /dev/null
+++ b/providers/onchain-wallets.mdx
@@ -0,0 +1,131 @@
+---
+title: Self-custody wallets
+description: Track Bitcoin, EVM, and Solana wallets natively without a third-party provider
+---
+
+Sure can track self-custody wallets directly — no third-party provider account required. You paste a public address, Sure reads the on-chain state, and your holdings and transaction history appear alongside your other accounts.
+
+Supported chains:
+
+| Chain | Networks |
+|-------|----------|
+| Bitcoin | Mainnet (P2PKH, P2SH, bech32 segwit, bech32m taproot) |
+| EVM | Ethereum, Arbitrum, Base, Optimism, Polygon, Avalanche |
+| Solana | Mainnet |
+
+## Prerequisites
+
+Before linking a wallet, make sure you have a crypto market data provider enabled. Without one, wallets are tracked by quantity only and valued at zero. Go to **Settings → Self-Hosting → Market data** to enable a provider.
+
+If your family currency is not USD, you also need an exchange rate provider configured. The crypto provider quotes in USD; a missing exchange rate means every wallet shows zero value regardless of holdings.
+
+
+Sure reads only public on-chain data. Never enter a seed phrase or private key anywhere in Sure.
+
+
+## Linking a wallet
+
+
+
+ Go to **Settings → Bank sync** and find **Self-custody wallets** under Available connections.
+
+
+ Enter a public wallet address. Sure detects which networks the address is active on.
+
+
+ If the address matches more than one chain (for example, a 0x address is valid on all EVM networks), Sure shows which networks have activity. Select the correct one. If no network shows activity, you can still choose manually.
+
+
+ Sure lists the assets found at that address. Assets that can be priced are pre-checked; spam airdrops and unrecognized tokens are listed but unchecked. Tick the assets you want to track and click **Connect**.
+
+
+
+Each selected asset becomes a separate crypto wallet account under the **Crypto** section of your accounts list.
+
+## Managing a linked wallet
+
+From **Settings → Bank sync → Self-custody wallets**, you can:
+
+- **Sync** — Manually trigger a sync for all linked addresses
+- **Review tokens** — Reopen the asset selection screen to add or remove tracked assets
+- **Change address** — Update the address while keeping all existing accounts, holdings, and history intact
+- **Disconnect asset** — Stop tracking a single asset while leaving others in place
+- **Disconnect wallet** — Remove the provider link; existing accounts become manual accounts and stop updating
+
+## How syncing works
+
+Sure reads each linked address on a recurring schedule. For each sync:
+
+1. Balances are fetched from the chain's indexer (one request per address)
+2. Transaction history is fetched up to the configured page limit
+3. Only addresses whose on-chain state changed since the last sync are reprocessed — an idle wallet writes nothing
+
+### Pricing and cost basis
+
+Movements are matched against price history on the exact date of the transfer. When a price is available, the movement is recorded as a trade (Buy or Sell) with a cost basis. When no price is available, a display-only entry is recorded instead.
+
+If price history is added later (for example, after enabling a market data provider), display-only entries are automatically upgraded to priced trades on the next sync.
+
+### History truncation
+
+Sure reads up to `ONCHAIN_HISTORY_MAX_PAGES` pages of history per address (default: 10, maximum: 200). If an address has more history than the budget allows, the affected accounts are marked as having incomplete history and a note appears in **Manage wallets**. Balances are always accurate — they come from an address summary, not from history.
+
+### Token cap
+
+Up to `ONCHAIN_MAX_TOKENS_PER_ADDRESS` tokens are surfaced per address (default: 200, maximum: 5,000). On EVM networks, tokens are ranked by market cap so the most significant assets are always included. Assets you are already tracking are never dropped by the cap.
+
+## Configuration
+
+These environment variables are available for self-hosted deployments:
+
+| Variable | Default | Description |
+|----------|---------|-------------|
+| `ONCHAIN_HISTORY_MAX_PAGES` | `10` | Maximum pages of transaction history to read per address per sync. Capped at 200. |
+| `ONCHAIN_MAX_TOKENS_PER_ADDRESS` | `200` | Maximum tokens surfaced per address. Capped at 5,000. |
+| `ONCHAIN_DETECTION_TIMEOUT` | `10` | Seconds allowed for chain detection during linking. |
+
+## Limitations
+
+
+
+ Sure tracks one address at a time. A typical HD wallet (hardware wallet, mobile wallet) derives thousands of addresses from a single seed phrase and spreads funds across them. Tracking a single derived address under-reports such a wallet. Extended key (xpub) support is not available.
+
+
+
+ The crypto market data provider quotes assets by symbol. A symbol is not a unique identifier — some tokens cannot be priced because the provider does not list them, not because the balance is wrong. A zero value next to a token you know is worth something means the provider does not cover it.
+
+ On Solana, only tokens verified by the Jupiter token list are priced. Unverified mints are tracked by quantity only.
+
+
+
+ Staked ETH, liquidity pool tokens, lending positions, and Solana stake accounts are not visible. A wallet holding most of its value in a staking protocol or DeFi protocol will report only the portion held directly at the address.
+
+ For DeFi tracking, use the [CoinStats](/providers/coinstats) integration instead.
+
+
+
+ The built-in EVM adapter covers Ethereum, Arbitrum, Base, Optimism, Polygon, and Avalanche. Other EVM-compatible chains are not supported natively.
+
+
+
+## Troubleshooting
+
+
+
+ Check **Settings → Self-Hosting → Market data** and confirm a crypto-capable provider is enabled. If your family currency is not USD, also confirm an exchange rate provider is configured.
+
+ For individual tokens showing zero, the provider may not list that token. This is a coverage limitation, not a sync error — the quantity is still tracked correctly.
+
+
+
+ If the manage screen shows incomplete history for an address, the address has more transactions than the current page budget allows. Increase `ONCHAIN_HISTORY_MAX_PAGES` to read further back. Note that a higher limit increases the number of requests per sync.
+
+
+
+ Detection probes each candidate network with a short timeout. A slow or rate-limited explorer may not respond in time and is reported as having no activity. Try linking again, or select the network manually from the chain chooser.
+
+
+
+ If an asset you were tracking no longer appears, check whether the token cap was reached for that address. Assets outside the cap are not zeroed if they were already tracked — but if the cap was recently lowered or the address gained many new tokens, a previously tracked asset could fall outside it. Review tokens from the manage screen to re-add it.
+
+
From 4d5af269a7118f3fc9b378c701deafd73a924be2 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 21:30:26 +0000
Subject: [PATCH 2/5] Update self-hosting.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
self-hosting.mdx | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/self-hosting.mdx b/self-hosting.mdx
index 0d79c4f..1cfc840 100644
--- a/self-hosting.mdx
+++ b/self-hosting.mdx
@@ -540,6 +540,38 @@ docker compose logs worker
Look for connection timeouts or Redis communication failures. The `sure-worker` container requires Redis to process CSV imports.
+## System health
+
+Super admins can check the health of the background worker from **Settings → Advanced → System health** (`/settings/admin/system_health`). The page shows:
+
+- Number of running Sidekiq worker processes
+- Last heartbeat timestamp
+- Maximum queue latency
+- Job counters (processed, failed, enqueued)
+- Per-queue depth
+
+### Worker health banner
+
+When the Sidekiq worker is not processing jobs, a banner appears at the top of every page for super admins. The banner explains that data may be stale and links directly to the system health page.
+
+Common reasons the worker may be unhealthy:
+
+- The `worker` container is not running — verify with `docker compose ps`
+- Redis is unreachable — check `docker compose logs worker` for connection errors
+- The worker process has stalled — restart with `docker compose restart worker`
+
+### Tuning health check thresholds
+
+The health check uses conservative defaults to avoid false positives during restarts. You can adjust them with environment variables:
+
+| Variable | Default | Description |
+|----------|---------|-------------|
+| `SIDEKIQ_HEALTH_HEARTBEAT_TIMEOUT` | `120` | Seconds before a worker process is considered stale |
+| `SIDEKIQ_HEALTH_LATENCY_THRESHOLD` | `300` | Seconds of queue latency before the worker is considered unhealthy |
+| `SIDEKIQ_HEALTH_CACHE_TTL` | `60` | Seconds to cache the health snapshot between requests |
+
+The system health page always bypasses the cache so you see fresh state immediately after restarting the worker.
+
## Getting help
If you find bugs or have feature requests:
From e3d1437b6438e530eef102d4f6bad583bcb412c3 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 21:30:37 +0000
Subject: [PATCH 3/5] Update providers/overview.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
providers/overview.mdx | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/providers/overview.mdx b/providers/overview.mdx
index 2b448fe..846894f 100644
--- a/providers/overview.mdx
+++ b/providers/overview.mdx
@@ -76,6 +76,14 @@ Available providers include Yahoo Finance, Twelve Data, Tiingo, EODHD, Alpha Van
## Cryptocurrency providers
+### Self-custody wallets
+
+Sure can track **Bitcoin, EVM, and Solana** self-custody wallets natively — no third-party provider account required. Paste a public address and Sure reads balances and transaction history directly from the chain.
+
+- **Best for**: Users who hold crypto in their own wallets (hardware wallets, software wallets, etc.)
+- **Pricing**: Free (no API key required; optional Etherscan key for higher rate limits on Ethereum)
+- **Documentation**: [Self-custody wallets](/providers/onchain-wallets)
+
### Binance
**Binance** integration connects directly to your Binance account to sync spot, margin, and earn balances along with trading history.
From 02f493d6c4aebf1625898966f8ddc3b08ef54aa2 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 21:30:53 +0000
Subject: [PATCH 4/5] Update docs.json
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
docs.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs.json b/docs.json
index 00fee1a..144970a 100644
--- a/docs.json
+++ b/docs.json
@@ -80,6 +80,7 @@
"providers/binance",
"providers/coinbase",
"providers/coinstats",
+ "providers/onchain-wallets",
"providers/sophtron"
]
},
From 8b2b06de1822b76e211803f43f8639f77e653c46 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 21:31:08 +0000
Subject: [PATCH 5/5] Update authentication/user-management.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
authentication/user-management.mdx | 2 ++
1 file changed, 2 insertions(+)
diff --git a/authentication/user-management.mdx b/authentication/user-management.mdx
index e3042d9..5e5c3ef 100644
--- a/authentication/user-management.mdx
+++ b/authentication/user-management.mdx
@@ -256,6 +256,8 @@ To delete a user:
+When a user is removed, Sure deactivates the account before deletion. Any active sessions are invalidated and new tokens cannot be issued for the deactivated account. If a session creation attempt occurs for a deleted user (for example, from a cached token), it is rejected rather than allowed through.
+
## User security settings
### Connected accounts in user settings