Changelog
Additions, changes, and removals to the API and its documentation, newest first.
Every trade of a token, from its own side
- ChangedGET /tokens/{token_address}/trades now includes pools where the token is paired with another token rather than SOL or USDC, whichever side of the pool it sits on. Every trade is described from the requested token's side: buy or sell, amounts, price, value in USD and SOL, and market cap.
- NewGET /pools/{pool_address}/trades takes token, one of the pool's two tokens, and describes each trade from that token's side. It defaults to the pool's base token.
- ChangedPools that graduated from a bonding curve quoted in another token now list the launched token as base, so its trades and market cap appear under that token.
Endpoints grouped by task, with plain titles
- ChangedEndpoints and streams are grouped by what you are doing: Token Research, Charts & Pools, Trades, Discovery, Smart Money and Wallet Analysis. Each has a short title, such as Token Metadata or Wallet Positions. Paths are unchanged.
- NewGET /pools/{pool_address}/trades lists the trades in one pool, including the bonding curve it migrated from. It takes the same filters, 30-day history and cursor as GET /tokens/{token_address}/trades.
- NewGET /tokens/signals takes token_address and then returns every signal on that token. Without it, the feed keeps the latest signal per token.
- ChangedThe trades stream is now pool_trades. Subscribe with pool_trades; trades is no longer accepted.
- RemovedGET /trades and GET /tokens/{token_address}/signals are removed. Use GET /tokens/{token_address}/trades or GET /pools/{pool_address}/trades, and GET /tokens/signals?token_address=.
Trades for one token across all of its pools
- NewWebSocket stream token_trades: subscribe with a token_address to get every buy and sell of that token across all of its pools, including pools created after you subscribe, such as the pool a bonding curve migrates to. It counts as one watched item.
- ChangedEvents on the trades stream now include pool_address and dex.
- ChangedWebSocket frames sent right after the auth frame, without waiting for its reply, now wait for authentication instead of failing with "Authenticate first".
- NewEvery trade carries its chain position: slot, tx_index (the transaction within the slot) and event_index (the trade within the transaction). This applies to GET /trades, GET /tokens/{token_address}/trades, GET /wallets/{wallet_address}/trades, GET /wallets/activity, recent trades on GET /wallets/leaderboard, and the trades and wallet_activity streams. Lists sort by created_at, then slot, tx_index and event_index.
- NewGET /tokens/{token_address}/trades lists a token's trades across every pool it trades in, bonding curve included, newest first. Each trade names its pool_address and dex. It takes the same filters, 30-day history and cursor as GET /trades.
- ChangedGET /trades?token_address= reads the token's pools directly, so tokens that trade rarely come back in well under a second instead of several seconds.
Clearer endpoint names, dydt-cli 0.3.0, and new guides
- ChangedEndpoints have written names in the reference, in search and as the OpenAPI summary, for example GET /tokens is "Get many tokens" and GET /pools/metrics is "Get metrics for many pools". Operation ids and links are unchanged.
- Newdydt-cli 0.3.0 has a command for every endpoint and uses the new names. Commands from 0.2 were renamed: update the CLI and the agent skills together, and see the changelog on GitHub for the old and new names.
- NewGuides: Build your own agent, with the tool-use loop and a runnable example; Tokens and pools; and a WebSocket lifecycle diagram that includes the auth frame.
One naming standard across the HTTP API
- ChangedEvery path, parameter and field is snake_case. Five resources: /tokens, /pools, /trades, /wallets and /market. /tokens/signals reads across every token; /tokens/{token_address}/signals reads one.
- ChangedAddresses are named token_address, pool_address, wallet_address, base_address and quote_address everywhere; transactions are tx_hash.
- ChangedResponses are { code, error, message, data } with code 0 on success. Paged lists add pagination.next_cursor and pagination.has_more.
- ChangedTimes are Unix milliseconds in *_at fields, percentages are 0 to 100 in *_pct fields, and money fields carry a _usd, _sol or _quote suffix.
- ChangedPools by token, by pair and the newest pools are one endpoint, GET /pools. Trade events and recent trades are one endpoint, GET /trades.
- ChangedUnknown query parameters are rejected with 400. Rate limits are reported in RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.
- ChangedEvery list takes limit: GET /tokens/{token_address}/traders (up to 100) and GET /tokens/{token_address}/signals (up to 50) now do too. GET /wallets/signals filters by window, like every other endpoint.
- ChangedRankings, signal feeds, labels and the leaderboard live under their resource: /tokens/rankings/{feed}, /tokens/signals, /wallets/signals, /wallets?label=kol and /wallets/leaderboard. Labeled trades are /wallets/activity, which also follows your own list of wallets.
- NewGET /tokens/{token_address}/holders lists the largest holders. GET /tokens and GET /pools/metrics take up to 50 addresses in one call.
- NewNew filters: order=asc on trades to walk forward from start_time; start_time on token signals for polling; start_time on candles; label on top traders and holders; market cap range on wallet activity; min_value_usd on holdings; min_trade_count, min_volume_usd and min_win_rate_pct on the leaderboard; wallets, token, multiple, profit, cost, hold time, entry market cap and bots on wallet signals.
- ChangedWebSocket streams use the same names: prices is now candles, real_time_token_metrics is pool_metrics, token_ranking is rankings, token_meta_data is token_metadata. Subscribe payloads are snake_case, for example { "pool_address": … }.
- ChangedEvery stream event is { "stream", "data" }. Streams with more than one kind of event (rankings, markers, token_signals, wallet_signals) name it in data.event; ranking transitions and window batches now arrive on the rankings stream.
dydt Data API launch
- New26 read-only HTTP endpoints at https://data.dydt.ai/v1 and 12 WebSocket streams on one connection at wss://data.dydt.ai/ws, authenticated with API keys.
- NewOpenAPI 3.1 and AsyncAPI 3.1 references generated from the same catalog as the live explorers.
- NewPlans: Free, Starter, Pro and Scale, with lower monthly prices on 3, 6 and 12 month terms. Pay in USDC or SOL from a wallet app or your dydt trading wallet, or match a hand-sent payment by its signature.
- NewPer-account limits on requests per second, monthly requests, requests in flight, stream messages and watched items, reported in X-RateLimit and X-Quota headers.
- NewWallet stats, holdings, trades, daily PnL and leaderboards on every plan. Signals, wallet labels, KOL and smart-money trades, markers, chart annotations and X posts on Pro and Scale.
- NewStable status codes: the HTTP status times ten plus a digit for specific cases. The full list is in core concepts.