22 tools - type / or use the sidebar filter to jump to one

Tool Reference

Every Stocklake tool - 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.
Data usage. Stocklake data is for your own use - research, analysis, and your own agents and tools. Reselling or redistributing API data or access, bulk-exporting data beyond normal API usage, or building a mirror or downstream feed on top of the API is not allowed, and accounts that do so can be suspended. See Acceptable Use in the Terms.
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, in the listing's own currency (see currency). For a listing quoted in pence or cents (GBp, ZAc, ILA) they are in the major unit and market_cap_currency names it (for example GBP); the price stays in pence
market_cap_usdnumber | nullMarket cap converted to US dollars; null when no FX rate is available for the listing currency
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 × 100 (78.4 means 0.784), the data provider's own figure for the most recent quarter. It is not recomputed from get_stock_financials, whose annual statements are older and whose Total Debt includes capitalised leases, so the two can differ widely.
profit_margins / operating_margins / gross_marginsnumberNet, operating and gross profit margins (ratios, e.g. 0.25 = 25%)
revenue_growth / earnings_growthnumberYoY growth rates
earnings_date / earnings_is_estimate / last_earnings_datestring / bool / stringNext scheduled earnings report (UTC ISO; null when no date has been announced) and whether that date is an estimate; last_earnings_date is the most recent report
revenue_ttm / gross_profit_ttmnumberTrailing twelve-month revenue and gross profit
free_cashflownumberFree cash flow (TTM), in the listing currency. Converted from the filing currency when they differ; null with a financials_note when no rate is available. Levered definition: operating cash flow minus capital expenditure, already net of interest. It can differ from get_stock_financials' annual cash_flow["Free Cash Flow"] because one is trailing twelve months and the other a fiscal year. The two also use different definitions (levered free cash flow against operating cash flow minus capital expenditure), so for a company with large capital spending the gap can be many times the figure, not a few percent.
financial_currencystringCurrency the company files its statements in (e.g. CNY for BABA)
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 (the setup currently counting: downtrend_exhaustion = counting falling closes, a decline that may be running out; uptrend_exhaustion = counting rising closes), countdown_count, countdown_complete, countdown_direction (same two values, for the countdown; can differ from setup_direction), signal (the most recent completed setup or countdown: DOWNTREND_EXHAUSTION_SETUP / UPTREND_EXHAUSTION_SETUP / DOWNTREND_EXHAUSTION_COUNTDOWN / UPTREND_EXHAUSTION_COUNTDOWN. It can be weeks old. For the count running now, read setup_direction with setup_count, or countdown_direction with countdown_count), 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}, rs_rank (relative-strength rank 1-99, stocks only: past-year return with the latest quarter counted double, ranked against every tracked stock; 99 = strongest) - omitted entirely (not just unlabeled) for free/guest, along with any indicator added later. If a stock split was never applied to a stock's price history (the price jumps five-fold or more from one day to the next, the whole day trades at the new level on ordinary volume, and the older prices stay on the old share basis), a 200-day average would be meaningless. When that is detected, sma200/ema200 are null and sma200_unreliable/ema200_unreliable are true (all tiers). Big moves on heavy volume are real moves and are not treated this way.
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 AI research composite score - 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. Not direction-signed: it measures how strong the read is, separate from ai_verdict. A positive verdict with a low ai_score means a positive call with little conviction behind it.
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. Extreme values are known limits of the formulas, not data errors: Altman Z above roughly 10-20 (common for low-debt growth companies, since one term is market cap over liabilities) means the formula doesn't fit that balance sheet, and Beneish M can swing hard when gross margin changes sign between the two years compared. score: null means the company's filed statements lack a line item the formula needs. Banks and insurers are the most common case, but not the only one. computed_at: ISO 8601 timestamp. No trading signal is derived from these scores anywhere in this API today.
sector_contextobjectpro Where this stock's fundamentals sit versus the other tracked equities in its own sector: revenue_growth, gross_margin and operating_margin, each {value, sector_median, percentile, n} - percentile is 0-100 (share of sector peers below this stock, ties counted half), n the number of peers with data. Purely descriptive positioning - no interpretation or direction. A metric is omitted when the stock has no value or the sector has fewer than 15 peers with data; the whole block is omitted when nothing is computable. Sectors are pooled globally across all tracked equities; baseline refreshed daily (as_of). get_stock (not get_stocks) also returns trend: {period: "quarterly", points: [...]}, oldest first - the same three metrics for the last few quarters (revenue growth is year-over-year), each as {value, sector_median, n} beside the sector median for that quarter, so you can see whether a company is gaining or losing ground on its peers. Off-cycle fiscal quarters are matched to the nearest calendar quarter; a quarter or metric is left out where either side lacks data.
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, together with forensic_scores, market_risk and sector_context (without its quarterly trend), 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
symbolstring-Ticker symbol
daysinteger90Number of trading days to return. Guest and free: max 365 (1 year). Pro: full history, up to 20,000 trading days - most established names go back decades. A full pull can be 10,000+ bars, so request only the window you need.

Response fields

FieldTypeDescription
symbolstringTicker
days_requestedintegerThe days you asked for, before any tier cap
days_returnedintegerBars in this response (same as count)
countintegerBars actually returned (may be less if data is newer)
historyarrayOHLCV bars: date, open, high, low, close, volume
history_availableobject{bars, earliest_date} - how much daily history exists for this ticker in total, regardless of the window returned
pro_unlocksstringPresent when a guest/free call asked for more than 365 days and was capped: says what Pro unlocks (the full history)
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

