@invinite-org/invinite-data-cli 3.0.0 → 4.1.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 (129) hide show
  1. package/README.md +341 -374
  2. package/claude-plugin/.claude-plugin/plugin.json +1 -1
  3. package/claude-plugin/agents/invinite-data.md +59 -28
  4. package/claude-plugin/commands/analyze-earnings-call.md +15 -14
  5. package/claude-plugin/commands/analyze-filing.md +8 -7
  6. package/claude-plugin/commands/compare-companies.md +5 -5
  7. package/claude-plugin/commands/financial-research.md +9 -9
  8. package/claude-plugin/commands/ownership-review.md +6 -6
  9. package/claude-plugin/skills/invinite-data-cli/SKILL.md +466 -570
  10. package/dist/bin/invd.js +11 -2
  11. package/dist/bin/invd.js.map +1 -1
  12. package/dist/src/cli.d.ts +2 -0
  13. package/dist/src/cli.js +48 -29
  14. package/dist/src/cli.js.map +1 -1
  15. package/dist/src/client/api-client.d.ts +24 -24
  16. package/dist/src/client/api-client.js +52 -70
  17. package/dist/src/client/api-client.js.map +1 -1
  18. package/dist/src/client/pagination.d.ts +12 -11
  19. package/dist/src/client/pagination.js +47 -56
  20. package/dist/src/client/pagination.js.map +1 -1
  21. package/dist/src/commands/agent-setup.d.ts +21 -0
  22. package/dist/src/commands/agent-setup.js +112 -0
  23. package/dist/src/commands/agent-setup.js.map +1 -0
  24. package/dist/src/commands/api.d.ts +27 -0
  25. package/dist/src/commands/api.js +180 -0
  26. package/dist/src/commands/api.js.map +1 -0
  27. package/dist/src/commands/auth.d.ts +37 -0
  28. package/dist/src/commands/auth.js +336 -0
  29. package/dist/src/commands/auth.js.map +1 -0
  30. package/dist/src/commands/completion.d.ts +7 -0
  31. package/dist/src/commands/completion.js +115 -0
  32. package/dist/src/commands/completion.js.map +1 -0
  33. package/dist/src/commands/config.d.ts +4 -0
  34. package/dist/src/commands/config.js +85 -48
  35. package/dist/src/commands/config.js.map +1 -1
  36. package/dist/src/commands/plugin.d.ts +8 -0
  37. package/dist/src/commands/plugin.js +8 -10
  38. package/dist/src/commands/plugin.js.map +1 -1
  39. package/dist/src/config/auth.d.ts +17 -1
  40. package/dist/src/config/auth.js +50 -36
  41. package/dist/src/config/auth.js.map +1 -1
  42. package/dist/src/config/config-manager.d.ts +56 -4
  43. package/dist/src/config/config-manager.js +173 -29
  44. package/dist/src/config/config-manager.js.map +1 -1
  45. package/dist/src/config/toml.d.ts +7 -0
  46. package/dist/src/config/toml.js +79 -0
  47. package/dist/src/config/toml.js.map +1 -0
  48. package/dist/src/examples.d.ts +22 -0
  49. package/dist/src/examples.js +56 -0
  50. package/dist/src/examples.js.map +1 -0
  51. package/dist/src/generated/cli-manifest.json +5573 -5140
  52. package/dist/src/hand-written-commands.d.ts +11 -41
  53. package/dist/src/hand-written-commands.js +7 -17
  54. package/dist/src/hand-written-commands.js.map +1 -1
  55. package/dist/src/output/jq.d.ts +15 -0
  56. package/dist/src/output/jq.js +234 -0
  57. package/dist/src/output/jq.js.map +1 -0
  58. package/dist/src/output/options.d.ts +29 -0
  59. package/dist/src/output/options.js +72 -0
  60. package/dist/src/output/options.js.map +1 -0
  61. package/dist/src/output/render.d.ts +54 -0
  62. package/dist/src/output/render.js +160 -0
  63. package/dist/src/output/render.js.map +1 -0
  64. package/dist/src/shared/errors.d.ts +59 -15
  65. package/dist/src/shared/errors.js +126 -38
  66. package/dist/src/shared/errors.js.map +1 -1
  67. package/dist/src/shared/prompt.d.ts +10 -0
  68. package/dist/src/shared/prompt.js +24 -0
  69. package/dist/src/shared/prompt.js.map +1 -0
  70. package/dist/src/shared/spinner.js +2 -1
  71. package/dist/src/shared/spinner.js.map +1 -1
  72. package/dist/src/spec-commands.d.ts +14 -6
  73. package/dist/src/spec-commands.js +454 -174
  74. package/dist/src/spec-commands.js.map +1 -1
  75. package/dist/src/spec-flags.d.ts +11 -6
  76. package/dist/src/spec-flags.js +14 -7
  77. package/dist/src/spec-flags.js.map +1 -1
  78. package/dist/src/spec-manifest.d.ts +416 -116
  79. package/dist/src/spec-manifest.js +44 -13
  80. package/dist/src/spec-manifest.js.map +1 -1
  81. package/dist/src/update-notifier.d.ts +9 -0
  82. package/dist/src/update-notifier.js +63 -0
  83. package/dist/src/update-notifier.js.map +1 -0
  84. package/package.json +2 -3
  85. package/dist/src/client/earnings-live.d.ts +0 -194
  86. package/dist/src/client/earnings-live.js +0 -300
  87. package/dist/src/client/earnings-live.js.map +0 -1
  88. package/dist/src/client/news-live.d.ts +0 -72
  89. package/dist/src/client/news-live.js +0 -120
  90. package/dist/src/client/news-live.js.map +0 -1
  91. package/dist/src/client/pdf.d.ts +0 -15
  92. package/dist/src/client/pdf.js +0 -15
  93. package/dist/src/client/pdf.js.map +0 -1
  94. package/dist/src/client/websocket-client.d.ts +0 -19
  95. package/dist/src/client/websocket-client.js +0 -174
  96. package/dist/src/client/websocket-client.js.map +0 -1
  97. package/dist/src/commands/earnings.d.ts +0 -16
  98. package/dist/src/commands/earnings.js +0 -464
  99. package/dist/src/commands/earnings.js.map +0 -1
  100. package/dist/src/commands/login.d.ts +0 -15
  101. package/dist/src/commands/login.js +0 -249
  102. package/dist/src/commands/login.js.map +0 -1
  103. package/dist/src/commands/news.d.ts +0 -2
  104. package/dist/src/commands/news.js +0 -69
  105. package/dist/src/commands/news.js.map +0 -1
  106. package/dist/src/commands/sec.d.ts +0 -47
  107. package/dist/src/commands/sec.js +0 -191
  108. package/dist/src/commands/sec.js.map +0 -1
  109. package/dist/src/commands/ws.d.ts +0 -33
  110. package/dist/src/commands/ws.js +0 -116
  111. package/dist/src/commands/ws.js.map +0 -1
  112. package/dist/src/formatters/json-formatter.d.ts +0 -1
  113. package/dist/src/formatters/json-formatter.js +0 -4
  114. package/dist/src/formatters/json-formatter.js.map +0 -1
  115. package/dist/src/formatters/table-formatter.d.ts +0 -4
  116. package/dist/src/formatters/table-formatter.js +0 -73
  117. package/dist/src/formatters/table-formatter.js.map +0 -1
  118. package/dist/src/formatters/time.d.ts +0 -2
  119. package/dist/src/formatters/time.js +0 -14
  120. package/dist/src/formatters/time.js.map +0 -1
  121. package/dist/src/shared/output.d.ts +0 -3
  122. package/dist/src/shared/output.js +0 -13
  123. package/dist/src/shared/output.js.map +0 -1
  124. package/dist/src/shared/readiness.d.ts +0 -4
  125. package/dist/src/shared/readiness.js +0 -60
  126. package/dist/src/shared/readiness.js.map +0 -1
  127. package/dist/src/shared/types.d.ts +0 -11
  128. package/dist/src/shared/types.js +0 -2
  129. package/dist/src/shared/types.js.map +0 -1
@@ -1,825 +1,721 @@
1
1
  ---
2
2
  name: invinite-financial-data
3
- description: Fetch financial data through the Invinite Data API MCP connector or invd CLI. Use whenever the user wants company information, financial statements, SEC filings, institutional ownership, insider trades, IPO data, market holidays, financial metrics, earnings calls, company news, or other stock/company data, including requests mentioning tickers, CIKs, balance sheets, income statements, cash flows, 10-K, 10-Q, ratios, CAGR, growth rates, dividends, stock splits, institutional holdings, call transcripts, earnings guidance, KPIs, Q&A, analysts, live calls, slides, press releases, company announcements, newsroom posts, or 8-K news.
3
+ description: Fetch financial data through the Invinite Data API (v2) MCP connector or the invd 4 CLI. Use whenever the user wants company information, financial statements (standardized or as-reported, point in time), ratios, growth, CAGR, segments, SEC filings and filing documents, earnings calls (calendar, transcripts, Q&A, guidance, KPIs, slides, press releases, call comparison), executives and analysts, 13F holdings, insider trades, IPOs, market holidays, company news and newsroom announcements, investor documents, or full-text search over filings, transcripts and news, including requests mentioning tickers, CIKs, accessions, balance sheets, income statements, cash flows, 10-K, 10-Q, 8-K, dividends, stock splits or institutional holders.
4
4
  allowed-tools: Bash(invd *)
5
5
  ---
6
6
 
7
7
  # Invinite Data API
8
8
 
9
- Use the connected Invinite Data API MCP tools when available. Fall back to the `invd` CLI when MCP is unavailable. Both transports access the same Data API, billed to your Invinite Data account.
9
+ Use the connected Invinite Data MCP tools when available; fall back to the `invd` CLI (version 4, the v2 API) when MCP
10
+ is unavailable or the user asks for the CLI. Both reach the same Data API and bill the same Invinite Data account.
10
11
 
11
12
  ## Transport selection
12
13
 
13
- 1. Prefer MCP tools when an Invinite Data connector is available. Call the direct domain tool matching the request; unlike the Web API MCP server, the Data API MCP server does not use meta-tools such as `call_endpoint`.
14
- 2. Use the CLI examples below when MCP is unavailable or when the user explicitly requests CLI usage. Always pass `--json` for data used in analysis.
15
- 3. Do not mix transports merely to repeat a successful request.
14
+ 1. Prefer the MCP tools when an Invinite Data connector is connected: call the domain tool matching the request.
15
+ `search_endpoints` + `call_api` reach any operation without a dedicated tool.
16
+ 2. Otherwise use the CLI. Pass `--json` (or `--json a,b` for only the fields you need) for data you analyse.
17
+ 3. Do not repeat a successful request over the other transport.
16
18
 
17
19
  ### MCP and CLI mapping
18
20
 
