@invinite-org/invinite-data-cli 0.4.0 → 0.5.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.
Files changed (84) hide show
  1. package/README.md +88 -802
  2. package/claude-plugin/agents/invinite-data.md +1 -1
  3. package/claude-plugin/commands/analyze-earnings-call.md +3 -3
  4. package/claude-plugin/skills/invinite-data-cli/SKILL.md +444 -187
  5. package/dist/src/cli.d.ts +6 -0
  6. package/dist/src/cli.js +21 -31
  7. package/dist/src/cli.js.map +1 -1
  8. package/dist/src/client/api-client.d.ts +2 -4
  9. package/dist/src/client/api-client.js +3 -9
  10. package/dist/src/client/api-client.js.map +1 -1
  11. package/dist/src/client/pagination.d.ts +10 -0
  12. package/dist/src/client/pagination.js +40 -0
  13. package/dist/src/client/pagination.js.map +1 -1
  14. package/dist/src/commands/earnings.d.ts +0 -3
  15. package/dist/src/commands/earnings.js +46 -524
  16. package/dist/src/commands/earnings.js.map +1 -1
  17. package/dist/src/generated/cli-manifest.json +4983 -0
  18. package/dist/src/hand-written-commands.d.ts +43 -0
  19. package/dist/src/hand-written-commands.js +21 -0
  20. package/dist/src/hand-written-commands.js.map +1 -0
  21. package/dist/src/shared/errors.d.ts +5 -0
  22. package/dist/src/shared/errors.js +12 -0
  23. package/dist/src/shared/errors.js.map +1 -1
  24. package/dist/src/shared/options.d.ts +0 -13
  25. package/dist/src/shared/options.js +0 -13
  26. package/dist/src/shared/options.js.map +1 -1
  27. package/dist/src/spec-commands.d.ts +10 -0
  28. package/dist/src/spec-commands.js +207 -0
  29. package/dist/src/spec-commands.js.map +1 -0
  30. package/dist/src/spec-flags.d.ts +6 -0
  31. package/dist/src/spec-flags.js +9 -0
  32. package/dist/src/spec-flags.js.map +1 -0
  33. package/dist/src/spec-manifest.d.ts +382 -0
  34. package/dist/src/spec-manifest.js +65 -0
  35. package/dist/src/spec-manifest.js.map +1 -0
  36. package/package.json +7 -3
  37. package/dist/src/commands/company.d.ts +0 -2
  38. package/dist/src/commands/company.js +0 -220
  39. package/dist/src/commands/company.js.map +0 -1
  40. package/dist/src/commands/earnings-selector.d.ts +0 -15
  41. package/dist/src/commands/earnings-selector.js +0 -29
  42. package/dist/src/commands/earnings-selector.js.map +0 -1
  43. package/dist/src/commands/filings.d.ts +0 -2
  44. package/dist/src/commands/filings.js +0 -139
  45. package/dist/src/commands/filings.js.map +0 -1
  46. package/dist/src/commands/financials.d.ts +0 -2
  47. package/dist/src/commands/financials.js +0 -162
  48. package/dist/src/commands/financials.js.map +0 -1
  49. package/dist/src/commands/health.d.ts +0 -2
  50. package/dist/src/commands/health.js +0 -18
  51. package/dist/src/commands/health.js.map +0 -1
  52. package/dist/src/commands/insider-trades.d.ts +0 -2
  53. package/dist/src/commands/insider-trades.js +0 -56
  54. package/dist/src/commands/insider-trades.js.map +0 -1
  55. package/dist/src/commands/ipos.d.ts +0 -2
  56. package/dist/src/commands/ipos.js +0 -42
  57. package/dist/src/commands/ipos.js.map +0 -1
  58. package/dist/src/commands/market.d.ts +0 -2
  59. package/dist/src/commands/market.js +0 -34
  60. package/dist/src/commands/market.js.map +0 -1
  61. package/dist/src/commands/metadata.d.ts +0 -2
  62. package/dist/src/commands/metadata.js +0 -39
  63. package/dist/src/commands/metadata.js.map +0 -1
  64. package/dist/src/commands/metrics.d.ts +0 -2
  65. package/dist/src/commands/metrics.js +0 -158
  66. package/dist/src/commands/metrics.js.map +0 -1
  67. package/dist/src/commands/ownership.d.ts +0 -2
  68. package/dist/src/commands/ownership.js +0 -152
  69. package/dist/src/commands/ownership.js.map +0 -1
  70. package/dist/src/commands/segments.d.ts +0 -2
  71. package/dist/src/commands/segments.js +0 -64
  72. package/dist/src/commands/segments.js.map +0 -1
  73. package/dist/src/commands/usage.d.ts +0 -38
  74. package/dist/src/commands/usage.js +0 -82
  75. package/dist/src/commands/usage.js.map +0 -1
  76. package/dist/src/commands/webhooks.d.ts +0 -16
  77. package/dist/src/commands/webhooks.js +0 -186
  78. package/dist/src/commands/webhooks.js.map +0 -1
  79. package/dist/src/formatters/sparkline.d.ts +0 -2
  80. package/dist/src/formatters/sparkline.js +0 -11
  81. package/dist/src/formatters/sparkline.js.map +0 -1
  82. package/dist/src/formatters/tree-formatter.d.ts +0 -11
  83. package/dist/src/formatters/tree-formatter.js +0 -30
  84. package/dist/src/formatters/tree-formatter.js.map +0 -1