Market health snapshot in a single call. Aggregates VIX, Fear & Greed index, market breadth, and key index prices - no AI cost.

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.valuenumberFear & 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 / iwmobjectLatest 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 - vix/indices/bonds_commodities above are the latest prices, but this snapshot comes from the same market intelligence pipeline as get_market_assessment (~4x/day, weekdays only, during market hours - dead overnight/weekends)
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 } }, "updated_at": "2026-10-30T20:10:00Z" }

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)
limitinteger5 (Pro: 100)Free and guest: at most 5, whatever you pass. You get the 5 companies with the largest market cap, listed by date, and each counts as one call toward your daily limit. A window can hold hundreds of reporters; a narrower days window shows fewer. Pro returns up to 500 companies per call (default 100) for one call.
offsetinteger0Pro only: skip this many companies (sorted by date). Pass next_offset from the previous response to read the next page. Ignored for Free and guest.
symbolsstring[]noneOnly these tickers, up to 50 (for example your holdings). Applied before limit, on every tier.
min_market_capnumbernoneOnly companies with a market cap of at least this many US dollars (for example 10000000000 for $10B). Applied before limit, on every tier.

Response

FieldTypeDescription
window_daysnumberEffective look-ahead window applied
from_datestringWindow start (UTC ISO)
to_datestringWindow end (UTC ISO)
countnumberTotal results returned
total_in_windownumberCompanies that match your filters in the window, before limit and offset are applied
offsetnumberThe offset this page started at (0 for Free and guest)
next_offsetnumber | nullPass this as offset for the next page; null on the last page (always null for Free and guest)
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. For a few thinly covered foreign ADRs the consensus figure can be off by orders of magnitude (likely a local-share vs ADR ratio mismatch); check it against eps_trailing and price before trusting a large value.

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
presetstring-oversold (RSI≤35, above SMA200) · overbought (RSI≥65) · momentum (RSI 50-70, above SMA200, up 0.5%+) · high_conviction (ai_score≥70, Pro only)
sectorstring-e.g. "Technology", "Healthcare"
countrystring-e.g. "United States", "Germany"
min_rsi / max_rsinumber-Exact RSI bounds (e.g. min_rsi=30, max_rsi=50 = post-oversold recovery zone)
sma_trendstring-above_200 / below_200 - price vs 200-day MA
macd_signalstring-positive / negative - MACD line vs signal line
min_perf_1d / max_perf_1dnumber-1-day performance % bounds (e.g. min_perf_1d=2.0 = up 2%+ today)
min_volumeinteger-Minimum daily volume. e.g. 1000000
min_market_cap_b / max_market_cap_bnumber-Market cap in billions of US dollars, compared against market_cap_usd (non-USD listings are converted first)
max_pe_forwardnumber-Maximum forward P/E
analyst_ratingstring-strong_buy / buy / hold / sell / strong_sell
min_ai_scoreinteger-Minimum 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 (market_cap in the listing's own currency)
market_cap_usd, currencynumber | null, stringMarket cap in US dollars (what the market_cap sort and cap filters use) and the listing currency
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 AI research composite score, 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_bnumber-Filter to stocks above this market cap in billions of US dollars (e.g. 1.0 = $1B+ only), compared against market_cap_usd

Response

Returns gainers[], losers[], most_active[] (whichever categories requested). Each entry: symbol, name, sector, price, change_pct, volume, rsi, market_cap (listing currency), market_cap_usd, currency, 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
symbolstring-Ticker 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. The most recent completed TD Sequential setup or countdown as of that day, named for the move that is running out: DOWNTREND_EXHAUSTION_SETUP / UPTREND_EXHAUSTION_SETUP / DOWNTREND_EXHAUSTION_COUNTDOWN / UPTREND_EXHAUSTION_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": "DOWNTREND_EXHAUSTION_SETUP", "td_phase": "setup_active", "analyst_rating": "buy", "analyst_target": 160.00 } ] }

get_stock_financials free+

Raw financial statements - balance sheet, income statement, and cash flow line items. This is the underlying statement data itself, not a derived summary - for the forensic-accounting scores computed FROM these statements (Altman Z / Piotroski F / Beneish M), see get_stock's forensic_scores block instead.

Each returned statement is shaped {line_item_name: {period_end_iso: value}} - e.g. balance_sheet["Total Revenue"]["2025-12-31"] - so you get every available period per line item and can compute your own trends/deltas/CAGRs, not just the latest value. Values are in the company's reporting currency (financial_currency), which can differ from the trading currency. ~50-60 curated line items per statement (not a raw dump of every reported row); coverage genuinely varies by symbol and sector - a bank has no "Inventory" line, a company with no buyback program has no "Repurchase Of Capital Stock" entry. A missing line item means the company doesn't report it, not a fetch error. periods lists only periods with at least one real value; a period the source reports with no data behind it is dropped. Line items follow standard accounting definitions: balance_sheet["Total Debt"] includes capitalized lease liabilities (also listed as their own line items), and cash_flow["Free Cash Flow"] is the levered definition.

Free and guest get the latest fiscal year: all three statements, one period per line item, and the statement filter works. Asking for quarterly or both returns that latest annual year with quarterly: null and a pro_unlocks note, not an error. Pro gets up to 5 fiscal years, the ~7-8 most recent quarters, and period=both.

Parameters

NameTypeDefaultDescription
symbolstring-Ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol.
periodstringannualannual (Pro: up to 5 fiscal years; free: the latest fiscal year), quarterly (Pro: up to ~7-8 most recent quarters), or both (Pro). Free/guest asking for quarterly/both get the latest annual year plus pro_unlocks.
statementstringallall, balance_sheet, income_stmt, or cash_flow - restricts which statement(s) come back.

Response fields

FieldTypeDescription
symbolstringTicker
periodstringEchoes the requested period
statementstringEchoes the requested statement
period_endstringLatest annual fiscal-year-end on file, for reference
financial_currencystringReporting currency of the statement values, e.g. USD, EUR, JPY
annualobject | nullPresent when period is annual or both, and always for free/guest. On free/guest it holds only the latest fiscal year (periods has one date). {periods: [...], balance_sheet: {...}, income_stmt: {...}, cash_flow: {...}} (narrowed to one statement key if statement isn't all). null with an annual_note if this symbol hasn't been widened yet.
quarterlyobject | nullPresent when period is quarterly or both. Same shape as annual. null with a quarterly_note if not yet fetched, or if this symbol genuinely has no usable quarterly data. Always null for free/guest (see pro_unlocks).
annual_periods_availableintegerFree/guest only: how many fiscal years are on file, i.e. what Pro would return
pro_unlocksstringFree/guest only: what Pro adds for this symbol (more fiscal years, quarterly statements)
notestringPresent instead of annual/quarterly when this symbol has no financials data on file at all (not yet synced, or a non-equity with no statement data - ETFs/crypto/forex/indices aren't covered by this tool).
Example - Pro, period=annual, statement=income_stmt
{ "symbol": "MSFT", "period": "annual", "statement": "income_stmt", "period_end": "2026-06-30", "annual": { "periods": ["2026-06-30", "2025-06-30", "2024-06-30", "2023-06-30", "2022-06-30"], "income_stmt": { "Total Revenue": {"2026-06-30": 315000000000, "2025-06-30": 281000000000}, "Diluted EPS": {"2026-06-30": 13.42, "2025-06-30": 11.80} } } }
Example - free tier, period=quarterly, statement=cash_flow
{ "symbol": "AAPL", "period": "quarterly", "statement": "cash_flow", "period_end": "2025-09-30", "financial_currency": "USD", "annual": { "periods": ["2025-09-30"], "cash_flow": { "Operating Cash Flow": {"2025-09-30": 111482000000}, "Free Cash Flow": {"2025-09-30": 98767000000} } }, "quarterly": null, "annual_periods_available": 5, "pro_unlocks": "Free returns the latest fiscal year only. Pro unlocks the full 5-year annual history on file for this symbol and the most recent ~7-8 quarters - for trend, growth and margin analysis." }

get_analyst_trend pro

How analyst consensus on a stock has moved over time - the trajectory of the rating and the price targets, not just today's value. get_stock gives the current analyst_rating and analyst_target; this tool answers "are analysts getting more or less positive on this name?" with one row per day, up to a year back. Snapshots are taken once per weekday, so a 90-day window is roughly 60 rows. History begins July 2026 and grows daily.

Parameters

NameTypeDefaultDescription
symbolstring-Ticker symbol. A company name is accepted as a fallback when it resolves to exactly one symbol.
daysinteger90Number of calendar days to look back. Max 365.

Response fields

FieldTypeDescription
symbolstringTicker
daysintegerDays requested (after clamping to 1-365)
countintegerSnapshots returned
snapshotsarraySnapshots sorted oldest-first (see fields below). Empty, with a note field instead, if fewer than 2 exist in the window - a single point is not a trend.
snapshots[].datestringSnapshot date, YYYY-MM-DD
snapshots[].analyst_ratingstring | nullConsensus label: strong_buy / buy / hold / underperform / sell / strong_sell. Derived from analyst_rating_score on days the source reports no label.
snapshots[].analyst_rating_scorenumber | nullMean recommendation: 1.0 = strong buy, 5.0 = strong sell (lower is more positive). Same scale as get_stock.
snapshots[].analyst_countinteger | nullNumber of analysts contributing
snapshots[].analyst_targetnumber | nullMean analyst price target
snapshots[].analyst_target_high / analyst_target_lownumber | nullHighest and lowest individual price target
snapshots[].analyst_target_mediannumber | nullMedian price target
snapshots[].pricenumber | nullThe stock's price on that date, so a target can be read against where the stock actually traded

A field is null on a day the source reported none - a symbol's rating can be null on some days even when its price targets are present, because the source occasionally drops the consensus label. A weekday can also be missing entirely when the daily snapshot did not run; those days cannot be reconstructed, so the date is simply absent. Most of the tracked universe has a usable history; ETFs and other instruments with no analyst coverage return an empty snapshots array. For price and indicator history, see get_indicator_history - this tool covers analyst consensus only.

Example - AAPL, consensus drifting slightly less positive as the mean target rises
{ "symbol": "AAPL", "days": 90, "count": 3, "snapshots": [ { "date": "2026-07-10", "analyst_rating": "buy", "analyst_rating_score": 2.02, "analyst_count": 42, "analyst_target": 315.57, "analyst_target_high": 400.0, "analyst_target_low": 215.0, "analyst_target_median": 315.0, "price": 316.75 }, { "date": "2026-08-14", "analyst_rating": "buy", "analyst_rating_score": 2.13, "analyst_count": 41, "analyst_target": 322.28, "analyst_target_high": 400.0, "analyst_target_low": 215.0, "analyst_target_median": 335.0, "price": 305.7 }, { "date": "2026-09-18", "analyst_rating": "buy", "analyst_rating_score": 2.2, "analyst_count": 39, "analyst_target": 327.84, "analyst_target_high": 405.0, "analyst_target_low": 215.0, "analyst_target_median": 340.0, "price": 335.94 } ] }

get_economic_calendar free+

Upcoming and recently-released macro/economic events - interest rate decisions, CPI, GDP, PMI, unemployment, payrolls, retail sales, and more.

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 point-in-time consensus is not available. 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.

Free vs Pro. Every tier gets the same tool, filters and response shape - only the window differs. Guest and free: 1 day ahead (days), 2 days back (lookback_days) and 20 results per bucket (limit). Pro: up to 14 days ahead, 7 days back and 50 per bucket. A guest/free value above its cap is served at the cap, and the response adds capped and a pro_unlocks note - never an error.

Parameters

NameTypeDefaultDescription
daysinteger1 on guest/free, 3 on ProLook-ahead window in days for upcoming events. Max 1 on guest/free, 14 on Pro. Leaving it out is never reported as capped.
lookback_daysinteger2Look-back window in days for recently-released events. Max 2 on guest/free, 7 on Pro. Actual values arrive with about a 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 20 on guest/free, 50 on Pro.
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
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 one is available (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.
released_total / upcoming_totalintegerHow many events matched before the row limit was applied.
truncated_notestringPresent only when the row limit cut a list. Lists are major-economy-first, so a cut list can end days before the window does; narrow with key_events_only or major_only.
cappedobjectGuest/free only, present only when a value was above the free cap. One entry per capped param, e.g. {"days": {"requested": 14, "served": 1}}.
pro_unlocksstringPresent alongside capped: what Pro unlocks (14 days ahead, 7 back, 50 per bucket).
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 (title and date, no AI fields); Pro gets up to 50 articles with a full AI summary, plus this symbol's current signal_score, over a 90-day window.

One article per event: articles about the same event are merged into the newest one, so limit counts distinct events. Articles without a usable summary are left out.

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. Guest and free: up to 5. Pro: up to 50.
daysintegerLook-back window in days. Default 30. Guest and free: max 30. Pro: max 90.

Response

Outer envelope fields:

FieldTypeDescription
symbolstringTicker
statusstringok empty - see below
countintegerNumber of articles returned
daysintegerEffective look-back window in days (guest and free max 30, Pro max 90)
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 / MIXED
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 current 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 current signal nor a computable per-article value exists.
signal_score_bandstring | nullPro only. Weak / Moderate / Strong / Very Strong. Null when signal_score is null.
collapsed_countintegerPresent only when several articles reported the same event (for example one analyst's target change carried by several outlets). Only the newest is returned; this is the number of articles merged into it.

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 current 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 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 - the AI research 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 of the last 30 days, one per event: title, published_at, ai_sentiment, ai_summary, signal_score (0-100)/signal_score_band, and collapsed_count (articles merged into it) when several reported the same event
filingsThe latest SEC 8-K filings of the last 30 days, up to 3: date, title, headline, summary, sentiment, items, sec_url. Empty array when none. get_stock_filings has the full list.
earningsnext (the coming report date with the consensus; estimated_date says whether the date can still move) and last_reported (the newest quarter reported in the last 100 days: revenue, EPS and, where available, eps_surprise). null when neither is known.
analyst_changeHow consensus moved over the last 30 days: rating and mean target at the start and end, rating_score_change, direction (upgrading/downgrading/steady), target_change_pct, analyst_count_change. null with fewer than two snapshots; get_analyst_trend has the daily series.
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 3 most recent signals for this symbol in the last 30 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. 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.
forensic_scoresSame object as get_stock's forensic_scores block - three classic forensic-accounting formulas: altman_z {score, zone: safe/grey/distress}, piotroski_f {score 0-9, strength: strong/moderate/weak}, beneish_m {score, likely_manipulator: bool}, each with its own note. score: null means genuinely not computable for this company (common for financial-sector names), not an error. Absent (no key at all) if this symbol has no forensic_scores doc yet.
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_insider_activity free+ AI

Insider transactions for a stock, from regulatory insider filings for the US, Germany, the Netherlands and Spain. Where no regulatory filing is on record, market data fills the gap and the response says so. The filing facts are free: every tier gets buy/sell counts and the individual filings behind them. Pro adds the AI read of insider and institutional activity and the institutional holder data.

  • Free / guest: insider_buys, insider_sells, summary and the 5 most recent transactions over a fixed 90-day window. A larger days is capped at 90 and the response says so in days_note. No AI fields, no institutional holders.
  • Pro: days up to 365, up to 50 transactions, plus signal, signal_score, insider_signal/inst_signal, ai_commentary, top_holders, inst_ownership, total_holders and holder_count_divergence.

The counts and the rows come from the same merge and the same window, so they always agree, and the free counts match what Pro returns for the same window. Coverage outside the US is narrower than in the US, so an empty list for a non-US company often means no filing on record, not a broken lookup. Institutional holders are merged from two feeds and refreshed nightly.

Parameters

ParameterTypeRequiredDefaultDescription
symbolstring✓-Ticker symbol (e.g. AAPL, TSLA)
daysinteger90Insider-transaction window in days. Pro: 1-365. Free/guest: 1-90 (a larger value is capped at 90). Applies to transactions, insider_buys and insider_sells.

Response fields

FieldTypeDescription
symbolstringTicker
insider_buysintInsider buy filings in the window (open-market purchases; grants, gifts and option exercises are excluded)
insider_sellsintInsider sell filings in the window
transactionsarrayThe filings behind those counts, newest first: date, name, role, type (BUY/SELL), shares, price, value. Free/guest: up to 5. Pro: up to 50.
summarystringOne-line factual readout computed from the returned transactions/counts above: buy/sell counts, dollar totals, insider count and date range. Always agrees with the counts and rows next to it.
insider_buy_valuenumberTotal value of the buy filings in the window (listing currency)
insider_sell_valuenumberTotal value of the sell filings in the window (listing currency)
window_daysintThe window actually applied
source / source_namestring | nullWhich kind of feed was used: regulatory_filing or market_data (gap fill only). Null when nothing is on record.
updated_atstringISO 8601 UTC time the filings behind transactions were last fetched.
days_requestedintFree/guest only. The days you asked for, before the 90-day cap.
days_notestringFree/guest only, present when days was capped.
transactions_notestringFree/guest only, present when there are more filings in the window than the 5 returned.
notestringPresent when no insider buys or sells are on record in the window.
pro_unlocksstringFree/guest only. What Pro adds.
signalstringpro Combined AI sentiment: STRONG_POSITIVE, POSITIVE, NEUTRAL, NEGATIVE, STRONG_NEGATIVE
signal_scorenumber | nullpro 0-100, higher = stronger/more notable - the exact same field, formula, scale and bands as every other signal_score on this API.
signal_score_bandstring | nullpro Weak/Moderate/Strong/Very Strong. Null when signal_score is null.
insider_signalstringpro Insider-only AI signal: POSITIVE, NEGATIVE, NEUTRAL, NONE
inst_signalstringpro Institutional-only AI signal: POSITIVE, NEGATIVE, NEUTRAL, NONE
ai_commentary / ai_commentary_as_ofstring | nullpro A separately-generated AI narrative (names, amounts, direction) on its own refresh cadence, with the time it was written. It can lag the current filings - trust summary and transactions if they disagree.
top_holdersarraypro Up to 15 institutional holders: name, shares, pct_held, sources, share_counts_by_source
holder_count_divergenceobject | nullpro Non-null when the two holder feeds (filings, market_data) disagree on share counts by the same factor, which means holder share counts for this symbol may be unreliable
inst_ownershipnumber | nullpro Institutional ownership percentage as a float (e.g. 74.55)
total_holdersint | nullpro Total institutional holders

Example response

Example - free/guest, NVDA with days=365 (capped at 90)
{ "symbol": "NVDA", "days_requested": 365, "insider_buys": 0, "insider_sells": 7, "transactions": [ { "date": "2026-09-17T00:00:00+00:00", "name": "Kress Colette", "role": "EVP & Chief Financial Officer", "type": "SELL", "shares": 34918, "price": 219.0455, "value": 7648632.46 }, { "date": "2026-09-04T00:00:00+00:00", "name": "STEVENS MARK A", "role": "Director", "type": "SELL", "shares": 622239, "price": 231.6199, "value": 144122944.06 }, { "date": "2026-09-03T00:00:00+00:00", "name": "STEVENS MARK A", "role": "Director", "type": "SELL", "shares": 400000, "price": 228.7848, "value": 91513923.35 }, { "date": "2026-09-02T00:00:00+00:00", "name": "STEVENS MARK A", "role": "Director", "type": "SELL", "shares": 1200000, "price": 223.3346, "value": 268001520.0 }, { "date": "2026-09-01T00:00:00+00:00", "name": "STEVENS MARK A", "role": "Director", "type": "SELL", "shares": 63501, "price": 220.0589, "value": 13973960.21 } ], "window_days": 90, "source": "regulatory_filing", "source_name": "Regulatory insider filings", "transactions_note": "Showing the 5 most recent of 7 filings in the last 90 days.", "days_note": "days=365 capped at 90 on the free tier; Pro allows up to 365.", "pro_unlocks": "Pro adds the AI read (signal, signal_score, insider_signal/inst_signal and a written summary), a window of up to 365 days with up to 50 filings, and institutional holders (top_holders, inst_ownership, total_holders, holder_count_divergence)." }
Example - Pro (transactions, window_days, source, top_holders and holder_count_divergence omitted here for brevity)
{ "symbol": "BG", "signal": "POSITIVE", "signal_score": 68, "signal_score_band": "Strong", "insider_signal": "NEGATIVE", "inst_signal": "POSITIVE", "summary": "0 buys ($0) and 1 sell ($337K) by 1 insider, on 2026-08-14.", "ai_commentary": "COO Garros Julio sold $337K - lone negative insider signal. Institutions strongly positive: 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": "4 buys ($16.6M) and 0 sells ($0) by 4 insiders, 2026-07-02 to 2026-08-11.", "ai_commentary": "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_stock_activity free+ AI

Everything that happened to one stock over the last 90 days, in one timeline, newest first: news, SEC 8-K filings, insider clusters and large single trades, earnings dates and reported results, analyst target and rating changes, and screener setups. It is the stock page's Activity tab as one call, instead of five.

  • Every account: the facts. All types except setups over the whole 90 days, up to 50 items per page, paging, the plain headline in full, and counts for every type. Allowances match the other Free tools: the 5 newest articles of the last 30 days (as get_stock_news), the 5 most recent SEC 8-K filings (as get_stock_filings), the 5 newest insider items. An analyst item names the direction only, and a reported quarter gives the growth, not the amounts.
  • Pro: related news and filings, and what is under each headline: tone, number (a 0-100 score for news and setups, relevance for filings), a short summary on every kind, the model's own filing headline, a reported quarter's revenue and diluted EPS, fuller extra fields (analyst target and rating levels, insider total value and trades), and the setup items themselves. Other accounts see locked_types when the stock has setups, not how many.

The whole call counts as one call toward your daily limit, whatever the page size. Not the same as get_signals, which is the market-wide queue of freshly screened ideas across all stocks (Pro, last 24 hours, ranked by signal_score). A setup here is one such idea for this stock, one item among six kinds in its history. For articles alone use get_stock_news; for filings alone, get_stock_filings.

Parameters

ParameterTypeRequiredDefaultDescription
symbolstring✓-Ticker symbol. A company name is accepted when it matches exactly one stock (the response then carries resolved_from).
typesarray of stringallAny of news, filing, insider, earnings, analyst, setup. An unknown name is an invalid_types error that lists the valid ones. With no types the timeline is the "All" view: very weak news (score under 25) is left out and upcoming earnings within 30 days are returned separately under upcoming. With types you get just those kinds, news included in full (Pro; Free is capped as above).
daysinteger90Look-back window in days, 1-90.
limitinteger25Items per page, 1-50.
pageinteger1Page number. pages in the response says how many there are.

Response fields

FieldTypeDescription
symbol, days, types, limitThe request as applied. types is "all" when no filter was given.
statusstringok empty (with a message) or partial (a source could not be read, see unavailable)
unavailablearrayPresent only when a source could not be read just now. The kinds that were left out (any of news, filing, insider, earnings, analyst, setup), limited to the kinds you asked about. The rows returned are what could be read: an empty list for a kind named here does not mean nothing happened. Call again shortly.
count / total / page / pagesintegerItems on this page, items in the window for this filter, and the paging position.
countsobjectItems per type in the window, whatever the page, for the type chips. With no type filter the sum can be larger than total: the all-types list leaves out very weak news, shows a reported quarter once (through its earnings row) and lists upcoming earnings dates separately.
itemsarrayNewest first. Each item: id, type, symbol, timestamp (ISO 8601 UTC), headline, extra, and for Pro tone, number, number_label and summary.
upcomingarrayEarnings dates within the next 30 days (All view only), soonest first.
news_notestringFree and guest only. The article allowance (and that filings and insider rows have their own), when news is in the answer.
filings_notestringFree and guest only. The filing allowance, when filings are in the answer.
locked_typesarrayFree and guest only. Kinds that need Pro (setups), listed when the stock has some. The number is not sent and setups are not in counts.
pro_unlocksstringFree and guest only. What Pro adds.
resolved_fromobjectPresent when a company name was matched to a symbol.

What each type is, and its extra:

typeMeaningextra (every account)Pro adds
newsAn article about the company. Third-party reporting; the headline is the article's own. Articles about the same event are merged into one.collapsed_counttone, score, summary
filingAn SEC 8-K. Earnings coverage that repeats a results filing is folded into it.items, company, time, related_news, sec_url (the filing on SEC.gov)headline, summary, tone, relevance, the stock's move on the report
insider3 or more insiders buying or selling within 30 days, or one insider's large trade of a day (buys from 250,000, sells from 1,000,000, in the stock's currency), with the amount in the headline.direction_word, insiders (count), days, namestotal value, trades, and a summary: the largest trade and the span, or the shares and the average price
earningsA reporting date, or what a company reported: the quarter's revenue and diluted EPS from its statements. The headline of a reported quarter is "Results for the quarter ended Sep 2026"; Free sees the growth and, where the company's EPS can be set against the analysts' estimate, whether it beat, missed or was in line ("EPS beat estimates"), never the estimate or a percentage; Pro sees the amounts and the figures behind the direction. A results filing is shown once, through this row.date, upcoming, estimate, quarter, related_newsmarket cap; a summary: what is expected, the last quarter and how its EPS compared with the estimate, or the filing's read plus the reported EPS against the estimate; tone
analystThe consensus target or rating moved by 5% or more. A run of steps in one direction is one item. The headline gives the direction only ("Analyst target raised").action (target, rating or both)the levels: target and rating from/to, change, analyst count, steps, and a summary of the consensus that day
setupA screener setup flagged on the stock.-the item itself: kind, score, direction, and the readings it was flagged on
Example - MSFT, types earnings + filing + insider, limit 3, free
{ "symbol": "MSFT", "days": 90, "types": [ "earnings", "filing", "insider" ], "count": 3, "total": 6, "page": 1, "pages": 2, "limit": 3, "counts": { "filing": 1, "insider": 3, "earnings": 2 }, "items": [ { "id": "earnings:1412729720b3", "type": "earnings", "symbol": "MSFT", "timestamp": "2027-01-27T00:00:00+00:00", "source": "Earnings calendar", "headline": "Earnings on Jan 27, 2027 (estimated)", "extra": { "date": "2027-01-27", "upcoming": true, "estimate": true } }, { "id": "filing:0001193125-26-436122", "type": "filing", "symbol": "MSFT", "timestamp": "2026-10-28T20:04:44+00:00", "source": "SEC", "headline": "Microsoft: earnings results (SEC 8-K)", "extra": { "items": [ "Results of operations" ], "company": "MICROSOFT CORP", "time": "16:04 ET", "date_et": "2026-10-28", "sec_url": "https://www.sec.gov/Archives/edgar/data/789019/000119312526436122/0001193125-26-436122-index.htm" } }, { "id": "earnings:88c2949a1d76", "type": "earnings", "symbol": "MSFT", "timestamp": "2026-10-28T20:04:44+00:00", "source": "Company results", "headline": "Results for the quarter ended Sep 2026: revenue up 19%, EPS up 32%; EPS beat estimates", "extra": { "date": "2026-10-28", "quarter": "Sep 2026" } } ], "status": "ok", "filings_note": "Free returns the 5 most recent SEC 8-K filings; Pro returns the whole window.", "pro_unlocks": "Pro adds related news and filings of the 90 days and the content under each title: tone, a 0-100 score, a short summary, the model's own headline on filings, revenue and EPS of each reported quarter, analyst target and rating levels, insider details, and the screener setups for the stock." }
Example - the same call on Pro
{ "symbol": "MSFT", "days": 90, "types": [ "earnings", "filing", "insider" ], "count": 3, "total": 6, "page": 1, "pages": 2, "limit": 3, "counts": { "filing": 1, "insider": 3, "earnings": 2 }, "items": [ { "id": "earnings:1412729720b3", "type": "earnings", "symbol": "MSFT", "timestamp": "2027-01-27T00:00:00+00:00", "source": "Earnings calendar", "headline": "Earnings on Jan 27, 2027 (estimated)", "summary": "Last reported, quarter ended Sep 2026: revenue $92.3B, up 19%; diluted EPS $4.92, up 32%.", "extra": { "date": "2027-01-27", "upcoming": true, "estimate": true, "market_cap": 3875804807168 } }, { "id": "filing:0001193125-26-436122", "type": "filing", "symbol": "MSFT", "timestamp": "2026-10-28T20:04:44+00:00", "source": "SEC", "number_label": "Relevance", "headline": "Q1 revenue up 19% to $92.3B, EPS up 32%, beat expectations", "tone": "Positive", "number": 88, "summary": "Fiscal Q1 revenue was $92.3B up 19% with EPS $4.92 up 32% GAAP and Azure up 48%; CFO said results exceeded expectations on revenue, operating income and EPS.", "extra": { "items": [ "Results of operations" ], "company": "MICROSOFT CORP", "time": "16:04 ET", "date_et": "2026-10-28", "accession": "0001193125-26-436122", "sec_url": "https://www.sec.gov/Archives/edgar/data/789019/000119312526436122/0001193125-26-436122-index.htm" } }, { "id": "earnings:88c2949a1d76", "type": "earnings", "symbol": "MSFT", "timestamp": "2026-10-28T20:04:44+00:00", "source": "Company results", "headline": "Results for the quarter ended Sep 2026: revenue $92.3B, up 19%; diluted EPS $4.92, up 32%", "tone": "Positive", "summary": "Fiscal Q1 revenue was $92.3B up 19% with EPS $4.92 up 32% GAAP and Azure up 48%; CFO said results exceeded expectations on revenue, operating income and EPS. EPS of $4.89 against $4.72 expected, 3.6% above, on the basis analysts use.", "extra": { "date": "2026-10-28", "reported": true, "quarter": "Sep 2026", "eps_surprise": { "direction": "beat", "eps_actual": 4.89, "eps_estimate": 4.72072, "percent": 3.6 }, "accession": "0001193125-26-436122" } } ], "status": "ok" }
Example - MSFT, types news + analyst, limit 2, free
{ "symbol": "MSFT", "days": 90, "types": [ "news", "analyst" ], "count": 2, "total": 7, "page": 1, "pages": 4, "limit": 2, "counts": { "news": 5, "analyst": 2 }, "items": [ { "id": "news:9db874c50d00", "type": "news", "symbol": "MSFT", "timestamp": "2026-11-01T01:10:00+00:00", "headline": "Microsoft (MSFT) Lands $25 Billion Bond Deal As AI Push Deepens", "extra": {} }, { "id": "news:becafcabbad8", "type": "news", "symbol": "MSFT", "timestamp": "2026-10-31T13:35:00+00:00", "headline": "Can Microsoft Turn a Leaner Workforce and Record AI Spending Into Bigger Profits?", "extra": {} } ], "status": "ok", "news_note": "Free returns the 5 newest articles of the last 30 days; filings and insider rows have their own limit; analyst and earnings rows cover the whole window.", "pro_unlocks": "Pro adds related news and filings of the 90 days and the content under each title: tone, a 0-100 score, a short summary, the model's own headline on filings, revenue and EPS of each reported quarter, analyst target and rating levels, insider details, and the screener setups for the stock." }

get_stock_filings free+ AI

The latest SEC 8-K filings of one company, newest first: when each was filed, what it reports and, on Pro, what it says. 8-Ks are how a US-listed company announces results, deals, financings, leadership changes and other material events.

  • Every account: the facts. filed_at, date, time, session, the item labels (for example "Results of operations"), the company and the accession number. The 5 most recent filings.
  • Pro: up to 25 filings, headline (one line on what the filing says), summary (two or three sentences), sentiment (Positive, Negative or Neutral: the tone of the news for the company, not a price call) and relevance (0-100, how material it looks).

Routine filings are left out for everyone. Coverage: US-listed companies in USD with a market cap of about $1 billion or more. Filings are recorded in the morning, before the US open and after the close, so one filed minutes ago may not be there yet. For the filing together with news, insider and analyst activity in one timeline use get_stock_activity.

Parameters

ParameterTypeRequiredDefaultDescription
symbolstring✓-Ticker symbol. A company name is accepted when it matches exactly one stock.
limitinteger10Filings returned, 1-25 (Free: up to 5). The whole call counts as one call toward your daily limit.

Response fields

FieldTypeDescription
symbol, count, limitThe request as applied and the number of filings returned.
statusstringok empty (with a message that says what is covered)
items[].accessionstringThe SEC accession number.
items[].companystringCompany name as filed.
items[].filed_atstringWhen the SEC accepted it, ISO 8601 with the New York offset.
items[].date / time / sessionstringThe same moment for display: "Sep 1, 2026", "16:37 ET", and Before open, During trading or After close.
items[].titlestringThe filing in plain words, for example "Microsoft: earnings results (SEC 8-K)". Every account gets it.
items[].itemsarrayWhat the filing covers, as plain labels.
items[].sec_urlstringThe filing's page on SEC.gov.
items[].headline / summarystringpro What the filing says, in one line and in two or three sentences.
items[].sentimentstringpro Positive, Negative or Neutral: the tone of the news for the company, not a price call.
items[].relevanceintegerpro 0-100, how material the filing looks.
pro_unlocksstringFree and guest only. What Pro adds.
items_notestringFree and guest only, when more filings exist than Free returns.
resolved_fromobjectPresent when a company name was matched to a symbol.
Example - MRNA, limit 2, free
{ "symbol": "MRNA", "count": 2, "limit": 2, "items": [ { "accession": "0001193125-26-378505", "symbol": "MRNA", "company": "Moderna, Inc.", "filed_at": "2026-09-01T16:37:04-04:00", "date": "Sep 1, 2026", "time": "16:37 ET", "session": "After close", "items": [ "Material agreement", "New financial obligation", "Unregistered share sale", "Other events" ], "sec_url": "https://www.sec.gov/Archives/edgar/data/1682852/000119312526378505/0001193125-26-378505-index.htm" }, { "accession": "0001682852-26-000147", "symbol": "MRNA", "company": "Moderna, Inc.", "filed_at": "2026-07-31T07:03:47-04:00", "date": "Jul 31, 2026", "time": "07:03 ET", "session": "Before open", "items": [ "Results of operations" ], "sec_url": "https://www.sec.gov/Archives/edgar/data/1682852/000168285226000147/0001682852-26-000147-index.htm" } ], "items_note": "Free returns the 5 most recent filings; Pro returns up to 25.", "status": "ok", "pro_unlocks": "Pro adds up to 25 filings, a model-written headline and summary, tone (Positive/Negative/Neutral) and a 0-100 relevance score." }
Example - the same call on Pro
{ "symbol": "MRNA", "count": 2, "limit": 2, "items": [ { "accession": "0001193125-26-378505", "symbol": "MRNA", "company": "Moderna, Inc.", "filed_at": "2026-09-01T16:37:04-04:00", "date": "Sep 1, 2026", "time": "16:37 ET", "session": "After close", "items": [ "Material agreement", "New financial obligation", "Unregistered share sale", "Other events" ], "sec_url": "https://www.sec.gov/Archives/edgar/data/1682852/000119312526378505/0001193125-26-378505-index.htm", "relevance": 91, "summary": "Completed $3B 0% convertible notes due 2032, upsized from $2B proposal. Proceeds for general corporate, oncology growth, debt repayment with capped call hedge.", "headline": "Moderna completes $3 billion zero coupon notes offering due 2032", "sentiment": "Neutral" }, { "accession": "0001682852-26-000147", "symbol": "MRNA", "company": "Moderna, Inc.", "filed_at": "2026-07-31T07:03:47-04:00", "date": "Jul 31, 2026", "time": "07:03 ET", "session": "Before open", "items": [ "Results of operations" ], "sec_url": "https://www.sec.gov/Archives/edgar/data/1682852/000168285226000147/0001682852-26-000147-index.htm", "relevance": 90, "summary": "Q2 revenue was $145M with GAAP net loss of $0.8B and EPS of negative $1.97. Improved 2026 opex outlook by about $0.2B and year end cash to $4.7 to $5.2B, while norovirus candidate missed Phase 3 interim success criteria.", "headline": "Q2 revenue $145M, loss $0.8B, expense outlook cut, norovirus miss", "sentiment": "Neutral" } ], "status": "ok" }

get_signals pro AI

AI signal queue - stocks actively flagged by the Stocklake pipeline as worth attention. Sourced from sector screening, news analysis, and sentiment signals. 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
directionstring-POSITIVE · 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 signal score (0-100) - mainly how stretched the stock is in the signal's direction. This is the field to filter on.
sourcestring-Filter by signal source: news · screener · sentiment
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 | positive | 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_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 current 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 a dropped or 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.

One article per event: when several articles report the same event, the highest-ranked one is kept and carries collapsed_count, the number of articles merged into it. limit counts distinct events. Articles without a usable summary are left out.

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. Refreshed ~4x/day, weekdays only, during market hours (~2h apart) - dead overnight and on weekends, not a continuous 4-hourly cadence. Check regime_stale / outlook_stale before treating this as current. 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. Use get_market_pulse for the latest 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_dataobjectMacro 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.breadthobjectMarket-wide RSI breadth (universe_size, oversold/overbought/neutral counts + percentages) - same 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.

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": { /* 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 ~4x/day, weekdays only, during market hours (~2h apart) - dead overnight and on weekends, not a continuous 4-hourly cadence. Check the returned updated_at before treating this as current.

Parameters

ParameterTypeRequiredDefaultDescription
sectorstring-NoneSector name (e.g. Technology, Healthcare). Omit to list all sectors.
sort_by_strengthboolean-falseAll-sectors call only: sort LEADING→LAGGING instead of alphabetical - for finding leading vs lagging sectors
history_countinteger-0All-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)
sectorstring-Filter to one sector (optional)
min_ai_scoreinteger-Only 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. For a few thinly covered foreign ADRs eps_forward can be off by orders of magnitude; check it against eps_trailing and price.
ai_verdictstringpositive / neutral / negative (from nightly AI pipeline)
ai_scorenumber | null0-100 AI research composite score, 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 latest 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_capnumberLatest 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 AI research composite score - 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 } ] }