Skip to main content
If you’ve been calling Covalent’s GoldRush API (formerly the Covalent Unified API) for wallet balances, transactions, portfolio history, prices, or NFTs, the same data is available on Zerion API across 60+ EVM chains and Solana, usually in a single call, plus two things GoldRush doesn’t offer: DeFi protocol positions and wallet PnL. This guide shows the direct mapping for the main GoldRush endpoints, with copy-pasteable code for each. What you get with Zerion:
  • DeFi positions and PnL: GoldRush returns token balances and raw transactions but no DeFi protocol positions (staking, lending, LPs) and no wallet PnL. Zerion returns both, from /positions/ and /pnl.
  • One address, all chains: GoldRush’s core endpoints take a chainName in the path, one chain per call. Zerion returns every supported chain for an address in one call, filterable with filter[chain_ids].
  • Decoded, not raw: GoldRush transactions return log_events[] you interpret yourself. Zerion returns a decoded operation_type and a unified transfers[] array with token metadata and USD values inlined.
  • Decimal-adjusted amounts: GoldRush balances are raw integer strings you divide by 10^contract_decimals. Zerion returns quantity.float alongside the raw value.

Endpoint parity

Prefer not to write code? The Zerion CLI wraps the same endpoints with a one-shot npx @zerion/cli init flow, useful for quick experiments and AI agents.

A note on chains

The biggest structural change is how you address chains:
  • GoldRush: the chain is a path segment (eth-mainnet, matic-mainnet, base-mainnet), one chain per call, with separate allchains endpoints for cross-chain reads.
  • Zerion: GET /v1/wallets/{address}/... returns every supported chain for the address by default, narrowed with filter[chain_ids]=ethereum,base. Chain IDs are plain lowercase names without the -mainnet suffix (ethereum, polygon, base, solana); see the full list.
So a per-chain loop over eth-mainnet, matic-mainnet, base-mainnet becomes a single Zerion call, with the chain of each row in relationships.chain.data.id.

Token balances

GoldRush’s balances_v2 returns one item per token with balance (a raw integer string you divide by 10^contract_decimals) and precomputed quote_rate / quote. Zerion returns a JSON:API collection covering all chains at once, with attributes.fungible_info for metadata, attributes.quantity.float for the decimal-adjusted amount, and attributes.value for the USD value. The same endpoint accepts both EVM and Solana addresses.

Field mapping

price and value are null for tokens without a reliable price. Guard for null before summing or formatting.

Net worth

GoldRush has no net-worth endpoint; you sum quote across balance items, chain by chain. Zerion’s /portfolio returns the total, the 24h change, a breakdown by chain, and a breakdown by position type (wallet, deposited, borrowed, locked, staked) in one response.
The per-chain breakdown replaces GoldRush’s address activity endpoint (/v1/address/{address}/activity/) for the common “which chains does this wallet use” case: any chain with a non-zero entry in positions_distribution_by_chain is in use.

Net worth over time

GoldRush’s portfolio_v2 returns per-token holdings over time, one chain per call, with OHLC buckets per day. Zerion’s /charts/{period} returns the wallet’s total value timeseries across all chains in one call, for periods from hour to max (full history).
cURL
GoldRush’s series is per token; Zerion’s is the wallet total (scopeable by chain and by fungible via filters). For a single asset’s price history, use the fungible chart.

Transactions

GoldRush’s transactions_v3 returns raw transactions with log_events[] (decoded event logs you interpret yourself) and native-value fields. Zerion’s /transactions/ returns enriched, human-readable transactions with a single decoded operation_type, a unified transfers[] array with token metadata and USD values inlined, fees, and the dApp when Zerion recognizes it. The same endpoint accepts both EVM and Solana addresses.

Field mapping

Filter mapping

DeFi positions

GoldRush has no DeFi positions product; reconstructing staking, lending, or LP exposure means decoding protocol events yourself. On Zerion, they’re one call: each position is a row under /positions/?filter[positions]=only_complex, tagged with protocol, protocol_module (lending, staked, liquidity_pool, locked, rewards, vesting, and so on), and position_type (including loan for borrowed assets).
Group rows by relationships.dapp.data.id to reconstruct protocols, and by group_id to reconstruct LP pairs. Wallet-level totals per type (deposited, borrowed, staked, locked) are in /portfoliopositions_distribution_by_type.

Wallet PnL

GoldRush has no wallet PnL endpoint. Zerion’s /pnl returns wallet-level PnL computed with FIFO: realized and unrealized gain, net invested, total fees, and external in/out flows. Scope it per token with filter[fungible_ids], per chain with filter[chain_ids], or per time window with since / till.
See the wallet PnL tracker recipe for a worked example.

