Skip to main content
GET
/
2
/
token
/
trades-enriched
Get enriched token trades
curl --request GET \
  --url https://demo-api.mobula.io/api/2/token/trades-enriched
{
  "data": [
    {
      "addressToken0": "<string>",
      "addressToken1": "<string>",
      "amount0": 123,
      "amount1": 123,
      "rawAmount0": "<string>",
      "rawAmount1": "<string>",
      "swapType": "<string>",
      "poolType": "<string>",
      "poolAddress": "<string>",
      "swapSenderAddress": "<string>",
      "transactionHash": "<string>",
      "transactionSenderAddress": "<string>",
      "transactionIndex": 123,
      "transactionSwapsCount": 123,
      "swapIndex": 123,
      "ratio": 123,
      "chainId": "<string>",
      "timestamp": "<string>",
      "blockHash": "<string>",
      "logIndex": 123,
      "rawPreBalance0": "<string>",
      "rawPreBalance1": "<string>",
      "rawPostBalance0": "<string>",
      "rawPostBalance1": "<string>",
      "gasFeesUSD": 123,
      "platformFeesUSD": 123,
      "mevFeesUSD": 123,
      "totalFeesUSD": 123,
      "gasFeesNativeRaw": "<string>",
      "platformFeesNativeRaw": "<string>",
      "mevFeesNativeRaw": "<string>",
      "totalFeesNativeRaw": "<string>",
      "baseToken": "<string>",
      "quoteToken": "<string>",
      "pair": "<string>",
      "date": "<string>",
      "tokenPrice": 123,
      "tokenPriceVs": 123,
      "priceNative": 123,
      "tokenAmount": 123,
      "tokenAmountVs": 123,
      "type": "<string>",
      "operation": "<string>",
      "blockchain": "<string>",
      "hash": "<string>",
      "sender": "<string>",
      "tokenAmountRaw": "<string>",
      "tokenAmountRawVs": "<string>",
      "amountUSD": 123,
      "priceUSDToken0": 123,
      "priceUSDToken1": 123,
      "swapRecipient": "<string>",
      "blockHeight": null,
      "platform": "<string>",
      "tokenAmountUSD": 123,
      "marketCapUSD": 123,
      "marketCapDilutedUSD": 123,
      "totalSupply": 123,
      "circulatingSupply": 123,
      "labels": [
        "<string>"
      ],
      "walletMetadata": {
        "entityName": "<string>",
        "entityLogo": "<string>",
        "entityLabels": [
          "<string>"
        ],
        "entityType": "<string>",
        "entityDescription": "<string>",
        "entityTwitter": "<string>",
        "entityWebsite": "<string>",
        "entityGithub": "<string>",
        "entityDiscord": "<string>",
        "entityTelegram": "<string>"
      },
      "platformMetadata": {
        "id": "<string>",
        "name": "<string>",
        "logo": "<string>"
      }
    }
  ]
}
WebSocket Stream Parity: This endpoint returns the exact same schema as the Multi-Event WebSocket Stream swap-enriched event. Use it to backfill historical trades so that your UI renders identically whether the data came from the live stream or from this REST endpoint.

Query Details

Query enriched trades by pool/pair address (same access pattern as Get Token Trades, but with the enriched WebSocket schema).
ParameterRequiredDescription
blockchainYesBlockchain name or chain ID (e.g., "base", "ethereum", 56)
addressYesPool/pair contract address
limitNoNumber of trades per page (default: 10)
offsetNoOffset for pagination (default: 0)
sortOrderNoSort order: asc or desc (default: desc)
labelNoFilter by wallet label (e.g., proTrader, smartTrader, freshTrader, dev)
swapTypesNoComma-separated swap types to filter (e.g., "REGULAR,MEV")
typeNoFilter by trade direction: buy or sell
transactionSenderAddressesNoComma-separated wallet addresses to filter (max 25)
minAmountUSDNoMinimum trade amount in USD
maxAmountUSDNoMaximum trade amount in USD
fromDateNoStart date filter (ISO 8601 or Unix timestamp)
toDateNoEnd date filter (ISO 8601 or Unix timestamp)

Response Overview

The response data[] array contains trades in the swap-enriched stream format — the same schema produced by the WebSocket multi-event stream. All field names are camelCase.

