sentisense 0.60.0 → 0.62.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
@@ -191,12 +191,120 @@ interface StockProfile {
191
191
  imageUrl?: string | null;
192
192
  [key: string]: unknown;
193
193
  }
194
+ /**
195
+ * A knowledge-base entity related to a stock (a person, product, partner and so on), as
196
+ * returned by `stocks.getEntities()`.
197
+ *
198
+ * Address the entity by `urlSlug` (the handle the metric and document endpoints take) and
199
+ * label it with `displayName`.
200
+ */
194
201
  interface StockEntity {
202
+ /**
203
+ * Entity id as sent by the API.
204
+ * @deprecated Not a stable public identifier. Use `urlSlug` to refer to an entity.
205
+ */
206
+ id: string;
207
+ /** Human-readable name, e.g. `"Tim Cook"`. */
208
+ displayName: string;
209
+ /** Entity type, e.g. `"PERSON"`, `"COMPANY"`, `"PRODUCT_OR_SERVICE"`. */
210
+ type: string;
211
+ /** Ticker of the stock this entity is related to. */
212
+ relatedStock?: string | null;
213
+ /** Handle the metric and document endpoints address this entity by. `null` when it has none. */
214
+ urlSlug?: string | null;
215
+ /** A person's title, e.g. `"Executive Chairman"`. `null` for non-people. */
216
+ title?: string | null;
217
+ /** A product's category. `null` for non-products. */
218
+ category?: string | null;
219
+ /** Icon image URL, or `null` when none is assigned. */
220
+ iconUrl?: string | null;
221
+ /** App Store id when the product has a tracked companion app. Omitted otherwise. */
222
+ appId?: string | null;
223
+ /** @deprecated Never sent by the API. To refer to the entity, use `urlSlug`. */
195
224
  entityId: string;
225
+ /** @deprecated Never sent by the API; read `displayName`. */
196
226
  name: string;
197
- type: string;
198
227
  [key: string]: unknown;
199
228
  }
229
+ /** Options for `stocks.getGraph()`. */
230
+ interface GetStockGraphOptions {
231
+ /** Hops from the stock's own company node: `1` (default) or `2`. */
232
+ depth?: 1 | 2;
233
+ /** Maximum nodes in the response, 1 to 200. Omitted, the API uses 75. */
234
+ cap?: number;
235
+ }
236
+ /** One node in a {@link StockGraph}. Every identifier in the graph is a `slug`. */
237
+ interface GraphNode {
238
+ /** Handle for this entity, the same one the metric and document endpoints take. */
239
+ slug: string;
240
+ displayName: string;
241
+ /** `"COMPANY"`, `"PERSON"`, `"PRODUCT_OR_SERVICE"`, `"ORGANIZATION"`, `"PUBLISHER"`, `"TOPIC"`, ... */
242
+ type: string;
243
+ }
244
+ /** One typed relationship in a {@link StockGraph}, between two node slugs. */
245
+ interface GraphEdge {
246
+ /** Slug of the node the relationship starts from. */
247
+ source: string;
248
+ /** Slug of the node the relationship points to. */
249
+ target: string;
250
+ /** Relationship type, e.g. `"LEADS"`, `"FOUNDED"`, `"PRODUCT_OF"`, `"VARIANT_OF"`, `"PEER"`. */
251
+ type: string;
252
+ /** `"DIRECTED"` (source to target) or `"BIDIRECTIONAL"` (for example peers). */
253
+ direction: string;
254
+ /**
255
+ * Extra facts about the relationship, all values as strings. Keys depend on the edge
256
+ * type, for example `role` and `since` on `LEADS`, `year` on `FOUNDED`. Empty when the
257
+ * edge carries none.
258
+ */
259
+ properties: Record<string, string>;
260
+ }
261
+ /** A product family and the slugs of its member products. */
262
+ interface GraphProductFamily {
263
+ /** Family name, e.g. `"iPhone"`. */
264
+ family: string;
265
+ /** Slugs of the products in the family. */
266
+ members: string[];
267
+ }
268
+ /** Node slugs in a {@link StockGraph}, grouped by role relative to the stock. */
269
+ interface GraphGroups {
270
+ people: string[];
271
+ products: string[];
272
+ productFamilies: GraphProductFamily[];
273
+ /** Peer companies. */
274
+ peers: string[];
275
+ organizations: string[];
276
+ publishers: string[];
277
+ topics: string[];
278
+ }
279
+ /** Size of a {@link StockGraph}. */
280
+ interface GraphCounts {
281
+ nodes: number;
282
+ edges: number;
283
+ /** Node count per node `type`, e.g. `{ PERSON: 6, PRODUCT_OR_SERVICE: 23 }`. */
284
+ byType: Record<string, number>;
285
+ }
286
+ /**
287
+ * The company knowledge graph around one stock, from `GET /api/v1/stocks/{ticker}/graph`:
288
+ * the people, products, peers and other entities linked to the company, and the typed
289
+ * relationships between them. Every identifier is a slug.
290
+ */
291
+ interface StockGraph {
292
+ ticker: string;
293
+ /** Slug of the stock's own company node, the graph's starting point. */
294
+ root: string;
295
+ /** Depth the graph was walked to (1 or 2). */
296
+ depth: number;
297
+ /** Node cap applied to this response. */
298
+ cap: number;
299
+ /** True when the cap cut the graph short. */
300
+ truncated: boolean;
301
+ /** Nodes left out because they carry no slug. */
302
+ omitted: number;
303
+ counts: GraphCounts;
304
+ groups: GraphGroups;
305
+ nodes: GraphNode[];
306
+ edges: GraphEdge[];
307
+ }
200
308
  /** Per-source tone for a stock: where the conversation is, and how it leans. */
