Home / Blog / Data API

Data API

FOMO Wallet Data: Pull Holdings, PnL & Trades via API

This guide shows how to pull holdings, PnL, and trade history from any social trader's wallet using fomoapi.io. You'll see real request/response shapes, multi-chain coverage (Solana + EVM), and how the resolved wallet lets you check the numbers yourself.

Pixel-art identity network resolving an anonymous trader profile into verified blockchain wallets.

A FOMO wallet data API connects social trader handles to on-chain wallets, letting you pull verified holdings, PnL, and trade history without scraping or guessing. If you're building a leaderboard, copy-trading bot, or analytics dashboard, you need real wallet addresses and real transaction data. This guide walks through the endpoints that surface that data, the tradeoffs of multi-chain coverage, and the rate limits you'll hit.

What is FOMO wallet data?

FOMO wallet data ties a trader's social identity (their Twitter or Telegram handle) to the actual wallets they trade from. Instead of self-reported performance screenshots, you get:

  • PnL: fomo.family's own figure, returned alongside the wallets so you can check it.
  • Live holdings: token balances across Solana and EVM chains, refreshed in near-realtime.
  • available trade history: every swap, buy, and sell, with timestamps, amounts, and token addresses.
  • Cross-chain resolution: one handle maps to multiple wallets (a Solana address, an Ethereum address, etc.), so you see the complete picture.

The data comes from blockchain state and transaction logs. A trader can't quietly fake a 300% return or hide a losing streak, because the API hands you the wallet to check. This matters when you're routing real money based on someone's track record.

Why on-chain wallet data matters

Self-reported PnL is trivial to game. A trader posts a screenshot of a winning position, crops out the losses, or cherry-picks a timeframe. When you query a FOMO wallet data API, you're reading the same immutable ledger that settled those trades. If a wallet shows $12,000 profit over 30 days, you can trace every transaction that contributed to that number.

Three reasons this verification layer is critical:

  1. Trust: users of your leaderboard or copy-trading tool need confidence that the numbers are real.
  2. Compliance: some jurisdictions or platforms require auditable track records.
  3. Signal quality: if you're building algo strategies that follow top traders, garbage data means garbage alpha.

The alternative is manual wallet tracking (slow, error-prone) or trusting third-party aggregators that may mix verified and unverified sources. A dedicated API gives you one source of truth with consistent data models.

GET /v2/users/{id}/balances: Pull current holdings

This endpoint returns every token a trader currently holds, denominated in both native units and USD. You pass a user ID (resolved from their handle via /v2/users/{handle}) and get back an array of balances.

Request:

GET https://api.fomoapi.io/v2/users/abc123/balances
Authorization: Bearer YOUR_API_KEY

Response shape (simplified):

{
  "user_id": "abc123",
  "balances": [
    {
      "chain": "solana",
      "token_address": "So11111111111111111111111111111111111111112",
      "symbol": "SOL",
      "amount": "42.5",
      "usd_value": 8925.00
    },
    {
      "chain": "ethereum",
      "token_address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
      "symbol": "WETH",
      "amount": "1.2",
      "usd_value": 3840.00
    }
  ],
  "total_usd": 12765.00,
  "updated_at": "2025-01-15T10:32:00Z"
}

What you get:

  • Token address, symbol, and raw amount.
  • USD valuation at the time of the query.
  • Total portfolio value across all chains.
  • Timestamp so you know data freshness.

Use case: You're building a "who holds what" dashboard. A user searches for a meme coin address, and you show which top traders hold it, along with position size. You call /balances for each trader ID, filter by token_address, and rank by amount.

Latency is typically under 200ms for cached balances, but can spike to 1-2 seconds if the API needs to refresh on-chain state. If you want events pushed instead of polling, consider the app feed stream (covered in the full list of API endpoints).

GET /v2/users/{handle}: Fetch PnL and performance

This endpoint resolves a social handle (e.g., @cryptotrader) to a user profile that includes:

  • Total realized PnL over configurable windows (7d, 30d, 90d, all-time).
  • Trade count, traded volume, and number of tokens currently held.
  • Wallet addresses for every supported chain.
  • Leaderboard rank (if the trader is in the top cohort).

Request:

GET https://api.fomoapi.io/v2/users/@cryptotrader
Authorization: Bearer YOUR_API_KEY

Response excerpt:

{
  "user_id": "xyz789",
  "handle": "@cryptotrader",
  "wallets": {
    "solana": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
    "ethereum": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
  },
  "pnl_30d": 14250.00,
  "trades_30d": 87,
  "rank_30d": 42,
  "updated_at": "2025-01-15T10:30:00Z"
}

Key fields:

  • pnl_30d: realized profit/loss in USD over the last 30 days.
  • trades_30d: total number of trades executed.
  • rank_30d: position on the live trader leaderboard for that window.