@@ -18,16 +18,16 @@ Use the connected Invinite Data API MCP tools when available. Fall back to the `
18
18
 
19
19
  | Data need | MCP tool | CLI command family |
20
20
  |---|---|---|
21
- | Search/details/list | `company_search`, `company_details`, `available_companies` | `invd company ...` |
22
- | Dividends/periods/splits | `company_dividends`, `company_fiscal_periods`, `company_splits` | `invd company ...` |
23
- | Standardized statements/snapshots | `standardized_financial_statement`, `standardized_financial_snapshot` | `invd financials ...` |
24
- | As-reported statements/snapshots | `as_reported_financial_statement`, `as_reported_financial_snapshot` | `invd financials ... --as-reported` |
25
- | Ratios/growth/CAGR | `financial_ratios`, `financial_growth`, `financial_cagr` | `invd metrics ...` |
26
- | Segment data | `segmented_financials` | `invd segments ...` |
27
- | SEC filings/search/sections | `sec_filings`, `sec_filings_search`, `sec_filing_sections` | `invd filings ...` |
28
- | Filing and metric discovery | `sec_available_form_types`, `list_available_section_ids`, `list_available_metrics` | `invd filings form-types`, `invd metadata ...` |
29
- | Institutional ownership | `holdings_by_company`, `holdings_by_investor`, `institutional_investors`, `institutional_transactions` | `invd ownership ...` |
30
- | Insider trades/IPOs/holidays | `insider_trades`, `ipos`, `market_holidays` | `invd insider-trades`, `invd ipos`, `invd market ...` |
21
+ | Search/details/list | `company_search`, `company_details`, `available_companies` | `invd company search\|details\|list` |
22
+ | Dividends/periods/splits | `company_dividends`, `company_fiscal_periods`, `company_splits` | `invd company dividends\|fiscal-periods\|splits` |
23
+ | Standardized statements/snapshots | `standardized_financial_statement`, `standardized_financial_snapshot` | `invd financials <statement>[-detailed\|-presentation]`, `invd financials snapshot…` |
24
+ | As-reported statements/snapshots | `as_reported_financial_statement`, `as_reported_financial_snapshot` | `invd financials as-reported-<statement>…`, `invd financials as-reported-snapshot…` |
25
+ | Ratios/growth/CAGR | `financial_ratios`, `financial_growth`, `financial_cagr` | `invd metrics ratios\|growth\|cagr` |
26
+ | Segment data | `segmented_financials` | `invd segments list\|list-detailed` |
27
+ | SEC filings/search/sections | `sec_filings`, `sec_filings_search`, `sec_filing_sections` | `invd filings list\|search\|sections` |
28
+ | Filing and metric discovery | `sec_available_form_types`, `list_available_section_ids`, `list_available_metrics` | `invd filings form-types`, `invd metadata section-ids\|metrics` |
29
+ | Institutional ownership | `holdings_by_company`, `holdings_by_investor`, `institutional_investors`, `institutional_transactions` | `invd ownership …` |
30
+ | Insider trades/IPOs/holidays | `insider_trades`, `ipos`, `market_holidays` | `invd insider-trades list`, `invd ipos list`, `invd market holidays` |
31
31
  | Earnings call calendar/events/live | `earnings_call_calendar`, `earnings_call_events`, `earnings_call_live` | `invd earnings calendar\|events\|live` |
32
32
  | Call transcript/Q&A/participants | `earnings_call_transcript`, `earnings_call_qa`, `earnings_call_participants` | `invd earnings transcript\|qa\|participants` |
33
33
  | Call guidance/KPIs, diff vs prior call | `earnings_call_guidance`, `earnings_call_diff` | `invd earnings extractions\|guidance-history\|diff` |
@@ -61,69 +61,37 @@ If an MCP call fails with an auth error, reconnect the connector and complete OA
61
61
  | Flag | Description |
62
62
  |------|-------------|
63
63
  | `--json` | Output raw JSON (always use this for programmatic access) |
64
- | `--all` | Auto-paginate through all results |
64
+ | `--all` | Auto-paginate through all results (paginated commands only; others refuse it by name) |
65
65
  | `--show-cost` | Print `credits: <charged> · included left: <remaining>` to stderr after the command (or set `INVD_SHOW_COST=1`); stdout stays clean |
66
66
 
67
+ Every data command's flags are the API parameters of its operation, spelled with dashes (`fiscal_period_type` → `--fiscal-period-type`, `event_id` → `--event-id`); `invd <group> <action> --help` lists them with the API's own descriptions. The two write commands (`webhooks create`, `webhooks update`) take the request body as `--body '<json>'` or `--body-file <path>` (`-` reads stdin).
68
+
67
69
  ### Usage and credits
68
70
 
69
71
  Before a large pull (`--all`, many tickers, filing search at 100 credits a call), run `invd usage --json` (free, `--days 7|30|90`): `period` has the plan's `included_credits`, `used_credits`, `resets_at` and `prepaid_balance_usd`; `daily`, `by_family` and `by_key` show where credits went. If the pull would not fit what is left, say so before starting it. For budgeting, add `--show-cost` to a sample call and multiply; the stderr line never mixes into `--json` output. Every operation's credit cost is the `x-credits` field of the OpenAPI spec.
70
72
 
71
- ## Commands Reference
72
-
73
- ### Company Data
74
-
75
- ```bash
76
- # List all companies
77
- invd company list --json
78
-
79
- # Search by ticker or name
80
- invd company search -q "Apple" --json
81
- invd company search -q MSFT --limit 5 --json
82
-
83
- # Company details (ticker or CIK)
84
- invd company details -i AAPL --json
85
-
86
- # Dividends (with optional date range)
87
- invd company dividends -i AAPL --json
88
- invd company dividends -i AAPL --start-date 2023-01-01 --end-date 2024-01-01 --json
73
+ ## Working with the data
89
74
 
90
- # Fiscal periods
91
- invd company fiscal-periods -i MSFT --json
75
+ ### Financial statements
92
76
 
93
- # Stock splits
94
- invd company splits -i AAPL --json
95
- ```
96
-
97
- ### Financial Statements
77
+ `-p, --fiscal-period-type` is required: `quarterly`, `annual`, `ytd`, or `ttm`. Each statement (`income-statement`, `balance-sheet`, `cash-flow`, `snapshot`) is one command per variant:
98
78
 
99
- Period is required: `quarterly`, `annual`, `ytd`, or `ttm`.
79
+ - `<statement>` — standardized values keyed by `metric_id`
80
+ - `<statement>-detailed` — adds formula, accession number, HTML tag info (`--with-formula true` for formulas)
81
+ - `<statement>-presentation` — nested tree structure (hierarchical)
82
+ - `as-reported-<statement>[-detailed|-presentation]` — the as-reported data instead of standardized
100
83
 
101
- Financial statement responses use standardized `metric_id` keys (from `metadata metrics`) as field names. If you need to understand what a specific metric_id means, check `invd metadata metrics --json` first.
84
+ Financial statement responses use standardized `metric_id` keys (from `metadata metrics`) as field names. If you need to understand what a specific metric_id means, check `invd metadata metrics --json` first. The snapshot commands take `-i, --identifiers` (comma-separated tickers) and are the most efficient way to get complete financials for several companies at once.
102
85
 
103
86
  ```bash