19
- | Data need | MCP tool | CLI command family |
21
+ The v2 tool roster of the MCP server and the matching CLI commands. A connector that still lists older tool names
22
+ serves the earlier roster; use whatever tools it lists, or the CLI.
23
+
24
+ | Data need | MCP tool (v2 roster) | CLI |
20
25
  |---|---|---|
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 (a CIK also finds a not-yet-listed company) | `sec_filer_filings`, `sec_document_search`, `sec_document_sections` | `invd sec filings\|search\|sections` |
28
- | SEC document store: filers / issuer lifecycle, filings + document manifests, immutable cited document versions (blocks, pages, footnotes, figures, sections), lexical / literal search, 13F research, statement provenance, metric exports (typed `readiness`) | `sec_filers`, `sec_filer`, `sec_filer_lifecycle`, `sec_filer_filings`, `sec_filing`, `sec_document`, `sec_document_version`, `sec_document_sections`, `sec_document_search`, `sec_holders`, `sec_manager_portfolio`, `sec_metric_export`, … | `invd sec …` (`sec save`, `sec save-figure`, `sec export-file` download, CLI-only) |
29
- | Filing and metric discovery | `sec_filer_filings` (`form_facet`), `list_available_section_ids`, `list_available_metrics` | `invd sec filings` (`form_facet`), `invd metadata section-ids\|metrics` |
30
- | Institutional ownership | `holdings_by_company`, `holdings_by_investor`, `institutional_investors`, `institutional_transactions` | `invd ownership …` |
31
- | Insider trades/IPOs/holidays | `insider_trades`, `ipos`, `market_holidays` | `invd insider-trades list`, `invd ipos list`, `invd market holidays` |
32
- | Upcoming IPOs from SEC registrations (S-1 / F-1, by CIK, weeks before the IPO calendar; stage, proposed ticker, price range, final price) | `ipo_registrations` | `invd ipos registrations` |
33
- | Earnings call calendar/events/live | `earnings_call_calendar`, `earnings_call_events`, `earnings_call_live` | `invd earnings calendar\|events\|live` |
34
- | Call transcript/Q&A/participants | `earnings_call_transcript`, `earnings_call_qa`, `earnings_call_participants` | `invd earnings transcript\|qa\|participants` |
35
- | Call guidance/KPIs, diff vs prior call | `earnings_call_guidance`, `earnings_call_diff` | `invd earnings extractions\|guidance-history\|diff` |
36
- | Call documents/press release | `earnings_call_documents`, `earnings_call_press_release` | `invd earnings documents\|press-release` |
37
- | Price moves during a call (coincidence, not cause; live rows during the call) | `earnings_call_price_moves` | `invd earnings price-attribution` |
38
- | Search across calls | `earnings_call_search` | `invd earnings search` |
39
- | Company IR documents (annual reports, proxy, ESG, investor-day decks, letters, webcast pages) | `earnings_company_documents`, `earnings_company_document` | `invd earnings company-documents\|document` |
40
- | Search company documents (passages with page numbers) | `earnings_document_search` | `invd earnings document-search` |
41
- | Keyword / guidance alerts | `earnings_call_alert_create\|list\|update\|delete\|test\|deliveries` | `invd webhooks …` |
42
- | News (SEC filings and the companies' own newsrooms; Invinite's summary with attribution), the summary in blocks, AI-read developments | `news_list`, `news_item`, `news_text`, `news_developments`, `news_search` | `invd news list\|get\|text\|developments\|search` |
43
-
44
- The discovery rules below apply to both transports: call `list_available_metrics` before ratios, growth, CAGR, or financial-statement analysis, and call `list_available_section_ids` before requesting filing sections.
26
+ | Find a company or filer | `search_companies` | `invd companies list -q apple`, `invd filers list -q berkshire` |
27
+ | Company profile, fiscal periods, dividends, splits | `get_company` | `invd companies get\|fiscal-periods\|dividends\|splits` |
28
+ | Statements (standardized / as-reported; summary / detailed / presentation) | `get_financials` | `invd financials AAPL --basis … --view …` |
29
+ | Ratios, growth, CAGR, segments | `get_metrics` | `invd metrics ratios\|growth\|cagr`, `invd segments list\|list-detailed` |
30
+ | Where a number comes from | `explain_fact` | `invd metrics explain`, `invd documents fact-places` |
31
+ | SEC filings of a company | `list_filings` | `invd filings list` |
32
+ | Read a filing or document version | `read_filing` | `invd filings get`, `invd documents get\|sections\|figure` |
33
+ | Full-text search of filings (100 credits) | `search_filings` | `invd search filings` |
34
+ | 13F holdings and changes | `get_holdings` | `invd holdings list\|changes` |
35
+ | Form 4 insider trades | `get_insider_trades` | `invd insider-trades list\|get` |
36
+ | Earnings-call calendar and history | `list_events` | `invd events list` |
37
+ | One event: transcript, Q&A, stats, comparison, press release, slides … | `get_event` | `invd events get\|transcript\|transcript-text\|qa\|stats\|comparison\|press-release\|slides\|price-attribution` |
38
+ | Search transcripts and investor documents | `search_transcripts` | `invd search transcripts`, `invd search investor-documents` |
39
+ | News items, text, announcements, news search | `get_news` | `invd news list\|get\|text\|announcements`, `invd search news` |
40
+ | Account and usage | `get_account` | `invd me show\|usage` |
41
+ | Webhooks | `manage_webhooks` | `invd webhooks …` |
42
+ | Any other operation | `search_endpoints` + `call_api` | `invd api GET /v2/…` |
43
+
44
+ MCP resources `invinite://catalog/metrics`, `invinite://catalog/sections`, `invinite://catalog/event-types`,
45
+ `invinite://catalog/forms` and `invinite://catalog/document-kinds` are the catalogs (`invd catalog metrics`, `invd catalog sections`, `invd catalog event-types`, `invd catalog forms`,
46
+ `invd catalog document-kinds`).
47
+ The server's prompts are `analyse_earnings_call`, `compare_companies` and `summarise_10k_risk_factors`.
48
+
49
+ Read the catalogs before interpreting metric or section keys: `invd catalog metrics` before statements, ratios, growth
50
+ or CAGR (values are keyed by `metric_id`), `invd catalog sections --form 10-K` before asking for a filing section.
45
51
 
46
52
  ## Prerequisites
47
53
 
48
54
  ### MCP
49
55
 
50
- Connect `https://api.data.invinite.com/mcp` through OAuth and sign in to your Invinite Data account, which is billed for the calls. Leave OAuth client ID and secret empty so the client uses Dynamic Client Registration and PKCE.
56
+ Connect `https://api.data.invinite.com/mcp` with OAuth and sign in to the Invinite Data account to be billed. Leave the
57
+ OAuth client ID and secret empty (Dynamic Client Registration and PKCE). `invd agent-setup` writes the connector for
58
+ Claude Code or Codex in one step.
51
59
 
52
60
  ### CLI
53
61
 
