Skip to main content
GET
/
2
/
wallet
/
activity
Get wallet activity
curl --request GET \
  --url https://demo-api.mobula.io/api/2/wallet/activity
{
  "data": [
    {
      "chainId": "<string>",
      "txDateMs": 123,
      "txDateIso": "<string>",
      "txHash": "<string>",
      "txRawFeesNative": "<string>",
      "txFeesNativeUsd": 123,
      "txBlockNumber": 123,
      "txIndex": 123,
      "actions": [
        {
          "model": "swap",
          "swapType": "REGULAR",
          "swapRawAmountOut": 123,
          "swapRawAmountIn": 123,
          "swapAmountOut": 123,
          "swapAmountIn": 123,
          "swapPriceUsdTokenOut": 123,
          "swapPriceUsdTokenIn": 123,
          "swapAmountUsd": 123,
          "swapTransactionSenderAddress": "<string>",
          "swapBaseAddress": "<string>",
          "swapQuoteAddress": "<string>",
          "swapAmountQuote": 123,
          "swapAmountBase": 123,
          "swapAssetIn": {
            "id": 123,
            "name": "<string>",
            "symbol": "<string>",
            "decimals": 123,
            "totalSupply": 123,
            "circulatingSupply": 123,
            "price": 123,
            "liquidity": 123,
            "priceChange24hPercent": 123,
            "marketCapUsd": 123,
            "logo": "<string>",
            "contract": "<string>"
          },
          "swapAssetOut": {
            "id": 123,
            "name": "<string>",
            "symbol": "<string>",
            "decimals": 123,
            "totalSupply": 123,
            "circulatingSupply": 123,
            "price": 123,
            "liquidity": 123,
            "priceChange24hPercent": 123,
            "marketCapUsd": 123,
            "logo": "<string>",
            "contract": "<string>"
          },
          "swapPlatform": {
            "id": "<string>",
            "name": "<string>",
            "logo": "<string>"
          },
          "swapTotalFeesUsd": 123,
          "swapGasFeesUsd": 123,
          "swapPlatformFeesUsd": 123,
          "swapMevFeesUsd": 123,
          "transferRawAmount": "<string>",
          "transferAmount": 123,
          "transferAmountUsd": 123,
          "transferType": "VAULT_DEPOSIT",
          "transferFromAddress": "<string>",
          "transferToAddress": "<string>",
          "transferAsset": {
            "id": 123,
            "name": "<string>",
            "symbol": "<string>",
            "decimals": 123,
            "totalSupply": 123,
            "circulatingSupply": 123,
            "price": 123,
            "liquidity": 123,
            "priceChange24hPercent": 123,
            "marketCapUsd": 123,
            "logo": "<string>",
            "contract": "<string>"
          }
        }
      ],
      "txAction": "<string>"
    }
  ],
  "pagination": {
    "page": 123,
    "offset": 123,
    "limit": 123,
    "pageEntries": 123
  },
  "backfillStatus": "processed",
  "tokens": [
    {
      "address": "<string>",
      "chainId": "<string>",
      "symbol": "<string>",
      "name": "<string>",
      "priceTokenString": "<string>",
      "approximateReserveTokenRaw": "<string>",
      "logo": "<string>",
      "bondedAt": "<string>",
      "createdAt": "<string>",
      "latestTradeDate": "<string>",
      "description": "<string>",
      "socials": {
        "twitter": "<string>",
        "website": "<string>",
        "telegram": "<string>",
        "others": {},
        "uri": "<string>"
      },
      "security": {
        "buyTax": "<string>",
        "sellTax": "<string>",
        "transferPausable": true,
        "top10Holders": "<string>",
        "isBlacklisted": true,
        "noMintAuthority": true,
        "balanceMutable": true,
        "lowLiquidity": "<string>",
        "burnRate": "<string>",
        "liquidityBurnPercentage": 123,
        "isHoneypot": true,
        "isNotOpenSource": true,
        "renounced": true,
        "locked": "<string>",
        "isWhitelisted": true,
        "isMintable": true,
        "modifyableTax": true,
        "selfDestruct": true
      },
      "liveStatus": "<string>",
      "liveThumbnail": "<string>",
      "livestreamTitle": "<string>",
      "liveReplyCount": 123,
      "decimals": 0,
      "id": null,
      "priceUSD": 0,
      "priceToken": 0,
      "approximateReserveUSD": 0,
      "approximateReserveToken": 0,
      "totalSupply": 0,
      "circulatingSupply": 0,
      "marketCapUSD": 0,
      "marketCapDilutedUSD": 0,
      "originLogoUrl": "<string>",
      "rank": null,
      "cexs": [],
      "exchange": {
        "name": "<string>",
        "logo": "<string>"
      },
      "factory": "<string>",
      "source": "<string>",
      "sourceFactory": "<string>",
      "liquidityUSD": 123,
      "liquidityMaxUSD": 123,
      "bonded": true,
      "bondingPercentage": 123,
      "bondingCurveAddress": "<string>",
      "preBondingFactory": "<string>",
      "poolAddress": "<string>",
      "blockchain": "<string>",
      "type": "<string>",
      "tokenType": "2020",
      "deployer": "<string>",
      "athUSD": 123,
      "atlUSD": 123,
      "athDate": "<string>",
      "atlDate": "<string>",
      "priceChange1minPercentage": 0,
      "priceChange5minPercentage": 0,
      "priceChange1hPercentage": 0,
      "priceChange4hPercentage": 0,
      "priceChange6hPercentage": 0,
      "priceChange12hPercentage": 0,
      "priceChange24hPercentage": 0,
      "volume1minUSD": 0,
      "volume5minUSD": 0,
      "volume15minUSD": 0,
      "volume1hUSD": 0,
      "volume4hUSD": 0,
      "volume6hUSD": 0,
      "volume12hUSD": 0,
      "volume24hUSD": 0,
      "volumeBuy1minUSD": 0,
      "volumeBuy5minUSD": 0,
      "volumeBuy15minUSD": 0,
      "volumeBuy1hUSD": 0,
      "volumeBuy4hUSD": 0,
      "volumeBuy6hUSD": 0,
      "volumeBuy12hUSD": 0,
      "volumeBuy24hUSD": 0,
      "volumeSell1minUSD": 0,
      "volumeSell5minUSD": 0,
      "volumeSell15minUSD": 0,
      "volumeSell1hUSD": 0,
      "volumeSell4hUSD": 0,
      "volumeSell6hUSD": 0,
      "volumeSell12hUSD": 0,
      "volumeSell24hUSD": 0,
      "trades1min": 0,
      "trades5min": 0,
      "trades15min": 0,
      "trades1h": 0,
      "trades4h": 0,
      "trades6h": 0,
      "trades12h": 0,
      "trades24h": 0,
      "buys1min": 0,
      "buys5min": 0,
      "buys15min": 0,
      "buys1h": 0,
      "buys4h": 0,
      "buys6h": 0,
      "buys12h": 0,
      "buys24h": 0,
      "sells1min": 0,
      "sells5min": 0,
      "sells15min": 0,
      "sells1h": 0,
      "sells4h": 0,
      "sells6h": 0,
      "sells12h": 0,
      "sells24h": 0,
      "buyers1min": 0,
      "buyers5min": 0,
      "buyers15min": 0,
      "buyers1h": 0,
      "buyers4h": 0,
      "buyers6h": 0,
      "buyers12h": 0,
      "buyers24h": 0,
      "sellers1min": 0,
      "sellers5min": 0,
      "sellers15min": 0,
      "sellers1h": 0,
      "sellers4h": 0,
      "sellers6h": 0,
      "sellers12h": 0,
      "sellers24h": 0,
      "traders1min": 0,
      "traders5min": 0,
      "traders15min": 0,
      "traders1h": 0,
      "traders4h": 0,
      "traders6h": 0,
      "traders12h": 0,
      "traders24h": 0,
      "feesPaid1minUSD": 0,
      "feesPaid5minUSD": 0,
      "feesPaid15minUSD": 0,
      "feesPaid1hUSD": 0,
      "feesPaid4hUSD": 0,
      "feesPaid6hUSD": 0,
      "feesPaid12hUSD": 0,
      "feesPaid24hUSD": 0,
      "totalFeesPaidUSD": 0,
      "totalFeesPaidNativeRaw": "0",
      "organicTrades1min": 0,
      "organicTrades5min": 0,
      "organicTrades15min": 0,
      "organicTrades1h": 0,
      "organicTrades4h": 0,
      "organicTrades6h": 0,
      "organicTrades12h": 0,
      "organicTrades24h": 0,
      "organicTraders1min": 0,
      "organicTraders5min": 0,
      "organicTraders15min": 0,
      "organicTraders1h": 0,
      "organicTraders4h": 0,
      "organicTraders6h": 0,
      "organicTraders12h": 0,
      "organicTraders24h": 0,
      "organicVolume1minUSD": 0,
      "organicVolume5minUSD": 0,
      "organicVolume15minUSD": 0,
      "organicVolume1hUSD": 0,
      "organicVolume4hUSD": 0,
      "organicVolume6hUSD": 0,
      "organicVolume12hUSD": 0,
      "organicVolume24hUSD": 0,
      "organicVolumeBuy1minUSD": 0,
      "organicVolumeBuy5minUSD": 0,
      "organicVolumeBuy15minUSD": 0,
      "organicVolumeBuy1hUSD": 0,
      "organicVolumeBuy4hUSD": 0,
      "organicVolumeBuy6hUSD": 0,
      "organicVolumeBuy12hUSD": 0,
      "organicVolumeBuy24hUSD": 0,
      "organicVolumeSell1minUSD": 0,
      "organicVolumeSell5minUSD": 0,
      "organicVolumeSell15minUSD": 0,
      "organicVolumeSell1hUSD": 0,
      "organicVolumeSell4hUSD": 0,
      "organicVolumeSell6hUSD": 0,
      "organicVolumeSell12hUSD": 0,
      "organicVolumeSell24hUSD": 0,
      "organicBuys1min": 0,
      "organicBuys5min": 0,
      "organicBuys15min": 0,
      "organicBuys1h": 0,
      "organicBuys4h": 0,
      "organicBuys6h": 0,
      "organicBuys12h": 0,
      "organicBuys24h": 0,
      "organicSells1min": 0,
      "organicSells5min": 0,
      "organicSells15min": 0,
      "organicSells1h": 0,
      "organicSells4h": 0,
      "organicSells6h": 0,
      "organicSells12h": 0,
      "organicSells24h": 0,
      "organicBuyers1min": 0,
      "organicBuyers5min": 0,
      "organicBuyers15min": 0,
      "organicBuyers1h": 0,
      "organicBuyers4h": 0,
      "organicBuyers6h": 0,
      "organicBuyers12h": 0,
      "organicBuyers24h": 0,
      "organicSellers1min": 0,
      "organicSellers5min": 0,
      "organicSellers15min": 0,
      "organicSellers1h": 0,
      "organicSellers4h": 0,
      "organicSellers6h": 0,
      "organicSellers12h": 0,
      "organicSellers24h": 0,
      "holdersCount": 123,
      "twitterReusesCount": 0,
      "twitterRenameCount": 0,
      "twitterRenameHistory": [],
      "deployerMigrationsCount": 0,
      "deployerTokensCount": 0,
      "dexscreenerListed": false,
      "dexscreenerHeader": null,
      "dexscreenerAdPaid": false,
      "dexscreenerAdPaidDate": null,
      "dexscreenerSocialPaid": false,
      "dexscreenerSocialPaidDate": null,
      "dexscreenerBoosted": false,
      "dexscreenerBoostedDate": null,
      "dexscreenerBoostedAmount": 0,
      "trendingScore1min": 0,
      "trendingScore5min": 0,
      "trendingScore15min": 0,
      "trendingScore1h": 0,
      "trendingScore4h": 0,
      "trendingScore6h": 0,
      "trendingScore12h": 0,
      "trendingScore24h": 0,
      "isMayhemMode": null,
      "isCashbackCoin": null,
      "top10HoldingsPercentage": 123,
      "top50HoldingsPercentage": 123,
      "top100HoldingsPercentage": 123,
      "top200HoldingsPercentage": 123,
      "devHoldingsPercentage": 123,
      "insidersHoldingsPercentage": 123,
      "bundlersHoldingsPercentage": 123,
      "snipersHoldingsPercentage": 123,
      "proTradersHoldingsPercentage": 123,
      "freshTradersHoldingsPercentage": 123,
      "smartTradersHoldingsPercentage": 123,
      "insidersCount": 123,
      "bundlersCount": 123,
      "snipersCount": 123,
      "freshTradersCount": 123,
      "proTradersCount": 123,
      "smartTradersCount": 123,
      "freshTradersBuys": 123,
      "proTradersBuys": 123,
      "smartTradersBuys": 123
    }
  ]
}
This endpoint intelligently combines transfers into swaps when they occur in the same transaction, providing a unified view of wallet activity.

