sentisense 0.45.0 → 0.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -125,11 +125,33 @@ interface StockQuote {
125
125
  /** Extended-hours view (pre-market or after-hours). Null/absent during RTH, overnight, and weekends. */
126
126
  extendedHours?: ExtendedHoursInfo | null;
127
127
  }
128
+ interface StockSocialDominance {
129
+ value: number;
130
+ rank: number;
131
+ percentile: number;
132
+ }
133
+ /**
134
+ * Stock with company name and entity metadata.
135
+ *
136
+ * The API names the company in two fields: `simpleName` is the short display name
137
+ * ("Agilent") and `companyName` is the legal name ("Agilent Technologies, Inc.").
138
+ */
128
139
  interface StockDetail {
129
140
  ticker: string;
141
+ /**
142
+ * @deprecated The API never sends this field. It is filled from `simpleName` so
143
+ * older code keeps working; read `simpleName` or `companyName` instead.
144
+ */
130
145
  name: string;
146
+ /** Short display name, e.g. "Agilent". */
147
+ simpleName: string;
148
+ /** Legal name, e.g. "Agilent Technologies, Inc.". */
149
+ companyName: string;
131
150
  kbEntityId?: string;
132
151
  urlSlug?: string;
152
+ /** Brand hex colour. Null for roughly two thirds of the universe. */
153
+ brandColor?: string | null;
154
+ socialDominance?: StockSocialDominance | null;
133
155
  }
