Query Details
Required Parameters
wallet - Wallet address to query trades for (supports EVM and Solana addresses)
Optional Parameters
| Parameter | Type | Default | Description |
|---|
wallets | string | - | Comma-separated list of additional wallet addresses |
tokenAddress | string | - | Filter trades involving this token contract address |
blockchains | string | - | Comma-separated list of blockchain IDs (e.g., "ethereum,base,solana:solana") |
limit | number | 50 | Number of trades per page (min: 1, max: 100) |
offset | number | 0 | Offset for pagination |
order | string | ”desc” | Sort order by date: "asc" or "desc" |
from | number | - | Start timestamp in milliseconds |
to | number | - | End timestamp in milliseconds |
The endpoint also supports POST requests with the same parameters in the JSON body. Useful for complex queries or when passing multiple wallet addresses.
Pagination is offset-based, consistent with other V2 wallet endpoints (/wallet/activity, /wallet/positions).
- Use
offset and limit to control which slice of results you receive
page in the response is computed as Math.floor(offset / limit) + 1
The response includes a pagination object:
{
"pagination": {
"page": 1,
"offset": 0,
"limit": 50,
"pageEntries": 42
}
}
pageEntries indicates the actual number of trades returned (may be less than limit on the last page).
Response Overview
Each item in data[] represents a consolidated swap trade:
| Field | Type | Description |
|---|
id | string | Unique trade identifier |
type | string | Trade direction: "buy" or "sell" (relative to base token) |
operation | string | Swap type: "regular", "mev", etc. |
baseTokenAmount | number | Amount of base token traded (formatted with decimals) |
baseTokenAmountRaw | string | Raw amount of base token in smallest units |
baseTokenAmountUSD | number | USD value of the trade |
quoteTokenAmount | number | Amount of quote token traded (formatted) |
quoteTokenAmountRaw | string | Raw amount of quote token in smallest units |
quoteTokenAmountUSD | number | USD value of the quote side |
baseTokenPriceUSD | number | Base token price at trade time |
quoteTokenPriceUSD | number | Quote token price at trade time |
date | number | Trade timestamp in milliseconds |
blockchain | string | Blockchain name (e.g., "Ethereum", "Solana") |
transactionHash | string | Transaction hash |
marketAddress | string | Pool/market contract address |
transactionSenderAddress | string | Wallet that sent the transaction |
swapSenderAddress | string | Address that initiated the swap (may differ for AA wallets) |
swapRecipient | string|null | Swap beneficiary address (important for Account Abstraction) |
baseToken | object|null | { address, name, symbol, logo, decimals } |
quoteToken | object|null | { address, name, symbol, logo, decimals } |
labels | string[] | Wallet labels (e.g., "sniper", "insider", "smart-money") |
platform | object|null | { id, name, logo } - Trading platform/aggregator |
totalFeesUSD | number|null | Total fees paid in USD |
gasFeesUSD | number|null | Gas fees in USD |
platformFeesUSD | number|null | Platform/aggregator fees in USD |
mevFeesUSD | number|null | MEV/priority fees in USD |
preBalanceBaseToken | string|null | Pre-swap raw balance of base token |
preBalanceQuoteToken | string|null | Pre-swap raw balance of quote token |
postBalanceBaseToken | string|null | Post-swap raw balance of base token |
postBalanceQuoteToken | string|null | Post-swap raw balance of quote token |
Usage Examples
Basic: single wallet
curl -X GET "https://api.mobula.io/api/2/wallet/trades?wallet=0xaF88370abD82EC6943cdB3D4ec7b764B92c35B43" \
-H "Authorization: YOUR_API_KEY"
Solana wallet with limit
curl -X GET "https://api.mobula.io/api/2/wallet/trades?wallet=4tqMHgB8jjbTgefVfqtVFYzyfQz2LQ8T3E922ePmt6kZ&limit=10" \
-H "Authorization: YOUR_API_KEY"
Filter by token and blockchains
curl -X GET "https://api.mobula.io/api/2/wallet/trades?wallet=0xaF88370abD82EC6943cdB3D4ec7b764B92c35B43&tokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&blockchains=ethereum&limit=20" \
-H "Authorization: YOUR_API_KEY"
curl -X GET "https://api.mobula.io/api/2/wallet/trades?wallet=0xaF88370abD82EC6943cdB3D4ec7b764B92c35B43&limit=10&offset=10&order=desc" \
-H "Authorization: YOUR_API_KEY"
POST with multiple wallets
curl -X POST "https://api.mobula.io/api/2/wallet/trades" \
-H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"wallet": "0xaF88370abD82EC6943cdB3D4ec7b764B92c35B43",
"wallets": "0xaF88370abD82EC6943cdB3D4ec7b764B92c35B43,4tqMHgB8jjbTgefVfqtVFYzyfQz2LQ8T3E922ePmt6kZ",
"limit": 20
}'
Date range filter
curl -X GET "https://api.mobula.io/api/2/wallet/trades?wallet=0xaF88370abD82EC6943cdB3D4ec7b764B92c35B43&from=1704067200000&to=1735689600000&order=asc" \
-H "Authorization: YOUR_API_KEY"
Sample Response
{
"data": [
{
"id": "22039719729",
"operation": "regular",
"type": "sell",
"baseTokenAmount": 10289426.248783976,
"baseTokenAmountRaw": "10289426248783975872330870",
"baseTokenAmountUSD": 1953.59,
"quoteTokenAmount": 0.6675364467,
"quoteTokenAmountRaw": "667536446729330304",
"quoteTokenAmountUSD": 1953.59,
"preBalanceBaseToken": null,
"preBalanceQuoteToken": null,
"postBalanceBaseToken": null,
"postBalanceQuoteToken": null,
"date": 1768290275000,
"swapSenderAddress": "0xd2b37ade14708bf18904047b1e31f8166d39612b",
"transactionSenderAddress": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
"swapRecipient": "0xd2b37ade14708bf18904047b1e31f8166d39612b",
"blockchain": "Ethereum",
"transactionHash": "0x07dcb584b301f2b8d445e504ff64f27ea8d8a9c9d58329145a0813c9d0f18dd0",
"marketAddress": "0x79786aa97633871f4ea737b3099cf911598d65b7",
"baseTokenPriceUSD": 0.00018986,
"quoteTokenPriceUSD": 3124.15,
"labels": [],
"baseToken": {
"address": "0x9f277edfc463ebaa3d2a6274b01177697e910391",
"name": "Miniature Woolly Mammoth",
"symbol": "WOOLLY",
"logo": "https://metadata.mobula.io/assets/logos/evm_1_0x9f277edfc463ebaa3d2a6274b01177697e910391.webp",
"decimals": 18
},
"quoteToken": {
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"name": "Ethereum",
"symbol": "ETH",
"logo": "https://metadata.mobula.io/assets/logos/evm_1_0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.webp",
"decimals": 18
},
"platform": null,
"totalFeesUSD": 0.058,
"gasFeesUSD": 0.058,
"platformFeesUSD": 0,
"mevFeesUSD": 0
}
],
"pagination": {
"page": 1,
"offset": 0,
"limit": 50,
"pageEntries": 1
}
}
The tokenAddress filter uses the raw contract address. Make sure to pass the correct address for the blockchain you’re querying (e.g., WETH on Ethereum, SOL on Solana).
Use order=asc with from to efficiently scan trade history forward from a specific point in time.