104
- # Income statement
105
87
  invd financials income-statement -i AAPL -p annual --json
106
- invd financials income-statement -i AAPL -p quarterly --limit 4 --json
107
-
108
- # Balance sheet
109
88
  invd financials balance-sheet -i MSFT -p quarterly --limit 4 --json
110
-
111
- # Cash flow statement
112
- invd financials cash-flow -i GOOGL -p annual --json
113
-
114
- # Financial snapshot (multiple companies, comma-separated)
89
+ invd financials as-reported-cash-flow -i GOOGL -p annual --json
115
90
  invd financials snapshot -i AAPL,MSFT,GOOGL -p annual --json
116
91
  invd financials snapshot -i AAPL -p quarterly --calendar-year 2024 --calendar-quarter 3 --json
117
92
  ```
118
93
 
119
- Statement options:
120
- - `--detailed` — includes formula, accession number, HTML tag info
121
- - `--presentation` — returns nested tree structure (hierarchical)
122
- - `--as-reported` — uses as-reported data instead of standardized
123
- - `--with-formula` — includes formula info (requires `--detailed`)
124
- - `--detailed` and `--presentation` are mutually exclusive
125
-
126
- ### Financial Metrics
94
+ ### Financial metrics
127
95
 
128
96
  **Before querying any metrics endpoint (ratios, CAGR, or growth), first fetch the available metric identifiers using `metadata metrics`.** The response from ratios/CAGR/growth uses `metric_id` keys (e.g., `PR_TO_EARNINGS`, `CURRENT_RATIO`) — without knowing the available IDs, you won't know what data exists or how to interpret the results. This also helps you confirm that the metric the user is asking about actually exists.
129
97
 
@@ -131,18 +99,10 @@ Statement options:
131
99
  # STEP 1: Always fetch available metrics first
132
100
  invd metadata metrics --json
133
101
  # Returns: { metrics: [{ metric_id: "...", name: "..." }, ...] }
134
- # Use this to understand what metric_id keys appear in ratios/CAGR/growth responses
135
102
 
136
103
  # STEP 2: Then query the specific metrics endpoint
137
- # Ratios (categories: valuation, profitability, liquidity, solvency)
138
- invd metrics ratios -i AAPL -p annual --json
139
- invd metrics ratios -i AAPL -p annual --category profitability --json
140
-
141
- # CAGR (periods: 3, 5, or 10 years)
142
- invd metrics cagr -i AAPL --json
143
- invd metrics cagr -i AAPL --period-years 5 --json
144
-
145
- # Growth metrics (year_over_year or quarter_over_quarter)
104
+ invd metrics ratios -i AAPL -p annual --category profitability --json # valuation, profitability, liquidity, solvency
105
+ invd metrics cagr -i AAPL --period-years 5 --json # 3, 5 or 10 years
146
106
  invd metrics growth -i MSFT -p quarterly --growth-type year_over_year --json
147
107
  ```
148
108
 
@@ -153,158 +113,469 @@ The metrics response structures differ by endpoint:
153
113
 
154
114
  All share the same `metric_id` identifiers from `metadata metrics`.
155
115
 
156
- ### Segments
116
+ ### Filings, ownership, insider trades
117
+
118
+ - Run `invd metadata section-ids --json` before `filings sections`; `filings search` (`-r, --request`) is natural-language search at 100 credits a call.
119
+ - Ownership transaction types (`--type`): `new_buy`, `added`, `reduced`, `sold_out`. `holdings-by-investor` needs the investor's `--cik`.
120
+ - Insider trades `--acquired-disposed`: `A` (acquisition) or `D` (disposition).
121
+
122
+ ### Earnings calls
123
+
124
+ Commands about one call take a selector: `--event-id <event_id>` (from `events` / `calendar`), or `-i <ticker>` with `--year` + `--quarter` (fiscal) or `--date YYYY-MM-DD` (New York call day); `--event-type` picks a non-earnings event (investor day, conference, AGM). `earnings calendar` defaults to earnings calls (`--event-type all` lists the others too).
125
+
126
+ - `--transcript-version N` (not `--version`) selects a published transcript version; `--as-of <iso>` the version current at that instant.
127
+ - `extractions --kind guidance|kpi`; `--review approved|auto|all` filters guidance by review status; `diff --vs prior` is the only comparison base.
128
+ - `earnings event --include observations` adds the date / time observations; `earnings participants --include evidence` the participation evidence.
129
+ - Every `*_ms` field is milliseconds from the call's start: cite it as `[m:ss]`. `qa_start_ms` is where the Q&A begins (null without one).
130
+ - Company documents and document-search hits are company-published material: quote them as "passages from company-published documents", never as verified facts, and cite each with its document title, year and page (`page`; open `url` at `#page=<page>`). A `webcast` row is link-only (`url` null, `source_url` = the replay page, `link_status`).
131
+ - Media signed URLs expire after 15 minutes; `--output` on the download commands saves the file.
132
+ - The live transcript (`ws listen --earnings`), audio, slides, the live stream and webhooks need the PRO plan (calendar, events and `live` need LITE, the other reads STANDARD); a `403` names the plan a route needs.
133
+
134
+ ### Live transcripts, price ticks and alerts
135
+
136
+ `price_tick` frames (`ws listen --prices`, PRO) carry `at`, `call_ms` (the transcript clock), `price`, `return_bps` (vs the last trade before the call), `day_return_bps` (vs the previous close) and `source` (`stream` | `snapshot`); only seconds with a trade are sent, so pre-market and after-hours ticks are sparse. Describe a move as temporal coincidence with what was said, never as caused by it. `invd earnings live` says `live_prices: true` when ticks flow; during the call `invd earnings price-attribution` returns the minute rows so far (`live: true`, `settled: false`, summary fields null) until the post-call run replaces them.
137
+
138
+ Keyword / guidance alerts (PRO) are webhook subscriptions: `earnings_call.keyword_hit` delivers one POST per mention of a keyword on any live call (speaker, `start_ms`, sentence), `earnings_call.guidance_flash` one per guidance number spoken live. "Alert me when any call mentions 'tariffs'" → `earnings_call_alert_create` with `keywords: ["tariffs"]`, `events: ["earnings_call.keyword_hit"]`, the user's HTTPS endpoint and no `ciks` (every company); later changes go through `earnings_call_alert_update` (keywords, ciks, events, active). CLI:
157
139
 
