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.