Aurelia

Wallets API

GET/wallets

Several wallets' portfolios with totals, on every listed chain each address fits (wallets=); or wallet discovery: the top wallets by PnL, volume or win rate, by label.

Parameters

NameInTypeDefaultAllowed values
walletsquerystringnone1–10 items, comma-separated: <chain>:<address>, or a bare address (every listed chain its format fits)
chainsquerystringevery listed chainComma-separated: evm:56 (BSC), solana, evm:8453 (Base), evm:4663 (Robinhood Chain) or evm:1 (Ethereum)
limitqueryinteger100 (wallets), 50 (discovery)Holdings per portfolio 1–500; wallets per page 1–100
labelquerystringany walletDiscovery: creator, insider, sniper, smart_money, bot (not fresh: see labels)
sortquerystringpnl30dDiscovery: pnl7d, pnl30d, volume30d, winRate30d
cursorquerystringfirst pageDiscovery: the previous page's next

Response

FieldTypeMeaning
wallets, chainsstring[]wallets=: the wallets and chains answered.
totalValueUsd, pnlnumber, objectwallets=: sums of the portfolios' totalValueUsd and pnl.
completebooleanwallets=: false when a portfolio could not be read: the totals leave it out.
portfolios[]arraywallets=: one per wallet and chain, in request order: the wallet portfolio answer, or { chain, wallet, status, error } for one that could not be read (the status its own route would answer).
chains, label, sort, rankedAtstring[], string | null, string, number | nullDiscovery: the request, and when the ranking was built, unix ms.
wallets[]arrayDiscovery: highest first. Each: chain, wallet, labels, pnl7dUsd, pnl30dUsd, volume30dUsd, winRate30d (null without results), wins30d, losses30d, swaps7d.
nextstring | nullDiscovery: cursor for the next page.

Example

Captured 2026-09-28 18:03 UTC on a test instance, trimmed to 1 holding each.

curl -s -H 'Authorization: Bearer <key>' 'https://app.aurelia.build/api/wallets?wallets=evm:56:0x3304e22ddaa22bcdc5fca2269b418046ae7b566a,solana:Fm1Nzv3EcgGMW2MFHHGKjdVDbvHsMMtoRdoBDmUmsFFE&limit=1'
{
  "wallets": [
    "0x3304e22ddaa22bcdc5fca2269b418046ae7b566a",
    "Fm1Nzv3EcgGMW2MFHHGKjdVDbvHsMMtoRdoBDmUmsFFE"
  ],
  "chains": [
    "evm:56",
    "solana"
  ],
  "totalValueUsd": 214764,
  "pnl": {
    "realizedUsd": 66.2589770354906,
    "unrealizedUsd": 57.375000000000064,
    "totalUsd": 123.63397703549066
  },
  "complete": true,
  "portfolios": [
    {
      "chain": "evm:56",
      "wallet": "0x3304e22ddaa22bcdc5fca2269b418046ae7b566a",
      "indexedSince": 1790546261920,
      "labels": [
        "sniper",
        "fresh"
      ],
      "fundedBy": {
        "address": "0x8894e0a0c962cb723c1976a4421c95949be2d4e3",
        "amount": "0.25",
        "time": 1790616461920,
        "tx": "0x124aa51a8b73a7c373249b80ec4beb9fa4e80b4aa78a8bc73a64c781b3f2925d",
        "labels": []
      },
      "fundedByReason": null,
      "block": 1000748,
      "balancesAt": 1790618266812,
      "totalValueUsd": 214134,
      "pnl": {
        "realizedUsd": 59.5089770354906,
        "unrealizedUsd": 6.776263578034403e-14,
        "totalUsd": 59.50897703549067
      },
      "holdings": [
        {
          "kind": "token",
          "token": {
            "address": "0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777",
            "symbol": "TAX",
            "name": "Tax Token",
            "decimals": 18
          },
          "balance": "21500000",
          "priceUsd": 0.006,
          "valueUsd": 129000,
          "allocation": 0.6024265179747261,
          "thin": false,
          "position": {
            "quote": false,
            "trades": 22,
            "buys": 12,
            "sells": 10,
            "unpricedTrades": 0,
            "bought": "20118000",
            "sold": "9800",
            "open": "20108200",
            "boughtUsd": 1008,
            "soldUsd": 60,
            "avgBuyPriceUsd": 0.00005010438413361169,
            "avgSellPriceUsd": 0.006122448979591836,
            "priceUsd": 0.006,
            "priceAt": 1790618400000,
            "realizedPnlUsd": 59.5089770354906,
            "unrealizedPnlUsd": null,
            "totalPnlUsd": 59.5089770354906,
            "firstTradeAt": 1790546864920,
            "lastTradeAt": 1790618578665
          }
        }
      ],
      "unpriced": 0,
      "count": 6,
      "liquidity": {
        "protocols": [
          "pancakeswap-v2",
          "pancakeswap-v3",
          "uniswap-v2",
          "uniswap-v3"
        ],
        "incomplete": [],
        "notCovered": [
          {
            "protocol": "pancakeswap-infinity-cl",
            "reason": "its positions are not enumerable per owner"
          }
        ],
        "error": null
      }
    },
    {
      "chain": "solana",
      "wallet": "Fm1Nzv3EcgGMW2MFHHGKjdVDbvHsMMtoRdoBDmUmsFFE",
      "indexedSince": 1790546261920,
      "labels": [
        "insider"
      ],
      "fundedBy": null,
      "fundedByReason": "the chain could not be read (Unable to connect. Is the computer able to access the url?)",
      "block": 449600022,
      "balancesAt": 1790618266815,
      "totalValueUsd": 630,
      "pnl": {
        "realizedUsd": 6.75,
        "unrealizedUsd": 57.37499999999999,
        "totalUsd": 64.125
      },
      "holdings": [
        {
          "kind": "token",
          "token": {
            "address": "native",
            "symbol": "SOL",
            "name": "Solana",
            "decimals": 9
          },
          "balance": "3.4",
          "priceUsd": 150,
          "valueUsd": 510,
          "allocation": 0.8095238095238095,
          "thin": false,
          "position": null
        }
      ],
      "unpriced": 0,
      "count": 3,
      "liquidity": {
        "protocols": [
          "raydium-cpmm",
          "orca-whirlpool"
        ],
        "incomplete": [],
        "notCovered": [],
        "error": null
      }
    }
  ]
}

Notes

  • wallets=: each portfolio reads its wallet's balances from the chain, as the wallet portfolio does, and shares that route's caches. A bare 0x address is read on BSC, a base58 one on Solana. 400 for more than 10, one that fits no chain of chains, or label, sort or cursor alongside.
  • Discovery reads a ranking rebuilt every 15 minutes with the labels (the top 1,000 per chain, label and sort), never a scan per request: the wallets that traded at least $1,000 in 30 days, or carry a label. Figures are the analysis's over 7 and 30 days, quote tokens left out; winRate30d ranks only wallets with 10+ results. Cached a minute.

Try it in the interactive docsCreate a free account