Core Trade Fields

FieldTypeDescription
addressToken0stringToken 0 address
addressToken1stringToken 1 address
amount0numberAbsolute formatted amount of token 0
amount1numberAbsolute formatted amount of token 1
amountUSDnumber?USD value of the trade
rawAmount0stringRaw (smallest unit) amount of token 0
rawAmount1stringRaw (smallest unit) amount of token 1
priceUSDToken0number?USD price of token 0 at execution
priceUSDToken1number?USD price of token 1 at execution
swapTypestringSwap type (e.g., REGULAR, MEV, DEPOSIT, WITHDRAWAL)
poolTypestring | nullPool type (e.g., uniswap-v2, uniswap-v3, raydium-clmm)
poolAddressstringPool/pair address
swapSenderAddressstring | nullSwap sender address
transactionHashstringTransaction hash
transactionSenderAddressstringTransaction sender (tx.from)
transactionIndexnumber | nullTransaction index in block (null for historical)
transactionSwapsCountnumberNumber of swaps in this transaction
swapRecipientstring | nullActual beneficiary of the swap (important for AA wallets)
swapIndexnumberIndex of this swap within the transaction
rationumberSwap ratio
chainIdstringChain ID (e.g., evm:8453, solana:solana)
timestampstringTrade timestamp in milliseconds (as string)
blockHeightnumber | nullBlock height (null for historical REST)
blockHashstring | nullBlock hash (null for historical REST)
logIndexnumber | nullLog index (null for historical REST)
platformstring | nullTrading platform/aggregator identifier

Balance Fields

FieldTypeDescription
rawPreBalance0string | nullPre-swap raw balance of token 0
rawPreBalance1string | nullPre-swap raw balance of token 1
rawPostBalance0string | nullPost-swap raw balance of token 0
rawPostBalance1string | nullPost-swap raw balance of token 1

Fee Fields

FieldTypeDescription
gasFeesUSDnumberGas fees in USD
platformFeesUSDnumberPlatform fees in USD
mevFeesUSDnumberMEV fees in USD
totalFeesUSDnumberTotal fees in USD
gasFeesNativeRawstringGas fees in native token (raw)
platformFeesNativeRawstringPlatform fees in native token (raw)
mevFeesNativeRawstringMEV fees in native token (raw)
totalFeesNativeRawstringTotal fees in native token (raw)

Derived View Fields

These fields are computed using the same deriveSwapView() logic as the WebSocket stream:
FieldTypeDescription
baseTokenstringBase token address
quoteTokenstringQuote token address
pairstringPool/pair address
datestringTrade date (ISO 8601)
tokenPricenumberBase token price in USD
tokenPriceVsnumberQuote token price in USD
priceNativenumberBase token price in quote token terms
tokenAmountnumberFormatted base token amount traded
tokenAmountVsnumberFormatted quote token amount traded
tokenAmountUSDnumber?USD value of the trade
typestringTrade direction: buy or sell
operationstringOperation type (e.g., regular, deposit, withdrawal)
blockchainstringBlockchain name
hashstringTransaction hash
senderstringTransaction sender address
tokenAmountRawstringRaw base token amount (smallest units)
tokenAmountRawVsstringRaw quote token amount (smallest units)

Enrichment Data

FieldTypeDescription
baseTokenDataobject?Full TokenDetailsOutput for the base token — see below
quoteTokenDataobject?Full TokenDetailsOutput for the quote token — see below
pairDataobject?Full MarketDetailsOutput for the pool — see below
marketCapUSDnumber?Base token market cap (convenience shortcut from baseTokenData)
marketCapDilutedUSDnumber?Base token diluted market cap
totalSupplynumber?Base token total supply
circulatingSupplynumber?Base token circulating supply

Position (PnL)