201
309
  interface SentimentSourceTone {
202
310
  /** "News", "Reddit", "X", "YouTube", "Substack". */
@@ -446,18 +554,81 @@ interface FundamentalsPeriodsResponse {
446
554
  /** Populated when no periods are available, explaining why. */
447
555
  reason?: string | null;
448
556
  }
557
+ /** One settlement-date reading in {@link ShortInterest}. */
558
+ interface ShortInterestDataPoint {
559
+ /** Shares sold short and not yet covered as of `settlementDate`. */
560
+ shortInterest: number | null;
561
+ /** `shortInterest` divided by `avgDailyVolume`: trading days to cover at average volume. */
562
+ daysToCover: number | null;
563
+ /** Average daily trading volume, in shares. */
564
+ avgDailyVolume: number | null;
565
+ /** ISO date `"YYYY-MM-DD"` of the settlement this reading is for. */
566
+ settlementDate: string | null;
567
+ }
568
+ /**
569
+ * Short interest history from `stocks.getShortInterest()`, newest first. An unknown
570
+ * ticker returns an empty `dataPoints` array and `count: 0`, not an error.
571
+ */
449
572
  interface ShortInterest {
450
573
  ticker: string;
574
+ dataPoints: ShortInterestDataPoint[];
575
+ /** Number of entries in `dataPoints`. */
576
+ count: number;
451
577
  [key: string]: unknown;
452
578
  }
579
+ /**
580
+ * Free float from `stocks.getFloat()`. An unknown ticker returns every field other than
581
+ * `ticker` as `null`, not an error.
582
+ */
453
583
  interface FloatInfo {
454
584
  ticker: string;
585
+ /**
586
+ * Shares available to trade publicly. `0` means the symbol has no free float, as with
587
+ * funds such as SPY or QQQ. Shares outstanding is not on this response; read it from
588
+ * the fundamentals endpoints.
589
+ */
590
+ freeFloat: number | null;
591
+ /** Free float as percentage points of shares outstanding: `92.1` means 92.1%. */
592
+ freeFloatPercent: number | null;
593
+ /**
594
+ * Date the float figure is effective: `"YYYY-MM-DD"` or `"YYYY-MM-DD HH:mm:ss"`
595
+ * depending on the data source, so parse it leniently.
596
+ */
597
+ effectiveDate: string | null;
455
598
  [key: string]: unknown;
456
599
  }
600
+ /** One trading day in {@link ShortVolume}. */
601
+ interface ShortVolumeDataPoint {
602
+ /** Shares sold short that day on the reporting venues. */
603
+ shortVolume: number | null;
604
+ /** Total shares traded that day on the same reporting venues, not consolidated volume. */
605
+ totalVolume: number | null;
606
+ /** `shortVolume` as percentage points of `totalVolume`: `41.04` means 41.04%. */
607
+ shortVolumeRatio: number | null;
608
+ /** ISO date `"YYYY-MM-DD"` of the trading day. */
609
+ date: string | null;
610
+ }
611
+ /**
612
+ * Daily short volume from `stocks.getShortVolume()`, newest first. An unknown ticker
613
+ * returns an empty `dataPoints` array and `count: 0`, not an error.
614
+ */
457
615
  interface ShortVolume {
458
616
  ticker: string;
617
+ dataPoints: ShortVolumeDataPoint[];
618
+ /** Number of entries in `dataPoints`. */
619
+ count: number;
459
620
  [key: string]: unknown;
460
621
  }
622
+ /** Options for `stocks.getShortInterest()`. */
623
+ interface GetShortInterestOptions {
624
+ /** Settlement dates to return. Omitted, the API returns 24. */
625
+ limit?: number;
626
+ }
627
+ /** Options for `stocks.getShortVolume()`. */
628
+ interface GetShortVolumeOptions {
629
+ /** Trading days to return. Omitted, the API returns 90. */
630
+ limit?: number;
631
+ }
461
632
  interface MetricsBreakdown {
462
633
  [key: string]: unknown;
463
634
  }
@@ -510,6 +681,23 @@ interface GetFundamentalsOptions {
510
681
  fiscalPeriod?: string;
511
682
  fiscalYear?: number;
512
683
  }
684
+ /**
685
+ * The open-interest follow-up for one contract, as carried by an aggregate's `unusualOi`
686
+ * list: the same fields an unusual contract carries, keyed by symbol.
687
+ */
688
+ interface OptionsOiFollowUp {
689
+ /** Exchange-style option symbol. */
690
+ contract?: string;
691
+ oiPrior?: number;
692
+ oiNext?: number;
693
+ oiChange?: number;
694
+ /** Net open-interest change: opened, closed, mixed, pending, or unmatched. */
695
+ oiConfirmation?: "opened" | "closed" | "mixed" | "pending" | "unmatched";
696
+ /** Open-interest observation time in UTC epoch seconds. */
697
+ oiObservedAt?: number;
698
+ /** Which chain supplied the observed open interest. */
699
+ oiVintage?: "prior_settle" | "settled" | "next_session";
700
+ }
513
701
  /**
514
702
  * One session's aggregate options activity for a ticker.
515
703
  *
@@ -565,6 +753,17 @@ interface OptionsAggregate {
565
753
  contracts?: number;
566
754
  /** Largest unusual-contract premium this session; zero when none qualified. */
567
755
  maxUnusualPremium?: number;
756
+ /**
757
+ * Premium of the session's highlight contract: the largest qualifying premium with an
758
+ * expiry at least one day after the session. Zero when the session was evaluated and none
759
+ * qualified; absent on sessions recorded before this rule existed.
760
+ */
761
+ maxUnusualPremiumEx0dte?: number;
762
+ /**
763
+ * Open-interest follow-up for the session's unusual contracts, plus its highlight contract
764
+ * when that is not one of them. Absent until the follow-up has been read.
765
+ */
766
+ unusualOi?: OptionsOiFollowUp[];
568
767
  }