54
- Install the CLI with `npm install -g @invinite-org/invinite-data-cli`, then run `invd login`. Authentication is resolved in this order:
55
- 1. `INVINITE_DATA_API_KEY` environment variable
56
- 2. `.env` file
57
- 3. OS keychain (via optional `keytar`)
58
- 4. Stored config
59
-
60
- If an MCP call fails with an auth error, reconnect the connector and complete OAuth. If a CLI call fails with an auth error, run `invd login`; manual `invd config set-key` and `INVINITE_DATA_API_KEY` remain supported fallbacks (create a key at https://data.invinite.com/keys).
61
-
62
- ## Global Options
63
-
64
- | Flag | Description |
65
- |------|-------------|
66
- | `--json` | Output raw JSON (always use this for programmatic access) |
67
- | `--all` | Auto-paginate through all results (paginated commands only; others refuse it by name) |
68
- | `--show-cost` | Print `credits: <charged> · included left: <remaining>` to stderr after the command (or set `INVD_SHOW_COST=1`); stdout stays clean |
69
-
70
- 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).
71
-
72
- ### Usage and credits
73
-
74
- 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.
62
+ Install with `npm install -g @invinite-org/invinite-data-cli`, then run `invd auth login`. The key is resolved in this
63
+ order: `INVD_API_KEY` > `INVINITE_DATA_API_KEY` > `./.env` (either name) > OS keychain > `api_key` in `config.toml`.
64
+ `invd auth status` shows which key is active and whose account it is (free).
65
+
66
+ An auth failure exits 4: reconnect the MCP connector, or tell the user to run `invd auth login` (or set
67
+ `INVD_API_KEY`; keys at https://data.invinite.com/keys).
68
+
69
+ ## The CLI grammar
70
+
71
+ - Noun-verb: `invd <group> <action>`. `list` is each group's default action, so `invd filings AAPL --form 10-K` equals
72
+ `invd filings list AAPL --form 10-K` and `invd events AAPL` lists Apple's calls.
73
+ - The first positional is the natural key: a ticker or CIK on company commands (several allowed:
74
+ `invd financials AAPL MSFT`), the member id on member commands (`invd companies get AAPL`,
75
+ `invd filings get 0000320193-26-000026`, `invd events transcript <event_id>`).
76
+ - Every command that takes an `event_id` also takes a company plus a fiscal period: `invd events transcript NVDA 2026Q3`
77
+ resolves the event through `GET /v2/events` (one extra credit; the resolution is noted on stderr).
78
+ - Flags are the API parameters with dashes (`fiscal_year` → `--fiscal-year`, `filed_at[gte]` → `--filed-at-gte`).
79
+ `invd <group> <action> --help` lists them with the API's descriptions, the credit cost and plan, and the row fields.
80
+ - `invd api` calls any path the tree lacks: `invd api GET /v2/filings?company=AAPL --paginate --jq '.data[].accession'`.
81
+
82
+ ## Output, pagination and cost
83
+
84
+ | Flag | Effect |
85
+ |---|---|
86
+ | `--json` / `--json a,b` | the whole body / only those fields of each row (fields listed in `--help`) |
87
+ | `--output table\|plain\|json\|jsonl\|csv`, `--plain` | explicit format (default: table on a terminal, tab-separated when piped) |
88
+ | `--jq <expr>` | filter the JSON |
89
+ | `--fields a,b` | server-side prune where the operation supports `fields=` |
90
+ | `--limit`, `--cursor` | page size; the previous page's `next_cursor`, with the SAME filters |
91
+ | `--all` | every page, streamed as JSONL (CSV with `--output csv`) |
92
+ | `--dry-run` | the request plan and credit estimate; sends nothing |
93
+ | `--show-cost` | the credits the command cost, on stderr (or `INVD_SHOW_COST=1`) |
94
+ | `--yes`, `--no-input` | skip / refuse the confirmation of a costly `--all` walk or a delete |
95
+ | `--save <file>` | save the file a response points to (transcript PDF, audio, news PDF, investor document); size and SHA-256 verified |
96
+
97
+ Data is on stdout; progress, cost and coverage notes on stderr, so `--json` output stays clean. When a response's
98
+ `meta.coverage` is `pending` or `partial`, few or no rows are not proof that something does not exist: say the data is
99
+ incomplete instead of "nothing found".
100
+
101
+ Before a large pull (`--all`, many companies, `search filings` at 100 credits a page) check what is left with
102
+ `invd me usage --json` (free) and estimate with `--dry-run`. If the pull would not fit, say so before starting it.
103
+
104
+ Exit codes: 0 ok, 1 failure, 2 usage (incl. `invalid_parameter`, `unknown_parameter`, `cursor_mismatch`), 3 partial
105
+ (an interrupted `--all`: resume with the printed `--cursor`), 4 auth required, 5 download integrity, 6 credits
106
+ exhausted or plan required (`plan_required`, `insufficient_credits`).
75
107
 
76
108
  ## Working with the data
77
109
 
78
110
  ### Financial statements
79
111
 
80
- `-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:
81
-
82
- - `<statement>` — standardized values keyed by `metric_id`
83
- - `<statement>-detailed` — adds formula, accession number, HTML tag info (`--with-formula true` for formulas)
84
- - `<statement>-presentation` — nested tree structure (hierarchical)
85
- - `as-reported-<statement>[-detailed|-presentation]` — the as-reported data instead of standardized
112
+ `invd financials <company…>` is one command over six operations:
86
113
 
87
- 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.
114
+ - `--basis standardized` (default; values keyed by `metric_id`) or `--basis as-reported` (the company's own lines).
115
+ - `--view summary` (default), `detailed` (formula, accession and source lineage per value) or `presentation` (the
116
+ statement tree).
117
+ - `-s, --statement` any of `income-statement`, `balance-sheet`, `cash-flow` (default all three).
118
+ - `-p, --period` `annual`, `quarterly`, `ytd` or `ttm`; without it: `quarterly` when `--fiscal-quarter` is 1–3, else
119
+ `annual`.
120
+ - `--fiscal-year` / `--fiscal-quarter`, or a range with `--fiscal-year-gte` / `--fiscal-year-lte`.
121
+ - `--as-of 2025-01-31` = point in time (the newest rendering of each period filed by that day); `--filing <accession>`
122
+ pins one filing's rendering.
123
+ - `--reported-only` and `--display-sign cash_flow_direction` exist on `--basis as-reported` only.
124
+ - Several companies plus one fiscal year (and quarter) is a cross-company snapshot.
88
125
 
89
126
  ```bash
90
- invd financials income-statement -i AAPL -p annual --json
91
- invd financials balance-sheet -i MSFT -p quarterly --limit 4 --json
92
- invd financials as-reported-cash-flow -i GOOGL -p annual --json
93
- invd financials snapshot -i AAPL,MSFT,GOOGL -p annual --json
94
- invd financials snapshot -i AAPL -p quarterly --calendar-year 2024 --calendar-quarter 3 --json
127
+ invd catalog metrics --statement income-statement --json
128
+ invd financials AAPL -s income-statement --json
129
+ invd financials MSFT --period quarterly --limit 4 --json
130
+ invd financials AAPL MSFT GOOGL --fiscal-year 2025 --json
131
+ invd financials AAPL --basis as-reported -s cash-flow --view presentation --json
132
+ invd financials AAPL --as-of 2025-01-31 --fiscal-year-gte 2020 --json
95
133
  ```
96
134
 
97
- ### Financial metrics
98
-
99
- **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.
135
+ ### Metrics, segments and lineage
100
136
 
101
137
  ```bash
102
- # STEP 1: Always fetch available metrics first
103
- invd metadata metrics --json
104
- # Returns: { metrics: [{ metric_id: "...", name: "..." }, ...] }
105
-
106
- # STEP 2: Then query the specific metrics endpoint
107
- invd metrics ratios -i AAPL -p annual --category profitability --json # valuation, profitability, liquidity, solvency
108
- invd metrics cagr -i AAPL --period-years 5 --json # 3, 5 or 10 years
109
- invd metrics growth -i MSFT -p quarterly --growth-type year_over_year --json
138
+ invd metrics ratios AAPL -p annual --category profitability,valuation --json
139
+ invd metrics growth MSFT -p quarterly --basis yoy --json
140
+ invd metrics cagr AAPL MSFT -p annual --horizon 5 --json
141
+ invd segments list AAPL -p annual --metric is_total_revenue --json
142
+ invd metrics explain "0000320193|is_total_revenue|annual|2026|4" --json
110
143
  ```
111
144
 
112
- The metrics response structures differ by endpoint:
113
- - **Ratios**: `period.facts[category][metric_id]` — organized by category (valuation, profitability, etc.)
114
- - **CAGR**: `period.facts[years][metric_id]` — organized by time period (3-year, 5-year, 10-year)
115
- - **Growth**: `period.facts[growthType][metric_id]` — organized by growth type (year_over_year, quarter_over_quarter)
145
+ Ratio categories: `profitability`, `liquidity`, `leverage`, `efficiency`, `valuation`. `metrics explain` shows the rule
146
+ and operands behind one standardized fact and the source facts it came from; `documents fact-places --fact <fact_id>`
147
+ shows where a fact sits in the filing document (PRO).
116
148
 
117
- All share the same `metric_id` identifiers from `metadata metrics`.
149
+ ### Filings and documents
118
150
 
119
- ### Filings, ownership, insider trades
151
+ ```bash
152
+ invd filings AAPL --form 10-K --limit 1 --json
153
+ invd filings get 0000320193-26-000026 --expand documents --json
154
+ invd catalog sections --form 10-K --json
155
+ invd documents sections <version_id> --json
156
+ invd documents get <version_id> --blocks b12-b40 --json
157
+ invd search filings "supply chain risk" --company AAPL --form 10-K --item 1A --json
158
+ ```
120
159
 
121
- - `invd sec …` reads Invinite's SEC document store: `sec filings -i <ticker|CIK>` (cursor pages, `form_facet`), `sec filing --accession` (document manifest: role, MIME, true size, readiness), `sec document --accession --filename` (pins the immutable version; blocks with `citation {version_id, block_id, page, printed}`), `sec search -q … --mode lexical|literal` (100 credits). Cite `version_id` + `block_id` and the printed page label only when present (else the page ordinal). `readiness.status` `pending` / `partial` / `not_ready` and a search `coverage.completeness` other than `complete` mean the answer is incomplete — never report zero rows there as "nothing found".
122
- - Filing sections: `sec document` (pins the `version_id`) → `sec sections --version-id` → `sec version --version-id … --blocks <range>` for the text. `sec search` returns cited passages (no prose answer) at 100 credits a call. The legacy `filings list|search|sections|form-types` were removed in 1.0.0.
123
- - Ownership transaction types (`--type`): `new_buy`, `added`, `reduced`, `sold_out`. `holdings-by-investor` needs the investor's `--cik`.
124
- - Insider trades `--acquired-disposed`: `A` (acquisition) or `D` (disposition).
160
+ A filing's documents carry the `version_id` of each immutable document version. Read a section by listing the
161
+ version's sections (each names its `blocks`) and then fetching those blocks. Cite `version_id` + `block_id` and the
162
+ printed page label when present (else the page ordinal). `search filings` returns cited passages, no prose answer, at
163
+ 100 credits a page; `--mode literal` matches exact characters (`FY2027`, `10b5-1`). `invd filers` covers every SEC
164
+ filer, including 13F managers and pre-IPO issuers without a listing.
125
165
 
126
166
  ### Earnings calls
127
167
 
128
- 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).
129
-
130
- - `--transcript-version N` (not `--version`) selects a published transcript version; `--as-of <iso>` the version current at that instant.
131
- - `extractions --kind guidance|kpi`; `--review approved|auto|all` filters guidance by review status; `diff --vs prior` is the only comparison base.
132
- - `earnings event --include observations` adds the date / time observations; `earnings participants --include evidence` the participation evidence.
133
- - 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).
134
- - 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`).
135
- - `earnings search` and `earnings document-search` take `-m, --mode`: `lexical` (the default) matches words and quoted phrases (stemmed; `OR` and `-word` work), `literal` matches the exact characters such as `FY2027` or `10b5-1` (case-sensitive; `--case-sensitive false` for a case-insensitive match). Search with keywords, not a whole question: scoped to one call (`--event-id`) or one company (`-i`), `earnings search` needs any of the words and returns the management answer right after a matching analyst question (its `match.spans` may be empty); without a scope, and in `document-search`, every word must match. Both modes cost the same. In `--json` output read `coverage.completeness` before concluding anything from few or no hits: `partial` / `unknown` means the index does not cover the whole scope yet, so absence is not proof. `match.spans` are code-point offsets of the matched characters in `text`.
136
- - Audio, slides and document URLs are permanent public URLs (immutable; a new version is a new URL); `--output` on the download commands saves the file.
137
- - 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.
138
-
139
- ### Live transcripts, price ticks and alerts
168
+ ```bash
169
+ invd events NVDA --sort -scheduled_at --limit 4 --json
170
+ invd events transcript-text NVDA 2026Q3 --split sections --json
171
+ invd events qa NVDA 2026Q3 --json
172
+ invd events comparison NVDA 2026Q3 --json
173
+ invd guidance NVDA --event <event_id> --json
174
+ invd search transcripts "gross margin outlook" --event <event_id> --json
175
+ ```
140
176
 
141
- `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.
177
+ - `events list` defaults to earnings calls; `--type all` adds investor days, conferences and AGMs; `--status upcoming|live|ended`.
178
+ - Take `event_id` from `events list` and pass it to the per-event commands, or give the company and fiscal period
179
+ (`NVDA 2026Q3`) in its place.
180
+ - `transcript` returns turns with speaker and `start_ms` (`--layer cleaned`, `-v <version>`); `transcript-text` the
181
+ plain text (`--split sections` separates prepared remarks and Q&A); `transcript-versions` / `transcript-diff` the
182
+ published versions.
183
+ - Every `*_ms` field is milliseconds from the call's start: cite it as `[m:ss]`. `qa_start_ms` is where the Q&A begins.
184
+ - `comparison` is against the previous call by default (`--prior <event_id>` picks another): tone shift, hedging,
185
+ uncertainty, new and dropped topics.
186
+ - `guidance list` items carry `direction`, period and `basis` (GAAP / non-GAAP); `--review approved` keeps only
187
+ reviewed items. `guidance kpis` lists KPI mentions with their source sentence.
188
+ - `price-attribution` lines up minute price moves with what was said: temporal coincidence, never the cause.
189
+ - Investor documents (`invd investor-documents`, `search investor-documents`) are company-published: quote them as such,
190
+ with title, year and page, never as verified fact.
191
+ - Slides, audio and price attribution need higher plans; a plan error exits 6 and names the plan.
142
192
 
143
- 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:
193
+ ### Ownership and insiders
144
194
 
145
195
  ```bash
