Realtime Socket.IO
Subscribe to tokens, wallets, and raises. No webhooks.
Realtime updates use Socket.IO at path /socket.io on the API origin. There are no webhooks today.
Subscribe
tssocketSubscribe.ts
import { io } from "socket.io-client";
const socket = io(API_URL, {
path: "/socket.io",
transports: ["websocket", "polling"],
});
socket.on("connect", () => {
socket.emit("subscribe:token", tokenAddress);
// Wallet rooms require a JWT bound to the same wallet
socket.emit("subscribe:wallet", { wallet: address.toLowerCase(), token: jwt });
socket.emit("subscribe:raise", raiseAddress);
});
socket.on("newBuy", (tx) => console.log("buy", tx));
socket.on("newSell", (tx) => console.log("sell", tx));
socket.on("priceUpdate", (token) => console.log("price", token));
socket.on("newToken", (token) => console.log("token", token));
socket.on("leaderboardUpdate", (rows) => console.log("lb", rows));
socket.on("portfolioUpdate", (payload) => console.log("portfolio", payload));
socket.on("raiseUpdate", (raise) => console.log("raise", raise));
socket.on("staked", (payload) => console.log("staked", payload));
socket.on("error", (err) => console.error(err)); // RATE_LIMITED, ROOM_LIMIT, UNAUTHORIZED, …Server events
- newBuy / newSell
- TransactionDto for curve or indexed trades.
- priceUpdate / newToken
- TokenDto updates and launches.
- leaderboardUpdate / portfolioUpdate
- Discovery and wallet room updates.
- raiseUpdate / commitment / raiseFilled / marketResolved
- Raises and governance (when indexer enabled).
- stakingPoolCreated / staked / unstakeRequested / withdrawn / rewardFunded / rewardPaid
- Fee staking lifecycle.
Limits
Connections per IP, events per second, and rooms per socket are capped via server env (SOCKET_MAX_*). Prefer unsubscribing when leaving a page.