Query Details

Required Parameters

  • wallet - The wallet address to query (supports ENS domains and various address formats)

Optional Parameters

ParameterTypeDefaultDescription
blockchainsstring-Comma-separated list of blockchain IDs (e.g., "ethereum,base,solana:solana").
limitnumber100Number of items to return.
offsetnumber0Offset for pagination.
orderstring”desc”Sort order: “asc” or “desc” by timestamp.
unlistedAssetsbooleantrueInclude unlisted/unverified tokens.
filterSpambooleantrueFilter out spam tokens.
cursorHashstring-Cursor anchor hash. When set, offset is ignored and results are returned strictly before/after this transaction depending on cursorDirection.
cursorDirectionstring”before”One of before or after. When before, returns items with tx_date_ms strictly less than the cursor’s timestamp. When after, returns items strictly greater than the cursor’s timestamp. The cursor item is never included.
fromnumber-Start timestamp in milliseconds.
tonumber-End timestamp in milliseconds.
enrichSwapsbooleanfalseWhen true, enriches swap actions with platform and fee data from the swaps table. Adds ~300-400ms overhead.
backfillTransfersbooleanfalseWhen true, triggers backfilling of transfer history for the wallet. Returns backfillStatus in the response.

Features

  • Smart Swap Detection: Automatically combines IN/OUT transfers in the same transaction into swap objects
  • Multi-Chain Support: Works across all supported blockchains
  • Spam Filtering: Built-in spam token filtering with customizable options
  • Vault Operations: Special handling for BitPanda Earn pools and similar vault operations
  • Flexible Pagination: Support for both offset-based and cursor-based pagination

