Solana Tracker LogoSolana Tracker
Swap
Developers
⌘K
Affiliate
All Resources
Track Jupiter DCA Orders with REST and WebSocket
Data APITypeScriptSeptember 20, 20264 min readSolana Tracker

Track Jupiter DCA Orders with REST and WebSocket

Query Jupiter DCA orders and stream fills with the Solana Data API. Handle V2 orders, pagination, account snapshots, and remaining-flow estimates.

  • data-api,
  • dca,
  • jupiter,
  • websocket

A recurring order's remaining balance is not the same as executed buying pressure. Use the Jupiter DCA API to inspect order state, then use fill events to observe executions. Keep deposits, withdrawals, closes, and account snapshots separate from fills.

Fetch wallet orders with the SDK

Run the Node.js example

Use Node.js 24 LTS and keep the API credentials on your server. Create an empty directory, then install:

npm init -y
npm install @solana-tracker/[email protected]
npm install --save-dev tsx typescript @types/node

Save the TypeScript block as index.mts. Put ST_API_KEY in an uncommitted .env file. Streaming examples also need ST_DATASTREAM_URL, the full private WebSocket URL from your Data API dashboard. REST and streaming access depend on your plan.

node --env-file=.env --import tsx index.mts

Set WALLET_ADDRESS to the public owner address you want to inspect.

import { Client } from '@solana-tracker/data-api';
const apiKey = process.env.ST_API_KEY;
if (!apiKey) throw new Error('Set ST_API_KEY');
const client = new Client({ apiKey });
const mint = process.env.TOKEN_MINT ?? 'So11111111111111111111111111111111111111112';
const wallet = process.env.WALLET_ADDRESS;
if (!wallet) throw new Error('Set WALLET_ADDRESS');
const params = { program: 'jupiter', status: 'active', limit: 50 } as const;
const page = await client.getDcaWalletOrders(wallet, params);
for (const order of page.orders) console.log(order);
if (page.pagination.hasMore && page.pagination.nextCursor != null) {
  const next = await client.getDcaWalletOrders(wallet, {
    ...params, cursor: page.pagination.nextCursor,
  });
  console.log('Next page:', next.orders.length);
}

Use the returned pagination block rather than assuming that fewer than 50 rows always means completion. Keep status, program, and sort settings with the cursor.

Choose the scope that matches the question

Wallet endpoints show an owner's orders. Token buyers are orders with that token as output; token sellers use it as input. Pair queries preserve input/output direction. An order address identifies the DCA account, not its owner's wallet.

Use getDcaTokenFlow for an overview and inspect underlying orders when explaining a number. Remaining amounts can change when an owner deposits, withdraws, pauses, or closes a position. They are not a commitment that all future cycles will execute.

Include DCA V2 without splitting your index

The API and Datastream include openDcaV2 orders. The openInstruction field distinguishes the opening variant. Do not filter only for an older instruction name or create a second state store unless your analysis needs that distinction.

Subscribe to fills or account state

Run this block as a separate stream.mts process with the Datastream environment variable.

import { Datastream } from '@solana-tracker/data-api';
const wsUrl = process.env.ST_DATASTREAM_URL;
if (!wsUrl) throw new Error('Set ST_DATASTREAM_URL from your dashboard');
const ds = new Datastream({ wsUrl });
ds.on('error', () => console.error('Datastream connection error'));
process.once('SIGINT', () => ds.disconnect());
ds.subscribe.dca.filled().on((event) => console.log('Cycle executed:', event));

Choose subscribe.dca.wallet(wallet) or subscribe.dca.order(address) for narrower updates. The all-events, type-specific, and scoped rooms overlap, so one action can arrive through several subscriptions.

A position update is an account snapshot with writeVersion, not a transaction event with a signature. Do not count it as another fill. Replace the stored account state and reconcile it with REST after connection gaps.

Present amounts and forecasts honestly

USD fields can be null when price data is unavailable. Keep null distinct from zero. If you estimate remaining notional or future daily flow, label it as a derived estimate, preserve token units, and state the price observation used.

Do not interpret a buy-side order list as net market demand without considering sellers, other venues, status changes, and whether the next cycles actually fill.

FAQ

Does this API create or execute DCA orders?

These methods inspect indexed orders and events. They are not an order-submission API.

Are V2 orders included automatically?

Yes. Use openInstruction if you need to distinguish their opening instruction.

Is a position snapshot a fill?

No. Snapshots update account state; filled events describe cycle executions.

References

  • DCA REST schema
  • DCA stream reference

Related Guides

Track Solana Liquidity Adds and Removes with SDK 0.5
Data API

Track Solana Liquidity Adds and Removes with SDK 0.5

Read more
Add Wallet Identity to Solana Trades and Holders
Data API

Add Wallet Identity to Solana Trades and Holders

Read more
Stream Solana Trades: Backfill and Live Activity
Data API

Stream Solana Trades: Backfill and Live Activity

Read more

Products

  • Data API
  • Pump.fun API
  • Solana RPC
  • Dedicated Nodes
  • Yellowstone gRPC
  • Raptor Swap API
  • Enterprise

Trading

  • Swap
  • Latest Tokens
  • Trending
  • Top Gainers
  • Memescope
  • Whale Watch
  • KOL Tracker

Tools

  • Wallet Tracker
  • Rugcheck
  • PnL Leaderboard
  • KOLScan
  • Axiom Leaderboard
  • Photon Leaderboard
  • Bloom Leaderboard
  • FOMO Leaderboard
  • GMGN Leaderboard
  • Pump.fun App Leaderboard
  • Terminal Leaderboard
  • Platform Compare
  • My Positions
  • Teams

Resources

  • Developer Guides
  • Blog
  • Documentation
  • API Reference
  • Status
  • Affiliate Program — 25% recurring, uncapped
Solana TrackerSolana Tracker© 2026
Terms of ServicePrivacy PolicyContact