158
140
  ```bash
159
- # Segmented financials
160
- invd segments list -i AAPL -p annual --json
161
- invd segments list -i AAPL -p annual --detailed --json
141
+ invd webhooks create --body '{"url":"https://hooks.example.com/alerts","events":["earnings_call.keyword_hit"],"filters":{"keywords":["tariffs"]}}' --json # the secret is printed once
142
+ invd webhooks create --body '{"url":"https://hooks.example.com/invinite","events":["earnings_call.transcript_ready"],"filters":{"ciks":["320193"]}}' --json
143
+ invd webhooks update --id <id> --body '{"keywords":["tariffs","buyback"]}' --json
144
+ invd webhooks deliveries --id <id> --json
162
145
  ```
163
146
 
164
- ### SEC Filings
147
+ ## Commands Reference
148
+
149
+ One example per command. `<name>` is a value to fill in; `invd <group> <action> --help` lists every flag. A command about one call also needs the selector described under *Earnings calls* (`--event-id`, or `-i` with `--year` + `--quarter` or `--date`).
150
+
151
+ <!-- invd:commands:start -->
152
+ <!-- Generated by `pnpm skill:commands` from src/generated/cli-manifest.json and src/hand-written-commands.ts. Edit only inside an invd:hand block; `pnpm skill:commands:check` fails on drift. -->
153
+
154
+ ### company
155
+
156
+ Company search, details, fiscal periods, dividends and splits
165
157
 
166
158
  ```bash
167
- # List filings (filter by form type: 10-K, 10-Q, 8-K, etc.)
168
- invd filings list -i AAPL --json
169
- invd filings list -i AAPL --form-type 10-K --json
159
+ # Company details
160
+ invd company details -i <identifier> --json
170
161
 
171
- # Natural language search through filings
172
- invd filings search -r "revenue recognition policy changes" -i AAPL --json
162
+ # Company dividends (optional: --start-date, --end-date, --sort, --limit, --offset, --all)
163
+ invd company dividends -i <identifier> --json
173
164
 
174
- # Fetch filing sections (full text content)
175
- invd filings sections -i AAPL --form-type 10-K --section-id risk_factors --json
176
- invd filings sections -i AAPL --form-type 10-K --accession-number 0000320193-23-000106 --json
165
+ # Company fiscal periods (optional: --sort, --limit, --offset, --all)
166
+ invd company fiscal-periods -i <identifier> --json
167
+
168
+ # List available companies
169
+ invd company list --json
170
+
171
+ # Search companies (optional: --limit, --offset, --all)
172
+ invd company search -q <query> --json
173
+
174
+ # Stock splits (optional: --sort, --limit, --offset, --all)
175
+ invd company splits -i <identifier> --json
176
+ ```
177
+
178
+ ### config
179
+
180
+ <!-- invd:hand:config -->
181
+ ```bash
182
+ invd config set-key # masked prompt for an API key
183
+ invd config set-url https://api.data.invinite.com # API host
184
+ invd config show
185
+ invd config reset
186
+ ```
187
+ <!-- /invd:hand:config -->
188
+
189
+ ### earnings
190
+
191
+ Earnings calls: calendar, transcripts, Q&A, extractions, media, search and webhook subscriptions
192
+
193
+ ```bash
194
+ # Analysts of a company (optional: --limit, --offset, --all)
195
+ invd earnings analysts -i <identifier> --json
196
+
197
+ # Earnings call calendar (optional: --from, --to, --status, --session, --exchange, --event-type, --sort, --limit, --offset, --all)
198
+ invd earnings calendar --json
199
+
200
+ # Call-over-call diff (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --vs)
201
+ invd earnings diff --json
177
202
 
178
- # Available form types
203
+ # Search investor documents (optional: --identifier, --kind, --section, --year, --table, --limit)
204
+ invd earnings document-search -q <q> --json
205
+
206
+ # Earnings call by ID (optional: --include)
207
+ invd earnings event --event-id <event_id> --json
208
+
209
+ # Event history of a company (optional: --from, --to, --include, --event-type, --sort, --limit, --offset, --all)
210
+ invd earnings events -i <identifier> --json
211
+
212
+ # Guidance and KPI extractions (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --kind, --review, --limit, --offset, --all)
213
+ invd earnings extractions --json
214
+
215
+ # Guidance history (optional: --period-kind, --basis, --limit)
216
+ invd earnings guidance-history -i <identifier> --metric <metric> --json
217
+
218
+ # Live earnings calls
219
+ invd earnings live --json
220
+
221
+ # Earnings call metrics (optional: --event-id, --identifier, --year, --quarter, --date, --event-type)
222
+ invd earnings metrics --json
223
+
224
+ # Earnings call participants (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --include)
225
+ invd earnings participants --json
226
+
227
+ # Person across earnings calls (optional: --limit, --offset, --all)
228
+ invd earnings person --person-id <person_id> --json
229
+
230
+ # Price moves during a call (optional: --event-id, --identifier, --year, --quarter, --date, --event-type)
231
+ invd earnings price-attribution --json
232
+
233
+ # Speaker prosody (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --section)
234
+ invd earnings prosody --json
235
+
236
+ # Earnings call Q&A (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --limit, --offset, --include, --all)
237
+ invd earnings qa --json
238
+
239
+ # Search earnings calls (optional: --event-id, --identifier, --from, --to, --type, --event-type, --limit)
240
+ invd earnings search -q <q> --json
241
+
242
+ # Live audio stream URL (optional: --event-id, --identifier, --year, --quarter, --date, --event-type)
243
+ invd earnings stream --json
244
+
245
+ # Transcript version diff (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --to)
246
+ invd earnings transcript-diff --from <from> --json
247
+
248
+ # Transcript versions (optional: --event-id, --identifier, --year, --quarter, --date, --event-type)
249
+ invd earnings versions --json
250
+ ```
251
+
252
+ <!-- invd:hand:earnings transcript -->
253
+ ```bash
254
+ # Transcript (formats: speakers, text, words, sections, cleaned); --output saves it as text
255
+ invd earnings transcript -i AAPL --year 2026 --quarter 4 --format speakers --json
256
+ invd earnings transcript --event-id <event_id> --format sections --json
257
+ invd earnings transcript -i AAPL --year 2026 --quarter 4 --output aapl-q4.txt
258
+ ```
259
+ <!-- /invd:hand:earnings transcript -->
260
+
261
+ <!-- invd:hand:earnings press-release -->
262
+ ```bash
263
+ # Press release of a call; --body includes its text, --output saves it
264
+ invd earnings press-release --event-id <event_id> --body --json
265
+ invd earnings press-release -i AAPL --year 2026 --quarter 4 --body --output release.txt
266
+ ```
267
+ <!-- /invd:hand:earnings press-release -->
268
+
269
+ <!-- invd:hand:earnings audio -->
270
+ ```bash
271
+ # Call recording (PRO); --output saves the file from its signed URL (expires after 15 min)
272
+ invd earnings audio --event-id <event_id> --json
273
+ invd earnings audio --event-id <event_id> --output call.mp3
274
+ ```
275
+ <!-- /invd:hand:earnings audio -->
276
+
277
+ <!-- invd:hand:earnings slides -->
278
+ ```bash
279
+ # Slide deck (PRO): --markdown prints the page markdown, --output saves the PDF
280
+ invd earnings slides --event-id <event_id> --markdown --json
281
+ invd earnings slides -i AAPL --year 2026 --quarter 4 --output deck.pdf
282
+ ```
283
+ <!-- /invd:hand:earnings slides -->
284
+
285
+ <!-- invd:hand:earnings documents -->
286
+ ```bash
287
+ # A call's documents; --output downloads every row into a directory (a link-only sec_filing row is warned on stderr; use its source_url)
288
+ invd earnings documents --event-id <event_id> --kind cfo_commentary --json
289
+ invd earnings documents --event-id <event_id> --output ./docs
290
+ ```
291
+ <!-- /invd:hand:earnings documents -->
292
+
293
+ <!-- invd:hand:earnings company-documents -->
294
+ ```bash
295
+ # Company IR library (outside the calls' folders); --output downloads every stored file: <year>-<kind>-<document_id>.<ext>
296
+ invd earnings company-documents -i AAPL --section annual_reports,proxy --json
297
+ invd earnings company-documents -i AAPL --kind investor_day_deck --output ./ir-docs
298
+ ```
299
+ <!-- /invd:hand:earnings company-documents -->
300
+
301
+ <!-- invd:hand:earnings document -->
302
+ ```bash
303
+ # One company document: metadata, --pages for per-page text, --output to download it
304
+ invd earnings document --document-id <document_id> --pages --json
305
+ invd earnings document --document-id <document_id> --output annual-report.pdf
306
+ ```
307
+ <!-- /invd:hand:earnings document -->
308
+
309
+ ### filings
310
+
311
+ SEC filings, their parsed sections and natural-language filing search
312
+
313
+ ```bash
314
+ # Available SEC form types (optional: --identifier)
179
315
  invd filings form-types --json
180
- invd filings form-types -i AAPL --json
181
316
 
182
- # Available section IDs
183
- invd metadata section-ids --json
317
+ # SEC filings (optional: --form-type, --sort, --limit, --offset, --all)
318
+ invd filings list -i <identifier> --json
319
+
320
+ # Search SEC filings (optional: --identifier, --accession-number)
321
+ invd filings search -r <request> --json
322
+
323
+ # SEC filing sections (optional: --section-id, --accession-number, --fiscal-year, --fiscal-quarter)
324
+ invd filings sections -i <identifier> --form-type 10-Q --json
184
325
  ```
