@rundit-sdk/client 0.2.0 → 0.3.0-rc.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -2,12 +2,6 @@
2
2
 
3
3
  This package is generated for agentic and human consumers.
4
4
 
5
- ## Status
6
-
7
- This is a placeholder package. This package is not in active use yet. It exists to validate the shared SDK generation pipeline and to reserve the future API-key client surface.
8
-
9
- Use it as a reference for future API-key client ergonomics, not as the primary SDK recommendation today.
10
-
11
5
 
12
6
 
13
7
  ## Initialization
@@ -16,8 +10,8 @@ Use it as a reference for future API-key client ergonomics, not as the primary S
16
10
  import { createClient, routeManifest } from '@rundit-sdk/client'
17
11
 
18
12
  const client = createClient({
19
- baseUrl: 'https://test.rundit.com/api/v1/sdk',
20
13
  apiKey: '<API key>',
14
+ // baseUrl: 'https://test.rundit.com/api/v2/sdk',
21
15
  })
22
16
 
23
17
  console.log(routeManifest)
@@ -38,14 +32,16 @@ console.log(routeManifest)
38
32
  - Returns: `CompaniesGetOneResponse`
39
33
  - Params: path: id (number)
40
34
  - companies.getAll: List companies available to the SDK consumer
41
- - Call: `client.companies.getAll()`
35
+ - Call: `client.companies.getAll({ limit: 123 })`
42
36
  - Returns: `CompaniesGetAllResponse`
37
+ - Params: query: limit? (number), cursor? (string), companyIds? (number[]), companyGroupIds? (number[])
43
38
 
44
39
  ## companyGroups
45
40
 
46
41
  - companyGroups.getAll: List company groups available to the SDK consumer
47
- - Call: `client.companyGroups.getAll()`
42
+ - Call: `client.companyGroups.getAll({ limit: 123 })`
48
43
  - Returns: `CompanyGroupsGetAllResponse`
44
+ - Params: query: limit? (number), cursor? (string), companyGroupIds? (number[])
49
45
  - companyGroups.getOne: Get one company group available to the SDK consumer
50
46
  - Call: `client.companyGroups.getOne(123)`
51
47
  - Returns: `CompanyGroupsGetOneResponse`
@@ -56,19 +52,40 @@ console.log(routeManifest)
56
52
  - positions.getCompanyPositions: Get positions for one company
57
53
  - Call: `client.positions.getCompanyPositions(123, { currency: 'USD' })`
58
54
  - Returns: `PositionsGetCompanyPositionsResponse`
59
- - Params: path: id (number); query: companyGroupId? (number), currency (string), date? (string)
55
+ - Params: path: id (number); query: limit? (number), cursor? (string), companyGroupIds? (number[]), currency (string), date? (string)
60
56
  - positions.getPortfolioPositions: Get portfolio positions
61
57
  - Call: `client.positions.getPortfolioPositions({ currency: 'USD' })`
62
58
  - Returns: `PositionsGetPortfolioPositionsResponse`
63
- - Params: query: companyGroupIds? (number[]), currency (string), date? (string)
59
+ - Params: query: companyGroupIds? (number[]), companyIds? (number[]), currency (string), date? (string)
64
60
 
65
61
  ## transactions
66
62
 
67
63
  - transactions.getCompanyTransactions: Get transactions for one company
68
- - Call: `client.transactions.getCompanyTransactions(123, { companyGroupIds: [123] })`
64
+ - Call: `client.transactions.getCompanyTransactions(123, { limit: 123 })`
69
65
  - Returns: `TransactionsGetCompanyTransactionsResponse`
70
- - Params: path: id (number); query: companyGroupIds? (number[])
66
+ - Params: path: id (number); query: limit? (number), cursor? (string), companyGroupIds? (number[]), types? (("Auction" | "ConvertibleNote" | "ConvertToEquity" | "Dividend" | "EquityInvestment" | "EquityReceived" | "Extend" | "FutureEquityAgreement" | "Insolvency" | "IPO" | "LimitedAuction" | "OptionsReceived" | "OtherExit" | "OtherInvestment" | "OtherRealization" | "Payback" | "Proprietary" | "TradeSale" | "ValuationChange" | "WriteOff")[]), priorTo? (string)
71
67
  - transactions.getTransactions: Get transactions for multiple companies
