Build a portfolio tracker
Model the holdings as a universe and the pricing grind disappears: one call prices every holding with all 421+ signals attached, one call charts the history, and alerts scope to exactly what you hold. Positions and cost basis stay yours.
The recipe
1. Model the holdings
A universe is a named ticker list — one per portfolio, or per user. Update it as positions change.
curl -s -X POST https://api.tickerbot.io/v2/universes \
-H "Authorization: Bearer $TICKERBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "id": "my_portfolio", "name": "My Portfolio", "tickers": ["AAPL","MSFT","NVDA","RIOT"] }'2. Price everything in one call
A scan scoped to the universe returns every holding's current row: price for the P&L math, plus the computed state most trackers never show.
curl -s -X POST https://api.tickerbot.io/v2/scan \
-H "Authorization: Bearer $TICKERBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "q": "price > 0", "universe": "my_portfolio",
"columns": "ticker,price,day_change_pct,rsi_14,above_sma_200" }'
# P&L is your arithmetic on your cost basis:
# value = qty * row.price; pnl = value - qty * cost3. Chart the history
/v2/series puts every holding's price path on one aligned daily grid.
curl -s "https://api.tickerbot.io/v2/series?tickers=AAPL,MSFT,NVDA,RIOT\
&columns=close&interval=1d&from=2026-01-01" \
-H "Authorization: Bearer $TICKERBOT_API_KEY"4. Watch what you own
Alerts scoped to the same universe: the tracker stops being a page you check and starts telling you when a holding needs attention.
curl -s -X POST https://api.tickerbot.io/v2/scan/subscribe \
-H "Authorization: Bearer $TICKERBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "q": "day_change_pct < -0.05 OR rsi_overbought",
"universe": "my_portfolio",
"target_url": "https://your-app.example.com/hook" }'Endpoints used
| Endpoint | Role in this build |
|---|---|
POST /v2/universes | The holdings list: named, updatable, referenced everywhere by slug |
POST /v2/scan | Current value + computed state for every holding, one call |
GET /v2/series | Price history for every holding on one aligned grid |
POST /v2/scan/subscribe | Alerts scoped to the portfolio: pushed, not polled |