What you get
Enrichment writes three datasets, all queryable in the SQL editor and joined together incontact_360.
- Wallet metrics
- Activity summary
- NFT holdings
One row per wallet in
user_onchain_metrics:Derived scores
Two fields are computed rather than fetched. Both are heuristics — useful for ranking and segmentation, not accounting.Engagement score (0–100)
A weighted blend of recent activity, capped so no single signal dominates:
A wallet with 20+ transactions, activity most days, a few collections, and a five-figure portfolio approaches 100. A dormant wallet trends toward zero.
Estimated LTV
A weighted blend biased toward realized value:churn_risk is not an enrichment field — it’s derived at query time in contact_360 from last_activity_at: low within 30 days, medium at 30–60, high beyond 60. Enrichment supplies the activity timestamps that drive it.Supported chains
Enrichment pulls from GoldRush (Covalent). EVM mainnets:eth-mainnet, base-mainnet, matic-mainnet, bsc-mainnet, arbitrum-mainnet, optimism-mainnet, sei-mainnet. Solana: solana-mainnet. Testnets including eth-sepolia, base-sepolia-testnet, and solana-devnet are also supported.
A wallet is enriched per chain, so metrics reflect the chain you enriched it on. Enrich the same wallet on multiple chains to build a cross-chain picture — activity summaries are stored per chain.
When enrichment runs
1
On profile view (automatic)
Opening a contact profile that has a wallet triggers enrichment if it’s never been enriched or is more than 7 days stale. This keeps active profiles fresh without any work from you.
2
On project-settings save (automatic)
Saving project settings that include contract addresses enriches the holders of those contracts in the background.
3
On demand (API)
Enqueue enrichment for a specific wallet, your contacts, or a contract’s holders — see below.
forceRefresh.
Enriching on demand
These are session-authenticated dashboard endpoints (send your session plusx-org-id), and require OWNER, ADMIN, or EDITOR. Base path https://api.onchainsuite.com/api/v1.
One wallet
{ "queued": true, "jobId": "…" } when a queue is available, or { "queued": false, "result": { … } } when it ran inline. Pass "forceRefresh": true to bypass the cache.
Wait for the result
When you need the metrics back in the same request, use the blocking variant. It polls until the wallet’slast_enriched_at advances or it times out.
{ "ready": true, "metric": { … } }, or ready: false if it didn’t finish within the timeout (clamped to 1–25 seconds). The job keeps running either way.
Your contacts, or a contract’s holders
Check status
lastEnrichedAt, live queue counts, and an idle flag that’s true once the queue has drained.
Read a single wallet’s stored metrics directly with GET /intelligence/query/enrichment/wallets/{walletAddress} (404 if it’s never been enriched).
Cost and limits
Enrichment consumes GoldRush credits — roughly 4 per wallet (it makes four data calls: balances, transactions, NFTs, and portfolio). Credits are a monthly allowance that scales with your plan:
At ~4 credits per wallet, the free tier covers roughly 2,500 wallet enrichments a month. Exhausting the allowance returns
402 CREDITS_EXCEEDED; the SQL editor and existing data keep working.
Responses are cached per organization — 5 minutes for transactions, 10 for balances and portfolio, 15 for NFTs — so repeated enrichment of the same wallet within those windows is served from cache and doesn’t re-spend credits (unless you pass forceRefresh).
Using enriched data
Query it in SQL
user_onchain_metrics, wallet_activity_summary, nft_holdings, and the joined contact_360 view.Build audiences
Whales, dormant holders, high-LTV wallets — save any query as a segment.
Score and prioritize
Engagement score feeds contact health and churn signals.
Personalize messages
Reference wallet traits as merge variables in campaigns.
contact_360, where enrichment is already joined to identity and email engagement:
Campaign merge variables for on-chain fields (like
portfolioValueUsd) render from contact metadata, not directly from the enrichment tables. The enrichment tables feed analytics and segmentation through contact_360; for per-recipient personalization, the value needs to be present in the contact’s metadata.