Token prices

GoldRush’s pricing endpoint returns a daily price series per contract address, with the quote currency in the path. Zerion splits this into two calls: /fungibles/by-implementation for the live price with full asset metadata, and the fungible chart for a timeseries.

Field mapping

NFTs

GoldRush’s balances_nft returns NFT holdings with tokenURI-derived external_data, one chain per call. The Zerion equivalent is /v1/wallets/{address}/nft-positions/, which returns each holding with collection metadata and floor-price-based valuation across chains.
cURL

Pagination

Replace GoldRush’s page-number paths and before/after cursors with Zerion’s links.next URL. Each Zerion response includes a fully-formed next-page link you can fetch as-is.

Realtime updates

GoldRush’s realtime offering centers on pipeline delivery of decoded chain data into your own infrastructure. If what you actually need is “tell me when this wallet transacts”, Zerion offers transaction webhooks: subscribe a callback URL to one or more wallets and receive a POST when any of them transact. See the wallet activity alerts recipe for a working example.

Differences from GoldRush

Most GoldRush wallet use cases have a direct Zerion equivalent, and DeFi positions and PnL are additions. A few things aren’t covered, and others behave differently. Worth a scan before you cut over. Not supported today:
  • Historical balance snapshots: GoldRush returns balances at any block height (block-height, cutoff-timestamp) and per-token holdings over time (portfolio_v2). Zerion exposes wallet value over time via /charts/{period} and asset price history via the fungible chart, but not balance-at-block.
  • Token holders: GoldRush’s token_holders_v2 lists a token’s holders at any height. Zerion is wallet-centric and does not return holder lists.
  • Token approvals state: GoldRush’s approvals endpoint returns current allowances with value-at-risk scoring. Zerion surfaces approve / revoke transactions in wallet history, but has no current-allowance endpoint.
  • Raw log events: GoldRush returns decoded event logs (log_events[].decoded) for arbitrary contracts. Zerion returns enriched transfers and approvals, not raw logs.
  • Gas analytics: transactions_summary aggregates (total fees paid, average gas per transaction) have no Zerion equivalent.
  • Bitcoin and long-tail chains: GoldRush covers 100+ chains including btc-mainnet and appchains. Zerion covers EVM chains and Solana; check the supported chains list for the ones you rely on.
If any of these matter for your migration, let us know. Your feedback helps shape our roadmap. Worth knowing:
  • Authentication: GoldRush uses Authorization: Bearer <key>. Zerion uses HTTP Basic Auth with the API key as username and an empty password. Get a key at dashboard.zerion.io.
  • Chains: GoldRush puts a chainName slug in the path (eth-mainnet), one chain per call. Zerion returns all supported chains by default and filters with plain names: filter[chain_ids]=ethereum,base. See the note above.
  • Address input: GoldRush resolves ENS and other name services in the path. Zerion expects the wallet address itself; resolve names before calling.
  • Response shape: GoldRush wraps everything in {data, error, error_message, error_code} with items[] inside. Zerion uses JSON:API: payloads live under data[].attributes with related entities under data[].relationships, and errors use HTTP status codes (see error handling).
  • Amounts decimal-adjusted: GoldRush balances are raw integer strings. Zerion returns quantity.float (decimal), quantity.int (raw), and quantity.numeric (decimal string) on every position and transfer.
  • No pretty-formatted strings: GoldRush pairs each value with a pretty_* display string. Zerion returns numbers; format client-side.
  • One endpoint for tokens and DeFi: Zerion serves both wallet tokens and DeFi positions from /positions/. Switch via filter[positions]=only_simple (wallet only), only_complex (DeFi only), or no_filter (both).
  • Decoded transactions: GoldRush gives you raw log_events to interpret. Zerion always sets a decoded operation_type and inlines transfer metadata, so most client-side decoding code goes away.
  • Multiple wallets: GoldRush’s allchains/transactions accepts multiple addresses per call. Zerion reads one address per /wallets/ call; for batches use the wallet sets endpoints.
  • Spam filtering: GoldRush flags is_spam and gates with no-spam. Zerion uses filter[trash]=only_non_trash. See spam filtering for the full taxonomy.
  • Pagination: GoldRush pages by page number in the path (with links.prev/links.next) or cursors on allchains endpoints. Zerion returns a fully-formed links.next URL you can fetch as-is. See pagination.

Get in touch

Have a use case we don’t cover or need assistance with the migration? Our team is happy to help! Reach out via the chat widget on dashboard.zerion.io, or email us.