185
326
 
186
- ### Institutional Ownership
327
+ ### financials
328
+
329
+ Financial statements (standardized & as-reported)
187
330
 
188
331
  ```bash
189
- # Holdings by investor (requires CIK)
190
- invd ownership holdings-by-investor --cik 0001067983 --json
332
+ # As-reported balance sheet (optional: --sort, --limit, --offset, --all)
333
+ invd financials as-reported-balance-sheet -i <identifier> -p quarterly --json
191
334
 
192
- # Holdings by company
193
- invd ownership holdings-by-company -i AAPL --json
194
- invd ownership holdings-by-company -i AAPL --min-value 1000000 --json
335
+ # As-reported balance sheet (detailed) (optional: --sort, --limit, --offset, --with-formula, --all)
336
+ invd financials as-reported-balance-sheet-detailed -i <identifier> -p quarterly --json
195
337
 
196
- # Ownership transactions
197
- invd ownership transactions -i AAPL --type new_buy --json
198
- invd ownership transactions --cik 0001067983 --calendar-year 2024 --json
338
+ # As-reported balance sheet (presentation) (optional: --sort, --limit, --offset, --all)
339
+ invd financials as-reported-balance-sheet-presentation -i <identifier> -p quarterly --json
199
340
 
200
- # List institutional investors
201
- invd ownership institutions --json
202
- invd ownership institutions --ciks 0001067983,0001364742 --json
341
+ # As-reported cash flow statement (optional: --sort, --limit, --offset, --all)
342
+ invd financials as-reported-cash-flow -i <identifier> -p quarterly --json
343
+
344
+ # As-reported cash flow statement (detailed) (optional: --sort, --limit, --offset, --with-formula, --all)
345
+ invd financials as-reported-cash-flow-detailed -i <identifier> -p quarterly --json
346
+
347
+ # As-reported cash flow statement (presentation) (optional: --sort, --limit, --offset, --all)
348
+ invd financials as-reported-cash-flow-presentation -i <identifier> -p quarterly --json
349
+
350
+ # As-reported income statement (optional: --sort, --limit, --offset, --all)
351
+ invd financials as-reported-income-statement -i <identifier> -p quarterly --json
352
+
353
+ # As-reported income statement (detailed) (optional: --sort, --limit, --offset, --with-formula, --all)
354
+ invd financials as-reported-income-statement-detailed -i <identifier> -p quarterly --json
355
+
356
+ # As-reported income statement (presentation) (optional: --sort, --limit, --offset, --all)
357
+ invd financials as-reported-income-statement-presentation -i <identifier> -p quarterly --json
358
+
359
+ # As-reported snapshot (optional: --calendar-year, --calendar-quarter)
360
+ invd financials as-reported-snapshot -i <identifiers> -p quarterly --json
361
+
362
+ # As-reported snapshot (detailed) (optional: --calendar-year, --calendar-quarter, --with-formula)
363
+ invd financials as-reported-snapshot-detailed -i <identifiers> -p quarterly --json
364
+
365
+ # As-reported snapshot (presentation) (optional: --calendar-year, --calendar-quarter)
366
+ invd financials as-reported-snapshot-presentation -i <identifiers> -p quarterly --json
367
+
368
+ # Standardized balance sheet (optional: --sort, --limit, --offset, --all)
369
+ invd financials balance-sheet -i <identifier> -p quarterly --json
370
+
371
+ # Standardized balance sheet (detailed) (optional: --sort, --limit, --offset, --with-formula, --all)
372
+ invd financials balance-sheet-detailed -i <identifier> -p quarterly --json
373
+
374
+ # Standardized balance sheet (presentation) (optional: --sort, --limit, --offset, --all)
375
+ invd financials balance-sheet-presentation -i <identifier> -p quarterly --json
376
+
377
+ # Standardized cash flow statement (optional: --sort, --limit, --offset, --all)
378
+ invd financials cash-flow -i <identifier> -p quarterly --json
379
+
380
+ # Standardized cash flow statement (detailed) (optional: --sort, --limit, --offset, --with-formula, --all)
381
+ invd financials cash-flow-detailed -i <identifier> -p quarterly --json
382
+
383
+ # Standardized cash flow statement (presentation) (optional: --sort, --limit, --offset, --all)
384
+ invd financials cash-flow-presentation -i <identifier> -p quarterly --json
385
+
386
+ # Standardized income statement (optional: --sort, --limit, --offset, --all)
387
+ invd financials income-statement -i <identifier> -p quarterly --json
388
+
389
+ # Standardized income statement (detailed) (optional: --sort, --limit, --offset, --with-formula, --all)
390
+ invd financials income-statement-detailed -i <identifier> -p quarterly --json
391
+
392
+ # Standardized income statement (presentation) (optional: --sort, --limit, --offset, --all)
393
+ invd financials income-statement-presentation -i <identifier> -p quarterly --json
394
+
395
+ # Standardized snapshot (optional: --calendar-year, --calendar-quarter)
396
+ invd financials snapshot -i <identifiers> -p quarterly --json
397
+
398
+ # Standardized snapshot (detailed) (optional: --calendar-year, --calendar-quarter, --with-formula)
399
+ invd financials snapshot-detailed -i <identifiers> -p quarterly --json
400
+
401
+ # Standardized snapshot (presentation) (optional: --calendar-year, --calendar-quarter)
402
+ invd financials snapshot-presentation -i <identifiers> -p quarterly --json
203
403
  ```