72
- - Call: `client.transactions.getTransactions({ companyGroupIds: [123] })`
68
+ - Call: `client.transactions.getTransactions({ limit: 123 })`
73
69
  - Returns: `TransactionsGetTransactionsResponse`
74
- - Params: query: companyGroupIds? (number[]), companyIds? (number[])
70
+ - Params: query: limit? (number), cursor? (string), companyGroupIds? (number[]), types? (("Auction" | "ConvertibleNote" | "ConvertToEquity" | "Dividend" | "EquityInvestment" | "EquityReceived" | "Extend" | "FutureEquityAgreement" | "Insolvency" | "IPO" | "LimitedAuction" | "OptionsReceived" | "OtherExit" | "OtherInvestment" | "OtherRealization" | "Payback" | "Proprietary" | "TradeSale" | "ValuationChange" | "WriteOff")[]), priorTo? (string), companyIds? (number[])
71
+
72
+ ## metrics
73
+
74
+ - metrics.getTypes: List metric types available to the SDK consumer
75
+ - Call: `client.metrics.getTypes()`
76
+ - Returns: `MetricsGetTypesResponse`
77
+ - metrics.search: Read metric values for accessible companies, grouped by company
78
+ - Call: `client.metrics.search({})`
79
+ - Returns: `MetricsSearchResponse`
80
+ - Params: body: MetricsSearchBody
81
+
82
+ ## companyReports
83
+
84
+ - companyReports.list: List published company reports accessible to the caller (metadata only)
85
+ - Call: `client.companyReports.list({ limit: 123 })`
86
+ - Returns: `CompanyReportsListResponse`
87
+ - Params: query: limit? (number), cursor? (string), companyIds? (number[]), companyGroupIds? (number[]), timeframe? ("Month" | "Quarter" | "Year"), from? (string), to? (string)
88
+ - companyReports.getOne: Fetch the full content of a single company report
89
+ - Call: `client.companyReports.getOne(123)`
90
+ - Returns: `CompanyReportsGetOneResponse`
91
+ - Params: path: id (number)
package/README.md CHANGED
@@ -1,10 +1,6 @@
1
1
  # @rundit-sdk/client
2
2
 
3
- Placeholder Rundit client SDK for future third-party and API-key based consumers.
4
-
5
- ## Status
6
-
7
- > Placeholder package. This package is not in active use yet. It exists to validate the shared SDK generation pipeline and to reserve the future API-key client surface.
3
+ Rundit client SDK for third-party integrations authenticated with a Rundit API key.
8
4
 
9
5
 
10
6
 
@@ -20,19 +16,29 @@ npm install @rundit-sdk/client
20
16
  import { createClient } from '@rundit-sdk/client'
21
17
 
22
18
  const client = createClient({
23
- baseUrl: 'https://test.rundit.com/api/v1/sdk',
24
19
  apiKey: '<API key>',
20
+ // baseUrl: 'https://test.rundit.com/api/v2/sdk',
25
21
  })
26
22
 
27
23
  await client.companies.getOne(123)