When available, the position object contains the swap recipient’s aggregated PnL data for this token:
FieldTypeDescription
position.balancenumberEstimated current token balance
position.rawBalancestringRaw balance (smallest units)
position.amountUSDnumberCurrent position value in USD
position.nativeBalanceRawstringNative token balance (raw)
position.nativeBalancenumberNative token balance
position.buysnumberTotal buy count
position.sellsnumberTotal sell count
position.volumeBuyTokennumberTotal tokens bought
position.volumeSellTokennumberTotal tokens sold
position.volumeBuynumberTotal buy volume in USD
position.volumeSellnumberTotal sell volume in USD
position.avgBuyPriceUSDnumberAverage buy price in USD
position.avgSellPriceUSDnumberAverage sell price in USD
position.realizedPnlUSDnumberRealized PnL in USD
position.unrealizedPnlUSDnumberUnrealized PnL in USD
position.totalPnlUSDnumberTotal PnL (realized + unrealized)
position.realizedPnlPercentnumberRealized PnL as percentage
position.unrealizedPnlPercentnumberUnrealized PnL as percentage

REST-Only Enrichments

These fields are only available in the REST endpoint (not in the WebSocket stream):
FieldTypeDescription
labelsstring[]?Wallet labels (e.g., smartTrader, sniper, dev, bundler)
walletMetadataobject | nullEntity info (name, logo, labels, type) from known wallets database
platformMetadataobject | nullPlatform details: id, name, logo
Fields only available in real-time stream: The following fields exist in the WebSocket stream but are not stored in the database and will be absent from REST responses: rawPostBalanceRecipient0, rawPostBalanceRecipient1, rawPostBalanceNativeSender, rawPostBalanceNativeRecipient, miniBlockSlot. Additionally, blockHeight, blockHash, logIndex, and transactionIndex are returned as null.

pairData (MarketDetailsOutput)

Full market/pair details including token metadata, price changes, volumes, trade counts, holder stats, socials, and security flags. Key fields:
FieldTypeDescription
token0 / token1objectToken metadata (address, chainId, symbol, name, decimals, id, priceUSD, logo, totalSupply, circulatingSupply, marketCapUSD, marketCapDilutedUSD, deployer, createdAt, athUSD, atlUSD, athDate, atlDate, bonded, bondingPercentage, …)
baseToken / quoteTokenstringBase and quote token addresses
liquidityUSDnumber | nullPool liquidity in USD
priceUSDnumber | nullCurrent token price in USD
priceTokennumber | nullPrice in quote token terms
priceChange{T}Percentagenumber | nullPrice change % for T = 1min, 5min, 1h, 4h, 6h, 12h, 24h
volume{T}USDnumber | nullVolume in USD for T = 1min, 5min, 15min, 1h, 4h, 6h, 12h, 24h
volumeBuy{T}USD / volumeSell{T}USDnumber | nullBuy/sell volume split for each timeframe
trades{T}number | nullTrade count for each timeframe
buys{T} / sells{T}number | nullBuy/sell count for each timeframe
buyers{T} / sellers{T} / traders{T}number | nullUnique buyer/seller/trader count for each timeframe
feesPaid{T}USDnumber | nullFees paid in USD for each timeframe
holdersCountnumber | nullNumber of token holders
top10HoldingsPercentagenumber | null% held by top 10 wallets
devHoldingsPercentagenumber | null% held by deployer
insidersHoldingsPercentagenumber | null% held by insiders
bundlersHoldingsPercentagenumber | null% held by bundlers
snipersHoldingsPercentagenumber | null% held by snipers
exchangeobject | null{ name, logo } — DEX exchange info
typestring | nullPool type (e.g., univ2, univ3)
securityobject | nullSecurity flags (honeypot, mintable, etc.)

baseTokenData / quoteTokenData (TokenDetailsOutput)

Full token details for the base and quote tokens respectively. Key fields:
FieldTypeDescription
addressstringToken contract address
chainIdstringChain ID (e.g., evm:1)
symbol / namestringToken symbol and name
decimalsnumberToken decimals
priceUSDnumber | nullCurrent price in USD
totalSupply / circulatingSupplynumber | nullSupply metrics
marketCapUSD / marketCapDilutedUSDnumber | nullMarket cap metrics
liquidityUSDnumber | nullLiquidity in USD
priceChange{T}Percentagenumber | nullPrice change % for each timeframe
volume{T}USDnumber | nullVolume in USD for each timeframe
holdersCountnumber | nullNumber of holders
deployerstring | nullDeployer address
securityobject | nullSecurity flags

walletMetadata