204
404
 
205
- Transaction types: `new_buy`, `added`, `reduced`, `sold_out`
405
+ ### health
206
406
 
207
- ### Insider Trades
407
+ Liveness of the API (no API key)
208
408
 
209
409
  ```bash
210
- # Insider transactions
211
- invd insider-trades list -i AAPL --json
212
- invd insider-trades list -i TSLA --acquired-disposed D --limit 20 --json
213
- invd insider-trades list -i AAPL --start-date 2024-01-01 --json
410
+ # Health check
411
+ invd health --json
214
412
  ```
215
413
 
216
- `--acquired-disposed`: `A` (acquisition) or `D` (disposition)
414
+ ### insider-trades
217
415
 
218
- ### IPOs
416
+ Insider transactions of a company
219
417
 
220
418
  ```bash
419
+ # Insider trades (optional: --start-date, --end-date, --acquired-disposed, --sort, --limit, --offset, --all)
420
+ invd insider-trades list -i <identifier> --json
421
+ ```
422
+
423
+ ### ipos
424
+
425
+ Initial public offerings
426
+
427
+ ```bash
428
+ # List IPOs (optional: --start-date, --end-date, --sort, --limit, --offset, --all)
221
429
  invd ipos list --json
222
- invd ipos list --start-date 2024-01-01 --end-date 2024-12-31 --json
223
430
  ```
224
431
 
225
- ### Market Data
432
+ ### login
433
+
434
+ <!-- invd:hand:login -->
435
+ ```bash
436
+ invd login # browser sign-in to your Invinite Data account; stores the key
437
+ ```
438
+ <!-- /invd:hand:login -->
439
+
440
+ ### logout
226
441
 
442
+ <!-- invd:hand:logout -->
227
443
  ```bash
444
+ invd logout # revokes the login and clears stored credentials
445
+ ```
446
+ <!-- /invd:hand:logout -->
447
+
448
+ ### market
449
+
450
+ Market calendar
451
+
452
+ ```bash
453
+ # Market holidays (optional: --sort, --limit, --offset, --all)
228
454
  invd market holidays --json
229
455
  ```
230
456
 
231
- ### Metadata (query before using metrics or filing sections)
457
+ ### metadata
232
458
 
233
- These are discovery endpoints — use them before querying data that depends on specific identifiers.
459
+ The metrics and filing section ids the API serves
234
460
 
235
461
  ```bash
236
- # List all available metric IDs — run this BEFORE querying ratios, CAGR, or growth
462
+ # Available metrics
237
463
  invd metadata metrics --json
238
- # Returns: { metrics: [{ metric_id: "PR_TO_EARNINGS", name: "Price-to-Earnings Ratio" }, ...] }
239
464
 
240
- # List available section IDs — run this BEFORE querying filing sections
465
+ # Available SEC section IDs
241
466
  invd metadata section-ids --json
242
467
  ```
243
468
 