Usage Examples

# Basic wallet activity
GET /2/wallet/activity?wallet=0xbe4c54689cb7fb736b56df8ea32c435d0503caed

# Filter by specific blockchains
GET /2/wallet/activity?wallet=0xbe4c54689cb7fb736b56df8ea32c435d0503caed&blockchains=ethereum,base

# Include all tokens (including spam) with more results
GET /2/wallet/activity?wallet=0xbe4c54689cb7fb736b56df8ea32c435d0503caed&filterSpam=false&unlistedAssets=true&limit=100

# Get older transactions using offset
GET /2/wallet/activity?wallet=0xbe4c54689cb7fb736b56df8ea32c435d0503caed&offset=100&limit=50&order=desc

# Filter by date range (timestamps in milliseconds)
GET /2/wallet/activity?wallet=0xbe4c54689cb7fb736b56df8ea32c435d0503caed&from=1704067200000&to=1735689600000

Cursor Pagination Examples

# Fetch a first page and pick a tx_hash to use as the cursor
GET /2/wallet/activity?wallet=0xbe4c54689cb7fb736b56df8ea32c435d0503caed&limit=40&order=desc

# Get OLDER items relative to that transaction
GET /2/wallet/activity?wallet=0xbe4c54689cb7fb736b56df8ea32c435d0503caed&cursorHash=0x<tx_hash>&cursorDirection=before&limit=20