28
24
  ```
29
25
 
26
+ ## Authentication
27
+
28
+ - Authenticated with a tenant-scoped Rundit API key sent via the `X-API-Key` header
29
+ - API keys are user-scoped: every request resolves to the owning user's roles and company access; the SDK cannot escape those bounds
30
+ - Obtain an API key from your Rundit account settings (personal API keys); rotate or revoke from the same screen
31
+ - Treat keys as secrets: never commit them, prefer environment variables, and use separate keys per integration
32
+
33
+
30
34
  ## AI Quickstart
31
35
 
32
- - Treat this package as a future-facing placeholder, not the primary SDK for current integrations
33
- - Prefer `@rundit-sdk/embed` for active embedded integrations today
34
- - You may still inspect `routeManifest`, `AGENTS.md`, and `ai-manifest.json` to understand the generalized client-generation shape
36
+ - Designed for third-party server-side or workflow integrations using a Rundit API key
37
+ - Use namespace methods such as `client.companies.getAll()` or `client.positions.getPortfolioPositions({ currency: 'USD' })`
38
+ - Inspect `routeManifest` at runtime for a machine-readable map of method paths, parameters, and response types
39
+ - Read `AGENTS.md` or `ai-manifest.json` in this package for AI-focused usage guidance
35
40
  - Agent skill metadata is published under `skills/rundit-sdk-client/SKILL.md`
41
+ - Follow the generated DTO types for identifiers; current company, company group, and transaction ids are numeric, while aggregated position summaries do not expose a standalone `id`
36
42
 
37
43
 
38
44
  ## Methods
@@ -52,9 +58,10 @@ Get one company available to the SDK consumer
52
58
 
53
59
  List companies available to the SDK consumer
54
60
 
55
- - Call: `client.companies.getAll()`
61
+ - Call: `client.companies.getAll({ limit: 123 })`
56
62
  - HTTP: `GET /companies`
57
63
  - Returns: `CompaniesGetAllResponse`
64
+ - Params: query: limit? (number), cursor? (string), companyIds? (number[]), companyGroupIds? (number[])
58
65
 
59
66
  ## companyGroups
60
67
 
@@ -62,9 +69,10 @@ List companies available to the SDK consumer
62
69
 
63
70
  List company groups available to the SDK consumer
64
71
 
65
- - Call: `client.companyGroups.getAll()`
72
+ - Call: `client.companyGroups.getAll({ limit: 123 })`
66
73
  - HTTP: `GET /company-groups`
67
74
  - Returns: `CompanyGroupsGetAllResponse`
75
+ - Params: query: limit? (number), cursor? (string), companyGroupIds? (number[])
68
76
 
69
77
  ### `companyGroups.getOne`
70
78
 
@@ -84,7 +92,7 @@ Get positions for one company
84
92
  - Call: `client.positions.getCompanyPositions(123, { currency: 'USD' })`
85
93
  - HTTP: `GET /positions/companies/:id`
86
94
  - Returns: `PositionsGetCompanyPositionsResponse`
87
- - Params: path: id (number); query: companyGroupId? (number), currency (string), date? (string)
95
+ - Params: path: id (number); query: limit? (number), cursor? (string), companyGroupIds? (number[]), currency (string), date? (string)
88
96
 
89
97
  ### `positions.getPortfolioPositions`
90
98
 
@@ -93,7 +101,7 @@ Get portfolio positions
93
101
  - Call: `client.positions.getPortfolioPositions({ currency: 'USD' })`
94
102
  - HTTP: `GET /positions/portfolio`
95
103
  - Returns: `PositionsGetPortfolioPositionsResponse`
96
- - Params: query: companyGroupIds? (number[]), currency (string), date? (string)
104
+ - Params: query: companyGroupIds? (number[]), companyIds? (number[]), currency (string), date? (string)
97
105
 
98
106
  ## transactions
99
107
 
@@ -101,19 +109,58 @@ Get portfolio positions
101
109
 
102
110
  Get transactions for one company
103
111
 
104
- - Call: `client.transactions.getCompanyTransactions(123, { companyGroupIds: [123] })`
112
+ - Call: `client.transactions.getCompanyTransactions(123, { limit: 123 })`
105
113
  - HTTP: `GET /transactions/companies/:id`
106
114
  - Returns: `TransactionsGetCompanyTransactionsResponse`
107
- - Params: path: id (number); query: companyGroupIds? (number[])
115
+ - Params: path: id (number); query: limit? (number), cursor? (string), companyGroupIds? (number[]), types? (("Auction" | "ConvertibleNote" | "ConvertToEquity" | "Dividend" | "EquityInvestment" | "EquityReceived" | "Extend" | "FutureEquityAgreement" | "Insolvency" | "IPO" | "LimitedAuction" | "OptionsReceived" | "OtherExit" | "OtherInvestment" | "OtherRealization" | "Payback" | "Proprietary" | "TradeSale" | "ValuationChange" | "WriteOff")[]), priorTo? (string)
108
116
 
109
117
  ### `transactions.getTransactions`
110
118
 
111
119
  Get transactions for multiple companies
112
120
 
113
- - Call: `client.transactions.getTransactions({ companyGroupIds: [123] })`
121
+ - Call: `client.transactions.getTransactions({ limit: 123 })`
114
122
  - HTTP: `GET /transactions`
115
123
  - Returns: `TransactionsGetTransactionsResponse`
116
- - Params: query: companyGroupIds? (number[]), companyIds? (number[])
124
+ - Params: query: limit? (number), cursor? (string), companyGroupIds? (number[]), types? (("Auction" | "ConvertibleNote" | "ConvertToEquity" | "Dividend" | "EquityInvestment" | "EquityReceived" | "Extend" | "FutureEquityAgreement" | "Insolvency" | "IPO" | "LimitedAuction" | "OptionsReceived" | "OtherExit" | "OtherInvestment" | "OtherRealization" | "Payback" | "Proprietary" | "TradeSale" | "ValuationChange" | "WriteOff")[]), priorTo? (string), companyIds? (number[])
125
+
126
+ ## metrics
127
+
128
+ ### `metrics.getTypes`
129
+
130
+ List metric types available to the SDK consumer
131
+
132
+ - Call: `client.metrics.getTypes()`
133
+ - HTTP: `GET /metrics/types`
134
+ - Returns: `MetricsGetTypesResponse`
135
+
136
+ ### `metrics.search`
137
+
138
+ Read metric values for accessible companies, grouped by company
139
+
140
+ - Call: `client.metrics.search({})`
141
+ - HTTP: `POST /metrics`
142
+ - Returns: `MetricsSearchResponse`
143
+ - Params: body: MetricsSearchBody
144
+
145
+ ## companyReports
146
+
147
+ ### `companyReports.list`
148
+
149
+ List published company reports accessible to the caller (metadata only)
150
+
151
+ - Call: `client.companyReports.list({ limit: 123 })`
152
+ - HTTP: `GET /company-reports`
153
+ - Returns: `CompanyReportsListResponse`
154
+ - Params: query: limit? (number), cursor? (string), companyIds? (number[]), companyGroupIds? (number[]), timeframe? ("Month" | "Quarter" | "Year"), from? (string), to? (string)
155
+
156
+ ### `companyReports.getOne`
157
+
158
+ Fetch the full content of a single company report
159
+
160
+ - Call: `client.companyReports.getOne(123)`
161
+ - HTTP: `GET /company-reports/:id`
162
+ - Returns: `CompanyReportsGetOneResponse`
163
+ - Params: path: id (number)
117
164
 
118
165
  ## TypeScript
119
166
 
@@ -125,4 +172,5 @@ Get transactions for multiple companies
125
172
  ## Notes
126
173
 
127
174
  - This package is generated from `sdk-packages/openapi/sdk.openapi.json`
175
+ - Defaults to `https://api.rundit.com/api/v2/sdk`; pass `baseUrl` to target a different environment such as test
128
176
  - Do not edit files under `dist/` manually