146
- invd webhooks create --body '{"url":"https://hooks.example.com/alerts","events":["earnings_call.keyword_hit"],"filters":{"keywords":["tariffs"]}}' --json # the secret is printed once
147
- invd webhooks create --body '{"url":"https://hooks.example.com/invinite","events":["earnings_call.transcript_ready"],"filters":{"ciks":["320193"]}}' --json
148
- invd webhooks update --id <id> --body '{"keywords":["tariffs","buyback"]}' --json
149
- invd webhooks deliveries --id <id> --json
196
+ invd holdings AAPL --json
197
+ invd holdings --filer 0000102909 --json
198
+ invd holdings changes AAPL --type new,sold_out --json
199
+ invd insider-trades AAPL --side buy --filed-at-gte 2026-01-01 --json
150
200
  ```
151
201
 
202
+ 13F rows report positions at the quarter end (`--period-end`), filed up to 45 days later; keep filing date and
203
+ position date apart, and value apart from share count. Change types: `new`, `added`, `reduced`, `sold_out`,
204
+ `unchanged`. `--instruments all` adds options and principal amounts.
205
+
152
206
  ### News
153
207
 
154
- `invd news list` (FREE) lists items newest first from SEC EDGAR filings (`rights: public_record`) and the companies' own newsrooms (`rights: issuer`); wire services are never a source. `--ticker` / `--cik` = items that MENTION the company; `--publisher <cik>` = items the company PUBLISHED itself (its verified newsroom publication) — "what did NVIDIA announce" is `--publisher 1045810`, not `--ticker NVDA`. `--publication-type`, `--issuer-category` and `--issuer-tag` narrow the publisher's own publications (the last two need exactly one `--publisher`). Without `--from` / `--to` it pages back through the whole history; with either, the window is at most 92 days. Pages use a cursor, not an offset: `--all` follows `next_url`; by hand pass `next_cursor` as `--cursor` with the same filters.
208
+ ```bash
209
+ invd news AAPL --published-at-gte 2026-11-01 --json
210
+ invd news get <id> --json
211
+ invd news text <id> --json
212
+ invd news announcements AAPL --topic product_launch --json
213
+ invd search news buyback --company AAPL --json
214
+ ```
215
+
216
+ News comes from SEC EDGAR filings and the companies' own newsrooms, never wire services. Every item carries
217
+ `attribution` (publisher, `source_url`, `published_at`, and form + accession for a filing): whenever you show a
218
+ headline or summary, name the publisher, link `source_url` and give the date. Summaries and announcements are
219
+ Invinite's wording of the publication: present them as a summary of what the publisher stated, not as verified fact.
220
+ Report an announcement's status as stated (planned is a plan, not availability).
155
221
 
156
- - **Attribution duty.** Every item carries `attribution` (`publisher`, `source_url`, `published_at`, `edgar.form` + `edgar.accession` for a filing, `statement`). Whenever you show a headline, lede, `summary_text` or summary block, name the publisher, link `source_url` and give the date (and the form + accession of a filing). The lede, the summary and the developments are Invinite's own wording of the publication (never the publisher's text): present them as a summary of what the publisher stated, not as verified fact, and point to `source_url` for the publisher's own words.
157
- - **Model use.** `model_processing_allowed` reports the publisher's machine-readable reservation on its ORIGINAL publication; it is informational — every text the API serves (lede, summary, developments) is Invinite's own wording.
158
- - `invd news get --id <id>` (STANDARD) has Invinite's long summary as `summary_text` / `summary_html` with `summary_words`, `source_words` and `summarized_at` (`content_status: available`, else `no_text` = headline and link only: an item published before summaries started, a metadata-only item or a reserved source), the branded PDF (`pdf`), `sightings`, `companies` and up to 20 developments; `invd news text --id <id>` serves the summary in citable blocks (`index`, `kind` heading / paragraph / list, `heading`, `text`; a `409 revision_changed` means the item was corrected: restart without `--cursor`). `superseded_by` names a corrected successor.
159
- - `invd news developments` lists product launches, partnerships, contracts, availability (AI-read from the text, `derived: true`): report `claim_status` as stated (`planned` is a plan, not availability) and cite the item's attribution.
160
- - `invd news search -q <keywords>` searches headlines and texts (`-m lexical` keywords, the default; `-m literal` exact characters; `--field title|lede|summary|any`; default window 365 days, at most 8 passages). It answers `503 search_disabled` until the API enables it; read `coverage` before concluding from few or no hits, and cite each passage with its item's `attribution`.
161
- - New items as they appear: `invd ws listen --news --tickers NVDA` (STANDARD); a webhook: `"events":["news.published"]` in `invd webhooks create --body` (STANDARD and above, filtered by `ciks`).
222
+ ### Webhooks
162
223
 
163
224
  ```bash
164
- invd webhooks create --body '{"url":"https://hooks.example.com/news","events":["news.published"],"filters":{"ciks":["1045810"]}}' --json
225
+ invd webhooks create --body '{"url":"https://hooks.example.com/invinite","events":["event.transcript_ready"],"filters":{"ciks":["0000320193"]}}' --json
226
+ invd webhooks list --json
227
+ invd webhooks deliveries <id> --json
165
228
  ```
166
229
 
230
+ The signing secret is printed once on create (`rotate-secret` issues a new one). A delete asks first unless `--yes`.
231
+
167
232
  ## Commands Reference
168
233
 
169
- 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`).
234
+ One example per command. `invd <group> <action> --help` lists every flag; values like `evt_01JC8M2X` are the spec's
235
+ examples, replace them with real ids.
170
236
 
171
237
  <!-- invd:commands:start -->
172
238
  <!-- 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. -->
173
239
 
174
- ### company
175
-
176
- Company search, details, fiscal periods, dividends and splits
240
+ ### agent-setup
177
241
 
242
+ <!-- invd:hand:agent-setup -->
178
243
  ```bash
179
- # Company details
180
- invd company details -i AAPL --json
181
-
182
- # Company dividends (optional: --start-date, --end-date, --sort, --limit, --offset, --all)
183
- invd company dividends -i AAPL --json
184
-
185
- # Company fiscal periods (optional: --sort, --limit, --offset, --all)
186
- invd company fiscal-periods -i AAPL --json
187
-
188
- # List available companies
189
- invd company list --json
190
-
191
- # Search companies (optional: --limit, --offset, --all)
192
- invd company search -q apple --json
193
-
194
- # Stock splits (optional: --sort, --limit, --offset, --all)
195
- invd company splits -i AAPL --json
244
+ invd agent-setup --claude --local # ./.mcp.json + the skill under .claude/
245
+ invd agent-setup --codex --global # ~/.codex/config.toml [mcp_servers] + the skill
246
+ invd agent-setup --all --global --dry-run # print what would be written
196
247
  ```
248
+ <!-- /invd:hand:agent-setup -->
197
249
 
198
- ### config
250
+ ### api
199
251
 
200
- <!-- invd:hand:config -->
252
+ <!-- invd:hand:api -->
201
253
  ```bash
202
- invd config set-key # masked prompt for an API key
203
- invd config set-url https://api.data.invinite.com # API host
204
- invd config show
205
- invd config reset
254
+ invd api /v2/companies/AAPL
255
+ invd api GET /v2/filings?company=AAPL --paginate --jq '.data[].accession'
256
+ invd api GET /v2/holdings -F company=AAPL -F limit=100 --dry-run
257
+ invd api POST /v2/webhooks --input webhook.json
206
258
  ```
207
- <!-- /invd:hand:config -->
208
-
209
- ### earnings
259
+ <!-- /invd:hand:api -->
210
260
 
211
- Earnings calls: calendar, transcripts, Q&A, extractions, media, search and webhook subscriptions
261
+ ### auth
212
262
 
263
+ <!-- invd:hand:auth -->
213
264
  ```bash
214
- # Analysts of a company (optional: --limit, --offset, --all)
215
- invd earnings analysts -i MSFT --json
216
-
217
- # Earnings call calendar (optional: --from, --to, --status, --session, --exchange, --event-type, --sort, --limit, --offset, --date-kind, --calendar-status, --include-expired, --all)
218
- invd earnings calendar --json
219
-
220
- # Call-over-call diff (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --vs)
221
- invd earnings diff --event-id cfbcf4f8-6d4d-41ef-9197-1c91ff2aef8c --json
222
-
223
- # Search investor documents (optional: --mode, --case-sensitive, --identifier, --kind, --section, --year, --table, --limit)
224
- invd earnings document-search -q "Azure growth" -i MSFT --json
225
-
226
- # Earnings call by ID (optional: --include)
227
- invd earnings event --event-id 9655a5db-8968-40be-8c79-7cd1a8aed8e9 --json
228
-
229
- # Event history of a company (optional: --from, --to, --include, --event-type, --sort, --limit, --offset, --include-expired, --all)
230
- invd earnings events -i MSFT --json
231
-
232
- # Guidance and KPI extractions (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --kind, --review, --limit, --offset, --all)
233
- invd earnings extractions --event-id cfbcf4f8-6d4d-41ef-9197-1c91ff2aef8c --json
265
+ invd auth login # browser sign-in (--no-browser over SSH)
266
+ invd auth status --json # active key, its source and account (free)
267
+ invd auth token # print the key for scripts
268
+ invd auth logout
269
+ ```
270
+ <!-- /invd:hand:auth -->
234
271
 
235
- # Guidance history (optional: --period-kind, --basis, --limit)
236
- invd earnings guidance-history -i MSFT --metric revenue_growth --json
272
+ ### catalog
237
273
 
238
- # Live earnings calls
239
- invd earnings live --json
274
+ Static catalogs: metrics, sections, forms, event types, document kinds, mapping rules
240
275
 
241
- # Earnings call metrics (optional: --event-id, --identifier, --year, --quarter, --date, --event-type)
242
- invd earnings metrics --event-id cfbcf4f8-6d4d-41ef-9197-1c91ff2aef8c --json
276
+ ```bash
277
+ # List investor-document kinds (optional: --fields, --limit, --cursor, --all)
278
+ invd catalog document-kinds --json
243
279
 
244
- # Earnings call participants (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --include)
245
- invd earnings participants --event-id cfbcf4f8-6d4d-41ef-9197-1c91ff2aef8c --json
280
+ # List event types (optional: --fields, --limit, --cursor, --all)
281
+ invd catalog event-types --json
246
282
 
247
- # Person across earnings calls (optional: --limit, --offset, --all)
248
- invd earnings person --person-id 9b135e05-d7c2-4d23-9c89-728501ad8e58 --json
283
+ # List SEC forms (optional: --fields, --limit, --cursor, --all)
284
+ invd catalog forms --json
249
285
 
250
- # Price moves during a call (optional: --event-id, --identifier, --year, --quarter, --date, --event-type)
251
- invd earnings price-attribution --event-id dd04abe1-f83f-4e92-8ddf-1f8864e7db30 --json
286
+ # List standardized mapping rules (optional: --statement, --metric-id, --fields, --limit, --cursor, --all)
287
+ invd catalog mapping-rules --json
252
288
 
253
- # Speaker prosody (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --section)
254
- invd earnings prosody --event-id cfbcf4f8-6d4d-41ef-9197-1c91ff2aef8c --json
289
+ # List standardized metrics (optional: --statement, --fields, --limit, --cursor, --all)
290
+ invd catalog metrics --json
255
291
 
256
- # Earnings call Q&A (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --limit, --offset, --include, --all)
257
- invd earnings qa --event-id cfbcf4f8-6d4d-41ef-9197-1c91ff2aef8c --json
292
+ # List filing section ids (optional: --form, --fields, --limit, --cursor, --all)
293
+ invd catalog sections --json
294
+ ```
258
295
 
259
- # Search earnings calls (optional: --mode, --case-sensitive, --event-id, --identifier, --from, --to, --type, --event-type, --limit)
260
- invd earnings search -q "Azure growth" -m lexical -i MSFT --json
296
+ ### companies
261
297
 
262
- # Live audio stream URL (optional: --event-id, --identifier, --year, --quarter, --date, --event-type)
263
- invd earnings stream --event-id cfbcf4f8-6d4d-41ef-9197-1c91ff2aef8c --json
298
+ Listed companies: list, profile, fiscal periods, dividends and splits
264
299
 
