18 tools — type / or use the sidebar filter to jump to one

Tool Reference

All 18 Stocklake tools — parameters, response fields, and examples. Organized by what you're paying for: data is free, intelligence is Pro. ← Getting Started

Not financial advice. All data, ratings, signals, and AI assessments are for informational and research purposes only. Nothing here constitutes investment advice or a recommendation to buy or sell any security.
No tool matches — try a different search term.

get_stock free

Returns price, fundamentals, technical indicators, and company profile for a ticker — everything you need about a stock in one call.

Parameters

NameTypeDescription
symbolstringTicker symbol, e.g. AAPL. Case-insensitive.

Response fields

FieldTypeDescription
symbolstringTicker
namestringCompany full name
sector / industrystringSector and industry classification
country / currency / exchangestringCountry, reporting currency, exchange code
pricenumberCurrent market price (multi-source, authoritative)
change_pctnumberDay change %
volume / avg_volumenumberDay volume and average volume
prev_closenumberPrevious close
week52_high / week52_lownumber52-week range
market_cap / enterprise_valuenumberMarket cap and enterprise value
betanumberBeta vs market
pe_trailing / pe_forwardnumberTrailing and forward P/E ratios
price_to_booknumberPrice-to-book ratio
dividend_yield / dividend_rate / ex_dividend_datenumber / stringDividend info
debt_to_equitynumberD/E ratio
profit_margins / operating_marginsnumberNet and operating profit margins
revenue_growth / earnings_growthnumberYoY growth rates
revenue_ttm / gross_profit_ttmnumberTrailing twelve-month revenue and gross profit
free_cashflownumberFree cash flow (TTM)
return_on_equitynumberROE
analyst_ratingstringAnalyst consensus label: strong_buy · buy · hold · sell · strong_sell
analyst_rating_scorenumberMean analyst recommendation score: 1.0 = strong buy, 5.0 = strong sell (lower is better)
analyst_target / analyst_countnumberMean price target and number of analyst opinions
indicatorsobjectRSI, MACD {macd_line, signal_line, histogram}, Bollinger Bands {upper_band, middle_band, lower_band}, SMA20/SMA200, EMA20/EMA200, ATR (all tiers). pro also unlocks every other field inside this same object: williams_r, ultimate_osc, vix_fix {value, percentile, spike}, williams_ad {trend, divergence}, td_sequential {setup_count, setup_direction, countdown_count, countdown_complete, phase}, elliott_wave {signal, trade_signal}, adx {adx, plus_di, minus_di}, ichimoku {tenkan, kijun, cloud_top, cloud_bot, above_cloud, below_cloud}, squeeze {squeeze_on, hist} — omitted entirely (not just unlabeled) for free/guest, along with any indicator added later.
descriptionstringLong-form company business description
websitestringCompany website URL
employeesintegerFull-time employee count
officersarrayTop 5 executives: name, title, total_pay
updated_atstringData freshness timestamp (ISO 8601 UTC)
ratingobjectpro Composite technical score: score (0-10), direction (POSITIVE/NEUTRAL/NEGATIVE), signals (per-indicator breakdown). Computed from the same indicators block, no extra AI cost.
signalsobjectpro Flat labeled technical signals — overall + rsi/macd/bollinger/sma200/sma50/williams_r/ultimate_osc/vix_fix/williams_ad/td_sequential/elliott_wave, each with a plain-English label pre-interpreted for programmatic use.
stance_signalsarraypro Unified list of per-source directional calls — technical rating, AI summary (near_term + longer_term), insider/institutional sentiment, analyst consensus, and any active screener signals. Each entry: stance (POSITIVE/NEGATIVE/NEUTRAL), conviction (0-10), horizon (INTRADAY/SWING/POSITION/LONG_TERM), edge_quality (PROVEN/OBSERVATION/UNKNOWN — that source's own signal_backtest track record), source, raw_label, as_of. A source with no data for this stock is simply omitted, not returned as null.
relative_strengthobjectpro Multi-window relative strength vs SPY, QQQ, and the stock's GICS sector ETF. windows: 5d/20d/60d/120d/12m → stock_return_pct plus rs_vs_spy/rs_vs_qqq/rs_vs_sector (percentage-point spread, stock return minus benchmark return — not a ratio). verdict: one-line plain-language read, e.g. "Laggard — weak near- and long-term". Windows/benchmarks with insufficient history are simply omitted; null if not precomputed yet for this symbol.
ai_verdict / ai_headlinestring / stringpro The minimum useful AI-narrative slice, precomputed (no extra AI cost) — positive/neutral/negative verdict and a one-line "why". For the full text (summary/key_points/risks/near_term/longer_term), call get_stock_research.
ai_score / ai_score_bandnumber | null / string | nullpro 0-100 composite score from stock_ai_summary.py — same 0-100 scale/band convention as get_signals' signal_score but a distinct field/pipeline. Band: Weak / Moderate / Strong / Very Strong. Null if no ai_summary doc exists yet.
forensic_scoresobjectpro Three classic forensic-accounting formulas computed from balance sheet/income statement/cash flow data, refreshed on each company's own filing cadence (roughly annual): altman_z {score, zone: safe/grey/distress} — Altman 1968 bankruptcy-risk composite; piotroski_f {score 0-9, strength: strong/moderate/weak} — Piotroski 2000 fundamental-strength score; beneish_m {score, likely_manipulator: bool} — Beneish 1999 earnings-manipulation-likelihood score (a screening heuristic, not a determination of actual manipulation). Every sub-block also carries a note explaining what it measures and known caveats — e.g. Altman Z isn't meaningful for banks/insurers and can flag REITs or client-money-float businesses as "distress" by design, not because anything is wrong. score: null means genuinely not computable for this company (common for financial-sector names), not an error. computed_at: ISO 8601 timestamp. No trading signal is derived from these scores anywhere in this API today.
Example
{ "symbol": "NVDA", "name": "NVIDIA Corporation", "price": 116.78, "change_pct": 2.31, "market_cap": 2847000000000, "pe_trailing": 38.2, "analyst_rating": "buy", "analyst_target": 165.00, "indicators": { "rsi": 58.4, "macd": { "macd_line": 1.23, "signal_line": 0.94, "histogram": 0.29 }, "bollinger_bands": { "upper_band": 124.1, "middle_band": 114.3, "lower_band": 104.5 } } }
Example — META (Communication Services, strong buy consensus)
{ "symbol": "META", "name": "Meta Platforms Inc.", "short_name": "Meta", "price": 635.29, "change_pct": 1.54, "volume": 18720000, "market_cap": 1612600000000, "pe_trailing": 27.8, "analyst_rating": "strong_buy", "analyst_target": 725.00, "indicators": { "rsi": 65.3, "macd": { "macd_line": 8.45, "signal_line": 6.12, "histogram": 2.33 }, "bollinger_bands": { "upper_band": 652.80, "middle_band": 598.40, "lower_band": 544.00 } } }
Example — Pro tier rating + signals (appended alongside the fields above)
{ "rating": { "score": 6.0, "direction": "POSITIVE", "signals": { "rsi": { "verdict": "mild_negative", "text": "strong (65.7) — mild negative" }, "macd": { "verdict": "positive", "text": "above signal — positive crossover" }, "trend": { "verdict": "positive", "text": "price > SMA50 > SMA200 — strong uptrend" } } }, "signals": { "overall": "POSITIVE", "rsi": { "value": 65.7, "signal": "approaching_overbought" }, "macd": { "signal": "positive", "histogram": 0.8984, "strength": "moderate" }, "sma200": { "trend": "above", "gap_pct": 20.7 } } }
Example — Pro tier stance_signals (appended alongside the fields above)
{ "stance_signals": [ { "stance": "POSITIVE", "conviction": 2, "horizon": "SWING", "edge_quality": "UNKNOWN", "source": "technical_rating", "raw_label": "6.0/10", "as_of": "2026-07-31T14:02:11+00:00" }, { "stance": "POSITIVE", "conviction": 7, "horizon": "LONG_TERM", "edge_quality": "UNKNOWN", "source": "ai_summary", "raw_label": "Cloud momentum accelerating into next earnings", "as_of": "2026-07-30T22:15:00+00:00" }, { "stance": "POSITIVE", "conviction": 9, "horizon": "LONG_TERM", "edge_quality": "UNKNOWN", "source": "analyst_consensus", "raw_label": "Strong Buy (58 analysts)", "as_of": "2026-07-31T14:02:11+00:00" } ] }
Example — Pro tier relative_strength (appended alongside the fields above)
{ "relative_strength": { "windows": { "5d": { "stock_return_pct": -8.31, "rs_vs_spy": -9.38, "rs_vs_qqq": -9.17, "rs_vs_sector": -8.91 }, "20d": { "stock_return_pct": -1.25, "rs_vs_spy": -0.68, "rs_vs_qqq": 3.57, "rs_vs_sector": 3.23 }, "60d": { "stock_return_pct": 7.54, "rs_vs_spy": 5.48, "rs_vs_qqq": 8.55, "rs_vs_sector": 4.29 }, "120d": { "stock_return_pct": 12.59, "rs_vs_spy": 4.37, "rs_vs_qqq": 0.33, "rs_vs_sector": -10.03 }, "12m": { "stock_return_pct": 49.41, "rs_vs_spy": 29.91, "rs_vs_qqq": 27.06, "rs_vs_sector": 15.23 } }, "verdict": "Mixed — lagging near-term, outperforming long-term" } }
Example — Pro tier AI-narrative slice (appended alongside the fields above)
{ "ai_verdict": "positive", "ai_headline": "Data center demand still outpacing supply into next quarter", "ai_score": 72, "ai_score_band": "Strong" }

get_stocks free+

Batch stock data for up to 25 symbols in a single call — the same fields get_stock returns for the same key/symbol, so this is a true batch, not a thinned-down scan. Returns prices, fundamentals, and indicators keyed by symbol. Each symbol in the batch counts as one call toward your daily limit. Pro tier adds the same precomputed rating/signals/relative_strength blocks as get_stock, plus ai_verdict/ai_headline/ai_score/ai_score_band per symbol — no extra AI cost. Not included even on Pro: stance_signals and the full ai_summary text — call get_stock/get_stock_research for those.

ParameterTypeDefaultDescription
symbolsarray of stringsrequiredStock tickers (max 25). Symbols with hyphens (e.g. BRK-B) are supported. Invalid symbols are silently skipped.
curl -s https://api.stocklake.dev/mcp \ -H "Authorization: Bearer sl_your_key" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_stocks","arguments":{"symbols":["JPM","GS"]}}}'
Example response
{ "count": 2, "symbols": { "JPM": { "symbol": "JPM", "name": "JPMorgan Chase & Co.", "sector": "Financial Services", "price": 296.73, "change_pct": -0.42, "volume": 8930000, "analyst_rating": "strong_buy", "indicators": { "rsi": 42.6, "macd": { "macd_line": -1.20, "signal_line": -0.80, "histogram": -0.40 }, "bollinger_bands": { "upper_band": 312.50, "middle_band": 298.10, "lower_band": 283.70 } }, "updated_at": "2026-06-01T14:00:00+00:00" }, "GS": { "symbol": "GS", "name": "The Goldman Sachs Group Inc.", "sector": "Financial Services", "price": 1008.37, "change_pct": 0.87, "volume": 2100000, "analyst_rating": "buy", "indicators": { "rsi": 68.2, "macd": { "macd_line": 5.60, "signal_line": 4.10, "histogram": 1.50 }, "bollinger_bands": { "upper_band": 1050.00, "middle_band": 985.00, "lower_band": 920.00 } }, "updated_at": "2026-06-01T14:00:00+00:00" } }, "requested": 2 }

Response includes the count of matched symbols plus a map with per-symbol data in the same format as get_stock. Requested symbols not found in the database are omitted from the result.

get_stock_history free+

Daily OHLCV price history for a ticker. Returns bars sorted oldest-first.

Parameters

NameTypeDefaultDescription
symbolstringTicker symbol
daysinteger90Number of trading days to return. Max 365 (1 year).

Response fields

FieldTypeDescription
symbolstringTicker
daysintegerDays requested
countintegerBars actually returned (may be less if data is newer)
historyarrayOHLCV bars: date, open, high, low, close, volume
Example
{ "symbol": "AAPL", "days": 5, "count": 5, "history": [ { "date": "2026-04-29", "open": 208.40, "high": 212.10, "low": 207.80, "close": 211.50, "volume": 52183000 }, { "date": "2026-04-30", "open": 211.20, "high": 214.60, "low": 210.90, "close": 213.45, "volume": 48921000 } ] }
Example — AMZN 30-day history
{ "symbol": "AMZN", "days": 30, "count": 22, "history": [ { "date": "2026-04-29", "open": 247.40, "high": 250.60, "low": 246.80, "close": 249.75, "volume": 31045000 }, { "date": "2026-04-30", "open": 250.00, "high": 256.10, "low": 249.20, "close": 255.30, "volume": 28760000 }, { "date": "2026-05-01", "open": 257.10, "high": 264.80, "low": 256.40, "close": 263.90, "volume": 35412000 } ] }

get_market_pulse free

Live market health snapshot in a single call. Aggregates VIX, Fear & Greed index, market breadth, and key index prices — no AI cost, always live data.

Use this as a lightweight context check before making any investment decisions. Replaces the need to call multiple separate endpoints for basic macro state.

No parameters — returns the current market snapshot.

Response fields

FieldTypeDescription
vixnumberVIX level at last pipeline run
fear_greed.valuenumberCNN Fear & Greed index 0–100
fear_greed.descriptionstringLabel: "extreme fear" · "fear" · "neutral" · "greed" · "extreme greed"
breadth.oversold_pctnumber% of tracked stocks with RSI < 30
breadth.overbought_pctnumber% of tracked stocks with RSI > 70
breadth.neutral_pctnumber% of tracked stocks with RSI 30–70
breadth.universe_sizeintegerTotal stocks in the tracked universe
indices.spy / qqq / iwmobjectLive price, change_pct, RSI for SPY / QQQ / IWM
bonds_commodities.tlt / gldobjectTLT (long bonds) and GLD (gold) — price, change_pct, RSI
updated_atstringISO 8601 UTC timestamp of breadth + fear/greed snapshot (pipeline runs every ~4h)
Example response
{ "vix": 15.71, "fear_greed": { "value": 55.0, "description": "neutral" }, "breadth": { "universe_size": 3501, "oversold_pct": 2.0, "overbought_pct": 7.6, "neutral_pct": 90.4 }, "indices": { "spy": { "price": 757.09, "change_pct": 0.38, "rsi": 67.97 }, "qqq": { "price": 733.81, "change_pct": 0.62, "rsi": 73.66 }, "iwm": { "price": 292.01, "change_pct": -0.31, "rsi": 57.73 } }, "bonds_commodities": { "tlt": { "price": 85.64, "change_pct": -0.42, "rsi": 52.41 }, "gld": { "price": 411.27, "change_pct": -0.18, "rsi": 38.43 } }, "data_age_hours": 0.7 }

get_earnings_calendar free+

Upcoming earnings dates for all stocks in the Stocklake universe, within a configurable look-ahead window. Dates sourced from market data — treat is_estimate: true dates as approximate.

Parameters

ParameterTypeDefaultDescription
daysinteger7Look-ahead window in days (max 30)

Response

FieldTypeDescription
window_daysnumberEffective look-ahead window applied
from_datestringWindow start (UTC ISO)
to_datestringWindow end (UTC ISO)
countnumberTotal results returned
results[].symbolstringTicker symbol
results[].namestringCompany short name
results[].sectorstringSector
results[].market_capnumberMarket capitalisation in reporting currency
results[].pricenumberCurrent stock price
results[].rsinumber | nullCurrent RSI — useful for pre-earnings momentum screening
results[].earnings_datestringExpected earnings timestamp (UTC ISO)
results[].is_estimatebooleanTrue if the date is an estimate — treat as approximate
results[].eps_trailingnumber | nullTrailing 12-month EPS
results[].eps_forwardnumber | nullForward EPS estimate

Example response

{ "window_days": 7, "from_date": "2026-05-06T10:00:00+00:00", "to_date": "2026-05-13T10:00:00+00:00", "count": 3, "results": [ { "symbol": "AAPL", "name": "Apple Inc.", "sector": "Technology", "market_cap": 3200000000000, "earnings_date": "2026-05-08T20:30:00+00:00", "is_estimate": false, "eps_trailing": 6.97, "eps_forward": 7.54 } ] }
Example — 30-day window
{ "window_days": 30, "from_date": "2026-05-06T10:00:00+00:00", "to_date": "2026-06-05T10:00:00+00:00", "count": 4, "results": [ { "symbol": "AMD", "name": "Advanced Micro Devices Inc.", "sector": "Technology", "market_cap": 845000000000, "earnings_date": "2026-05-20T20:30:00+00:00", "is_estimate": false, "eps_trailing": 3.95, "eps_forward": 4.82 }, { "symbol": "INTC", "name": "Intel Corporation", "sector": "Technology", "market_cap": 608000000000, "earnings_date": "2026-05-22T21:00:00+00:00", "is_estimate": false, "eps_trailing": 2.41, "eps_forward": 3.10 }, { "symbol": "IBM", "name": "International Business Machines Corp.", "sector": "Technology", "market_cap": 248000000000, "earnings_date": "2026-05-28T20:30:00+00:00", "is_estimate": true, "eps_trailing": 6.58, "eps_forward": 7.22 } ] }

get_screener free

Filter and rank stocks from the Stocklake universe — fundamentals, technicals, and (Pro) AI signals in one tool. Presets provide one-call screens for common setups.

Parameters

NameTypeDefaultDescription
presetstringoversold (RSI≤35, above SMA200) · overbought (RSI≥65) · momentum (RSI 50-70, above SMA200, up 0.5%+) · high_conviction (ai_score≥70, Pro only)
sectorstringe.g. "Technology", "Healthcare"
countrystringe.g. "United States", "Germany"
min_rsi / max_rsinumberExact RSI bounds (e.g. min_rsi=30, max_rsi=50 = post-oversold recovery zone)
sma_trendstringabove_200 / below_200 — price vs 200-day MA
macd_signalstringpositive / negative — MACD line vs signal line
min_perf_1d / max_perf_1dnumber1-day performance % bounds (e.g. min_perf_1d=2.0 = up 2%+ today)
min_volumeintegerMinimum daily volume. e.g. 1000000
min_market_cap_b / max_market_cap_bnumberMarket cap in billions
max_pe_forwardnumberMaximum forward P/E
analyst_ratingstringstrong_buy / buy / hold / sell / strong_sell
min_ai_scoreintegerMinimum AI score 0-100 — Pro tier only. Gates on the same ai_score field returned below (renamed 2026-08-24 from the retired 0-10 min_flag_score).
sort_bystringmarket_capmarket_cap / rsi / perf_1d / volume / analyst_rating / rating / ai_score (Pro)
sort_dirstringdescasc / desc
limitinteger201–25. Each returned stock counts as one call toward your daily limit.

Response fields (per result)

FieldTypeDescription
symbol, name, sector, industry, countrystringStock identity
price, change_pct, volumenumberCurrent price, 1-day change %, day volume
market_cap, pe_forwardnumberFundamentals
rsinumberRSI value
macd_signalstringpositive / negative / neutral
sma200_trendstringabove / below
analyst_ratingstringbuy / hold / sell etc.
ratingnumber0-10 technical composite score
ai_verdictstringPro only — positive / neutral / negative
ai_scorenumber | nullPro only — 0-100 composite score from stock_ai_summary.py, same scale/band convention as get_signals' signal_score but a distinct field/pipeline. Null if no ai_summary doc exists yet.
ai_score_bandstring | nullPro only — Weak / Moderate / Strong / Very Strong, or null
Example — preset: oversold
{ "count": 8, "preset": "oversold", "filters": { "max_rsi": 35, "sma_trend": "above_200", "sort_by": "market_cap", "sort_dir": "desc" }, "results": [ { "symbol": "VZ", "name": "Verizon Communications", "sector": "Communication Services", "industry": "Telecom Services", "country": "United States", "price": 38.42, "change_pct": -0.8, "volume": 18400000, "rsi": 28.9, "macd_signal": "negative", "sma200_trend": "above", "analyst_rating": "hold", "rating": 3.4, "ai_score": 62, "ai_score_band": "Moderate" } ] }

get_market_movers free

Top market movers from the Stocklake universe — gainers, losers, and most active by volume. A fast way to see what's moving in the market right now.

Parameters

NameTypeDefaultDescription
categorystringallgainers / losers / most_active / all (all returns all 3 categories)
limitinteger10Results per category (max 20). Each returned stock counts as one call toward your daily limit — a symbol appearing in more than one category counts once per category.
min_market_cap_bnumberFilter to stocks above this market cap in billions (e.g. 1.0 = $1B+ only)

Response

Returns gainers[], losers[], most_active[] (whichever categories requested). Each entry: symbol, name, sector, price, change_pct, volume, rsi, market_cap, analyst_rating, atr_pct (volatility as % of price — omitted when the underlying reading is missing or corrupted). pro adds ai_verdict / ai_headline / ai_score (0-100) / ai_score_band (Weak/Moderate/Strong/Very Strong) — a big move's price/volume/RSI alone doesn't say whether it matters; the headline is the "why".

Example
{ "category": "all", "limit_per_category": 3, "gainers": [ { "symbol": "SMCI", "name": "Super Micro Computer", "sector": "Technology", "price": 48.20, "change_pct": 18.4, "volume": 42810000, "rsi": 67.2, "market_cap": 28400000000, "analyst_rating": "buy", "atr_pct": 6.85, "ai_verdict": "positive", "ai_headline": "Server backlog extending into next fiscal year", "ai_score": 69, "ai_score_band": "Strong" } ], "losers": [ { "symbol": "WBA", "name": "Walgreens Boots Alliance", "sector": "Healthcare", "price": 9.82, "change_pct": -12.7, "volume": 18200000, "rsi": 22.4, "market_cap": 8500000000, "analyst_rating": "hold", "atr_pct": 4.12 } ], "most_active": [ { "symbol": "TSLA", "name": "Tesla", "sector": "Consumer Cyclical", "price": 192.40, "change_pct": 2.1, "volume": 94000000, "rsi": 54.8, "market_cap": 614000000000, "analyst_rating": "buy", "atr_pct": 3.27 } ] }

get_indicator_history pro

Daily indicator snapshots for a symbol — up to 2 years of history. Default returns RSI, MACD histogram, Bollinger band position, and 20/200-day SMA per day — enough for most charting and trend analysis. Pass full=true to also get Williams %R, VIX Fix, Williams A/D trend, DeMark TD Sequential, and analyst rating/target, which barely change day to day and roughly double response size over a long window.

Parameters

NameTypeDefaultDescription
symbolstringTicker symbol
daysinteger90Number of calendar days to look back. Max 730 (2 years).
fullbooleanfalsefalse returns the 5 basic fields below per day; true adds the 8 specialized/slow-moving fields marked "full only".

Response fields

FieldTypeDescription
symbolstringTicker
daysintegerDays requested
fullbooleanEchoes the requested full param
countintegerSnapshots returned
snapshotsarraySnapshots sorted oldest-first (see fields below). Empty (with a note field instead) if fewer than 3 found.
snapshots[].recorded_atstringSnapshot date, YYYY-MM-DD
snapshots[].pricenumberPrice at snapshot time
snapshots[].rsinumberRSI(14) value
snapshots[].macd_histogramnumberMACD histogram (line − signal)
snapshots[].bb_pctnumberBollinger band position 0–100: 0 = at lower band, 100 = at upper band
snapshots[].sma20 / sma200number20-day and 200-day simple moving averages
snapshots[].williams_rnumberfull only. Williams %R (0 to −100)
snapshots[].ultimate_oscnumberfull only. Ultimate Oscillator (0–100; >70 overbought, <30 oversold)
snapshots[].vix_fix_valuenumberfull only. Williams VIX Fix synthetic fear gauge (higher = more fear)
snapshots[].williams_ad_trendstringfull only. rising / falling / flat
snapshots[].td_signalstring | nullfull only. BUY_SETUP / SELL_SETUP / BUY_COUNTDOWN / SELL_COUNTDOWN / null
snapshots[].td_phasestring | nullfull only. setup_active / setup_complete / countdown_active / countdown_done / null
snapshots[].analyst_ratingstring | nullfull only. buy / outperform / hold / underperform / sell / null
snapshots[].analyst_targetnumber | nullfull only. Mean analyst price target
Example — default (full=false)
{ "symbol": "NVDA", "days": 90, "full": false, "count": 87, "snapshots": [ { "recorded_at": "2026-04-02", "price": 103.20, "rsi": 28.4, "macd_histogram": -1.82, "bb_pct": 6.3, "sma20": 112.40, "sma200": 128.90 } ] }
Example — full=true
{ "symbol": "NVDA", "days": 90, "full": true, "count": 87, "snapshots": [ { "recorded_at": "2026-04-02", "price": 103.20, "rsi": 28.4, "macd_histogram": -1.82, "bb_pct": 6.3, "sma20": 112.40, "sma200": 128.90, "williams_r": -88.1, "ultimate_osc": 22.7, "vix_fix_value": 18.6, "williams_ad_trend": "falling", "td_signal": null, "td_phase": null, "analyst_rating": "buy", "analyst_target": 142.00 }, { "recorded_at": "2026-07-01", "price": 142.85, "rsi": 61.3, "macd_histogram": 2.14, "bb_pct": 68.7, "sma20": 136.10, "sma200": 131.20, "williams_r": -24.5, "ultimate_osc": 58.1, "vix_fix_value": 9.3, "williams_ad_trend": "rising", "td_signal": "BUY_SETUP", "td_phase": "setup_active", "analyst_rating": "buy", "analyst_target": 160.00 } ] }

get_economic_calendar pro

Upcoming and recently-released macro/economic events — interest rate decisions, CPI, GDP, PMI, unemployment, payrolls, retail sales, and more — sourced from Yahoo Finance, the one calendar source confirmed safe for external exposure (a second internal-only source, Trading Economics, carries a ToS caveat and is not exposed here).

Two buckets: released_recent always carries a real actual value (never blank) plus diff — a plain arithmetic difference, actual minus previous, never a beat/miss or consensus judgment, since Yahoo doesn't provide point-in-time consensus data. upcoming never carries an actual value. Every item in both buckets carries key_event: true for the handful of event types that reliably move markets on their own (rate decisions, CPI, GDP, headline Non-Farm Payrolls) — an event-TYPE flag only, never a beat/miss or directional judgment on the number itself.

Parameters

NameTypeDefaultDescription
daysinteger3Look-ahead window in days for upcoming events. Max 14.
lookback_daysinteger2Look-back window in days for recently-released events. Max 7. Yahoo's own actual value has a confirmed ~1-day reporting lag — keep this at 2+ to reliably see real releases.
limitinteger20Max results per bucket — released_recent and upcoming each capped independently. Max 50.
major_onlybooleanfalseRestrict to the 8 largest economies: United States, Euro Area, United Kingdom, Japan, China, Germany, France, Canada.
key_events_onlybooleanfalseRestrict to rate decisions, CPI, GDP, and headline Non-Farm Payrolls — the subset flagged key_event: true.

Response fields

FieldTypeDescription
window_daysintegerEffective look-ahead window applied
lookback_daysintegerEffective look-back window applied
todaystringServer's current date, YYYY-MM-DD (UTC)
released_recentarrayRecently-released events, major-economy-first then most-recent-first
released_recent[].countrystringCountry or region name
released_recent[].eventstringEvent name, as reported by Yahoo
released_recent[].datestringRelease date, YYYY-MM-DD
released_recent[].timestring | nullRelease time, UTC, when known
released_recent[].actualstringReported value. Always present in this bucket.
released_recent[].previousstring | nullPrior period's value
released_recent[].consensusstring | nullMarket consensus, when Yahoo provides one (often null — see note above)
released_recent[].diffstring | nullactual minus previous, signed (e.g. "+0.1", "-2.7"). Null if either value is missing or non-numeric. Never a beat/miss judgment.
released_recent[].key_eventbooleantrue for rate decisions, CPI, GDP, or headline Non-Farm Payrolls
upcomingarrayNot-yet-released events, major-economy-first then soonest-first. Same fields as released_recent except no actual/diff.
Example
{ "window_days": 3, "lookback_days": 2, "today": "2026-09-02", "released_recent": [ { "country": "Germany", "event": "CPI Prelim YY *", "date": "2026-08-31", "time": "12:00 UTC", "actual": "2.9", "previous": "2.8", "consensus": null, "diff": "+0.1", "key_event": true }, { "country": "United States", "event": "ISM Manufacturing PMI", "date": "2026-09-01", "time": "14:00 UTC", "actual": "54.6", "previous": "55.6", "consensus": null, "diff": "-1", "key_event": false } ], "upcoming": [ { "country": "Canada", "event": "BoC Rate Decision", "date": "2026-09-02", "time": "14:00 UTC", "actual": null, "previous": "2.25", "consensus": null, "key_event": true }, { "country": "United States", "event": "Non-Farm Payrolls", "date": "2026-09-04", "time": null, "actual": null, "previous": "-23", "consensus": null, "key_event": true } ] }

get_stock_news free+ AI

Returns AI-analysed news articles for a ticker. Each article has been processed by our AI pipeline — raw article content is not exposed. Free/guest get up to 5 headlines with a sentiment label; Pro gets up to 50 articles with a full AI summary, plus this symbol's live signal_score, over a 90-day window.

When no articles are found, the ticker is automatically queued for a background refresh. Re-queuing an already-pending ticker does not count against your limit.

Parameters

NameTypeDescription
symbolstringTicker symbol
limitintegerMax articles to return. Default 10, max 10.
daysintegerLook-back window in days. Default 30, max 30.

Response

Outer envelope fields:

FieldTypeDescription
symbolstringTicker
statusstringok empty — see below
countintegerNumber of articles returned
daysintegerEffective look-back window in days (max 30)
articlesarrayArticle objects (see below)
messagestringPresent when status is empty

Status values:

  • ok — articles returned
  • empty — no news found for this window; pipeline triggered in background if data was stale

Per-article fields:

FieldTypeDescription
titlestringArticle headline
published_atdatetimePublication timestamp (ISO 8601)
ai_sentimentstringPro only. positive / neutral / negative
ai_summarystringPro only. Full AI-generated summary of the article's relevance to the stock
signal_scorenumber | nullPro only. If this symbol has a currently-active news-sourced signal, every article shows that LIVE score — same value get_signals/get_stock_research report, kept in sync as the signal is re-scored (a per-symbol value, so every article for the symbol shows the same number then). Always a single number even then — for a genuinely two-sided signal (real opposing bull/bear theses, direction NEUTRAL), this is the stronger of the two sides. When there's no active signal for the symbol, each article instead gets its own per-article magnitude computed from that article's own AI classification — so different articles can show different numbers in that case. Null only when neither a live signal nor a computable per-article value exists.
signal_score_bandstring | nullPro only. Weak / Moderate / Strong / Very Strong. Null when signal_score is null.

Note: there is no field called news_score anywhere on this API — signal_score is the one name, whether it resolves to a per-symbol live signal (preferred here when one exists) or a per-article magnitude (the fallback here when it doesn't, and the norm on get_news_feed, ranked by its own AI-assessed strength).

Example — status ok
{ "symbol": "TSLA", "status": "ok", "count": 3, "days": 30, "articles": [ { "title": "Tesla Q1 deliveries beat expectations", "published_at": "2026-04-03T14:00:00+00:00", "ai_sentiment": "positive", "ai_summary": "Q1 deliveries of 387k beat analyst consensus of 375k, signalling demand stabilisation and easing investor concerns over weakening EV demand.", "signal_score": { "POSITIVE": 72.3, "NEGATIVE": 39.6 }, "signal_score_band": null } ] }
Example — status empty
{ "symbol": "RKLB", "status": "empty", "count": 0, "days": 30, "articles": [], "message": "No news available for RKLB in the last 30d." }

get_stock_research pro AI

Full research bundle for a symbol in one call — replaces 4 separate calls: get_stock + get_stock_news + get_insider_activity + get_signals (filtered to one symbol), plus the AI-generated summary (verdict, narrative, key points, risks) bundled in as ai_summary. All data is pre-computed by the nightly AI pipeline; no live AI calls on request.

Parameters

NameTypeDescription
symbolstringTicker symbol

Response sections

SectionKey fields
stocksymbol, name, sector, price, change_pct, market_cap, pe_forward, pe_trailing, beta, dividend_yield, week52_high/low, analyst_rating, analyst_target, rsi, sma200_trend
ai_summaryverdict, ai_score (0-100) / ai_score_band (Weak/Moderate/Strong/Very Strong — stock_ai_summary.py's own composite, same scale/band convention as signal_score but a distinct field/pipeline), summary, key_points[] (3–5 specific positive/neutral observations), risks[] (2–3 specific risk factors), price_at_generation (stock price when the summary was generated), generated_at, headline (one-sentence plain-language take), near_term {stance, confidence} (view over <4 weeks, technicals/momentum-weighted), longer_term {stance, confidence} (view over a multi-month horizon, fundamentals/analyst/institutional-flow-weighted) — headline/near_term/longer_term are null on summaries generated before this schema shipped; fall back to verdict/ai_score until that symbol's next regeneration
newsLast 3 AI-flagged articles: title, published_at, ai_sentiment, ai_summary, signal_score (0-100)/signal_score_band
sentimentsignal, signal_score (0-100) / signal_score_band (Weak/Moderate/Strong/Very Strong — no separate "insider_score" field, same name/formula as every other signal_score on this API), insider_trend (buying/selling/neutral, or null with no transactions in the window), institutional_pct, updated_at
signalsUp to the 5 most recent signals for this symbol in the last 90 days (array — a symbol can have more than one over that window): direction, signal_score (0-100 — always a single number, even for a NEUTRAL/two-sided idea, see get_signals' own signal_score row above), signal_score_band, source, rationale, expires, flagged_at. Recency-gated, not gated on whether Stocklake's own trading engine still holds the signal live. Empty array if none in that window.
directional_conflictOnly present when ai_summary.verdict and the most recent active signal's direction genuinely disagree (e.g. verdict=negative alongside an active POSITIVE signal) — these come from independent AI pipelines with different horizons and can legitimately point opposite ways. Fields: ai_summary_verdict, signal_direction, note. Absent (not null) when there's nothing to compare or the two agree.
Example (condensed)
{ "stock": { "symbol": "ORCL", "name": "Oracle Corporation", "sector": "Technology", "price": 192.40, "change_pct": 1.4, "rsi": 68.9, "sma200_trend": "above", "analyst_rating": "buy", "analyst_target": 210.0 }, "ai_summary": { "verdict": "positive", "ai_score": 78, "ai_score_band": "Strong", "summary": "Strong cloud momentum, AI workload growth accelerating...", "key_points": ["Cloud ARR up 23% YoY", "AI training contracts with major hyperscalers"], "risks": ["Elevated valuation at 28x forward earnings"], "price_at_generation": 192.40, "generated_at": "2026-06-10T20:30:38+00:00", "headline": "Cloud momentum accelerating into next earnings", "near_term": { "stance": "POSITIVE", "confidence": 7 }, "longer_term": { "stance": "POSITIVE", "confidence": 8 } }, "news": [ { "title": "Oracle beats Q3 earnings, cloud growth accelerates", "published_at": "2026-06-10T20:15:00+00:00", "ai_sentiment": "positive", "ai_summary": "Beat on EPS and revenue, cloud segment +31%..." } ], "sentiment": { "signal": "POSITIVE", "signal_score": 68, "signal_score_band": "Strong", "insider_trend": "neutral", "institutional_pct": 72.1, "updated_at": "2026-06-04T23:07:46+00:00" }, "signals": [ { "direction": "POSITIVE", "signal_score": 84, "signal_score_band": "Very Strong", "source": "screener", "rationale": "Strong AI cloud catalyst, momentum breakout...", "expires": "2026-06-12", "flagged_at": "2026-06-05T14:22:00+00:00" } ] }

get_signals pro AI

Live AI signal queue — stocks actively flagged by the Stocklake pipeline as worth attention. Sourced from sector screening, news analysis, sentiment signals, and social/community monitoring. Signals expire daily; this always reflects the pipeline's current view.

Pipeline dependency. Signals are refreshed by scheduled AI jobs. If the pipeline hasn't run recently, results may be sparse. Check flagged_at on each signal to assess freshness.

Parameters

NameTypeDefaultDescription
directionstringPOSITIVE · NEGATIVE · NEUTRAL — filter by trade direction. NEUTRAL covers both a flat/undecided read and a genuinely two-sided idea (real opposing bull/bear theses — see signal_score below). Omit for all.
min_signal_scoreinteger60Minimum composite signal score (0–100) — blends conviction/confidence/flag_score, source track record, and real technical factors. This is the field to filter on.
min_convictionintegerDeprecated, ignored. Kept only so older callers don't hard-fail — has no effect on filtering. Use min_signal_score instead.
min_flag_scoreintegerDeprecated, ignored. Kept only so older callers don't hard-fail — has no effect on filtering. Use min_signal_score instead.
sourcestringFilter by signal source: news · screener · sentiment · social
limitinteger25Max signals to return (max 50 — pass a higher value explicitly for the broader feed). Results sorted by recency. Each returned signal counts as one call toward your daily limit.

Response fields

FieldTypeDescription
countintegerNumber of signals returned
windowstring"24h" if fresh activity was found, otherwise a note that the response falls back to the most recent signals regardless of age
signals[].symbolstringTicker
signals[].directionstringPOSITIVE · NEGATIVE · NEUTRAL
signals[].signal_scorenumberComposite AI score 0–100 — the current, single source of truth for signal quality. Always a single number, including for a NEUTRAL signal (a genuinely two-sided idea, real opposing bull/bear theses) — in that case this is the STRONGER of the two sides, since that's the more actionable fact; the two-sided detail is in rationale.
signals[].signal_score_bandstring | nullHuman-readable label: Weak · Moderate · Strong · Very Strong. Null only when signal_score itself is null.
signals[].sourcestringPrimary pipeline source that flagged this stock
signals[].sourcesarrayAll sources that contributed (when merged across sources)
signals[].rationalestringAI rationale — why the pipeline flagged this stock
signals[].expiresstringDate after which this signal is considered stale (YYYY-MM-DD)
signals[].flagged_atstringISO 8601 UTC timestamp when this signal was last flagged by the pipeline
Example
{ "count": 2, "window": "24h", "signals": [ { "symbol": "MGM", "direction": "POSITIVE", "signal_score": 88, "signal_score_band": "Very Strong", "source": "news", "sources": ["news"], "rationale": "flag=10/10 | bullish | impact=95/100 | MGM Resorts acquisition by Apollo rumored at 25% premium", "expires": "2026-06-06", "flagged_at": "2026-06-05T20:48:00Z" }, { "symbol": "CMA", "direction": "NEUTRAL", "signal_score": 62, "signal_score_band": "Strong", "source": "news", "sources": ["news"], "rationale": "flag=9/10 | mixed | impact=85/100 | Comerica net interest income guidance raised on rate optimism — a real bull case (37/100) and bear case (62/100) at once", "expires": "2026-06-06", "flagged_at": "2026-06-05T19:57:00Z" } ] }

CMA above is a NEUTRAL signal — the pipeline sees a genuine bull case (37/100) and bear case (62/100) at once, no directional consensus. signal_score reports the STRONGER side (62), so a high score alongside NEUTRAL means real conviction with a contested direction, not "nothing going on" — the two-sided detail is in rationale.

get_insider_activity pro AI

AI-synthesized insider + institutional sentiment for a stock. Combines SEC Form 4 insider transactions with Nasdaq institutional holder data, nightly enrichment.

Parameters

ParameterTypeRequiredDefaultDescription
symbolstringTicker symbol (e.g. AAPL, TSLA)

Response fields

FieldTypeDescription
symbolstringTicker
signalstringCombined sentiment: STRONG_POSITIVE, POSITIVE, NEUTRAL, NEGATIVE, STRONG_NEGATIVE
signal_scorenumber | null0–100, higher = stronger/more notable — the exact same field, formula, scale and bands as every other signal_score on this API. No separate "insider_score" or raw flag_score/confidence pair.
signal_score_bandstring | nullWeak/Moderate/Strong/Very Strong. Null when signal_score is null.
insider_signalstringInsider-only signal: POSITIVE, NEGATIVE, NEUTRAL, NONE
inst_signalstringInstitutional-only signal: POSITIVE, NEGATIVE, NEUTRAL, NONE
summarystringHuman-readable 2–4 sentence summary with specific names, amounts, and direction
insider_buysintNumber of insider buy transactions (pre-filtered)
insider_sellsintNumber of insider sell transactions (pre-filtered)
inst_ownershipnumber | nullInstitutional ownership percentage as a float (e.g. 74.55)
total_holdersint | nullTotal institutional holders
updated_atstringISO 8601 UTC timestamp of last sentiment refresh (nightly pipeline)

Example response

{ "symbol": "BG", "signal": "POSITIVE", "signal_score": 68, "signal_score_band": "Strong", "insider_signal": "NEGATIVE", "inst_signal": "POSITIVE", "summary": "COO Garros Julio sold $337K — lone bearish insider signal. Institutions strongly bullish: 377 holders increased (+28.6M sh) vs 283 decreased. 128 new holders added 20.9M sh.", "insider_buys": 0, "insider_sells": 1, "inst_ownership": 99.81, "total_holders": 758, "updated_at": "2026-05-11T22:16:29.930700+00:00" }
Example — CRM (STRONG_POSITIVE, high insider buying)
{ "symbol": "CRM", "signal": "STRONG_POSITIVE", "signal_score": 91, "signal_score_band": "Very Strong", "insider_signal": "POSITIVE", "inst_signal": "POSITIVE", "summary": "CEO Benioff bought $12.4M worth of shares — largest insider buy in 3 years. Three additional C-suite insiders added $4.2M combined. Institutions increased holdings by 3.2% this quarter with 42 new holders opening positions. Strong alignment between insider and institutional conviction.", "insider_buys": 4, "insider_sells": 0, "inst_ownership": 82.15, "total_holders": 2410, "updated_at": "2026-05-28T06:15:00+00:00" }

get_news_feed pro AI

Market-wide AI-flagged news briefing — top articles across all tracked stocks ranked by signal strength. Unlike get_stock_news (per-symbol), this scans the entire universe and surfaces the most notable news regardless of ticker. No URLs or source domains exposed.

Parameters

NameTypeDefaultDescription
min_signal_scoreinteger60Minimum signal_score (0-100) used to select articles server-side. Replaces the old min_flag_score (0-10, gated on the legacy ai_flag_score field) — 2026-08-24, signal_score consistency initiative.
daysinteger3Look-back window in days (max 10)
limitinteger10Max articles returned (max 25)

Each article also carries signal_score (0–100, always a single number) and signal_score_band ("Weak"/"Moderate"/"Strong"/"Very Strong"). Prefers this symbol's LIVE news-sourced signal score if one was raised in the last 90 days — same value get_signals/get_stock_news report for that symbol, kept in sync as it's re-scored, and not gated on whether Stocklake's own trading engine still considers the signal live (a dropped/expired signal still shows here); this is a per-symbol fact, not a per-article judgment, so two articles about the same stock always show the same value. Otherwise a per-article magnitude computed from that article's own AI classification, so every article still gets a real, rankable number. There is no separate news_score field — one name for "how strong is this idea," whether it's backed by a formal signal or just this article's own classification.

Example
{ "count": 10, "days": 3, "min_signal_score": 60, "articles": [ { "symbol": "NVDA", "title": "Nvidia unveils GB300 chip, accelerating AI data center roadmap", "published_at": "2026-06-04T14:30:00+00:00", "ai_sentiment": "positive", "ai_summary": "New GB300 architecture delivers 2× throughput over H100. Roadmap acceleration strengthens moat vs AMD...", "signal_score": 78, "signal_score_band": "Strong" } ] }

get_market_assessment pro AI

Combined macro regime + market outlook in a single call. Produced every ~4 hours by the market intelligence pipeline. Returns two complementary perspectives:

  • Regime (regime_* fields) — answers "how much equity risk to take" → use for position sizing and asset allocation
  • Outlook (outlook_* fields) — answers "which direction and sectors to trade" → use for sector preference and directional bias

Note: market_context is a point-in-time snapshot from when the AI ran — not live. Use get_market_pulse for live prices.

Parameters

NameTypeDefaultDescription
history_countinteger0Include last N prior assessments for each perspective (0–3). Returns regime_history[] and outlook_history[].

Response — Regime fields

FieldTypeDescription
regimestringRISK_OFF / CAUTIOUS / NEUTRAL / AGGRESSIVE
risk_appetite_scorenumber0–100. Plain re-expression of regime as a score (RISK_OFF ≈ 10 → AGGRESSIVE ≈ 90). Higher = the tape currently supports more risk-taking.
macro_scorenumber | null0–100. The REAL, continuous number regime buckets into 4 categories — a blend of arithmetic inputs (VIX level, breadth oversold/overbought skew, SKEW-vs-VIX divergence, TD-exhaustion ratio) and the AI's own regime_strength read. Distinct from risk_appetite_score, which is just a coarse 4-value lookup on regime alone — macro_score is the finer-grained real number. Null on an assessment from before this field existed (2026-08-26).
regime_strengthnumber | null1–10. The AI's own read of regime conviction — one of the two inputs blended into macro_score above.
macro_score_trendobject{change_7d, change_30d, direction} — whether macro_score itself is improving/deteriorating/stable over the trailing 7/30 days, computed automatically (no history_count needed). A bare 33 doesn't say whether the environment is getting worse or just stabilized after a worse reading — this does. Either leg is null without enough history yet.
regime_biasstring"Long Setups Only" / "Short Setups Only" / "Both Directions" — whether current market conditions favor one trade direction over the other
regime_bias_notestringPlain-language sentence explaining what regime_bias means, framed as a market-conditions read
regime_confidencenumber1–10. Clarity of the regime call.
regime_rationalestringCore thesis in plain language
key_risksstring[]2–3 tail risks that could invalidate the call
watch_forstring[]Triggers that would cause a regime change
vix_at_assessmentnumberVIX level when assessment was made
regime_updated_atstringISO 8601 UTC timestamp of last assessment
indicators.macro_dataobjectFRED macro data: yield_spread_10y2y, fed_funds_rate, cpi_index (BLS index level ~332, not YoY %), unemployment, breakeven_10y, usd_index, m2 — each with value, date, delta_3m
indicators.volatility_term_structureobjectVIX / VIX3M / VIX6M last 5 closes + contango/backwardation signal
indicators.market_sentimentobjectFear & Greed value (0–100) and label
indicators.breadthobjectLive market-wide RSI breadth (universe_size, oversold/overbought/neutral counts + percentages) — same live numbers as get_market_pulse's breadth, bundled here too so a regime read doesn't need a second call.
market_contextobjectPoint-in-time snapshot: price/RSI/SMA200/perf for SPY, QQQ, IWM, TLT, GLD, VIX, TNX, HYG, sector ETFs. Recorded when AI ran — not live.

Response — Outlook fields

FieldTypeDescription
outlookstringPOSITIVE / NEUTRAL / NEGATIVE
outlook_convictionnumber1–10. Strength of the directional call.
equity_viewstringPlain language directional narrative
preferred_sectorsstring[]Sectors to overweight
avoided_sectorsstring[]Sectors to underweight
catalyststringPrimary catalyst driving the outlook
outlook_key_riskstringKey risk to the outlook thesis
outlook_rationalestringDetailed reasoning
outlook_updated_atstringISO 8601 UTC timestamp of last assessment
regime_history[]object[]Prior regime states (when history_count > 0): regime, risk_appetite_score, macro_score, regime_bias, regime_confidence, vix_at_assessment, updated_at
outlook_history[]object[]Prior outlook states (when history_count > 0): outlook, conviction, at
Example (condensed)
{ "regime": "CAUTIOUS", "risk_appetite_score": 35, "macro_score": 33, "regime_strength": 4, "macro_score_trend": { "change_7d": -11, "change_30d": -22, "direction": "deteriorating" }, "regime_bias": "Both Directions", "regime_confidence": 6, "regime_rationale": "Equity uptrend intact. HYG diverging — credit not confirming SPY highs.", "key_risks": ["HYG breaking below $79.50", "VIX closing above 20"], "watch_for": ["HYG reclaiming $80.50 → upgrade to NEUTRAL"], "vix_at_assessment": 16.94, "regime_updated_at": "2026-05-06T09:14:56+00:00", "indicators": { "macro_data": { "yield_spread_10y2y": { "value": 0.21, "delta_3m": 0.15 } }, "market_sentiment": { "value": 54.0, "description": "Neutral" } }, "market_context": { /* NOT live — snapshot from regime_updated_at */ "spy": { "price": 574.12, "rsi": 70.3, "above_200sma": true } }, "outlook": "POSITIVE", "outlook_conviction": 7, "equity_view": "Momentum intact. Tech leading. Small-caps lagging but not breaking down.", "preferred_sectors": ["Technology", "Industrials"], "avoided_sectors": ["Utilities", "Real Estate"], "catalyst": "AI spending cycle intact. Macro resilience.", "outlook_updated_at": "2026-05-06T09:14:56+00:00" }

get_sector_intelligence pro AI

AI-assessed sector intelligence with signals (LEADING/STRONG/NEUTRAL/WEAK/LAGGING), drivers, alerts, and computed statistics. Pass a sector for deep single-sector analysis, or omit for all 11 sectors at once — the all-sectors call doubles as the rotation view (sort_by_strength + history_count). Refreshed every ~4 hours by the market intelligence pipeline.

Parameters

ParameterTypeRequiredDefaultDescription
sectorstringNoneSector name (e.g. Technology, Healthcare). Omit to list all sectors.
sort_by_strengthbooleanfalseAll-sectors call only: sort LEADING→LAGGING instead of alphabetical — for finding leading vs lagging sectors
history_countinteger0All-sectors call only: include last N prior signal states per sector (0–3)

Response fields

FieldTypeDescription
sectorstringSector name
signalstringLEADING / STRONG / NEUTRAL / WEAK / LAGGING
cycle_stagestringSector cycle phase (e.g. MARKUP, MARKDOWN, ACCUMULATION, DISTRIBUTION)
rotation_signalstringMoney-flow read (e.g. ACCUMULATE, DISTRIBUTE, HOLD)
sector_scorenumber | null0–100. The REAL, continuous number signal buckets into 5 categories (LEADING/STRONG/NEUTRAL/WEAK/LAGGING) — a blend of arithmetic inputs (RSI/perf percentiles, top-5 concentration, SMA200 breadth) and the AI's own strength_score read. Comparable across all 11 sectors on one absolute scale. Null on an assessment from before this field existed (2026-08-26).
strength_scorenumber | null1–10. The AI's own read of sector strength — one of the two inputs blended into sector_score above.
sector_score_trendobjectSingle-sector call only. {change_7d, change_30d, direction} — whether sector_score is improving/deteriorating/stable over the trailing 7/30 days, computed automatically. This is the only trend view available for one sector at all — history_count only applies to the all-sectors call. Two sectors both reading STRONG/68 can be moving in opposite directions; this tells them apart. Either leg is null without enough history yet.
confidencenumberAI confidence 1–10
driversstringAI narrative of sector drivers
alertstringNotable condition if applicable (breadth divergence, extreme RSI, etc.)
stats.avg_rsinumberSector-average RSI
stats.sma200_breadth_pctnumber% of stocks above their 200-day MA
stats.oversold_pct / overbought_pctnumberRSI distribution extremes
stats.avg_perf_1w_pct / avg_perf_1m_pctnumberAverage sector performance 1W / 1M
updated_atstringISO 8601 when the assessment was made
history[]arrayPresent when history_count > 0 (all-sectors call) — prior {signal, confidence, sector_score, at}
sectors[] / countarray / integerPresent when sector param is omitted — all sectors assessed
Example — single sector
{ "sector": "Technology", "signal": "STRONG", "sector_score": 68, "strength_score": 7, "sector_score_trend": { "change_7d": -28, "change_30d": -10, "direction": "deteriorating" }, "confidence": 7, "drivers": "AI capex cycle, earnings momentum. Mega-caps leading with broad participation.", "alert": "19.5% overbought, breadth only 53% — narrow leadership suggests froth in pockets", "stats": { "avg_rsi": 56.5, "sma200_breadth_pct": 53.1, "oversold_pct": 4.1, "overbought_pct": 19.5, "avg_perf_1w_pct": 1.1, "avg_perf_1m_pct": 11.0 }, "updated_at": "2026-05-12T10:19:48+00:00" }
Example — all sectors, sort_by_strength=true (rotation view)
{ "count": 11, "sectors": [ { "sector": "Technology", "signal": "STRONG", "sector_score": 68, "strength_score": 7, "confidence": 7, "stats": { "avg_rsi": 56.5, "sma200_breadth_pct": 53.1, "avg_perf_1w_pct": 1.1 }, "alert": "19.5% overbought — narrow leadership", "updated_at": "2026-05-12T10:19:48+00:00" }, { "sector": "Energy", "signal": "WEAK", "sector_score": 31, "strength_score": 3, "confidence": 6, "stats": { "avg_rsi": 42.3, "sma200_breadth_pct": 35.8, "avg_perf_1w_pct": -2.1 }, "alert": null, "updated_at": "2026-05-12T10:19:48+00:00" } ] }

get_earnings_intelligence pro AI

Upcoming earnings with AI context per stock — combines the earnings calendar with AI pipeline data to surface which events are worth monitoring. Sorted by earnings date ascending (soonest first).

Parameters

NameTypeDefaultDescription
days_aheadinteger14Look-ahead window in days (max 30)
sectorstringFilter to one sector (optional)
min_ai_scoreintegerOnly return stocks with AI score ≥ this value, 0-100 (optional). Renamed 2026-08-24 from the retired 0-10 min_flag_score — gates on the same ai_score field returned below. Applied before limit truncates the result.
limitinteger25Max results to return (max 25). Each returned stock counts as one call toward your daily limit.

Response fields (per result)

FieldTypeDescription
symbol, name, sectorstringStock identity
earnings_datestringISO UTC timestamp of expected earnings release
is_estimatebooleanWhether the date is estimated
price, rsi, market_capnumberCurrent technicals
eps_trailing, eps_forwardnumberEarnings expectations context
ai_verdictstringpositive / neutral / negative (from nightly AI pipeline)
ai_scorenumber | null0-100 composite score from stock_ai_summary.py, same scale/band convention as get_signals' signal_score but a distinct field/pipeline. Null if no ai_summary doc exists yet.
ai_score_bandstring | nullWeak / Moderate / Strong / Very Strong, or null
ai_risksstring[]Top 2 AI-identified risk factors
analyst_rating, analyst_targetstring / numberWall Street consensus
Example
{ "count": 22, "days_ahead": 14, "results": [ { "symbol": "ORCL", "name": "Oracle Corporation", "sector": "Technology", "earnings_date": "2026-06-10T20:00:00+00:00", "is_estimate": false, "price": 192.40, "rsi": 68.9, "eps_forward": 7.20, "ai_verdict": "positive", "ai_score": 81, "ai_score_band": "Very Strong", "ai_risks": ["Elevated valuation at 28x forward earnings", "Cloud margin pressure from AI infra spend"], "analyst_rating": "buy", "analyst_target": 210.0 } ] }

get_watchlist pro AI

The caller's Stocklake watchlist — the symbols starred on the web dashboard at /dashboard — enriched with live price, technicals, and AI verdict. No parameters; resolves your account automatically from your API key or OAuth session.

Parameters

None.

Response fields

FieldTypeDescription
countintegerNumber of symbols on the watchlist
items[].symbol, name, sectorstringStock identity
items[].price, change_pct, rsi, market_capnumberLive snapshot
items[].analyst_ratingstring | nullstrong_buy / buy / hold / sell / strong_sell
items[].atr_pctnumberAverage True Range as % of price (volatility). Omitted if the underlying indicator reading is missing or corrupted.
items[].ai_verdictstringpositive / neutral / negative (from nightly AI pipeline)
items[].ai_headlinestringOne-line "why" behind the verdict
items[].ai_scorenumber | null0-100 composite score from stock_ai_summary.py — same 0-100 scale/band convention as get_signals' signal_score but a distinct field/pipeline. Null if no ai_summary doc exists yet.
items[].ai_score_bandstring | nullWeak / Moderate / Strong / Very Strong, or null
items[].added_atstringISO UTC timestamp — when the symbol was starred
items[].price_at_addnumberPrice at the moment it was starred, for a "since added" delta

Read-only — starring/unstarring a symbol is web-only for now (no add_to_watchlist/remove_from_watchlist tool yet). Returns count: 0, items: [] if nothing is starred.

Example
{ "count": 2, "items": [ { "symbol": "AAPL", "name": "Apple Inc.", "sector": "Technology", "price": 231.02, "change_pct": 1.14, "rsi": 58.3, "market_cap": 3480000000000, "analyst_rating": "buy", "atr_pct": 2.41, "ai_verdict": "positive", "ai_headline": "Services revenue growth reaccelerating", "ai_score": 64, "ai_score_band": "Strong", "added_at": "2026-07-20T09:14:02+00:00", "price_at_add": 224.87 } ] }