Signal8

ai.signal8由 signal8.ai 发布官方发布者v0.19.0更新于 Nov 2, 2026

SEC filings, dilution, insider & institutional ownership, and political-trade data for AI agents.

已验证Streamable HTTP可网页运行金融数据与分析

概览

AI 生成的概览

Signal8 让助手获取美股行情与 SEC 文件数据:报价、财报、申报文件、稀释、内部人及机构持股。

可以做什么
  • 搜索公司并读取简介、报价、市场指标、流通股、做空数据、财务报表、盈利、高管与分析师预期
  • 获取历史价格、涨跌幅、涨跌榜、市场宽度、行业 ETF 与指数快照,以及财报、经济、申报截止与锁定期日历
  • 检索并阅读 SEC 申报文件与附件,包括全文段落搜索、结构化的 Form 3/4/5 与 13F 数据,以及申报后股价表现
  • 分析稀释情况:覆盖情况、风险评分、稀释工具、baby shelf 额度、发行后表现与历史
  • 查看内部人交易、集中买入、机构持有人与统一持股视图
  • 筛选公司与申报文件,检查合规与上市缺陷,跟踪 ATM 与公司事件
适用场景
适合需要研究美股上市公司、阅读 SEC 申报文件,或回答股价、稀释、内部人与机构持股及全市场动态问题的场景。
运行要求
可作为托管端点 mcp.signal8.ai 使用,也可通过 npx @signal8ai/mcp 在本地运行(需 Node.js)。需要 SIGNAL8_API_KEY 环境变量中的 Signal8 API 密钥,或 Authorization 中的 bearer 令牌;托管连接器也可用 Signal8 账号登录。API 访问需付费的 Signal8 Pro 订阅。
安装前请注意
API 密钥属于机密,会以环境变量或 bearer 令牌形式发送。使用需付费的 Signal8 Pro 订阅(每月 59 美元或每年 588 美元),免费账号无法创建密钥。数据为只读的行情与申报数据,但数值可能为空或被隐去,申报档案在其收录范围之前并不完整,缺失不代表不存在。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Signal8,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/ai.signal8%2Fmcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "signal8": {
      "type": "http",
      "url": "https://mcp.signal8.ai/mcp"
    }
  }
}

README

@signal8ai/mcp

[npm] [MCP Registry] [mcp.so] [Glama]

[Signal8 MCP server on Glama]

MCP (Model Context Protocol) server for Signal8 -- AI-extracted SEC filing intelligence data.

Gives AI agents like Claude, Cursor, and other MCP-compatible tools direct access to:

  • Company fundamentals (quotes, financials, earnings, float, executives, peers, news)
  • Dilution analysis (warrants, convertibles, preferred, shelf registrations, ATMs, equity lines and S-1 offerings, each figure cited to the SEC filing it was read from)
  • Dilution Pressure Score (0-100, seven components: shelf capacity, ATM/equity-line capacity, warrants in the money, convertible proximity, cash burn, historical dilution, toxic financing)
  • Baby shelf capacity (S-3 General Instruction I.B.6 one-third-of-float cap, recomputed from the live float)
  • Cash runway (cash position, monthly burn, capital raises since the last balance sheet)
  • Intelligence (counterparties, counsel, insiders, institutions, ROFR triggers, cluster buys)
  • Cross-company intelligence (top AUM institutions, cross-company counsel & insider patterns)
  • Compliance monitoring (Nasdaq/NYSE deficiency detection, listing classification)
  • Company screening (dilution-aware filters with 30+ fields)
  • ETF analysis (holdings, sectors, countries, performance, comparables)

Installation

bash
npm install -g @signal8ai/mcp# or use npx (no install needed)npx @signal8ai/mcp

Setup

1. Get your API key

API and MCP access are included with Signal8 Pro ($59/mo, or $588/yr). A free Signal8 account cannot create API keys. Upgrade at signal8.ai/pro, then create a key in the developer portal at signal8.ai/developer/api-keys.

Using Claude.ai or Claude Desktop? You can skip the key entirely: add the hosted server as a custom connector and sign in with your Signal8 account (see Hosted Endpoint).

2. Configure your MCP client

Claude Desktop

Add to your Claude Desktop config file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

json
{  "mcpServers": {    "signal8": {      "command": "npx",      "args": ["-y", "@signal8ai/mcp"],      "env": {        "SIGNAL8_API_KEY": "sk_live_your_key_here"      }    }  }}
Cursor

Add to .cursor/mcp.json in your project root:

json
{  "mcpServers": {    "signal8": {      "command": "npx",      "args": ["-y", "@signal8ai/mcp"],      "env": {        "SIGNAL8_API_KEY": "sk_live_your_key_here"      }    }  }}
Other MCP Clients

Set the SIGNAL8_API_KEY environment variable and run:

bash
SIGNAL8_API_KEY=sk_live_your_key_here npx @signal8ai/mcp

Available Tools (107)

The server exposes 104 live tools at runtime. The reference tables below are a representative catalog grouped by domain, not an exhaustive list; the Extractions section documents tools that are currently disabled and not registered live. The authoritative list is what tools/list returns.

Companies (3 tools)

ToolDescription
search_companiesSearch companies by name or ticker
get_company_profileFull company profile (description, market cap, sector)
get_company_bundleConsolidated data bundle in one call

Company Data (13 tools)

ToolDescription
get_quoteReal-time stock quote (price, change, volume)
get_market_metricsVolume averages, volatility, SMAs, trend direction
get_short_interestShort interest data and days-to-cover
get_floatFloat composition, shares outstanding, ownership %
get_financialsIncome statement, balance sheet, cash flow
get_earningsEarnings history with EPS surprises
get_executivesExecutive team roster and compensation
get_peersPeer/comparable companies
get_transcriptsEarnings call transcripts
get_newsLatest company news headlines
get_analyst_consensusAnalyst ratings and price targets
get_material_eventsMaterial corporate events (8-K filings)
get_clinical_trialsClinical trials matched to a company, each tagged sponsorRole (lead vs collaborator; only lead trials are its own pipeline)

Market — Cross-Ticker (6 tools)

ToolDescription
get_quotes_batchBatch real-time quotes for up to 200 tickers (POST)
get_quotes_universeQuotes for an entire index universe (sp500/ndx/dji)
get_index_snapshotBulk ticker snapshots (price, day change, % change)
get_sector_etf_snapshotSnapshot of the 11 SPDR sector ETFs with sector labels
get_top_moversTop gainers / losers / most-active by volume (with optional session window)
get_market_breadthAdvance/decline, % above SMA50/200, 52-week high/low counts

Calendar (5 tools)

ToolDescription
get_earnings_calendarUpcoming/recent earnings releases between two dates
get_economic_calendarMacro/economic events (CPI, FOMC, jobs, GDP) by date and country
get_filing_calendar10-K / 10-Q SEC filing-deadline calendar by universe
get_lockup_expirationsUpcoming IPO/secondary lockup expirations
get_recent_material_filingsRecent material 8-K filings by index universe and item codes

SEC Filings & EDGAR archive (10 tools)

Backed by Signal8's own archive of SEC EDGAR filings — the archive's held range (see archiveFrom in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), full-text indexed and updated through the day. Filings older than archiveFrom may be absent, so an empty result is not proof a filing was never made. Record-only rows (bodyStored: false) carry metadata but no body.

ToolDescription
search_sec_filingsFilings by CIK, form, date, 8-K items, excluded forms, full-text q (match exact/stemmed, sort newest/relevance, facets counts by form/year/8-K item, understand on/off, section search, exhibitTypes — see query syntax below), and company filters (market cap, float, price, sector, industry, exchange, company type, foreign issuer, recent IPO)
get_filing_documentsEvery document in a filing (type, size, stored, secUrl) with the filingId / exhibitId to read each one
get_filing_structuredParsed Form 3/4/5 transactions, 13F holdings (values normalised to dollars), XML SCHEDULE 13D/G
get_filing_documentFull text of a filing by filing id
get_filing_exhibitsReadable exhibits of a filing, with ids
get_exhibit_contentFull text of one exhibit
search_filing_textExhibit-level full-text search returning the matching passage (match exact/stemmed, sort, section, exhibitTypes)
lookup_accession_numberAccession number → filing id and metadata
screen_sec_filingsFilings across companies by sector / industry / exchange / market cap
screen_sec_filings_performancePrice returns +1/+3/+7/+30 days after filings (numbers, percent points), with aggregates

Full-text query syntax (search_sec_filings.q, search_filing_text.pattern): unquoted words must all appear; "quoted phrase" for exact wording; OR between alternatives; -word to exclude; w1 NEAR/10 w2 (or NEAR(10), bare NEAR = 10) for proximity; word* for a prefix of 4+ letters; $AAPL or a capitalised ticker scopes to that company; a form code (8-K), item 5.02 / 8-K 1.05 and a bare year scope to that form / 8-K item / year. Relevance page 1 shows a few filings per company; meta.diversity names who has more. How the archive read the query is returned in meta.understanding (pass understand: false to search the words literally). facets: true adds per-form / per-year / per-8-K-item counts over the whole result set — absent when not measured, never zero.

Section search + exhibit types (both search tools): section restricts matching to business, risk_factors, cybersecurity, legal_proceedings, mdna, market_risk, controls, ex99 (press releases) or an 8-K item (item_5_02); exhibitTypes keeps filings with e.g. EX-10 (material contracts) or EX-99.1. A section is applied only when meta.sections says so — otherwise meta.unsupported explains that the whole filing was searched. Rows may carry matchedSections (absent = not measured).

Company filters on search_sec_filings follow the same rules as the signal8.ai/sec-filings page: they are applied from the archive only, against the filer's own CIK, on issuer-filed forms only (Form 4, 144 and SCHEDULE 13D/G are dropped and reported in companyFilter.droppedForms). Companies with no measured value for a filter are excluded and counted in companyFilter.unknown. Unknown values return a 400 listing the valid names. If the archive cannot answer, the call fails with COMPANY_FILTER_NOT_APPLIED and a reason rather than returning unfiltered rows.

13F values: the SEC changed the unit of a 13F <value> from thousands of dollars to whole dollars for filings on/after 2023-01-03. get_filing_structured returns valueUsd / totalMarketValueUsd normalised to dollars (null when the unit cannot be determined) next to the raw valueThousands, and valueUnit says which unit the raw number is in.

Extractions (4 tools)

ToolDescription
get_extractionsAI-extracted SEC filing data (13 types)
get_filing_extractionsExtractions for a specific SEC filing
get_extraction_dashboardCross-company extraction analytics
get_extraction_by_typeFilter extractions by type (warrants, convertibles, etc.)

Dilution (7 tools)

Small-cap dilution analysis read directly from SEC filings. Every figure carries the accession number, filing date and the quoted sentence it came from. Included in Signal8 Pro. Call get_dilution_coverage first: it is the cheapest way to learn whether there is anything to fetch.

ToolDescription
get_dilution_coverageWhether a ticker has a dilution analysis, how fresh it is, and why not if it doesn't
get_dilution_riskDilution Pressure Score with its seven-component breakdown and risk levels. A partial score is out of scoreMaxMeasured (never rescale to /100); overheadSupply is total potential dilution excluding shelf (gross warrants/convertibles + ATM/equity line/S-1 at the current price, details.overheadSupplyBasis); levels named in levelsLowerBoundScope are floors ("at least") when levelsAreLowerBound is true; details.levelBounds gives each level's floor, ceiling and best estimate (a level whose floor and ceiling agree is exact)
get_dilution_snapshotPotential new shares and % of shares outstanding, cash position and runway, float
get_dilution_instrumentsOne instrument family's rows with per-field SEC citations (warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings)
get_baby_shelf_capacityS-3 I.B.6 baby shelf: how much the issuer can raise off its shelf right now
get_dilution_performanceHow the stock traded after each past offering priced or closed
get_dilution_historyShares-outstanding and cash series with offering overlays

Not measured is not zero. A null, withheld or unavailable figure means Signal8 did not measure it. It never means the company has no warrants, no shelf or no dilution, and the tool descriptions tell the model so.

Use the explain_dilution prompt to walk a ticker's dilution picture in plain English.

Intelligence — Per-Company (12 tools)

ToolDescription
get_counterpartiesEntity-resolved counterparty relationships
get_counselLegal counsel engagements with role taxonomy
get_insidersInsider trading discovery and patterns
get_ownershipUnified ownership (Form 4 + 13F + 13D/G)
get_rofr_triggersROFR exercise trigger detection
get_institutionsInstitutional holders from 13F filings
get_institution_detailDetailed info for a specific institution (by CIK)
get_institution_holdingsFull portfolio holdings for an institution
get_banksInvestment bank relationships from SEC filings
get_legal_counselsLegal counsel relationships with partner names
get_insider_transactionsDetailed Form 4 transaction history
get_insider_cluster_buysCluster buying detection (3+ insiders in 14 days) over a 7 / 30 / 90-day lookback, with asOf

Intelligence — Cross-Company (3 tools)

ToolDescription
get_institution_top_aumTop institutional holders by AUM across all companies
get_counsel_cross_companyLaw firm engagements across multiple companies
get_insider_cross_companyInsider trading patterns across multiple companies

