Wallet transfer feed

Solana Wallet Transfers API

Every SOL and token transfer between wallets — decoded, USD-valued, and pushed to you as it happens. Watch a list of wallets or a set of tokens, or take the full feed: on Pro, one subscription with no filter delivers every wallet-to-wallet transfer on Solana. Flat monthly pricing, no compute units or credits.

Live transfer stream from $39/mo · Every transfer on Pro at $99/mo · Free REST transfer history

Every transfer
On Pro, with no filter needed
USD value
On every priced transfer
7 days
Of history over REST

Coverage

What counts as a wallet transfer

SOL and any token, wallet to wallet. Swaps, pool moves and program deposits are left out on purpose, so the feed is funds moving between wallets and nothing else. A wallet's swaps are on the trades stream.

  • A wallet sending SOL or a token to a different wallet. Moves to program accounts (deposits, payouts, a DEX's pools) are not transfers.
  • Two wallets exchanging tokens with each other in one transaction is a swap, not two transfers. A watched wallet's swaps come on the trades stream with a wallets filter; they are not repeated here.
  • Inside a transaction that also swaps, only a transfer moving at least half of what the sender swapped in that token counts, such as sweeping the proceeds to another wallet. App fees don't.
  • Any amount above zero. volumeUsd is the USD value when the transfer was decoded, or null when the token had no price yet.
  • There is no source field: almost every transfer is sent by the wallet itself, not through an app.

Looking for a wallet's swaps? They're on the trades stream

Swaps are not on this feed. To follow what a particular wallet buys and sells, subscribe to the trades stream with that address in its wallets filter — up to 100 wallets — or pull its last 7 days with GET /v1/wallets/:wallet/trades. Each swap carries both legs, the venue and a USD value.

client.stream("trades", { wallets: ["WALLET_ADDRESS"] })

Run it next to a transfers subscription on the same connection and you see what a wallet trades and where the funds go afterwards, without counting anything twice. On Starter the trades stream also needs a mints filter; Pro can watch wallets on their own.

Payload

The shape of a Solana transfer

One TransferV1 object on the live stream and over REST — sender, receiver, token, amount and USD value.

{
  "type": "transfer",
  "wallet": "5FHwkW5742VKq9W8pN3mL7jR2sT6cX4bY1zD8gH9K2pQ",
  "volumeUsd": 228.5,
  "transfer": {
    "from": "5FHwkW5742VKq9W8pN3mL7jR2sT6cX4bY1zD8gH9K2pQ",
    "to": "3M6iBQx9d4h8FLpNq2sT7wJcY6zR1nGtK5uA3oXvE2mB",
    "mint": "So11111111111111111111111111111111111111112",
    "symbol": "SOL",
    "amount": "2000000000",
    "uiAmount": 2,
    "decimals": 9
  },
  "signature": "6Rk3nT2xQeB8mVdR4wLc9fJhY6zS1nGtK5uA3oXvW7qE2mCpH8dRzL4nJb9FgKtR5zXvY2mNc8hQ",
  "slot": 309847050,
  "timestamp": 1751009300000
}

wallet is the wallet the message is for. Compare it with transfer.from and transfer.to for the direction. With a wallets filter you get one message per watched side, so a transfer between two wallets you watch arrives twice — dedupe on signature plus wallet if you need it once. Without one, each transfer arrives once, with wallet set to the sender.

uiAmount is the decimal-adjusted size; raw amount and decimals are there when you need them. SOL appears as the wrapped-SOL mint with 9 decimals, so SOL and tokens share one parser. symbolis for display (null for a token we haven't resolved yet); key on mint, since anyone can give a token any symbol.

volumeUsd is the USD value when the transfer was decoded, and null when the token had no price yet. timestamp is Unix milliseconds (nullable when blockTime is unknown); use slot for ordering. There is no source field: almost every transfer is sent by the wallet itself, not through an app.

REST rows are the identical shape, so backfill and live code share one parser: wallet transfers takes the same filters as the stream.

Use cases

What people build on wallet transfers

One stream, four common jobs.

Wallet trackers and activity feeds

Show what a wallet sent and received as it happens, with the token symbol and a USD value already on the event. Backfill the last 7 days over REST when the page loads.

Whale alerts

Set minVolumeUsd and receive only the transfers above your threshold — for a set of tokens on Starter, or across every transfer on Pro.

Following a dev or insider wallet

Pair transfers with the wallets filter on the trades stream to see both halves: what a wallet buys and sells, and where the funds go next.

Deposit and payout monitoring

Watch your own addresses with direction set to in or out and react to each movement, without polling an RPC node for balance changes.

Filters

Filter Solana transfers by wallet, token, direction or size

Applied on our side, before anything is sent to you.

By wallet (wallets)

The wallets to watch: everything each one sends or receives. Up to 100 at once on Starter and 1,000 on Pro. The cap is how many you watch at the same time — re-subscribe with a new list whenever you like. Pro can also leave the filter out and receive every transfer.

By token (mints)

Only transfers of these tokens — any token, wrapped SOL included. Up to 25 at once on Starter and 100 on Pro. With wallets, you get those wallets' transfers of those tokens.

By direction (direction)

in for what the watched wallets received, out for what they sent; omit it for both. It needs wallets, because direction only means something relative to a wallet you watch.

By size (minVolumeUsd / maxVolumeUsd)

USD bounds for whale alerts and for cutting dust, on the stream and on the REST endpoint. These filters exclude transfers where volumeUsd is null.

Filters AND across fields and OR within a list. Starter must send wallets or mints; Pro may send neither and receive every transfer. Transfers have no sourcesfilter — a filter the channel doesn't take is rejected as invalid_filters, never silently ignored.

Quickstart

Stream Solana wallet transfers in Python or TypeScript

Python uses pip install anaxer; TypeScript uses @anaxer/sdk. cURL shows the free-plan REST path.

import asyncio
import anaxer

# Starter or higher for the live transfers stream
async def main():
    async with anaxer.connect(api_key="YOUR_API_KEY") as client:
        async with client.stream(
            "transfers",
            # Starter must pass wallets or mints; Pro may omit both for every transfer.
            wallets=["WALLET_ADDRESS"],
            direction="out",
        ) as sub:
            async for t in sub:
                print(t.wallet, "->", t.transfer.to, t.transfer.ui_amount, t.transfer.symbol, t.volume_usd)

asyncio.run(main())
import { connect } from "@anaxer/sdk";

const client = connect({ apiKey: process.env.ANAXER_API_KEY! });

// Everything these wallets receive, $1,000 and up.
client
  .stream("transfers", {
    wallets: ["WALLET_ADDRESS", "ANOTHER_WALLET_ADDRESS"],
    direction: "in",
    minVolumeUsd: 1000,
  })
  .on("data", (t) => {
    console.log(t.transfer.from, "→", t.wallet, t.transfer.uiAmount, t.transfer.symbol, t.volumeUsd);
  });

// Pro: no filter at all — every wallet-to-wallet transfer on Solana.
client.stream("transfers").on("data", (t) => {
  console.log(t.transfer.from, "→", t.transfer.to, t.transfer.uiAmount, t.transfer.symbol, t.volumeUsd);
});
# REST transfer history works on every plan, including Free (7-day window)
curl "https://api.anaxer.com/v1/wallets/WALLET_ADDRESS/transfers?direction=out&limit=50" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Only one token, $500 and up
curl "https://api.anaxer.com/v1/wallets/WALLET_ADDRESS/transfers?mints=TOKEN_MINT&minVolumeUsd=500" \
  -H "Authorization: Bearer YOUR_API_KEY"

New to our WebSocket? The wire protocol, reconnect and backfill patterns are documented in one place.

Plans

What transfer access costs

The live stream starts at Starter. REST transfer history works on Free. Streams are never metered by volume.

Pro gets every transfer on Solana

Pro is not limited to a watchlist. Subscribe to transfers with no wallets and no mints filter and you receive every wallet-to-wallet transfer — SOL and every token — as it happens, for $99/month. Add minVolumeUsd to keep only the large ones, or pass up to 1,000 wallets and 100 tokens when you want to narrow it down.

PlanLive transfers streamFilter requirementWatch at onceConnections per stream typeREST transfer historyMonthly REST requests
FreeNo———Yes, 7-day window2,500
Starter $39Yes — the wallets or tokens you choosewallets or mints required100 wallets or 25 tokens1Yes, 7-day window250,000
Pro $99Yes — every transfer on SolanaNone — filters are optionalEverything, or up to 1,000 wallets and 100 tokens2Yes, 7-day window2,500,000

Transfer history is 7 days on every plan, and transfers are stored from 11 November 2026, the day the stream launched. Anaxer is stream-first; REST is for backfill and recent lookups, not a multi-year archive.

Build vs buy

Tracking wallets without running an indexer

What it takes to get the same feed from a raw Solana node.

  1. 1

    Find the transfers

    A raw node gives you transactions, not transfers. You subscribe to each wallet or to everything, then decode the System Program and token-program instructions inside them.

  2. 2

    Work out who sent what to whom

    Tokens move between token accounts, not wallets, so each one has to be resolved to its owner. Then swaps, pool moves and program deposits have to be separated from real wallet-to-wallet transfers.

  3. 3

    Price each one

    A USD value needs a live price for every token at the moment of the transfer. Anaxer attaches it upstream, from the same prices that feed the trades and prices streams.

With Anaxer that is one subscribe message. If you need raw account data or programs we don't decode, a full RPC provider is still the right tool — raw firehose versus parsed streams covers how to choose.

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.

Free

Try it out

$0USD
Start free

Streams

Token Creation

Included

Token Graduation

Included

Token Prices

Not included

DEX Trades

Not included

Wallet Transfers

Not included

Stream limits

Connections per stream type

1

REST API

Requests / mo

2.5k

Rate limit

30/min
Most popular

Starter

Hobbyists & indie devs getting started

$39USD/mo
Get started

Streams

Token Creation

Included

Token Graduation

Included

Token Prices

Included

DEX Trades

Track up to 25 tokens at once

Included

Wallet Transfers

Up to 100 wallets or 25 tokens at once

Included

Stream limits

Connections per stream type

1

REST API

Requests / mo

250k

Rate limit

300/min

Pro

Built for dev and production environments

$99USD/mo
Get started

Streams

Token Creation

Included

Token Graduation

Included

Token Prices

Included

DEX Trades

All tokens, unlimited

Included

Wallet Transfers

All transfers, unlimited

Included

Stream limits

Connections per stream type

2

REST API

Requests / mo

2.5M

Rate limit

600/min

Enterprise

High volume, custom limits, dedicated support and an SLA.

Contact us

FAQ

Solana wallet transfers API — frequently asked questions

Solana wallet transfers

It is Anaxer's transfers stream and its REST endpoint. The stream pushes a transfer event over WebSocket each time a wallet sends SOL or a token to another wallet, with the sender, receiver, token, amount and USD value. GET /v1/wallets/:wallet/transfers returns the same events for one wallet over the last 7 days.

A wallet sending SOL or a token to a different wallet. Moves to program accounts — deposits, payouts, a DEX's pools — are not transfers, and two wallets exchanging tokens in one transaction is a swap, which arrives on the trades stream instead. Any amount above zero counts.

Yes, on Pro ($99/month) and Enterprise. Subscribe to the transfers stream with no wallets and no mints filter and you receive every wallet-to-wallet transfer of SOL and tokens as it happens. The 1,000-wallet and 100-token limits only apply when you choose to narrow the stream. Starter must send wallets or mints.

From the trades stream or the wallet trades endpoint, not from transfers. Subscribe to the trades stream with the wallet in its wallets filter (up to 100 addresses) to receive its swaps live, or call GET /v1/wallets/:wallet/trades for the last 7 days. On Starter the trades stream also needs a mints filter; Pro can watch wallets on their own. The REST endpoint works on every plan.

Up to 100 wallets or 25 tokens at once on Starter, and up to 1,000 wallets and 100 tokens on Pro. The caps are how many you watch at the same time, not a total — change your list whenever you like. Pro can also send no filter at all and receive every transfer.

Yes, on every priced transfer. volumeUsd is the USD value when the transfer was decoded. It is null when the token had no price yet, and a null value fails minVolumeUsd and maxVolumeUsd, so a size filter never matches an unpriced transfer.

REST transfer history works on the free plan: 2,500 requests a month over a 7-day window, no credit card. The live transfers stream starts on Starter at $39/month, and every transfer with no filter is on Pro at $99/month.

Seven days, the same on every plan. Transfers are stored from 11 November 2026, the day the stream launched, so there is no history before that date.

With a wallets filter you get one message per watched side. A transfer between two wallets you are watching arrives twice, once with each wallet in the wallet field. Dedupe on signature plus wallet if you need each transfer once. Without a wallets filter each transfer arrives once, with wallet set to the sender.

Yes. SOL and any token are covered in one stream. SOL appears as the wrapped-SOL mint, So11111111111111111111111111111111111111112, with 9 decimals, so one parser handles both.

No. Events carry wallet addresses only. Anaxer does not tell you which address belongs to an exchange, a fund or a person — bring your own labels and match on address.

Start building today.

Build your next Solana app in minutes, not weeks.