200+ signals. 25+ sources. One API.

Daily ranked stock and crypto watchlists with model conviction scores, reference levels, and macro context. Free tier live now — no key required.

Free

$0/mo

100 calls / day

Top 5 stock & crypto

Risk levels & sectors

Performance chart data

No API key required

Starter

$19/mo

500 calls / day

Model conviction scores

Upside & downside levels

Catalyst summaries

Full watchlist + daily change log

Pick-by-pick performance history

Ultra

$99/mo

10,000 calls / day

Everything in Pro, plus:

Undervalued (GARP) watchlist

Monthly Generational selection (rolling out, first full selections August 2026)

Full historical picks archive, all cohorts

150+ fields per stock

Insider & congress trading data

Cancel anytime from your Stripe dashboard. No contracts.

Endpoints, fields, and rate limits may change. Some paid endpoints are newly added and may have limited historical data at first.

Full machine-readable contract: /api/v1/openapi.json (OpenAPI 3.0, importable into Postman/codegen)

Free — no key required

GET /api/v1/free/today.json Top 5 stocks + top 5 crypto + basic macro
GET /api/v1/crypto/today.json Top 5 crypto with basic signals
GET /api/v1/performance/cumulative.json Cumulative performance chart data
GET /api/v1/metadata.json Endpoint discovery, signal health, schema
GET /api/v1/performance/undervalued.json Undervalued strategy performance chart data
GET /api/v1/performance/undervalued_cumulative.json Undervalued cumulative growth chart data

Starter — $19/mo (includes all Free endpoints)

GET /api/v1/watchlist/today.json Full watchlist with reference levels & catalysts
GET /api/v1/watchlist/changes.json What changed today vs yesterday
GET /api/v1/performance/history.json Full ranking history with returns

Pro — $49/mo (includes all Starter endpoints)

GET /api/v1/stocks/today.json Top 25 stock feed with all fields
GET /api/v1/crypto/full.json Top 25 crypto with on-chain & derivatives
GET /api/v1/confidence/latest.json Model conviction scores
GET /api/v1/macro/today.json Full macro regime: VIX, yields, GDP, CPI, FRED
GET /api/v1/stocks/sectors.json Sector-level breakdown of the stock feed
GET /api/v1/performance.json Win rates, returns, S&P 500 comparison
GET /api/v1/performance/symbols.json Per-stock performance analytics
GET /api/v1/alerts/today.json Today's price-level alert events

Ultra — $99/mo (includes all Pro endpoints)

GET /api/v1/undervalued/latest.json Undervalued watchlist (12-month value selections)
GET /api/v1/generational/latest.json Generational (forever-hold) selections — launching August 2026
GET /api/v1/ultra/archive.json Full historical pick archive with exit prices & reasons

Filter /stocks/today.json with query params:

GET /api/v1/stocks/today.json?min_score=80§or=Technology&risk=low&limit=10
GET /api/v1/stocks/today.json?symbol=NVDA
symbolLookup a specific stock
min_scoreMinimum AI score (0-99)
sectorFilter by sector
riskMax risk level: low, medium, or high
limitMax results to return
Loading...

Single stock from /watchlist/today.json (Starter):

{
  "rank": 1,
  "symbol": "DDOG",
  "company": "Datadog, Inc.",
  "sector": "Technology",
  "price": 227.70,
  "change_percent": 4.02,
  "selection_score": 100.62,
  "risk_level": "Moderate",
  "conviction_tier": "medium",
  "catalyst_summary": "Upgrade; Strong buy consensus...",
  "technical_levels": {
    "current_price": 227.70,
    "entry_reference_level": 224.50,
    "upside_reference_level": 252.00,
    "downside_reference_level": 208.00,
    "moving_average_50": 195.07,
    "moving_average_200": 153.19,
    "reference_disclaimer": "Model-derived levels for research only, not trade instructions"
  },
  "analyst_rating": "Strong Buy"
}