569
768
  /**
570
769
  * Percentile context for {@link OptionsAggregate}, against that ticker's own trailing
@@ -620,11 +819,69 @@ interface OptionsUnusualContract {
620
819
  /** Which chain supplied the observed open interest. */
621
820
  oiVintage?: "prior_settle" | "settled" | "next_session";
622
821
  }
822
+ /**
823
+ * A ticker's row on today's intraday options board, reduced to counts and the board's own
824
+ * clock. It carries no contract symbol, strike, price or premium.
825
+ *
826
+ * The board is rebuilt every 15 minutes during the session from 15-minute delayed chains;
827
+ * the contract-level board itself is in the SentiSense app, not the API.
828
+ */
829
+ interface OptionsIntradayFlow {
830
+ /** Contracts on the ticker's row passing the unusual rule so far this session, up to 5. */
831
+ unusualCount?: number;
832
+ /** Earliest board cycle that flagged one of them, `"HH:mm ET"`. Absent when none. */
833
+ firstSeenEt?: string;
834
+ /** `firstSeenEt` as Unix epoch seconds. */
835
+ firstSeenAt?: number;
836
+ /**
837
+ * Percentile (0-100) of the ticker's intraday highlight contract against its own history.
838
+ * Present only for highlighted tickers, and absent while that history holds fewer than 60
839
+ * sessions.
840
+ */
841
+ flowPctl1y?: number;
842
+ /** The board's snapshot time, `"HH:mm ET"`. */
843
+ asOfEt?: string;
844
+ /**
845
+ * The same instant as Unix epoch seconds. Unlike the dossier's own `asOf`, which is an ISO
846
+ * date, this one is a timestamp.
847
+ */
848
+ asOf?: number;
849
+ /** `true` while the board updates during the session, `false` once it has stopped. */
850
+ live?: boolean;
851
+ /** How far the board's chain data trails the market, in minutes. */
852
+ delayMinutes?: number;
853
+ }
854
+ /**
855
+ * Where the intraday options board lives and who can open it. Describes the board, not the
856
+ * data: `apiData` is `false` because its rows are app-only.
857
+ */
858
+ interface OptionsIntradayBoardCapability {
859
+ /** `true` when the app offers the board. */
860
+ available?: boolean;
861
+ /**
862
+ * Who can open the board in the app: `"signed_in_pro"` (any signed-in PRO account) or
863
+ * `"power_user"` (an early-access group). New values may appear.
864
+ */
865
+ access?: "signed_in_pro" | "power_user" | (string & {});
866
+ /** `false`: the board's rows are app-only, and the API serves only the derived fields. */
867
+ apiData?: boolean;
868
+ /** The board's data delay, in minutes. */
869
+ delayMinutes?: number;
870
+ /** The Options page in the app. */
871
+ url?: string;
872
+ }
873
+ /** Product capabilities that ride the options responses. */
874
+ interface OptionsCapabilities {
875
+ intradayBoard?: OptionsIntradayBoardCapability;
876
+ }
623
877
  /**
624
878
  * The options dossier for one stock or ETF, from `client.stocks.getOptionsSummary()`.
625
879
  *
626
880
  * End of day, not live: it describes the latest completed session and refreshes the
627
- * following morning.
881
+ * following morning. The exception is the intraday session fields (`intradayFlow`,
882
+ * `largePrintCount`, `largestPrintPctl`, `capabilities`), which are the same on every tier,
883
+ * previews included, and are omitted when their source is absent: `intradayFlow` before the
884
+ * day's first board or when the ticker has no row on it.
628
885
  */