265
- # Transcript version diff (optional: --event-id, --identifier, --year, --quarter, --date, --event-type, --to)
266
- invd earnings transcript-diff --event-id cfbcf4f8-6d4d-41ef-9197-1c91ff2aef8c --from 3 --json
300
+ ```bash
301
+ # List dividends (optional: --ex-date-gte, --ex-date-gt, --ex-date-lte, --ex-date-lt, --sort, --fields, --limit, --cursor, --all)
302
+ invd companies dividends AAPL --json
267
303
 
268
- # Transcript versions (optional: --event-id, --identifier, --year, --quarter, --date, --event-type)
269
- invd earnings versions --event-id cfbcf4f8-6d4d-41ef-9197-1c91ff2aef8c --json
270
- ```
304
+ # List fiscal periods (optional: --sort, --fields, --limit, --cursor, --all)
305
+ invd companies fiscal-periods AAPL --json
271
306
 
272
- <!-- invd:hand:earnings transcript -->
273
- ```bash
274
- # Transcript (formats: speakers, text, words, sections, cleaned); --output saves it as text; --pdf prints the URL of the version's branded PDF, --pdf-out saves the file
275
- invd earnings transcript -i AAPL --year 2026 --quarter 4 --format speakers --json
276
- invd earnings transcript --event-id <event_id> --format sections --json
277
- invd earnings transcript -i AAPL --year 2026 --quarter 4 --output aapl-q4.txt
278
- invd earnings transcript -i AAPL --year 2026 --quarter 4 --pdf-out aapl-q4.pdf
279
- ```
280
- <!-- /invd:hand:earnings transcript -->
307
+ # Get a company (optional: --expand, --fields)
308
+ invd companies get AAPL --json
281
309
 
282
- <!-- invd:hand:earnings press-release -->
283
- ```bash
284
- # Press release of a call; --body includes its text, --output saves it
285
- invd earnings press-release --event-id <event_id> --body --json
286
- invd earnings press-release -i AAPL --year 2026 --quarter 4 --body --output release.txt
287
- ```
288
- <!-- /invd:hand:earnings press-release -->
310
+ # List listed companies (optional: --q, --exchange, --sector, --sort, --fields, --limit, --cursor, --all)
311
+ invd companies list -q apple --json
289
312
 
290
- <!-- invd:hand:earnings audio -->
291
- ```bash
292
- # Call recording (PRO): a permanent URL (one forensic watermark per call); --output saves the file
293
- invd earnings audio --event-id <event_id> --json
294
- invd earnings audio --event-id <event_id> --output call.mp3
313
+ # List stock splits (optional: --sort, --fields, --limit, --cursor, --all)
314
+ invd companies splits AAPL --json
295
315
  ```
296
- <!-- /invd:hand:earnings audio -->
297
316
 
298
- <!-- invd:hand:earnings slides -->
299
- ```bash
300
- # Slide deck (PRO): --markdown prints the page markdown, --output saves the PDF
301
- invd earnings slides --event-id <event_id> --markdown --json
302
- invd earnings slides -i AAPL --year 2026 --quarter 4 --output deck.pdf
303
- ```
304
- <!-- /invd:hand:earnings slides -->
317
+ ### completion
305
318
 
306
- <!-- invd:hand:earnings documents -->
319
+ <!-- invd:hand:completion -->
307
320
  ```bash
308
- # 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)
309
- invd earnings documents --event-id <event_id> --kind cfo_commentary --json
310
- invd earnings documents --event-id <event_id> --output ./docs
321
+ eval "$(invd completion zsh)"
322
+ invd completion fish > ~/.config/fish/completions/invd.fish
311
323
  ```
312
- <!-- /invd:hand:earnings documents -->
324
+ <!-- /invd:hand:completion -->
313
325
 
314
- <!-- invd:hand:earnings company-documents -->
315
- ```bash
316
- # Company IR library (outside the calls' folders unless --include calls); --output downloads every stored file: <year>-<kind>-<document_id>.<ext>
317
- invd earnings company-documents -i AAPL --section annual_reports,proxy --json
318
- invd earnings company-documents -i AAPL --kind investor_day_deck --output ./ir-docs
319
- # The document tree: a category (earnings, events, reports, presentations, governance, esg, shareholder, other) or a folder (prefix)
320
- invd earnings company-documents -i AAPL --category reports,esg --json
321
- invd earnings company-documents -i AAPL --group earnings/fy2026/q4 --json
322
- # The whole tree: the library plus every earnings call's documents (source: call), all pages
323
- invd earnings company-documents -i AAPL --include calls --all --json
324
- ```
325
- <!-- /invd:hand:earnings company-documents -->
326
+ ### config
326
327
 
327
- <!-- invd:hand:earnings document -->
328
+ <!-- invd:hand:config -->
328
329
  ```bash
329
- # One company document: metadata, --pages for per-page text, --output to download it
330
- invd earnings document --document-id <document_id> --pages --json
331
- invd earnings document --document-id <document_id> --output annual-report.pdf
330
+ invd config list # every setting and where it comes from
331
+ invd config set output json
332
+ invd config set base_url http://localhost:4000 --local # ./.invd.toml
333
+ invd config unset pager
334
+ invd config path
332
335
  ```
333
- <!-- /invd:hand:earnings document -->
336
+ <!-- /invd:hand:config -->
334
337
 
335
- ### financials
338
+ ### documents
336
339
 
337
- Financial statements (standardized & as-reported)
340
+ Immutable document versions, sections, figures and fact places
338
341
 
339
342
  ```bash
340
- # As-reported balance sheet (optional: --sort, --limit, --offset, --reported-only, --all)
341
- invd financials as-reported-balance-sheet -i AAPL -p annual --json
342
-
343
- # As-reported balance sheet (detailed) (optional: --sort, --limit, --offset, --with-formula, --reported-only, --all)
344
- invd financials as-reported-balance-sheet-detailed -i AAPL -p annual --json
343
+ # List where facts appear in a document (optional: --document-version, --fact, --status, --limit, --cursor, --all)
344
+ invd documents fact-places -d dv_01JCA8XK --json
345
345
 
346
- # As-reported balance sheet (presentation) (optional: --sort, --limit, --offset, --reported-only, --all)
347
- invd financials as-reported-balance-sheet-presentation -i AAPL -p annual --json
346
+ # Get a figure
347
+ invd documents figure dv_01JCA8XK --block-id b57 --json
348
348
 
349
- # As-reported cash flow statement (optional: --sort, --limit, --offset, --reported-only, --display-sign, --all)
350
- invd financials as-reported-cash-flow -i AAPL -p annual --json
349
+ # Get a document version (optional: --blocks, --pages, --printed, --neighbors, --footnotes)
350
+ invd documents get dv_01JCA8XK -p 1-3 --json
351
351
 
352
- # As-reported cash flow statement (detailed) (optional: --sort, --limit, --offset, --with-formula, --reported-only, --display-sign, --all)
353
- invd financials as-reported-cash-flow-detailed -i AAPL -p annual --json
354
-
355
- # As-reported cash flow statement (presentation) (optional: --sort, --limit, --offset, --reported-only, --display-sign, --all)
356
- invd financials as-reported-cash-flow-presentation -i AAPL -p annual --json
357
-
358
- # As-reported income statement (optional: --sort, --limit, --offset, --reported-only, --all)
359
- invd financials as-reported-income-statement -i AAPL -p annual --json
352
+ # List a document version's sections (optional: --outline, --limit, --cursor, --all)
353
+ invd documents sections dv_01JCA8XK --json
354
+ ```
360
355
 
361
- # As-reported income statement (detailed) (optional: --sort, --limit, --offset, --with-formula, --reported-only, --all)
362
- invd financials as-reported-income-statement-detailed -i AAPL -p annual --json
356
+ ### events
363
357
 
364
- # As-reported income statement (presentation) (optional: --sort, --limit, --offset, --reported-only, --all)
365
- invd financials as-reported-income-statement-presentation -i AAPL -p annual --json
358
+ Earnings calls and other corporate events: transcripts, Q&A, media and call analytics
366
359
 
367
- # As-reported snapshot (optional: --calendar-year, --calendar-quarter, --reported-only, --display-sign)
368
- invd financials as-reported-snapshot -i AAPL,MSFT -p annual --json
360
+ ```bash
361
+ # Get an event's recording (optional: --save)
362
+ invd events audio evt_01JC8M2X --json
369
363
 
370
- # As-reported snapshot (detailed) (optional: --calendar-year, --calendar-quarter, --reported-only, --display-sign, --with-formula)
371
- invd financials as-reported-snapshot-detailed -i AAPL,MSFT -p annual --json
364
+ # Compare an event with a prior one (optional: --prior)
365
+ invd events comparison evt_01JC8M2X --json
372
366
 
373
- # As-reported snapshot (presentation) (optional: --calendar-year, --calendar-quarter, --reported-only, --display-sign)
374
- invd financials as-reported-snapshot-presentation -i AAPL,MSFT -p annual --json
367
+ # Get an event (optional: --expand, --fields)
368
+ invd events get evt_01JC8M2X --json
375
369
 
376
- # Standardized balance sheet (optional: --sort, --limit, --offset, --all)
377
- invd financials balance-sheet -i AAPL -p annual --json
370
+ # List events (optional: --type, --status, --scheduled-at-gte, --scheduled-at-gt, --scheduled-at-lte, --scheduled-at-lt, --fiscal-year, --fiscal-quarter, --date-kind, --expand, --sort, --fields, --limit, --cursor, --all)
371
+ invd events list AAPL --json
378
372
 
379
- # Standardized balance sheet (detailed) (optional: --sort, --limit, --offset, --with-formula, --all)
380
- invd financials balance-sheet-detailed -i AAPL -p annual --json
373
+ # Get an event's live audio URL
374
+ invd events live-audio evt_01JC8M2X --json
381
375
 
382
- # Standardized balance sheet (presentation) (optional: --sort, --limit, --offset, --all)
383
- invd financials balance-sheet-presentation -i AAPL -p annual --json
376
+ # Get an event's press release
377
+ invd events press-release evt_01JC8M2X --json
384
378
 
385
- # Standardized cash flow statement (optional: --sort, --limit, --offset, --all)
386
- invd financials cash-flow -i AAPL -p annual --json
379
+ # Get an event's price attribution
380
+ invd events price-attribution evt_01JC8M2X --json
387
381
 
388
- # Standardized cash flow statement (detailed) (optional: --sort, --limit, --offset, --with-formula, --all)
389
- invd financials cash-flow-detailed -i AAPL -p annual --json
382
+ # Get an event's speech prosody (optional: --section)
383
+ invd events prosody evt_01JC8M2X --json
390
384
 
391
- # Standardized cash flow statement (presentation) (optional: --sort, --limit, --offset, --all)
392
- invd financials cash-flow-presentation -i AAPL -p annual --json
385
+ # List an event's Q&A pairs (optional: --include, --limit, --cursor, --all)
386
+ invd events qa evt_01JC8M2X --json
393
387
 
394
- # Standardized income statement (optional: --sort, --limit, --offset, --all)
395
- invd financials income-statement -i AAPL -p annual --json
388
+ # Get an event's slides (optional: --pages, --include)
389
+ invd events slides evt_01JC8M2X --json
396
390
 
397
- # Standardized income statement (detailed) (optional: --sort, --limit, --offset, --with-formula, --all)
398
- invd financials income-statement-detailed -i AAPL -p annual --json
391
+ # Get an event's call statistics
392
+ invd events stats evt_01JC8M2X --json
399
393
 
400
- # Standardized income statement (presentation) (optional: --sort, --limit, --offset, --all)
401
- invd financials income-statement-presentation -i AAPL -p annual --json
394
+ # Get an event's transcript (optional: --version, --layer, --include, --save)
395
+ invd events transcript evt_01JC8M2X --json
402
396
 
403
- # Standardized snapshot (optional: --calendar-year, --calendar-quarter)
404
- invd financials snapshot -i AAPL,MSFT -p annual --json
397
+ # Diff two transcript versions
398
+ invd events transcript-diff evt_01JC8M2X -f 1 -t 2 --json
405
399
 
406
- # Standardized snapshot (detailed) (optional: --calendar-year, --calendar-quarter, --with-formula)
407
- invd financials snapshot-detailed -i AAPL,MSFT -p annual --json
400
+ # Get an event's transcript as text (optional: --version, --split)
401
+ invd events transcript-text evt_01JC8M2X --json
408
402
 
409
- # Standardized snapshot (presentation) (optional: --calendar-year, --calendar-quarter)
410
- invd financials snapshot-presentation -i AAPL,MSFT -p annual --json
403
+ # List an event's transcript versions (optional: --limit, --cursor, --all)
404
+ invd events transcript-versions evt_01JC8M2X --json
411
405
  ```