244
- ### Earnings Calls
469
+ ### metrics
245
470
 
246
- Commands about one call take a selector: `--event <event_id>` (from `events` / `calendar`), or `-i <ticker>` with `--year` + `--quarter` (fiscal) or `--date YYYY-MM-DD` (New York call day).
471
+ Ratios, growth and CAGR derived from the statements
247
472
 
248
473
  ```bash
249
- # Calendar across companies, a company's calls, calls being captured right now
250
- # --event-type: earnings_call (calendar default), investor_day, conference, agm, other, all (events default)
251
- invd earnings calendar --from 2026-10-20 --to 2026-10-31 --json
252
- invd earnings calendar --event-type all --json # investor days, conferences, AGMs too
253
- invd earnings events -i AAPL -s desc -l 4 --json
254
- invd earnings live --json
255
- invd earnings event <event_id> --json
474
+ # CAGR metrics (optional: --period-years, --sort, --limit, --offset, --all)
475
+ invd metrics cagr -i <identifier> --json
256
476
 
257
- # Transcript (formats: speakers, text, words, sections, cleaned), versions, word diff between versions
258
- # qa_start_ms = where the Q&A begins (ms into the call, null without one)
259
- invd earnings transcript -i AAPL --year 2026 --quarter 4 --format speakers --json
260
- invd earnings versions --event <event_id> --json
261
- invd earnings transcript-diff --event <event_id> --from 1 --json
262
-
263
- # Q&A pairs, speakers, analysts of a company, one person's appearances
264
- invd earnings qa --event <event_id> --json
265
- invd earnings participants --event <event_id> --json
266
- invd earnings analysts -i AAPL --json
267
- invd earnings person <person_id> --json
268
-
269
- # Press release, guidance / KPI extractions, a metric's guidance across calls
270
- invd earnings press-release --event <event_id> --body --json
271
- invd earnings extractions --event <event_id> --kind guidance --json
272
- invd earnings extractions --event <event_id> --kind kpi --json
273
- invd earnings guidance-history -i AAPL --metric revenue --json
274
-
275
- # Derived: diff vs the prior call, call metrics, prosody, price moves during the call
276
- invd earnings diff --event <event_id> --json
277
- invd earnings metrics --event <event_id> --json
278
- invd earnings prosody --event <event_id> --section qa --json
279
- invd earnings price-attribution --event <event_id> --json # minute returns (bps) next to what was said; coincidence, not cause
280
-
281
- # Media (signed URLs expire after 15 min; --output saves the file)
282
- invd earnings audio --event <event_id> --output call.mp3
283
- invd earnings slides --event <event_id> --markdown --json
284
- invd earnings documents --event <event_id> --kind cfo_commentary --json
285
- invd earnings documents --event <event_id> --output ./docs # a row without url (link-only sec_filing) is warned on stderr; use its source_url
286
- invd earnings stream --event <event_id> --json # live HLS URL of a call in progress (PRO)
287
-
288
- # Semantic search over transcripts and slides (--event-type all: investor days, conferences too)
289
- invd earnings search -q "data center demand" -i NVDA --json
290
-
291
- # Company IR library (outside the calls' folders) and document search
292
- invd earnings company-documents -i AAPL --section annual_reports,proxy --json
293
- invd earnings company-documents -i AAPL --kind investor_day_deck --output ./ir-docs # <year>-<kind>-<document_id>.<ext>
294
- invd earnings document <document_id> --pages --json # per-page text
295
- invd earnings document-search -q "capital allocation" -i AAPL --json # passages + document, year, page
477
+ # Growth metrics (optional: --growth-type, --sort, --limit, --offset, --all)
478
+ invd metrics growth -i <identifier> -p quarterly --json
479
+
480
+ # Financial ratios (optional: --category, --sort, --limit, --offset, --all)
481
+ invd metrics ratios -i <identifier> -p quarterly --json
296
482
  ```
297
483
 
298
- - `--transcript-version N` (not `--version`) selects a published transcript version; `--as-of <iso>` the version current at that instant.
299
- - `extractions --review approved|auto|all` filters guidance by review status; `diff --vs prior` is the only comparison base.
300
- - Every `*_ms` field is milliseconds from the call's start: cite it as `[m:ss]`.
301
- - Company documents and document-search hits are company-published material: quote them as "passages from company-published documents", never as verified facts, and cite each with its document title, year and page (`page`; open `url` at `#page=<page>`). A `webcast` row is link-only (`url` null, `source_url` = the replay page, `link_status`).
302
- - The live transcript (`ws listen --earnings`), audio, slides, the live stream and webhooks need the PRO plan (calendar, events and `live` need LITE, the other reads STANDARD); a `403` names the plan a route needs.
484
+ ### ownership
485
+
486
+ 13F holdings, holders and position changes of institutional investors
487
+
488
+ ```bash
489
+ # Holdings by company (optional: --min-value, --sort, --limit, --offset, --all)
490
+ invd ownership holdings-by-company -i <identifier> --json
303
491
 
304
- ### Live transcripts and webhooks
492
+ # Holdings by investor (optional: --sort, --limit, --offset, --all)
493
+ invd ownership holdings-by-investor --cik <cik> --json
494
+
495
+ # List institutional investors (optional: --ciks, --limit, --offset, --sort, --all)
496
+ invd ownership institutions --json
497
+
498
+ # Institutional transactions (optional: --cik, --identifier, --start-date, --end-date, --type, --calendar-year, --calendar-quarter, --sort, --limit, --offset, --all)
499
+ invd ownership transactions --json
500
+ ```
501
+
502
+ ### plugin
503
+
504
+ <!-- invd:hand:plugin -->
505
+ ```bash
506
+ invd plugin install --claude --global # also --opencode, --codex, --copilot, --all; --local for this project
507
+ invd plugin uninstall --claude --global
508
+ ```
509
+ <!-- /invd:hand:plugin -->
510
+
511
+ ### segments
512
+
513
+ Financial facts broken down by business and geographic segment
514
+
515
+ ```bash
516
+ # Segmented financials (optional: --segment-id, --sort, --limit, --offset, --all)
517
+ invd segments list -i <identifier> -p quarterly --json
518
+
519
+ # Segmented financials (detailed) (optional: --segment-id, --sort, --limit, --offset, --all)
520
+ invd segments list-detailed -i <identifier> -p quarterly --json
521
+ ```
522
+
523
+ ### status
524
+
525
+ Public status and licensing (no API key)
526
+
527
+ ```bash
528
+ # Licensing policy
529
+ invd status licensing --json
530
+
531
+ # Service status
532
+ invd status show --json
533
+ ```
534
+
535
+ ### usage
536
+
537
+ Your data account's own usage (costs no credits)
305
538
 