Compliance (4 tools)

ToolDescription
get_complianceFull compliance evaluation
get_deficienciesListing deficiency detection
get_compliance_alertsActive compliance alerts
get_listing_classificationExchange listing classification

Screener (2 tools)

ToolDescription
get_screener_fieldsDiscover available screening filters
screen_companiesDilution-aware company screener

Events & ATM (2 tools)

ToolDescription
get_eventsUnified corporate events
get_atm_activityATM program monitoring

ETF (1 tool)

ToolDescription
get_etf_bundleAggregated ETF data (profile, holdings, sectors, performance)

Market Intelligence — Tool Reference

Cross-ticker market and calendar tools that operate over the entire universe rather than a single company. The single-ticker get_quote tool is included here for completeness; the rest were added in the Market Intelligence rollout.


get_quote

Real-time quote for a single ticker (price, change, volume, day range).

Inputs:

NameTypeRequiredDescription
tickerstringyesTicker symbol (e.g. AAPL)

Sample output (regular trading hours, 9:30am–4:00pm ET):

json
{  "data": {    "ticker": "AAPL",    "currentPrice": 178.42,    "change": 2.15,    "changePercent": 1.22,    "high": 179.10,    "low": 176.80,    "open": 177.05,    "previousClose": 176.27,    "preMarketPrice": null,    "preMarketChangePercent": null,    "afterHoursPrice": null,    "afterHoursChangePercent": null,    "timestamp": 1714492800  }}

Sample output (extended hours — pre-market or after-hours):

json
{  "data": {    "ticker": "AAPL",    "currentPrice": 178.42,    "change": 2.15,    "changePercent": 1.22,    "high": 179.10,    "low": 176.80,    "open": 177.05,    "previousClose": 176.27,    "preMarketPrice": 179.05,    "preMarketChangePercent": 0.35,    "afterHoursPrice": 178.90,    "afterHoursChangePercent": 0.27,    "timestamp": 1714492800  }}

Extended-hours windows (US equities, ET): pre-market 4:00am–9:30am, after-hours 4:00pm–8:00pm. Outside those windows preMarketPrice, preMarketChangePercent, afterHoursPrice, and afterHoursChangePercent are null. In practice only one pair is populated at a time depending on the current window — the second example shows both populated for illustration.

Use case: "What is AAPL trading at right now?"


get_quotes_batch

Fetch real-time quotes for up to 200 tickers in one call. Backed by POST /api/v1/public/market/quotes. Tickers absent from the upstream feed map to null.

Inputs:

NameTypeRequiredDescription
tickersstring[]yes1–200 ticker symbols

Sample output:

json
{  "data": {    "count": 3,    "quotes": {      "AAPL": { "ticker": "AAPL", "currentPrice": 178.42, "changePercent": 1.22 },      "MSFT": { "ticker": "MSFT", "currentPrice": 412.10, "changePercent": 0.41 },      "NVDA": null    }  }}

Use case: "Pull live quotes for my entire 50-ticker watchlist in one call."


get_quotes_universe

Quotes for all constituents of a known index universe (S&P 500, Nasdaq 100, or Dow 30).

Inputs:

NameTypeRequiredDescription
universeenumyesOne of sp500, ndx, dji

Sample output:

json
{  "data": {    "universe": "dji",    "count": 30,    "quotes": {      "AAPL": { "currentPrice": 178.42, "changePercent": 1.22 },      "MSFT": { "currentPrice": 412.10, "changePercent": 0.41 }    }  }}

Use case: "Give me a live snapshot of every Dow 30 component."


get_index_snapshot

Bulk daily snapshot (OHLC, volume, % change) for an explicit ticker list (max 50) or the full tracked universe when omitted.

Inputs: none required (optional tickers query when called via REST)

Sample output:

json
{  "data": {    "count": 2,    "snapshots": [      { "ticker": "SPY", "close": 512.34, "changePercent": 0.42, "volume": 78321000 },      { "ticker": "QQQ", "close": 438.21, "changePercent": 0.55, "volume": 41902000 }    ]  }}

Use case: "Show me a one-shot snapshot of where the index ETFs closed."


get_sector_etf_snapshot

Snapshot of the 11 SPDR sector ETFs (XLK, XLF, XLV, XLY, XLP, XLE, XLI, XLB, XLRE, XLU, XLC) with a sector label per row. Useful for sector-rotation views.

Inputs: none

Sample output:

json
{  "data": {    "count": 11,    "sectors": [      { "ticker": "XLK", "sector": "Technology", "close": 218.40, "changePercent": 0.85 },      { "ticker": "XLF", "sector": "Financials", "close": 41.23, "changePercent": -0.12 }    ]  }}

Use case: "Which sectors are leading and lagging today?"


get_top_movers

Top market movers by direction (gainers, losers, or most-active by volume), computed from ticker_snapshots. Excludes warrants/units/ETFs/funds.

Inputs:

NameTypeRequiredDescription
directionenumyesgainers, losers, or active
limitintegerno1–100 (backend default applied when omitted)
sessionenumnopremarket (4:00–9:30 AM ET), regular (default; close-to-close), or afterhours (4:00–8:00 PM ET). Use premarket/afterhours when posting outside RTH so rankings reflect the live window.

Sample output:

json
{  "data": {    "direction": "gainers",    "session": "regular",    "count": 2,    "movers": [      { "rank": 1, "ticker": "XYZ", "name": "Acme Corp", "price": 12.34, "changePercent": 42.1, "volume": 12000000, "marketCap": 350000000, "isETF": false },      { "rank": 2, "ticker": "ABC", "name": "ABC Inc", "price": 5.62, "changePercent": 31.8, "volume": 8400000, "marketCap": 120000000, "isETF": false }    ]  }}

Use case: "What are today's top 10 gainers?"


get_market_breadth

Market breadth aggregates (advance/decline counts and ratio, % of constituents trading above their 50DMA / 200DMA, and counts of new 52-week highs/lows) for a chosen universe. Point-in-time only — no historical breadth.

Inputs:

NameTypeRequiredDescription
universeenumnosp500 (default), ndx, or all

Sample output:

json
{  "data": {    "universe": "sp500",    "asOf": "2026-04-30T20:00:00.000Z",    "advancers": 312,    "decliners": 175,    "unchanged": 16,    "advanceDeclineRatio": 1.7828571428571428,    "pctAbove50DMA": 0.642,    "pctAbove200DMA": 0.561,    "new52wHighs": 18,    "new52wLows": 4  }}

Use case: "How many S&P 500 names are above their 200DMA right now?" or "Add a one-line market-state header to today's commentary tweet."


get_earnings_calendar

Forward-looking and recent earnings releases between two dates. Optionally filter to a list of tickers.

Inputs:

NameTypeRequiredDescription
fromstring (YYYY-MM-DD)yesWindow start
tostring (YYYY-MM-DD)yesWindow end
tickersstring[]noOptional ticker filter

Sample output:

json
{  "data": {    "events": [      { "ticker": "AAPL", "date": "2026-05-02", "time": "AMC", "epsEstimate": 1.50, "revenueEstimate": 90100000000 }    ],    "total": 1,    "limit": 50,    "offset": 0  }}

Use case: "Which mega-caps report earnings next week?"


get_economic_calendar

Macroeconomic events (CPI, FOMC, NFP, GDP, etc.) between two dates, filtered by country and impact level.

Inputs:

NameTypeRequiredDescription
fromstring (YYYY-MM-DD)yesWindow start
tostring (YYYY-MM-DD)yesWindow end
countrystring (ISO-2)noDefaults to US

Sample output:

json
{  "data": {    "events": [      { "date": "2026-05-07", "country": "US", "event": "FOMC Rate Decision", "impact": "High", "actual": null, "forecast": "5.25%", "previous": "5.25%" }    ],    "total": 1  }}

Use case: "What high-impact US events land this week?"


get_filing_calendar

Forward-looking 10-K / 10-Q SEC filing-deadline calendar by index universe. Deadlines computed from each company's last-reported period end + filer-status offset.

Inputs:

NameTypeRequiredDescription
fromstring (YYYY-MM-DD)noDefault today
tostring (YYYY-MM-DD)noDefault today + 45d
universeenumnosp500, ndx, dji, or all (default)
formTypesstring[]noSubset of ["10-K", "10-Q"]

Sample output:

json
{  "data": {    "rows": [      {        "ticker": "AAPL", "companyName": "Apple Inc.",        "formType": "10-Q", "periodEnd": "2026-03-29",        "deadline": "2026-05-13", "daysUntilDeadline": 13,        "filerStatus": "large_accelerated"      }    ],    "count": 1,    "window": { "from": "2026-04-30", "to": "2026-06-14" },    "universe": "sp500",    "formTypes": ["10-K", "10-Q"]  }}

Use case: "Which S&P 500 names have a 10-Q deadline in the next two weeks?"


get_lockup_expirations

Upcoming IPO/secondary lockup expirations within a date window. Derived from underwriting-terms extractions (S-1 / F-1 / 424B*) — coverage is partial; check meta.coveragePercent.

Inputs:

NameTypeRequiredDescription
fromstring (YYYY-MM-DD)noDefault today
tostring (YYYY-MM-DD)noDefault today + 90d
universeenumnosp500, ndx, dji, or all (default)

Sample output:

json
{  "data": {    "rows": [      {        "ticker": "NEWCO", "companyName": "NewCo Inc.",        "lockupEndDate": "2026-05-21", "daysUntilExpiry": 21,        "originalFilingType": "S-1", "sharesUnlocking": 24500000,        "sourceFilingUrl": "https://sec.gov/..."      }    ],    "meta": {      "coveragePercent": 38.4,      "totalCandidates": 412,      "parsedCount": 158,      "windowStart": "2026-04-30",      "windowEnd": "2026-07-29",      "universe": "all"    }  }}

Use case: "Any IPO lockup expirations coming up in the next 30 days?"


get_recent_material_filings

Recent 8-K filings flagged as materially significant within a named index universe, optionally filtered by item codes (e.g. 1.01 material agreement, 5.02 leadership change). Lookback fixed at 7 days.

Inputs:

NameTypeRequiredDescription
universeenumyessp500, ndx, or dji
itemsstring[]no8-K item codes (e.g. ["1.01", "2.01"])
limitintegerno1–200 (default 50)

Sample output:

json
{  "data": {    "universe": "sp500",    "items": ["1.01", "5.02"],    "count": 1,    "filings": [      {        "ticker": "AAPL", "companyName": "Apple Inc.",        "filingDate": "2026-04-29T20:15:00Z", "formType": "8-K",        "items": ["1.01"], "filingUrl": "https://sec.gov/...",        "summary": "Material definitive agreement entered into..."      }    ]  }}

Use case: "Any S&P 500 leadership-change 8-Ks filed this week?"


Resources

ResourceURIDescription
Company Profilesignal8://companies/{ticker}/profileEnriched company profile by ticker
Extraction Typessignal8://extraction-typesList of all 13 SEC filing extraction types

Prompts (4)

PromptArgumentsDescription
company_due_diligenceticker (string)10-step comprehensive due diligence research
screening_workflowsector?, marketCapMax? (string)5-step discover-screen-analyze workflow
institutional_analysisticker (string)6-step institutional ownership & smart money analysis
explain_dilutionticker (string)Dilution coverage, score, snapshot and instruments explained in plain English with Signal8 Academy citations

Hosted Endpoint

For web-based MCP clients, use the hosted Streamable HTTP endpoint:

POST https://mcp.signal8.ai/mcpAuthorization: Bearer sk_live_your_key_hereContent-Type: application/json

Clients that support custom bearer-token headers (e.g. Claude Code CLI's --transport http connector, Cursor, and VS Code's MCP support) can send your API key as shown above.

Clients that support MCP OAuth need no key at all. In Claude.ai or Claude Desktop, open Settings → Connectors → Add custom connector, paste https://mcp.signal8.ai/mcp, and Claude opens a Signal8 sign-in to authorize the connection. The server advertises its authorization server at https://mcp.signal8.ai/.well-known/oauth-protected-resource (OAuth 2.1 with PKCE and dynamic client registration, issued by https://api.signal8.ai). OAuth connections are subject to the same Signal8 Pro requirement and rate limits as API keys.

Environment Variables

VariableRequiredDescription
SIGNAL8_API_KEYYesYour Signal8 API key (starts with sk_live_ or sk_test_)
SIGNAL8_API_URLNoAPI base URL (default: https://api.signal8.ai/api/v1/public)

Pricing

The MCP server and the REST API it calls are included with Signal8 Pro ($59/mo, or $588/yr) at 120 requests per minute and 10,000 requests per day, with up to 3 API keys. There are no per-call credits or per-request charges: every request the server makes to the Signal8 API counts once against those limits. Free Signal8 accounts do not include API or MCP access. See signal8.ai/developer.

Programmatic Usage

typescript
import { createMcpServer, Signal8ApiClient } from '@signal8ai/mcp';
const client = new Signal8ApiClient({  baseUrl: 'https://api.signal8.ai/api/v1/public',  apiKey: 'sk_live_xxx',});
const server = createMcpServer(client);// Connect to any MCP transport...

License

MIT -- see the LICENSE file. Copyright (c) 2025-2026 Signal8 AI, Inc.

Use of the hosted Signal8 API and data is additionally governed by the Signal8 Terms of Service.

Signal8 Academy (free, no API key)

The free Signal8 Academy (plain-English guides to dilution, SEC filings, market structure and using Signal8, plus a glossary) is available to MCP clients without a Signal8 Pro API key: the local stdio server answers these even when SIGNAL8_API_KEY is unset. (The hosted endpoint still asks every tool call to sign in, as for any other tool.)

KindNameWhat it returns
Toolsearch_learn_guidesGuides matching a keyword query (optionally one track): title, description, URL
Toolget_learn_guideOne guide (track + slug) as Markdown, with related guides and glossary terms
Tooldefine_termA glossary entry by slug, term or alias: short + long definition
Resourcesignal8://learnIndex of every track, guide and glossary term
Resourcesignal8://learn/guides/{track}/{slug}A guide as Markdown
Resourcesignal8://learn/glossary/{slug}A glossary term as Markdown
Promptexplain_dilutionReads a company's dilution data (Pro tools) and explains each figure with the Academy guides

Tracks: dilution, filings, market-structure, signal8. Content is fetched from GET /api/v1/public/learn/*, so guide updates appear without a package release. Links in the Markdown point at signal8.ai.

来源:README.md,提交 6b4d047

工具

108

search_companies

Search Companies

Search for companies by name or ticker symbol in the Signal8 database. Returns matching companies with their ticker, name, CIK, and exchange. Use this as the first step to find a company before calling other tools.

输入参数limitquery必填

get_company_profile

Get Company Profile

Get an enriched company profile by ticker symbol. Returns CIK, exchange, sector, industry, market cap, employee count, description, and other fundamental data. This is a lightweight lookup -- use this when you only need basic company info rather than the full bundle. Always includes halted/haltCode/haltedAt trading-halt status (false/null when trading normally); a halted-but-listed ticker reports delisted:false. `sharesOutstanding` is DATED: `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` ("stated" = the issuer's statement date; "checked" = when it was last confirmed against a vendor; "none" = date not recorded) and a vendor-free `sharesOutstandingSource`. Quote the date with the count; null is NOT MEASURED, never zero.

输入参数ticker必填

get_quote

Get Stock Quote

Get the current stock quote for a company including price, volume, change, market cap, and other real-time market data. Use this when a user asks about a stock's current price or trading activity. Always includes halted/haltCode/haltReason/haltedAt/resumptionAt trading-halt fields (false/null when trading normally); a halted ticker returns the last-known quote instead of an error, or currentPrice:null + halted:true when nothing is recoverable. marketCap is the live price × the SEC-derived share count; when that count is unavailable it is null with marketCapWithheldReason set — NOT MEASURED, never "no market cap" and never $0. The count itself rides as `sharesOutstanding` with `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` ("stated" = the issuer's statement date; "checked" = when it was last confirmed against a vendor; "none" = date not recorded) and a vendor-free `sharesOutstandingSource` — quote the date with the count. When no MEASURED count exists, `sharesOutstanding` and `marketCap` are a BEST ESTIMATE (the newest dated filed or reference count, moved onto today's split basis): `sharesOutstandingEstimated: true`, `sharesOutstandingEstimateKind` ("stated_as_of" = the ISSUER's last stated count, a dated point; the filings record later issuances LISTED in `statedAsOf.events`, not added — "at_least" is the retired name of the same state) and `marketCapEstimated: true` with `marketCapAsOf` (the count's date). Render a stated_as_of count WITH its date and its events ("2,357,498 as of 2026-10-08 · plus an offering closed 2026-10-09 whose share count is not stated"); never as a bound, never as today's count.

输入参数ticker必填

get_market_metrics

Get Market Metrics

Get computed market metrics for a company including volume averages, volatility, SMAs, and trend direction. Use when analyzing trading patterns or technical indicators beyond the basic quote.

输入参数ticker必填

get_short_interest

Get Short Interest

Get short interest data for a company including short volume, short ratio, days to cover, and short percent of float. Use when analyzing bearish sentiment or potential short squeeze setups. 🔴 "shortInterestPercent" null ALWAYS carries "shortInterestPercentReason" (since 2026-10-04): "float_not_point" = the float on record is a snapshot BOUND or ESTIMATE (<= / >= / ~), and a percent-of-float is never struck off a bound — do NOT divide "shortInterest" by a ceiling, floor or estimate from get_float yourself; "float_unavailable" = no float of any kind on record; "short_pct_of_float_unreconciled" = a point float existed but the ratio was implausible or the split basis could not be resolved; "float_class_scope_mismatch" = the float on record POOLS more than one separately listed share class (e.g. Class A + Class D) while short interest is reported for this symbol's class only — do NOT divide "shortInterest" by get_float's figure yourself for that ticker. A null percent is NOT MEASURED, never 0%.

输入参数ticker必填

get_float

Get Float Data

Get float data for a company: floatShares, floatDefinition, as-of date, and — when the headline float is WITHHELD — the bounds and labelled stand-ins that replace it. Use when analyzing share supply. The share count the float was judged against (`basisSharesOutstanding`) is DATED: `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` ("stated" / "checked" / "none" = date not recorded) and a vendor-free `sharesOutstandingSource`; never present the count without its date. CARDINAL RULE: null / absent / withheld means NOT MEASURED — never "no float", never "no restricted shares", never zero. A numeric 0 is a MEASURED zero and passes a null check, so decide from the reason/marker field ("floatWithheldReason", "restrictedBlockCount", "provenance", "direction"), never from the value alone. IMPORTANT: check "floatDefinition" to know which float you are reading — "tradeable" (shares outstanding minus affiliates minus restricted/unregistered blocks: what can actually reach the tape; used on filing-derived dilution-snapshot tickers), "non_affiliate" (the SEC I.B.6 figure, which INCLUDES restricted shares held by non-affiliates — not what a trader means by float), "non_affiliate_estimate" (approximated from ownership filings), or "free_float" (vendor methodology). TODAY "floatDefinition" and "source" are only present on dilution-snapshot results: a vendor-sourced float arrives with neither (just floatShares, asOfDate, floatEstimated) because vendors are not named — read an ABSENT floatDefinition as "not a filing-derived tradeable float" and do not assume it is tradeable. On snapshot tickers "nonAffiliateFloatShares" carries the SEC I.B.6 figure separately — it is the ONLY correct input to baby-shelf / I.B.6 shelf-capacity math; never use the tradeable float there, and never present the non-affiliate figure as tradeable supply. floatShares:null with "floatWithheldReason" set ("restricted_blocks_unnetted" | "stated_figure_impossible" | "affiliate_basis_stale" | "affiliate_figure

输入参数ticker必填

get_float_history

Get Float History

Get the POINT-IN-TIME float history for a company — one sample per trade date (float shares, shares outstanding, and the source the float came from). Use to answer "what was the float on date X" or to see float expand across a dilution event, which the latest-only get_float cannot show. IMPORTANT: this series is FORWARD-ONLY — it began accumulating in mid-2026 and is NOT backfilled, so early/absent history is expected and an empty rows array is a normal result, not an error or a delisted company. Each row carries "source" ("computed" | "sec_10k" or a market-data vendor tier) because float quality varies by provider — weigh rows accordingly rather than treating all sources as equal. Charged per your API tier.

输入参数daysticker必填

get_historical_prices

Get Historical Stock Prices

Get historical OHLCV price candles for a stock. Supports daily, weekly, and monthly resolutions. Use period shorthand (1M, 3M, 6M, 1Y, 5Y, ALL) or explicit from/to UNIX timestamps. Default is 1 year of daily candles. Use this to compute price returns, chart price history, or analyze volume trends over time.

输入参数tofromperiodticker必填resolution

get_stock_price_change

Get Stock Price Change

Get percentage price changes for a stock across multiple timeframes: 1D, 5D, 1M, 3M, 6M, YTD, 1Y, 3Y, 5Y, 10Y, and MAX. Use this for quick "how much is it up/down" answers without fetching full candle data.

输入参数ticker必填

get_financials

Get Financial Statements

Get income statement, balance sheet, and cash flow data for a company. Supports annual, quarterly, and trailing-twelve-month views. Use when analyzing revenue, profitability, debt, or cash position.

输入参数typelimitticker必填

get_earnings

Get Earnings History

Get historical earnings data for a company including EPS actual vs estimate, revenue actual vs estimate, and surprise percentages. Use when analyzing earnings beats/misses or upcoming earnings expectations.

输入参数limitticker必填

get_executives

Get Company Executives

Get key executives and officers of a company including name, title, compensation, and tenure. Use when researching company leadership or management quality.

输入参数ticker必填

get_news

Get Company News

Get recent news articles, press releases and AI-analysed SEC filings for a company. Use when researching recent developments, catalysts, or sentiment drivers. Filing rows (category "sec_filing") are event-bearing forms only (8-K, 6-K, 424B prospectus supplements, S-1/F-1, 10-K/10-Q/20-F, SC 13D, proxies, delisting notices; never Form 3/4/5, 13G or bank-note 424B2) and carry formType + accessionNumber; a filing that repeats a press release is omitted in favour of the release. For a small foreign issuer that files its news as 6-Ks, the filing IS the news. Set pressReleasesOnly to return only official company press releases (no filings).

输入参数limitticker必填pressReleasesOnly

get_analyst_consensus

Get Analyst Consensus

Get analyst ratings consensus for a company including average target price, number of analysts, buy/hold/sell breakdown, and consensus recommendation. Use when evaluating Wall Street sentiment or price targets.

输入参数ticker必填

get_analyst_estimates

Get Analyst Estimates

Get forward analyst estimates for a company including EPS, revenue, EBITDA, and net income (low/high/avg) with analyst counts. Supports annual and quarterly periods. Use when analyzing forward earnings expectations or revenue forecasts.

输入参数limitperiodticker必填

get_clinical_trials

Get Clinical Trials

Get clinical trial data for a biotech/pharma company including trial phase, status, conditions, and interventions. Use when analyzing a biotech company's pipeline or upcoming catalyst events.

输入参数limitticker必填

search_clinical_trials

Search Clinical Trials

Search clinical trials market-wide (cross-company). Distinct from get_clinical_trials, which is scoped to a single ticker. Filter by phase, indication, sponsor, status, and date window; sort and paginate the results.

输入参数tofromsortlimitorderphaseoffsetstatussponsordateFieldindication

get_top_movers

Get Top Market Movers

Top stock movers — gainers (largest % up), losers (largest % down), or active (highest volume). Optional session window (premarket / regular / afterhours; regular default; not supported for active). Optional date (YYYY-MM-DD) returns a PAST trade date's gainers/losers on a historical daily close-to-close basis (computed from split-adjusted daily bars, NOT intraday) — session is rejected when date is set, date is not supported for direction=active, and a non-trade date (weekend/holiday) returns an empty list (not an error). Penny-stock artifacts are filtered by default — set includePennyStocks to include sub-$1 movers.

输入参数datelimitsessiondirection必填includePennyStocks

get_market_news

Get Market News (Top Stories)

Get the latest market-wide news across ALL tickers, most recent first. Every item is significance-classified at ingest (critical | major | standard); the default filter of critical,major is the "top stories" view. Use for "what is happening in the market right now" — for news about one company, use get_news with a ticker instead. Requires the /news/latest public endpoint (added 2026-07-29; 404 until that backend deploy).

输入参数limitsignificance

get_market_breadth

Get Market Breadth

Get market breadth aggregates (advance/decline counts and ratio, percent of constituents above their 50DMA and 200DMA, and counts of new 52-week highs/lows) for a chosen universe (sp500, ndx, or all). Use to add market-state context to commentary, tweets, or daily summaries.

输入参数universe

get_trading_halts

Get Active Trading Halts

List currently-active trading halts across NASDAQ/NYSE/AMEX (from the consolidated Nasdaq Trader halt feed). Each halt includes ticker, market, haltCode (T1/T2/T12/LUDP/H10/...), human-readable reason, haltedAt, and the scheduled resumptionAt when one is set. An EMPTY list is a normal state (no active halts right now), not an error. Halts are tradeable catalysts — use this to discover halted names, then get_quote for the frozen last price.

无需输入参数。

get_earnings_calendar

Get Earnings Calendar

Get upcoming and recent earnings releases between two dates. Optionally restrict to a list of tickers. Returns ticker, date, time (BMO/AMC), EPS estimate, and revenue estimate when available. Supports market cap filtering to focus on large-cap or small-cap earnings only.

输入参数to必填from必填tickersmaxMarketCapminMarketCap

get_economic_calendar

Get Economic Calendar

Get scheduled macro/economic events (CPI, FOMC, jobs reports, GDP, etc.) between two dates. Optionally filter to a single country (ISO-3166 alpha-2, e.g. "US"). Defaults to US when omitted.

输入参数to必填from必填country

get_filing_calendar

Get SEC Filing Calendar

Get the forward-looking 10-K / 10-Q SEC filing-deadline calendar within a date window. Optionally restrict to a universe (sp500/ndx/dji/all) and/or a list of form types (default both 10-K and 10-Q).

输入参数tofromuniverseformTypes

get_post_earnings_movers

Get Post-Earnings Movers

Get stocks that moved significantly after earnings reports on a given date. Returns pre-computed price changes with earnings surprise data in a single call — no need to chain get_earnings_calendar + get_historical_prices + get_quote per ticker. Includes preEarningsClose, currentPrice, changePct, EPS/revenue actuals vs estimates, and surprise percentages. Filter by minimum absolute % change threshold.

输入参数date必填limitminChangePct

get_recent_material_filings

Get Recent Material Filings

Recent material 8-K filings (last 7 days) for the constituents of an index universe. By default returns the high-signal 8-K item codes (material agreements, M&A, executive changes, restructurings, etc.); pass `items` to filter to specific 8-K item codes. Choose the universe with `universe`.

输入参数itemslimituniverse

screen_sec_filings

Screen SEC Filings

Screen SEC filings across all companies with company-level filters (sector, industry, market cap, exchange) combined with filing-level filters (form type, date range). Returns filings enriched with company metadata: ticker, sector, industry, exchange, market cap, and price. Use this to answer questions like "find all S-1 filings from biotech companies under $500M market cap" or "show me recent 8-K filings from Technology sector companies". This is the most powerful filing DISCOVERY tool for filings — use search_sec_filings only when you already know the specific CIK. This tool returns FILINGS, not a company universe: to enumerate or COUNT companies by market cap / price / float (e.g. "find all companies under $300M market cap"), use screen_companies instead — it supports minMarketCapComputed / maxMarketCapComputed and returns a real total COUNT. Searches only the 500 largest matching companies by market cap (narrow the filters to reach smaller ones); for float, price, company-type, foreign-issuer or recent-IPO filters, full-text queries, or 8-K item codes, use search_sec_filings with its company filters. Coverage: Signal8's archive of SEC EDGAR filings in the archive's held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), updated through the day. The archive only holds filings from its `archiveFrom` date; before that it holds only a scatter (well under 1% of most years), so ABSENCE BEFORE archiveFrom IS NOT EVIDENCE a filing was never filed — check SEC EDGAR for earlier periods. Some rows are record-only (bodyStored: false — metadata from the EDGAR index with no document body), so their text cannot be read here; open them at their sec.gov URL.

输入参数pagedateTosectorsortBydateFromexchangeindustrypageSizeformTypessortOrdermaxMarketCapminMarketCap

search_sec_filings

Search SEC Filings

Search and list SEC filings by company (CIK), form type, date range, 8-K item codes and excluded forms, optionally with a full-text query over filing bodies, and optionally by COMPANY FACTS (market cap, float, price, sector, industry, exchange, company type, foreign issuer, recent IPO). Returns rows with `id` (the filingId for get_filing_document / get_filing_exhibits), cik, company_name, accession_number, form_type, filing_date, acceptedAt, primaryDocument, bodyStored and itemNumbers, plus `pagination` with `total`, `totalRelation` ("eq" exact; "gte" a lower bound when the count was cut at 10,000 — then `totalEstimate`, when present, is "about N"), `hasMore` and `nextCursor`. With `q`, unfiltered rows also carry `rank` and a `snippet`. Coverage: Signal8's archive of SEC EDGAR filings in the archive's held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), updated through the day. The archive only holds filings from its `archiveFrom` date; before that it holds only a scatter (well under 1% of most years), so ABSENCE BEFORE archiveFrom IS NOT EVIDENCE a filing was never filed — check SEC EDGAR for earlier periods. Some rows are record-only (bodyStored: false — metadata from the EDGAR index with no document body), so their text cannot be read here; open them at their sec.gov URL. Full-text `q`: Query syntax: unquoted words must ALL appear (any order, any distance); "quoted phrase" = exact wording; OR between alternatives (merger OR acquisition); -word or -"phrase" to exclude; w1 NEAR/10 w2 (also NEAR(10), or bare NEAR = within 10) = words close together; word* = prefix of 4+ letters (dilut* matches dilution, dilutive); $AAPL or a capitalised ticker scopes to that company; a form code (8-K, 10-Q, S-1), "item 5.02" / "8-K 1.05" and a bare year (2024) scope to that form / 8-K item / year. The archive's reading of the query (tickers/companies, forms, items, years, synonym expansions such as buybac

输入参数qcikspagesortitemsmatchcursordateTofacetssectionsectorsdateFrom另有 17 个

get_filing_documents

Get Filing Documents

List EVERY document in one SEC filing by accession number — the primary document, each exhibit, XML and XBRL files, graphics — with seq, type (e.g. "8-K", "EX-99.1"), description, size in bytes, `stored` and `secUrl`. Also returns the filing's cik, companyName, formType, filingDate, acceptedAt, bodyStored, primaryDocument, indexUrl, and `filingId`. HOW TO READ A DOCUMENT: if it has an `exhibitId`, call get_exhibit_content with that id; for the whole submission text call get_filing_document with `filingId`. `exhibitId: null` means the document has no readable text row here (XML/XBRL/graphics, or text not held) — open its `secUrl`. When `readableIdsResolved` is false the id lookup failed and exhibitId is omitted (not "none"); get_filing_exhibits(filingId) lists them. `stored: false` means Signal8 holds the filing record but not that document's body — it exists on EDGAR at `secUrl`. A filing not held in the archive returns a not-found error; its documents are still on EDGAR. Coverage: Signal8's archive of SEC EDGAR filings in the archive's held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), updated through the day. The archive only holds filings from its `archiveFrom` date; before that it holds only a scatter (well under 1% of most years), so ABSENCE BEFORE archiveFrom IS NOT EVIDENCE a filing was never filed — check SEC EDGAR for earlier periods. Some rows are record-only (bodyStored: false — metadata from the EDGAR index with no document body), so their text cannot be read here; open them at their sec.gov URL.

输入参数accessionNumber必填

get_filing_structured

Get Structured Filing Data

Parsed, machine-readable data from an ownership or holdings filing, by accession number. `kind` says which: "ownership" (Form 3/4/5 and amendments) — issuer, reporting owners with relationship (director, officer title, 10% owner, or the filer's own "Other" text), and `parsed.transactions` (one row per transaction: table nonDerivative/derivative, securityTitle, transactionDate, code, acquiredDisposed A/D, shares, pricePerShare, sharesOwnedAfter, ownership D/I, and for derivatives exercisePrice, exerciseDate, expirationDate, underlyingTitle, underlyingShares); "thirteen_f" (13F-HR) — period, holdings with cusip, issuer, shares/principal, put/call, discretion and voting; "schedule13" (XML SCHEDULE 13D/G, filed 2025 onward) — reporting persons, percent of class, items. 13F VALUES: `valueThousands` is the raw filed number; the SEC changed its unit from thousands of dollars to whole dollars for filings on/after 2023-01-03, so use `valueUsd` / `totalMarketValueUsd` (normalised to dollars; null when the unit cannot be determined) and `valueUnit`. Holdings are capped at holdingsLimit (default 200) — `holdingsTotal` is the full count and `holdingsTruncated` says whether rows were cut. NULL MEANS NOT STATED IN THE FILING, never zero (e.g. a gift or grant with no price has pricePerShare null; Form 4 `directShares` is null on a derivative-only filing). `parsed.transactions` ABSENT (not empty) means the transaction table could not be read — the totals still apply. `parsed: null` on a 13F means the filing has no information table (e.g. 13F-NT), not zero holdings. Unsupported forms, pre-2025 Schedule 13D/G (not XML), and filings not in the archive return a not-found error whose `details.reason` says which — read those with get_filing_document instead. Coverage: Signal8's archive of SEC EDGAR filings in the archive's held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), updated through the day. The archive

输入参数holdingsLimitaccessionNumber必填

get_filing_document

Get Filing Document

Get the full raw text/HTML content of an SEC filing by its internal filing ID (the `id` on search_sec_filings rows, `filingId` from lookup_accession_number or get_filing_documents). Returns the complete filing document which can be very large (10-K filings can be 1MB+). Use the maxLength parameter to truncate content for previews. The response includes company_name, form_type, filing_date, cik, and accession_number alongside the content. Record-only filings (bodyStored: false) have no body here — open them on sec.gov. To read one exhibit rather than the whole submission, use get_filing_documents or get_filing_exhibits, then get_exhibit_content. For Form 3/4/5, 13F and SCHEDULE 13D/G, get_filing_structured returns parsed fields instead of XML. Coverage: Signal8's archive of SEC EDGAR filings in the archive's held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), updated through the day. The archive only holds filings from its `archiveFrom` date; before that it holds only a scatter (well under 1% of most years), so ABSENCE BEFORE archiveFrom IS NOT EVIDENCE a filing was never filed — check SEC EDGAR for earlier periods. Some rows are record-only (bodyStored: false — metadata from the EDGAR index with no document body), so their text cannot be read here; open them at their sec.gov URL.

输入参数filingId必填maxLength

get_filing_exhibits

Get Filing Exhibits

List the readable exhibits (individual documents with stored text) within an SEC filing, by internal filing ID. Returns each exhibit's `id`, exhibit type, description, content size and sec_url. Use the `id` with get_exhibit_content. Excludes XML/XBRL. For the COMPLETE document list of a filing by accession number (including files with no stored text), use get_filing_documents.

输入参数filingId必填

get_exhibit_content

Get Exhibit Content

Get the full text/HTML content of a single exhibit from an SEC filing. Returns the exhibit text along with exhibit_type, description, company_name, accession_number, and form_type. Use the maxLength parameter to truncate large exhibits. Find exhibit IDs with get_filing_documents (`exhibitId`, by accession number) or get_filing_exhibits (by filing ID), or from search_filing_text matches (`exhibit_id`).

输入参数id必填maxLength

search_filing_text

Search Filing Text

Full-text search across SEC filing content that returns the MATCHING PASSAGE: one match per filing, each with the exhibit it was found in (`exhibit_id`, `exhibit_type`) and the snippet with context. Query syntax: unquoted words must ALL appear (any order, any distance); "quoted phrase" = exact wording; OR between alternatives (merger OR acquisition); -word or -"phrase" to exclude; w1 NEAR/10 w2 (also NEAR(10), or bare NEAR = within 10) = words close together; word* = prefix of 4+ letters (dilut* matches dilution, dilutive); $AAPL or a capitalised ticker scopes to that company; a form code (8-K, 10-Q, S-1), "item 5.02" / "8-K 1.05" and a bare year (2024) scope to that form / 8-K item / year. Unquoted words match anywhere in the filing, so quote multi-word phrases. When the archive states how it read the query it is in meta.understanding. Best for locating specific clauses ("change of control", "anti-dilution", "right of first refusal") and for getting the excerpt for a known filing (pass accessionNumber or filingId). Use search_sec_filings with `q` instead when you need filing-level paging (cursor), totals, date ranges, 8-K item codes, excluded forms, or company filters. Optionally filter by company (CIK), filing, accession number, or form type, restrict matching to sections (section=risk_factors, mdna, ex99 …; confirmed by meta.sections, otherwise meta.unsupported says the whole filing was searched) and filter by exhibit type (exhibitTypes=EX-10). Coverage: Signal8's archive of SEC EDGAR filings in the archive's held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), updated through the day. The archive only holds filings from its `archiveFrom` date; before that it holds only a scatter (well under 1% of most years), so ABSENCE BEFORE archiveFrom IS NOT EVIDENCE a filing was never filed — check SEC EDGAR for earlier periods. Some rows are record-only (bodyStored: false — metadata from the EDG

输入参数ciksortlimitmatchfacetspattern必填sectionfilingIdformTypeunderstandexhibitTypessnippetLength另有 2 个

lookup_accession_number

Lookup Accession Number

Look up a filing or exhibit by its SEC accession number. Supports both dashed format (e.g., "0001193125-22-010026") and compact 18-digit format. Returns filing metadata including company name, form type, filing date, exhibit count and `filingId` (for get_filing_document / get_filing_exhibits). If the filing is held in Signal8's archive (isInDatabase: true) its content can be read here; if it is only found on SEC EDGAR the response has isInDatabase: false and basic metadata only. For the full document list use get_filing_documents.

输入参数accessionNumber必填

screen_sec_filings_performance

Screen SEC Filings Performance

Analyze stock price performance after SEC filings. Returns individual filing records with pre-computed price returns at +1 day, +3 days, +7 days, and +30 days after the filing date, plus aggregate statistics (average, median, % negative, best, worst) across all matching filings. Combine company-level filters (sector, industry, market cap, exchange) with filing filters (form type, date range). Use this to answer questions like "how do biotech stocks perform after S-1 filings?" or "what is the average 7-day return after 8-K filings from companies under $500M market cap?".

输入参数pagedateTosectorsortBydateFromexchangeindustrypageSizeformTypessortOrdermaxMarketCapminMarketCap

get_insiders

Get Insider Trading Intelligence

Get insider trading discovery data for a company. Includes cluster buying detection, entity-centric insider model, and Form 4 cross-referencing. Shows insider transactions with buying/selling patterns that may signal upcoming corporate actions. Each insider includes a transactionBreakdown by SEC code (P=Purchase, S=Sale, F=Tax withholding, M=Exercise, G=Gift, A=Award), netSharesSold12m (code S only, excludes tax withholding), and isPrimarilyTaxWithholding flag to distinguish routine RSU vesting from discretionary selling. Supports pagination with limit/offset.

输入参数limitoffsetticker必填

get_ownership

Get Comprehensive Ownership

Get unified ownership breakdown for a company combining Form 4 insider holdings, 13F institutional holdings, and 13D/13G activist positions. All entities are resolved across the three SEC form types into a single view with counterparty resolution. The allHolders array is paginated via limit/offset (default 100). Aggregate stats (institutional/insider/beneficial totals and percentages, plus the `retail` residual) are always included in full. `retail` is the UNATTRIBUTED residual: shares no filing accounts for, which includes recent offering buyers and acquisition holders who have not filed as well as retail investors — an upper bound on retail, never a retail count. When `retail.reason` is `filed_exceeds_outstanding` the residual is withheld (null) because the counted filings exceed the shares outstanding. 🔴 A bucket (`institutional` / `insider` / `beneficial`) whose shares exceed the shares outstanding by more than a 2% timing tolerance has its `percentOfOutstanding` WITHHELD — null, with `percentWithheldReason: "ownership_exceeds_outstanding"` — and its `totalShares` still published: the percent would not be a measurement (filings on another share basis such as ordinary shares against an ADS count, another class reported under this one, shares lent and reported by both lender and buyer, or filings dated before a buyback or redemption). Report the share figure and the reason; NEVER present such a bucket as 100%, as 0%, or as any percent. When any bucket is withheld, `retail.reason` is `ownership_exceeds_outstanding` and `filedSumPercent` is absent. A null percent with NO `percentWithheldReason` means no share count was available — not measured for a different reason. `sharesOutstanding` is the denominator of every percentage and is DATED: `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` ("stated" = the issuer's statement date; "checked" = when the figure was last confirmed against a vendor; "none" = date not recorded) and `sharesOutstandingSource` (a vendor-fr

输入参数limitoffsetticker必填

get_institutions

Get Institutional Holders

Get institutional holders (13F filers) for a company. Returns institutions that hold positions in this stock based on SEC 13F filings, including shares held, portfolio weight, and filing dates. Useful for understanding institutional ownership concentration.

输入参数limitoffsetticker必填

get_institution_detail

Get Institution Detail

Get detailed information about a specific institutional investor by their SEC CIK number. Returns the institution name, total AUM, number of holdings, and filing history. Use get_institutions first to find the CIK for an institution.

输入参数cik必填

get_institution_holdings

Get Institution Holdings

Get the full portfolio holdings for a specific institution by CIK. Returns all positions from their latest 13F filing with shares, value, and portfolio weight. Supports pagination for institutions with large portfolios.

输入参数cik必填limitoffset

get_institution_position_changes

Get Institution Position Changes

Diff two quarterly 13F snapshots for an institution. Compares the latest filing against the prior quarter and returns per-position changes: new positions, increased, decreased, and exited. Sorted by |changePercent| descending so the biggest moves surface first. Much more efficient than calling get_institution_holdings twice and diffing client-side — the server computes everything in a single SQL query.

输入参数cik必填limitoffset

get_institution_activity

Get Institution Activity

Get an institution's position changes over recent 13F periods by CIK. Reads the number of trailing periods to include.

输入参数cik必填periods

get_institution_filings

Get Institution Filings

Get the list of 13F filings for an institution by CIK, with pagination.

输入参数cik必填limitoffset

get_institution_derivatives

Get Institution Derivatives

Get an institution's reported PUT/CALL derivative positions by CIK (13F options), with pagination and sorting.

输入参数cik必填limitoffsetperiodsortBysortOrder

get_institution_portfolio_analytics

Get Institution Portfolio Analytics

Get sector allocation and top holdings analytics for an institution's portfolio by CIK.

输入参数cik必填

get_institutions_leaderboards

Get Institution Leaderboards

Two market-wide institution leaderboards in one call: topByAum (largest holders by assets under management, name-deduped) and mostActive (highest 13F position-change volume). No CIK required. For the full paginated AUM list use get_institution_top_aum.

输入参数limit

get_insider_transactions

Get Insider Transactions

Get detailed insider transaction history for a company from Form 4 filings. Returns individual buy/sell transactions with insider name, title, shares, price, and transaction codes. Supports pagination for companies with extensive insider activity. Filter by year/month to narrow results, or use transactionCode to find only purchases (P), sales (S), etc. Useful for identifying "first insider buy since X" patterns. IMPORTANT: each row's sharesOwnedFollowing is the holding on THAT row's ownership line only (securityTitle + directOrIndirect + natureOfOwnership), NOT the insider's total position — insiders often report several lines. holdingsByInsider lists every line with its as-of filing; its sumOfReportedLines is not beneficial ownership (lines can be stale). Never compute a "% of position" from one row; use 13D/13G totals, or omit the percentage. A trade re-reported in a later filing is listed once.

输入参数yearlimitmonthoffsetticker必填transactionCode

get_insider_cluster_buys

Get Insider Cluster Buys

Detect cluster buying patterns for a company. Identifies periods where 3+ distinct insiders purchased shares within a 14-day window -- a strong bullish signal that often precedes positive corporate announcements or price appreciation.

输入参数ticker必填

get_institution_top_aum

Get Top Institutions by AUM

Discover top institutional holders across the entire company universe ranked by assets under management (AUM). Unlike get_ownership which shows institutions for a single company, this tool searches across all companies to find the largest institutional players. Optionally set a minimum AUM. Useful for identifying smart money flows and major institutional positioning trends.

输入参数limitminAumoffset

search_institutions

Search Institutions by Name

Search institutional investors (13F filers) by name. Returns matching institutions with CIK, name, AUM, holdings count, and latest filing period. Use this to find a specific fund or investment manager when you know part of their name (e.g., "Vanguard", "BlackRock", "Citadel"). Results are ranked by AUM descending.

输入参数q必填limitoffset

get_insider_cross_company

Get Cross-Company Insider Trading

Discover insider trading patterns across multiple companies. Unlike get_insiders which shows insider activity for a single ticker, this tool searches the entire universe to find insiders active across multiple companies, cluster buying patterns, and large transactions. Filter by insider name, transaction type, or date range. Cluster buying is computed only for purchases (transactionType P, the default). Useful for detecting coordinated insider activity, cross-company insider networks, and market-wide buying/selling trends.

输入参数limitoffsetendDatestartDateinsiderNametransactionType

get_compliance

Get Compliance Evaluation

Get full compliance rules evaluation for a company. Runs Nasdaq/NYSE deficiency detection, bid price tracking, and delinquent filing detection. Returns a comprehensive compliance picture combining SEC filing data, market data, and exchange rules. This is the most thorough compliance check available.

输入参数ticker必填

screen_companies

Screen Companies

Since 2026-10-03 the float column ALWAYS carries the dilution snapshot's own figure when the snapshot has one: "float" is the measured POINT float (null on a withheld snapshot row), and such a row then carries "floatEstimate" (shares) + "floatEstimateBound" ("point" / "ceiling" / "floor") + "floatEstimateBasis" (the working). RENDERING (2026-10-18): a "point" is the plain number with its basis as the caveat; a "ceiling" / "floor" is a BOUND, not a figure — write "float not stated (at most / at least 7,953,957)", never the bare number and never a "~" / "<=" / ">=" glyph. minFloat / maxFloat and the computed_float sort compare the figure's VALUE (COALESCE of the two), so a bounded row is kept; a row with neither is NOT MEASURED, never 0. 🔴 Never feed floatEstimate into a market cap, a percent-of-float or a short-interest ratio — a bound is not a point. Screen companies by price range, volume, cash runway, float, shares outstanding (each row's `shares_outstanding` is DATED by `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` (stated / checked / none = date not recorded) and a vendor-free `sharesOutstandingSource`; never present the count without its date), market cap, industry, listing exchange (NASDAQ/NYSE/AMEX), listing market (market="otc" / "exchange" — the reliable OTC test; the exchange label is inconsistent on OTC rows), float data source, TTM dividend yield and snapshot cash (minCash / maxCash). CASH RUNWAY: a null cash_runway_months carries cashRunwayReason saying why. "estimate_would_be_negative" means the last cash figure rolled forward by the burn rate is below zero today — ESTIMATED exhausted, not a reported zero balance (cashRunwayAsOf is the cash figure's date). Such rows have no months, so maxCashRunway drops them unless includeRunwayExhausted=true. Any other reason, or a null reason, is NOT a runway claim. CASH: estimatedCurrentCash (with estimatedCashAsOf) is the dilution snapshot's cash PROJECTION in USD, present only for snapshot-covered compan

输入参数limitmarketoffsetsortBycountrymaxCashminCashexchangeindustrymaxFloatmaxPriceminFloat另有 15 个

get_premarket_scan_history

Get Premarket Scan History

Historical MARKET-WIDE premarket scan for a single PAST trade date. For the requested ET date, returns every ticker with that day's premarket (default) session volume and its relative volume (RVOL) vs the trailing 30-day same-session baseline — the SAME RVOL math as get_rvol_history, but across the whole market for one date instead of one ticker across many dates. Filter by RVOL, market cap, price, and float to backtest screens like "sub-$500M tickers with premarket RVOL > 5 on 2026-07-20" in one call. Rows are ranked by RVOL descending. A future or non-trading date returns an empty list with an explanatory reason (not an error). Every row also reports "baselineState" (why its RVOL is or is not null), "advRatio" (volume ÷ trailing 30-session average FULL-DAY volume) and "advDays"; set includeNoHistory=true to surface high-volume tickers that have no computable RVOL at all, such as first-session new listings. Each row ALSO publishes the RVOL denominator itself as "baselineVolume" (shares) plus a "baselineThin" flag (true when that denominator is under 200 shares): a 90x RVOL off a 1-share baseline is arithmetically correct and analytically worthless. That is almost entirely an asOfTime-basis effect (0.1% of full-session rows vs ~38% at the 04:30 cutoff, falling to ~9% by 09:15) and it skews to LIQUID LARGE CAPS that simply do not trade early, NOT to microcaps. Screen it out with minBaselineVolume and/or minSessionVolume. The response "meta" also reports asOfApplied / asOfIgnored / asOfIgnoredReason, so a time-of-day request that could not be honoured is visible instead of quietly returning full-session numbers. A price / market-cap / float filter can only be applied to a ticker company_screener_data holds a value for, so a just-renamed or just-listed symbol cannot be rated against it. Those rows are NEVER silently dropped: "meta.unscreened" always reports their count, the filter families involved and the tickers, and includeUnscreened=true returns them in "rows" tagg

输入参数date必填limitoffsetminRvolsessionasOfTimemaxFloatmaxPriceminFloatminPricebaselineDaysmaxMarketCap另有 5 个

get_split_history

Get Stock Split History

Get stock split history for a company including forward and reverse splits with dates, ratios, type classification, and cumulative 2-year reverse split ratio. Relevant for NASDAQ/NYSE minimum bid-price compliance (1:250 cumulative reverse-split cap). IMPORTANT: `cumulativeReverseSplitRatio2yr` is null when it CANNOT BE STATED, which is NOT the same as no reverse splits — read `cumulativeWithheldReason` to tell them apart. `unconfirmed_splits_in_window` means at least one in-window reverse split is evidenced by only one source, so no cumulative is defensible: the confirmed splits alone would understate it, and understating a cumulative can put an issuer that breaches the 1:250 cap under it. Each row also carries `confirmed`; a `confirmed: false` split appears only in the announcement calendar, which retains every announcement and retracts none, so it is usually an amended or superseded announcement and occasionally a real split the effected-splits ledger missed. Both are returned. `ratioDisplay` and `type` are likewise null for a ratio whose exact factor cannot be determined.

输入参数ticker必填

get_etf_bundle

Get ETF Bundle

Get aggregated ETF data in a single call. Combines multiple data sources (profile, holdings, sector weightings, country exposure, performance, news, analyst coverage, and comparables) into one response. Each data type is cached independently. Specify which types to include or omit to get above-the-fold defaults (profile, stock-summary, holdings, sectors).

输入参数ticker必填include

get_politicians

Get Politicians

List and search congressional politicians who have STOCK Act trading disclosures. Filter by party (D/R/I), state, or search by name. Returns paginated results with trade counts, last trade date, and net buy/sell direction over the trailing 12 months.

输入参数limitpartystateoffsetsearchsortBysortOrder

get_politician_detail

Get Politician Detail

Get the full profile for a politician including party, state, chamber, trade statistics, filing delay metrics, most traded sector, and their 10 most recent transactions. Use get_politicians first to find the slug (e.g. "sen-nancy-pelosi").

输入参数slug必填

get_politician_transactions

Get Politician Transactions

Get paginated trade history for a specific politician. Returns individual STOCK Act disclosures with ticker, transaction type, amount range, filing delay, and late filing flag. Includes a summary with total buys/sells and net value.

输入参数slug必填typelimitoffsetsortBysortOrder

get_politician_activity

Get Politician Activity

Get activity metrics for a politician broken down by period (30d, 90d, 1y, all-time). Includes buy/sell counts and values per period, most traded tickers (top 10), and transaction type breakdown. Useful for analyzing trading patterns over time.

输入参数slug必填

get_politicians_most_active

Get Most Active Politicians

Discover the most active congressional traders ranked by trade count within a lookback period. Returns each politician with trade count, tickers traded, buy/sell values, and top tickers. Useful for identifying the most prolific political traders.

输入参数limitperiod

get_politician_recent_trades

Get Recent Politician Trades

Get recent STOCK Act trades across all politicians. Each trade includes the senator info, ticker, transaction type, amount, and filing delay. Filter by direction (buy/sell) and lookback period. Useful for monitoring current congressional trading activity.

输入参数dayslimitoffsetdirection

get_politician_disclosures

Get Politician Disclosures (Feed)

Per-DISCLOSURE feed of politician trades: one item per congressional STOCK Act periodic transaction report (PTR) or executive-branch OGE Form 278-T that contains at least one trade whose bracket LOWER bound is >= minAmount. Each item carries the politician, filing link, filing delay, and ALL trades of the report sorted largest bracket first, with qualifyingTradeCount for how many clear the threshold. Built for polling: pass the returned nextCursor back as `since` and each disclosure is returned exactly once (for the same minAmount and kinds); keep nextCursor even when items is empty, and call again at once when hasMore is true. Without `since` only disclosures that became complete in the last 48h are returned. A report is emitted only after no new row of it has arrived for a settle window (~8h), so items lag the filing by hours; a report that GROWS materially afterwards (+25 trades or +20%) is emitted once more with a higher `revision`, and `replacesPrevious: true` when you already had it — replace it by `id`. filingDelayDays (longest lag), isLateFiling (>45 days) and lateTradeCount EXCLUDE trades with transactionDateSuspect=true: a date lagging its own otherwise on-time report by ~one year is a probable mistyped year upstream, listed as filed and counted in suspectDateCount — never quote it as a filing lag. owner null means the filing did not state one ("Not stated"), NEVER "Self". Render amountRange (the filed bracket); amountMin null means the bracket was not parsed (never $0), amountMax null means "Over $50,000,000" or unparsed, ticker null means a non-equity asset.

输入参数kindslimitsinceminAmount

get_politician_late_filers

Get Politician Late Filers

Get STOCK Act late filing violations -- trades where the disclosure was filed more than 45 days after the transaction (a legal violation). Sorted by filing delay descending. Excludes trades whose transaction date is suspect (a probable mistyped year upstream: ~one year off the rest of its own on-time filing) -- their delay is not measured. owner null means not stated, never "Self". Useful for identifying politicians with poor disclosure compliance.

输入参数dayslimitoffset

get_politician_committees

Get Politician Committees

Get committee assignments for a politician including committee name, chamber, role (Chair, Ranking Member, etc.), and subcommittee memberships. Use to correlate trading activity with committee oversight areas. Requires a politician slug (e.g. "sen-nancy-pelosi") -- use get_politicians first to find the slug.

输入参数slug必填

get_politician_votes

Get Politician Votes

Get voting records for a politician by slug. Returns congressional votes with bill info, position (Yea/Nay/Not Voting), and result. Useful for assessing alignment between a politician's votes and their trading positions. Requires Bioguide ID resolution.

输入参数slug必填limitoffset

get_politician_pnl

Get Politician P&L

Get estimated realized + unrealized profit & loss for a politician. Methodology: each disclosed trade amount range is converted to an estimated share count using the stock's historical market price on the transaction date, then FIFO-matched on SHARES (realized = (sellPrice − buyPrice) × matched shares); open positions are marked to the current price for unrealized P&L. Works for Congress (sen-/rep-) AND executive branch (exec-) officials. Response includes a `totals` object (estimatedRealizedPnl, estimatedUnrealizedPnl, winRate, realizedTrades, tickersTraded) and a `byTicker[]` breakdown (estimatedShares, avgCostBasis, currentPrice, realizedPnl, unrealizedPnl, unrealizedPnlPercent) — byTicker open positions double as the estimated holdings. All figures are ESTIMATES (±25-40% from disclosure bracket width). Use get_politicians first to find the slug.

输入参数slug必填

get_politicians_pnl_leaderboard

Get Politicians P&L Leaderboard

Rank politicians (Congress + executive branch) by estimated trading P&L across the universe. Sort by total P&L, win rate, or traded volume. P&L uses price-adjusted share estimation: disclosed amount ranges → estimated shares via historical price → FIFO on shares → open positions marked to current price. Figures are ESTIMATES (±25-40% from disclosure bracket width).

输入参数limitoffsetsortBy

get_politician_scorecard

Get Politician P&L Scorecard

Top 5 and bottom 5 politicians (Congress + executive-branch officials) by ESTIMATED trading P&L over a trailing window (default and only supported window: 90 days), plus SPY's return over the same window as a benchmark, and imageUrl — a ready-to-attach 2160x2700 PNG card of the same ranking (null when unavailable; card.reason says why). ALL P&L FIGURES ARE ESTIMATES (estimate: true, estimateRange "±25–40%"): disclosed amount RANGES are converted to shares at the historical close, FIFO-matched, and open positions marked to the latest quote. State that they are estimates whenever you publish them; the card already prints "Estimates from disclosed amount ranges (±25–40%). Not investment advice." WHAT THE METRIC IS (read `metric`): P&L on trades DISCLOSED INSIDE the window only — realized on round trips opened and closed in the window plus unrealized on positions opened in the window. It is NOT lifetime P&L; sales of positions bought before the window are not counted. Eligibility: at least 5 trades in the window (eligibility.minTradesInWindow), so a single lucky trade cannot top the board. Each row: slug, fullTitle ("Senator", "Representative", or an executive official's filed title), fullName, displayName, party and state as full words, estimatedPnl, winRate (0-1; null = no position closed in the window — not measured, never 0%), tradesInWindow, unrealizedMeasured, and portraitUrl (always null for executive officials). Use the full title and full party/state words — never "Sen." or "D-CA". benchmark.available false means SPY was NOT measured (benchmark.reason) — never 0%. available false with reason "pending" means the window has not been computed yet, not that nobody traded.

输入参数window

get_politician_roles

Get Politician Roles

Get committee leadership roles (Chair, Ranking Member, etc.) for a politician. Use get_politicians first to find the slug.

输入参数slug必填

get_recent_congressional_votes

Get Recent Congressional Votes

Get recent congressional roll-call votes across all members, sourced from GovTrack (both chambers as available — currently Senate-heavy). Each vote includes member, bill info, position, and result.

输入参数limitoffset

get_recently_sponsored_bills

Get Recently Sponsored Bills (Cross-Politician)

Get the most recently introduced bills across all congressional sponsors. Each bill includes the sponsor block (bioguideId, fullName, party, state, politicianSlug) so persona agents can link directly to the sponsor detail page. politicianSlug is null when the sponsor is no longer in the active roster (typically ex-members). Requires CONGRESS_API_KEY on the backend.

输入参数limitoffsetcongress

get_political_sector_rotation

Get Political Sector Rotation

Which market SECTORS politicians have been trading in over a trailing window. Aggregates congressional + executive trades by sector and returns, per sector: trade count, total dollar volume, number of distinct politicians, and the top tickers. Use it to see where political trading activity is concentrating (e.g. "politicians piled into Energy this month"). Sort by count or dollar volume.

输入参数limitsortBychamberwindowDays

get_senate_trades_by_ticker

Get Senate Trades by Ticker

Reverse lookup — find which politicians recently traded a given TICKER. Returns recent STOCK Act disclosures for that symbol with politician info, transaction type, and amount.

输入参数limitoffsetticker必填

get_cash_position

Get AI Cash Position

Get the Signal8 cash position model for a company, derived from the dilution snapshot pipeline: anchor cash and anchor date, monthly burn, post-anchor capital raises (with SEC filing citations), known outflows, estimated current cash and runway months. Use when analyzing a company's current cash situation, runway, or capital raise activity. ALWAYS RETURNS 200 — read `available` and `reason`, never the HTTP status: coverage is partial, so `available: false` with reason `snapshot_not_generated` means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no cash data and different from an outage (an outage is a 5xx). Never report a company as having no cash or no runway on the strength of an unavailable response. The `scenarios` envelope is preserved for compatibility but only `scenarios.closed` is populated: `pending` and `announced` are null with reason `scenario_not_modelled` because the extraction records only REALIZED cash-raising events and never models speculative raises. Do not infer them from shelf or ATM capacity. CURRENCY: amounts are in the filer's REPORTING currency, which is not always USD (Canadian, European, Japanese and Chinese filers report in their own currency). Read top-level `currency` (ISO 4217; null = not determined) and `currencySource` ("presumed_usd" means no foreign-currency marker was found, not a measurement). Every money object is {usd, native: {amount, currency}}: `usd` (and scenarios.closed.estimatedCashUsd / adjustedEstimatedCashUsd / netCapitalRaisesUsd) is null when the block is not in USD; nothing is converted. Never present `native.amount` as dollars. monthsOfCashLeft is currency-neutral and stays populated. Included in Signal8 Pro (403 FEATURE_NOT_AVAILABLE, requiredTier "pro", without it). That is a tier upgrade, not an add-on purchase — the add-on is no longer sold.

输入参数ticker必填

get_cash_history

Get 10-Year Cash History

Get up to 10 years of quarterly cash position history from SEC XBRL filings (data.sec.gov company-facts). Returns an array of {periodEnd, usd, formType, isAnnual} sorted chronologically. Deduped by period with annual filings preferred over quarterly. Not feature-gated — works for any company with SEC filings.

输入参数ticker必填

screen_must_raise

Screen Companies That Must Raise Capital

Find companies with imminent capital raise needs based on estimated cash runway. Defaults to companies with less than 6 months of cash remaining, sorted by urgency (lowest runway first). Useful for identifying distressed companies, imminent dilution situations, or potential financing catalysts. Runway is estimated from current burn rate. Companies whose ESTIMATED cash is already exhausted are included by default and listed first: they carry cash_runway_months null with cashRunwayReason "estimate_would_be_negative" (the last cash figure, dated cashRunwayAsOf, rolled forward by the burn rate is below zero today). That is an estimate from a dated balance, never a reported zero balance — say "estimated exhausted as of today, last cash figure <cashRunwayAsOf>", not "has no cash". Rows also carry estimatedCurrentCash / estimatedCashAsOf (dilution-snapshot cash projection; null = not measured) and listingMarket.

输入参数limitmarketoffsetindustrymaxMonthsincludeExhausted

get_cash_runway_calendar

Get Cash Runway Depletion Calendar

Find companies projected to run out of cash within a date window. Similar to lockup expiration calendars but for cash depletion events. Returns companies sorted by urgency (lowest runway first). Runway is an estimate based on current burn rate — actual depletion depends on future capital raises and operational changes. Default window is today to 90 days out. When the window starts today or earlier it also lists, first, companies whose ESTIMATED cash is already exhausted (cash_runway_months null, cashRunwayReason "estimate_would_be_negative", cashRunwayAsOf = the date of the cash figure that was rolled forward) — an estimate, never a reported zero balance.

输入参数tofromlimitmarketoffsetindustry

get_dilution_coverage

Get Dilution Coverage Status

Cheap pre-check for whether Signal8 holds a dilution analysis for a company: coverage status (verified / stale / not_covered), extraction state (never_extracted / running / failed / timeout / complete), last attempt and last success timestamps, the coverage tier, and whether the ticker is out of scope. CALL THIS FIRST before the expensive dilution tools — it answers "is there anything to fetch" for a fraction of the cost. ALWAYS RETURNS 200 — read `available` and `reason`, never the HTTP status. Coverage is partial: `not_covered` means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. An `outOfScope` ticker is a statement about the PRODUCT (dilution analysis covers small-cap issuers only) and says NOTHING about that company's dilution — do not report a large-cap as having no dilution because it is out of scope. A `stale` status means the analysis is real but predates recent filings. `statusDetail` refines it: `newer_filing_unread` (a material filing — new/amended instrument, 424B5 pricing, split, 10-K — was filed after the snapshot and it has not read it; `unreadFilings` names them) and `delisting_filed` (a Form 25/25-NSE/15 filed after the snapshot; `delistingFiled` names it) both report `status: stale` — say the analysis predates that filing, never present it as current. A null `unreadFilings` is NOT MEASURED, never "nothing filed since". NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAIL

输入参数ticker必填

get_dilution_risk

Get Dilution Pressure Score and Risk Levels

Get the dilution pressure score: a 0-100 score with its seven-component breakdown (shelf capacity, ATM/equity-line capacity, warrants in the money, convertible proximity, cash burn urgency, historical dilution, toxic financing), plus four risk levels — overall, offering ability, overhead supply, cash need. When the filings state no current share count, components that need the share count or market cap (warrants in the money, shelf / ATM capacity) are scored on the best-estimate share count — `details.sharesOutstandingEstimate` {shares, kind, asOf, source} and `details.marketCapSource: "derived_price_x_estimated_os"` say so; report those components as resting on an estimate. 🔴 THE SCORE IS MEANINGLESS WITHOUT `scoreMaxMeasured` AND `scoreWithheldReason`: components whose inputs could not be measured are DROPPED FROM THE DENOMINATOR, so a score of 58 may be 58 out of 85, not out of 100. Always report it as `score`/`scoreMaxMeasured` and name the excluded components from `scoreUnmeasuredComponents`; NEVER rescale it to /100, and never treat a low numerator as a low-risk finding. When `scoreDenominatorThin` is true the score rests on fewer than 70 measured points — report it as a PARTIAL reading ("N of M measured"), never as a full one. A non-null `scoreWithheldReason` (e.g. `no_dilution_snapshot`) means there is NO score — not a score of zero. 🔴 WHEN `levelsAreLowerBound` IS TRUE THE LEVELS ARE FLOORS, NOT MEASUREMENTS: a "medium" then means AT LEAST medium. State it as a lower bound; presenting a floor as a measurement understates the risk of a named issuer. `levelsLowerBoundScope` names WHICH levels are floors and ONLY those carry the at-least qualifier; `levelsLowerBoundReason` says why: `unquantified_live_instruments` (instruments that could not be sized were excluded — floors `overall` + `overheadSupply`), `offering_capacity_unknown` (a live shelf/ATM/equity line/registration states no remaining capacity) or `market_cap_unmeasured` (no market cap to compare cap

输入参数ticker必填

get_dilution_snapshot

Get Dilution Snapshot Summary

Get the dilution snapshot header (the heaviest dilution call): summary totals (potential new shares and their percentage of shares outstanding, per-family share totals), the cash position (anchor cash, monthly burn, estimated current cash, runway months), the float block, and `meta` provenance. Cash amounts are in the filer's REPORTING currency, not always USD: read `cashPosition.currency` (ISO 4217; null = not determined) and `cashPosition.currencySource` ("presumed_usd" = no foreign marker found, not a measurement) before calling a figure dollars. Runway months are currency-neutral. DOES NOT INCLUDE INSTRUMENT ROWS — call get_dilution_instruments per family for those, and call get_dilution_coverage first to avoid a wasted call on an uncovered ticker. 🔴 FLOAT: a declined float block (`available: false`) carries the read tier's `reason` and, when the extraction recorded a veto, a `refusal` object whose `withheldReason` is the exact value get_float serves — read that, not the bare reason, when reconciling the two. 🔴 FLOAT: when `floatWithheldReason` is non-null the tradeable float was NOT MEASURED and must not be stated as a number. `tradeableFloatCeiling` is an UPPER BOUND ("at most X"), NOT a float — never feed it to a market capitalisation, a percent-of-float, a short-interest ratio or a comparison; say in words that the float is at most that figure (a bound) — never print it as a bare number and never with a ~ / ≤ / ≥ glyph (2026-10-18). 🔴 BOUNDED TOTALS: a null share total (`potentialNewShares`, `totalWarrantShares`, `totalConvertibleShares`, `totalEquityPlanShares`, `totalExchangeableShares`, and `potentialDilutionPercent`) may sit beside `<key>Bound: "ceiling"`, `<key>Ceiling` and `<key>Floor`: some rows could not be placed on one split basis, but they can add at most a provably small amount. Report the ceiling as "at most X" and the floor as the measured part — NEVER the ceiling as the measured total, and never feed it to a ratio or comparison as if measur

输入参数ticker必填

get_dilution_instruments

Get Dilution Instrument Rows by Family

Get ONE instrument family's rows with per-field SEC citations — each figure carries the accession number, filing date and the verbatim quoted sentence it was read from, so every number can be traced to a filing. Families: warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings. One family per call — request the families you actually need rather than sweeping all ten. 🔴 ROW-LEVEL WITHHOLDING: `withheldRows` / `withheldRowCount` mean specific rows could NOT be verified and were blanked, so every family total in the response is a LOWER BOUND, not a complete figure. Say so — presenting a holed total as complete understates a named issuer's dilution. An empty rows array on a covered company is a measured "none found in the filings read"; an unavailable response is not. 🔴 STATUS `disputed` (warrants / convertibles / preferred / exchangeables) means the ISSUER'S LATEST FILING DISPUTES THE INSTRUMENT'S EXISTENCE OR VALIDITY and its financial statements do not carry it: the row is SHOWN and EXCLUDED from every total (`summary.disputedInstrumentCount` / `disputedInstrumentShares`) — report it as a disputed claim against the company, never as outstanding and never as retired. 🔴 `contingencyTrigger: "event_of_default"` marks an instrument that converts ONLY on an event of default; it is still outstanding and still COUNTED — say "converts only on an event of default", never that it is not dilutive. 🔴 ON `convertibles` ROWS `principalBasis` says HOW `principalOutstanding` was arrived at: `aggregate_only` / `fair_value_only` / `conflict` / `undisclosed_since_issue` mean the current balance is NOT MEASURED (principalOutstanding is null) — report `principalOriginal` as the ORIGINAL principal with the balance undisclosed, never as the current balance. `conversionBasis: "formula_unanchored"` means the conversion mechanism is disclosed but no price input exists, so no share count can be computed — the row is unquantified,

输入参数family必填ticker必填

get_baby_shelf_capacity

Get Baby-Shelf (S-3 I.B.6) Raisable Capacity

Get the SEC Form S-3 General Instruction I.B.6 "baby shelf" capacity: how much the issuer may raise off an effective shelf right now, given the one-third-of-public-float cap that applies below a $75M non-affiliate float, less the trailing-twelve-month takedowns already used. Returns the public float basis, the cap, takedowns counted and the remaining raisable amount. 🔴 `constraintApplies: false` means the cap does NOT bind (float at or above $75M, so primary offerings are unlimited under I.B.1) — it is NOT "no capacity" and NOT a favourable finding. 🔴 `constraintApplies: null` means the float value was NOT MEASURED (`suppressedReason: "float_unmeasured"`): neither the $75M test nor the cap could be answered — report it as not measured, NEVER as "the cap does not bind" and NEVER as unlimited. 🔴 A `suppressed` response means the figure is WITHHELD (for example an issuer that has been delisted to OTC and cannot run an S-3 primary at all) — report it as not stateable, NEVER as $0 raisable, which is a claim. 🔴 `suppressedReason: "ib6_pool_unattributed"` means the cap DOES apply but the trailing sales that would exhaust it could not all be attributed to an I.B.6 registration, so the derived $0 is a lower BOUND, not a measurement — `remainingCapacity` is null and `capacityUpperBoundDollars` is "at most", never a figure. 🔴 `suppressedReason: "issuer_not_ib6_limited"` means the issuer's own current prospectus offers MORE than the cap our float valuation would strike, on a cover with no I.B.6 limitation (`issuerUnlimitedOffer` echoes it): whether the cap applies is NOT MEASURED (`constraintApplies: null`) — never report it as $0, as constrained, or as unlimited. `floatValueBasis: "issuer_stated"` means the issuer's own printed I.B.6 float value (`issuerStatedFloat`, a prospectus no older than 60 days) was lower than the live valuation and was used. A null remaining capacity is likewise not measured, not zero. ALWAYS RETURNS 200 — read `available` and `reason`, never the

输入参数ticker必填

get_dilution_performance

Get Post-Offering Price Performance

Get post-offering price performance: for each recorded offering, how the stock traded after it priced or closed. Use when assessing how the market has absorbed this issuer's past financings. 🔴 THIS IS HISTORY, NOT A FORECAST — it describes what happened after prior offerings and must never be phrased as an expectation, a price target or a prediction about a named company. An empty or unavailable series means no offering performance was measured, NOT that offerings had no effect and NOT that there were no offerings. ALWAYS RETURNS 200 — read `available` and `reason`, never the HTTP status. Coverage is partial: `not_covered` means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of `meta.asOfDate`, from filings read through `meta.filingsThrough` — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and `requiredTier: "pro"`. That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.

输入参数ticker必填

get_dilution_history

Get Shares-Outstanding and Cash History

Get the historical shares-outstanding and cash series from SEC XBRL filings, with offering and material-cash-event overlays so an issuance or a raise can be lined up against the share count and cash balance around it. Use for share count growth over time and for the cash trajectory between financings. 🔴 THE HISTORICAL SHARE COUNTS ARE AS FILED — each point is on the split basis in force when it was reported and is NOT rebased to today, so a reverse split shows as a step and points either side of one are not directly comparable. Do not compute a growth rate across a split boundary from these raw points. A gap in the series means no filing supplied that period, not that the share count was unchanged. ALWAYS RETURNS 200 — read `available` and `reason`, never the HTTP status. Coverage is partial: `not_covered` means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of `meta.asOfDate`, from filings read through `meta.filingsThrough` — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and `requiredTier: "pro"`. That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.

输入参数ticker必填

get_intraday_bars

Get Intraday Price Bars

Get intraday OHLCV candles at 1, 5, 15, 30, or 60-minute resolution. Use for intraday price action analysis, volume patterns, and short-term technical analysis. Returns open, high, low, close, and volume for each bar. Set extended=true (1-minute resolution only) to include premarket (04:00–09:30 ET) and after-hours (16:00–20:00 ET) bars.

输入参数to必填from必填ticker必填extendedresolution必填

get_volume_profile

Get Volume Profile

Get volume distribution across price levels for a single trading day. Returns price buckets with volume, Point of Control (highest volume level), and Value Area (price range containing 70% of volume). Use for identifying support/resistance and high-volume price nodes.

输入参数date必填ticker必填bucketSize

get_accumulation_snapshot

Get Accumulation Snapshot

Get intraday accumulation/distribution metrics for the current or most recent trading session. Returns session VWAP, volume above/below VWAP, estimated buy vs sell volume (tick rule), volume by time period (morning/midday/afternoon), and comparison to average volume. Use for assessing real-time buying/selling pressure.

输入参数ticker必填

get_insider_positions

Get Insider Positions

Get current open insider positions for a CIK (either an insider or an issuer). If an issuer (company) CIK is supplied, returns all insiders' positions for that company. If an insider (reporting-person) CIK is supplied, returns that insider's open positions across all issuers they have filed Form 4 for. The response includes a `lookupMode` field (`"issuer"` or `"insider"`) indicating which interpretation matched. Derived from Form 4 filings.

输入参数cik必填

get_insider_positions_by_ticker

Get Insider Positions by Ticker

Get per-insider position aggregates for a given ticker — which insiders hold positions in the stock and their aggregate cost/value. Derived from Form 4 filings. NOT LIFETIME: every figure covers only the Form 4 history Signal8 holds, which starts at the response's `coverageStart` date (also repeated on each row) — say "since <coverageStart>", never "lifetime" or "all-time". Each row carries `costBasisStatus`: `complete` (every share the history knows was bought inside coverage), `partial` (the holding predates coverage, so `weightedAvgCost` averages only in-coverage priced buys and is NOT the cost of the position), or `unknown` (the first in-coverage event was a sale, or there was no priced buy — `weightedAvgCost`/`costBasisTotal` are null, which means NOT MEASURED, never zero cost).

输入参数ticker必填

get_analyst_grades

Get Analyst Grades

Get recent analyst grade actions (upgrades, downgrades, initiations) for a ticker, including the grading firm and previous/new grade.

输入参数limitticker必填

get_price_target

Get Price Target

Get analyst price target data for a ticker. By default returns the consensus / split-adjusted average price target. Set list=true to return the full per-analyst list of individual price targets instead.

输入参数listlimitticker必填

get_analyst_coverage

Get Analyst Coverage

Get aggregated analyst coverage for a ticker — consolidated view of grades, targets, and coverage breadth across covering firms.

输入参数ticker必填

get_politician_donors

Get Politician Donors

Get the paginated list of campaign donors (individuals and PACs) for a single politician across one election cycle. Returns donor name, amount, type, employer/occupation (individuals), and committee details (PACs). Use this when a user asks "who donated to <politician>" or wants the full donor list. For a quick top-10 + cycle totals overview, use get_politician_donor_summary instead.

输入参数slug必填typecyclelimitoffsetsortByminAmountsortOrder

get_politician_donor_summary

Get Politician Donor Summary

Get a bundled donor summary for a single politician: cycle totals (raised, spent, cash-on-hand, debts), donor count, top 10 individual donors, and top 10 PAC donors — all in one response. This is the right tool for "who funds <politician>" or "biggest donors to <politician>" style questions. For the full paginated list, use get_politician_donors.

输入参数slug必填cycle

get_donor_aggregates

Get Donor Aggregates

Get market-wide campaign-finance rollups across ALL tracked politicians for a cycle: total raised, top 10 individual donors, top 10 PACs, party/chamber/cycle splits, and a most-funded politician leaderboard. Use for "who are the biggest donors in 2024?" or "which party raised more?" type questions. For a single politician, use get_politician_donor_summary.

输入参数cyclepartychamber

get_policy_events

Get Policy Events

List mirrored executive orders (policy events) from the Federal Register feed. Filter by signing-date range, affected sector, or free-text title query. Each event includes its Federal Register document number (externalId), title, signing date (eventDate), normalized affected sectors, full-text URL, and flaggedTradeCount — the number of official trades that occurred in an affected sector near the signing date. IMPORTANT: matches are sector-level co-occurrence — the official traded a stock in a sector the executive order affects, within a window of its signing date. Sector matches are broad and many trades will coincide with policy activity by chance; a match is a starting point for research, not evidence of foreknowledge. The matchBasis field describes match strength only ('sector' = broad sector match), never culpability, and matchCount shows how many EOs matched in the window (a noise indicator).

输入参数qtofromlimitoffsetsector

get_policy_trade_overlap

Get Policy-Trade Overlap

For a single politician, list trades that occurred within a window of days before or after the signing of an executive order affecting the traded sector. Each row contains the trade, the nearestEvent, daysDelta (negative = traded N days before EO signing, positive = traded N days after), matchBasis, and matchCount, plus a summary (totalFlags, totalEstimatedUsd, topSector). Defaults to trades 1-14 days BEFORE signing; same-day trades are always excluded (intraday ordering is unknowable). Executive-branch (exec-) slugs return REAL data here: both congressional and executive trade sources feed the overlap computation. IMPORTANT: matches are sector-level co-occurrence — the official traded a stock in a sector the executive order affects, within a window of its signing date. Sector matches are broad and many trades will coincide with policy activity by chance; a match is a starting point for research, not evidence of foreknowledge. The matchBasis field describes match strength only ('sector' = broad sector match), never culpability, and matchCount shows how many EOs matched in the window (a noise indicator).

输入参数slug必填limitoffsetwindowdirection

get_policy_trade_leaderboard

Get Policy-Trade Leaderboard

Rank politicians (Congress + executive branch) by trades that occurred near executive-order signings in sectors the orders affect. Each row includes the politician, flaggedTradeCount, totalEstimatedUsd, topSector, and an exampleEvent. Use for "who trades most around policy activity" style questions. Defaults to the same "traded 1-14 days before signing" lens as get_policy_trade_overlap; same-day trades are always excluded. IMPORTANT: matches are sector-level co-occurrence — the official traded a stock in a sector the executive order affects, within a window of its signing date. Sector matches are broad and many trades will coincide with policy activity by chance; a match is a starting point for research, not evidence of foreknowledge. The matchBasis field describes match strength only ('sector' = broad sector match), never culpability, and matchCount shows how many EOs matched in the window (a noise indicator).

输入参数sortlimitoffsetwindowdirection

get_legislative_calendar

Get Legislative Calendar

Forward-looking legislative catalyst calendar: upcoming House/Senate floor votes (bills and Senate cloture motions) filtered to items that can move tickers. Each item includes the predicted vote window (start/end/granularity/confidence/provenance), marketRelevance (low/medium/high), significance (1-5), affected sectors with direction + mechanism, verified affected tickers with evidence quotes, pass outlook, considerationProcedure (suspension-calendar bills pass ~98% of the time), a conflictBadge when the sponsor traded a verified affected ticker, and tweet/plain summaries. An EMPTY calendar is a normal state — it means nothing market-relevant is scheduled in the window, not an error. Defaults: from=today, to=+14 days, minRelevance=low. IMPORTANT: affectedTickers contains VERIFIED rows only — every ticker carries a verbatim evidenceQuote substring-verified against the actual bill text (no hallucinated tickers). sponsorTradeFacts are restatements of public STOCK Act disclosures with verbatim amount brackets and BOTH transactionDate AND disclosureDate — always cite both dates together (disclosures lag trades by up to 45 days), and never present a fact as evidence of wrongdoing. Vote windows are predictions: check window.provenance for trust level ('uc_explicit' is exact; 'rule_xxii_computed' is a medium-confidence estimate) and window.granularity for how precise the window is (exact time vs day vs week).

输入参数tofromlimitoffsetminRelevance

get_rvol_history

Get RVOL History

Get the per-day relative-volume (RVOL) time series for a ticker, bucketed by trading session (premarket 04:00–09:30 ET, regular 09:30–16:00, afterhours 16:00–20:00, or all four). Each day's RVOL compares that session's volume to a trailing same-session baseline (30 trading days by default — configurable via "baselineDays"), so premarket volume is judged against premarket history (not a stale full-day figure). Use for spotting unusual premarket / session volume surges over the last N days. Each point also carries "baselineState" — "ready" (rvol is populated), "warming" (baseline not yet warm), "no-cutoff-history" (established ticker that never traded at this session/cutoff before) or "no-history" (new listing, no prior trading history at all) — so a null rvol is explained rather than silent. Points additionally carry "advRatio" (that day's volume ÷ the trailing 30-session average FULL-DAY volume, null when no full-day denominator exists) and "advDays" (its sample size), which give a magnitude to points RVOL cannot rate. advRatio is NOT an RVOL — it compares a partial session to a whole day, so it is typically well under 1 and must not be compared to rvol. Charged per your API tier.

输入参数daysticker必填sessionasOfTimebaselineDays

get_premarket_scanner

Get Premarket Scanner

Get the live premarket scanner board — the top premarket gainers and losers by absolute gap %, each row enriched with rvol, marketCap, floatShares (the measured POINT float, null on a withheld dilution-snapshot row — such a row then carries "floatEstimate" {shares, bound: "point" | "ceiling" | "floor", basis}. RENDERING (2026-10-18): a "point" is printed as the plain number with its as-of and caveat; a "ceiling" / "floor" is a BOUND, not a figure — say "float not stated (at most / at least N)" and never the bare number, never a "~" / "<=" / ">=" glyph, never arithmetic; neither present = not measured, never 0. The low-float board admits on that figure's VALUE: an 8M ceiling is in, a 26M floor or a 27M estimate is out), short interest, dilution, and news/catalyst flags. Listing-compliance data (row "compliance", the compliance/split badges, "reverseSplitSignal", "deficiencySignal") is Signal8 Pro: for any other caller "compliance" is null with "complianceWithheld": "pro_required" — WITHHELD, which is not "not measured" and never "no deficiency". Off-hours it falls back to the last session. Use for premarket small-cap runner discovery. Set includePennyStocks=true to include sub-$1 names (separate cache slot). During the 04:00–09:30 ET premarket window rows also carry two LIVE volume metrics off the same live cumulative-volume numerator — they are DIFFERENT quantities and must not be substituted for each other or for "rvol": "liveRvol" = live cumulative premarket volume ÷ the trailing 30-session average cumulative volume AT THE SAME TIME OF MORNING (answers "is it busy for 08:00?"), with "liveRvolAsOf" giving the 15-minute ET grid cutoff that baseline came from — compare it to meta.asOf (when the live volume was sampled) to judge the small numerator/denominator time skew; and "premarketPaceRatio" = the same live volume ÷ the trailing 30-session average FULL premarket session (answers "what fraction of a typical entire premarket has it already done?", >1.0 = it already

输入参数sortuniverseincludePennyStocks

get_upcoming_reverse_splits

Get Upcoming Reverse Splits

Get reverse stock splits SCHEDULED to take effect within a day-offset window of the current US market day, for companies under a market-cap ceiling. Offsets are days from today on the US market calendar: fromOffset=1, toOffset=1 is tomorrow; fromOffset=1, toOffset=7 is the week ahead. Each row carries the ticker, company name, the exact vendor integers (splitFrom/splitTo), a pre-rendered ratio ("1-for-20"), the effective date, market cap, float in SHARES, and price. floatShares is on the SAME split basis as the market cap. floatBasis says what it is: "measured", or "estimate" / "estimate_rebased" (the float ladder's point estimate, moved across this split when it predates it) — present an estimate as an estimate. 🔴 floatShares: null MEANS NOT MEASURED OR WITHHELD — never zero, never "no float". Such rows ARE included (they have a valid market cap); floatWithheldReason says why. Do not substitute a float from another source. floatUnknownCount counts those null-float rows IN the list; it is not a withholding count (withheldCount is). price is on the SAME split basis as the market cap (null when it cannot be stated on one basis), so never pair it with a pre-split price from elsewhere. WHAT THIS IS: rows are splits scheduled AS OF NOW — not a guarantee that every split effective in the window is already known. The underlying stock_splits table has NO created_at column, so there is no way to measure when a row first appeared, and a split announced later will simply be missing. Describe results as "scheduled as of now", NEVER as "all of" or "every" reverse split. A scheduled split can also be postponed or cancelled after it is announced. 🔴 capUnknownCount IS A WITHHOLDING COUNT, NOT A ZERO. It counts rows that passed every other filter and were DELIBERATELY EXCLUDED because Signal8 has no measured market cap for them — typically real OTC microcaps. It does NOT mean those companies have no dilution, no split, or no cap; it means the cap was not measured, so they cannot b

输入参数toOffsetfromOffsetmaxMarketCap

get_recent_uplistings

Get Recent Uplistings

Get OTC-to-exchange uplistings that FINRA recorded on a given US market day, for companies under a market-cap ceiling. Each row carries the old OTC symbol, the resolved new exchange symbol (or null), a confirmed flag, the destination venue (NASDAQ / NYSE / NYSE American / ARCA), company name, effective date, market cap and float in SHARES. 🔴 THIS IS A SAME-DAY READ AND THERE IS NO FORWARD-LOOKING VERSION. FINRA records an uplisting at roughly 01:45 ET ON the day it becomes effective, and the source table has no scheduled/announced column at all. So there is nothing to publish the night before, and dayOffset exists for catch-up reads of past days, NOT for forecasting — a positive offset returns nothing. Never frame these as upcoming, tomorrow, or expected; they have already happened. 🔴 newSymbol: null IS A FIRST-CLASS PUBLISHED STATE, NOT A MISSING FIELD. FINRA's row names only the OLD OTC symbol; the new ticker is resolved by company-name match against Nasdaq SymDir and sometimes cannot be resolved. A guessed or wrong ticker would name a company that did not uplist, so an unresolved row is published naming the OLD symbol and saying the new one was not resolved. DO NOT infer, guess, look up, or fill in a null newSymbol, and do not drop the row. confirmed: false means the symbol resolution is PROVISIONAL — render it as provisional, keep it out of any headline, and do not assert the new ticker as fact. Only confirmed: true is a confirmed resolution. 🔴 capUnknownCount IS A WITHHOLDING COUNT, NOT A ZERO — rows that cleared every other filter but have NO measured market cap, so they cannot be asserted to sit under the stated ceiling. It does not mean those companies have no cap. Disclose the count if you publish a cap-bracketed framing. AN EMPTY uplistings ARRAY IS THE NORMAL, EXPECTED RESULT ON MOST DAYS — uplistings run roughly 6.6 per month across ALL market caps, so the large majority of days genuinely have none. It is NOT an error, NOT an outage, and NOT evidence

输入参数dayOffsetmaxMarketCap

search_learn_guides

Search Signal8 Academy Guides

Search the free Signal8 Academy (signal8.ai/learn) — plain-English guides that explain dilution (ATMs, warrants, convertibles, baby shelf, cash runway), how to read SEC filings (8-K items, Form 4 codes, 13D/13G, 424B5, S-1/S-3), market structure (halts, short interest, float, reverse splits, STOCK Act disclosures) and how to use Signal8. Returns matching guides with title, description, track, section, reading time, lastVerified date, the public url and the signal8:// resource uri — no bodies; call get_learn_guide for the full Markdown. Keyword match: every query word must appear somewhere in the guide; title hits rank highest. An empty query lists every guide (optionally one track) in reading order. Use this to ground an explanation of a concept the user asked about, or to cite a guide alongside data from the dilution / filing tools. Works without an API key. An empty result means no guide matched the words given — try fewer or broader words (e.g. "warrant" rather than "warrant inducement repricing") — not that the topic is unimportant.

输入参数limitquerytrack

get_learn_guide

Get Signal8 Academy Guide

Get one Signal8 Academy guide as Markdown, by track and slug (both come from search_learn_guides, or from a signal8.ai/learn/<track>/<slug> URL). Returns title, description, section, lastVerified, the public url, the full Markdown body (links already rewritten to absolute signal8.ai URLs), the related guides, the glossary terms it uses (with one-line definitions) and its SEC sources (accession numbers). Guides use hypothetical examples ("Company X") unless a source is cited; they are education, not advice about any named company. When you quote or paraphrase a guide, cite its url. Works without an API key.

输入参数slug必填track必填

define_term

Define a Market / SEC Term

Look up a term in the Signal8 Academy glossary (signal8.ai/learn/glossary) — dilution, SEC filing and trading jargon such as "ATM offering", "baby shelf", "full ratchet", "pre-funded warrant", "going concern", "LULD", "days to cover", "Form 25". Accepts a glossary slug ("atm-offering"), the term itself, or a common alias ("ATM", "price reset"); matching is case- and punctuation-insensitive. Returns the term, a one-line short definition, the long definition as Markdown, related terms, the Academy guides that use it, and the public url. A TERM_NOT_FOUND error means the glossary has no entry for that wording — not that the concept does not exist; try search_learn_guides with the same words. Works without an API key.

输入参数term必填

版本历史

7
  1. v0.19.0最新Oct 19, 2026
  2. v0.18.1Oct 15, 2026
  3. v0.18.0Oct 14, 2026
  4. v0.17.0Oct 6, 2026
  5. v0.16.1Sep 23, 2026
  6. v0.16.0Sep 19, 2026
  7. v0.15.0Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分