Signal8
REMOTE · MCP.SIGNAL8.AI · 2 COMPONENTS
SEC filings, dilution, insider & institutional ownership, and political-trade data for AI agents.
Available components
Last scanned (12 hours ago)
Scores higher than 99% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Finance and Payments
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability79
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 45091 tokens (~186/item across 242 items; 113 tools + 129 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 113 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 115 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Checks we ran (13)
- TLS certificate
- Authorization
- HTTPS
- HSTS header
- DNSSEC
- Transport
- Schema quality
- Stability
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Does not apply to this hosted endpoint (2)
- Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
- Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
The score does not measure everything. What the score does not measure →
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 0
- Stability: 0.97 → pass security
- The server rewrote its instructions, which are the text every model session reads security
- Tool “get_accumulation_snapshot” rewrote its description, which is the text the model reads security
- Tool “get_analyst_coverage” rewrote its description, which is the text the model reads security
- Tool “get_analyst_estimates” rewrote its description, which is the text the model reads security
- Tool “get_baby_shelf_capacity” rewrote its description, which is the text the model reads security
- Tool “get_cash_history” rewrote its description, which is the text the model reads security
- Tool “get_cash_position” rewrote its description, which is the text the model reads security
- Tool “get_cash_runway_calendar” rewrote its description, which is the text the model reads security
- Tool “get_clinical_trials” rewrote its description, which is the text the model reads security
- Tool “get_company_profile” rewrote its description, which is the text the model reads security
- Tool “get_compliance” rewrote its description, which is the text the model reads security
- Tool “get_dilution_coverage” rewrote its description, which is the text the model reads security
- Tool “get_dilution_history” rewrote its description, which is the text the model reads security
- Tool “get_dilution_instruments” rewrote its description, which is the text the model reads security
- Tool “get_dilution_performance” rewrote its description, which is the text the model reads security
- Tool “get_dilution_risk” rewrote its description, which is the text the model reads security
- Tool “get_dilution_snapshot” rewrote its description, which is the text the model reads security
- Tool “get_donor_aggregates” rewrote its description, which is the text the model reads security
- Tool “get_earnings” rewrote its description, which is the text the model reads security
- Tool “get_ended_reverse_splits” rewrote its description, which is the text the model reads security
- Tool “get_executives” rewrote its description, which is the text the model reads security
- Tool “get_exhibit_content” rewrote its description, which is the text the model reads security
- Tool “get_filing_document” rewrote its description, which is the text the model reads security
- Tool “get_filing_documents” rewrote its description, which is the text the model reads security
- Tool “get_filing_exhibits” rewrote its description, which is the text the model reads security
- Tool “get_filing_structured” rewrote its description, which is the text the model reads security
- Tool “get_financials” rewrote its description, which is the text the model reads security
- Tool “get_float” rewrote its description, which is the text the model reads security
- Tool “get_float_history” rewrote its description, which is the text the model reads security
- Tool “get_historical_prices” rewrote its description, which is the text the model reads security
- Tool “get_insider_cross_company” rewrote its description, which is the text the model reads security
- Tool “get_insider_positions_by_ticker” rewrote its description, which is the text the model reads security
- Tool “define_term” rewrote its description, which is the text the model reads security
- Tool “get_analyst_consensus” rewrote its description, which is the text the model reads security
- Tool “get_insider_transactions” rewrote its description, which is the text the model reads security
- Tool “get_institution_derivatives” rewrote its description, which is the text the model reads security
- Tool “get_institution_detail” rewrote its description, which is the text the model reads security
- Tool “get_institution_position_changes” rewrote its description, which is the text the model reads security
- Tool “get_institution_top_aum” rewrote its description, which is the text the model reads security
- Tool “get_institutions_leaderboards” rewrote its description, which is the text the model reads security
- Tool “get_intraday_bars” rewrote its description, which is the text the model reads security
- Tool “get_learn_guide” rewrote its description, which is the text the model reads security
- Tool “get_legislative_calendar” rewrote its description, which is the text the model reads security
- Tool “get_market_breadth” rewrote its description, which is the text the model reads security
- Tool “get_market_metrics” rewrote its description, which is the text the model reads security
- Tool “get_market_news” rewrote its description, which is the text the model reads security
- Tool “get_news” rewrote its description, which is the text the model reads security
- Tool “get_ownership” rewrote its description, which is the text the model reads security
- Tool “get_policy_events” rewrote its description, which is the text the model reads security
- Tool “get_policy_trade_leaderboard” rewrote its description, which is the text the model reads security
- Tool “get_policy_trade_overlap” rewrote its description, which is the text the model reads security
- Tool “get_political_sector_rotation” rewrote its description, which is the text the model reads security
- Tool “get_politician_committees” rewrote its description, which is the text the model reads security
- Tool “get_politician_detail” rewrote its description, which is the text the model reads security
- Tool “get_politician_disclosures” rewrote its description, which is the text the model reads security
- Tool “get_politician_donor_summary” rewrote its description, which is the text the model reads security
- Tool “get_politician_donors” rewrote its description, which is the text the model reads security
- Tool “get_politician_late_filers” rewrote its description, which is the text the model reads security
- Tool “get_politician_pnl” rewrote its description, which is the text the model reads security
- Tool “get_politician_roles” rewrote its description, which is the text the model reads security
- Tool “get_politician_scorecard” rewrote its description, which is the text the model reads security
- Tool “get_post_earnings_movers” rewrote its description, which is the text the model reads security
- Tool “get_premarket_scan_history” rewrote its description, which is the text the model reads security
- Tool “get_premarket_scanner” rewrote its description, which is the text the model reads security
- Tool “get_quote” rewrote its description, which is the text the model reads security
- Tool “get_recent_congressional_votes” rewrote its description, which is the text the model reads security
- Tool “get_recent_uplistings” rewrote its description, which is the text the model reads security
- Tool “get_reverse_split_authority” rewrote its description, which is the text the model reads security
- Tool “get_reverse_split_lifecycle” rewrote its description, which is the text the model reads security
- Tool “get_reverse_splits_list” rewrote its description, which is the text the model reads security
- Tool “get_rvol_history” rewrote its description, which is the text the model reads security
- Tool “get_senate_trades_by_ticker” rewrote its description, which is the text the model reads security
- Tool “get_short_interest” rewrote its description, which is the text the model reads security
- Tool “get_split_history” rewrote its description, which is the text the model reads security
- Tool “get_split_performance” rewrote its description, which is the text the model reads security
- Tool “get_stock_price_change” rewrote its description, which is the text the model reads security
- Tool “get_top_movers” rewrote its description, which is the text the model reads security
- Tool “get_trading_halts” rewrote its description, which is the text the model reads security
- Tool “get_upcoming_reverse_splits” rewrote its description, which is the text the model reads security
- Tool “get_volume_profile” rewrote its description, which is the text the model reads security
- Tool “lookup_accession_number” rewrote its description, which is the text the model reads security
- Tool “screen_companies” rewrote its description, which is the text the model reads security
- Tool “screen_must_raise” rewrote its description, which is the text the model reads security
- Tool “screen_sec_filings” rewrote its description, which is the text the model reads security
- Tool “screen_sec_filings_performance” rewrote its description, which is the text the model reads security
- Tool “search_clinical_trials” rewrote its description, which is the text the model reads security
- Tool “search_companies” rewrote its description, which is the text the model reads security
- Tool “search_filing_text” rewrote its description, which is the text the model reads security
- Tool “search_institutions” rewrote its description, which is the text the model reads security
- Tool “search_learn_guides” rewrote its description, which is the text the model reads security
- Tool “search_sec_filings” rewrote its description, which is the text the model reads security
- “get_exhibit_content” reworded the description of “id” cosmetic
- “get_filing_document” reworded the description of “filingId” cosmetic
- “get_filing_exhibits” reworded the description of “filingId” cosmetic
- “get_legislative_calendar” reworded the description of “minRelevance” cosmetic
- “get_policy_trade_leaderboard” reworded the description of “sort” cosmetic
- “get_policy_trade_overlap” reworded the description of “slug” cosmetic
- “get_politician_pnl” reworded the description of “slug” cosmetic
- “get_premarket_scan_history” reworded the description of “asOfTime” cosmetic
- “get_premarket_scan_history” reworded the description of “baselineDays” cosmetic
- “get_premarket_scan_history” reworded the description of “date” cosmetic
- “get_premarket_scan_history” reworded the description of “includeNoHistory” cosmetic
- “get_premarket_scan_history” reworded the description of “includeUnscreened” cosmetic
- “get_premarket_scan_history” reworded the description of “minBaselineVolume” cosmetic
- “get_premarket_scan_history” reworded the description of “minSessionVolume” cosmetic
- “get_recent_uplistings” reworded the description of “dayOffset” cosmetic
- “get_rvol_history” reworded the description of “asOfTime” cosmetic
- “get_rvol_history” reworded the description of “baselineDays” cosmetic
- “get_rvol_history” reworded the description of “session” cosmetic
- “get_top_movers” reworded the description of “session” cosmetic
- “screen_companies” reworded the description of “excludeHalted” cosmetic
- “screen_companies” reworded the description of “maxCash” cosmetic
- “search_clinical_trials” reworded the description of “phase” cosmetic
- “search_filing_text” reworded the description of “exhibitTypes” cosmetic
- “search_filing_text” reworded the description of “facets” cosmetic
- “search_filing_text” reworded the description of “match” cosmetic
- “search_filing_text” reworded the description of “matchedSections” cosmetic
- “search_filing_text” reworded the description of “pattern” cosmetic
- “search_filing_text” reworded the description of “section” cosmetic
- “search_sec_filings” reworded the description of “companyTypes” cosmetic
- “search_sec_filings” reworded the description of “cursor” cosmetic
- “search_sec_filings” reworded the description of “exchanges” cosmetic
- “search_sec_filings” reworded the description of “excludeForms” cosmetic
- “search_sec_filings” reworded the description of “exhibitTypes” cosmetic
- “search_sec_filings” reworded the description of “facets” cosmetic
- “search_sec_filings” reworded the description of “foreignIssuer” cosmetic
- “search_sec_filings” reworded the description of “formTypes” cosmetic
- “search_sec_filings” reworded the description of “industries” cosmetic
- “search_sec_filings” reworded the description of “items” cosmetic
- “search_sec_filings” reworded the description of “match” cosmetic
- “search_sec_filings” reworded the description of “matchedSections” cosmetic
- “search_sec_filings” reworded the description of “maxFloat” cosmetic
- “search_sec_filings” reworded the description of “maxMarketCap” cosmetic
- “search_sec_filings” reworded the description of “maxPrice” cosmetic
- “search_sec_filings” reworded the description of “minFloat” cosmetic
- “search_sec_filings” reworded the description of “minMarketCap” cosmetic
- “search_sec_filings” reworded the description of “minPrice” cosmetic
- “search_sec_filings” reworded the description of “q” cosmetic
- “search_sec_filings” reworded the description of “recentIpo” cosmetic
- “search_sec_filings” reworded the description of “section” cosmetic
- “search_sec_filings” reworded the description of “sectors” cosmetic
- 4 Nov 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “define_term” rewrote its description, which is the text the model reads security
- Tool “get_baby_shelf_capacity” rewrote its description, which is the text the model reads security
- Tool “get_dilution_coverage” rewrote its description, which is the text the model reads security
- Tool “get_dilution_history” rewrote its description, which is the text the model reads security
- Tool “get_dilution_instruments” rewrote its description, which is the text the model reads security
- Tool “get_dilution_performance” rewrote its description, which is the text the model reads security
- Tool “get_dilution_risk” rewrote its description, which is the text the model reads security
- Tool “get_dilution_snapshot” rewrote its description, which is the text the model reads security
- Tool “get_filing_document” rewrote its description, which is the text the model reads security
- Tool “get_filing_documents” rewrote its description, which is the text the model reads security
- Tool “get_filing_structured” rewrote its description, which is the text the model reads security
- Tool “get_float” rewrote its description, which is the text the model reads security
- Tool “get_intraday_bars” rewrote its description, which is the text the model reads security
- Tool “get_learn_guide” rewrote its description, which is the text the model reads security
- Tool “get_ownership” rewrote its description, which is the text the model reads security
- Tool “get_politician_late_filers” rewrote its description, which is the text the model reads security
- Tool “get_premarket_scan_history” rewrote its description, which is the text the model reads security
- Tool “get_premarket_scanner” rewrote its description, which is the text the model reads security
- Tool “get_reverse_split_authority” rewrote its description, which is the text the model reads security
- Tool “get_reverse_split_lifecycle” rewrote its description, which is the text the model reads security
- Tool “get_reverse_splits_list” rewrote its description, which is the text the model reads security
- Tool “screen_companies” rewrote its description, which is the text the model reads security
- Tool “screen_sec_filings” rewrote its description, which is the text the model reads security
- Tool “search_filing_text” rewrote its description, which is the text the model reads security
- Tool “search_learn_guides” rewrote its description, which is the text the model reads security
- Tool “search_sec_filings” rewrote its description, which is the text the model reads security
- Resource “Signal8 Stock Screeners: Movers, Halts and Dilution” was removed ▼ functional
- Resource “Stocks Halted Today: Live Halt List and What Each Code Means” was removed ▼ functional
- Resource “Upcoming Reverse Splits: The Next Two Weeks, Explained” was removed ▼ functional
- Stability: pass → 0.97 functional
- New resource “Congress Stock Trading Ban: Where It Stands” functional
- New resource “How to Read the Reverse Split Calendar” functional
- New resource “Signal8 Stock Screeners: Halts, Dilution and Delisting” functional
- New resource “Why Stocks Get Halted and How to Find Today's Halts” functional
- “get_dilution_instruments” reworded the description of “family” cosmetic
- “get_intraday_bars” reworded the description of “extended” cosmetic
- 3 Nov 26 +1
We did not load change detail this far back for this component, so this day may have recorded more than is shown.
- Tool “get_split_history” rewrote its description, which is the text the model reads security
- Tool “get_quote” rewrote its description, which is the text the model reads security
- Tool “get_upcoming_reverse_splits” rewrote its description, which is the text the model reads security
- Schema quality: 355 → 205 ▲ functional
- New resource “13F Value vs AUM: Why a Fund's 13F Is Not Its Total Assets” functional
- New resource “8-K Item Codes Explained: Items 1.01 to 9.01” functional
- New resource “8-K vs 10-K: Event Report Within Four Business Days or the Audited Annual Report” functional
- New resource “Adverse Financing Terms: MFN, Partitions, No Maturity” functional
- New resource “At-the-market (ATM) offering” functional
- New resource “Authorized Share Increases: Reading the Proxy Vote” functional
- New resource “Authorized shares” functional
- New resource “Baby Shelf Rule Explained: S-3 I.B.6 vs Form S-1” functional
- New resource “Baby shelf rule” functional
- New resource “Beneficial Ownership Blockers: 4.99% and 9.99% Caps” functional
- New resource “Cash Runway: How to Calculate It From a 10-Q” functional
- New resource “Cash runway” functional
- New resource “Cashless exercise” functional
- New tool “get_ended_reverse_splits” functional
- New tool “get_reverse_split_authority” functional
- New tool “get_reverse_splits_list” functional
- New tool “get_split_performance” functional
- 31 Oct 26 −1
We did not load change detail this far back for this component, so this day may have recorded more than is shown.
- 21 Oct 26 +1
We did not load change detail this far back for this component, so this day may have recorded more than is shown.
- 20 Oct 26 −1
We did not load change detail this far back for this component, so this day may have recorded more than is shown.
- 17 Oct 26 +1
We did not load change detail this far back for this component, so this day may have recorded more than is shown.
- 16 Oct 26 −1
We did not load change detail this far back for this component, so this day may have recorded more than is shown.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://mcp.signal8.ai/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=signal8.ai | CN=WE1,O=Google Trust Services,C=US | 11 Oct 2026 | 9 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 347a136f1a654b920efbad0024c768c6 |
| SANs: signal8.ai, *.signal8.ai | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.signal8.ai. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | Trust anchor | 20326, 38696 | 8, 8 | Verified |
| ai. | DS published | 1814, 3799 | 8, 8 | Verified |
| signal8.ai. | No DS | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://mcp.signal8.ai/.well-known/oauth-protected-resource/mcp"
Bearer resource_metadata="https://mcp.signal8.ai/.well-known/oauth-protected-resource/mcp" Protected resource metadata
| Document | https://mcp.signal8.ai/.well-known/oauth-protected-resource/mcp |
|---|---|
| Retrieved | Yes |
| Resource | https://mcp.signal8.ai/mcp |
| Authorisation server | https://api.signal8.ai/ |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.signal8.ai/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.signal8.ai/mcp | HTTPS enforced | 308 | https://mcp.signal8.ai/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_institutions Get Institutional Holders ~112
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 20, max: 100) |
| offset | number | – | Offset for pagination (default: 0) |
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institutions_leaderboards Get Institution Leaderboards ~98
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. Each section is capped by `limit`; it is not the full paginated AUM list.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results per section (default: 10, max: 50) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_intraday_bars Get Intraday Price Bars ~203
Get intraday OHLCV candles at 1, 5, 15, 30 or 60-minute resolution for intraday price action, volume patterns and short-term technical analysis. Each bar has open, high, low, close and volume. `extended: true` includes premarket (04:00 to 09:30 ET) and after-hours (16:00 to 20:00 ET) bars.
| Name | Type | Req | Description |
|---|---|---|---|
| extended | boolean | – | Include extended-hours bars (premarket 04:00–09:30 ET and after-hours 16:00–20:00 ET). Works at every resolution; bars are anchored at 04:00 ET. |
| from | integer | yes | Start time as UNIX timestamp |
| resolution | string | yes | Bar resolution in minutes |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| to | integer | yes | End time as UNIX timestamp |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_learn_guide Get Signal8 Academy Guide ~264
Free: works without an API key or Pro plan (the hosted server only needs a signed-in account). One Signal8 Academy guide as Markdown, by track and slug (as returned by the Academy search, 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, and each guide's url is its citable source.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | Guide slug (kebab-case), e.g. "what-is-dilution", "s1-vs-s3-baby-shelf", "form-4-codes". |
| track | string | yes | Academy track: "dilution" (dilution & toxic financing), "filings" (reading SEC filings), "market-structure" (halts, short interest, float, splits, congressional trading), or "signal8" (using Signal8,… |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_legislative_calendar Get Legislative Calendar ~438
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, billKey (the "<congress>-<type>-<number>" bill id), and tweet/plain summaries. An empty calendar is a normal state: nothing market-relevant is scheduled in the window, not an error. Defaults: from=today, to=+14 days, minRelevance=low. affectedTickers contains verified rows only: every ticker carries a verbatim evidenceQuote substring-verified against the actual bill text. sponsorTradeFacts are restatements of public STOCK Act disclosures with verbatim amount brackets and both transactionDate and disclosureDate (disclosures lag trades by up to 45 days); a fact is a disclosure on record, not evidence of wrongdoing. Vote windows are predictions: window.provenance is the trust level ('uc_explicit' is exact; 'rule_xxii_computed' is a medium-confidence estimate) and window.granularity is how precise the window is (exact time vs day vs week).
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Earliest vote-window date inclusive (YYYY-MM-DD, default: today) |
| limit | number | – | Maximum results to return (default: 25, max: 100) |
| minRelevance | string | – | Minimum market relevance: 'low' (default), 'medium', 'high', or 'none' (explicit opt-in to the full audit trail incl. non-market items, rarely useful) |
| offset | number | – | Pagination offset (default: 0) |
| to | string | – | Latest vote-window date inclusive (YYYY-MM-DD, default: today + 14 days) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_market_breadth Get Market Breadth ~93
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): a snapshot of overall market state.
| Name | Type | Req | Description |
|---|---|---|---|
| universe | string | – | Universe to aggregate over: sp500, ndx, or all (default sp500) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_market_metrics Get Market Metrics ~55
Get computed market metrics for a company: volume averages, volatility, simple moving averages and trend direction, beyond the basic quote.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_market_news Get Market News (Top Stories) ~137
Get the latest market-wide news across all tickers, most recent first (not filtered to one company). Every item is significance-classified at ingest (critical | major | standard); the default filter of critical,major is the "top stories" view. Served by the /news/latest public endpoint (added 2026-07-29; 404 on a backend without it).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum items to return (1-50). Defaults to 10. |
| significance | string | – | CSV of levels to include, e.g. "critical,major" (default) or "critical,major,standard". |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_news Get Company News ~231
Get recent news articles, press releases and AI-analysed SEC filings for a company. 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 and 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. `pressReleasesOnly` returns only official company press releases (no filings).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of articles to return (1-20). Defaults to 10. |
| pressReleasesOnly | boolean | – | When true, return only official company press releases (exclude third-party news). |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_ownership Get Comprehensive Ownership ~527
Get the unified ownership breakdown for a company, combining Form 4 insider holdings, 13F institutional holdings and 13D/13G activist positions, resolved across the three form types into one view. allHolders is paginated via limit/offset (default 100); aggregate stats (institutional / insider / beneficial totals and percentages, plus `retail`) are always complete. `sharesOutstanding`, the denominator of every percentage, is dated by `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` ("stated" = issuer's statement date; "checked" = last confirmed against a vendor; "none" = date not recorded) and `sharesOutstandingSource`; a count is only meaningful with its date. `retail` is the unattributed residual (shares no filing accounts for, including recent offering buyers and non-filing holders): an upper bound on retail, not a retail count; withheld (null) with `retail.reason: "filed_exceeds_outstanding"` when counted filings exceed shares outstanding. A bucket whose shares exceed shares outstanding by more than a 2% timing tolerance has `percentOfOutstanding` withheld (null, `percentWithheldReason: "ownership_exceeds_outstanding"`) with `totalShares` still published (e.g. another share basis such as ordinary shares vs ADSs, another class, lent shares reported twice, filings predating a buyback); the shares and the reason are the measurement, and the withheld percent is not 100%, 0% or any other percent. In that case `retail.reason` is `ownership_exceeds_outstanding` and `filedSumPercent` is absent. A null percent with no `percentWithheldReason` means no share count was available. `beneficial.staleShares` / `stalePercentOfOutstanding` / `staleHolderCount` is a measured subset of the counted 5%+ total resting on 13D/G schedules >= 24 months old with no newer reaffirming filing by the holder family: not a deduction. `reaffirmedBy` names the newer filing; `staleFiling.ageMonths` marks a row with none. `stalePercentOfOutstanding: null` is not measurable, not zero.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum holders to return in allHolders (default: 100, max: 100) |
| offset | integer | – | Offset for pagination (default: 0) |
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_policy_events Get Policy Events ~296
List mirrored executive orders (policy events) from the Federal Register feed. Filterable 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. 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 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), not culpability, and matchCount is how many EOs matched in the window (a noise indicator).
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Earliest signing date inclusive (YYYY-MM-DD) |
| limit | number | – | Maximum results to return (default: 25, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| q | string | – | Free-text search over event titles |
| sector | string | – | Filter by canonical affected sector (one of the 11 canonical sector strings, e.g. "Healthcare", "Financial Services", "Energy") |
| to | string | – | Latest signing date inclusive (YYYY-MM-DD) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_policy_trade_leaderboard Get Policy-Trade Leaderboard ~304
Rank politicians (Congress + executive branch) by trades that occurred near executive-order signings in sectors the orders affect, i.e. who trades most around policy activity. Each row includes the politician, flaggedTradeCount, totalEstimatedUsd, topSector, and an exampleEvent. Defaults to the "traded 1-14 days before signing" lens; same-day trades are always excluded. 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 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), not culpability, and matchCount is how many EOs matched in the window (a noise indicator).
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | – | Which side of the signing date to include: 'before' (default), 'after', or 'both' |
| limit | number | – | Maximum results to return (default: 50, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| sort | string | – | Ranking order: 'usd' (default, estimated USD value) or 'count' (flagged-trade count) |
| window | number | – | Match window in days around the EO signing date (default: 14, max: 30) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_policy_trade_overlap Get Policy-Trade Overlap ~353
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. 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 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), not culpability, and matchCount is how many EOs matched in the window (a noise indicator).
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | – | Which side of the signing date to include: 'before' (default), 'after', or 'both' |
| limit | number | – | Maximum results to return (default: 50, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| slug | string | yes | Politician URL slug: congressional ("sen-nancy-pelosi", "rep-...") or executive branch ("exec-...") |
| window | number | – | Match window in days around the EO signing date (default: 14, max: 30) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_political_sector_rotation Get Political Sector Rotation ~166
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, showing where political trading activity is concentrating (e.g. "politicians piled into Energy this month"). Sortable by count or dollar volume.
| Name | Type | Req | Description |
|---|---|---|---|
| chamber | string | – | Optional chamber filter (default: all chambers merged) |
| limit | number | – | Top-N sectors to return (default: 15, max: 30) |
| sortBy | string | – | Rank sectors by trade count or summed dollar volume (default: count) |
| windowDays | number | – | Lookback window in days (default: 30, max: 90) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_activity Get Politician Activity ~90
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.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | Politician URL slug (e.g., "sen-nancy-pelosi") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_committees Get Politician Committees ~97
Get committee assignments for a politician including committee name, chamber, role (Chair, Ranking Member, etc.), and subcommittee memberships, for relating trading activity to committee oversight areas. The politician is identified by URL slug (e.g. "sen-nancy-pelosi").
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | Politician URL slug (e.g., "sen-nancy-pelosi", "rep-nancy-pelosi") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_detail Get Politician Detail ~94
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. The politician is identified by URL slug (e.g. "sen-nancy-pelosi").
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | Politician URL slug (e.g., "sen-nancy-pelosi", "sen-tommy-tuberville") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_disclosures Get Politician Disclosures (Feed) ~503
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 every trade of the report sorted largest bracket first, with qualifyingTradeCount for how many clear the threshold. Polling contract: the returned nextCursor, sent back as `since`, returns each disclosure exactly once (for the same minAmount and kinds); nextCursor is returned even when items is empty, and hasMore true means more items are immediately available. 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` marks a report previously delivered under the same `id`. filingDelayDays (longest lag), isLateFiling (>45 days) and lateTradeCount exclude trades with transactionDateSuspect=true: a date lagging its own otherwise on-time report by about one year is a probable mistyped year upstream, listed as filed and counted in suspectDateCount, and its lag is not a measured filing delay. owner null means the filing did not state an owner ("Not stated"); it does not mean "Self". amountRange is the filed bracket; amountMin null means the bracket was not parsed (not $0), amountMax null means "Over $50,000,000" or unparsed, and ticker null means a non-equity asset.
| Name | Type | Req | Description |
|---|---|---|---|
| kinds | array | – | Which disclosure kinds to include (default: both). 'congressional' = STOCK Act PTRs (Senate + House), 'executive' = OGE 278-T (Cabinet-level officials). |
| limit | integer | – | Maximum disclosures to return (default: 50, max: 100) |
| minAmount | integer | – | USD threshold compared to each trade's bracket lower bound (default: 50001). A disclosure qualifies when ANY of its trades meets it. |
| since | string | – | Opaque cursor: the nextCursor from a previous call, verbatim. Omit only on the first call. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_donor_summary Get Politician Donor Summary ~133
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. Answers "who funds <politician>" or "biggest donors to <politician>" style questions without paging the full donor list.
| Name | Type | Req | Description |
|---|---|---|---|
| cycle | string | – | Election cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle. |
| slug | string | yes | Politician URL slug (e.g., "sen-nancy-pelosi") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_donors Get Politician Donors ~241
Get the paginated list of campaign donors (individuals and PACs) for a single politician across one election cycle: the full donor list behind questions like "who donated to <politician>". Returns donor name, amount, type, employer/occupation (individuals), and committee details (PACs).
| Name | Type | Req | Description |
|---|---|---|---|
| cycle | string | – | Election cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle. |
| limit | number | – | Maximum results to return (default: 50, max: 100) |
| minAmount | number | – | Minimum contribution amount in USD (filters out small donors) |
| offset | number | – | Pagination offset (default: 0) |
| slug | string | yes | Politician URL slug (e.g., "sen-nancy-pelosi") |
| sortBy | string | – | Sort field: 'amount' (default), 'date', or 'name' |
| sortOrder | string | – | Sort direction (default: 'desc') |
| type | string | – | Filter by donor type: 'individual', 'pac', or 'all' (default: 'all') |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_late_filers Get Politician Late Filers ~193
Get STOCK Act late filings: trades whose disclosure was filed more than 45 days after the transaction, the latest the STOCK Act allows. Lateness is a fact about the dates on the report, not a finding of illegality or a violation: an extension, an amendment or a late notice of the trade can each explain a long gap. Sorted by filing delay descending. Excludes trades whose transaction date is suspect (a probable mistyped year upstream, about one year off the rest of its own on-time filing); their delay is not measured. owner null means not stated; it does not mean "Self".
| Name | Type | Req | Description |
|---|---|---|---|
| days | number | – | Lookback period in days (default: 180, max: 730) |
| limit | number | – | Maximum results to return (default: 10, max: 50) |
| offset | number | – | Pagination offset (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_pnl Get Politician P&L ~236
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) x matched shares); open positions are marked to the current price for unrealized P&L. Covers Congress (sen-/rep-) and executive branch (exec-) officials, identified by URL slug. 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).
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | Politician URL slug: congressional ("sen-nancy-pelosi", "rep-...") or executive ("exec-trump-donald-j") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_recent_trades Get Recent Politician Trades ~135
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.
| Name | Type | Req | Description |
|---|---|---|---|
| days | number | – | Lookback period in days (default: 30, max: 365) |
| direction | string | – | Filter by direction: 'buy' or 'sell' |
| limit | number | – | Maximum results to return (default: 50, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_roles Get Politician Roles ~65
Get committee leadership roles (Chair, Ranking Member, etc.) for a politician, identified by URL slug (e.g. "sen-nancy-pelosi").
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | Politician URL slug (e.g., "sen-nancy-pelosi") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_scorecard Get Politician P&L Scorecard ~408
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 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. The card prints "Estimates from disclosed amount ranges (±25–40%). Not investment advice." The `metric` field defines the figure: P&L on trades disclosed inside the window only, i.e. 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 (the publishable form, rather than "Sen." or "D-CA"), estimatedPnl, winRate (0-1; null = no position closed in the window, which is not measured and not 0%), tradesInWindow, unrealizedMeasured, and portraitUrl (always null for executive officials). benchmark.available false means SPY was not measured (benchmark.reason); it is not a 0% return. available false with reason "pending" means the window has not been computed yet, not that nobody traded.
| Name | Type | Req | Description |
|---|---|---|---|
| window | number | – | Trailing window in days. Only 90 is supported (default 90). |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_transactions Get Politician Transactions ~160
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 50, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| slug | string | yes | Politician URL slug (e.g., "sen-nancy-pelosi") |
| sortBy | string | – | Sort field (default: 'date') |
| sortOrder | string | – | Sort direction (default: 'desc') |
| type | string | – | Filter by transaction type: 'Purchase' or 'Sale' |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politician_votes Get Politician Votes ~118
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 10, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| slug | string | yes | Politician URL slug (e.g., "sen-nancy-pelosi") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politicians Get Politicians ~196
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 10, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| party | string | – | Filter by party: 'D' (Democrat), 'R' (Republican), 'I' (Independent) |
| search | string | – | Search by politician name (partial match) |
| sortBy | string | – | Sort field (default: 'last_trade') |
| sortOrder | string | – | Sort direction (default: 'desc') |
| state | string | – | Filter by US state (2-letter code, e.g. "CA", "TX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politicians_most_active Get Most Active Politicians ~96
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 10, max: 50) |
| period | string | – | Lookback period (default: '90d') |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_politicians_pnl_leaderboard Get Politicians P&L Leaderboard ~145
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).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 25, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| sortBy | string | – | Sort field (default: 'pnl') |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_post_earnings_movers Get Post-Earnings Movers ~136
Get stocks that moved significantly after earnings reports on a given date. Returns pre-computed price changes joined with earnings surprise data, one row per ticker. Includes preEarningsClose, currentPrice, changePct, EPS/revenue actuals vs estimates, and surprise percentages. Filter by minimum absolute % change threshold.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | yes | Earnings date to check (YYYY-MM-DD) |
| limit | integer | – | Maximum results to return (default 25, max 100) |
| minChangePct | number | – | Minimum absolute % price change to include (default 5). Set to 0 for all. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_premarket_scan_history Get Premarket Scan History ~1,699
Historical market-wide premarket scan for one past ET trade date: every ticker with that day's premarket (default) session volume and its RVOL vs the trailing 30-day same-session baseline (the same per-ticker RVOL math, across the market for one date). Filters on RVOL, market cap, price and float support backtesting screens like "sub-$500M tickers with premarket RVOL > 5 on 2026-07-20"; rows ranked by RVOL descending. A future or non-trading date returns an empty list with a reason (not an error). Each row reports "baselineState" (why its RVOL is or is not null), "advRatio" (volume / trailing 30-session average full-day volume), "advDays", and the RVOL denominator "baselineVolume" with "baselineThin" (true under 200 shares): a 90x RVOL off a 1-share baseline is arithmetically correct and analytically meaningless, mostly an early-asOfTime effect on liquid large caps; minBaselineVolume / minSessionVolume exclude such rows. includeNoHistory=true surfaces high-volume tickers with no computable RVOL (e.g. first-session listings). meta reports asOfApplied / asOfIgnored / asOfIgnoredReason, so an unhonoured time-of-day request is visible. Tickers with no screener value for a price / market-cap / float filter (just renamed or listed) are not silently dropped: "meta.unscreened" reports their count, filter families and tickers, and includeUnscreened=true returns them tagged "unscreenedFilters"; that tag means the filter was not measured for the ticker, not that it is out of range.
| Name | Type | Req | Description |
|---|---|---|---|
| asOfTime | string | – | Optional true time-of-day premarket basis. Any HH:MM ET premarket time; snapped to the nearest 15-minute grid cutoff (04:00–09:15, ties resolve to the earlier cutoff). When set, RVOL is cumulative pr… |
| baselineDays | integer | – | Rolling RVOL baseline window, in trading rows (same-session days). Default 30; values outside 20-250 are clamped. This is the DENOMINATOR window: every RVOL in the response is that period's volume di… |
| date | string | yes | Required past ET trade date to scan (YYYY-MM-DD). Future/non-trade dates return an empty list. |
| includeNoHistory | boolean | – | Also return the cohort minRvol structurally hides: tickers with NO computable RVOL. Two kinds, told apart by each row's "baselineState": "no-history" (a new listing with no prior trading history at a… |
| includeUnscreened | boolean | – | Also return rows that could not be RATED against the price / market-cap / float bounds above, because company_screener_data holds no value for them (typically a symbol renamed or listed within the la… |
| limit | integer | – | Max rows to return (1–200, default 50). Rows are ranked by RVOL desc. |
| maxFloat | number | – | Maximum public float (shares). |
| maxMarketCap | number | – | Maximum market cap in USD (e.g. 500000000 for sub-$500M). |
| maxPrice | number | – | Maximum latest price in USD. |
| minBaselineVolume | number | – | Minimum RVOL DENOMINATOR in shares. Drops rows whose "baselineVolume" is below it, plus every row that has no baseline at all. This is the direct fix for a huge RVOL computed against a near-zero base… |
| minFloat | number | – | Minimum public float (shares). |
| minMarketCap | number | – | Minimum market cap in USD (market_cap_computed = price × shares outstanding). |
| minPrice | number | – | Minimum latest price in USD. |
| minRvol | number | – | Minimum RVOL (day session volume ÷ trailing 30-day baseline). Drops rows whose baseline is not yet warm. |
| minSessionVolume | number | – | Minimum RVOL numerator in shares: the scanned session's own volume. It measures whether enough actually traded, where minBaselineVolume measures whether the comparison is meaningful at all; neither s… |
| offset | integer | – | Pagination offset (default 0). |
| session | string | – | Session bucket to scan (default premarket). "all" = full extended day. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_premarket_scanner Get Premarket Scanner ~576
Get the live premarket scanner board (premarket small-cap runners): top premarket gainers and losers by absolute gap %, each row enriched with rvol, marketCap, floatShares, short interest, dilution and news/catalyst flags. Off-hours it falls back to the last session. includePennyStocks=true includes sub-$1 names. Float: floatShares is the measured point float (null on a withheld dilution-snapshot row, which then carries "floatEstimate" {shares, bound: "point" | "ceiling" | "floor", basis}). A point estimate is a number with its as-of and caveat; a ceiling or floor is a bound, not a figure: the float is not stated and is at most (ceiling) or at least (floor) that number, and is not a basis for arithmetic; neither present = not measured, not 0. The low-float board admits on that figure's value (an 8M ceiling is in, a 26M floor is out). Compliance: row "compliance", the compliance/split badges, "reverseSplitSignal" and "deficiencySignal" are Signal8 Pro; for other callers "compliance" is null with "complianceWithheld": "pro_required", meaning withheld, which is not "not measured" and not "no deficiency". Live volume (04:00-09:30 ET only; null outside the window or until the baseline is warm, never fabricated) has two different metrics, neither interchangeable with the other or with "rvol". "liveRvol" = live cumulative premarket volume / the trailing 30-session average cumulative volume at the same time of morning, with "liveRvolAsOf" the 15-minute grid cutoff (meta.asOf shows any time skew); "premarketPaceRatio" = the same volume / the trailing 30-session average full premarket session (>1.0 = already beat a normal premarket). universe="lowfloat" returns the separate low-float board (float under 10M, no top-100 slice) from the aggregator snapshot; an empty rows array with meta.reason when none is published is a normal off-hours state.
| Name | Type | Req | Description |
|---|---|---|---|
| includePennyStocks | boolean | – | Include sub-$1 (penny) stocks in the results. Default false. |
| sort | string | – | Sort key for the low-float board: "gap" (default) or "rvol". Ignored for universe="default", which is always gap-ranked. |
| universe | string | – | Which board to return. "default" (the default) is the movers-derived top-100 board. "lowfloat" is the low-float board (float < 10M shares, no top-100 slice). |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_price_target Get Price Target ~122
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results when list=true (default: 50, max: 100). Ignored for consensus. |
| list | boolean | – | false/omitted = consensus price target; true = per-analyst price-target list |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_quote Get Stock Quote ~476
Get the current stock quote for a company: price, volume, change, market cap and other real-time market data. Trading-halt fields halted, haltCode, haltReason, haltedAt and resumptionAt are present on every response (false/null when trading normally); a halted ticker returns the last-known quote instead of an error, or currentPrice null with halted true when nothing is recoverable. `priceAsOfDate` is the ET date the price printed (`priceAsOf` the trade time when known), not when it was read; null means the print date was not measured. `priceIsStale: true` means the price is an older held close (the last trade on that date), not a current trading price. `quoteSource: "screener_reference"` (foreign listings on US OTC that file nothing with the SEC, e.g. PGPHF) means `currentPrice` is a vendor reference price whose print date is not known, and every other market field is null (not measured). `marketCap` is the live price times the SEC-derived share count; when that count is unavailable it is null with `marketCapWithheldReason` set, which means not measured, not zero and not "no market cap". The count is `sharesOutstanding`, dated by `sharesOutstandingAsOf` and `sharesOutstandingAsOfKind` ("stated" = the issuer's statement date; "checked" = when it was last confirmed against a vendor; "none" = date not recorded), with a vendor-free `sharesOutstandingSource`. 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` and `marketCapEstimated: true` with `marketCapAsOf` (the count's date). Kind "stated_as_of" is the issuer's last stated count, a dated point rather than a bound or today's count; later issuances recorded in the filings are listed in `statedAsOf.events`, not added to it ("at_least" is the retired name of the same state).
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_recent_congressional_votes Get Recent Congressional Votes ~84
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 50, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_recent_material_filings Get Recent Material Filings ~146
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`.
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | – | Optional 8-K item codes (e.g. ["1.01","2.01"]) |
| limit | integer | – | Optional max rows (1–100, default 50) |
| universe | string | – | Index universe to scan (sp500, ndx, or dji). |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_recent_uplistings Get Recent Uplistings ~499
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 or announced column. dayOffset exists for catch-up reads of past days, not for forecasting, and a positive offset returns nothing. Every row has already happened; none is upcoming or expected. newSymbol: null is a published state, not a missing field: FINRA's row names only the old OTC symbol, and the new ticker is resolved by company-name match against Nasdaq SymDir and sometimes cannot be resolved. A guessed ticker could name a company that did not uplist, so an unresolved row names the old symbol and states that the new one was not resolved; the null is not a gap to fill and the row is still a real uplisting. confirmed: false means the symbol resolution is provisional and the new ticker is not asserted 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, and a cap-bracketed list with capUnknownCount above zero is not complete. 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 that uplisting activity has stopped.
| Name | Type | Req | Description |
|---|---|---|---|
| dayOffset | integer | – | Day offset from the US market day (default 0 = today). Negative values read past days. A positive value returns nothing: there is no forward-looking uplisting data. |
| maxMarketCap | number | – | Exclusive market-cap ceiling in USD (default 300000000). Rows with NO measured market cap are excluded and counted in capUnknownCount, never assumed to be under the ceiling. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_recently_sponsored_bills Get Recently Sponsored Bills (Cross-Politician) ~140
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.
| Name | Type | Req | Description |
|---|---|---|---|
| congress | number | – | Congress number to filter (default: 119 for current session) |
| limit | number | – | Maximum bills to return (default: 10, max: 50) |
| offset | number | – | Pagination offset (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_reverse_split_authority Get Reverse Split Authority ~811
Companies whose board still holds reverse-split authority it may use without another shareholder vote: an approval on file (shareholder vote or written consent; tracker states consent_pending, voted_approved, ratio_fixed) not past a stated expiry, one row per company (its newest approval; other live ones in otherLiveAuthorityEpisodeIds). Soonest stated expiry first. Each row is the Reverse Splits page row (ticker, companyName, ratio, exchange, approvalPath, domicile, splitAuthority, authorityTerms, sourceUrl / sourceAccession, sourceDocuments: every document behind the approval with accession or URL) plus an "authority" block: episodeId, state, approvedDate, approvedRatio {fixed, min, max} (the per-split ratio or range approved), cumulativeCap (cap on the product of every split drawn on it), multiStep, expiresOn, expiryTerm, daysUntilExpiry, and room: capRatio + capBasis ("cumulative_cap", or "single_split_maximum" = no cumulative cap stated and nothing drawn, so one split up to the approved maximum), perSplitMax, usedSplits + usedRatio (product of the splits already executed on it; 1 = none drawn), remainingRatio (capRatio / usedRatio), exhausted, nextSplitMax, pendingRatio (a ratio the board set that has not taken effect) and a one-line label. The approval route is approvalPath.path (shareholder_vote, written_consent, fpi_written_resolution, pre_approved_range, board_only, depositary_ratio_change or unknown = "Not determined", not "no vote"). Ratios are 1-for-N factors and combine by product. Not measured is not "none remaining": room.remainingRatio null comes with room.notMeasuredReason ("cumulative_cap_not_stated", "ratio_not_stated" or "drawn_split_ratio_not_stated"), meaning the remaining room is not measured for that reason. Such rows are listed, never dropped, and are not full. expiresOn null = the documents read state no expiry, not "never expires". An empty list is what the tracker has on file, not evidence that no board holds authority. This screen cover…
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | nextCursor from the previous page. Omit for the first page. |
| exchange | array | – | Listing venues to keep: NASDAQ, NYSE, AMEX (NYSE American), OTC, or not_measured. Empty = every row. |
| expiringBefore | string | – | Keep rows whose stated expiresOn is before this YYYY-MM-DD day. Rows with no stated expiry never match. |
| limit | integer | – | Rows per page, 1 to 200 (default 50). |
| minRemaining | number | – | Keep rows whose room.remainingRatio is at least this N (1-for-N), e.g. 50. Rows not measured never match. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_reverse_split_lifecycle Get Reverse Split Lifecycle ~672
The reverse-split lifecycle Signal8 has tracked from a company's own SEC filings (proxies, 8-K Items 3.03/5.03/5.07, 6-Ks): one episode per split authority, newest first, each with its state (proposed, vote scheduled, approved, ratio set, effective date announced, charter filed, ... or closed), the ratio or authorised range, meeting / vote / effective dates, the state history, and the events behind it oldest first. Every event carries its source (accession and an EDGAR sourceUrl) and its facts; every stated fact carries the verbatim quote it was read from. Not stated means not measured, not "no": a fact with notStated:true (or a null field) means the documents read did not say it, not that it is false, zero or absent. coverage "unresolved" means the ticker could not be matched to an SEC registrant (not measured). coverage "tracked" with an empty episodes list means no episode has been tracked from the filings read since the tracker started; it is not evidence that no reverse split is planned. effectiveDate is the date the issuer stated, strictly parsed: a scheduled date, not a confirmation that the split happened (it can be postponed or abandoned). A conditional date ("the 25th trading day after the Trigger Event") is returned verbatim in effectiveCondition and is not a date; no date is computed from it. verification is copied from the tracker: "provisional" = one source, not cross-checked (the default, not "doubtful"); "verified" = cross-checked. Approval (present only when approvalAvailable is true): each episode carries approvalPath {path, label, quote, sourceUrl}: shareholder_vote, written_consent, fpi_written_resolution, pre_approved_range (the board set the ratio inside a range shareholders approved earlier), board_only (the company's own filing states no shareholder approval was required, quoted), depositary_ratio_change (an ADS ratio change by the depositary, no shareholder vote, the ordinary shares not consolidated) or unknown. The response also carries do…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | US stock ticker, e.g. "ABCD" or "BRK.B". |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_reverse_splits_list Get Reverse Splits List ~1,588
The cross-company reverse-split lists the Signal8 Reverse Splits page serves, one view per call. view "upcoming" = splits with an effective date from tomorrow through 30 US market days ahead, the vendor market calendar union Signal8's SEC-filing tracker (filings, exchange and depositary notices); "recent" = the same union for effective dates in the past 30 days; "approved_no_date" = tracked episodes where shareholders (or the board, where no vote is required) have approved a reverse split but no effective date is stated yet; "vote_pending" = tracked episodes where a reverse split is proposed and the shareholder vote has not happened yet. A security sits on exactly one view (upcoming, then recent, then approved_no_date, then vote_pending), with one exception: a split the company's own filing dates is on upcoming even when the same company also has a different, later split proposal awaiting a vote, which is then on vote_pending too. Each row carries ticker, companyName, hasPage, source ("market_calendar" or "tracker"), stage + stageLabel, trackerState, ratio (or ratioMin / ratioMax for an authorised range), meetingDate, approvedDate, effectiveDate, effectiveDateSource, marketCalendarAgrees / marketCalendarDate / marketCalendarRatio, effectiveCondition, verification, marketConfirmation (recent only), marketCapUsd + capBucket, securityType, exchange, cik, sourceUrl / sourceAccession / sourceFormType / sourceFiledDate / sourceLabel, sourceDocuments (every document behind the episode), quote, adsRatioChange, approvalPath, domicile, splitAuthority and authorityTerms. Null means not measured or not stated: not "no split", not zero, not "no vote needed" and not "no date". A null ratio = the documents state none yet; a null marketCapUsd = cap not measured (capBucket is then null, not "nano"); a null verification = no tracked episode; a null domicile = not measured (not "Delaware"); a null marketConfirmation = the price step was not measured. An empty rows array on a view is…
| Name | Type | Req | Description |
|---|---|---|---|
| board | array | – | ["without_vote"] keeps only rows whose issuer can split without a shareholder vote on the evidence of its OWN filing or charter (a domicile default never matches). Pro-only fact: on a non-Pro key it… |
| cap | array | – | Market-cap buckets to keep (the premarket scanner's): nano, micro, small, mid, large, or not_measured for rows whose cap was not measured. Empty = every row. |
| domicile | array | – | Registrant domicile groups to keep: bvi, nevada, cayman, marshall_islands, bermuda, delaware, other, or not_measured. Pro-only fact: on a non-Pro key it applies to unlocked rows only. |
| exchange | array | – | Listing venues to keep: NASDAQ, NYSE, AMEX (NYSE American), OTC, or not_measured. Empty = every row. |
| limit | integer | – | Rows per page, 1 to 200 (default 50). |
| offset | integer | – | Rows to skip (default 0). Locked rows count towards paging. |
| type | array | – | Security types to keep: common, adr (ADR / ADS), ordinary (foreign ordinary shares), other, or not_measured. Empty = every row. |
| view | string | – | Which list: "upcoming" (effective tomorrow through 30 market days ahead; the calendar UNION the tracker), "recent" (effective in the past 30 days), "approved_no_date" (approved, no effective date sta… |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_rvol_history Get RVOL History ~700
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); the series shows 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 is not comparable to rvol.
| Name | Type | Req | Description |
|---|---|---|---|
| asOfTime | string | – | Optional true time-of-day premarket basis. Any HH:MM ET premarket time; snapped to the nearest 15-minute grid cutoff (04:00–09:15, ties resolve to the earlier cutoff). When set, the series is the pre… |
| baselineDays | integer | – | Rolling RVOL baseline window, in trading rows (same-session days). Default 30; values outside 20-250 are clamped. This is the DENOMINATOR window: every RVOL in the response is that period's volume di… |
| days | integer | – | Number of trailing calendar days of history (1–90, default 30). |
| session | string | – | One session bucket; unset returns all four sessions. |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_senate_trades_by_ticker Get Senate Trades by Ticker ~100
Reverse lookup: which politicians recently traded a given ticker. Returns recent STOCK Act disclosures for that symbol with politician info, transaction type, and amount.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 50, max: 100) |
| offset | number | – | Pagination offset (default: 0) |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "NVDA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_short_interest Get Short Interest ~209
Get short interest data for a company: short volume, short ratio, days to cover and short percent of float. A null `shortInterestPercent` always carries `shortInterestPercentReason`: "float_not_point" means the float on record is a bound or estimate, and a percent-of-float is not computed from a bound or estimate; "float_unavailable" means no float of any kind is on record; "short_pct_of_float_unreconciled" means a point float existed but the ratio was implausible or the split basis could not be resolved; "float_class_scope_mismatch" means the float on record pools more than one separately listed share class (e.g. Class A plus Class D) while short interest is reported for this symbol's class only, so the two figures are not comparable. A null percent means not measured; it does not mean 0%.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_split_history Get Stock Split History ~333
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). A null `cumulativeReverseSplitRatio2yr` means the cumulative cannot be stated, which is not the same as no reverse splits; `cumulativeWithheldReason` distinguishes the two. `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. Not every vendor "split" is a split: stock dividends and other distributions under 25%, spin-off price factors and consolidations under 1.5x are returned in `nonSplitAdjustments` (each with a `kind` and `meaning`), not in `splits`, and are excluded from `totalSplits`, `reverseSplitCount` and the cumulative. They are not splits.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_split_performance Get Price Performance After Each Split ~550
Get how one ticker's price moved in the N calendar days after each stock split it already executed (forward or reverse), newest first, up to 30 splits, in one call. Past executed splits only: upcoming, approved or pending splits are not included. Each split row carries executionDate, ratio ("1-for-12" = 12 old shares became 1), kind (reverse | forward | other), lastPreSplitDate, firstPostSplitDate, firstPostSplitCloseAsTraded, windowEndDate, windowEndCloseAsTraded, sessionsInWindow, changeFromFirstPostSplitClosePct (first post-split close to the last close in the window), changeFromLastPreSplitClosePct (the last pre-split close moved onto the post-split basis by the split ratio, so the split itself is not counted as a move), lowestLowVsFirstClosePct and highestHighVsFirstClosePct. Basis: the response field basis states it. Each row is on that split's own post-split basis (daily bars as traded); prices are not adjusted onto today's basis, so % moves are comparable across rows and prices are not. A null value means not measured; it does not mean 0 or "no move". Causes: a missing bar, a bar print Signal8 refused as implausible, or a window that reaches a later split (anotherSplitInWindow: true, its % withheld). notMeasured on a row names the reason per null field; dataGap = no daily bar within 7 days after the split. Stock dividends, spin-off price factors and consolidations under 1.5x that the vendor files as splits are not splits: they are listed in nonSplitAdjustments (kind, meaning), never measured or counted, and a split window containing one has its % withheld (nonSplitAdjustmentInWindow: true). An empty splits array means no executed split is on record in Signal8 split history, which is not evidence that none occurred. splitsMeasured and fellInWindow count only measured rows. asOf is the latest window-end bar date. These are past price moves, not a forecast and not investment advice. Included in Signal8 Pro: an HTTP 403 FEATURE_NOT_AVAILABLE means the API key's…
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Most recent executed splits to measure, 1 to 30 (default 20). |
| ticker | string | yes | US stock ticker, e.g. "TOPS". |
| windowDays | integer | – | Calendar days after each split to measure, 1 to 365 (default 30). |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_stock_price_change Get Stock Price Change ~88
Get percentage price changes for a stock across multiple timeframes (1D, 5D, 1M, 3M, 6M, YTD, 1Y, 3Y, 5Y, 10Y and MAX) without full candle data.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_top_movers Get Top Market Movers ~411
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). An 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; includePennyStocks=true includes sub-$1 movers.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | Optional past trade date (YYYY-MM-DD). When set, returns that day's top gainers/losers computed on a historical daily close-to-close basis from split-adjusted daily bars (NOT intraday, NOT session-sp… |
| direction | string | yes | Mover direction: gainers, losers, or active (volume) |
| includePennyStocks | boolean | – | Loosen penny-stock artifact guards. Default false enforces prev_close >= $1 and a $1M dollar-volume floor. Set true to allow sub-$1 movers (prev_close >= $0.10, no dollar-volume floor). The ABS(chang… |
| limit | integer | – | Optional max rows (1–100). Backend default applied when omitted. |
| session | string | – | Session window: premarket (4:00–9:30 AM ET), regular (RTH close-to-close, default), afterhours (4:00–8:00 PM ET). Live-only; rejected (400) when combined with date. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_trading_halts Get Active Trading Halts ~160
List securities currently halted 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, haltAgeDays, and the scheduled resumptionAt when one is set. `halts` holds halts that began within the last 30 days; `longRunningHalts` holds older halts the feed still lists (often regulatory halts that have lasted months or years); they are not new halts. `asOf` is when the list was read. An empty list is a normal state (no active halts right now), not an error. Halt rows carry no price.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
How do I install the Signal8 MCP server?
Signal8 is a hosted endpoint at https://mcp.signal8.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.signal8.ai
claude mcp add --transport http ai-signal8-mcp 'https://mcp.signal8.ai/mcp'
What is the Signal8 MCP server?
Signal8 is an MCP server listed in the public MCP registry as ai.signal8/mcp. SEC filings, dilution, insider & institutional ownership, and political-trade data for AI agents. This page covers its hosted endpoint (https://mcp.signal8.ai/mcp).
Is the Signal8 MCP server safe to use?
Signal8 scores 92 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Signal8 MCP server expose?
Signal8 exposes 113 tools: search_companies, get_company_profile, get_quote, get_market_metrics, get_short_interest, and 108 more. Their descriptions and schemas cost roughly 37,618 tokens of context every time the server is loaded.
Does the Signal8 MCP server require authentication?
Yes. Signal8 asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Signal8 MCP server still maintained?
Signal8 is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What did VerifyMCP test on the Signal8 MCP server?
VerifyMCP ran 13 checks on Signal8, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.