Signal8
REMOTE · MCP.SIGNAL8.AI · 2 COMPONENTS
SEC filings, dilution, insider & institutional ownership, and political-trade data for AI agents.
Available components
Last scanned (11 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 →
define_term Define a Market / SEC Term ~220
Free: works without an API key or Pro plan (the hosted server only needs a signed-in account). Looks 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; the Academy guide search may still cover it.
| Name | Type | Req | Description |
|---|---|---|---|
| term | string | yes | Term, alias or glossary slug, e.g. "baby shelf", "ATM", "full-ratchet". |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_accumulation_snapshot Get Accumulation Snapshot ~88
Get intraday accumulation/distribution metrics for the current or most recent trading session: session VWAP, volume above and below VWAP, estimated buy vs sell volume (tick rule), volume by time period (morning/midday/afternoon) and comparison to average volume, as a measure of real-time buying and selling pressure.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_analyst_consensus Get Analyst Consensus ~60
Get the analyst ratings consensus for a company: average target price, number of analysts, buy/hold/sell breakdown and consensus recommendation.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_analyst_coverage Get Analyst Coverage ~55
Get aggregated analyst coverage for a ticker: a consolidated view of grades, targets and coverage breadth across covering firms.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_analyst_estimates Get Analyst Estimates ~107
Get forward analyst estimates for a company: EPS, revenue, EBITDA and net income (low/high/avg) with analyst counts, for annual or quarterly periods.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of estimate periods to return (1-40). Defaults to 8. |
| period | string | – | Estimate period: "annual" (default) or "quarter". |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_analyst_grades Get Analyst Grades ~83
Get recent analyst grade actions (upgrades, downgrades, initiations) for a ticker, including the grading firm and previous/new grade.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 10, max: 50) |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_baby_shelf_capacity Get Baby-Shelf (S-3 I.B.6) Raisable Capacity ~735
SEC Form S-3 General Instruction I.B.6 "baby shelf" capacity: how much the issuer may raise off an effective shelf now, under the one-third-of-public-float cap that applies below a $75M non-affiliate float, less trailing-twelve-month takedowns. Returns the float basis, the cap, takedowns counted and the remaining raisable amount. `constraintApplies: false`: the cap does not bind (float >= $75M, primary offerings unlimited under I.B.1); this is neither "no capacity" nor a favourable finding. `constraintApplies: null` with `suppressedReason: "float_unmeasured"`: the float value was not measured, so whether the cap binds is unknown; it does not mean the cap does not bind and does not mean unlimited. A `suppressed` figure is withheld (e.g. an issuer delisted to OTC cannot run an S-3 primary): the capacity is not stateable, which is not $0 raisable. `suppressedReason: "ib6_pool_unattributed"`: the cap applies but trailing sales could not all be attributed, so $0 is a lower bound; `remainingCapacity` is null and capacity lies between `capacityLowerBoundDollars` and `capacityUpperBoundDollars` (at most the upper bound). `remainingCapacityBasis: "lower_bound"`: the figure counts unattributed rows whole, so capacity is at least `remainingCapacity` and at most `capacityUpperBoundDollars`. `staleIssuerStatement`: the issuer's own $0 statement dated `asOf` was not used because sales its window counted have since left today's window; it is what the issuer stated as of that date, not today's capacity. `poolDerivations`: ATM periods split by differencing the issuer's own stated sub-periods, each with its accession. `suppressedReason: "issuer_not_ib6_limited"`: the issuer's current prospectus offers more than the cap with no I.B.6 limitation (`issuerUnlimitedOffer`); whether the cap applies is not measured, and is neither $0, constrained nor unlimited. `floatValueBasis: "issuer_stated"`: the issuer's own printed I.B.6 float (`issuerStatedFloat`, prospectus <= 60 days old) was lowe…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_cash_history Get 10-Year Cash History ~99
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: available for any company with SEC filings.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_cash_position Get AI Cash Position ~410
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. Returns HTTP 200 for unavailable data; the `available` and `reason` fields say why. Coverage is partial: `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). An unavailable response says nothing about whether the company has cash or runway. The `scenarios` envelope is kept 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 does not model speculative raises; shelf or ATM capacity is not a modelled raise. 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). Top-level `currency` is 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, and nothing is converted, so `native.amount` is in `native.currency`, not dollars. monthsOfCashLeft is currency-neutral and stays populated. Included in Signal8 Pro: without it the call returns 403 FEATURE_NOT_AVAILABLE with `requiredTier: "pro"` (a tier upgrade; there is no add-on to buy).
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_cash_runway_calendar Get Cash Runway Depletion Calendar ~278
Companies projected to run out of cash within a date window, a cash-depletion counterpart to a lockup expiration calendar. Returns companies sorted by urgency (lowest runway first). Runway is an estimate based on the current burn rate; actual depletion depends on future capital raises and operational changes. The 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, not a reported zero balance.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Start date (YYYY-MM-DD, default: today) |
| industry | string | – | Filter by company industry (exact match, e.g. "Biotechnology") |
| limit | number | – | Maximum results to return (default: 25, max: 100) |
| market | string | – | Listing market: "otc" (OTC Markets) or "exchange" (NASDAQ / NYSE / NYSE American / Arca / Cboe) |
| offset | number | – | Offset for pagination (default: 0) |
| to | string | – | End date (YYYY-MM-DD, default: today + 90 days) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_clinical_trials Get Clinical Trials ~248
Get the ClinicalTrials.gov trials Signal8 has matched to a company: phase, status, conditions, interventions and key dates. The list includes trials the company leads and trials where it is only a collaborator on another organisation's study. Each trial carries metadata.sponsorRole ("lead", "collaborator", or null = not determined) and metadata.sponsor (the lead sponsor). Only lead trials are the company's own pipeline; a collaborator trial is a trial run by the named lead sponsor that the company collaborates on. `sponsorRole: "lead"` filters to the company's own trials. The response's total, leadTotal and collaboratorTotal count the full list, so a total above the returned count means the list was truncated. Dates of type ESTIMATED are sponsor projections, not facts.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of clinical trials to return (1-50). Defaults to 10. |
| sponsorRole | string | – | Filter by the company's role: "lead" (its own trials), "collaborator", or "all" (default). |
| ticker | string | yes | Stock ticker symbol (e.g., "MRNA", "PFE") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_company_profile Get Company Profile ~226
Get an enriched company profile by ticker symbol. Returns CIK, exchange, sector, industry, market cap, employee count, description, and other fundamental data in a lightweight response. Includes halted/haltCode/haltedAt trading-halt status on every call (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`. The count is only meaningful with its date. A null count means not measured; it does not mean zero. `cik: null` is a foreign issuer listed on US OTC that files nothing with the SEC (e.g. PGPHF): name, exchange and country come from reference data and every field Signal8 lacks is null.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_compliance Get Compliance Evaluation ~147
Get full compliance rules evaluation for a company: Nasdaq/NYSE deficiency detection, bid price tracking, and delinquent filing detection, combining SEC filing data, market data and exchange rules. Rules cover bid price, equity, reverse-split limit, market value of publicly held shares, publicly held shares, holders, timely periodic filings, annual meeting and audit committee, per exchange tier. Standards that could not be judged from any measurement are listed in `notEvaluated`: they are neither passing nor failing. Neither a `notEvaluated` standard nor the absence of a deficiency notice is evidence of compliance.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_coverage Get Dilution Coverage Status ~402
Coverage pre-check for whether Signal8 holds a dilution analysis for a company (a lighter read than the full dilution payloads): 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. `outOfScope` is a statement about the product (dilution analysis covers small-cap issuers only) and says nothing about that company's dilution. `stale` means the analysis is real but predates recent filings; `statusDetail` refines it: `newer_filing_unread` (`unreadFilings` names the material filings since: new or amended instrument, 424B5 pricing, split, 10-K) or `delisting_filed` (`delistingFiled` names the Form 25/25-NSE/15). A stale analysis describes the company as it stood before that filing, not as of today. A null `unreadFilings` means not measured, not "nothing filed since". Returns HTTP 200 for unavailable data; the `available` and `reason` fields say why. `not_covered` means this company has not been analysed yet, not that it has no dilution; an outage is a 5xx. A null, absent or withheld value means the figure was not measured; it does not mean "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a measured zero, so availability is carried by the availability, withheld and reason fields, not by the value. Included in Signal8 Pro: without it the call returns 403 FEATURE_NOT_AVAILABLE with `requiredTier: "pro"` (a tier upgrade; there is no add-on to buy).
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_history Get Shares-Outstanding and Cash History ~374
Historical shares-outstanding and cash series from SEC XBRL filings, with offering and material-cash-event overlays that line an issuance or a raise up against the share count and cash balance around it: share-count growth over time and 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 (a growth rate computed across a split boundary from these raw points is not meaningful). A gap in the series means no filing supplied that period, not that the share count was unchanged. Returns HTTP 200 for unavailable data; the `available` and `reason` fields say why. `not_covered` means this company has not been analysed yet, not that it has no dilution; an outage is a 5xx. A null, absent or withheld value means the figure was not measured; it does not mean "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a measured zero, so availability is carried by the availability, withheld and reason fields, not by the value. Figures are as of `meta.asOfDate`, from filings read through `meta.filingsThrough` (a stale date predates anything filed since). Share counts are on one 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 FEATURE_NOT_AVAILABLE with `requiredTier: "pro"` (a tier upgrade; there is no add-on to buy).
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_instruments Get Dilution Instrument Rows by Family ~885
One instrument family's rows with per-field SEC citations (accession number, filing date and the verbatim sentence each figure was read from). Families: warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings, rights; each call returns one family. `withheldRows` / `withheldRowCount`: rows that could not be verified were blanked, so every family total is a lower bound. An empty rows array on a covered company is a measured "none found in the filings read"; an unavailable response is not. `disputed` status (warrants / convertibles / preferred / exchangeables): the issuer's latest filing disputes the instrument; it is shown and excluded from totals (`summary.disputedInstrumentCount` / `disputedInstrumentShares`), and it is a disputed claim, neither outstanding nor retired. `contingencyTrigger: "event_of_default"`: the instrument is still outstanding and counted; it converts only on an event of default, which does not make it non-dilutive. Convertibles with `principalBasis` `aggregate_only` / `fair_value_only` / `conflict` / `undisclosed_since_issue`: the current balance is not measured (`principalOutstanding` null), and `principalOriginal` is the original principal, not the current balance. `conversionBasis: "formula_unanchored"`: no share count is computable, so the share count is unquantified, not zero. Convertibles / preferred `sharesIssuableBasis: "conflict_upper_bound"`: `sharesIssuableIfConverted` is an upper bound (up to that many shares) and `sharesIssuableIssuerStated` is the issuer's own count; the higher figure is not the issuer's count. Warrants with null `sharesUnderlying` beside `aggregateExerciseValueDollars` / `exercisePriceFloor` / `sharesCeilingAsFiled` are dollar-denominated or capped: `summary.warrantSharesCeiling` is a ceiling, not a count, and is not in `potentialNewShares`. `warrantCount` counts warrants, not shares. Shelfs: `babyShelfCurrentCapacityDollars` is a stored, dated figure, n…
| Name | Type | Req | Description |
|---|---|---|---|
| family | string | yes | Instrument family to return. One of: warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings, rights. |
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_performance Get Post-Offering Price Performance ~330
Post-offering price performance: for each recorded offering, how the stock traded after it priced or closed, i.e. how the market absorbed this issuer's past financings. This is history, not a forecast: it describes what happened after prior offerings and is not an expectation, a price target or a prediction about the 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. Returns HTTP 200 for unavailable data; the `available` and `reason` fields say why. `not_covered` means this company has not been analysed yet, not that it has no dilution; an outage is a 5xx. A null, absent or withheld value means the figure was not measured; it does not mean "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a measured zero, so availability is carried by the availability, withheld and reason fields, not by the value. Figures are as of `meta.asOfDate`, from filings read through `meta.filingsThrough` (a stale date predates anything filed since). Share counts are on one 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 FEATURE_NOT_AVAILABLE with `requiredTier: "pro"` (a tier upgrade; there is no add-on to buy).
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_risk Get Dilution Pressure Score and Risk Levels ~1,001
Dilution pressure score: 0-100 with a 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. Score: components whose inputs could not be measured are dropped from the denominator, so `score` is out of `scoreMaxMeasured`, not out of 100 (58 may be 58 out of 85), and `scoreUnmeasuredComponents` names the excluded components. A low numerator over a reduced denominator is not a low-risk reading. `scoreDenominatorThin: true` (under 70 measured points) marks a partial reading (N of M measured). A non-null `scoreWithheldReason` (e.g. `no_dilution_snapshot`) means there is no score, not a score of zero. With no filed share count, the share-count and market-cap components rest on `details.sharesOutstandingEstimate` {shares, kind, asOf, source}, and `details.marketCapSource` is `"derived_price_x_estimated_os"`: those components rest on an estimate. Levels: when `levelsAreLowerBound` (always present) is true, the levels named in `levelsLowerBoundScope` are a lower bound (floors), not measurements: "medium" means at least medium. Levels outside that scope are measured. `levelsLowerBoundReason` determines which levels are floored: `unquantified_live_instruments` floors overall and overheadSupply; `offering_capacity_unknown` and `market_cap_unmeasured` floor overall and offeringAbility, not `overheadSupply`; `os_growth_span_short`, `os_growth_issuance_floor` and `os_growth_rebased_partial` floor historical and overall; `overhead_capacity_unquantified` floors overheadSupply and overall. `details.levelBounds` per level: `floor` (unsized instruments at zero), `ceiling` (at filed maximum; null when some instrument has none), `exact`, `bestEstimate`, `estimated`, `estimateBasis`. An estimated level is a best estimate between its floor and ceiling, not a measurement. A null `overall` with a n…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_snapshot Get Dilution Snapshot Summary ~874
Dilution snapshot header (the largest dilution payload): summary totals (potential new shares, their % of shares outstanding, per-family totals), the cash position (anchor cash, monthly burn, estimated current cash, runway months), the float block, and `meta` provenance. Instrument rows are not included. Cash is in the filer's reporting currency: `cashPosition.currency` is ISO 4217 (null = not determined), and `cashPosition.currencySource: "presumed_usd"` is a presumption, not a measurement. Runway months are currency-neutral. Float: a non-null `floatWithheldReason` means the tradeable float was not measured, and no float figure is stated. A declined float block (`available: false`) may carry `refusal.withheldReason`, the same value the standalone float data serves. `tradeableFloatCeiling` is an upper bound, not a float: the float is at most that figure, and the ceiling is not an input to a market capitalisation, percent-of-float, short-interest ratio or comparison. Bounded totals: a null total (`potentialNewShares`, `totalWarrantShares`, `totalConvertibleShares`, `totalEquityPlanShares`, `totalExchangeableShares`, `totalRightsShares`, `potentialDilutionPercent`) may sit beside `<key>Bound: "ceiling"`, `<key>Ceiling` and `<key>Floor`: the total is at most the ceiling, the floor is the measured part, and the ceiling is not the total. With `potentialDilutionPercentBoundReason: "stated_count_denominator"` there is no floor: the ceiling divides by the last stated share count (as of `potentialDilutionPercentCeilingShareCountAsOf`), so the figure is at most that percentage against the count stated as of that date. `notMeasuredReasons[]` ({field, code, text, detail, expected {form, dueDate, status}}) gives the reason a figure is null; it is an explanation, not a value. `expectedFilings[]` lists the next periodic report(s): `status: "late"` means due by `dueDate` with none on file as of `checkedOn` and carries no information about why; `dueDate: null` means not computed. A…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_donor_aggregates Get Donor Aggregates ~144
Get market-wide campaign-finance rollups across every tracked politician for a cycle: total raised, top 10 individual donors, top 10 PACs, party/chamber/cycle splits, and a most-funded politician leaderboard. Answers questions like "who are the biggest donors in 2024?" or "which party raised more?".
| Name | Type | Req | Description |
|---|---|---|---|
| chamber | string | – | Filter by chamber: 'senate' or 'house' |
| cycle | string | – | Election cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle. |
| party | string | – | Filter by party: 'D', 'R', or 'I' |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_earnings Get Earnings History ~80
Get historical earnings data for a company: EPS actual vs estimate, revenue actual vs estimate, and surprise percentages (beats and misses).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of earnings periods to return (1-40). Defaults to 8. |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_earnings_calendar Get Earnings Calendar ~172
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.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | yes | Start date inclusive (YYYY-MM-DD) |
| maxMarketCap | number | – | Maximum market cap in USD (e.g., 2000000000 for under $2B) |
| minMarketCap | number | – | Minimum market cap in USD (e.g., 10000000000 for $10B+) |
| tickers | array | – | Optional ticker filter, e.g. ["AAPL","NVDA"] |
| to | string | yes | End date inclusive (YYYY-MM-DD) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_economic_calendar Get Economic Calendar ~120
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.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | Optional ISO-3166 alpha-2 country code (e.g. "US", "GB", "JP") |
| from | string | yes | Start date inclusive (YYYY-MM-DD) |
| to | string | yes | End date inclusive (YYYY-MM-DD) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_ended_reverse_splits Get Ended Reverse Splits ~740
Reverse-split episodes across companies that ended without the split taking effect, from Signal8's SEC-filing tracker: outcome "vote_failed" (shareholders did not approve), "abandoned" (the company said it will not proceed), "authority_expired" (an approval lapsed unused past its stated deadline) or "postponed_indefinitely". Splits that did happen are not in this list, and it is cross-company rather than one company's full history. Newest end first. Each row is the Reverse Splits page row (ticker, companyName, hasPage, ratio / ratioMin / ratioMax, trackerState, meetingDate, approvedDate, exchange, securityType, marketCapUsd, cik, approvalPath, domicile, splitAuthority, authorityTerms, verification) plus sourceUrl / sourceAccession and sourceDocuments (every document behind the episode, each with accession or URL) and an "ended" block: outcome, outcomeLabel, endedOn, endedOnBasis, closedReason (the tracker's own note, verbatim), voteDate, closingAccession / closingUrl (the filing that closed it, when one did). endedOnBasis says what endedOn is: "vote_date" or "meeting_date" = the vote as stated; "authority_expiry" = the stated last day of the authority; "closing_filing" = the ET day of the filing that closed it; "recorded" = none of those, the day the tracker recorded the close, which can be later than the event. Null means not measured or not stated. An empty list is what the tracker has on file for the window, not evidence that no company abandoned a split; completeness "tracked_episodes" = what the tracker has read from filings since it started, not every company. boundReached: true = the window held more episodes than one read returns (a narrower from / to window returns the rest). Locked rows are withheld, not absent. The facts are part of Signal8 Pro: a key not owned by a Pro account gets rows with locked: true and only ticker, companyName, hasPage and exchange (access "preview", lockedCount); a locked row means the facts were withheld from this caller. outcom…
| 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. |
| from | string | – | Earliest endedOn, YYYY-MM-DD (default: 365 days before "to"). |
| limit | integer | – | Rows per page, 1 to 200 (default 50). |
| outcome | array | – | Outcomes to keep: vote_failed, abandoned, authority_expired, postponed_indefinitely. Empty = all four. |
| to | string | – | Latest endedOn, YYYY-MM-DD (default: today, US Eastern). |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_etf_bundle Get ETF Bundle ~158
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).
| Name | Type | Req | Description |
|---|---|---|---|
| include | string | – | Comma-separated list of data types to include. Available: profile,holdings,sectors,countries,stock-summary,performance,news,analyst,comparables. Default (when omitted): profile,stock-summary,holdings… |
| ticker | string | yes | ETF ticker symbol (e.g., SPY, QQQ, IWM) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_executives Get Company Executives ~49
Get the key executives and officers of a company: name, title, compensation and tenure.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_exhibit_content Get Exhibit Content ~141
Get the full text/HTML content of a single exhibit from an SEC filing, by exhibit id. Returns the exhibit text along with exhibit_type, description, company_name, accession_number, and form_type. maxLength truncates large exhibits. Exhibit ids appear as `exhibitId` in a filing's document list, as `id` in a filing's exhibit list, and as `exhibit_id` on full-text search matches.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Exhibit ID (numeric), as listed for the filing's exhibits. |
| maxLength | number | – | Truncate content to this many characters. Response includes a "truncated" boolean. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_calendar Get SEC Filing Calendar ~140
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).
| Name | Type | Req | Description |
|---|---|---|---|
| formTypes | array | – | Optional SEC form types subset, e.g. ["10-Q"] |
| from | string | – | Start date inclusive (YYYY-MM-DD, default today) |
| to | string | – | End date inclusive (YYYY-MM-DD, default today + 45d) |
| universe | string | – | Optional index-universe filter (default "all") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_document Get Filing Document ~297
Get the full raw text/HTML content of an SEC filing by its internal filing ID (the `id` on filing search rows, or `filingId` from an accession-number lookup or a filing's document list). Returns the complete filing document, which can be very large (10-K filings can be 1MB+); maxLength truncates 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; the document is on sec.gov. Content is the whole submission as filed. Coverage: Signal8's SEC EDGAR archive, updated through the day, in its held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in). Before archiveFrom it holds only a scatter, so absence before archiveFrom is not evidence a filing was never filed; SEC EDGAR itself covers earlier periods. Record-only rows (bodyStored: false) have no stored body; the document is at its sec.gov URL.
| Name | Type | Req | Description |
|---|---|---|---|
| filingId | string | yes | Internal filing ID (numeric), the `id` on filing search rows. |
| maxLength | number | – | Truncate content to this many characters. Useful for previewing large filings. Response includes a "truncated" boolean when truncation is applied. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_documents Get Filing Documents ~380
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`. A document with an `exhibitId` has readable stored text under that exhibit id; `filingId` identifies the whole submission text. `exhibitId: null` means the document has no readable text row here (XML/XBRL/graphics, or text not held); its `secUrl` still opens it. When `readableIdsResolved` is false the id lookup failed and exhibitId is omitted (unknown, not "none"). `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 SEC EDGAR archive, updated through the day, in its held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in). Before archiveFrom it holds only a scatter, so absence before archiveFrom is not evidence a filing was never filed; SEC EDGAR itself covers earlier periods. Record-only rows (bodyStored: false) have no stored body; the document is at its sec.gov URL.
| Name | Type | Req | Description |
|---|---|---|---|
| accessionNumber | string | yes | SEC accession number, dashed ("0001193125-22-010026") or 18-digit compact form |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_exhibits Get Filing Exhibits ~97
List the readable exhibits (individual documents with stored text) within an SEC filing, by internal filing ID. Returns each exhibit's `id` (the exhibit id for reading that exhibit's text), exhibit type, description, content size and sec_url. Excludes XML/XBRL and documents with no stored text.
| Name | Type | Req | Description |
|---|---|---|---|
| filingId | string | yes | Internal filing ID (numeric), the `id` on filing search rows. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_structured Get Structured Filing Data ~593
Parsed, machine-readable data from an ownership or holdings filing, by accession number. `kind`: "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` (per transaction: table nonDerivative/derivative, securityTitle, transactionDate, code, acquiredDisposed A/D, shares, pricePerShare, sharesOwnedAfter, ownership D/I; derivatives add 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, 2025 onward): reporting persons, percent of class, items. 13F VALUES: `valueThousands` is the raw filed number, whose unit changed from thousands to whole dollars for filings on/after 2023-01-03; `valueUsd` / `totalMarketValueUsd` are normalised to dollars (null when the unit cannot be determined) and `valueUnit` names the unit. Holdings are capped at holdingsLimit (default 200); `holdingsTotal` is the full count, `holdingsTruncated` says whether rows were cut. A null value means not stated in the filing; it does not mean zero (a gift with no price has pricePerShare null; `directShares` is null on a derivative-only Form 4). `parsed.transactions` absent (not empty) means the table could not be read; totals still apply. `parsed: null` on a 13F means no information table (e.g. 13F-NT), not zero holdings. Unsupported forms, pre-2025 Schedule 13D/G and filings not in the archive return a not-found error with `details.reason`; their raw text remains readable as a filing document. Coverage: Signal8's SEC EDGAR archive, updated through the day, in its held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in). Before archiveFrom it holds only a scatter, so absence before archiveFrom is not evidence a filing was never filed; SEC ED…
| Name | Type | Req | Description |
|---|---|---|---|
| accessionNumber | string | yes | SEC accession number of a Form 3/4/5, 13F-HR or SCHEDULE 13D/G, dashed or 18-digit compact form |
| holdingsLimit | integer | – | 13F only: max holdings rows to return (default 200, max 5000) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_financials Get Financial Statements ~119
Get income statement, balance sheet and cash flow data for a company (revenue, profitability, debt, cash position), in annual, quarterly or trailing-twelve-month views.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of periods to return (1-40). Defaults to 8. |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| type | string | – | Financial period type: "annual", "quarter", or "ttm" (trailing twelve months). Defaults to annual. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_float Get Float Data ~1,227
Get float data for a company: floatShares, floatDefinition, the as-of date and, when the headline float is withheld, the bounds and labelled stand-ins that replace it. Null, absent or withheld means not measured; it does not mean "no float", "no restricted shares" or zero. A numeric 0 is a measured zero, so the reason and marker fields ("floatWithheldReason", "restrictedBlockCount", "provenance", "direction") carry the verdict, not the value alone. The share count the float was judged against ("basisSharesOutstanding") is dated by "sharesOutstandingAsOf" and "sharesOutstandingAsOfKind" ("stated", "checked", or "none" = date not recorded) and "sharesOutstandingSource". "floatDefinition": "tradeable" (shares outstanding minus affiliates minus restricted/unregistered blocks; filing-derived snapshot tickers), "non_affiliate" (the SEC I.B.6 figure, which includes restricted shares held by non-affiliates and is not a trader's float), "non_affiliate_estimate" (from ownership filings), "free_float" (vendor). "floatDefinition" and "source" appear only on snapshot results; an absent floatDefinition means the figure is not a filing-derived tradeable float. "nonAffiliateFloatShares" (snapshot tickers) is the input that baby-shelf / I.B.6 math rests on; it is not tradeable supply, and the tradeable float is not an I.B.6 input. Precedence: when the snapshot carries any figure ("floatEstimate", "tradeableFloatCeiling", an "affiliateBasis" range), "floatShares" stays null and that figure is the answer. A lower tier fills "floatShares" (its own "source" and definition, with "snapshotFloatWithheldReason" as provenance context, not a second refusal) only when the snapshot has no figure, or its only figure is a trivial ceiling (at or above 99% of the share count), which is stripped. Floors, points, every "shares_outstanding_ceiling" and an "affiliate_sizing_estimate" (with its "reason" and "unsizedAffiliates") are kept. A lower tier that also answered appears as "otherSourceFloat" {fl…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_float_history Get Float History ~178
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), showing the float on a past date and how it expanded across a dilution event. The series is forward-only: it began accumulating in mid-2026 and is not backfilled, so early or absent history is expected and an empty rows array is a normal result, not an error or a sign of delisting. Each row carries "source" ("computed", "sec_10k" or a market-data vendor tier) because float quality varies by provider.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Lookback window in trade dates. Default 90, clamped to 1-730. |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_historical_prices Get Historical Stock Prices ~181
Get historical OHLCV price candles for a stock at daily, weekly or monthly resolution, for a period shorthand (1M, 3M, 6M, 1Y, 5Y or the full history) or an explicit from/to UNIX timestamp window. The default is one year of daily candles.
| Name | Type | Req | Description |
|---|---|---|---|
| from | integer | – | Start date as UNIX timestamp (overrides period) |
| period | string | – | Lookback period shorthand (default: "1Y"). Ignored if from/to are provided. |
| resolution | string | – | Candle resolution: "D" (daily, default), "W" (weekly), "M" (monthly) |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| to | integer | – | End date as UNIX timestamp (overrides period) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_cluster_buys Get Insider Cluster Buys ~182
Detect cluster buying for a company: periods where 3+ distinct insiders bought shares (Form 4 open-market purchases, code P) within a 14-day window, over a lookback of 7, 30 or 90 days (default 90). Returns clusterBuyingDetected, the strongest clusterWindow, a summary (totalValue is null when no purchase disclosed a price, and is a floor when unpricedPurchaseCount > 0) and the deduped purchases. `asOf` and `lookback` state the date range covered; clusterBuyingDetected false means none in that range only.
| Name | Type | Req | Description |
|---|---|---|---|
| days | number | – | Lookback in days by transaction date: 7, 30 or 90 (default 90) |
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_cross_company Get Cross-Company Insider Trading ~279
Discover insider trading patterns across multiple companies (the whole universe, not a single ticker): insiders active across multiple companies, cluster buying patterns, and large transactions. Optional filters: 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.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date, YYYY-MM-DD (e.g., "2025-12-31"); a full ISO timestamp is cut to its date. |
| insiderName | string | – | Filter by insider name (partial match, e.g., "Musk" or "Cohen") |
| limit | number | – | Maximum results to return (default: 10, max: 100) |
| offset | number | – | Offset for pagination (default: 0) |
| startDate | string | – | Start date, YYYY-MM-DD (e.g., "2025-01-01"); a full ISO timestamp is cut to its date. Either bound may be given alone. An unparseable date is rejected, never ignored. |
| transactionType | string | – | Filter by transaction type: "P" (purchase), "S" (sale), "A" (grant/award), "M" (conversion) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_positions Get Insider Positions ~139
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the insider OR the issuer (company). Tried as issuer first, then falls back to insider. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_positions_by_ticker Get Insider Positions by Ticker ~210
Get per-insider position aggregates for a ticker: which insiders hold positions in the stock and their aggregate cost and value, derived from Form 4 filings. The figures are not lifetime totals: they cover only the Form 4 history Signal8 holds, which starts at the response's `coverageStart` date (repeated on each row), so every figure is "since coverageStart". 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` and `costBasisTotal` are null, which means not measured, not zero cost).
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_transactions Get Insider Transactions ~319
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. Optional year/month and transactionCode filters (purchases P, sales S, etc.) narrow results. 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, so one row is not a basis for a "% of position" figure. holdingsByInsider lists every line with its as-of filing; its sumOfReportedLines is not beneficial ownership (lines can be stale). A trade re-reported in a later filing is listed once.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 20, max: 100) |
| month | integer | – | Filter by transaction month (1-12, requires year) |
| offset | number | – | Offset for pagination (default: 0) |
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| transactionCode | string | – | Filter by SEC transaction code: P=Purchase, S=Sale, A=Grant/Award, M=Exercise/Conversion, F=Tax withholding, G=Gift, C=Conversion, W=Will, D=Disposition to issuer, etc. |
| year | integer | – | Filter by transaction year (e.g., 2025) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insiders Get Insider Trading Intelligence ~182
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum results to return (default: 20, 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_institution_activity Get Institution Activity ~72
Get an institution's position changes over recent 13F periods by CIK. Reads the number of trailing periods to include.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution |
| periods | number | – | Number of trailing quarters to include (default: 4, max: 12) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_derivatives Get Institution Derivatives ~121
Get an institution's reported put/call derivative positions by CIK (13F options), with pagination and sorting.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution |
| limit | number | – | Maximum results to return (default: 20) |
| offset | number | – | Offset for pagination (default: 0) |
| period | string | – | Filing period to filter (e.g., "2025-Q1") |
| sortBy | string | – | Column to sort by |
| sortOrder | string | – | Sort direction |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_detail Get Institution Detail ~76
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. Takes the institution's CIK.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution (e.g., "0001067983" for Berkshire Hathaway) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_filings Get Institution Filings ~79
Get the list of 13F filings for an institution by CIK, with pagination.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution |
| limit | number | – | Maximum results to return (default: 20, max: 50) |
| offset | number | – | Offset for pagination (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_holdings Get Institution Holdings ~101
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution |
| limit | number | – | Maximum results to return (default: 20, max: 100) |
| offset | number | – | Offset for pagination (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_portfolio_analytics Get Institution Portfolio Analytics ~43
Get sector allocation and top holdings analytics for an institution's portfolio by CIK.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_position_changes Get Institution Position Changes ~135
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. The diff is computed server-side in a single query.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution (e.g., "0001067983" for Berkshire Hathaway) |
| limit | integer | – | Maximum results to return (default: 50, max: 100) |
| offset | integer | – | Offset for pagination (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_top_aum Get Top Institutions by AUM ~127
Discover top institutional holders across the entire company universe ranked by assets under management (AUM), across all companies rather than for a single company. Optionally set a minimum AUM. Useful for identifying smart money flows and major institutional positioning trends.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 25, max: 100) |
| minAum | number | – | Minimum AUM in USD to filter institutions (e.g., 1000000000 for $1B+) |
| offset | number | – | Offset for pagination (default: 0) |
| 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.