134
156
  interface SimilarStock {
135
157
  symbol: string;
@@ -495,6 +517,139 @@ interface OptionsSummary {
495
517
  /** Top contracts by premium. */
496
518
  unusual?: OptionsUnusualContract[];
497
519
  }
520
+ /** Trailing window for `client.stocks.getOptionsHistory()`. */
521
+ type OptionsHistoryWindow = "1y" | "2y" | "5y";
522
+ interface GetOptionsHistoryOptions {
523
+ /**
524
+ * Trailing window. Omitted, the API applies its own default of `"1y"`, and any
525
+ * unrecognised value clamps to `"1y"` rather than erroring.
526
+ *
527
+ * `"5y"` means "everything stored", which is currently a little over two years, so
528
+ * `"5y"` and `"2y"` can answer with nearly the same series. Read the window actually
529
+ * served off `OptionsHistory.window` rather than assuming you got what you asked for:
530
+ * a FREE key always receives `"1y"` whatever it requests.
531
+ */
532
+ window?: OptionsHistoryWindow;
533
+ }
534
+ /**
535
+ * The daily-aggregate time series for one stock or ETF, from
536
+ * `client.stocks.getOptionsHistory()`.
537
+ *
538
+ * **Unlike `getOptionsSummary`, this never answers with a null payload.** A ticker
539
+ * outside the covered universe, an unknown symbol, and a covered ticker with nothing
540
+ * stored yet all return this object with an empty `series`, so read the array's length
541
+ * rather than null-checking the payload.
542
+ */
543
+ interface OptionsHistory {
544
+ ticker?: string;
545
+ /**
546
+ * Window the server actually served, which is not always the one you asked for: an
547
+ * unrecognised request clamps to `"1y"`, and so does any request on a FREE key.
548
+ */
549
+ window?: string;
550
+ /** Ascending by date, oldest first. Same shape as the dossier's `latest` aggregate. */
551
+ series?: OptionsAggregate[];
552
+ }
553
+ /**
554
+ * One ticker's row on the market-wide options radar, from `client.options.getOverview()`.
555
+ *
556
+ * Every percentile here is against **that ticker's own trailing history**, never against
557
+ * the rest of the board, so a row's `ivRank1y` says this name's implied volatility is high
558
+ * for itself and says nothing about whether it is high next to another name's.
559
+ *
560
+ * A covered ticker whose baseline is still building (roughly 60 sessions, plus a liquidity
561
+ * floor) carries its raw readings with the percentiles and `interestScore` omitted, so
562
+ * absent scores mean "not enough history yet", not "nothing interesting".
563
+ */
564
+ interface OptionsOverviewRow {
565
+ ticker?: string;
566
+ /** Company name, or the fund name on an ETF row. Absent when unmapped. */
567
+ name?: string;
568
+ /**
569
+ * Sector on a stock row. On an **ETF row this carries the fund's asset class**
570
+ * (`"Equity"`, `"Bond"`, `"Commodity"`, ...) rather than a sector, so do not feed the two
571
+ * boards' values into one sector breakdown.
572
+ */
573
+ sector?: string;
574
+ /** Session this row describes, ISO calendar day. */
575
+ asOf?: string;
576
+ /** Options-implied positioning lean, roughly -1 to 1, negative for put-heavy. */
577
+ sentiment?: number;
578
+ /** Composite 0-100 blend of how extreme this row's readings are. Omitted while the baseline builds. */
579
+ interestScore?: number;
580
+ /** Put/call volume ratio for the session. */
581
+ pcVol?: number;
582
+ /** Percentile (0-100) of `pcVol` within this ticker's own trailing year. */
583
+ pcVolPctl1y?: number;
584
+ /** At-the-money implied volatility as a fraction, so `0.42` is 42%. */
585
+ atmIv?: number;
586
+ /** Where `atmIv` sits in this ticker's own trailing-year range, 0-100. */
587
+ ivRank1y?: number;
588
+ /** `iv25p - iv25c`, on the same scale as the IVs: `0.03` is three IV points. */
589
+ skew25d?: number;
590
+ /** Percentile (0-100) of `skew25d` within this ticker's own trailing year. */
591
+ skewPctl1y?: number;
592
+ /** Premium traded this session: volume times mark times 100. */
593
+ notionalVol?: number;
594
+ /** Signed change of `atmIv` against its ~20-session mean. Rank "biggest IV moves" by absolute value. */
595
+ ivMove20?: number;
596
+ /** Trailing-1y observation count, which is what drives the building-baseline state. */
597
+ observations1y?: number;
598
+ /** Unusually-active contracts this session. */
599
+ unusualCount?: number;
600
+ /** Largest volume/open-interest multiple among them. Absent when `unusualCount` is 0. */
601
+ maxVolOiRatio?: number;
602
+ /** Largest premium among them. Absent when `unusualCount` is 0. */
603
+ maxUnusualPremium?: number;
604
+ /** Side of the single heaviest open-interest wall, `"call"` or `"put"`. */
605
+ wallSide?: string;
606
+ /** Strike of that wall. */
607
+ wallStrike?: number;
608
+ /** That wall's share of its own side's open interest, 0 to 1. */
609
+ wallShare?: number;
610
+ }
611
+ /**
612
+ * The market-wide options radar, from `client.options.getOverview()`.
613
+ *
614
+ * **Two separately-ranked boards, never one.** `rows` is the covered stock universe and
615
+ * `etfRows` is the covered ETF universe, each already sorted by `interestScore` descending
616
+ * with unscored building-baseline rows last. Concatenating them produces a ranking that
617
+ * means nothing, because every reading behind the score is a percentile of that ticker's
618
+ * own past: an ETF's 90th percentile and a single stock's 90th percentile are measured
619
+ * against different histories.
620
+ *
621
+ * The aggregates split the same way. `medianIvRank`, `marketPcVol`, `extremeCount` and
622
+ * `coverageCount` describe the stock board only; the four `etf`-prefixed fields describe
623
+ * the ETF board and are omitted entirely when a build has no ETF rows.
624
+ *
625
+ * End of day, not live: `asOf` is the latest completed session.
626
+ */
627
+ interface OptionsOverview {
628
+ /** Session the build describes, ISO calendar day. */
629
+ asOf?: string;
630
+ /** Median `ivRank1y` across the stock board. */
631
+ medianIvRank?: number;
632
+ /** Median put/call volume ratio across the stock board. */
633
+ marketPcVol?: number;
634
+ /** Stock rows reading as extreme today, out of `coverageCount`. */
635
+ extremeCount?: number;
636
+ /** Full size of the stock board, which stays the full number even on a truncated FREE response. */
637
+ coverageCount?: number;
638
+ /** The stock board, ranked. FREE keys receive the top 25; the envelope's `totalCount` carries the full size. */
639
+ rows?: OptionsOverviewRow[];
640
+ /** The ETF board, ranked independently. Omitted entirely when a build has no ETF rows. */
641
+ etfRows?: OptionsOverviewRow[];
642
+ /** Median `ivRank1y` across the ETF board. */
643
+ etfMedianIvRank?: number;
644
+ /** Median put/call volume ratio across the ETF board. */
645
+ etfMarketPcVol?: number;
646
+ /** ETF rows reading as extreme today, out of `etfCoverageCount`. */
647
+ etfExtremeCount?: number;
648
+ /** Full size of the ETF board, which stays the full number even on a truncated FREE response. */
649
+ etfCoverageCount?: number;
650
+ /** Full ETF board size on a FREE response, mirroring what the envelope's `totalCount` does for stocks. */
651
+ etfTotalCount?: number;
652
+ }
498
653
  type DocumentSource = "news" | "reddit" | "x" | "substack" | "youtube";
499
654
  /** Per-entity sentiment classification with resolved entity details. */
500
655
  interface SentimentEntry {
@@ -2518,6 +2673,42 @@ declare class MarketSummaryResource {
2518
2673
  get(): Promise<MarketSummary>;
2519
2674
  }
2520
2675
 
2676
+ /**
2677
+ * Market-wide options intelligence.
2678
+ *
2679
+ * Per-ticker options live on `client.stocks` (`getOptionsSummary`, `getOptionsHistory`),
2680
+ * next to everything else keyed by a symbol. This resource holds the surfaces that have no
2681
+ * ticker at all, the same split the market-wide mood and screener resources use.
2682
+ */
2683
+ declare class Options {
2684
+ private client;
2685
+ constructor(client: APIClient);
2686
+ /**
2687
+ * Get the market-wide options radar: where implied volatility, put/call flow and skew are
2688
+ * unusual today, ranked.
2689
+ *
2690
+ * End of day, not live. `asOf` is the latest completed session and the build refreshes the
2691
+ * following morning, so this is positioning, not a quote feed.
2692
+ *
2693
+ * **The response carries two separately-ranked boards.** `data.rows` is the covered stock
2694
+ * universe and `data.etfRows` is the covered ETF universe. Do not merge them: each row's
2695
+ * readings are percentiles of that ticker's own trailing history, so a rank built across
2696
+ * both boards compares numbers measured against different baselines. The aggregates are
2697
+ * split the same way, with the `etf`-prefixed fields describing the ETF board alone.
2698
+ *
2699
+ * `data` is `null` before the first nightly build populates it, which is a cold-start
2700
+ * state rather than an error.
2701
+ *
2702
+ * Tiering: a PRO key receives every row. A FREE key receives the top 25 stock rows plus
2703
+ * all the aggregates, with `isPreview` true and the envelope's `totalCount` reporting the
2704
+ * full stock board; `data.etfTotalCount` does the same for the ETF board.
2705
+ *
2706
+ * Drill into any row with `client.stocks.getOptionsSummary(ticker)` for its full dossier,
2707
+ * or `client.stocks.getOptionsHistory(ticker)` to chart how a reading has trended.
2708
+ */
2709
+ getOverview(): Promise<PreviewResponse<OptionsOverview | null>>;
2710
+ }
2711
+
2521
2712
  /**
2522
2713
  * Screener: filter the tracked universe on the SentiSense Score, attention,
2523
2714
  * analyst consensus, technicals and price in a single query. It is the one
@@ -2630,7 +2821,7 @@ declare class Stocks {
2630
2821
  constructor(client: APIClient);
2631
2822
  /** List all available ticker symbols. */
2632
2823
  list(): Promise<string[]>;
2633
- /** List all stocks with name, kbEntityId, urlSlug. */
2824
+ /** List all stocks with company names, kbEntityId, urlSlug. */
2634
2825
  listDetailed(): Promise<StockDetail[]>;
2635
2826
  /** Get popular ticker symbols. */
2636
2827
  listPopular(): Promise<string[]>;
@@ -2763,6 +2954,24 @@ declare class Stocks {
2763
2954
  * true; calls that return a null `data` never spend that allowance.
2764
2955
  */
2765
2956
  getOptionsSummary(ticker: string): Promise<PreviewResponse<OptionsSummary | null>>;
2957
+ /**
2958
+ * Get the daily options aggregates for one stock or ETF as a time series, oldest first.
2959
+ * Use it to chart how a reading has trended: implied volatility, put/call flow, skew.
2960
+ *
2961
+ * Each element has the same shape as the dossier's `latest` aggregate, so a chart built
2962
+ * off `getOptionsSummary` reads this series without a second mapping.
2963
+ *
2964
+ * **A null payload is not how this one reports no coverage.** Unlike
2965
+ * {@link Stocks.getOptionsSummary}, an uncovered ticker, an unknown symbol and a covered
2966
+ * ticker with nothing stored yet all answer with a populated object whose `series` is
2967
+ * empty. Check the array's length, not the payload.
2968
+ *
2969
+ * The window served is not always the window requested: an unrecognised value clamps to
2970
+ * `"1y"` rather than erroring, and a FREE key always receives `"1y"`. Read `data.window`
2971
+ * for what you actually got. `"5y"` means all stored history, currently a little over two
2972
+ * years, so it can answer with nearly the same series as `"2y"`.
2973
+ */
2974
+ getOptionsHistory(ticker: string, options?: GetOptionsHistoryOptions): Promise<PreviewResponse<OptionsHistory>>;
2766
2975
  }
2767
2976
 
2768
2977
  /**
@@ -2873,6 +3082,7 @@ declare class SentiSense implements APIClient {
2873
3082
  readonly calendar: Calendar;
2874
3083
  readonly earnings: Earnings;
2875
3084
  readonly screener: Screener;
3085
+ readonly options: Options;
2876
3086
  constructor(options?: SentiSenseOptions);
2877
3087
  /** @internal */
2878
3088
  get<T = unknown>(path: string, params?: object): Promise<T>;
@@ -2918,6 +3128,6 @@ declare class APIError extends SentiSenseError {
2918
3128
  constructor(message: string, status: number, code?: string);
2919
3129
  }
2920
3130
 
2921
- declare const VERSION = "0.45.0";
3131
+ declare const VERSION = "0.47.0";
2922
3132
 
2923
- export { type AISummary, APIError, type AnalystAction, type AnalystConsensus, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatesResponse, type AssetMetadata, AuthenticationError, type CalendarMeta, type ChartData, type ChartDataPoint, type ClusterBuy, type CompanyKpisData, type CongressTrade, DeepHistoryUnavailableError, type Document, type DocumentSearchResponse, type DocumentSource, type EarningsCalendarResponse, type EarningsEvent, type EarningsKpiHighlight, type EarningsQuarter, type EarningsSource, type EtfAggregateCoverage, type EtfAnalystAggregate, type EtfAnalystContributor, type EtfHolding, type EtfHoldings, type EtfInfo, type EtfInsiderAggregate, type EtfInsiderContributor, type EtfScreenerExecuteResponse, type EtfScreenerRow, type EtfSentimentAggregate, type EtfSentimentReading, type FeaturedScreen, type FloatInfo, type Fundamentals, type FundamentalsPeriod, type FundamentalsPeriodsResponse, type GetAnalystActionsOptions, type GetAnalystMarketActivityOptions, type GetEarningsCalendarOptions, type GetEarningsSummariesOptions, type GetEtfInsiderAggregateOptions, type GetHoldersOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetPoliticianActivityOptions, type GetPoliticianDirectoryOptions, type GetPoliticianMemberOptions, type GetPoliticiansOptions, type GetRecentEarningsOptions, type GetStockInsightsRangeOptions, type GetUserInsightsOptions, type Holder, type HolderNotableChanges, type IndexConstituent, type IndexHistoryPoint, type IndexHistoryResponse, type IndexListResponse, type IndexListing, type IndexSnapshot, type InsiderActivityResponse, type InsiderActivitySummary, type InsiderTrade, type Insight, type InsightPreviewResponse, type InstitutionList, type InstitutionListResponse, type InstitutionSummary, type InstitutionalFlow, type InstitutionalFlows, type InstitutionalFlowsResponse, type KBEntity, type KpiCoverageEntry, type KpiCoverageResponse, type KpiDataPoint, type KpiSeries, type KpiTypeEntry, type ListInstitutionsOptions, type LockedInsight, type MarketMood, type MarketStatus, type MarketSummary, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type OptionsAggregate, type OptionsContext, type OptionsOiWalls, type OptionsSummary, type OptionsUnusualContract, type OptionsWall, type PoliticianDetail, type PoliticianDirectory, type PoliticianDirectoryEntry, type PoliticianDirectoryResponse, type PoliticianSummary, type PreviewResponse, type Quarter, RateLimitError, type RecentEarningsEntry, type ScreenerExecuteOptions, type ScreenerExecuteResponse, type ScreenerFieldCatalog, type ScreenerFieldDescriptor, type ScreenerFieldOption, type ScreenerFilter, type ScreenerPlan, type ScreenerRow, type ScreenerScreensResponse, type ScreenerSort, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortVolume, type SimilarStock, type StockDetail, type StockEntity, type StockImage, type StockPrice, type StockProfile, type StockQuote, type Story, type StoryCluster, type TickerHolders, type TrackerEvent, type TrackerGeoEntry, type TrackerHeadlineMetric, type TrackerListResponse, type TrackerListing, type TrackerMetricValue, type TrackerSignal, type TrackerSnapshot, type TrackerSnapshotResponse, type TrackerSourceRef, type TrackerTableRow, type TrackerTimeSeriesPoint, type TtmFundamentals, VERSION, type WeightedConsensus, type WeightedNetFlow, SentiSense as default };
3133
+ export { type AISummary, APIError, type AnalystAction, type AnalystConsensus, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatesResponse, type AssetMetadata, AuthenticationError, type CalendarMeta, type ChartData, type ChartDataPoint, type ClusterBuy, type CompanyKpisData, type CongressTrade, DeepHistoryUnavailableError, type Document, type DocumentSearchResponse, type DocumentSource, type EarningsCalendarResponse, type EarningsEvent, type EarningsKpiHighlight, type EarningsQuarter, type EarningsSource, type EtfAggregateCoverage, type EtfAnalystAggregate, type EtfAnalystContributor, type EtfHolding, type EtfHoldings, type EtfInfo, type EtfInsiderAggregate, type EtfInsiderContributor, type EtfScreenerExecuteResponse, type EtfScreenerRow, type EtfSentimentAggregate, type EtfSentimentReading, type FeaturedScreen, type FloatInfo, type Fundamentals, type FundamentalsPeriod, type FundamentalsPeriodsResponse, type GetAnalystActionsOptions, type GetAnalystMarketActivityOptions, type GetEarningsCalendarOptions, type GetEarningsSummariesOptions, type GetEtfInsiderAggregateOptions, type GetHoldersOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetOptionsHistoryOptions, type GetPoliticianActivityOptions, type GetPoliticianDirectoryOptions, type GetPoliticianMemberOptions, type GetPoliticiansOptions, type GetRecentEarningsOptions, type GetStockInsightsRangeOptions, type GetUserInsightsOptions, type Holder, type HolderNotableChanges, type IndexConstituent, type IndexHistoryPoint, type IndexHistoryResponse, type IndexListResponse, type IndexListing, type IndexSnapshot, type InsiderActivityResponse, type InsiderActivitySummary, type InsiderTrade, type Insight, type InsightPreviewResponse, type InstitutionList, type InstitutionListResponse, type InstitutionSummary, type InstitutionalFlow, type InstitutionalFlows, type InstitutionalFlowsResponse, type KBEntity, type KpiCoverageEntry, type KpiCoverageResponse, type KpiDataPoint, type KpiSeries, type KpiTypeEntry, type ListInstitutionsOptions, type LockedInsight, type MarketMood, type MarketStatus, type MarketSummary, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type OptionsAggregate, type OptionsContext, type OptionsHistory, type OptionsHistoryWindow, type OptionsOiWalls, type OptionsOverview, type OptionsOverviewRow, type OptionsSummary, type OptionsUnusualContract, type OptionsWall, type PoliticianDetail, type PoliticianDirectory, type PoliticianDirectoryEntry, type PoliticianDirectoryResponse, type PoliticianSummary, type PreviewResponse, type Quarter, RateLimitError, type RecentEarningsEntry, type ScreenerExecuteOptions, type ScreenerExecuteResponse, type ScreenerFieldCatalog, type ScreenerFieldDescriptor, type ScreenerFieldOption, type ScreenerFilter, type ScreenerPlan, type ScreenerRow, type ScreenerScreensResponse, type ScreenerSort, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortVolume, type SimilarStock, type StockDetail, type StockEntity, type StockImage, type StockPrice, type StockProfile, type StockQuote, type StockSocialDominance, type Story, type StoryCluster, type TickerHolders, type TrackerEvent, type TrackerGeoEntry, type TrackerHeadlineMetric, type TrackerListResponse, type TrackerListing, type TrackerMetricValue, type TrackerSignal, type TrackerSnapshot, type TrackerSnapshotResponse, type TrackerSourceRef, type TrackerTableRow, type TrackerTimeSeriesPoint, type TtmFundamentals, VERSION, type WeightedConsensus, type WeightedNetFlow, SentiSense as default };
package/dist/index.d.ts CHANGED
@@ -125,11 +125,33 @@ interface StockQuote {
125
125
  /** Extended-hours view (pre-market or after-hours). Null/absent during RTH, overnight, and weekends. */
126
126
  extendedHours?: ExtendedHoursInfo | null;
127
127
  }
128
+ interface StockSocialDominance {
129
+ value: number;
130
+ rank: number;
131
+ percentile: number;
132
+ }
133
+ /**
134
+ * Stock with company name and entity metadata.
135
+ *
136
+ * The API names the company in two fields: `simpleName` is the short display name
137
+ * ("Agilent") and `companyName` is the legal name ("Agilent Technologies, Inc.").
138
+ */
128
139
  interface StockDetail {
129
140
  ticker: string;
141
+ /**
142
+ * @deprecated The API never sends this field. It is filled from `simpleName` so
143
+ * older code keeps working; read `simpleName` or `companyName` instead.
144
+ */
130
145
  name: string;
146
+ /** Short display name, e.g. "Agilent". */
147
+ simpleName: string;
148
+ /** Legal name, e.g. "Agilent Technologies, Inc.". */
149
+ companyName: string;
131
150
  kbEntityId?: string;
132
151
  urlSlug?: string;
152
+ /** Brand hex colour. Null for roughly two thirds of the universe. */
153
+ brandColor?: string | null;
154
+ socialDominance?: StockSocialDominance | null;
133
155
  }
134
156
  interface SimilarStock {
135
157
  symbol: string;
@@ -495,6 +517,139 @@ interface OptionsSummary {
495
517
  /** Top contracts by premium. */
496
518
  unusual?: OptionsUnusualContract[];
497
519
  }
520
+ /** Trailing window for `client.stocks.getOptionsHistory()`. */
521
+ type OptionsHistoryWindow = "1y" | "2y" | "5y";
522
+ interface GetOptionsHistoryOptions {
523
+ /**
524
+ * Trailing window. Omitted, the API applies its own default of `"1y"`, and any
525
+ * unrecognised value clamps to `"1y"` rather than erroring.
526
+ *
527
+ * `"5y"` means "everything stored", which is currently a little over two years, so
528
+ * `"5y"` and `"2y"` can answer with nearly the same series. Read the window actually
529
+ * served off `OptionsHistory.window` rather than assuming you got what you asked for:
530
+ * a FREE key always receives `"1y"` whatever it requests.
531
+ */
532
+ window?: OptionsHistoryWindow;
533
+ }
534
+ /**
535
+ * The daily-aggregate time series for one stock or ETF, from
536
+ * `client.stocks.getOptionsHistory()`.
537
+ *
538
+ * **Unlike `getOptionsSummary`, this never answers with a null payload.** A ticker
539
+ * outside the covered universe, an unknown symbol, and a covered ticker with nothing
540
+ * stored yet all return this object with an empty `series`, so read the array's length
541
+ * rather than null-checking the payload.
542
+ */
543
+ interface OptionsHistory {
544
+ ticker?: string;
545
+ /**
546
+ * Window the server actually served, which is not always the one you asked for: an
547
+ * unrecognised request clamps to `"1y"`, and so does any request on a FREE key.
548
+ */
549
+ window?: string;
550
+ /** Ascending by date, oldest first. Same shape as the dossier's `latest` aggregate. */
551
+ series?: OptionsAggregate[];
552
+ }
553
+ /**
554
+ * One ticker's row on the market-wide options radar, from `client.options.getOverview()`.
555
+ *
556
+ * Every percentile here is against **that ticker's own trailing history**, never against
557
+ * the rest of the board, so a row's `ivRank1y` says this name's implied volatility is high
558
+ * for itself and says nothing about whether it is high next to another name's.
559
+ *
560
+ * A covered ticker whose baseline is still building (roughly 60 sessions, plus a liquidity
561
+ * floor) carries its raw readings with the percentiles and `interestScore` omitted, so
562
+ * absent scores mean "not enough history yet", not "nothing interesting".
563
+ */
564
+ interface OptionsOverviewRow {
565
+ ticker?: string;
566
+ /** Company name, or the fund name on an ETF row. Absent when unmapped. */
567
+ name?: string;
568
+ /**
569
+ * Sector on a stock row. On an **ETF row this carries the fund's asset class**
570
+ * (`"Equity"`, `"Bond"`, `"Commodity"`, ...) rather than a sector, so do not feed the two
571
+ * boards' values into one sector breakdown.
572
+ */
573
+ sector?: string;
574
+ /** Session this row describes, ISO calendar day. */
575
+ asOf?: string;
576
+ /** Options-implied positioning lean, roughly -1 to 1, negative for put-heavy. */
577
+ sentiment?: number;
578
+ /** Composite 0-100 blend of how extreme this row's readings are. Omitted while the baseline builds. */
579
+ interestScore?: number;
580
+ /** Put/call volume ratio for the session. */
581
+ pcVol?: number;
582
+ /** Percentile (0-100) of `pcVol` within this ticker's own trailing year. */
583
+ pcVolPctl1y?: number;
584
+ /** At-the-money implied volatility as a fraction, so `0.42` is 42%. */
585
+ atmIv?: number;
586
+ /** Where `atmIv` sits in this ticker's own trailing-year range, 0-100. */
587
+ ivRank1y?: number;
588
+ /** `iv25p - iv25c`, on the same scale as the IVs: `0.03` is three IV points. */
589
+ skew25d?: number;
590
+ /** Percentile (0-100) of `skew25d` within this ticker's own trailing year. */
591
+ skewPctl1y?: number;
592
+ /** Premium traded this session: volume times mark times 100. */
593
+ notionalVol?: number;
594
+ /** Signed change of `atmIv` against its ~20-session mean. Rank "biggest IV moves" by absolute value. */
595
+ ivMove20?: number;
596
+ /** Trailing-1y observation count, which is what drives the building-baseline state. */
597
+ observations1y?: number;
598
+ /** Unusually-active contracts this session. */
599
+ unusualCount?: number;
600
+ /** Largest volume/open-interest multiple among them. Absent when `unusualCount` is 0. */
601
+ maxVolOiRatio?: number;
602
+ /** Largest premium among them. Absent when `unusualCount` is 0. */
603
+ maxUnusualPremium?: number;
604
+ /** Side of the single heaviest open-interest wall, `"call"` or `"put"`. */
605
+ wallSide?: string;
606
+ /** Strike of that wall. */
607
+ wallStrike?: number;
608
+ /** That wall's share of its own side's open interest, 0 to 1. */
609
+ wallShare?: number;
610
+ }
611
+ /**
612
+ * The market-wide options radar, from `client.options.getOverview()`.
613
+ *
614
+ * **Two separately-ranked boards, never one.** `rows` is the covered stock universe and
615
+ * `etfRows` is the covered ETF universe, each already sorted by `interestScore` descending
616
+ * with unscored building-baseline rows last. Concatenating them produces a ranking that
617
+ * means nothing, because every reading behind the score is a percentile of that ticker's
618
+ * own past: an ETF's 90th percentile and a single stock's 90th percentile are measured
619
+ * against different histories.
620
+ *
621
+ * The aggregates split the same way. `medianIvRank`, `marketPcVol`, `extremeCount` and
622
+ * `coverageCount` describe the stock board only; the four `etf`-prefixed fields describe
623
+ * the ETF board and are omitted entirely when a build has no ETF rows.
624
+ *
625
+ * End of day, not live: `asOf` is the latest completed session.
626
+ */
627
+ interface OptionsOverview {
628
+ /** Session the build describes, ISO calendar day. */
629
+ asOf?: string;
630
+ /** Median `ivRank1y` across the stock board. */
631
+ medianIvRank?: number;
632
+ /** Median put/call volume ratio across the stock board. */
633
+ marketPcVol?: number;
634
+ /** Stock rows reading as extreme today, out of `coverageCount`. */
635
+ extremeCount?: number;
636
+ /** Full size of the stock board, which stays the full number even on a truncated FREE response. */
637
+ coverageCount?: number;
638
+ /** The stock board, ranked. FREE keys receive the top 25; the envelope's `totalCount` carries the full size. */
639
+ rows?: OptionsOverviewRow[];
640
+ /** The ETF board, ranked independently. Omitted entirely when a build has no ETF rows. */
641
+ etfRows?: OptionsOverviewRow[];
642
+ /** Median `ivRank1y` across the ETF board. */
643
+ etfMedianIvRank?: number;
644
+ /** Median put/call volume ratio across the ETF board. */
645
+ etfMarketPcVol?: number;
646
+ /** ETF rows reading as extreme today, out of `etfCoverageCount`. */
647
+ etfExtremeCount?: number;
648
+ /** Full size of the ETF board, which stays the full number even on a truncated FREE response. */
649
+ etfCoverageCount?: number;
650
+ /** Full ETF board size on a FREE response, mirroring what the envelope's `totalCount` does for stocks. */
651
+ etfTotalCount?: number;
652
+ }
498
653
  type DocumentSource = "news" | "reddit" | "x" | "substack" | "youtube";
499
654
  /** Per-entity sentiment classification with resolved entity details. */
500
655
  interface SentimentEntry {
@@ -2518,6 +2673,42 @@ declare class MarketSummaryResource {
2518
2673
  get(): Promise<MarketSummary>;
2519
2674
  }
2520
2675
 
2676
+ /**
2677
+ * Market-wide options intelligence.
2678
+ *
2679
+ * Per-ticker options live on `client.stocks` (`getOptionsSummary`, `getOptionsHistory`),
2680
+ * next to everything else keyed by a symbol. This resource holds the surfaces that have no
2681
+ * ticker at all, the same split the market-wide mood and screener resources use.
2682
+ */
2683
+ declare class Options {
2684
+ private client;
2685
+ constructor(client: APIClient);
2686
+ /**
2687
+ * Get the market-wide options radar: where implied volatility, put/call flow and skew are
2688
+ * unusual today, ranked.
2689
+ *
2690
+ * End of day, not live. `asOf` is the latest completed session and the build refreshes the
2691
+ * following morning, so this is positioning, not a quote feed.
2692
+ *
2693
+ * **The response carries two separately-ranked boards.** `data.rows` is the covered stock
2694
+ * universe and `data.etfRows` is the covered ETF universe. Do not merge them: each row's
2695
+ * readings are percentiles of that ticker's own trailing history, so a rank built across
2696
+ * both boards compares numbers measured against different baselines. The aggregates are
2697
+ * split the same way, with the `etf`-prefixed fields describing the ETF board alone.
2698
+ *
2699
+ * `data` is `null` before the first nightly build populates it, which is a cold-start
2700
+ * state rather than an error.
2701
+ *
2702
+ * Tiering: a PRO key receives every row. A FREE key receives the top 25 stock rows plus
2703
+ * all the aggregates, with `isPreview` true and the envelope's `totalCount` reporting the
2704
+ * full stock board; `data.etfTotalCount` does the same for the ETF board.
2705
+ *
2706
+ * Drill into any row with `client.stocks.getOptionsSummary(ticker)` for its full dossier,
2707
+ * or `client.stocks.getOptionsHistory(ticker)` to chart how a reading has trended.
2708
+ */
2709
+ getOverview(): Promise<PreviewResponse<OptionsOverview | null>>;
2710
+ }
2711
+
2521
2712
  /**
2522
2713
  * Screener: filter the tracked universe on the SentiSense Score, attention,
2523
2714
  * analyst consensus, technicals and price in a single query. It is the one
@@ -2630,7 +2821,7 @@ declare class Stocks {
2630
2821
  constructor(client: APIClient);
2631
2822
  /** List all available ticker symbols. */
2632
2823
  list(): Promise<string[]>;
2633
- /** List all stocks with name, kbEntityId, urlSlug. */
2824
+ /** List all stocks with company names, kbEntityId, urlSlug. */
2634
2825
  listDetailed(): Promise<StockDetail[]>;
2635
2826
  /** Get popular ticker symbols. */
2636
2827
  listPopular(): Promise<string[]>;
@@ -2763,6 +2954,24 @@ declare class Stocks {
2763
2954
  * true; calls that return a null `data` never spend that allowance.
2764
2955
  */
2765
2956
  getOptionsSummary(ticker: string): Promise<PreviewResponse<OptionsSummary | null>>;
2957
+ /**
2958
+ * Get the daily options aggregates for one stock or ETF as a time series, oldest first.
2959
+ * Use it to chart how a reading has trended: implied volatility, put/call flow, skew.
2960
+ *
2961
+ * Each element has the same shape as the dossier's `latest` aggregate, so a chart built
2962
+ * off `getOptionsSummary` reads this series without a second mapping.
2963
+ *
2964
+ * **A null payload is not how this one reports no coverage.** Unlike
2965
+ * {@link Stocks.getOptionsSummary}, an uncovered ticker, an unknown symbol and a covered
2966
+ * ticker with nothing stored yet all answer with a populated object whose `series` is
2967
+ * empty. Check the array's length, not the payload.
2968
+ *
2969
+ * The window served is not always the window requested: an unrecognised value clamps to
2970
+ * `"1y"` rather than erroring, and a FREE key always receives `"1y"`. Read `data.window`
2971
+ * for what you actually got. `"5y"` means all stored history, currently a little over two
2972
+ * years, so it can answer with nearly the same series as `"2y"`.
2973
+ */
2974
+ getOptionsHistory(ticker: string, options?: GetOptionsHistoryOptions): Promise<PreviewResponse<OptionsHistory>>;
2766
2975
  }
2767
2976
 
2768
2977
  /**
@@ -2873,6 +3082,7 @@ declare class SentiSense implements APIClient {
2873
3082
  readonly calendar: Calendar;
2874
3083
  readonly earnings: Earnings;
2875
3084
  readonly screener: Screener;
3085
+ readonly options: Options;
2876
3086
  constructor(options?: SentiSenseOptions);
2877
3087
  /** @internal */
2878
3088
  get<T = unknown>(path: string, params?: object): Promise<T>;
@@ -2918,6 +3128,6 @@ declare class APIError extends SentiSenseError {
2918
3128
  constructor(message: string, status: number, code?: string);
2919
3129
  }
2920
3130
 
2921
- declare const VERSION = "0.45.0";
3131
+ declare const VERSION = "0.47.0";
2922
3132
 
2923
- export { type AISummary, APIError, type AnalystAction, type AnalystConsensus, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatesResponse, type AssetMetadata, AuthenticationError, type CalendarMeta, type ChartData, type ChartDataPoint, type ClusterBuy, type CompanyKpisData, type CongressTrade, DeepHistoryUnavailableError, type Document, type DocumentSearchResponse, type DocumentSource, type EarningsCalendarResponse, type EarningsEvent, type EarningsKpiHighlight, type EarningsQuarter, type EarningsSource, type EtfAggregateCoverage, type EtfAnalystAggregate, type EtfAnalystContributor, type EtfHolding, type EtfHoldings, type EtfInfo, type EtfInsiderAggregate, type EtfInsiderContributor, type EtfScreenerExecuteResponse, type EtfScreenerRow, type EtfSentimentAggregate, type EtfSentimentReading, type FeaturedScreen, type FloatInfo, type Fundamentals, type FundamentalsPeriod, type FundamentalsPeriodsResponse, type GetAnalystActionsOptions, type GetAnalystMarketActivityOptions, type GetEarningsCalendarOptions, type GetEarningsSummariesOptions, type GetEtfInsiderAggregateOptions, type GetHoldersOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetPoliticianActivityOptions, type GetPoliticianDirectoryOptions, type GetPoliticianMemberOptions, type GetPoliticiansOptions, type GetRecentEarningsOptions, type GetStockInsightsRangeOptions, type GetUserInsightsOptions, type Holder, type HolderNotableChanges, type IndexConstituent, type IndexHistoryPoint, type IndexHistoryResponse, type IndexListResponse, type IndexListing, type IndexSnapshot, type InsiderActivityResponse, type InsiderActivitySummary, type InsiderTrade, type Insight, type InsightPreviewResponse, type InstitutionList, type InstitutionListResponse, type InstitutionSummary, type InstitutionalFlow, type InstitutionalFlows, type InstitutionalFlowsResponse, type KBEntity, type KpiCoverageEntry, type KpiCoverageResponse, type KpiDataPoint, type KpiSeries, type KpiTypeEntry, type ListInstitutionsOptions, type LockedInsight, type MarketMood, type MarketStatus, type MarketSummary, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type OptionsAggregate, type OptionsContext, type OptionsOiWalls, type OptionsSummary, type OptionsUnusualContract, type OptionsWall, type PoliticianDetail, type PoliticianDirectory, type PoliticianDirectoryEntry, type PoliticianDirectoryResponse, type PoliticianSummary, type PreviewResponse, type Quarter, RateLimitError, type RecentEarningsEntry, type ScreenerExecuteOptions, type ScreenerExecuteResponse, type ScreenerFieldCatalog, type ScreenerFieldDescriptor, type ScreenerFieldOption, type ScreenerFilter, type ScreenerPlan, type ScreenerRow, type ScreenerScreensResponse, type ScreenerSort, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortVolume, type SimilarStock, type StockDetail, type StockEntity, type StockImage, type StockPrice, type StockProfile, type StockQuote, type Story, type StoryCluster, type TickerHolders, type TrackerEvent, type TrackerGeoEntry, type TrackerHeadlineMetric, type TrackerListResponse, type TrackerListing, type TrackerMetricValue, type TrackerSignal, type TrackerSnapshot, type TrackerSnapshotResponse, type TrackerSourceRef, type TrackerTableRow, type TrackerTimeSeriesPoint, type TtmFundamentals, VERSION, type WeightedConsensus, type WeightedNetFlow, SentiSense as default };
3133
+ export { type AISummary, APIError, type AnalystAction, type AnalystConsensus, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatesResponse, type AssetMetadata, AuthenticationError, type CalendarMeta, type ChartData, type ChartDataPoint, type ClusterBuy, type CompanyKpisData, type CongressTrade, DeepHistoryUnavailableError, type Document, type DocumentSearchResponse, type DocumentSource, type EarningsCalendarResponse, type EarningsEvent, type EarningsKpiHighlight, type EarningsQuarter, type EarningsSource, type EtfAggregateCoverage, type EtfAnalystAggregate, type EtfAnalystContributor, type EtfHolding, type EtfHoldings, type EtfInfo, type EtfInsiderAggregate, type EtfInsiderContributor, type EtfScreenerExecuteResponse, type EtfScreenerRow, type EtfSentimentAggregate, type EtfSentimentReading, type FeaturedScreen, type FloatInfo, type Fundamentals, type FundamentalsPeriod, type FundamentalsPeriodsResponse, type GetAnalystActionsOptions, type GetAnalystMarketActivityOptions, type GetEarningsCalendarOptions, type GetEarningsSummariesOptions, type GetEtfInsiderAggregateOptions, type GetHoldersOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetOptionsHistoryOptions, type GetPoliticianActivityOptions, type GetPoliticianDirectoryOptions, type GetPoliticianMemberOptions, type GetPoliticiansOptions, type GetRecentEarningsOptions, type GetStockInsightsRangeOptions, type GetUserInsightsOptions, type Holder, type HolderNotableChanges, type IndexConstituent, type IndexHistoryPoint, type IndexHistoryResponse, type IndexListResponse, type IndexListing, type IndexSnapshot, type InsiderActivityResponse, type InsiderActivitySummary, type InsiderTrade, type Insight, type InsightPreviewResponse, type InstitutionList, type InstitutionListResponse, type InstitutionSummary, type InstitutionalFlow, type InstitutionalFlows, type InstitutionalFlowsResponse, type KBEntity, type KpiCoverageEntry, type KpiCoverageResponse, type KpiDataPoint, type KpiSeries, type KpiTypeEntry, type ListInstitutionsOptions, type LockedInsight, type MarketMood, type MarketStatus, type MarketSummary, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type OptionsAggregate, type OptionsContext, type OptionsHistory, type OptionsHistoryWindow, type OptionsOiWalls, type OptionsOverview, type OptionsOverviewRow, type OptionsSummary, type OptionsUnusualContract, type OptionsWall, type PoliticianDetail, type PoliticianDirectory, type PoliticianDirectoryEntry, type PoliticianDirectoryResponse, type PoliticianSummary, type PreviewResponse, type Quarter, RateLimitError, type RecentEarningsEntry, type ScreenerExecuteOptions, type ScreenerExecuteResponse, type ScreenerFieldCatalog, type ScreenerFieldDescriptor, type ScreenerFieldOption, type ScreenerFilter, type ScreenerPlan, type ScreenerRow, type ScreenerScreensResponse, type ScreenerSort, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortVolume, type SimilarStock, type StockDetail, type StockEntity, type StockImage, type StockPrice, type StockProfile, type StockQuote, type StockSocialDominance, type Story, type StoryCluster, type TickerHolders, type TrackerEvent, type TrackerGeoEntry, type TrackerHeadlineMetric, type TrackerListResponse, type TrackerListing, type TrackerMetricValue, type TrackerSignal, type TrackerSnapshot, type TrackerSnapshotResponse, type TrackerSourceRef, type TrackerTableRow, type TrackerTimeSeriesPoint, type TtmFundamentals, VERSION, type WeightedConsensus, type WeightedNetFlow, SentiSense as default };