Solana DEX Trades API
Every swap across Raydium, Orca, Meteora, PumpSwap and more — decoded, USD-valued, and delivered sub-450ms from chain confirmation. Filter by token, wallet, or trade size server-side. Flat monthly pricing, no compute units or credits, no funded wallet.
Live trade streams from $39/mo · Free REST trade history · Sub-450ms · no compute units or credits
- 12
- Decoded programs
- sub-450ms
- From chain confirmation
- USD value
- On every priced trade
Coverage
The Solana DEXes we decode
PumpSwap — the largest Solana DEX by volume — plus every Raydium, Orca and Meteora pool type. 12 programs and counting, and the catalog is public.
Meteora DBC is decoded for historical queries; its live signal isn't on the stream.
Jupiter and other aggregators
Jupiter, Axiom, Photon and GMGN aren't venues — they route orders to the pool that executes them. You don't need a separate subscription for any of them: a Jupiter-routed swap arrives as a trade on the pool that filled it, carrying that pool's source. Multi-hop routes emit one event per hop rather than one combined swap, and intermediate token-to-token legs often have volumeUsd: null. You see the fill whenever the route lands on a venue listed above.
GET /v1/programs is public and unauthenticated — verify this table yourself and validate source slugs at build time. See the programs docs.
Payload
The shape of a Solana swap
One SwapV1 object for live streams and REST backfill — derive buy/sell from the legs, not a side flag.
{
"type": "swap",
"source": "orca_whirlpool",
"wallet": "5FHwkW5742VKq9W8pN3mL7jR2sT6cX4bY1zD8gH9K2pQnM",
"volumeUsd": 1842.5,
"swap": {
"from": {
"mint": "So11111111111111111111111111111111111111112",
"amount": "25000000000",
"uiAmount": 25,
"decimals": 9
},
"to": {
"mint": "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm",
"amount": "8421100000000",
"uiAmount": 8421100,
"decimals": 6
}
},
"signature": "5xY8kR3nQmZ2vLdE9fWqT1sN4pC7hUoB6yA8jK2mVxRt3wDzS9pQeH4LcM7nJb1FgKtR5zXvY2mNc8h",
"slot": 309812501,
"timestamp": 1751008869000
}There is no side field. If your tracked token is swap.to, it was bought; if it is swap.from, it was sold. The mints filter matches either leg, so both directions arrive in one subscription.
uiAmount is the decimal-adjusted size — you also get raw amount and decimals when you need them. wallet is the trader. volumeUsd is nullable (see below). timestamp is Unix milliseconds (nullable when blockTime is unknown); use slot for ordering.
REST trade rows are the identical shape (SwapV1, type included), so backfill and live code share one parser. Token trades REST.
Pricing
USD value on every trade — and when it's null
Execution price in SOL, converted with an on-chain SOL/USD oracle price — not a polled third-party REST quote.
Per-mint SOL price comes from the execution price of trades. USD is that price times an on-chain SOL/USD oracle, updated from the chain. That is how volumeUsd is derived for USD value on every priced trade.
volumeUsd is null when a mint has no SOL price yet or the SOL/USD feed is unavailable. Setting minVolumeUsd or maxVolumeUsd excludes null-volume trades — a volume floor silently drops unpriced swaps. Design filters with that interaction in mind.
Filters
Filter Solana trades by token, wallet, or size
Server-side filters on the trades channel — facts only. Wire protocol lives on the WebSocket page.
By token (mints)
Matches either leg, so you get buys and sells in one subscription. Quote assets (SOL/USDC/USDT) are rejected here — use solOnly. Starter tracks 1–10 mints; Pro may omit mints for the firehose.
By wallet (wallets)
Up to 100 addresses across every venue we decode — the foundation of copy-trading and whale tracking on the trades stream.
By size (minVolumeUsd / maxVolumeUsd)
USD bounds for whale filtering. Remember: these filters exclude trades where volumeUsd is null.
By venue (sources) and solOnly
Pass 1–20 sources. solOnly keeps swaps where at least one leg is wrapped SOL and ANDs with every other filter.
Filters AND across fields and OR within a list. A filter on the wrong channel is rejected as invalid_filters — never silently ignored.
Quickstart
Stream Solana DEX trades in Python or TypeScript
Python uses the standard websockets library — there is no Python SDK. TypeScript uses @anaxer/sdk. cURL shows the free-plan REST path.
import asyncio, json, websockets
API_KEY = "YOUR_API_KEY" # Starter or higher for the live trades stream
async def main():
url = f"wss://api.anaxer.com/v1/stream?apiKey={API_KEY}"
async with websockets.connect(url) as ws:
await ws.send(json.dumps({
"type": "subscribe",
"id": "dex-trades",
"channel": "trades",
# Starter must pass mints (1-10); Pro may drop it for the firehose.
"filters": {
"sources": ["raydium_clmm", "orca_whirlpool", "meteora_dlmm"],
"mints": ["YOUR_TOKEN_MINT"],
},
}))
async for raw in ws:
msg = json.loads(raw)
if msg.get("channel") == "trades":
t = msg["data"]
print(t["source"], t["volumeUsd"],
t["swap"]["from"]["mint"], "->", t["swap"]["to"]["mint"])
asyncio.run(main())import { connect } from "@anaxer/sdk";
const client = connect({ apiKey: process.env.ANAXER_API_KEY! });
// Starter still requires mints. wallets is bounded 1-100 on trades.
client
.stream("trades", {
mints: ["YOUR_TOKEN_MINT"],
wallets: ["WHALE_WALLET_ADDRESS"],
})
.on("data", (swap) => {
console.log(swap.wallet, swap.source, swap.volumeUsd);
});# REST trade history works on every plan, including Free (7-day window)
curl "https://api.anaxer.com/v1/tokens/YOUR_TOKEN_MINT/trades?solOnly=true&limit=50" \
-H "x-api-key: YOUR_API_KEY"New to our WebSocket? The wire protocol, reconnect and backfill patterns are documented in one place.
Plans
What trade access costs
Live trades start at Starter. REST trade history works on Free. Plan price buys throughput and coverage — not history depth.
Pro removes the token filter entirely — one subscribe, every swap across every venue we decode. The unfiltered trade firehose is $99/month.
Trade history is 7 days on every plan — the same window in the API clamp and in storage. Anaxer is stream-first; REST is for backfill and recent lookups, not a multi-year query warehouse. You are not paying for one.
Compare
How Anaxer compares for Solana DEX trade data
Trade-specific columns against the general data-API camp — not the Pump.fun-native trading APIs.
Better elsewhere: choose Bitquery for deep historical and multi-chain analytical work, and Helius when you need a full RPC surface alongside data. We win on flat price, decoded USD-valued swaps, and time-to-first-event for live Solana DEX trade feeds.
Competitor details from public pricing and docs pages as of July 26, 2026 — verify before relying on them.
Learn more
DEX data guides and reference
Docs and guides for the trades stream, REST backfill, and the build-vs-buy question.
Pricing
Simple pricing. No compute units. No credits.
Flat monthly plans you can understand in 10 seconds. The bill is the price on the box.
Streams
Token Creation
Token Graduation
Token Prices
DEX Trades
Wallet Transfers
Stream limits
Connections per stream
REST API
Requests / mo
Rate limit
Streams
Token Creation
Token Graduation
Token Prices
DEX Trades
Track up to 10 tokens (SOL pairs via solOnly)
Wallet Transfers
Stream limits
Connections per stream
REST API
Requests / mo
Rate limit
Streams
Token Creation
Token Graduation
Token Prices
DEX Trades
All tokens, unlimited
Wallet Transfers
Stream limits
Connections per stream
REST API
Requests / mo
Rate limit
Enterprise
High volume, custom limits, dedicated support and an SLA.
FAQ