412
406
 
413
- ### health
407
+ ### filers
414
408
 
415
- Liveness of the API (no API key)
409
+ Every SEC filer (13F managers, pre-IPO issuers, former registrants), listed or not
416
410
 
417
411
  ```bash
418
- # Health check
419
- invd health --json
420
- ```
412
+ # Get a filer (optional: --expand, --fields)
413
+ invd filers get 0000102909 --json
421
414
 
422
- ### insider-trades
423
-
424
- Insider transactions of a company
425
-
426
- ```bash
427
- # Insider trades (optional: --start-date, --end-date, --acquired-disposed, --sort, --limit, --offset, --all)
428
- invd insider-trades list -i AAPL --json
415
+ # List SEC filers (optional: --q, --form, --phase, --listed, --sort, --fields, --limit, --cursor, --all)
416
+ invd filers list -q berkshire --json
429
417
  ```
430
418
 
431
- ### ipos
419
+ ### filings
432
420
 
433
- Initial public offerings
421
+ SEC filings, their facts, notes, review chains, full-text search and datasets
434
422
 
435
423
  ```bash
436
- # List IPOs (optional: --start-date, --end-date, --sort, --limit, --offset, --all)
437
- invd ipos list --json
424
+ # List SEC dataset releases (optional: --fields, --limit, --cursor, --all)
425
+ invd filings datasets --json
438
426
 
439
- # List IPO registrations (SEC) (optional: --start-date, --end-date, --stage, --is-spac, --pending, --sort, --limit, --offset, --all)
440
- invd ipos registrations --json
441
- ```
427
+ # List a filing's numeric facts (optional: --tag, --fields, --limit, --cursor, --all)
428
+ invd filings facts 0000320193-26-000026 --json
442
429
 
443
- ### login
430
+ # Get a filing (optional: --expand, --fields)
431
+ invd filings get 0000320193-26-000026 --json
444
432
 
445
- <!-- invd:hand:login -->
446
- ```bash
447
- invd login # browser sign-in to your Invinite Data account; stores the key
448
- ```
449
- <!-- /invd:hand:login -->
433
+ # List filings (optional: --form, --items, --filed-at-gte, --filed-at-gt, --filed-at-lte, --filed-at-lt, --sort, --fields, --limit, --cursor, --all)
434
+ invd filings list AAPL --json
450
435
 
451
- ### logout
436
+ # List a filing's text facts (optional: --tag, --fields, --limit, --cursor, --all)
437
+ invd filings notes 0000320193-26-000026 --json
452
438
 
453
- <!-- invd:hand:logout -->
454
- ```bash
455
- invd logout # revokes the login and clears stored credentials
439
+ # Get a filing's review chain (optional: --max-depth, --max-nodes, --direction, --kind)
440
+ invd filings review-chain 0000320193-26-000026 --json
456
441
  ```
457
- <!-- /invd:hand:logout -->
458
442
 
459
- ### market
443
+ ### financials
460
444
 
461
- Market calendar
445
+ Statements: standardized and as-reported, plain, detailed and presentation, point in time
462
446
 
463
447
  ```bash
464
- # Market holidays (optional: --sort, --limit, --offset, --all)
465
- invd market holidays --json
448
+ # Standardized statements [--basis as-reported|standardized, --view summary|detailed|presentation] (optional: --statement, --fiscal-year, --fiscal-quarter, --fiscal-year-gte, --fiscal-year-gt, --fiscal-year-lte, --fiscal-year-lt, --as-of, --filing, --sort, --fields, --limit, --cursor, --all)
449
+ invd financials AAPL -s income-statement --view detailed --json
466
450
  ```
467
451
 
468
- ### metadata
452
+ ### guidance
469
453
 
470
- The metrics and filing section ids the API serves
454
+ Guidance items and KPI mentions
471
455
 
472
456
  ```bash
473
- # Available metrics
474
- invd metadata metrics --json
457
+ # List KPI mentions (optional: --event, --metric, --sort, --fields, --limit, --cursor, --all)
458
+ invd guidance kpis AAPL --json
475
459
 
476
- # Available SEC section IDs
477
- invd metadata section-ids --json
460
+ # List guidance items (optional: --event, --metric, --period-kind, --basis, --review, --sort, --fields, --limit, --cursor, --all)
461
+ invd guidance list AAPL --json
478
462
  ```
479
463
 
480
- ### metrics
464
+ ### holdings
481
465
 
482
- Ratios, growth and CAGR derived from the statements
466
+ 13F holdings and quarter-over-quarter changes
483
467
 
484
468
  ```bash
485
- # CAGR metrics (optional: --period-years, --sort, --limit, --offset, --all)
486
- invd metrics cagr -i AAPL --json
487
-
488
- # Growth metrics (optional: --growth-type, --sort, --limit, --offset, --all)
489
- invd metrics growth -i AAPL -p annual --json
469
+ # List 13F position changes (optional: --filer, --period-end, --prior-period-end, --type, --fields, --limit, --cursor, --all)
470
+ invd holdings changes AAPL --json
490
471
 
491
- # Financial ratios (optional: --category, --sort, --limit, --offset, --all)
492
- invd metrics ratios -i AAPL -p annual --json
472
+ # List 13F holdings (optional: --filer, --accession, --period-end, --instruments, --sort, --fields, --limit, --cursor, --all)
473
+ invd holdings list AAPL --json
493
474
  ```
494
475
 
495
- ### news
476
+ ### insider-trades
496
477
 
497
- News of US companies from SEC filings and their own newsrooms: items, full text with attribution, developments and files
478
+ Form 4 transactions
498
479
 
499
480
  ```bash
500
- # List company developments from news (optional: --publisher, --topic, --item-id, --from, --to, --effective-from, --effective-to, --limit, --cursor, --all)
501
- invd news developments --json
481
+ # Get an insider trade (optional: --fields)
482
+ invd insider-trades get 0001127602-26-012345:1 --json
502
483
 
503
- # List news items (optional: --ticker, --cik, --from, --to, --source, --kind, --topic, --earnings, --publisher, --publication-type, --issuer-category, --issuer-tag, --limit, --cursor, --all)
504
- invd news list --json
484
+ # List insider trades (optional: --side, --filed-at-gte, --filed-at-gt, --filed-at-lte, --filed-at-lt, --sort, --fields, --limit, --cursor, --all)
485
+ invd insider-trades list AAPL --json
486
+ ```
505
487
 
506
- # Search news (optional: --mode, --case-sensitive, --field, --ticker, --cik, --publisher, --publisher-host, --kind, --topic, --from, --to, --limit)
507
- invd news search -q "data center revenue" -m lexical -t NVDA --json
488
+ ### investor-documents
508
489
 
509
- # Get a news item's summary in blocks (optional: --limit, --max-chars, --cursor, --all)
510
- invd news text --id 06304274-da4a-400e-9d5c-fb4ce04f01c9 --json
511
- ```
490
+ Company-published documents and their search
512
491
 
513
- <!-- invd:hand:news get -->
514
492
  ```bash
515
- # Get a news item with Invinite's summary; --pdf prints its branded PDF's URL, --pdf-out saves the file
516
- invd news get --id 06304274-da4a-400e-9d5c-fb4ce04f01c9 --json
517
- invd news get --id 06304274-da4a-400e-9d5c-fb4ce04f01c9 --pdf-out item.pdf
493
+ # Get an investor document (optional: --expand, --save)
494
+ invd investor-documents get doc_01JC7Q2M --json
495
+
496
+ # List investor documents (optional: --event, --category, --kind, --fiscal-year, --sort, --fields, --limit, --cursor, --all)
497
+ invd investor-documents list AAPL --json
518
498
  ```
519
- <!-- /invd:hand:news get -->
520
499
 
521
- ### ownership
500
+ ### ipos
522
501
 
523
- 13F holdings, holders and position changes of institutional investors
502
+ Initial public offerings
524
503
 
525
504
  ```bash
526
- # Holdings by company (optional: --min-value, --sort, --limit, --offset, --all)
527
- invd ownership holdings-by-company -i AAPL --json
528
-
529
- # Holdings by investor (optional: --sort, --limit, --offset, --all)
530
- invd ownership holdings-by-investor --cik 1067983 --json
531
-
532
- # List institutional investors (optional: --ciks, --limit, --offset, --sort, --all)
533
- invd ownership institutions --json
505
+ # Get an offering (optional: --fields)
506
+ invd ipos get ipo_0001234567_s1_1 --json
534
507
 
535
- # Institutional transactions (optional: --cik, --identifier, --start-date, --end-date, --type, --calendar-year, --calendar-quarter, --sort, --limit, --offset, --all)
536
- invd ownership transactions --cik 1067983 --json
508
+ # List offerings (optional: --stage, --is-spac, --listing-date-gte, --listing-date-gt, --listing-date-lte, --listing-date-lt, --company, --sort, --fields, --limit, --cursor, --all)
509
+ invd ipos list --json
537
510
  ```
538
511
 
539
- ### plugin
512
+ ### market
513
+
514
+ US market holidays
540
515
 
541
- <!-- invd:hand:plugin -->
542
516
  ```bash
543
- invd plugin install --claude --global # also --opencode, --codex, --copilot, --all; --local for this project
544
- invd plugin uninstall --claude --global
517
+ # List market holidays (optional: --date-gte, --date-gt, --date-lte, --date-lt, --sort, --fields, --limit, --cursor, --all)
518
+ invd market holidays --json
545
519
  ```
546
- <!-- /invd:hand:plugin -->
547
520
 
548
- ### sec
521
+ ### me
549
522
 
550
- Invinite's SEC document store: filers and issuer lifecycle, filings with their documents, immutable cited document versions (blocks, pages, figures, sections, XBRL fact places), lexical / literal search, 13F holdings research, standardized-statement provenance and metric exports
523
+ Your data account's own usage (costs no credits)
551
524
 
552
525
  ```bash
