From c5e9faa5b45ba729663e9a9f45dca8559d4bcd53 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 19:29:07 +0000
Subject: [PATCH 1/9] Update providers/onchain-wallets.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
providers/onchain-wallets.mdx | 165 ++++++++++++++++++++++++++++++++++
1 file changed, 165 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..047f397
--- /dev/null
+++ b/providers/onchain-wallets.mdx
@@ -0,0 +1,165 @@
+---
+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. Link a wallet address and Sure reads balances and transaction history from public blockchain explorers, then creates holdings and entries in your crypto wallet account.
+
+## Supported networks
+
+| Network | Address formats |
+| --- | --- |
+| Bitcoin | Base58 (P2PKH/P2SH), bech32 (segwit), bech32m (taproot) |
+| Ethereum | EVM hex (0x…) |
+| Base | EVM hex (0x…) |
+| Arbitrum | EVM hex (0x…) |
+| Optimism | EVM hex (0x…) |
+| Polygon | EVM hex (0x…) |
+| Zora | EVM hex (0x…) |
+| Solana | Base58 public key |
+
+## Linking a wallet
+
+
+
+ Go to **Settings → Bank sync** and find **Self-custody wallets** under Available connections.
+
+
+ Enter a wallet address. Sure validates the format and checks each candidate network for activity.
+
+
+ If the address format matches more than one network (for example, a `0x` address is valid on all EVM chains), Sure shows which networks detected activity. Select the network you want to track. You can link the same address on multiple networks separately.
+
+
+ Sure lists the assets found at that address. Assets that can be priced are pre-selected; spam airdrops are listed but unchecked. Tick the assets you want to import and click **Connect**.
+
+
+
+
+Never enter a seed phrase or private key. Sure only needs a public wallet address.
+
+
+## Pricing requirements
+
+On-chain balances are tracked by quantity regardless of your pricing setup. To see a dollar value next to each holding, you need:
+
+1. **A crypto market data provider** — Sure uses a securities provider that quotes crypto symbols (for example, Synth Finance). Enable one from **Settings → Self-Hosting → Market data**.
+2. **An exchange rate provider** — If your family currency is not USD, Sure also needs an exchange rate to convert the USD-quoted price. [Frankfurter](https://www.frankfurter.app/) is a free option that requires no API key.
+
+If neither is configured, every wallet holding shows a quantity of zero value. A warning banner on the wallet panel explains which setting is missing and links directly to where you can fix it.
+
+
+On a self-hosted instance you can enable the crypto provider in one click from the warning banner itself. On a managed instance, contact your operator.
+
+
+## What gets imported
+
+### Balances
+
+Sure reads the current balance for every tracked asset at each sync. Balances come from an address summary endpoint and are always accurate, even when transaction history is incomplete.
+
+### Transaction history
+
+Sure imports transfers as trades when a price is available for that day, so cost basis reconstructs back to acquisition. When no price is available, the transfer is recorded as a display-only entry (excluded from cost basis) and upgraded automatically once price history is backfilled.
+
+History is read up to a configurable page depth (default: 10 pages). See [history depth](#history-depth) below.
+
+### Asset symbols
+
+- **EVM tokens**: Symbols come from the Blockscout indexer. Bridged and wrapped variants (USDC.e, WETH, USDbC) are mapped to their canonical asset so they share price history with the base token.
+- **Solana SPL tokens**: Symbols come from the [Jupiter verified token list](https://jup.ag/). Only verified mints are named; unverified mints use a placeholder (`SPL:abcd…wxyz`) and are tracked by quantity only.
+
+## Limitations
+
+### Bitcoin: single address only
+
+Bitcoin HD wallets derive thousands of addresses from one seed. Sure tracks one address at a time, so a wallet whose funds are spread across derived addresses will be under-reported. Extended key (xpub) support is not available yet.
+
+### DeFi positions not tracked
+
+Staked ETH, liquidity pool tokens, Solana stake accounts, and other DeFi positions are not visible. Sure reads token balances at the wallet address; assets held inside a protocol contract are not included.
+
+### Pricing coverage
+
+The crypto provider quotes assets by symbol. A token whose symbol is not in the provider's list will show a zero value even if the balance is correct. A zero next to a token you know is worth something means the provider does not list it—the balance itself is accurate.
+
+### Token cap
+
+Sure surfaces at most 200 tokens per address by default (configurable with `ONCHAIN_MAX_TOKENS_PER_ADDRESS`, max 5,000). On EVM networks, tokens are ranked by market cap so real assets stay and airdrops fall off. On Solana, tokens are ordered by mint address. Assets you have already tracked are never dropped by the cap.
+
+## Managing a linked wallet
+
+Open **Settings → Bank sync → Self-custody wallets** to manage your connections.
+
+### Review tokens
+
+Reopen the asset selection screen to add or remove tracked tokens for an address. The address itself is not editable from this screen.
+
+### Change address
+
+Update the wallet address while keeping all existing accounts, holdings, entries, and balance history intact.
+
+### Disconnect one asset
+
+Remove a single token from tracking. The account remains as a manual account that stops updating.
+
+### Disconnect wallet
+
+Remove all assets at an address. Other addresses in the same connection are not affected. Accounts are kept as manual accounts.
+
+## Self-hosting configuration
+
+### History depth
+
+Control how many pages of transaction history are read per sync:
+
+```txt
+ONCHAIN_HISTORY_MAX_PAGES=10 # default; max 200
+```
+
+When history is truncated, the affected address is flagged in **Manage wallets** and a note is added to the debug log. Balances are never affected by truncation.
+
+### Token cap
+
+```txt
+ONCHAIN_MAX_TOKENS_PER_ADDRESS=200 # default; max 5000
+```
+
+### Detection timeout
+
+Controls how long Sure waits for each network to respond during the address detection step (linking flow only):
+
+```txt
+ONCHAIN_DETECTION_TIMEOUT=10 # seconds; default 10
+```
+
+### Data sources
+
+| Network | Balance source | History source |
+| --- | --- | --- |
+| Bitcoin | [mempool.space](https://mempool.space) | [mempool.space](https://mempool.space) |
+| EVM (all chains) | Blockscout (public instance per chain) | Blockscout; Etherscan when a key is configured |
+| Solana | Public Solana RPC | Public Solana RPC |
+
+#### Optional Etherscan key
+
+An Etherscan API key raises the rate limit for Ethereum transaction history. It does not affect balance reads or other EVM chains.
+
+```txt
+ETHERSCAN_API_KEY=your-key-here
+```
+
+#### Pointing to your own indexer
+
+The Blockscout and Solana RPC endpoints are not currently configurable via environment variables. To use a private indexer, you would need to modify the adapter configuration in the source code.
+
+## Troubleshooting
+
+| Symptom | Likely cause |
+| --- | --- |
+| All holdings show zero value | No crypto market data provider enabled |
+| Holdings show zero value in non-USD currency | No exchange rate provider configured |
+| History is incomplete | History depth cap reached; check **Manage wallets** for the truncation flag |
+| A token you hold is missing | Token cap reached, or the token was not ticked during linking—use **Review tokens** to add it |
+| Bitcoin wallet shows no transfers | Address may have been entered in uppercase bech32; try re-linking with the lowercase form |
+| Sync shows "explorer could not be reached" | The public indexer was temporarily unavailable; the next scheduled sync will retry |
From 4e9bcdf1106cde3fe431cd5fa77be357ff48d0b8 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 19:29:18 +0000
Subject: [PATCH 2/9] Update self-hosting.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
self-hosting.mdx | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/self-hosting.mdx b/self-hosting.mdx
index 0d79c4f..a0de232 100644
--- a/self-hosting.mdx
+++ b/self-hosting.mdx
@@ -481,6 +481,30 @@ For production deployments:
- Use `SMTP_OPENSSL_VERIFY_MODE=peer`
- If you must use self-signed certificates, provide a CA bundle via `SSL_CA_FILE`
+## System health
+
+Self-hosted instances include an admin system health page at **Settings → Advanced → System health** (visible to super-admins only). It shows live Sidekiq state: worker process count, last heartbeat, queue latency, job counters, and per-queue depth.
+
+### Sidekiq health banner
+
+If the Sidekiq worker container is not running or has stopped processing jobs, a warning banner appears at the top of every page for super-admins. The banner explains that background jobs are not running and links to the system health page.
+
+Common reasons Sidekiq may be unhealthy:
+
+- The `worker` container is not started (run `docker compose up -d worker`)
+- Redis is unreachable
+- The worker process has stalled (restart with `docker compose restart worker`)
+
+The health check is cached for 60 seconds by default. You can tune the thresholds with environment variables:
+
+```txt
+SIDEKIQ_HEALTH_HEARTBEAT_TIMEOUT=120 # seconds before a process is considered stale (default: 120)
+SIDEKIQ_HEALTH_LATENCY_THRESHOLD=300 # seconds of queue latency before flagging unhealthy (default: 300)
+SIDEKIQ_HEALTH_CACHE_TTL=60 # seconds to cache the health snapshot (default: 60)
+```
+
+The system health page always bypasses the cache so you see fresh state immediately after restarting the worker.
+
## Troubleshooting
### Database connection errors
From c6d3070ee2c7852b91c5e1c112595cad5b22b391 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 19:29:26 +0000
Subject: [PATCH 3/9] 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..b332f0e 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 (native)
+
+Sure can track Bitcoin, EVM (Ethereum, Base, Arbitrum, Optimism, Polygon, Zora), and Solana wallets directly from public blockchain explorers—no third-party provider account required.
+
+- **Best for**: Users who hold crypto in self-custody wallets and want balances and transfer history without sharing credentials with a third party
+- **Pricing**: Free; optional Etherscan API key for higher rate limits on Ethereum history
+- **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 40e1f57d2898c85b2419ee4bc0fa8f2e0ad68109 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 19:29:37 +0000
Subject: [PATCH 4/9] 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..0e7783d 100644
--- a/docs.json
+++ b/docs.json
@@ -69,6 +69,7 @@
"pages": [
"providers/overview",
"providers/market-data",
+ "providers/onchain-wallets",
"providers/binance",
"providers/enable-banking",
"providers/lunchflow",
From c8ca1c588a6e9e5c1f3940e3c29e17229a4146f4 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 19:29:51 +0000
Subject: [PATCH 5/9] Update guide.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
guide.mdx | 1 +
1 file changed, 1 insertion(+)
diff --git a/guide.mdx b/guide.mdx
index 537cad9..42d3f33 100644
--- a/guide.mdx
+++ b/guide.mdx
@@ -23,6 +23,7 @@ Complete the setup screens to configure your login details, personal information
The next sections cover how to manually add accounts and transactions. If you'd prefer to use an integration with a data provider, Sure supports:
+- [Self-custody wallets](/providers/onchain-wallets) — Bitcoin, EVM, and Solana wallets tracked natively
- [Binance](/providers/binance) (beta)
- [Coinbase](/providers/coinbase) (beta)
- [CoinStats](/providers/coinstats) (beta)
From d47a7fec8be0dcb638e3afcb17cb77db18195c53 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 19:30:00 +0000
Subject: [PATCH 6/9] Update guides/app-features/transactions.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
guides/app-features/transactions.mdx | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/guides/app-features/transactions.mdx b/guides/app-features/transactions.mdx
index 4e63e12..836e811 100644
--- a/guides/app-features/transactions.mdx
+++ b/guides/app-features/transactions.mdx
@@ -94,6 +94,33 @@ Sure prevents merges that would make the category hierarchy confusing or invalid
If a source category has subcategories and the target is a parent category, Sure reparents those subcategories under the target.
+## Transaction rules
+
+Rules let you automatically categorize, tag, and label transactions based on conditions. Go to **Settings → Rules** to create and manage rules.
+
+### Available conditions
+
+| Condition | Operators |
+| --- | --- |
+| Transaction name | Contains, does not contain, equals |
+| Amount | Greater than, less than, equals |
+| Account | Equal to |
+| Category | Equal to, is empty |
+| Tag | Equal to, is empty |
+| Merchant | Equal to, is empty |
+
+The **Tag** condition lets you match transactions that already have a specific tag applied. This is useful for chaining rules—for example, tagging a transaction first and then applying a category based on that tag.
+
+When combining multiple tag conditions with AND, each condition is evaluated independently, so a rule like "has tag A AND has tag B" correctly matches transactions that have both tags.
+
+### Available actions
+
+- Set category
+- Set merchant
+- Set tags
+- Set investment activity label
+- Exclude from budgets
+
## Related pages
- [Budgets](/guides/app-features/budgets)
From ea96fd7b3e584a3b61e44b70116f7317e21e2f8b Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 19:30:26 +0000
Subject: [PATCH 7/9] Update providers/up-bank.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
providers/up-bank.mdx | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
create mode 100644 providers/up-bank.mdx
diff --git a/providers/up-bank.mdx b/providers/up-bank.mdx
new file mode 100644
index 0000000..1f870a3
--- /dev/null
+++ b/providers/up-bank.mdx
@@ -0,0 +1,33 @@
+---
+title: "Up bank"
+description: "Sync your Up bank accounts and transactions into Sure"
+---
+
+Up is an Australian neobank. Sure connects to Up using a personal API token to sync account balances and transaction history.
+
+## Setting up Up bank
+
+
+
+ In the Up app, go to **Settings → API** and generate a personal access token. The token is shown once, so copy it before closing the screen.
+
+
+ In Sure, go to **Settings → Bank sync**, find the **Up** panel, and paste your token.
+
+
+ Sure discovers your Up accounts automatically. Link each one to an existing Sure account or create a new account from it.
+
+
+
+## Category mapping
+
+Sure maps Up's transaction categories to your Sure categories automatically during import. High-confidence mappings are applied when a matching Sure category exists in your family. Categories that have no reliable equivalent in Sure (such as Booze, Pets, Apps & Games, and Life Admin) are left uncategorized so you can apply your own rules or let the AI assistant categorize them.
+
+Category assignments are non-destructive: if you have already set or locked a category on a transaction, a re-sync will not overwrite it.
+
+If your family has no categories set up yet, transactions import uncategorized. Categories are applied once you set up your category structure through the normal flow.
+
+## Limitations
+
+- Read-only access; Sure cannot initiate payments or transfers through Up
+- Category mapping covers Up's standard categories; custom or regional categories may not map
From 5537d7509a0d521bbe3d897ff759661569a99b3c Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 19:30:31 +0000
Subject: [PATCH 8/9] 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 0e7783d..6a01ada 100644
--- a/docs.json
+++ b/docs.json
@@ -77,6 +77,7 @@
"providers/simplefin",
"providers/plaid",
"providers/redbark",
+ "providers/up-bank",
"providers/snaptrade",
"providers/binance",
"providers/coinbase",
From 9f94998b0ca5d88fe2ed37c4447a6cd0e56e8b08 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Sat, 22 Aug 2026 19:30:38 +0000
Subject: [PATCH 9/9] Update providers/overview.mdx
Generated-By: mintlify-agent
Mintlify-Source: dashboard-editor
---
providers/overview.mdx | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/providers/overview.mdx b/providers/overview.mdx
index b332f0e..8960d29 100644
--- a/providers/overview.mdx
+++ b/providers/overview.mdx
@@ -68,6 +68,12 @@ Available providers include Yahoo Finance, Twelve Data, Tiingo, EODHD, Alpha Van
### Australian users
+**Up bank** connects directly to your Up account using a personal API token, syncing balances and transaction history with automatic category mapping.
+
+- **Best for**: Up bank customers in Australia
+- **Pricing**: Free (requires an Up personal API token)
+- **Documentation**: [Up bank](/providers/up-bank)
+
**Redbark** connects Australian bank accounts through the Consumer Data Right (CDR) open banking framework, with read-only consented access.
- **Best for**: Users with Australian bank accounts