# Get NEWER items relative to that transaction
GET /2/wallet/activity?wallet=0xbe4c54689cb7fb736b56df8ea32c435d0503caed&cursorHash=0x<tx_hash>&cursorDirection=after&limit=20
When using cursorHash, the endpoint sets offset to 0 internally and excludes the cursor transaction from data[]. Combine with order=desc for backward-in-time navigation, or order=asc for forward-in-time navigation.
With cursorDirection=after, the limit applies to the newest items immediately after the cursor hash. This keeps results tightly scoped around the cursor; the cursor transaction itself is excluded.

Query Response

The endpoint returns a unified activity feed with three types of objects:

Activity Types

  1. Transfer (model: "transfer")
    • ERC20 token transfers (IN/OUT)
    • Native token transfers (IN/OUT)
    • Vault operations (DEPOSIT/WITHDRAW)
  2. Swap (model: "swap")
    • Automatically detected from combined transfers
    • Includes token pair information and pricing
    • Base/quote token identification Important: Asset naming is from the wallet’s perspective:
    • swapAssetIn = asset flowing INTO the wallet (what the wallet receives)
    • swapAssetOut = asset flowing OUT of the wallet (what the wallet spends) To determine buy/sell direction:
    • If swapAssetIn matches swapBaseAddressBUY (wallet receives base token)
    • If swapAssetOut matches swapBaseAddressSELL (wallet spends base token)