306
539
  ```bash
307
- # Follow a live call over the WebSocket (event ID or CIK; NDJSON with --json)
540
+ # Account usage (optional: --days)
541
+ invd usage --json
542
+ ```
543
+
544
+ ### webhooks
545
+
546
+ Earnings-call webhook subscriptions (PRO): signed POSTs of the call lifecycle
547
+
548
+ ```bash
549
+ # Create a webhook (optional: --body-file)
550
+ invd webhooks create --body '<json>' --json
551
+
552
+ # Delete a webhook
553
+ invd webhooks delete --id <id> --json
554
+
555
+ # Webhook delivery attempts
556
+ invd webhooks deliveries --id <id> --json
557
+
558
+ # List webhooks
559
+ invd webhooks list --json
560
+
561
+ # Rotate a webhook signing secret
562
+ invd webhooks rotate-secret --id <id> --json
563
+
564
+ # Send a test delivery
565
+ invd webhooks test --id <id> --json
566
+
567
+ # Update a webhook (optional: --body, --body-file)
568
+ invd webhooks update --id <id> --json
569
+ ```
570
+
571
+ ### ws
572
+
573
+ <!-- invd:hand:ws -->
574
+ ```bash
575
+ # Real-time SEC filing stream
576
+ invd ws listen --json
577
+
578
+ # Follow a live call (event ID or CIK; NDJSON with --json; PRO)
308
579
  invd ws listen --earnings <event_id> --json
309
580
  invd ws listen --earnings 320193 --names
310
581
 
@@ -314,32 +585,18 @@ invd ws listen --earnings <event_id> --prices --json | jq 'select(.type=="price_
314
585
  # Keyword alerts on a live call, or across every live call (--all-live needs --keywords)
315
586
  invd ws listen --earnings 320193 --keywords tariffs,china --keyword-match stem --json
316
587
  invd ws listen --all-live --keywords tariffs --json
317
-
318
- # Earnings-call webhook subscriptions (the secret is printed once)
319
- invd webhooks list --json
320
- invd webhooks create --url https://hooks.example.com/invinite --events earnings_call.transcript_ready --ciks 320193
321
- invd webhooks create --url https://hooks.example.com/alerts --events earnings_call.keyword_hit --keywords tariffs # every company
322
- invd webhooks update <id> --keywords tariffs,buyback --json
323
- invd webhooks deliveries <id> --json
324
588
  ```
589
+ <!-- /invd:hand:ws -->
325
590
 
326
- `price_tick` frames (`--prices`, PRO) carry `at`, `call_ms` (the transcript clock), `price`, `return_bps` (vs the last trade before the call), `day_return_bps` (vs the previous close) and `source` (`stream` | `snapshot`); only seconds with a trade are sent, so pre-market and after-hours ticks are sparse. Describe a move as temporal coincidence with what was said, never as caused by it. `invd earnings live` says `live_prices: true` when ticks flow; during the call `invd earnings price-attribution` returns the minute rows so far (`live: true`, `settled: false`, summary fields null) until the post-call run replaces them.
327
-
328
- Keyword / guidance alerts (PRO) are webhook subscriptions: `earnings_call.keyword_hit` delivers one POST per mention of a keyword on any live call (speaker, `start_ms`, sentence), `earnings_call.guidance_flash` one per guidance number spoken live. "Alert me when any call mentions 'tariffs'" → `earnings_call_alert_create` with `keywords: ["tariffs"]`, `events: ["earnings_call.keyword_hit"]`, the user's HTTPS endpoint and no `ciks` (every company); later changes go through `earnings_call_alert_update` (keywords, ciks, events, active). CLI: `invd webhooks create --url <url> --events earnings_call.keyword_hit --keywords tariffs`.
329
-
330
- ### Health Check
331
-
332
- ```bash
333
- invd health --json
334
- ```
591
+ <!-- invd:commands:end -->
335
592
 
336
593
  ## Pagination
337
594
 
338
- All list endpoints support:
595
+ Paginated commands (the `--all` ones above) take:
339
596
  - `-l, --limit <n>` — max results per page
340
597
  - `--offset <n>` — pagination offset
341
- - `--all` — auto-paginate all results
342
- - `-s, --sort <dir>` — `asc` or `desc`
598
+ - `--all` — auto-paginate all results (follows `next_url`; per-company commands merge each company's pages)
599
+ - `-s, --sort <dir>` — `asc` or `desc` (where the operation supports it)
343
600
 
344
601
  ## Common Patterns
345
602
 
@@ -368,10 +625,10 @@ invd filings search -r "artificial intelligence strategy" -i MSFT --json
368
625
  Find the call, then read it from the cheapest source to the most detailed:
369
626
  ```bash
370
627
  invd earnings events -i NVDA -s desc -l 4 --json # pick the event_id
371
- invd earnings transcript --event <event_id> --format sections --json
372
- invd earnings extractions --event <event_id> --kind guidance --json
373
- invd earnings search -q "gross margin outlook" --event <event_id> --json
374
- invd earnings price-attribution --event <event_id> --json # optional: price moves during the call
628
+ invd earnings transcript --event-id <event_id> --format sections --json
629
+ invd earnings extractions --event-id <event_id> --kind guidance --json
630
+ invd earnings search -q "gross margin outlook" --event-id <event_id> --json
631
+ invd earnings price-attribution --event-id <event_id> --json # optional: price moves during the call
375
632
  ```
376
633
  `price-attribution` (MCP `earnings_call_price_moves`, STANDARD, 1 credit) lines up minute returns with what was said in that minute: temporal coincidence, not attribution of cause; pre-market bars are sparse, and a `404 price_attribution_unavailable` means the call is not attributed yet.
377
634