Why this matters: You can gate access to your copy-trading bot based on pnl_30d > 10000 or a minimum trade count. You can also display a trader's rank badge in your UI without maintaining your own leaderboard logic.

PnL is recalculated every few minutes, so if a trader closes a big position, you'll see the updated number within that window. For tick-by-tick updates, use the WebSocket endpoint.

GET /v2/users/{handle}/positions: Retrieve available trade history

This endpoint returns every swap, buy, and sell a trader has executed, paginated and sorted by timestamp. You can filter by date range, token, or chain.

Request:

GET https://api.fomoapi.io/v2/users/xyz789/positions?start_date=2025-01-01&limit=50
Authorization: Bearer YOUR_API_KEY

Response (one trade):

{
  "trade_id": "tx_abc123",
  "user_id": "xyz789",
  "timestamp": "2025-01-10T14:22:00Z",
  "chain": "solana",
  "type": "buy",
  "token_in": {
    "address": "So11111111111111111111111111111111111111112",
    "symbol": "SOL",
    "amount": "5.0"
  },
  "token_out": {
    "address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "symbol": "USDC",
    "amount": "1050.00"
  },
  "usd_value": 1050.00,
  "pnl": null,
  "tx_hash": "5Kn7..."
}

What you can do with this:

  • Backtesting: replay a trader's strategy against historical price data to see if their alpha holds.
  • Attribution: break down PnL by token or time period to understand what drove returns.
  • Alerts: trigger notifications when a followed trader buys a specific token.

Pagination is cursor-based. The response includes a next_cursor field; pass it in the next request to fetch the next page. Default limit is 50 trades per call, max is 500.

Performance note: Fetching 10,000 trades for a high-frequency trader will take multiple requests. If you need bulk historical data, reach out via t.me/eulatxt to discuss a data export or higher rate limits.

Multi-chain coverage: Solana + EVM

The API tracks wallets on six chains:

Chain Type Use case
Solana L1 Meme coins, DeFi, NFT trading
Ethereum EVM L1 Blue-chip DeFi, stablecoins
Base EVM L2 Low-fee onchain apps
BSC EVM L1 High-frequency trading, gaming
Arbitrum EVM L2 DeFi derivatives, leverage
Polygon EVM L2 NFTs, gaming, low-cost txns

When you query /v2/users/{handle}, you get wallet addresses for all supported chains. This means a single trader ID gives you:

  • Their Solana address (for SPL tokens and Raydium swaps).
  • Their Ethereum address (for ERC-20s and Uniswap trades).
  • Their Base, BSC, Arbitrum, and Polygon addresses if they trade there.

Why this matters: A trader might ape into a Solana meme coin, take profit in USDC, bridge to Ethereum, and deploy into a yield vault. If you only track one chain, you miss half the story. Multi-chain coverage lets you calculate true net PnL and see the full portfolio.

Caveat: Not every trader uses every chain. If a trader has never touched Base, their Base wallet address will be null or show zero activity. The API does not invent addresses; it only returns what it can verify.

Rate limits and pricing

The free tier is 250,000 credits a month, and every data endpoint needs a key. This is enough to prototype or build a personal dashboard, but you'll hit the ceiling quickly if you're polling a leaderboard of 50 traders every 30 seconds.

Paid tiers (from the API pricing tiers page):

Plan Price Requests / mo Requests / min Wallet resolutions / mo On-chain stream
Free $0 10K 60 25 not included
Starter $49.99 / mo 100K 150 500 not included
Growth $599 / mo 1M 600 2,000 included, ~3.5s ahead of the app (measured p50)
Scale Custom tens of millions top limits large volume included

WebSocket feed: The app feed stream /ws/alerts is on every plan, free included. The on-chain stream /ws/trades needs Growth or Scale. You subscribe to a user ID or token address and receive realtime trade events as they happen. This bypasses the need to poll /trades every few seconds and reduces your request count.

Overage: If you exceed your plan's rate limit, requests return HTTP 429. No automatic overage billing. Upgrade your plan or wait for the rate limit window to reset (1 minute).

Caching strategy: If you're displaying leaderboard data that doesn't need to be tick-perfect, cache responses for 60 seconds. This cuts your request volume by 60x and keeps you under the free tier for small projects.

Example use cases

1. Copy-trading bot
You maintain a whitelist of 20 top traders. Every 10 seconds, you call /v2/users/{id}/balances for each to detect new positions. When a trader buys a token you don't hold, your bot mirrors the trade on your own wallet. You use /v2/users/{handle}/positions to backtest each trader's strategy before adding them to the whitelist.

2. Social leaderboard
You run a website that ranks crypto traders by 30-day PnL. You call /v2/leaderboard/30d once per minute to get the top 150, then call /v2/users/{id} for each to fetch profile details (handle, avatar, wallet addresses). Users can click a trader to see available trade history via /v2/users/{handle}/positions.