Swap Fee & Platform Fields (requires enrichSwaps=true)

When enrichSwaps=true is set, swap actions are enriched with additional fields:
  • swapPlatform: Trading platform/aggregator used for the swap. Object with id, name, logo fields. null if not available.
  • swapTotalFeesUsd: Total fees paid in USD
  • swapGasFeesUsd: Gas fees paid in USD
  • swapPlatformFeesUsd: Platform/aggregator fees paid in USD
  • swapMevFeesUsd: MEV/priority fees paid in USD

Transfer Types

  • TOKEN_IN / TOKEN_OUT - Token transfers
  • NATIVE_IN / NATIVE_OUT - Native currency transfers
  • VAULT_DEPOSIT / VAULT_WITHDRAW / VAULT_UNSTAKE - Vault/staking operations

Sample Response

{
  "data": [
    {
      "chainId": "evm:8453",
      "txDateMs": 1753985433000,
      "txDateIso": "2025-07-31T18:10:33.000Z",
      "txHash": "0xf45c...e8a54",
      "txRawFeesNative": "8504635537313",
      "txFeesNativeUsd": 0.03179333913441224,
      "txBlockNumber": 33601643,
      "txIndex": 141,
      "actions": [
        {
          "model": "swap",
          "swapType": "REGULAR",
          "swapRawAmountOut": 3.6056199820541157e+24,
          "swapRawAmountIn": 617836697,
          "swapAmountOut": 3605619.9820541157,
          "swapAmountIn": 617.836697,
          "swapPriceUsdTokenOut": 0,
          "swapPriceUsdTokenIn": 0.9999339877206453,
          "swapAmountUsd": 1265.5204839191017,
          "swapTransactionSenderAddress": "0xbe4c...caed",
          "swapBaseAddress": "0x24ca...d995",
          "swapQuoteAddress": "0x8335...2913",
          "swapAmountQuote": 617.836697,
          "swapAmountBase": 3605619.9820541157,
          "swapAssetIn": {
            "id": 100012309,
            "name": "USDC",
            "symbol": "USDC",
            "decimals": 6,
            "totalSupply": 65132345465,
            "circulatingSupply": 64167440713,
            "price": 0.9999339877206453,
            "liquidity": 682609830.4878722,
            "priceChange24hPercent": -0.009170282103379213,
            "marketCapUsd": 64163204873.9782,
            "logo": "https://coin-images.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
            "contract": "0x8335...2913"
          },
          "swapAssetOut": {
            "id": null,
            "name": "Useless Base Coin",
            "symbol": "USELESS",
            "decimals": 18,
            "totalSupply": 0,
            "circulatingSupply": 0,
            "price": 0,
            "liquidity": 0,
            "priceChange24hPercent": 0,
            "marketCapUsd": 0,
            "logo": null,
            "contract": "0x24ca...d995"
          }
        }
      ]
    },
    {
      "chainId": "evm:8453",
      "txDateMs": 1753941849000,
      "txDateIso": "2025-07-31T06:04:09.000Z",
      "txHash": "0xb0ed...1ced",
      "txRawFeesNative": "132268679678890",
      "txFeesNativeUsd": 0.5115745599103257,
      "txBlockNumber": 33579851,
      "txIndex": 126,
      "actions": [
        {
          "model": "transfer",
          "transferRawAmount": 1000000000000000000,
          "transferAmount": 1,
          "transferAmountUsd": 0,
          "transferType": "TOKEN_IN",
          "transferFromAddress": "0x12b9...d389",
          "transferToAddress": "0xbe4c...caed",
          "transferAsset": {
            "id": null,
            "name": "Salty Apple",
            "symbol": "APPLE",
            "decimals": 18,
            "totalSupply": 0,
            "circulatingSupply": 0,
            "price": 0,
            "liquidity": 0,
            "priceChange24hPercent": 0,
            "marketCapUsd": 0,
            "logo": null,
            "contract": "0x3f1c...ddf3"
          }
        }
      ]
    }
  ],
  "pagination": {
    "page": 1,
    "offset": 0,
    "limit": 10,
    "pageEntries": 10
  },
  "backfillStatus": "processed"
}