553
- # SEC dataset releases
554
- invd sec datasets --json
555
-
556
- # SEC document (current version) (optional: --blocks, --pages, --printed, --printed-occurrence, --neighbors, --footnotes, --limit)
557
- invd sec document --accession 0000320193-26-000026 --filename aapl-20260926.htm --json
558
-
559
- # Metric export manifest
560
- invd sec export --export-id 6a7350b9-df18-517b-b553-96601b1e0508 --json
561
-
562
- # XBRL fact places in a document version (optional: --fact-id, --status, --cursor, --limit, --all)
563
- invd sec fact-places --version-id 8be0b759-1a9d-5f89-8308-bd86185f5e1f --json
564
-
565
- # SEC document figure
566
- invd sec figure --version-id 8be0b759-1a9d-5f89-8308-bd86185f5e1f --block-id b00107 --json
567
-
568
- # SEC filer
569
- invd sec filer --cik 320193 --json
570
-
571
- # SEC filer document coverage (optional: --since)
572
- invd sec filer-coverage --cik 320193 --json
573
-
574
- # Find SEC filers (optional: --name, --ticker, --form, --limit)
575
- invd sec filers --json
576
-
577
- # SEC filing and its documents
578
- invd sec filing -a 0000320193-26-000026 --json
526
+ # Who am I
527
+ invd me show --json
579
528
 
580
- # SEC dataset facts of a filing (optional: --tag)
581
- invd sec filing-facts --accession 0000320193-26-000026 --json
582
-
583
- # Holdings of a 13F filing (optional: --after, --limit, --all)
584
- invd sec filing-holdings --accession 0000320193-26-000026 --json
585
-
586
- # SEC dataset text notes of a filing (optional: --tag)
587
- invd sec filing-notes --accession 0000320193-26-000026 --json
529
+ # Get my usage (optional: --days)
530
+ invd me usage --json
531
+ ```
588
532
 
589
- # SEC filings of a filer (optional: --form, --filed-from, --filed-to, --order, --cursor, --limit, --all)
590
- invd sec filings -i AAPL --json
533
+ ### metrics
591
534
 
592
- # Explain a standardized fact (optional: --max-depth, --max-members, --places)
593
- invd sec financial-fact --id "320193|is_total_revenue|annual|2026|4" --json
535
+ Ratios, growth, CAGR, and the explanation of one standardized fact
594
536
 
595
- # Standardization rule catalog (optional: --statement, --metric-id)
596
- invd sec financials-catalog --json
537
+ ```bash
538
+ # List CAGRs (optional: --horizon, --fiscal-year-gte, --fiscal-year-gt, --fiscal-year-lte, --fiscal-year-lt, --sort, --fields, --limit, --cursor, --all)
539
+ invd metrics cagr AAPL -p annual --json
597
540
 
598
- # Filers of an SEC form (optional: --exact, --name, --cik, --cursor, --limit, --all)
599
- invd sec form-filers -f 13F-HR --json
541
+ # Explain a standardized fact (optional: --max-depth, --max-members)
542
+ invd metrics explain "0000320193|is_total_revenue|annual|2026|4" --json
600
543
 
601
- # Institutional holders of a security (13F) (optional: --cusip, --symbol, --issuer-cik, --instruments, --pinned-at, --cursor, --limit, --all)
602
- invd sec holders --period-end 2026-06-30 --json
544
+ # List growth rates (optional: --basis, --fiscal-year-gte, --fiscal-year-gt, --fiscal-year-lte, --fiscal-year-lt, --sort, --fields, --limit, --cursor, --all)
545
+ invd metrics growth AAPL -p annual --json
603
546
 
604
- # Position changes in a security (13F) (optional: --prior-period-end, --cusip, --symbol, --issuer-cik, --instruments, --pinned-at, --cursor, --limit, --all)
605
- invd sec holding-deltas --period-end 2026-06-30 --json
547
+ # List ratios (optional: --category, --fiscal-year-gte, --fiscal-year-gt, --fiscal-year-lte, --fiscal-year-lt, --sort, --fields, --limit, --cursor, --all)
548
+ invd metrics ratios AAPL -p annual --json
549
+ ```
606
550
 
607
- # List SEC issuers (optional: --query, --phase, --form, --public-seen-from, --public-seen-to, --cursor, --limit, --all)
608
- invd sec issuers --json
551
+ ### news
609
552
 
610
- # SEC issuer lifecycle (optional: --traverse, --max-hops)
611
- invd sec lifecycle --cik 320193 --json
553
+ News of US companies from SEC filings and their own newsrooms: items, full text with attribution, developments and files
612
554
 
613
- # Request an annual metric export (optional: --period-type, --mode, --generation)
614
- invd sec metric-export -m is_total_revenue -y 2025 --json
555
+ ```bash
556
+ # List announcements (optional: --topic, --item, --announced-at-gte, --announced-at-gt, --announced-at-lte, --announced-at-lt, --effective-from-gte, --effective-to-lte, --sort, --fields, --limit, --cursor, --all)
557
+ invd news announcements AAPL --json
615
558
 
616
- # Portfolio of a 13F manager (optional: --instruments, --pinned-at, --cursor, --limit, --all)
617
- invd sec portfolio --period-end 2026-06-30 --cik 1067983 --json
559
+ # Get a news item (optional: --fields, --save)
560
+ invd news get nws_01JCB4R8 --json
618
561
 
619
- # SEC review chain of a filing (optional: --max-depth, --max-nodes)
620
- invd sec review-chain --accession 0000320193-26-000026 --json
562
+ # List news items (optional: --event, --kind, --topic, --published-at-gte, --published-at-gt, --published-at-lte, --published-at-lt, --sort, --fields, --limit, --cursor, --all)
563
+ invd news list AAPL --json
621
564
 
622
- # SEC review relations of a filing (optional: --direction, --kind, --history, --cursor, --limit, --all)
623
- invd sec review-relations --accession 0000320193-26-000026 --json
565
+ # Get a news item's text (optional: --cursor, --max-chars)
566
+ invd news text nws_01JCB4R8 --json
567
+ ```
624
568
 
625
- # Search SEC documents (optional: --mode, --case-sensitive, --cik, --entity-id, --successors, --accession, --version-id, --form, --filename, --item, --exhibit-type, --filed-from, --filed-to, --cursor, --limit, --all)
626
- invd sec search -q "supply chain concentration" --json
569
+ ### people
627
570
 
628
- # Sections of an SEC document version (optional: --outline)
629
- invd sec sections --version-id 8be0b759-1a9d-5f89-8308-bd86185f5e1f --json
571
+ Executives and analysts, and who took part in which event
630
572
 
631
- # Standardized statement with provenance (optional: --period-type, --fiscal-year-from, --fiscal-year-to, --metric-id, --other-evidence, --limit)
632
- invd sec statement --cik 320193 --statement income_statement --json
573
+ ```bash
574
+ # Get a person (optional: --fields)
575
+ invd people get per_01JC9A7Y --json
633
576
 
634
- # SEC document version (optional: --blocks, --pages, --printed, --printed-occurrence, --neighbors, --footnotes, --limit)
635
- invd sec version --version-id 8be0b759-1a9d-5f89-8308-bd86185f5e1f --json
636
- ```
577
+ # List people (optional: --event, --role, --q, --sort, --fields, --limit, --cursor, --all)
578
+ invd people list AAPL -r analyst --json
637
579
 
638
- <!-- invd:hand:sec save -->
639
- ```bash
640
- # Save a filing's originals from their permanent public copies (size + SHA-256 verified); every document it
641
- # cannot save is listed with its reason (no public copy yet, quarantined, too large) and the exit code is 3
642
- invd sec save --accession 0000320193-26-000024 -o filings/aapl-8k/
643
- invd sec save --accession 0000320193-26-000024 --filename aapl-20261102.htm --json
580
+ # List event participations (optional: --event, --person, --role, --fields, --limit, --cursor, --all)
581
+ invd people participants -e evt_01JC8M2X --json
644
582
  ```
645
- <!-- /invd:hand:sec save -->
646
583
 
647
- <!-- invd:hand:sec save-figure -->
648
- ```bash
649
- # Save a cited figure's image from its permanent public URL; the citation is version_id#block_id, never a URL
650
- invd sec save-figure --version-id 402affed-8245-5fe1-814d-d025f60db4ac --block-id b00012 -o figures/
651
- ```
652
- <!-- /invd:hand:sec save-figure -->
584
+ ### plugin
653
585
 
654
- <!-- invd:hand:sec export-file -->
586
+ <!-- invd:hand:plugin -->
655
587
  ```bash
656
- # Download a metric export (.csv.gz) through the key-authorized route, verified against its SHA-256;
657
- # --sha256 (from invd sec export) also accepts an identical existing file without a request.
658
- # Exit 4 = partial download, 5 = size / hash / type mismatch: nothing is saved either way
659
- invd sec export-file --export-id 6a7350b9-df18-517b-b553-96601b1e0508 -o exports/
660
- invd sec export-file --export-id 6a7350b9-df18-517b-b553-96601b1e0508 -o exports/revenue-2025.csv.gz --sha256 <sha256>
588
+ invd plugin install --claude --global
589
+ invd plugin install --all --local
590
+ invd plugin uninstall --all --global
661
591
  ```
662
- <!-- /invd:hand:sec export-file -->
592
+ <!-- /invd:hand:plugin -->
663
593
 
664
- ### segments
594
+ ### search
665
595
 
666
- Financial facts broken down by business and geographic segment
596
+ Full-text search over SEC filings, transcripts, investor documents and news
667
597
 
668
598
  ```bash
669
- # Segmented financials (optional: --segment-id, --sort, --limit, --offset, --all)
670
- invd segments list -i AAPL -p annual --json
599
+ # Search filings (optional: --mode, --case-sensitive, --company, --form, --item, --filed-at-gte, --filed-at-gt, --filed-at-lte, --filed-at-lt, --limit, --cursor, --all)
600
+ invd search filings "supply chain risk" -c AAPL --json
671
601
 
672
- # Segmented financials (detailed) (optional: --segment-id, --sort, --limit, --offset, --all)
673
- invd segments list-detailed -i AAPL -p annual --json
674
- ```
675
-
676
- ### status
602
+ # Search investor documents (optional: --company, --kind, --mode, --limit, --cursor, --all)
603
+ invd search investor-documents "capital allocation" -c AAPL --json
677
604
 
678
- Public status and licensing (no API key)
605
+ # Search news (optional: --company, --field, --mode, --published-at-gte, --published-at-gt, --published-at-lte, --published-at-lt, --limit, --cursor, --all)
606
+ invd search news buyback -c AAPL --json
679
607
 
680
- ```bash
681
- # Licensing policy
682
- invd status licensing --json
683
-
684
- # Service status
685
- invd status show --json
608
+ # Search transcripts (optional: --company, --event, --type, --mode, --conference-date-gte, --conference-date-gt, --conference-date-lte, --conference-date-lt, --limit, --cursor, --all)
609
+ invd search transcripts "gross margin" -c AAPL --json
686
610
  ```
687
611
 
688
- ### usage
612
+ ### segments
689
613
 
690
- Your data account's own usage (costs no credits)
614
+ Segment values (revenue by product, geography …); list-detailed adds lineage (PRO)
691
615
 
692
616
  ```bash