From /macro/today.json (Pro):

{
  "macro_regime": "cautious",
  "market_regime": "cautious",
  "vix_context": {
    "value": 20.2,
    "regime": "elevated_fear"
  },
  "fear_greed_index": 13,
  "fear_greed_label": "Extreme Fear",
  "spy_trend": {
    "price": 728.16,
    "trend": "neutral",
    "drawdown_pct": -3.89
  },
  "fed_rate": 3.63,
  "gdp_estimate": 2.5,
  "sector_strength": ["Healthcare", "Industrials", "Financials"],
  "summary": "BLS unemployment 4.3%; Treasury average interest rate 3.69%"
}

From /watchlist/changes.json (Starter):

{
  "added": [
    {"symbol": "DDOG", "score": 100.6, "sector": "Technology"},
    {"symbol": "V", "score": 84.0, "sector": "Financial Services"}
  ],
  "removed": [
    {"symbol": "FTNT", "score": 87.1},
    {"symbol": "CSX", "score": 81.2}
  ],
  "retained": ["LLY"],
  "score_changes": [
    {"symbol": "LLY", "previous_score": 78.3, "current_score": 102.0, "change": 23.7}
  ],
  "turnover": 4
}

All endpoints return JSON. Your data is in the data field: response.data.stocks[0].symbol

Auth: Authorization: Bearer YOUR_API_KEY — Free endpoints need no key. Rate limits: Free 100/day, Starter 500/day, Pro 2,000/day, Ultra 10,000/day.

import requests

# Free (no key)
data = requests.get(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/free/today.json"
).json()["data"]

for s in data["stocks"]:
    print(f"{s['rank']}. {s['symbol']} — Score {s['selection_score']}, ${s['price']}")

# Paid (with key)
headers = {"Authorization": "Bearer YOUR_API_KEY"}
data = requests.get(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/stocks/today.json",
  headers=headers,
  params={"min_score": 80, "sector": "Technology"}
).json()["data"]

for s in data["stocks"]:
    levels = s.get("technical_levels", {})
    print(f"{s['symbol']} — Up {levels.get('upside_reference_level')}, Down {levels.get('downside_reference_level')}")
// Free (no key)
const res = await fetch(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/free/today.json"
);
const { data } = await res.json();
data.stocks.forEach(s =>
  console.log(`${s.rank}. ${s.symbol} — Score ${s.selection_score}, $${s.price}`)
);

// Paid (with key)
const paid = await fetch(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/stocks/today.json?min_score=80",
  { headers: { Authorization: "Bearer YOUR_API_KEY" } }
);
const paidData = (await paid.json()).data;
paidData.stocks.forEach(s => {
  const levels = s.technical_levels || {};
  console.log(`${s.symbol} — Up ${levels.upside_reference_level}, Down ${levels.downside_reference_level}`);
});
=TOP5PICKS()                    → Today's top 5 ranked stocks
=TOP5STOCK("NVDA", "score")     → AI score for any symbol
=TOP5STOCK("AAPL", "upside")    → Upside reference level (Starter+)
=TOP5SECTORS()                  → Sector breakdown with avg scores

Free functions work without an API key. Upside/downside fields require Starter or above.

200+ signals from 25+ market data sources. Stock and crypto data aggregated, scored, and ranked daily. Signal health is monitored automatically.

  • No uptime SLA. Data refreshes daily, best-effort availability. Missing signals reduce weight rather than break output.
  • Algorithm updates: Scoring weights and fields may change. Breaking changes are announced in advance.
  • Cancel anytime from your Stripe dashboard. No contracts.

Disclaimer: This API provides ranked model output for educational and informational purposes only. It is not financial advice, not a recommendation to buy, sell, or hold any security, and not personalized investment guidance. We are not a registered investment advisor. Past model performance does not guarantee future results. Use this data at your own risk. Full disclaimer →