629
886
  interface OptionsSummary {
630
887
  /** Session the dossier describes, ISO calendar day. */
@@ -643,6 +900,20 @@ interface OptionsSummary {
643
900
  oiWalls?: OptionsOiWalls;
644
901
  /** Top contracts by premium. */
645
902
  unusual?: OptionsUnusualContract[];
903
+ /** The ticker's row on today's intraday board. */
904
+ intradayFlow?: OptionsIntradayFlow;
905
+ /**
906
+ * Large prints for the ticker (one contract's fills clustered into a single order after the
907
+ * close) in the latest published prints session, up to 25; `0` when it has none.
908
+ */
909
+ largePrintCount?: number;
910
+ /**
911
+ * Highest percentile (0-100) among those prints, each print's premium against the ticker's
912
+ * own trailing prints. Absent when none is scored.
913
+ */
914
+ largestPrintPctl?: number;
915
+ /** Where the intraday board lives and who can open it. */
916
+ capabilities?: OptionsCapabilities;
646
917
  }
647
918
  /** Trailing window for `client.stocks.getOptionsHistory()`. */
648
919
  type OptionsHistoryWindow = "1y" | "2y" | "5y";
@@ -789,7 +1060,10 @@ interface OptionsHighlight {
789
1060
  * `coverageCount` describe the stock board only; the four `etf`-prefixed fields describe
790
1061
  * the ETF board and are omitted entirely when a build has no ETF rows.
791
1062
  *
792
- * End of day, not live: `asOf` is the latest completed session.
1063
+ * End of day, not live: `asOf` is the latest completed session. The exception is
1064
+ * `intradayActiveCount`, `intradayRanking` and `capabilities`, which summarize today's
1065
+ * intraday board across stocks, are the same on every tier, and are omitted before the day's
1066
+ * first board.
793
1067
  */
794
1068
  interface OptionsOverview {
795
1069
  /** Session the build describes, ISO calendar day. */
@@ -820,6 +1094,21 @@ interface OptionsOverview {
820
1094
  etfCoverageCount?: number;
821
1095
  /** Full ETF board size on a FREE response, mirroring what the envelope's `totalCount` does for stocks. */
822
1096
  etfTotalCount?: number;
1097
+ /** When this board was built, Unix epoch seconds (UTC). Pair it with `asOf`. */
1098
+ builtAt?: number;
1099
+ /**
1100
+ * The rule the stock `highlights` were chosen by, `"ex0dte-v1"`. Absent when that list was
1101
+ * built before the rule existed.
1102
+ */
1103
+ highlightPolicy?: string;
1104
+ /** The same for `etfHighlights`. */
1105
+ etfHighlightPolicy?: string;
1106
+ /** Stocks on today's intraday board with at least one unusual contract so far. Stock board only. */
1107
+ intradayActiveCount?: number;
1108
+ /** Up to 25 of those tickers, most unusual for their own history first. */
1109
+ intradayRanking?: string[];
1110
+ /** Where the intraday board lives and who can open it. */
1111
+ capabilities?: OptionsCapabilities;
823
1112
  }
824
1113
  /** The seven dimensions the composite is blended from, by stable `key`. */
825
1114
  type RatingDimensionKey = "crowd" | "smart_money" | "options" | "analysts" | "fundamentals" | "earnings" | "technicals";
@@ -2168,8 +2457,35 @@ interface KpiTypeEntry {
2168
2457
  category: string;
2169
2458
  chartType: string;
2170
2459
  }
2460
+ /**
2461
+ * A knowledge-base entity, as returned by `kb.getPopularEntities()`. Address it by
2462
+ * `urlSlug` and label it with `displayName`.
2463
+ */
2171
2464
  interface KBEntity {
2465
+ /**
2466
+ * Entity id as sent by the API.
2467
+ * @deprecated Not a stable public identifier. Use `urlSlug` to refer to an entity.
2468
+ */
2469
+ id: string;
2470
+ /** Human-readable name, e.g. `"Elon Musk"`. */
2471
+ displayName: string;
2472
+ /** Entity type, e.g. `"PERSON"`, `"COMPANY"`, `"PRODUCT_OR_SERVICE"`. */
2473
+ type: string;
2474
+ /** Ticker of the stock this entity is most closely related to, when it has one. */
2475
+ relatedStock?: string | null;
2476
+ /** Handle the metric and document endpoints address this entity by. `null` when it has none. */
2477
+ urlSlug?: string | null;
2478
+ /** A person's title. `null` for non-people. */
2479
+ title?: string | null;
2480
+ /** A product's category. `null` for non-products. */
2481
+ category?: string | null;
2482
+ /** Icon image URL, or `null` when none is assigned. */
2483
+ iconUrl?: string | null;
2484
+ /** App Store id when the product has a tracked companion app. Omitted otherwise. */
2485
+ appId?: string | null;
2486
+ /** @deprecated Never sent by the API. To refer to the entity, use `urlSlug`. */
2172
2487
  entityId: string;
2488
+ /** @deprecated Never sent by the API; read `displayName`. */
2173
2489
  name: string;
2174
2490
  [key: string]: unknown;
2175
2491
  }
@@ -2810,12 +3126,42 @@ interface AnalystAction {
2810
3126
  fromGrade: string | null;
2811
3127
  toGrade: string | null;
2812
3128
  }
3129
+ /** Which forward period an {@link AnalystEstimate} covers. */
3130
+ type AnalystEstimatePeriodType = "CURRENT_QUARTER" | "NEXT_QUARTER" | "CURRENT_YEAR" | "NEXT_YEAR";
3131
+ /** Consensus EPS estimate for one forward period. */
2813
3132
  interface AnalystEstimate {
2814
- /** Fiscal period descriptor (provider-specific shape). */
3133
+ /**
3134
+ * Period label as sent by the API: usually a date such as `"2026-10-29"` for the
3135
+ * current quarter (a relative code such as `"0q"` when no date is known yet), a
3136
+ * relative code such as `"+1q"`, `"0y"` or `"+1y"` otherwise. Use
3137
+ * `periodType` to tell periods apart.
3138
+ */
3139
+ periodLabel: string | null;
3140
+ periodType: AnalystEstimatePeriodType | null;
3141
+ /** Lowest analyst EPS estimate for the period. */
3142
+ estimateLow: number | null;
3143
+ /** Mean analyst EPS estimate for the period. */
3144
+ estimateMean: number | null;
3145
+ /** Highest analyst EPS estimate for the period. */
3146
+ estimateHigh: number | null;
3147
+ /** Analysts contributing to the estimate. */
3148
+ numberOfAnalysts: number | null;
2815
3149
  [key: string]: unknown;
2816
3150
  }
3151
+ /** Reported EPS against the consensus estimate for one past report. */
2817
3152
  interface AnalystEarningsSurprise {
2818
- /** Past report descriptor (provider-specific shape). */
3153
+ /** Period label as sent by the API, e.g. `"2026-07-30"`. */
3154
+ periodLabel: string | null;
3155
+ /** ISO date `"YYYY-MM-DD"` the results were reported. */
3156
+ reportDate: string | null;
3157
+ /** Consensus EPS estimate going into the report. */
3158
+ estimateEps: number | null;
3159
+ /** Reported EPS. */
3160
+ actualEps: number | null;
3161
+ /**
3162
+ * As sent by the API: a fraction rounded to 2 decimals (0.07 = 7%), despite the name.
3163
+ */
3164
+ surprisePercent: number | null;
2819
3165
  [key: string]: unknown;
2820
3166
  }
2821
3167
  interface AnalystEstimatesResponse {
@@ -2838,6 +3184,15 @@ interface GetAnalystMarketActivityOptions {
2838
3184
  /** Days of history to return. Default 30. */
2839
3185
  lookbackDays?: number;
2840
3186
  }
3187
+ /** A named analyst, as referenced from a note. */
3188
+ interface AnalystRef {
3189
+ /**
3190
+ * Addresses `analyst.profile(slug)` and `analyst.calls(slug)`. `null` when we hold no
3191
+ * profile for the named analyst; the `name` is still returned.
3192
+ */
3193
+ slug: string | null;
3194
+ name: string;
3195
+ }
2841
3196
  /** One price target note. */
2842
3197
  interface AnalystNote {
2843
3198
  /** ISO date the note was published, `"YYYY-MM-DD"`. */
@@ -2846,7 +3201,7 @@ interface AnalystNote {
2846
3201
  * The individual named on the note, or `null` when the report named nobody.
2847
3202
  * Absent means the report did not identify one, never that the note did not happen.
2848
3203
  */
2849
- analyst: string | null;
3204
+ analyst: AnalystRef | null;
2850
3205
  priceTarget: number | null;
2851
3206
  adjPriceTarget: number | null;
2852
3207
  priceWhenPosted: number | null;
@@ -3313,6 +3668,53 @@ interface EtfInfo {
3313
3668
  */
3314
3669
  imageUrl: string | null;
3315
3670
  }
3671
+ /**
3672
+ * Quote snapshot for an ETF from `GET /api/v1/etfs/{ticker}/quote`: the same price-side
3673
+ * fields as the stock quote, with fund facts (AUM, expense ratio, NAV, inception date) in
3674
+ * place of market cap, P/E and EPS.
3675
+ *
3676
+ * Every field except `ticker` and `timestamp` is left out of the response when unknown
3677
+ * rather than sent as `null`, so check for presence before rendering.
3678
+ */
3679
+ interface EtfQuote {
3680
+ ticker: string;
3681
+ /** Regular-session price, delayed. During regular hours: the most recent regular-session value. Otherwise: the most recent regular-session close. */
3682
+ currentPrice?: number | null;
3683
+ change?: number | null;
3684
+ /** Change in percentage points: `-0.21` means -0.21%. */
3685
+ changePercent?: number | null;
3686
+ /** Shares traded in the session. */
3687
+ volume?: number | null;
3688
+ open?: number | null;
3689
+ dayHigh?: number | null;
3690
+ dayLow?: number | null;
3691
+ previousClose?: number | null;
3692
+ week52High?: number | null;
3693
+ week52Low?: number | null;
3694
+ /**
3695
+ * Trailing-12-month dividend yield as a fraction, not percentage points: `0.0099` is a
3696
+ * 0.99% yield.
3697
+ */
3698
+ dividendYield?: number | null;
3699
+ /** Assets under management, in USD. The fund analogue of a stock's market cap. */
3700
+ aum?: number | null;
3701
+ /** Annual expense ratio as a fraction: `0.0009` is 0.09%. */
3702
+ expenseRatio?: number | null;
3703
+ /** Net asset value per share, in USD. */
3704
+ nav?: number | null;
3705
+ /** Fund inception date, ISO `"YYYY-MM-DD"`. */
3706
+ inceptionDate?: string | null;
3707
+ /** Unix timestamp in MILLISECONDS of when this response was served. Not the age of the price. */
3708
+ timestamp: number;
3709
+ /**
3710
+ * Unix timestamp in MILLISECONDS of the market data behind `currentPrice`. Read this for
3711
+ * freshness rather than `timestamp`. Absent when the price cannot be dated, so treat an
3712
+ * absent value as unknown age, not as fresh.
3713
+ */
3714
+ priceAsOf?: number | null;
3715
+ /** Pre-market or after-hours view. Absent during regular hours, overnight and weekends. */
3716
+ extendedHours?: ExtendedHoursInfo | null;
3717
+ }
3316
3718
  interface EtfHolding {
3317
3719
  /** The symbol as the issuer filed it. For an international fund this is the local exchange code, not a US ticker, so resolve stocks with `linkedTicker` instead. */
3318
3720
  ticker: string;
@@ -3452,6 +3854,15 @@ declare class Etfs {
3452
3854
  * List every ETF tracked by SentiSense, sorted by ticker.
3453
3855
  */
3454
3856
  list(): Promise<EtfInfo[]>;
3857
+ /**
3858
+ * Get the quote snapshot for an ETF: price, day and 52-week range, volume, dividend
3859
+ * yield, AUM, expense ratio, NAV and inception date.
3860
+ *
3861
+ * Fails with a 400 `APIError` whose `code` is `"ticker_is_not_etf"` when the symbol is a
3862
+ * stock (use `stocks.getQuote()` for those), and a `NotFoundError` when there is no
3863
+ * price data for the fund.
3864
+ */
3865
+ quote(ticker: string): Promise<EtfQuote>;
3455
3866
  /**
3456
3867
  * Get the full holdings composition for an ETF, including per-holding weights
3457
3868
  * and freshness metadata. Returns 404 for unknown ETFs or commodity-only funds.
@@ -3954,6 +4365,16 @@ declare class Stocks {
3954
4365
  getSentiment(ticker: string): Promise<PreviewResponse<StockSentiment>>;
3955
4366
  /** Get related KB entities (people, products, partners). */
3956
4367
  getEntities(ticker: string): Promise<StockEntity[]>;
4368
+ /**
4369
+ * Get the company knowledge graph around a stock: the people, products, peers and other
4370
+ * entities linked to the company, and the typed relationships between them.
4371
+ *
4372
+ * Every identifier in the response is a slug, the same handle the metric and document
4373
+ * endpoints take, so a node can be passed straight to them. `depth` is 1 (default) or 2,
4374
+ * `cap` limits the node count (1 to 200, default 75); out-of-range values are rejected
4375
+ * with a 400. A ticker with no graph returns a `NotFoundError`.
4376
+ */
4377
+ getGraph(ticker: string, options?: GetStockGraphOptions): Promise<StockGraph>;
3957
4378
  /**
3958
4379
  * Get AI-generated stock analysis report. Requires PRO tier.
3959
4380
  *
@@ -3992,12 +4413,18 @@ declare class Stocks {
3992
4413
  getCurrentFundamentals(ticker: string): Promise<TtmFundamentals>;
3993
4414
  /** Get historical revenue data. */
3994
4415
  getHistoricalRevenue(ticker: string): Promise<unknown>;
3995
- /** Get short interest metrics (FINRA). */
3996
- getShortInterest(ticker: string): Promise<ShortInterest>;
4416
+ /**
4417
+ * Get short interest history (FINRA), newest first: shares short, days to cover and
4418
+ * average daily volume per settlement date. `limit` defaults to 24 settlement dates.
4419
+ */
4420
+ getShortInterest(ticker: string, options?: GetShortInterestOptions): Promise<ShortInterest>;
3997
4421
  /** Get float information. */
3998
4422
  getFloat(ticker: string): Promise<FloatInfo>;
3999
- /** Get short volume trading data. */
4000
- getShortVolume(ticker: string): Promise<ShortVolume>;
4423
+ /**
4424
+ * Get daily short volume, newest first: shares sold short against total volume on the
4425
+ * reporting venues. `limit` defaults to 90 trading days.
4426
+ */
4427
+ getShortVolume(ticker: string, options?: GetShortVolumeOptions): Promise<ShortVolume>;
4001
4428
  /**
4002
4429
  * Get company-specific KPI time-series for a ticker. Returns curated GAAP and
4003
4430
  * non-GAAP metrics from earnings filings (e.g. iPhone unit sales, Tesla deliveries,
@@ -4277,6 +4704,6 @@ declare class APIError extends SentiSenseError {
4277
4704
  constructor(message: string, status: number, code?: string);
4278
4705
  }
4279
4706
 
4280
- declare const VERSION = "0.60.0";
4707
+ declare const VERSION = "0.62.0";
4281
4708
 
4282
- export { type AISummary, APIError, type AnalystAction, type AnalystCall, type AnalystCalledItCall, type AnalystCalledItMove, type AnalystConsensus, type AnalystConsensusHistory, type AnalystConsensusHistoryPoint, type AnalystCoverage, type AnalystCoverageAnalyst, type AnalystCoverageBookEntry, type AnalystCoverageFirm, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatesResponse, type AnalystFirmRating, type AnalystFirmTenure, type AnalystNote, type AnalystProfile, type AnalystRatingBuckets, 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 EarningsOutcomeStatistics, type EarningsQuarter, type EarningsReaction, type EarningsReactionsResponse, type EarningsSource, type EarningsStatistics, type EarningsStatisticsBaseline, type EarningsStatisticsDeviation, type EarningsStatisticsThresholds, type EarningsStatisticsWindow, type EntitySearchResult, type EntitySearchType, 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 GetAnalystCalledItOptions, type GetAnalystCallsOptions, type GetAnalystConsensusHistoryOptions, type GetAnalystCoverageOptions, type GetAnalystMarketActivityOptions, type GetEarningsCalendarOptions, type GetEarningsStatisticsOptions, type GetEarningsSummariesOptions, type GetEtfInsiderAggregateOptions, type GetHoldersOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetOptionsHistoryOptions, type GetPoliticianActivityOptions, type GetPoliticianDirectoryOptions, type GetPoliticianMemberOptions, type GetPoliticiansOptions, type GetRankedEarningsOptions, 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 MarketMoodOptions, type MarketStatus, type MarketSummary, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type OptionsAggregate, type OptionsContext, type OptionsHighlight, 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, type RankedEarnings, type RankedEarningsSection, type RankedReportedEarnings, type RankedUpcomingEarnings, RateLimitError, type RatingBase, type RatingDimension, type RatingDimensionKey, type RatingFlag, type RatingNotRatedReason, type RatingSubLeg, type RecentEarningsEntry, type RiskAdjustment, type RiskCondition, type ScreenerExecuteOptions, type ScreenerExecuteResponse, type ScreenerFieldCatalog, type ScreenerFieldDescriptor, type ScreenerFieldOption, type ScreenerFilter, type ScreenerPlan, type ScreenerRow, type ScreenerScreensResponse, type ScreenerSort, type SearchEntitiesOptions, type SearchStoriesOptions, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortVolume, type SimilarStock, type StockDetail, type StockEntity, type StockImage, type StockNotRated, type StockPrice, type StockProfile, type StockQuote, type StockRating, type StockRatingResponse, type StockSocialDominance, type Story, type StoryCluster, type StoryTimelineEntry, TemporarilyUnavailableError, 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 };
4709
+ export { type AISummary, APIError, type AnalystAction, type AnalystCall, type AnalystCalledItCall, type AnalystCalledItMove, type AnalystConsensus, type AnalystConsensusHistory, type AnalystConsensusHistoryPoint, type AnalystCoverage, type AnalystCoverageAnalyst, type AnalystCoverageBookEntry, type AnalystCoverageFirm, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatePeriodType, type AnalystEstimatesResponse, type AnalystFirmRating, type AnalystFirmTenure, type AnalystNote, type AnalystProfile, type AnalystRatingBuckets, type AnalystRef, 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 EarningsOutcomeStatistics, type EarningsQuarter, type EarningsReaction, type EarningsReactionsResponse, type EarningsSource, type EarningsStatistics, type EarningsStatisticsBaseline, type EarningsStatisticsDeviation, type EarningsStatisticsThresholds, type EarningsStatisticsWindow, type EntitySearchResult, type EntitySearchType, type EtfAggregateCoverage, type EtfAnalystAggregate, type EtfAnalystContributor, type EtfHolding, type EtfHoldings, type EtfInfo, type EtfInsiderAggregate, type EtfInsiderContributor, type EtfQuote, type EtfScreenerExecuteResponse, type EtfScreenerRow, type EtfSentimentAggregate, type EtfSentimentReading, type ExtendedHoursInfo, type FeaturedScreen, type FloatInfo, type Fundamentals, type FundamentalsPeriod, type FundamentalsPeriodsResponse, type GetAnalystActionsOptions, type GetAnalystCalledItOptions, type GetAnalystCallsOptions, type GetAnalystConsensusHistoryOptions, type GetAnalystCoverageOptions, type GetAnalystMarketActivityOptions, type GetEarningsCalendarOptions, type GetEarningsStatisticsOptions, type GetEarningsSummariesOptions, type GetEtfInsiderAggregateOptions, type GetHoldersOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetOptionsHistoryOptions, type GetPoliticianActivityOptions, type GetPoliticianDirectoryOptions, type GetPoliticianMemberOptions, type GetPoliticiansOptions, type GetRankedEarningsOptions, type GetRecentEarningsOptions, type GetShortInterestOptions, type GetShortVolumeOptions, type GetStockGraphOptions, type GetStockInsightsRangeOptions, type GetUserInsightsOptions, type GraphCounts, type GraphEdge, type GraphGroups, type GraphNode, type GraphProductFamily, 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 MarketMoodOptions, type MarketStatus, type MarketSummary, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type OptionsAggregate, type OptionsCapabilities, type OptionsContext, type OptionsHighlight, type OptionsHistory, type OptionsHistoryWindow, type OptionsIntradayBoardCapability, type OptionsIntradayFlow, type OptionsOiFollowUp, 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, type RankedEarnings, type RankedEarningsSection, type RankedReportedEarnings, type RankedUpcomingEarnings, RateLimitError, type RatingBase, type RatingDimension, type RatingDimensionKey, type RatingFlag, type RatingNotRatedReason, type RatingSubLeg, type RecentEarningsEntry, type RiskAdjustment, type RiskCondition, type ScreenerExecuteOptions, type ScreenerExecuteResponse, type ScreenerFieldCatalog, type ScreenerFieldDescriptor, type ScreenerFieldOption, type ScreenerFilter, type ScreenerPlan, type ScreenerRow, type ScreenerScreensResponse, type ScreenerSort, type SearchEntitiesOptions, type SearchStoriesOptions, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortInterestDataPoint, type ShortVolume, type ShortVolumeDataPoint, type SimilarStock, type StockDetail, type StockEntity, type StockGraph, type StockImage, type StockNotRated, type StockPrice, type StockProfile, type StockQuote, type StockRating, type StockRatingResponse, type StockSocialDominance, type Story, type StoryCluster, type StoryTimelineEntry, TemporarilyUnavailableError, 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 };