Build a market dashboard

A dashboard is rows, charts, and freshness — three calls against one computed table: a row that already contains every signal, series that arrive pre-aligned, and a socket that pushes each recompute.

The recipe

1. The row

One call returns everything a ticker card or table row could show: price plus all 421+ computed signals.

curl -s https://api.tickerbot.io/v2/tickers/AAPL \
  -H "Authorization: Bearer $TICKERBOT_API_KEY"

2. The charts

/v2/series returns up to 50 tickers × 25 columns on one aligned time grid: price and indicators together, ready for a chart library.

curl -s "https://api.tickerbot.io/v2/series?tickers=AAPL,MSFT,NVDA\
&columns=close,rsi_14,volume_today&interval=1d&from=2026-01-01" \
  -H "Authorization: Bearer $TICKERBOT_API_KEY"

3. The freshness

Hold a websocket open and each subscribed ticker's freshly-computed row arrives on every refresh cycle.

const ws = new WebSocket('wss://api.tickerbot.io/v2/stream')
ws.onopen = () => {
  ws.send(JSON.stringify({ type: 'auth', api_key: KEY }))
}
ws.onmessage = ({ data }) => {
  const frame = JSON.parse(data)
  if (frame.type === 'authed') {          // subscribe only after the auth ack
    ws.send(JSON.stringify({ type: 'subscribe', tickers: ['AAPL', 'MSFT', 'NVDA'] }))
  }
  if (frame.type === 'update') {          // { ticker, as_of, data }
    store.upsert(frame.ticker, frame.data) // full computed row — UI re-renders
  }
}

4. Per-user watchlists

Model each user's watchlist as a universe and every surface scopes to it: the same list drives their table, their charts, and their alerts.

curl -s -X POST https://api.tickerbot.io/v2/universes \
  -H "Authorization: Bearer $TICKERBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "id": "watchlist_u123", "name": "u123 watchlist", "tickers": ["AAPL","NVDA"] }'

Endpoints used

EndpointRole in this build
GET /v2/tickers/{ticker}The card/row: every computed signal for one ticker, one response
GET /v2/seriesThe charts: aligned multi-ticker, multi-column history
WS /v2/streamThe freshness: full recomputed rows pushed per refresh cycle
POST /v2/universesPer-user watchlists: one list drives table, charts, and alerts

More guides