package/ai-manifest.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "packageName": "@rundit-sdk/client",
3
- "description": "Placeholder Rundit client SDK for future third-party and API-key based consumers.",
4
- "maturity": "placeholder",
5
- "placeholderNotice": "This package is not in active use yet. It exists to validate the shared SDK generation pipeline and to reserve the future API-key client surface.",
3
+ "description": "Rundit client SDK for third-party integrations authenticated with a Rundit API key.",
4
+ "maturity": "active",
5
+ "placeholderNotice": null,
6
6
  "factoryName": "createClient",
7
7
  "initialization": {
8
- "baseUrl": "https://test.rundit.com/api/v1/sdk",
8
+ "baseUrlDefault": "https://api.rundit.com/api/v2/sdk",
9
9
  "authOption": "apiKey",
10
10
  "authLabel": "API key"
11
11
  },
@@ -43,10 +43,35 @@
43
43
  "description": null,
44
44
  "method": "GET",
45
45
  "path": "/companies",
46
- "exampleCall": "client.companies.getAll()",
46
+ "exampleCall": "client.companies.getAll({ limit: 123 })",
47
47
  "responseType": "CompaniesGetAllResponse",
48
48
  "pathParams": [],
49
- "queryParams": []
49
+ "queryParams": [
50
+ {
51
+ "name": "limit",
52
+ "required": false,
53
+ "type": "number",
54
+ "description": "Maximum items per page. Currently accepted but not enforced; reserved for future pagination."
55
+ },
56
+ {
57
+ "name": "cursor",
58
+ "required": false,
59
+ "type": "string",
60
+ "description": "Opaque cursor from a previous response's meta.nextCursor. Currently accepted but ignored."
61
+ },
62
+ {
63
+ "name": "companyIds",
64
+ "required": false,
65
+ "type": "number[]",
66
+ "description": "Restrict results to these company identifiers"
67
+ },
68
+ {
69
+ "name": "companyGroupIds",
70
+ "required": false,
71
+ "type": "number[]",
72
+ "description": "Restrict results to companies that belong to any of these company groups"
73
+ }
74
+ ]
50
75
  }
