Map the /v1/user/* Pro API onto GoldRush, including what does not port.
DeBank Cloud's Pro API is a wallet-centric REST surface at pro-openapi.debank.com, authenticated with an AccessKey header, organised as /v1/user/* with paired single-chain and all-chain variants. Token balances, NFTs, history, and approvals map cleanly onto GoldRush. DeBank's protocol-position endpoints (the complex_protocol_list family at the core of its product) do not. This guide is explicit about that.
The cross-cutting differences. Miss one and every call fails the same way, so fix these first.
| DeBank Cloud | GoldRush | |
|---|---|---|
| Base URL | https://pro-openapi.debank.com | https://api.covalenthq.com |
| Auth | AccessKey: <your_accesskey> | Authorization: Bearer <GOLDRUSH_API_KEY> |
| Chain addressing | chain_id query param (eth, bsc, matic) with paired all_* endpoints for cross-chain reads. | Chain slug in the path (eth-mainnet, bsc-mainnet, matic-mainnet), or /v1/allchains/* for cross-chain. |
| Response envelope | Bare JSON array or object per endpoint, no common wrapper. | { data: { items: [...] }, error, error_message, error_code } on every endpoint. |
| Pagination | start_time / page_count cursors on history endpoints. | Page number in the path: .../transactions_v3/page/{page}/. Page 0 is the OLDEST page. |
Every DeBank Cloud endpoint we could source, with its GoldRush equivalent. Rows marked No equivalent are gaps we won't paper over, so read those first. Verify a row against the DeBank Cloud docs before relying on it.
| Use case | DeBank Cloud | GoldRush | Parity |
|---|---|---|---|
| Token balances on one chain | GET /v1/user/token_list | GET /v1/{chainName}/address/{walletAddress}/balances_v2/ | Direct equivalent |
| Token balances across chains | GET /v1/user/all_token_list | GET /v1/allchains/address/{walletAddress}/balances/ | Direct equivalent |
| Single token balanceFilter the items array client-side; there is no single-token variant. | GET /v1/user/token | GET /v1/{chainName}/address/{walletAddress}/balances_v2/ | Needs work |
| Native balance on a chain | GET /v1/user/chain_balance | GET /v1/{chainName}/address/{walletAddress}/balances_native/ | Direct equivalent |
| Chains a wallet has used | GET /v1/user/used_chain_list | GET /v1/address/{walletAddress}/activity/ | Direct equivalent |
| Total net worth across chainsSum quote across items. DeBank returns the total pre-computed and includes protocol positions in it, so the two numbers will not match for a DeFi-heavy wallet. | GET /v1/user/total_balance | GET /v1/allchains/address/{walletAddress}/balances/ | Needs work |
| Protocol positions, one chainNo equivalent. This is DeBank's core strength and GoldRush does not replace it. | GET /v1/user/complex_protocol_list | None | No equivalent |
| Protocol positions, all chains | GET /v1/user/all_complex_protocol_list | None | No equivalent |
| Simplified protocol balancesLP and receipt token values show up in balances_v2 as tokens, but without the protocol attribution. | GET /v1/user/simple_protocol_list, /v1/user/all_simple_protocol_list | None | No equivalent |
| Positions in one protocol | GET /v1/user/protocol | None | No equivalent |
| Transaction history, one chain | GET /v1/user/history_list | GET /v1/{chainName}/address/{walletAddress}/transactions_v3/page/{page}/ | Direct equivalent |
| Transaction history, all chains | GET /v1/user/all_history_list | GET /v1/allchains/transactions/ | Direct equivalent |
| NFTs on one chain | GET /v1/user/nft_list | GET /v1/{chainName}/address/{walletAddress}/balances_nft/ | Direct equivalent |
| NFTs across chainsCall per chain; there is no allchains NFT endpoint. | GET /v1/user/all_nft_list | GET /v1/{chainName}/address/{walletAddress}/balances_nft/ | Needs work |
| Token approvals | GET /v1/user/token_authorized_list | GET /v1/{chainName}/approvals/{walletAddress}/ | Direct equivalent |
| NFT approvalsApprovals covers token allowances; NFT operator approvals are not broken out separately. | GET /v1/user/nft_authorized_list | GET /v1/{chainName}/approvals/{walletAddress}/ | Needs work |
| Net worth curvePer-chain, and 30-day granularity rather than DeBank's 24-hour curve. | GET /v1/user/total_net_curve, /v1/user/chain_net_curve | GET /v1/{chainName}/address/{walletAddress}/portfolio_v2/ | Needs work |
| Historical balances by date | Not available | GET /v1/{chainName}/address/{walletAddress}/historical_balances/ | GoldRush advantage |
| Bitcoin balances | Not available | GET /v1/btc-mainnet/address/{walletAddress}/balances_v2/ | GoldRush advantage |
| Contract log events | Not available | GET /v1/{chainName}/events/address/{contractAddress}/ | GoldRush advantage |
| Token holders | Not available | GET /v1/{chainName}/tokens/{tokenAddress}/token_holders_v2/ | GoldRush advantage |
Sources: docs.cloud.debank.com and goldrush.dev for DeBank Cloud, the GoldRush docs for GoldRush.
Code you can paste. On the left, what you have on DeBank Cloud; on the right, the GoldRush replacement.
DeBank Cloud
// BEFORE -- DeBank: AccessKey header, chain_id query param, bare array back.
const res = await fetch(
"https://pro-openapi.debank.com/v1/user/token_list" +
"?id=" + address + "&chain_id=eth&is_all=false",
{ headers: { AccessKey: process.env.DEBANK_ACCESS_KEY } }
);
const tokens = await res.json(); // array, no wrapperGoldRush
// AFTER -- GoldRush: Bearer header, chain in the path, wrapped envelope.
const res = await fetch(
"https://api.covalenthq.com/v1/eth-mainnet/address/" + address + "/balances_v2/",
{ headers: { Authorization: "Bearer " + process.env.GOLDRUSH_API_KEY } }
);
const { data, error, error_message } = await res.json();
if (error) throw new Error(error_message);
const tokens = data.items;DeBank Cloud
// BEFORE -- DeBank pairs each endpoint with an all_* variant.
const res = await fetch(
"https://pro-openapi.debank.com/v1/user/all_token_list?id=" + address,
{ headers: { AccessKey: process.env.DEBANK_ACCESS_KEY } }
);GoldRush
// AFTER -- GoldRush uses a separate allchains path family.
const res = await fetch(
"https://api.covalenthq.com/v1/allchains/address/" + address + "/balances/",
{ headers: { Authorization: "Bearer " + process.env.GOLDRUSH_API_KEY } }
);DeBank Cloud
// BEFORE -- DeBank's total_balance includes protocol positions
// (staking, lending, LPs) in the total.
const res = await fetch(
"https://pro-openapi.debank.com/v1/user/total_balance?id=" + address,
{ headers: { AccessKey: process.env.DEBANK_ACCESS_KEY } }
);
const { total_usd_value } = await res.json();GoldRush
// AFTER -- GoldRush sums token balances only. For a DeFi-heavy wallet
// this will read LOWER than DeBank's figure, because protocol positions
// are not decoded per protocol. Verify against a known wallet before
// putting this number in front of a user.
const res = await fetch(
"https://api.covalenthq.com/v1/allchains/address/" + address + "/balances/",
{ headers: { Authorization: "Bearer " + process.env.GOLDRUSH_API_KEY } }
);
const { data, error, error_message } = await res.json();
if (error) throw new Error(error_message);
const total_usd_value = data.items.reduce((sum, t) => sum + (t.quote ?? 0), 0);The port in order. Each step is small enough to ship and check on its own.
Replace AccessKey: <key> with Authorization: Bearer <GOLDRUSH_API_KEY>.
DeBank's chain_id=eth becomes eth-mainnet in the GoldRush path. Build the map from GET /v1/chains/ rather than hardcoding it.
DeBank pairs every endpoint with an all_* variant. In GoldRush the cross-chain reads live under /v1/allchains/*, and there are fewer of them. NFTs, for instance, are per-chain only.
DeBank returns bare arrays. GoldRush wraps everything in { data: { items }, error, error_message }, so add the unwrap and the error check.
Grep for complex_protocol_list, simple_protocol_list, and /v1/user/protocol. Each one is a feature that does not port. Decide per call site whether to drop it, rebuild it, or keep DeBank alongside.
Compare DeBank total_balance against the summed GoldRush quote for several real wallets. Expect a gap on DeFi-heavy addresses and decide how to present it before launch.
If one of these is load-bearing for your product, don't migrate that surface. Running both providers is a legitimate answer.
The complex_protocol_list and simple_protocol_list families have no GoldRush equivalent. If your product shows positions attributed per protocol (Aave supplied, Lido staked, Uniswap LP), GoldRush will not reproduce it and you should not migrate that surface.
DeBank folds protocol positions into total_balance. Summing GoldRush token quotes gives a lower number for DeFi-heavy wallets. This is a real behavioural change, not a rounding difference. Check it against a known wallet before shipping.
GoldRush has no one-shot realized/unrealized PnL endpoint. You can compute it from transactions_v3 plus historical pricing, but that is your code to write, not a field to read. If PnL is the product, budget for it.
GoldRush is request/response. There is no subscription endpoint that pushes transactions to a callback URL, so any real-time path becomes polling on your side.
Each of these maps to a row above or to a documented GoldRush capability.
Live chain list at /v1/chains/ and per-chain sync state at /v1/chains/status/. Bitcoin is first-class with its own balances, historical balances, and HD-wallet endpoints. Most wallet APIs are EVM-only or EVM+Solana.
Raw and decoded log events by contract or topic, token holder lists at a block height, and pool-level pricing. Wallet-portfolio APIs generally stop at the wallet boundary and cannot answer contract-level questions.
An autonomous agent can pay per request from an onchain wallet without registering an account or holding a key. If you are building agents rather than a dashboard, this removes the credential provisioning step entirely.
GoldRush serves JSON-RPC across 30+ EVM chains, so a decoded-data provider and a node provider can collapse into one vendor and one bill.
A free API key comes with 25,000 credits and no card. Or skip signup and pay per request with x402.
Every Zerion v1 wallet endpoint, mapped to its GoldRush equivalent.
Sim shut down on 1 August 2026. Here is where each endpoint goes.
Swap POST-with-key-in-URL Data APIs for flat GET endpoints.