Response Field Details

Chain ID Format

Chain IDs are returned in the format evm:chainId (e.g., evm:8453 for Base, evm:1 for Ethereum).

Raw Amounts vs Formatted Amounts

  • transfer_raw_amount / swap_raw_amount_*: Raw token amounts in smallest units (wei for 18-decimal tokens)
  • transfer_amount / swap_amount_*: Human-readable amounts (already divided by decimals)

Asset Information

  • id: Can be null for unlisted/unverified tokens
  • logo: Can be null if no logo is available
  • price: Can be 0 for tokens without established pricing
  • All supply and market cap values: Can be 0 for new or unlisted tokens

Swap Direction (Buy/Sell)

The swap fields use wallet-centric naming:
FieldMeaning
swapAssetInToken received by the wallet
swapAssetOutToken spent by the wallet
swapBaseAddressContract of the base token (non-stablecoin)
swapQuoteAddressContract of the quote token (SOL, USDC, etc.)
Determining trade direction:
  • BUY: swapAssetIn.contract matches swapBaseAddress (wallet receives the base token)
  • SELL: swapAssetOut.contract matches swapBaseAddress (wallet spends the base token)
Example: If wallet swaps SOL for a meme token:
  • swapAssetIn = meme token (received)
  • swapAssetOut = SOL (spent)
  • Direction = BUY (buying the meme token with SOL)

Transaction Fees

  • tx_raw_fees_native: String representation of fees in native token’s smallest unit
  • tx_fees_native_usd: USD value of transaction fees
Raw amounts use JavaScript’s scientific notation for very large numbers (e.g., 3.6056199820541157e+24).
The endpoint automatically handles address formatting across different chains and supports ENS domains.
Large wallets with extensive activity may take longer to process due to swap detection algorithms. Consider using smaller page sizes for better performance.

Query Parameters

wallet
string
required

Wallet address

blockchains
string

Comma-separated list of blockchain IDs (e.g., "ethereum,base,solana:solana")

offset
number | null

Offset for pagination (default: 0)

limit
number | null

Number of transactions per page (default: 100)

order
enum<string>

Sort order: asc or desc (default: desc)

Available options:
asc,
desc
unlistedAssets

Include unlisted assets (default: true)

filterSpam

Filter spam transactions (default: true)

cursorHash
string

Cursor hash for cursor-based pagination

cursorDirection
enum<string>

Cursor direction: before or after

Available options:
before,
after
from
number | null

Start timestamp in milliseconds

to
number | null

End timestamp in milliseconds

Response

200 - application/json

Wallet activity response

data
object[]
required
pagination
object
required
backfillStatus
enum<string>
Available options:
processed,
processing,
pending
tokens
object[]