693
- # Account usage (optional: --days)
694
- invd usage --json
617
+ # List segment values (optional: --metric, --axis, --fiscal-year-gte, --fiscal-year-gt, --fiscal-year-lte, --fiscal-year-lt, --sort, --fields, --limit, --cursor, --all)
618
+ invd segments list AAPL -p annual --json
619
+
620
+ # List segment values with lineage (optional: --metric, --axis, --fiscal-year-gte, --fiscal-year-gt, --fiscal-year-lte, --fiscal-year-lt, --sort, --fields, --limit, --cursor, --all)
621
+ invd segments list-detailed AAPL -p annual --json
695
622
  ```
696
623
 
697
624
  ### webhooks
698
625
 
699
- Earnings-call webhook subscriptions (PRO): signed POSTs of the call lifecycle
626
+ Outbound earnings-call lifecycle deliveries (LITE and above)
700
627
 
701
628
  ```bash
702
- # Create a webhook (optional: --body-file)
703
- invd webhooks create --body '{"url":"https://hooks.example.com/invinite","events":["earnings_call.transcript_ready","earnings_call.ended"],"filters":{"ciks":["0000789019","0000320193"]}}' --json
629
+ # Create a webhook (optional: --idempotency-key, --url, --events, --ciks, --keywords, --body, --body-file)
630
+ invd webhooks create --body '{"url":"https://hooks.example.com/invinite","events":["event.transcript_ready","news.published"],"filters":{"ciks":["0000320193"]}}' --json
704
631
 
705
632
  # Delete a webhook
706
- invd webhooks delete --id js7a2c9xq4m8v1k6t3w5r0n2b8gnd4fh --json
633
+ invd webhooks delete k57a8x2b4c6d8e0f2g4h6j8k0m2n4p6r --json
707
634
 
708
- # Webhook delivery attempts
709
- invd webhooks deliveries --id js7a2c9xq4m8v1k6t3w5r0n2b8gnd4fh --json
635
+ # List a webhook's deliveries (optional: --limit, --cursor, --all)
636
+ invd webhooks deliveries k57a8x2b4c6d8e0f2g4h6j8k0m2n4p6r --json
710
637
 
711
- # List webhooks
638
+ # Get a webhook
639
+ invd webhooks get k57a8x2b4c6d8e0f2g4h6j8k0m2n4p6r --json
640
+
641
+ # List webhooks (optional: --limit, --cursor, --all)
712
642
  invd webhooks list --json
713
643
 
714
- # Rotate a webhook signing secret
715
- invd webhooks rotate-secret --id js7a2c9xq4m8v1k6t3w5r0n2b8gnd4fh --json
644
+ # Rotate a webhook's secret
645
+ invd webhooks rotate-secret k57a8x2b4c6d8e0f2g4h6j8k0m2n4p6r --json
716
646
 
717
647
  # Send a test delivery
718
- invd webhooks test --id js7a2c9xq4m8v1k6t3w5r0n2b8gnd4fh --json
648
+ invd webhooks test k57a8x2b4c6d8e0f2g4h6j8k0m2n4p6r --json
719
649
 
720
- # Update a webhook (optional: --body, --body-file)
721
- invd webhooks update --id js7a2c9xq4m8v1k6t3w5r0n2b8gnd4fh --body '{"events":["earnings_call.transcript_ready"],"active":true}' --json
650
+ # Update a webhook (optional: --keywords, --ciks, --events, --active, --body, --body-file)
651
+ invd webhooks update k57a8x2b4c6d8e0f2g4h6j8k0m2n4p6r --body '{"events":["event.transcript_ready"],"active":true}' --json
722
652
  ```
723
653
 
724
- ### ws
725
-
726
- <!-- invd:hand:ws -->
727
- ```bash
728
- # Real-time SEC filing stream
729
- invd ws listen --json
730
-
731
- # Follow a live call (event ID or CIK; NDJSON with --json; PRO)
732
- invd ws listen --earnings <event_id> --json
733
- invd ws listen --earnings 320193 --names
734
-
735
- # Live price ticks of the call's stock next to the transcript (≤ 1/s; per-call only, not with --all-live)
736
- invd ws listen --earnings <event_id> --prices --json | jq 'select(.type=="price_tick")'
737
-
738
- # Keyword alerts on a live call, or across every live call (--all-live needs --keywords)
739
- invd ws listen --earnings 320193 --keywords tariffs,china --keyword-match stem --json
740
- invd ws listen --all-live --keywords tariffs --json
741
-
742
- # New news items as they are published (STANDARD): one line each, NDJSON with --json
743
- invd ws listen --news --tickers NVDA
744
- invd ws listen --news --ciks 1045810 --news-sources ir --json
745
- invd ws listen --news --earnings-news --news-kinds earnings_results,guidance --json
746
- ```
747
- <!-- /invd:hand:ws -->
748
-
749
654
  <!-- invd:commands:end -->
750
655
 
751
- ## Pagination
752
-
753
- Paginated commands (the `--all` ones above) take:
754
- - `-l, --limit <n>` — max results per page
755
- - `--offset <n>` — pagination offset
756
- - `--all` — auto-paginate all results (follows `next_url`; per-company commands merge each company's pages; a page refused with 429 / 503 is retried up to 5 times after the API's `Retry-After`)
757
- - `-s, --sort <dir>` — `asc` or `desc` (where the operation supports it)
758
-
759
- ## Common Patterns
656
+ ## Common patterns
760
657
 
761
658
  ### Comparing companies
762
- Fetch snapshots for multiple tickers at once:
763
- ```bash
764
- invd financials snapshot -i AAPL,MSFT,GOOGL -p annual --json
765
- ```
766
659
 
767
- ### Getting the latest quarterly data
768
660
  ```bash
769
- invd financials income-statement -i AAPL -p quarterly --limit 1 --json
661
+ invd catalog metrics --json
662
+ invd companies get AAPL --json
663
+ invd financials AAPL MSFT GOOGL --fiscal-year 2025 --json
664
+ invd metrics ratios AAPL MSFT GOOGL -p annual --category profitability,valuation --json
665
+ invd metrics cagr AAPL MSFT GOOGL -p annual --horizon 5 --json
770
666
  ```
771
667
 
772
- ### Finding who owns a stock
668
+ ### The latest quarter
669
+
773
670
  ```bash
774
- invd ownership holdings-by-company -i AAPL --min-value 10000000 --json
671
+ invd financials AAPL --period quarterly --limit 1 --json
775
672
  ```
776
673
 
777
- ### Searching SEC filings by topic
778
- Cited passages (`version_id` + `block_id`), no prose answer; 100 credits:
674
+ ### Who owns a stock, and who is buying
675
+
779
676
  ```bash
780
- invd sec search -q "artificial intelligence strategy" -m lexical -c 789019 --json
677
+ invd holdings AAPL --limit 50 --json
678
+ invd holdings changes AAPL --type new,added --json
781
679
  ```
782
680
 
783
681
  ### Reading an earnings call
784
- Find the call, then read it from the cheapest source to the most detailed:
682
+
683
+ Resolve the call, then read from the cheapest source to the most detailed:
684
+
785
685
  ```bash
786
- invd earnings events -i NVDA -s desc -l 4 --json # pick the event_id
787
- invd earnings transcript --event-id <event_id> --format sections --json
788
- invd earnings extractions --event-id <event_id> --kind guidance --json
789
- invd earnings search -q "gross margin outlook" --event-id <event_id> --json
790
- invd earnings search -q "data center revenue" --mode literal --event-id <event_id> --json # exact quote in the call
791
- invd earnings document-search -q FY2027 -i NVDA --mode literal --json # exact token in the company's documents
792
- invd earnings price-attribution --event-id <event_id> --json # optional: price moves during the call
686
+ invd events NVDA --status ended --sort -scheduled_at --limit 1 --json event_id,fiscal_year,fiscal_quarter,has_transcript
687
+ invd events press-release <event_id> --json
688
+ invd guidance NVDA --event <event_id> --json
689
+ invd events qa <event_id> --json
690
+ invd events comparison <event_id> --json
691
+ invd search transcripts "data center revenue" --event <event_id> --mode literal --json
692
+ invd events transcript-text <event_id> --json
793
693
  ```
794
- `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.
795
694
 
796
- ### What did NVIDIA announce today
797
- Ask for the company's own publications (publisher = CIK), then read one in full and cite it:
695
+ ### Reading a filing section
696
+
798
697
  ```bash
799
- invd news list --publisher 1045810 --from 2026-10-29 --json # what NVIDIA published itself
800
- invd news list --ticker NVDA --source edgar --from 2026-10-29 --json # SEC filings mentioning NVIDIA
801
- invd news get --id <id> --json # summary_text + attribution
802
- invd news developments --publisher 1045810 --topic product_launch --json
698
+ invd filings AAPL --form 10-K --limit 1 --json accession,filing_date
699
+ invd filings get 0000320193-26-000026 --expand documents --json
700
+ invd documents sections <version_id> --json
701
+ invd documents get <version_id> --blocks b12-b40 --json
803
702
  ```
804
- Answer with the publisher, the date and the link of each item (`attribution`), and keep "announced" / "planned" claims as such.
805
703
 
806
- ### Reading specific filing sections
807
- Find the filing, pin the document version, list its sections, then read a section's blocks:
704
+ ### What a company announced
705
+
808
706
  ```bash
809
- invd sec filings -i AAPL -f 10-K -l 1 --json # pick the accession
810
- invd sec filing --accession <accession> --json # document manifest: the primary filename
811
- invd sec document --accession <accession> --filename <filename> -l 1 --json # version.version_id
812
- invd sec sections --version-id <version_id> --json # each section's blocks selector
813
- invd sec version --version-id <version_id> --blocks <blocks> --json
707
+ invd news announcements NVDA --announced-at-gte 2026-11-01 --json
708
+ invd news NVDA --published-at-gte 2026-11-01 --json
709
+ invd news text <id> --json
814
710
  ```
815
711
 
712
+ Answer with the publisher, date and link of each item.
713
+
816
714
  ## Tips
817
715
 
818
- - Always use `--json` for data you'll analyze or transform
819
- - Use `--all` cautiously — some endpoints return thousands of results
820
- - Company identifiers accept both ticker symbols (AAPL) and CIK numbers
821
- - For financial statements, `annual` gives the full year, `quarterly` gives each quarter, `ttm` gives trailing twelve months, `ytd` gives year-to-date
822
- - The `snapshot` command is the most efficient way to get complete financials for one or more companies at once
823
- - Filing sections return full text — great for detailed analysis of risk factors, MD&A, business descriptions, etc.
824
- - Following a live call: `invd earnings live --json` lists the calls in progress; `invd ws listen --earnings <event_id>` streams the transcript (PRO) and exits once the final transcript is ready
825
- - Earnings-call identifiers: `event_id` (UUID) from `invd earnings events` / `calendar` is the most precise selector; ticker + `--year` + `--quarter` uses the company's fiscal quarter
716
+ - Use `--json` (or `--json a,b`) for data you analyse; tables are for people.
717
+ - Use `--all` sparingly and `--dry-run` first: some lists hold thousands of rows.
718
+ - Tickers and CIKs are interchangeable as the company positional; a CIK also reaches a filer without a listing
719
+ (`invd filers get 0000102909`).
720
+ - Fiscal periods follow the company's fiscal calendar: a fiscal Q4 can end in the next calendar year.
721
+ - Keep `meta.coverage` in mind: `pending` / `partial` means the answer is incomplete.