51
76
  ],
52
77
  "companyGroups": [
@@ -56,10 +81,29 @@
56
81
  "description": null,
57
82
  "method": "GET",
58
83
  "path": "/company-groups",
59
- "exampleCall": "client.companyGroups.getAll()",
84
+ "exampleCall": "client.companyGroups.getAll({ limit: 123 })",
60
85
  "responseType": "CompanyGroupsGetAllResponse",
61
86
  "pathParams": [],
62
- "queryParams": []
87
+ "queryParams": [
88
+ {
89
+ "name": "limit",
90
+ "required": false,
91
+ "type": "number",
92
+ "description": "Maximum items per page. Currently accepted but not enforced; reserved for future pagination."
93
+ },
94
+ {
95
+ "name": "cursor",
96
+ "required": false,
97
+ "type": "string",
98
+ "description": "Opaque cursor from a previous response's meta.nextCursor. Currently accepted but ignored."
99
+ },
100
+ {
101
+ "name": "companyGroupIds",
102
+ "required": false,
103
+ "type": "number[]",
104
+ "description": "Restrict results to these company group identifiers"
105
+ }
106
+ ]
63
107
  },
64
108
  {
65
109
  "operation": "getOne",
@@ -97,10 +141,22 @@
97
141
  ],
98
142
  "queryParams": [
99
143
  {
100
- "name": "companyGroupId",
144
+ "name": "limit",
101
145
  "required": false,
102
146
  "type": "number",
103
- "description": "Optional company group identifier to filter by"
147
+ "description": "Maximum items per page. Currently accepted but not enforced; reserved for future pagination."
148
+ },
149
+ {
150
+ "name": "cursor",
151
+ "required": false,
152
+ "type": "string",
153
+ "description": "Opaque cursor from a previous response's meta.nextCursor. Currently accepted but ignored."
154
+ },
155
+ {
156
+ "name": "companyGroupIds",
157
+ "required": false,
158
+ "type": "number[]",
159
+ "description": "Optional list of company group identifiers to filter the position breakdown"
104
160
  },
105
161
  {
106
162
  "name": "currency",
@@ -132,6 +188,12 @@
132
188
  "type": "number[]",
133
189
  "description": "Optional list of company group identifiers to filter the portfolio positions"
134
190
  },
191
+ {
192
+ "name": "companyIds",
193
+ "required": false,
194
+ "type": "number[]",
195
+ "description": "Optional list of company identifiers to narrow the aggregation to"
196
+ },
135
197
  {
136
198
  "name": "currency",
137
199
  "required": true,
@@ -154,7 +216,7 @@
154
216
  "description": null,
155
217
  "method": "GET",
156
218
  "path": "/transactions/companies/:id",
157
- "exampleCall": "client.transactions.getCompanyTransactions(123, { companyGroupIds: [123] })",
219
+ "exampleCall": "client.transactions.getCompanyTransactions(123, { limit: 123 })",
158
220
  "responseType": "TransactionsGetCompanyTransactionsResponse",
159
221
  "pathParams": [
160
222
  {
@@ -164,11 +226,35 @@
164
226
  }
165
227
  ],
166
228
  "queryParams": [
229
+ {
230
+ "name": "limit",
231
+ "required": false,
232
+ "type": "number",
233
+ "description": "Maximum items per page. Currently accepted but not enforced; reserved for future pagination."
234
+ },
235
+ {
236
+ "name": "cursor",
237
+ "required": false,
238
+ "type": "string",
239
+ "description": "Opaque cursor from a previous response's meta.nextCursor. Currently accepted but ignored."
240
+ },
167
241
  {
168
242
  "name": "companyGroupIds",
169
243
  "required": false,
170
244
  "type": "number[]",
171
245
  "description": "Optional company group identifiers to filter transactions by"
246
+ },
247
+ {
248
+ "name": "types",
249
+ "required": false,
250
+ "type": "(\"Auction\" | \"ConvertibleNote\" | \"ConvertToEquity\" | \"Dividend\" | \"EquityInvestment\" | \"EquityReceived\" | \"Extend\" | \"FutureEquityAgreement\" | \"Insolvency\" | \"IPO\" | \"LimitedAuction\" | \"OptionsReceived\" | \"OtherExit\" | \"OtherInvestment\" | \"OtherRealization\" | \"Payback\" | \"Proprietary\" | \"TradeSale\" | \"ValuationChange\" | \"WriteOff\")[]",
251
+ "description": "Restrict results to these transaction types"
252
+ },
253
+ {
254
+ "name": "priorTo",
255
+ "required": false,
256
+ "type": "string",
257
+ "description": "Exclude transactions on or after this ISO 8601 date (cut-off filter)"
172
258
  }
173
259
  ]
174
260
  },
@@ -178,16 +264,40 @@
178
264
  "description": null,
179
265
  "method": "GET",
180
266
  "path": "/transactions",
181
- "exampleCall": "client.transactions.getTransactions({ companyGroupIds: [123] })",
267
+ "exampleCall": "client.transactions.getTransactions({ limit: 123 })",
182
268
  "responseType": "TransactionsGetTransactionsResponse",
183
269
  "pathParams": [],
184
270
  "queryParams": [
271
+ {
272
+ "name": "limit",
273
+ "required": false,
274
+ "type": "number",
275
+ "description": "Maximum items per page. Currently accepted but not enforced; reserved for future pagination."
276
+ },
277
+ {
278
+ "name": "cursor",
279
+ "required": false,
280
+ "type": "string",
281
+ "description": "Opaque cursor from a previous response's meta.nextCursor. Currently accepted but ignored."
282
+ },
185
283
  {
186
284
  "name": "companyGroupIds",
187
285
  "required": false,
188
286
  "type": "number[]",
189
287
  "description": "Optional company group identifiers to filter transactions by"
190
288
  },
289
+ {
290
+ "name": "types",
291
+ "required": false,
292
+ "type": "(\"Auction\" | \"ConvertibleNote\" | \"ConvertToEquity\" | \"Dividend\" | \"EquityInvestment\" | \"EquityReceived\" | \"Extend\" | \"FutureEquityAgreement\" | \"Insolvency\" | \"IPO\" | \"LimitedAuction\" | \"OptionsReceived\" | \"OtherExit\" | \"OtherInvestment\" | \"OtherRealization\" | \"Payback\" | \"Proprietary\" | \"TradeSale\" | \"ValuationChange\" | \"WriteOff\")[]",
293
+ "description": "Restrict results to these transaction types"
294
+ },
295
+ {
296
+ "name": "priorTo",
297
+ "required": false,
298
+ "type": "string",
299
+ "description": "Exclude transactions on or after this ISO 8601 date (cut-off filter)"
300
+ },
191
301
  {
192
302
  "name": "companyIds",
193
303
  "required": false,
@@ -196,6 +306,103 @@
196
306
  }
197
307
  ]
198
308
  }
