Latency — balances (avg ms)
Lower is better. Phantom / Solflare pending.
Vybe
One integration for wallet balances and DeFi positions — built for product teams who need chain-complete data in under a second, not a portfolio website that takes 10+. Benchmarked live against Jupiter; Phantom & Solflare coming next.
mint + raw amount (enriched adds decimals).
No USD, price, symbol, name, or logo URL in that response.
Jupiter wallet-tokens includes price + valueUsd (and display metadata).
Enrichment (symbol, name, logo URL, price, USD) has been discussed and will be added shortly for the package.
Pending Phantom & Solflare = not measured yet. Every cell shows — until those runs land.
10 wallets · July 2026 · live captures
Jupiter’s portfolio is great for humans browsing a website. Internal is built for APIs: near-complete balances vs the chain, DeFi with USD already on positions, and responses measured in milliseconds — not multi-second page loads. Phantom & Solflare columns fill in once we finish those benchmarks.
| Vybe Internal | Jupiter | Phantom | Solflare | |
|---|---|---|---|---|
| Balances source | Rocks /portfolio |
wallet-tokens |
— | — |
| Balances latency | ~60–300 ms | ~2.6–15 s | — | — |
| DeFi latency | ~143–217 ms | ~6–22 s | — | — |
| Tokens returned | 4,281 | 732 | — | — |
| Match vs on-chain RPC | 4,273 / 4,277 | 731 / 4,277 | — | — |
| Amount exact vs RPC | 4,271 / 4,273 | 720 / 731 | — | — |
| USD on balances | No (Rocks) | Yes | — | — |
| DeFi protocols | ~22 | ~100+ | — | — |
| DeFi positions / USD | 511 · ~$279k | 764 · ~$315k | — | — |
Lower is better. Phantom / Solflare pending.
Lower is better. Phantom / Solflare pending.
Shared mints with RPC (of 4,277). Higher is better.
Exact amount matches (shared mints). Higher is better.
Wallet tokens
If your product shows “what’s in this wallet,” missing tokens are a trust problem.
On the same 10 wallets, Internal returned 4,281 holdings vs Jupiter’s
732 wallet-tokens — matching on-chain RPC at ~99.9% while finishing in
~0.2s instead of several seconds. That’s the core $999 value for balance surfaces.
Honest caveat: today’s Rocks balances payload is mint + raw amount (no symbol, name, logo URL, price, or USD in that fetch). Discussed — enrichment landing shortly for the package. DeFi already has prices.
| Field | Vybe Internal | Jupiter | Phantom | Solflare |
|---|---|---|---|---|
| Mint / address | Yes | Yes | — | — |
| Amount | Raw integer | UI decimal | — | — |
| Decimals | Enriched only | Via metadata | — | — |
| Symbol | No* | Yes | — | — |
| Name | No* | Yes | — | — |
| Logo URL | No* | Yes (metadata) | — | — |
| Price | No* | Yes | — | — |
| USD value | No* | Yes | — | — |
| Staked SOL summary | sol_summary |
As token rows | — | — |
| Latency | ~60–300 ms | ~2.6–15 s | — | — |
| Coverage vs RPC | ~99.9% | ~17% | — | — |
* Not in Rocks fetch today — enrichment coming shortly for the package.
Positions
Internal returns typed positions (LPs, lending, vaults, farming…) with protocol id, labels, nested assets, and USD values already on the position — in ~150–200 ms. Jupiter still wins on long-tail protocol count; we call that out below and treat it as roadmap, not fluff. When both sides list the same position, values usually agree (~82% within 1%).
| Field / metric | Vybe Internal | Jupiter | Phantom | Solflare |
|---|---|---|---|---|
platformId (protocol) |
Yes | Yes | — | — |
type / label |
Yes | Yes | — | — |
| Position USD | Yes | Yes | — | — |
| Token price + USD in position | Yes | Yes | — | — |
LP data.liquidities[] |
Yes | Yes | — | — |
LP pool name (CPMM/DLMM…) |
~41% (41/99) | ~54% (90/167) | — | — |
LP netApy |
~22% (22/99) | ~99% (166/167) | — | — |
| Lending health / supply / borrow | Yes | Yes | — | — |
fetcherId |
No | Yes | — | — |
| Protocol count | ~22 | ~100+ | — | — |
| DeFi positions | 511 | 764 | — | — |
| DeFi USD total | ~$279k | ~$315k | — | — |
| Latency | ~0.15–0.2 s | ~6–22 s | — | — |
| Label | Vybe Internal | Jupiter | Phantom | Solflare |
|---|---|---|---|---|
| LiquidityPool | 99 | 167 | — | — |
| Lending | 133 | 141 | — | — |
| Staked | 91 | 231 | — | — |
| Farming | 96 | 30 | — | — |
| Vault | 26 | 39 | — | — |
| Deposit | 20 | 64 | — | — |
| Leverage | 27 | 25 | — | — |
| Rewards | 9 | 39 | — | — |
| LimitOrder | 5 | 17 | — | — |
| Margin / Airdrop | 0 | yes | — | — |
Roadmap · honesty sells
Buyers trust a package that names gaps. Here’s what Jupiter still does better — and what the $999 tier should close next.
Symbol, name, logo URL, price, valueUsd missing from Rocks today — discussed, shipping shortly.
Fill pool name (CPMM/DLMM…) and netApy (now ~22% vs Jupiter ~99%).
Flash, Jupiter Exchange/Governance, Elemental, Realms, BulkTrade, … (~+$36k / +253 positions in this set).
fetcherId, interest-bearing Token-2022 views, published protocol list, auth/SLA for $999.
$999 Internal package
Stop stitching wallet RPCs, Turnstile-gated portfolio scrapers, and half-complete token lists. For $999 you get Internal access to assets/balances and DeFi positions — the same surfaces we benchmarked: chain-complete holdings and typed DeFi with USD, fast enough for product UX.
Users judge you on whether every token and DeFi position shows up. Internal’s balance coverage (~99.9% vs RPC in our test) and fast DeFi feed let you refresh on open — not after a spinner.
Aggregate many wallets without timing out. Sub-second Internal calls scale better than multi-second portfolio workflows when you’re charting cohorts, whales, or protocol exposure.
Incomplete inventories create bad lots and angry customers. Start from a near-complete mint set and typed DeFi positions with USD — then layer your own cost basis and jurisdiction rules.
Screen wallets for lending health, LP exposure, and staked SOL without depending on a consumer portfolio UI. Structured JSON + protocol ids beat screenshots and CSV exports.
Request: GET …/api/v1/owners/{wallet}/portfolio
(enriched: …/portfolio/enriched adds decimals).
This is the complete-holdings engine behind the $999 balances surface.
{
"owner": "<wallet>",
"token_count": 70,
"query_time_us": 12345,
"sol_summary": {
"native_sol": 267335471,
"staked_sol": 9282578,
"wrapped_sol": 0,
"total_sol_lamports": 276618049
},
"holdings": [
{ "mint": "<mint>", "amount": 47498 },
{ "mint": "<mint>", "amount": 1, "decimals": 9 }
]
}
amount = raw token units (integer), not UI decimals.symbol / name / logo URL / price / valueUsd in Rocks today — enrichment discussed, coming shortly.sol_summary lamports for native / staked / wrapped SOL.
Response envelope: { message, data: { sonarwatch, vybe_portfolio } }.
Production positions: data.vybe_portfolio.positions[].
USD and token prices are on the DeFi side today — ready for portfolio value UIs.
{
"message": "success",
"data": {
"sonarwatch": { "tookMs": 0, "positions": [] },
"vybe_portfolio": {
"tookMs": 52,
"positions": [
{
"type": "liquidity",
"label": "LiquidityPool",
"name": "CPMM",
"networkId": "solana",
"platformId": "raydium",
"value": 12.34,
"netApy": 0.04,
"tags": ["Concentrated"],
"data": {
"liquidities": [
{
"assets": [
{
"type": "token",
"networkId": "solana",
"value": 6.0,
"attributes": {},
"data": {
"address": "<mint>",
"amount": 1.5,
"price": 4.0
}
}
],
"assetsValue": 12.34,
"rewardAssets": [],
"rewardAssetsValue": 0,
"value": 12.34,
"yields": [{ "apr": 0.039, "apy": 0.04 }],
"ref": "<position pubkey>",
"sourceRefs": [{ "name": "Pool", "address": "<pool>" }],
"link": "https://…"
}
]
}
}
]
}
}
}
suppliedAssets / borrowedAssets / healthRatio (same family as Jupiter).value) and per-token price — unlike Rocks balances.Also: DeFi benchmark · Scorecard
wallet-tokens; DeFi = other portfolio elements./portfolio; DeFi = vybe_portfolio.positions.