FieldTypeDescription
entityNamestring | nullEntity name (e.g., “Binance 14”)
entityLogostring | nullEntity logo URL
entityLabelsstring[]Entity labels
entityTypestring | nullEntity type (e.g., “cex”)
entityDescriptionstring | nullEntity description
entityTwitterstring | nullEntity Twitter handle
entityWebsitestring | nullEntity website
entityGithubstring | nullEntity GitHub
entityDiscordstring | nullEntity Discord
entityTelegramstring | nullEntity Telegram

platformMetadata

FieldTypeDescription
idstringPlatform identifier (e.g., "photon")
namestringDisplay name (e.g., "Photon")
logostring | nullPlatform logo URL
The pairData, baseTokenData, and quoteTokenData objects are fetched once per request (since all trades belong to the same pool) and attached to every trade in the response. This makes the response self-contained — no additional API calls are needed to render a full trade row.
The type filter (buy/sell) is applied after fetching from the database, so using it with small limit values may return fewer results than expected. Increase limit if you need a specific number of buys or sells.

Usage Examples

Fetch latest enriched trades for a pool:
curl -X GET "https://api.mobula.io/api/2/token/trades-enriched?blockchain=ethereum&address=0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852&limit=10"
Fetch enriched trades with filters (POST):
curl -X POST "https://api.mobula.io/api/2/token/trades-enriched" \
  -H "Content-Type: application/json" \
  -d '{
    "blockchain": "ethereum",
    "address": "0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852",
    "limit": 50,
    "minAmountUSD": 1000,
    "type": "buy",
    "sortOrder": "desc"
  }'
Historical backfill with pagination:
# Page 1
curl "https://api.mobula.io/api/2/token/trades-enriched?blockchain=bsc&address=0x16b9a82891338f9bA80E2D6970FddA79D1eb0daE&limit=100&offset=0&sortOrder=asc&fromDate=2026-03-01T00:00:00Z"

# Page 2
curl "https://api.mobula.io/api/2/token/trades-enriched?blockchain=bsc&address=0x16b9a82891338f9bA80E2D6970FddA79D1eb0daE&limit=100&offset=100&sortOrder=asc&fromDate=2026-03-01T00:00:00Z"

Special Labels

The label parameter accepts the following values (these are the actual enum string values to pass):
  • proTrader: Trades from known professional trading platforms
  • smartTrader: Trades from wallets identified as smart traders in the last 7 days
  • freshTrader: Trades from newly funded wallets (within last 24 hours)
  • dev: Trades from token deployer addresses
  • sniper: Trades from sniper wallets
  • insider: Trades from insider wallets
  • bundler: Trades from bundler wallets
  • Custom labels created via the wallet labels API

Comparison with Token Trades

Feature/token/trades/token/trades-enriched
SchemaCustom REST formatStream swap-enriched format
pairDataNot includedFull MarketDetailsOutput
baseTokenDataNot includedFull TokenDetailsOutput
quoteTokenDataNot includedFull TokenDetailsOutput
position (PnL)Not includedFull PnL per swap recipient
labelsNot includedWallet labels per trade
Use caseGeneral trade queriesHistorical backfill for live feeds
Field namingcamelCasecamelCase (matches WS stream)

Query Parameters

blockchain
string

Blockchain name or chain ID

address
string

Pool/pair contract address

offset
number | null

Offset for pagination (default: 0)

limit
number | null

Number of trades per page (default: 10)

sortOrder
enum<string>
required

Sort order: asc or desc (default: desc)

Available options:
asc,
desc
label
enum<string>

Filter by wallet label (e.g., sniper, insider, bundler)

Available options:
sniper,
insider,
bundler,
proTrader,
smartTrader,
freshTrader,
dev,
liquidityPool
swapTypes

Comma-separated swap types to filter (e.g., "REGULAR,MEV")

type
enum<string>

Filter by trade direction: "buy" or "sell"

Available options:
buy,
sell
transactionSenderAddresses

Comma-separated wallet addresses to filter (max 25)

maxAmountUSD
number | null

Maximum trade amount in USD

minAmountUSD
number | null

Minimum trade amount in USD

fromDate

Start date filter (timestamp or ISO string)

toDate

End date filter (timestamp or ISO string)

Response

200 - application/json

Enriched token trades response

data
object[]
required