Skip to main content

Signal8

ai.signal8/mcpVersion 0.20.0

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

Status

Responds199 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 13:33 UTC
Latency
199 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://mcp.signal8.ai/mcpResponds199 ms
No sign-in

Claude Code

claude mcp add --transport http signal8 https://mcp.signal8.ai/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: signal8
Remote MCP server URL: https://mcp.signal8.ai/mcp

Cursor

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

VS Code

code --add-mcp '{"name":"signal8","type":"http","url":"https://mcp.signal8.ai/mcp"}'
Streamable HTTP
npm: @signal8ai/mcp 0.20.0
Package only

npm (npx)

claude mcp add signal8 -e 'SIGNAL8_API_KEY=<YOUR_SIGNAL8_API_KEY>' -- npx -y @signal8ai/mcp@0.20.0

Replace <YOUR_SIGNAL8_API_KEY> before running.

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

113 tools

Tools of Signal8
Read-only
Idempotent
Open world
define_termFree: 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.NoYesNot declaredNo
get_accumulation_snapshotGet 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.NoYesNot declaredNo
get_analyst_consensusGet the analyst ratings consensus for a company: average target price, number of analysts, buy/hold/sell breakdown and consensus recommendation.NoYesNot declaredNo
get_analyst_coverageGet aggregated analyst coverage for a ticker: a consolidated view of grades, targets and coverage breadth across covering firms.NoYesNot declaredNo
get_analyst_estimatesGet forward analyst estimates for a company: EPS, revenue, EBITDA and net income (low/high/avg) with analyst counts, for annual or quarterly periods.NoYesNot declaredNo
get_analyst_gradesGet recent analyst grade actions (upgrades, downgrades, initiations) for a ticker, including the grading firm and previous/new grade.NoYesNot declaredNo
get_baby_shelf_capacitySEC 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 lowerNoYesNot declaredNo
get_cash_historyUp to 10 years of quarterly cash and cash equivalents for a company, as reported in its SEC XBRL financial statements (data.sec.gov). Returns `history`: one point per period end {periodEnd, usd, formType, isAnnual}, oldest first. When a 10-K and a 10-Q cover the same date, the annual figure is kept. Works for any company that files XBRL financials with the SEC. Only figures reported in US dollars are included, so a filer that reports in another currency returns an empty history: an empty history means not measured, never zero cash.NoYesNot declaredYes
get_cash_positionSignal8 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).NoYesNot declaredNo
get_cash_runway_calendarCompanies 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.NoYesNot declaredNo
get_clinical_trialsGet 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.NoYesNot declaredNo
get_company_profileGet 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.NoYesNot declaredNo
get_complianceGet 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.NoYesNot declaredNo
get_dilution_coverageCoverage 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).NoYesNot declaredNo
get_dilution_historyShares outstanding and cash over time for one company, from its SEC XBRL filings, with the offerings and cash events from its dilution snapshot so each raise can be lined up against the share count and cash around it. Response fields: `sharesOutstanding[]` and `cash[]` (SEC filing data, returned for any company with SEC filings); `fullyDiluted`, `cashEstimate`, `offerings[]` and `cashEvents[]` (from the dilution snapshot, null when the company has not been analysed yet, in which case `offeringMarkers` is "not-covered"); `coverage` (`available`, `unavailableReason`, `status`); and the withheld-row fields. `degraded: true` means an SEC request failed and the series may be incomplete. Each `sharesOutstanding` point is the count as filed, on the split basis in force when it was reported and not rebased to today, so a reverse split shows as a step and a growth rate measured across a split is not meaningful. `fullyDiluted` is on the current split basis. A gap in the series means no filing covered that period, not that the count was unchanged. Returns HTTP 200 when the snapshot is unavailable (read `coverage`); 404 only when the ticker maps to no SEC filer. 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).NoYesNot declaredYes
get_dilution_instrumentsOne 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, noNoYesNot declaredNo
get_dilution_performancePost-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).NoYesNot declaredNo
get_dilution_riskDilution 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 noNoYesNot declaredNo
get_dilution_snapshotDilution 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. Approximate totals: `<total>Approximate: true` (e.g. `potentialNewSharesApproximate`, `potentialDilutionPercentApproximate`, `totalWarrantSharesApproximate`) means that total includes an issuer-stated approximate count ("approximately 16.1 million shares"): state it as approximately / ≈ that figure, never as exact. `statedCountSizedRows[]` lists every row sized NoYesNot declaredNo
get_donor_aggregatesGet 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?".NoYesNot declaredNo
get_earningsGet historical earnings data for a company: EPS actual vs estimate, revenue actual vs estimate, and surprise percentages (beats and misses).NoYesNot declaredNo
get_earnings_calendarGet 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.NoYesNot declaredNo
get_economic_calendarGet 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. One call covers at most 366 days: a longer window is shortened to that span and the response says so in windowClamped.NoYesNot declaredNo
get_ended_reverse_splitsReverse-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. outcomeNoYesNot declaredNo
get_etf_bundleGet 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).NoYesNot declaredNo
get_executivesGet the key executives and officers of a company: name, title, compensation and tenure.NoYesNot declaredNo
get_exhibit_contentGet 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.NoYesNot declaredNo
get_filing_calendarGet 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).NoYesNot declaredNo
get_filing_documentGet 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.NoYesNot declaredNo
get_filing_documentsList 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.NoYesNot declaredNo
get_filing_exhibitsList 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.NoYesNot declaredNo
get_filing_structuredParsed, 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 EDGNoYesNot declaredNo
get_financialsGet income statement, balance sheet and cash flow data for a company (revenue, profitability, debt, cash position) from SEC XBRL filings. The response carries BOTH the annual and the quarterly series (no separate trailing-twelve-month series: sum the last four quarters for TTM flow figures). HTTP 404 "Company not found" / "No SEC XBRL financials" means the issuer has no SEC XBRL financials in Signal8 (e.g. a foreign OTC issuer that files nothing with the SEC): a coverage gap, not a bad call. costOfRevenueBasis states what costOfRevenue measures: "excludes_depreciation_amortization" when the filer tags only a cost line without depreciation and amortization, so a margin from it is on that basis. grossProfit and grossMargin are null when not measured (no GrossProfit tag and no cost-of-revenue tag, as at banks and most REITs); a null margin is not a 100% margin. grossProfitSource is "reported" or "revenue_minus_cost".NoYesNot declaredNo
get_floatGet 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" {floNoYesNot declaredNo
get_float_historyGet 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.NoYesNot declaredNo
get_historical_pricesGet 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.NoYesNot declaredNo
get_insider_cluster_buysDetect 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.NoYesNot declaredNo
get_insider_cross_companyDiscover 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.NoYesNot declaredNo
get_insider_positionsGet 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.NoYesNot declaredNo
get_insider_positions_by_tickerGet 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).NoYesNot declaredNo
get_insider_transactionsGet 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. plan10b5_1Box is the filing's Rule 10b5-1(c) checkbox as filed (true/false). null means Signal8 has not yet read the box for that filing, which is neither "no plan" nor unknowable: a Form 4 filed since April 2023 prints the box on the form itself, readable from the filing document by its accession. footnoteMentions10b5_1 says a footnote or remark mentions Rule 10b5-1 (a mention, not a mark).NoYesNot declaredNo
get_insidersGet 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.NoYesNot declaredNo
get_institution_activityGet an institution's position changes over recent 13F periods by CIK. Reads the number of trailing periods to include.NoYesNot declaredNo
get_institution_derivativesGet an institution's reported put/call derivative positions by CIK (13F options), with pagination and sorting.NoYesNot declaredNo
get_institution_detailGet 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.NoYesNot declaredNo
get_institution_filingsGet the list of 13F filings for an institution by CIK, with pagination.NoYesNot declaredNo
get_institution_holdingsGet 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.NoYesNot declaredNo
get_institution_portfolio_analyticsGet sector allocation and top holdings analytics for an institution's portfolio by CIK.NoYesNot declaredNo
get_institution_position_changesDiff 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.NoYesNot declaredNo
get_institution_top_aumDiscover 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.NoYesNot declaredNo
get_institutionsGet 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.NoYesNot declaredNo
get_institutions_leaderboardsTwo 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.NoYesNot declaredNo
get_intraday_barsGet 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.NoYesNot declaredNo
get_learn_guideFree: 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.NoYesNot declaredNo
get_legislative_calendarForward-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).NoYesNot declaredNo
get_market_breadthGet 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.NoYesNot declaredNo
get_market_metricsGet computed market metrics for a company: volume averages, volatility, simple moving averages, RSI(14) on split-adjusted daily closes (rsi14, with the session it is as of in rsi14AsOf; null = not measured) and trend direction, beyond the basic quote.NoYesNot declaredNo
get_market_newsGet 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).NoYesNot declaredNo
get_newsGet 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).NoYesNot declaredNo
get_ownershipGet 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.NoYesNot declaredNo
get_policy_eventsList 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).NoYesNot declaredNo
get_policy_trade_leaderboardRank 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).NoYesNot declaredNo
get_policy_trade_overlapFor 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).NoYesNot declaredNo
get_political_sector_rotationWhich 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.NoYesNot declaredNo
get_politician_activityGet 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.NoYesNot declaredNo
get_politician_committeesGet 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").NoYesNot declaredNo
get_politician_detailGet 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").NoYesNot declaredNo
get_politician_disclosuresPer-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.NoYesNot declaredNo
get_politician_donor_summaryGet 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.NoYesNot declaredNo
get_politician_donorsGet 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).NoYesNot declaredNo
get_politician_late_filersGet 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".NoYesNot declaredNo
get_politician_pnlGet 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).NoYesNot declaredNo
get_politician_recent_tradesGet 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.NoYesNot declaredNo
get_politician_rolesGet committee leadership roles (Chair, Ranking Member, etc.) for a politician, identified by URL slug (e.g. "sen-nancy-pelosi").NoYesNot declaredNo
get_politician_scorecardTop 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.NoYesNot declaredNo
get_politician_transactionsGet 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.NoYesNot declaredNo
get_politician_votesGet 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.NoYesNot declaredNo
get_politiciansList 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.NoYesNot declaredNo
get_politicians_most_activeDiscover 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.NoYesNot declaredNo
get_politicians_pnl_leaderboardRank 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).NoYesNot declaredNo
get_post_earnings_moversGet 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.NoYesNot declaredNo
get_premarket_scan_historyHistorical 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.NoYesNot declaredNo
get_premarket_scannerGet 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.NoYesNot declaredNo
get_price_targetGet 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.NoYesNot declaredNo
get_quoteGet 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).NoYesNot declaredNo
get_recent_congressional_votesGet 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.NoYesNot declaredNo
get_recent_material_filingsRecent 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`.NoYesNot declaredNo
get_recent_uplistingsOTC-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.NoYesNot declaredNo
get_recently_sponsored_billsGet 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.NoYesNot declaredNo
get_reverse_split_authorityCompanies 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 coversNoYesNot declaredNo
get_reverse_split_lifecycleThe 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 domNoYesNot declaredNo
get_reverse_splits_listThe 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; "cancelled" = tracked episodes that ended without the split taking effect in the past 90 days (withdrawn by the company, a vote that did not approve it, an approved authority that expired unused, a meeting postponed indefinitely), with a cancelled object (outcome, outcomeLabel, endedOn, endedOnBasis, laterEpisode when the company has a newer open proposal) and the closing document as the source; older ended episodes are on the separate ended-reverse-splits tool. A security sits on exactly one of the first four views (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; "cancelled" may repeat a company another view lists. 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, sourceDocNoYesNot declaredNo
get_rvol_historyGet 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.NoYesNot declaredNo
get_senate_trades_by_tickerReverse lookup: which politicians recently traded a given ticker. Returns recent STOCK Act disclosures for that symbol with politician info, transaction type, and amount, covering trades in the last 180 days.NoYesNot declaredNo
get_short_interestGet 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%.NoYesNot declaredNo
get_split_historyGet 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.NoYesNot declaredNo
get_split_performanceGet 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 NoYesNot declaredNo
get_stock_price_changeGet 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.NoYesNot declaredNo
get_top_moversTop 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.NoYesNot declaredNo
get_trading_haltsList 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.NoYesNot declaredNo
get_upcoming_reverse_splitsReverse stock splits scheduled to take effect within a day-offset window of the current US market day, for companies under a market-cap ceiling. Offsets are days from today on the US market calendar: fromOffset=1, toOffset=1 is tomorrow; fromOffset=1, toOffset=7 is the week ahead. Each row carries the ticker, company name, the exact vendor integers (splitFrom/splitTo), a pre-rendered ratio ("1-for-20"), the effective date, market cap, float in shares, and price. floatShares is on the same split basis as the market cap. floatBasis says what it is: "measured", or "estimate" / "estimate_rebased" (the float ladder's point estimate, moved across this split when it predates it), i.e. an estimate rather than a measurement. floatShares: null means not measured or withheld, not zero and not "no float"; such rows are included (they have a valid market cap) and floatWithheldReason gives the reason. floatUnknownCount counts those null-float rows in the list; it is not a withholding count (withheldCount is). price is on the same split basis as the market cap (null when it cannot be stated on one basis), so it is not comparable with a pre-split price from elsewhere. Rows are splits scheduled as of now, not a guarantee that every split effective in the window is already known: the underlying stock_splits table has no created_at column, so when a row first appeared is unmeasurable, and a split announced later is simply missing. The result is "scheduled as of now", not "all" reverse splits. A scheduled split can also be postponed or cancelled after it is announced. capUnknownCount is a withholding count, not a zero: it counts rows that passed every other filter and were deliberately excluded because Signal8 has no measured market cap for them (typically real OTC microcaps). It does not mean those companies have no dilution, no split or no cap; the cap was not measured, so they cannot be asserted to sit under the stated ceiling, and with capUnknownCount above zero the list is not comNoYesNot declaredNo
get_volume_profileGet the volume distribution across price levels for a single trading day: price buckets with volume, the Point of Control (highest-volume level) and the Value Area (the price range containing 70% of volume), which locate support, resistance and high-volume price nodes.NoYesNot declaredNo
lookup_accession_numberLook up a filing or exhibit by its SEC accession number. Supports both dashed format (e.g., "0001193125-22-010026") and compact 18-digit format. Returns filing metadata including company name, form type, filing date, exhibit count and `filingId` (the internal id of the stored filing). If the filing is held in Signal8's archive (isInDatabase: true) its content is readable through that filingId; if it is only found on SEC EDGAR the response has isInDatabase: false and basic metadata only.NoYesNot declaredYes
screen_companiesScreen companies by price range, volume, cash runway, float, shares outstanding, market cap, industry, listing exchange (NASDAQ/NYSE/AMEX), listing market (market="otc" / "exchange"; the reliable OTC test, as the exchange label is inconsistent on OTC rows), float data source, TTM dividend yield and snapshot cash (minCash / maxCash). Sortable by any sortable column. Returns matching companies with key metrics and pagination. Float: "float" is the measured point float (null on a withheld dilution-snapshot row, which then carries "floatEstimate" + "floatEstimateBound" ("point" / "ceiling" / "floor") + "floatEstimateBasis"). A point estimate is a number with its basis as the 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. floatEstimate is not a basis for a market cap, percent-of-float or short-interest ratio. minFloat / maxFloat and the computed_float sort use the figure's value, so a bounded row is kept; a row with neither is not measured, not 0. `shares_outstanding` is dated by `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` (stated / checked / none = date not recorded) and `sharesOutstandingSource`; the count is only meaningful with its date. Cash runway: a null cash_runway_months carries cashRunwayReason. "estimate_would_be_negative" = the last cash figure (dated cashRunwayAsOf) rolled forward by burn is below zero: estimated exhausted, not a reported zero balance; maxCashRunway drops such rows unless includeRunwayExhausted=true. Any other or null reason is not a runway claim. estimatedCurrentCash (estimatedCashAsOf) is the snapshot's USD cash projection, only for snapshot-covered companies: null = not measured, not "no cash"; a non-USD filer has it null and is never matched by minCash / maxCash. dividendYield (TTM cash dividends with an ex-date in the last 365 days / current price, %), nextExDate, lastExDate: null = not measured or not a payer, not 0%. listingMarket: "exchaNoYesNot declaredNo
screen_must_raiseCompanies with imminent capital raise needs based on estimated cash runway. Defaults to companies with less than 6 months of cash remaining, sorted by urgency (lowest runway first): distressed companies, imminent dilution situations and potential financing catalysts. Runway is estimated from the current burn rate. Companies whose estimated cash is already exhausted are included by default and listed first: they carry cash_runway_months null with cashRunwayReason "estimate_would_be_negative" (the last cash figure, dated cashRunwayAsOf, rolled forward by the burn rate is below zero today). That is an estimate from a dated balance (estimated exhausted as of today, from the last cash figure as of cashRunwayAsOf), not a reported zero balance and not a statement that the company has no cash. Rows also carry estimatedCurrentCash / estimatedCashAsOf (dilution-snapshot cash projection; null = not measured) and listingMarket.NoYesNot declaredNo
screen_sec_filingsScreen SEC filings across all companies with company-level filters (sector, industry, market cap, exchange) combined with filing-level filters (form type, date range). Returns filings enriched with company metadata: ticker, sector, industry, exchange, market cap, and price. Answers questions like "all S-1 filings from biotech companies under $500M market cap" or "recent 8-K filings from Technology sector companies". Results are filings, not a company universe or a company count. Only the 500 largest matching companies by market cap are searched (narrower filters reach smaller ones). Filters for float, price, company type, foreign issuer, recent IPO, full-text queries and 8-K item codes are not available here. 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.NoYesNot declaredNo
screen_sec_filings_performanceAnalyze stock price performance after SEC filings. Returns individual filing records with pre-computed price returns at +1 day, +3 days, +7 days, and +30 days after the filing date (numbers in percent points: 4.35 = +4.35%; null = not measured), plus aggregate statistics (average, median, % negative, best, worst) across all matching filings. Company-level filters (sector, industry, market cap, exchange) combine with filing filters (form type, date range). Answers questions like "how did biotech stocks perform after S-1 filings?" or "what was the average 7-day return after 8-K filings from companies under $500M market cap?". These are past returns, not a forecast.NoYesNot declaredNo
search_clinical_trialsSearch clinical trials market-wide (across companies), filtered by phase, indication, sponsor, status and date window, with sorting and pagination. An unrecognised phase, status, dateField or sort value is rejected with the allowed list (it is never silently ignored). A result's ticker is the company whose trial list the row was collected under, which may be the lead sponsor or only a collaborator; metadata.sponsor is the lead sponsor, so a row is that ticker's own trial only when metadata.sponsor is that company.NoYesNot declaredNo
search_companiesSearch for companies by name or ticker symbol in the Signal8 database. Returns matching companies with their ticker, name, CIK, and exchange.NoYesNot declaredNo
search_filing_textFull-text search across SEC filing content that returns the matching passage: one match per filing, with the exhibit it was found in (`exhibit_id`, `exhibit_type`) and a snippet with context. Query syntax: unquoted words all have to appear (any order, any distance); "quoted phrase" = exact wording; OR between alternatives (merger OR acquisition); -word or -"phrase" to exclude; w1 NEAR/10 w2 (also NEAR(10), or bare NEAR = within 10) = words close together; word* = prefix of 4+ letters (dilut* matches dilution, dilutive); $AAPL or a capitalised ticker scopes to that company; a form code (8-K, 10-Q, S-1), "item 5.02" / "8-K 1.05" and a bare year (2024) scope to that form / 8-K item / year. Quoted multi-word phrases match as phrases; the archive's reading of the query is in meta.understanding. Suited to locating specific clauses ("change of control", "anti-dilution", "right of first refusal") and to the excerpt of a known filing (accessionNumber or filingId). It has no filing-level paging, totals, date ranges, 8-K item, excluded-form or company filters. Filters: CIK, filing, accession number, form type, section (risk_factors, mdna, ex99 …; applied only when meta.sections confirms it, otherwise meta.unsupported says the whole filing was searched) and exhibitTypes (EX-10 …). 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.NoYesNot declaredNo
search_institutionsSearch institutional investors (13F filers) by name. Returns matching institutions with CIK, name, AUM, holdings count, and latest filing period. Matches part of a fund or investment manager name (e.g., "Vanguard", "BlackRock", "Citadel"). Results are ranked by AUM descending.NoYesNot declaredNo
search_learn_guidesFree: works without an API key or Pro plan (the hosted server only needs a signed-in account). Searches the Signal8 Academy (signal8.ai/learn): plain-English guides that explain dilution (ATMs, warrants, convertibles, baby shelf, cash runway), how to read SEC filings (8-K items, Form 4 codes, 13D/13G, 424B5, S-1/S-3), market structure (halts, short interest, float, reverse splits, STOCK Act disclosures) and how Signal8 works. Returns matching guides with title, description, track, section, reading time, lastVerified date, the public url and the signal8:// resource uri, without bodies. Keyword match: every query word must appear somewhere in the guide; title hits rank highest. An empty query lists every guide (optionally one track) in reading order. An empty result means no guide matched the words given (fewer or broader words match more guides, e.g. "warrant" rather than "warrant inducement repricing"), not that the topic is unimportant.NoYesNot declaredNo
search_sec_filingsSearch and list SEC filings by company (CIK), form type, date range, 8-K item codes and excluded forms, optionally with a full-text query over filing bodies and by company facts (market cap, float, price, sector, industry, exchange, company type, foreign issuer, recent IPO). Rows carry `id` (the internal filingId used by the filing-document and exhibit tools), cik, company_name, accession_number, form_type, filing_date, acceptedAt, primaryDocument, bodyStored and itemNumbers (plus `rank` and `snippet` with `q`); `pagination` has `total`, `totalRelation` ("eq" exact; "gte" a lower bound cut at 10,000, when `totalEstimate` is "about N"), `hasMore` and `nextCursor`. The `ciks` filter matches the filing's own CIK: a Form 4 filed under the reporting owner's CIK is not returned for the issuer's CIK. 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. Every response carries `archiveFrom` and `rangeStartsBeforeArchive`: a range with no dateFrom or starting before archiveFrom is not definitive (`searchIndex.complete: false`, `reason: "outside_held_range"`, `heldFrom`): an empty result then means the archive holds no match from archiveFrom onward, not that no such filing exists. An empty text result is definitive only when `searchIndex.complete` is true. Full-text `q`: Query syntax: unquoted words all have to appear (any order, any distance); "quoted phrase" = exact wording; OR between alternatives (merger OR acquisition); -word or -"phrase" to exclude; w1 NEAR/10 w2 (also NEAR(10), or bare NEAR = within 10) = words close together; word* = prefix of 4+ letters (dilut* matches dilutNoYesNot declaredNo

Details

Registry status
Active
Published
Nov 9, 2026
Updated
Nov 9, 2026
Categories (suggested)
Finance and paymentsSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing