The Orca Whirlpool API: real-time concentrated liquidity data on Solana and Eclipse
Whirlpool is Solana's second-biggest concentrated liquidity venue, and the same program ID runs on Eclipse mainnet. That makes it the only major Solana DEX with first-class cross-chain CLMM coverage out of the box. The official dev surface is genuinely thin: a Web3.js v2 SDK, a Rust SDK, and a REST endpoint at api.orca.so. All useful, none built for sub-second streaming. We watch the program directly and ship parsed Whirlpool events over gRPC: every swap, openPosition, increaseLiquidity, collectFees, and tick-array crossing, decoded as the transaction lands. 13ms p50 from slot to socket.
- Orca WhirlpoolwhirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc, Same program ID on Solana mainnet and Eclipse mainnet, single IDL, two chains
Try it live: Orca Whirlpool streams
decoded solana events over grpc · click Run to see live data
1grpcurl -H "x-api-key: YOUR_API_KEY" \
2 -d '{"topic":"prod.mat.solana.program.swaps.orca_whirlpool","format":"JSON"}' \
3 stream-1.nln.clr3.org:443 nln.stream.v1.StreamService/SubscribeSee real data
Click Run to stream 5 live Orca Whirlpool messages
Pro: 2 streams $49/mo · Ultra: 20 streams $199/mo · pre-parsed, zero infra
The Whirlpool events you can stream
every decoded instruction across swap, position, and pool lifecycle
| Event | Type | Description | Frequency | Latency |
|---|---|---|---|---|
| swap | instruction | Whirlpool swap (legacy). Decoded with sqrt-price-limit, tick-array crossings, and amount in/out. | Very high | 13ms |
| swapV2 | instruction | Token-2022 aware swap with extension support. The current default for Whirlpool clients. | Very high | 13ms |
| openPosition | instruction | Mints a new Whirlpool Position NFT for a tick range. The canonical LP entry signal. | High | 13ms |
| openPositionWithMetadata | instruction | Same as openPosition but with Metaplex token metadata attached to the Position NFT. | Medium | 13ms |
| increaseLiquidity | instruction | Adds tokens to an existing position. Includes both A and B token amounts and the resulting liquidity delta. | High | 13ms |
| decreaseLiquidity | instruction | Withdraws liquidity from a position. Often paired with collectFees + closePosition for full exits. | High | 13ms |
| collectFees | instruction | Realizes the fees accrued in a Position. Useful for computing per-position yield. | Medium | 13ms |
| collectReward | instruction | Claims the reward emissions on positions in incentivized pools (up to three rewards per pool). | Medium | 13ms |
| closePosition | instruction | Burns the Position NFT after liquidity is fully withdrawn. Marks position lifecycle end. | Medium | 13ms |
| initializePool | instruction | Creates a new Whirlpool with a chosen tick spacing (fee tier). Surfaces new pair launches. | Low | 13ms |
| updateFeesAndRewards | instruction | Refreshes the per-position fee + reward growth checkpoint. Required before collectFees / collectReward. | Medium | 13ms |
Whirlpool streaming performance
last reviewed 2026-04-28
What Whirlpool actually is, and the unusual bit
Whirlpool is Orca's concentrated-liquidity AMM, modeled on Uniswap V3. LPs pick a tick range, supply both tokens in a ratio that depends on where price sits in that range, and earn fees only while the active price is inside their bounds. Swaps consume liquidity tick by tick until the input is filled, so executions walk through precisely-priced bins instead of a smooth curve. So far, standard CLMM mechanics.
Here's the unusual bit. The same program ID is deployed on Solana mainnet and Eclipse mainnet, byte-for-byte identical IDL. Whirlpool ends up as the only major Solana DEX with first-class cross-chain CLMM coverage out of the box. For data consumers this is a small win that compounds: one parsed-event handler, one decoder, two chains.
The Whirlpool program ID and account model
Program ID: whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc. It owns four account types that together describe every CLMM pool, every LP entry, and the fee structure they live under.
The pool itself. Token A / token B mints, current sqrt-price (Q64.64), tick spacing, fee rate, protocol fee, reward info[3]. Watch sqrt-price for live price; watch tickCurrentIndex for cross-tick events.
A fixed-size account holding 88 contiguous initialized ticks. Every swap that crosses a tick boundary writes to one or more. Tracking which TickArrays a pool actively uses tells you where liquidity concentrates.
An LP entry, paired with a Position NFT. Holds tickLower, tickUpper, liquidity, feeOwedA/B, and the per-position fee growth checkpoint. The NFT is the access token to manage the position.
Top-level configuration and the supported tick spacings (1, 8, 64, 128, 256). Every Whirlpool resolves to one FeeTier; reading these tells you which fee bucket a pool sits in.
Three ways to query Whirlpool data: REST, SDK, gRPC
Orca offers two surfaces. The on-chain stream is a third. Each fits a different use case; mixing them in a single product is normal.
| Surface | Right for | Latency | Decoded? |
|---|---|---|---|
| api.orca.so REST | Pool dashboards, leaderboards | Polling, ~10-30s lag | Yes (aggregates only) |
| @orca-so/whirlpools SDK | App backends, periodic syncs | Per-RPC-call | Yes (typed account fetch) |
| Yellowstone gRPC | Bots, MEV, market making | Sub-50ms p99 | Yes (NoLimitNodes parsed) |
The SDK is the right tool when you need a single Whirlpool's state on demand: fetching positions for a wallet, computing quote previews, building a one-shot query. gRPC is the right tool when you need everything happening live across many pools. REST is fine for a chart on a dashboard. Don't pick gRPC for a chart and don't pick REST for a bot. See the gRPC nodes page for transport details.
What teams build with Whirlpool data
LP analytics & range monitors
Watch tickCurrentIndex on each Whirlpool. When the active tick crosses outside a tracked Position's tickLower/tickUpper, that position stops earning fees. That's your rebalance signal. The parsed swap stream gives you the cross within ~13ms.
Fee dashboards
collectFees, increaseLiquidity, and decreaseLiquidity together give you the inputs and outputs to compute per-position yield curves. Anchor IDL decoding gives you the exact fee currency split per position with no hand-rolled math.
MEV & arb
Whirlpool swaps are a primary input to Solana arb engines that equalize price across Raydium, Meteora, and Orca. Real-time sqrt-price updates let you compute the post-trade pool state before the next slot lands. That's the whole game.
New-pool detection
Filter on initializePool to catch new Whirlpools at creation. The instruction reveals tick spacing (fee tier), both mints, and the initial sqrt-price, which is enough to size and place a limit-order-like position immediately.
Whirlpool on Eclipse: same program, separate stream
Eclipse is an SVM L2. Whirlpool is deployed there at the identical address, whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc. The IDL matches Solana mainnet byte-for-byte, which means the same parsed-event decoder, the same SDK, and the same client code work without modification. That's rare. It's also the strongest argument for treating Whirlpool as a single product across two chains.
What differs is the gRPC endpoint and the live state. Eclipse has its own block production, its own validator set, and a different set of active Whirlpool addresses. We provide separate gRPC endpoints for the two networks; teams running cross-chain analytics or arbitrage subscribe to both and tag the originating chain downstream.
Frequently asked questions
Related products
Cross-DEX coverage, combine with Whirlpool for full Solana CLMM picture.
Bin-based dynamic liquidity, different LP math, complementary data.
Browse every decoded instruction and event the Orca Whirlpool program emits.
The transport layer behind every NoLimitNodes Whirlpool subscription.
18 curated topics across DEXes, lifecycle, and system events. The catalog hub.
Bonding curve creates, trades, and graduations decoded in real time.
Start streaming Orca Whirlpool in under 60 seconds
Pro plan from $49/mo includes 2 parsed streams. Pick Whirlpool plus any other Solana or Eclipse program in our explorer.