3. Token holder graph
You're analyzing a new meme coin. You call /token/{address}/holders to see which wallets hold it, then cross-reference those wallet addresses with /v2/users/{id} to identify known traders. This tells you if the token is held by proven alpha generators or just random wallets.

4. Risk dashboard
You're managing a fund that follows 10 external traders. You call /v2/users/{id}/balances every hour to monitor concentration risk (e.g., "Trader A has 80% of their portfolio in one token"). If a trader's pnl_7d drops below a threshold, you reduce your allocation to their strategy.

Each of these scenarios requires on-chain wallet data. Self-reported PnL or scraped Twitter screenshots won't cut it when you're routing capital.

Closing

Building on top of social trading data means trusting the source. fomoapi.io resolves handles to verified wallets and serves PnL, holdings, and trades through REST and WebSocket endpoints. You get multi-chain coverage, ranked leaderboards, and realtime feeds without running your own indexer. Grab a key at t.me/eulatxt or start with the free tier at https://fomoapi.io/.

Ship on fomo.family trader data

Both-chain wallets, PnL and holdings, plus two live streams: the app feed on every plan, the on-chain stream on Growth. One API.

Get an API key

FAQ

How do I get holdings from a FOMO wallet via API?
Call GET /v2/users/{id}/balances with the trader's user ID (obtained from GET /v2/users/{handle}). The response returns current token holdings across all linked wallets, including token symbol, contract address, quantity, USD value, and chain. Each balance object shows which wallet holds the asset. You can filter by chain or pull all holdings at once. The endpoint aggregates positions from both Solana and EVM wallets tied to that trader's social handle.
What chains does fomoapi.io support for wallet data?
Six chains total: Solana, Ethereum, Base, BSC (Binance Smart Chain), Polygon, and Arbitrum. When you resolve a social handle via GET /v2/users/{handle}, the API returns all linked wallet addresses across these chains. Trade history, balances, and PnL calculations work uniformly across all six. You can query holdings or trades for a specific chain or pull aggregated data across the entire portfolio in one call.
How is PnL different from self-reported PnL?
PnL is reported by fomo.family rather than independently recomputed by FOMO API. The resolved wallets and available position data let you perform separate checks, but source-reported and independently calculated metrics should not be presented as the same measurement.
Can I pull trade history for any social trader's wallet?
Yes, if their handle is indexed. Use GET /v2/users/{handle} to resolve the handle to a user ID and wallet addresses, then call GET /v2/users/{handle}/positions to retrieve available trade history. The response includes entry and exit prices, timestamps, token addresses, PnL per trade, and chain. History covers all linked wallets (Solana and EVM). If the trader is not yet indexed, contact t.me/eulatxt to request addition.
What does the /v2/users/{id}/balances endpoint return?
It returns an array of current token holdings for the specified user ID. Each object includes token symbol, contract address, quantity held, USD value, chain, and the specific wallet address holding the asset. The endpoint aggregates balances across all wallets linked to that trader (both Solana and EVM). You get a snapshot of their live portfolio at the time of the request, not historical balances.
How do I resolve a Twitter handle to wallet addresses?
Call GET /v2/users/{handle} with the Twitter handle (without the @ symbol). The response includes a wallets array containing all linked addresses, labeled by chain (Solana, Ethereum, Base, etc.). You also get the user's internal ID, which you use for subsequent calls to /balances or /trades. The API maintains the handle-to-wallet mapping, so you never need to manually track addresses.
Does fomoapi.io support real-time wallet updates?
Yes, via WebSocket at wss://api.fomoapi.io/ws/alerts. The app-feed WebSocket publishes supported feed and push events such as trades and theses. It is not a balance-change or leaderboard-shift stream; use the documented REST endpoints when you need those snapshots. REST freshness varies by endpoint and source; use response timestamps and the documented WebSocket when your application needs event-driven updates.
What rate limits apply to wallet data endpoints?
Plans use endpoint-weighted monthly credits, and allowances can change. Read the current limits on https://fomoapi.io/pricing, monitor x-credits-cost and x-credits-remaining, and respect Retry-After on HTTP 429 responses.
Can I track both Solana and EVM wallets for one trader?
Yes. When you resolve a handle via GET /v2/users/{handle}, the API returns all linked wallets, including one or more Solana addresses and one or more EVM addresses (Ethereum, Base, BSC, Polygon, Arbitrum). Subsequent calls to /balances or /trades aggregate data across all these wallets automatically. You get a unified view of the trader's entire portfolio and trade history, regardless of which chains they use.
How much does it cost to pull wallet data via API?
FOMO API uses endpoint-weighted monthly credits. Create a free key at https://fomoapi.io/dashboard and use https://fomoapi.io/pricing as the source of truth for current plan prices, credit buckets, and which of the two WebSocket streams each plan can access.