309
+ ],
310
+ "metrics": [
311
+ {
312
+ "operation": "getTypes",
313
+ "summary": "List metric types available to the SDK consumer",
314
+ "description": "Returns predefined metric types plus user-defined metric types scoped to the caller — VC group custom types for VC users, company custom types for company users. Each entry includes a numeric id and a human-readable name suitable for display or LLM context.",
315
+ "method": "GET",
316
+ "path": "/metrics/types",
317
+ "exampleCall": "client.metrics.getTypes()",
318
+ "responseType": "MetricsGetTypesResponse",
319
+ "pathParams": [],
320
+ "queryParams": []
321
+ },
322
+ {
323
+ "operation": "search",
324
+ "summary": "Read metric values for accessible companies, grouped by company",
325
+ "description": "Returns metric data points for companies the caller can access (companies in the caller's VC group portfolio, or the caller's own company for company users). Each entry carries company and metric type references with id and human-readable name. Filter by company, company group, metric type, timeframe, and date range to narrow the response.",
326
+ "method": "POST",
327
+ "path": "/metrics",
328
+ "exampleCall": "client.metrics.search({})",
329
+ "responseType": "MetricsSearchResponse",
330
+ "pathParams": [],
331
+ "queryParams": []
332
+ }
333
+ ],
334
+ "companyReports": [
335
+ {
336
+ "operation": "list",
337
+ "summary": "List published company reports accessible to the caller (metadata only)",
338
+ "description": "Returns lightweight report metadata (id, title, period, publisher company reference). Use GET /company-reports/:id to fetch the full content of a specific report. Visibility is determined by the caller's roles — VC users see reports for managed-portfolio companies, company employees see their own company's reports, portfolio investors see Published reports shared with their visibility groups. Filters narrow the list by company ids and reporting period (timeframe + date range).",
339
+ "method": "GET",
340
+ "path": "/company-reports",
341
+ "exampleCall": "client.companyReports.list({ limit: 123 })",
342
+ "responseType": "CompanyReportsListResponse",
343
+ "pathParams": [],
344
+ "queryParams": [
345
+ {
346
+ "name": "limit",
347
+ "required": false,
348
+ "type": "number",
349
+ "description": "Maximum items per page. Currently accepted but not enforced; reserved for future pagination."
350
+ },
351
+ {
352
+ "name": "cursor",
353
+ "required": false,
354
+ "type": "string",
355
+ "description": "Opaque cursor from a previous response's meta.nextCursor. Currently accepted but ignored."
356
+ },
357
+ {
358
+ "name": "companyIds",
359
+ "required": false,
360
+ "type": "number[]",
361
+ "description": "Restrict results to these companies. Defaults to all companies the caller can access."
362
+ },
363
+ {
364
+ "name": "companyGroupIds",
365
+ "required": false,
366
+ "type": "number[]",
367
+ "description": "Restrict to companies that belong to any of these company groups."
368
+ },
369
+ {
370
+ "name": "timeframe",
371
+ "required": false,
372
+ "type": "\"Month\" | \"Quarter\" | \"Year\"",
373
+ "description": "Restrict to a reporting period granularity (Month, Quarter, Year)."
374
+ },
375
+ {
376
+ "name": "from",
377
+ "required": false,
378
+ "type": "string",
379
+ "description": "Lower bound for the reporting period date (ISO 8601, inclusive)."
380
+ },
381
+ {
382
+ "name": "to",
383
+ "required": false,
384
+ "type": "string",
385
+ "description": "Upper bound for the reporting period date (ISO 8601, inclusive)."
386
+ }
387
+ ]
388
+ },
389
+ {
390
+ "operation": "getOne",
391
+ "summary": "Fetch the full content of a single company report",
392
+ "description": "Returns the report metadata plus structured sections (text/markdown/image) and attachments with pre-signed URLs. Returns 404 if the report does not exist and 403 if the caller cannot access it under their role-based permissions.",
393
+ "method": "GET",
394
+ "path": "/company-reports/:id",
395
+ "exampleCall": "client.companyReports.getOne(123)",
396
+ "responseType": "CompanyReportsGetOneResponse",
397
+ "pathParams": [
398
+ {
399
+ "name": "id",
400
+ "type": "number",
401
+ "description": "Report identifier"
402
+ }
403
+ ],
404
+ "queryParams": []
405
+ }
199
406
  ]
200
407
  }
201
408
  }