Live data
How are updates delivered?
The app uses a single Server-Sent Events (SSE) connection to receive public market data. The stream is available at GET /api/events, with optional market and wallet public-key query parameters to include data for a selected token and wallet.
SSE is a read channel. Wallet signing, approval, transaction submission, and receipt reconciliation remain separate requests. A market update is not proof that a particular wallet transaction succeeded.
What is included?
| Event | Data |
|---|---|
| config | Deployment network, program identities, and current configuration. |
| markets | A markets array with the same market objects as GET /api/markets. |
| price | usd, updatedAt, source, and stale for the SOL/USD conversion. |
| history | points, partial, and updatedAt for the selected market. |
| holders | holders, totalHolders, poolBalance, poolPercentage, and updatedAt. |
| balance | wallet, market, balanceSol, and balance. Token balance is null when no market is selected. |
| resource-error | resource and message identifying the feed that could not be refreshed. |
| heartbeat | A timestamp in epoch milliseconds; a keepalive, not a trade event. |
How quickly does data refresh?
The server subscribes to confirmed Solana account changes for markets, token accounts, mints, and wallet SOL balances. It coalesces nearby notifications for 180 milliseconds before refreshing shared data. Multiple browsers viewing the same resource share the server read and subscription.
| Resource | Periodic refresh when subscribed |
|---|---|
| Markets and wallet balances | Every 5 seconds, alongside account-change notifications |
| Selected-market chart and holders | Every 10 seconds, alongside change-triggered refreshes |
| Configuration | Every 30 seconds |
| SOL/USD rate | Every 60 seconds; unavailable after 5 minutes without a successful rate |
These are refresh intervals, not a guaranteed delivery time. Confirmation, RPC response time, indexing availability, and connection quality affect when an update appears.
What happens on disconnect or a source error?
The stream sends a heartbeat every 15 seconds and requests a 3-second EventSource reconnect delay. Initial connections and reconnections receive current snapshots. There is no event-ID cursor or missed-event replay; use the history response and transaction receipts for their respective records.
A resource-error identifies a failed feed while the server continues retrying it. It does not mean that all other feeds failed or that a pending transaction failed. A recent snapshot can be followed by an error, so consumers must handle both data and availability state.
The current single-process limits are 256 stream connections, 64 distinct selected markets, and 128 distinct wallet addresses. New subscriptions beyond those limits receive HTTP 503. Slow consumers may be disconnected instead of allowing an unbounded send queue.
Does streaming mean immediate settlement?
No. Updates depend on Solana confirmation, RPC notifications, and data refreshes. History and holder scans can arrive later than reserve changes, and the SOL/USD source has its own refresh interval. A displayed quote can change again before your transaction executes.
On reconnection, the client receives current data. The stream does not replace durable transaction receipts or provide a complete archive of missed trades. Chart history remains bounded and marks incomplete data as partial.