@epilot/sdk 2.18.4 → 2.18.6

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 (145) hide show
  1. package/definitions/dashboard-runtime.json +1 -1
  2. package/definitions/dashboard.json +919 -48
  3. package/definitions/email-settings-runtime.json +1 -1
  4. package/definitions/email-settings.json +50 -10
  5. package/dist/apis/access-token.cjs +6 -6
  6. package/dist/apis/access-token.js +1 -1
  7. package/dist/apis/address-suggestions.cjs +6 -6
  8. package/dist/apis/address-suggestions.js +1 -1
  9. package/dist/apis/address.cjs +6 -6
  10. package/dist/apis/address.js +1 -1
  11. package/dist/apis/ai-agents.cjs +6 -6
  12. package/dist/apis/ai-agents.js +1 -1
  13. package/dist/apis/app.cjs +6 -6
  14. package/dist/apis/app.js +1 -1
  15. package/dist/apis/audit-logs.cjs +6 -6
  16. package/dist/apis/audit-logs.js +1 -1
  17. package/dist/apis/automation.cjs +6 -6
  18. package/dist/apis/automation.js +1 -1
  19. package/dist/apis/billing.cjs +6 -6
  20. package/dist/apis/billing.js +1 -1
  21. package/dist/apis/blueprint-manifest.cjs +6 -6
  22. package/dist/apis/blueprint-manifest.js +1 -1
  23. package/dist/apis/calendar.cjs +6 -6
  24. package/dist/apis/calendar.js +1 -1
  25. package/dist/apis/configuration-hub.cjs +6 -6
  26. package/dist/apis/configuration-hub.js +1 -1
  27. package/dist/apis/consent.cjs +6 -6
  28. package/dist/apis/consent.js +1 -1
  29. package/dist/apis/customer-portal.cjs +6 -6
  30. package/dist/apis/customer-portal.js +1 -1
  31. package/dist/apis/dashboard.cjs +8 -8
  32. package/dist/apis/dashboard.d.cts +2 -2
  33. package/dist/apis/dashboard.d.ts +2 -2
  34. package/dist/apis/dashboard.js +2 -2
  35. package/dist/apis/data-governance.cjs +6 -6
  36. package/dist/apis/data-governance.js +1 -1
  37. package/dist/apis/deduplication.cjs +6 -6
  38. package/dist/apis/deduplication.js +1 -1
  39. package/dist/apis/design.cjs +6 -6
  40. package/dist/apis/design.js +1 -1
  41. package/dist/apis/document.cjs +6 -6
  42. package/dist/apis/document.js +1 -1
  43. package/dist/apis/email-settings.cjs +8 -8
  44. package/dist/apis/email-settings.d.cts +2 -2
  45. package/dist/apis/email-settings.d.ts +2 -2
  46. package/dist/apis/email-settings.js +2 -2
  47. package/dist/apis/email-template.cjs +6 -6
  48. package/dist/apis/email-template.js +1 -1
  49. package/dist/apis/entity-mapping.cjs +6 -6
  50. package/dist/apis/entity-mapping.js +1 -1
  51. package/dist/apis/entity.cjs +6 -6
  52. package/dist/apis/entity.js +1 -1
  53. package/dist/apis/environments.cjs +6 -6
  54. package/dist/apis/environments.js +1 -1
  55. package/dist/apis/event-catalog.cjs +6 -6
  56. package/dist/apis/event-catalog.js +1 -1
  57. package/dist/apis/file.cjs +6 -6
  58. package/dist/apis/file.js +1 -1
  59. package/dist/apis/iban.cjs +6 -6
  60. package/dist/apis/iban.js +1 -1
  61. package/dist/apis/integration-toolkit.cjs +6 -6
  62. package/dist/apis/integration-toolkit.js +1 -1
  63. package/dist/apis/journey.cjs +6 -6
  64. package/dist/apis/journey.js +1 -1
  65. package/dist/apis/kanban.cjs +6 -6
  66. package/dist/apis/kanban.js +1 -1
  67. package/dist/apis/message.cjs +6 -6
  68. package/dist/apis/message.js +1 -1
  69. package/dist/apis/metering.cjs +6 -6
  70. package/dist/apis/metering.js +1 -1
  71. package/dist/apis/notes.cjs +6 -6
  72. package/dist/apis/notes.js +1 -1
  73. package/dist/apis/notification.cjs +6 -6
  74. package/dist/apis/notification.js +1 -1
  75. package/dist/apis/organization.cjs +6 -6
  76. package/dist/apis/organization.js +1 -1
  77. package/dist/apis/partner-directory.cjs +6 -6
  78. package/dist/apis/partner-directory.js +1 -1
  79. package/dist/apis/permissions.cjs +6 -6
  80. package/dist/apis/permissions.js +1 -1
  81. package/dist/apis/pricing-tier.cjs +6 -6
  82. package/dist/apis/pricing-tier.js +1 -1
  83. package/dist/apis/pricing.cjs +6 -6
  84. package/dist/apis/pricing.js +1 -1
  85. package/dist/apis/purpose.cjs +6 -6
  86. package/dist/apis/purpose.js +1 -1
  87. package/dist/apis/query.cjs +6 -6
  88. package/dist/apis/query.js +1 -1
  89. package/dist/apis/sandbox.cjs +6 -6
  90. package/dist/apis/sandbox.js +1 -1
  91. package/dist/apis/sharing.cjs +6 -6
  92. package/dist/apis/sharing.js +1 -1
  93. package/dist/apis/snapshot.cjs +6 -6
  94. package/dist/apis/snapshot.js +1 -1
  95. package/dist/apis/submission.cjs +6 -6
  96. package/dist/apis/submission.js +1 -1
  97. package/dist/apis/target.cjs +6 -6
  98. package/dist/apis/target.js +1 -1
  99. package/dist/apis/targeting.cjs +6 -6
  100. package/dist/apis/targeting.js +1 -1
  101. package/dist/apis/template-variables.cjs +6 -6
  102. package/dist/apis/template-variables.js +1 -1
  103. package/dist/apis/user.cjs +6 -6
  104. package/dist/apis/user.js +1 -1
  105. package/dist/apis/validation-rules.cjs +6 -6
  106. package/dist/apis/validation-rules.js +1 -1
  107. package/dist/apis/webhooks.cjs +6 -6
  108. package/dist/apis/webhooks.js +1 -1
  109. package/dist/apis/workflow-definition.cjs +6 -6
  110. package/dist/apis/workflow-definition.js +1 -1
  111. package/dist/apis/workflow.cjs +6 -6
  112. package/dist/apis/workflow.js +1 -1
  113. package/dist/{chunk-KHKNOPEX.js → chunk-7HQ3GMYQ.js} +1 -1
  114. package/dist/{chunk-YNJPE3SS.cjs → chunk-AWJHA3GG.cjs} +1 -1
  115. package/dist/{chunk-HUDTRI32.cjs → chunk-MIKSJIFK.cjs} +4 -4
  116. package/dist/{chunk-3FHDY3R5.js → chunk-TAQOJW6T.js} +4 -4
  117. package/dist/chunk-TIRWWTDP.js +14 -0
  118. package/dist/chunk-VMCF5R6R.cjs +14 -0
  119. package/dist/dashboard-7QJ46I7N.cjs +7 -0
  120. package/dist/dashboard-ILXUFFF2.js +7 -0
  121. package/dist/{dashboard-runtime-EXP2AM44.cjs → dashboard-runtime-2LOASQPB.cjs} +2 -2
  122. package/dist/{dashboard-runtime-PSKSGLCF.js → dashboard-runtime-YMFNQP3M.js} +1 -1
  123. package/dist/dashboard.d-BSevFHjf.d.cts +1405 -0
  124. package/dist/dashboard.d-BSevFHjf.d.ts +1405 -0
  125. package/dist/email-settings-U753HXGA.js +7 -0
  126. package/dist/email-settings-Z5EBAELW.cjs +7 -0
  127. package/dist/{email-settings-runtime-J7JLYDMU.cjs → email-settings-runtime-IW2AT2RB.cjs} +2 -2
  128. package/dist/{email-settings-runtime-4BT72ADN.js → email-settings-runtime-YJYEC5AH.js} +1 -1
  129. package/dist/{email-settings.d-CR4lORuR.d.cts → email-settings.d-DViLYaOl.d.cts} +56 -14
  130. package/dist/{email-settings.d-CR4lORuR.d.ts → email-settings.d-DViLYaOl.d.ts} +56 -14
  131. package/dist/index.cjs +12 -12
  132. package/dist/index.d.cts +2 -2
  133. package/dist/index.d.ts +2 -2
  134. package/dist/index.js +3 -3
  135. package/docs/dashboard.md +1044 -180
  136. package/docs/email-settings.md +17 -13
  137. package/package.json +1 -1
  138. package/dist/chunk-M2UDF7PY.cjs +0 -14
  139. package/dist/chunk-SZMCMLOQ.js +0 -14
  140. package/dist/dashboard-UHYR5RTY.cjs +0 -7
  141. package/dist/dashboard-UTPGXFW5.js +0 -7
  142. package/dist/dashboard.d-CsGcA74I.d.cts +0 -440
  143. package/dist/dashboard.d-CsGcA74I.d.ts +0 -440
  144. package/dist/email-settings-ECSU7KWC.js +0 -7
  145. package/dist/email-settings-RHMYC2KT.cjs +0 -7
package/docs/dashboard.md CHANGED
@@ -27,10 +27,23 @@ const { data } = await dashboardClient.listDashboards(...)
27
27
  **Dashboards**
28
28
  - [`listDashboards`](#listdashboards)
29
29
  - [`createDashboard`](#createdashboard)
30
+ - [`listFavoriteDashboardIds`](#listfavoritedashboardids)
31
+ - [`favoriteDashboard`](#favoritedashboard)
32
+ - [`unfavoriteDashboard`](#unfavoritedashboard)
30
33
  - [`getDashboard`](#getdashboard)
31
34
  - [`putDashboard`](#putdashboard)
35
+ - [`patchDashboard`](#patchdashboard)
32
36
  - [`deleteDashboard`](#deletedashboard)
33
37
 
38
+ **Insights**
39
+ - [`listInsights`](#listinsights)
40
+ - [`createInsight`](#createinsight)
41
+ - [`listInsightTags`](#listinsighttags)
42
+ - [`getInsight`](#getinsight)
43
+ - [`putInsight`](#putinsight)
44
+ - [`patchInsight`](#patchinsight)
45
+ - [`deleteInsight`](#deleteinsight)
46
+
34
47
  **Visualisations**
35
48
  - [`listAvailableVisualisations`](#listavailablevisualisations)
36
49
 
@@ -41,6 +54,17 @@ const { data } = await dashboardClient.listDashboards(...)
41
54
  - [`DashboardID`](#dashboardid)
42
55
  - [`Dashboard`](#dashboard)
43
56
  - [`DashboardTileID`](#dashboardtileid)
57
+ - [`SharePermission`](#sharepermission)
58
+ - [`ShareGrant`](#sharegrant)
59
+ - [`OrgAccess`](#orgaccess)
60
+ - [`AccessControl`](#accesscontrol)
61
+ - [`AccessControlUpdate`](#accesscontrolupdate)
62
+ - [`DashboardPatch`](#dashboardpatch)
63
+ - [`InsightID`](#insightid)
64
+ - [`Insight`](#insight)
65
+ - [`InsightPatch`](#insightpatch)
66
+ - [`Tags`](#tags)
67
+ - [`Pagination`](#pagination)
44
68
  - [`DashboardTile`](#dashboardtile)
45
69
  - [`VisualisationConfig`](#visualisationconfig)
46
70
  - [`timechartVisualisationConfig`](#timechartvisualisationconfig)
@@ -57,7 +81,23 @@ List dashboards available to the user
57
81
  `GET /v1/dashboard/dashboards`
58
82
 
59
83
  ```ts
60
- const { data } = await client.listDashboards()
84
+ const { data } = await client.listDashboards({
85
+ q: 'example',
86
+ created_by: 'example',
87
+ created_after: 'example',
88
+ created_before: 'example',
89
+ updated_after: 'example',
90
+ updated_before: 'example',
91
+ shared_with: ['...'],
92
+ owner: ['...'],
93
+ accessible_to: 'example',
94
+ favorite: true,
95
+ favorites_first: true,
96
+ sort: 'example',
97
+ order: 'example',
98
+ limit: 1,
99
+ offset: 1,
100
+ })
61
101
  ```
62
102
 
63
103
  <details>
@@ -67,42 +107,37 @@ const { data } = await client.listDashboards()
67
107
  {
68
108
  "results": [
69
109
  {
110
+ "created_by": "10598",
111
+ "created_at": "1970-01-01T00:00:00.000Z",
112
+ "updated_by": "10598",
113
+ "updated_at": "1970-01-01T00:00:00.000Z",
114
+ "owner_org_id": "739224",
115
+ "owners": ["10598"],
116
+ "shared_with": [
117
+ {
118
+ "user_id": "10598",
119
+ "permission": "view"
120
+ }
121
+ ],
122
+ "org_access": "view",
70
123
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
71
124
  "title": "Employee Dashboard",
72
125
  "tiles": [
73
126
  {
74
127
  "id": "e4af1297-1fd6-440f-9846-f475f580d40f",
75
128
  "coordinates": {},
76
- "visualisation": "timechart",
77
- "visualisation_config": {
78
- "query": {
79
- "dataset": "entity_operations",
80
- "measure": "count_operations",
81
- "filters": [
82
- {
83
- "operation": ["createEntity"]
84
- },
85
- {
86
- "entity_schema": ["opportunity"]
87
- }
88
- ],
89
- "dimensions": [
90
- {
91
- "time_with_granularity": "month"
92
- },
93
- {
94
- "entity_attribute": "source.title"
95
- }
96
- ]
97
- },
98
- "options": {
99
- "type": "line"
100
- }
101
- }
129
+ "insight_id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e"
102
130
  }
103
- ]
131
+ ],
132
+ "favorited": false
104
133
  }
105
- ]
134
+ ],
135
+ "pagination": {
136
+ "total": 0,
137
+ "limit": 0,
138
+ "offset": 0,
139
+ "has_more": true
140
+ }
106
141
  }
107
142
  ```
108
143
 
@@ -120,40 +155,29 @@ Create new dashboard
120
155
  const { data } = await client.createDashboard(
121
156
  null,
122
157
  {
158
+ created_by: '10598',
159
+ created_at: '1970-01-01T00:00:00.000Z',
160
+ updated_by: '10598',
161
+ updated_at: '1970-01-01T00:00:00.000Z',
162
+ owner_org_id: '739224',
163
+ owners: ['10598'],
164
+ shared_with: [
165
+ {
166
+ user_id: '10598',
167
+ permission: 'view'
168
+ }
169
+ ],
170
+ org_access: 'view',
123
171
  id: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
124
172
  title: 'Employee Dashboard',
125
173
  tiles: [
126
174
  {
127
175
  id: 'e4af1297-1fd6-440f-9846-f475f580d40f',
128
176
  coordinates: {},
129
- visualisation: 'timechart',
130
- visualisation_config: {
131
- query: {
132
- dataset: 'entity_operations',
133
- measure: 'count_operations',
134
- filters: [
135
- {
136
- operation: ['createEntity']
137
- },
138
- {
139
- entity_schema: ['opportunity']
140
- }
141
- ],
142
- dimensions: [
143
- {
144
- time_with_granularity: 'month'
145
- },
146
- {
147
- entity_attribute: 'source.title'
148
- }
149
- ]
150
- },
151
- options: {
152
- type: 'line'
153
- }
154
- }
177
+ insight_id: '8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e'
155
178
  }
156
- ]
179
+ ],
180
+ favorited: false
157
181
  },
158
182
  )
159
183
  ```
@@ -163,40 +187,55 @@ const { data } = await client.createDashboard(
163
187
 
164
188
  ```json
165
189
  {
190
+ "created_by": "10598",
191
+ "created_at": "1970-01-01T00:00:00.000Z",
192
+ "updated_by": "10598",
193
+ "updated_at": "1970-01-01T00:00:00.000Z",
194
+ "owner_org_id": "739224",
195
+ "owners": ["10598"],
196
+ "shared_with": [
197
+ {
198
+ "user_id": "10598",
199
+ "permission": "view"
200
+ }
201
+ ],
202
+ "org_access": "view",
166
203
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
167
204
  "title": "Employee Dashboard",
168
205
  "tiles": [
169
206
  {
170
207
  "id": "e4af1297-1fd6-440f-9846-f475f580d40f",
171
208
  "coordinates": {},
172
- "visualisation": "timechart",
173
- "visualisation_config": {
174
- "query": {
175
- "dataset": "entity_operations",
176
- "measure": "count_operations",
177
- "filters": [
178
- {
179
- "operation": ["createEntity"]
180
- },
181
- {
182
- "entity_schema": ["opportunity"]
183
- }
184
- ],
185
- "dimensions": [
186
- {
187
- "time_with_granularity": "month"
188
- },
189
- {
190
- "entity_attribute": "source.title"
191
- }
192
- ]
193
- },
194
- "options": {
195
- "type": "line"
196
- }
197
- }
209
+ "insight_id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e"
198
210
  }
199
- ]
211
+ ],
212
+ "favorited": false
213
+ }
214
+ ```
215
+
216
+ </details>
217
+
218
+ ---
219
+
220
+ ### `listFavoriteDashboardIds`
221
+
222
+ Returns the current user's favorited dashboard ids, with no dashboard metadata. Lets a
223
+ client decide whether to default to a favorites-only view without first fetching the full
224
+ dashboards list.
225
+
226
+ `GET /v1/dashboard/dashboards/favorites`
227
+
228
+ ```ts
229
+ const { data } = await client.listFavoriteDashboardIds()
230
+ ```
231
+
232
+ <details>
233
+ <summary>Response</summary>
234
+
235
+ ```json
236
+ {
237
+ "dashboard_ids": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
238
+ "total": 0
200
239
  }
201
240
  ```
202
241
 
@@ -204,6 +243,38 @@ const { data } = await client.createDashboard(
204
243
 
205
244
  ---
206
245
 
246
+ ### `favoriteDashboard`
247
+
248
+ Marks the dashboard as favorited by the current user. Idempotent — favoriting an
249
+ already-favorited dashboard is not an error. Requires only view-level access to the
250
+ dashboard (unlike the edit-level ch
251
+
252
+ `PUT /v1/dashboard/dashboards/{id}/favorite`
253
+
254
+ ```ts
255
+ const { data } = await client.favoriteDashboard({
256
+ id: '123e4567-e89b-12d3-a456-426614174000',
257
+ })
258
+ ```
259
+
260
+ ---
261
+
262
+ ### `unfavoriteDashboard`
263
+
264
+ Removes the current user's favorite for the dashboard. Idempotent — unfavoriting a
265
+ dashboard that was not favorited is not an error, and neither is unfavoriting one that no
266
+ longer exists or is no long
267
+
268
+ `DELETE /v1/dashboard/dashboards/{id}/favorite`
269
+
270
+ ```ts
271
+ const { data } = await client.unfavoriteDashboard({
272
+ id: '123e4567-e89b-12d3-a456-426614174000',
273
+ })
274
+ ```
275
+
276
+ ---
277
+
207
278
  ### `getDashboard`
208
279
 
209
280
  Get dashboard by ID
@@ -221,40 +292,29 @@ const { data } = await client.getDashboard({
221
292
 
222
293
  ```json
223
294
  {
295
+ "created_by": "10598",
296
+ "created_at": "1970-01-01T00:00:00.000Z",
297
+ "updated_by": "10598",
298
+ "updated_at": "1970-01-01T00:00:00.000Z",
299
+ "owner_org_id": "739224",
300
+ "owners": ["10598"],
301
+ "shared_with": [
302
+ {
303
+ "user_id": "10598",
304
+ "permission": "view"
305
+ }
306
+ ],
307
+ "org_access": "view",
224
308
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
225
309
  "title": "Employee Dashboard",
226
310
  "tiles": [
227
311
  {
228
312
  "id": "e4af1297-1fd6-440f-9846-f475f580d40f",
229
313
  "coordinates": {},
230
- "visualisation": "timechart",
231
- "visualisation_config": {
232
- "query": {
233
- "dataset": "entity_operations",
234
- "measure": "count_operations",
235
- "filters": [
236
- {
237
- "operation": ["createEntity"]
238
- },
239
- {
240
- "entity_schema": ["opportunity"]
241
- }
242
- ],
243
- "dimensions": [
244
- {
245
- "time_with_granularity": "month"
246
- },
247
- {
248
- "entity_attribute": "source.title"
249
- }
250
- ]
251
- },
252
- "options": {
253
- "type": "line"
254
- }
255
- }
314
+ "insight_id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e"
256
315
  }
257
- ]
316
+ ],
317
+ "favorited": false
258
318
  }
259
319
  ```
260
320
 
@@ -274,36 +334,115 @@ const { data } = await client.putDashboard(
274
334
  id: '123e4567-e89b-12d3-a456-426614174000',
275
335
  },
276
336
  {
337
+ created_by: '10598',
338
+ created_at: '1970-01-01T00:00:00.000Z',
339
+ updated_by: '10598',
340
+ updated_at: '1970-01-01T00:00:00.000Z',
341
+ owner_org_id: '739224',
342
+ owners: ['10598'],
343
+ shared_with: [
344
+ {
345
+ user_id: '10598',
346
+ permission: 'view'
347
+ }
348
+ ],
349
+ org_access: 'view',
277
350
  id: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
278
351
  title: 'Employee Dashboard',
279
352
  tiles: [
280
353
  {
281
354
  id: 'e4af1297-1fd6-440f-9846-f475f580d40f',
282
355
  coordinates: {},
283
- visualisation: 'timechart',
356
+ insight_id: '8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e'
357
+ }
358
+ ],
359
+ favorited: false
360
+ },
361
+ )
362
+ ```
363
+
364
+ <details>
365
+ <summary>Response</summary>
366
+
367
+ ```json
368
+ {
369
+ "created_by": "10598",
370
+ "created_at": "1970-01-01T00:00:00.000Z",
371
+ "updated_by": "10598",
372
+ "updated_at": "1970-01-01T00:00:00.000Z",
373
+ "owner_org_id": "739224",
374
+ "owners": ["10598"],
375
+ "shared_with": [
376
+ {
377
+ "user_id": "10598",
378
+ "permission": "view"
379
+ }
380
+ ],
381
+ "org_access": "view",
382
+ "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
383
+ "title": "Employee Dashboard",
384
+ "tiles": [
385
+ {
386
+ "id": "e4af1297-1fd6-440f-9846-f475f580d40f",
387
+ "coordinates": {},
388
+ "insight_id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e"
389
+ }
390
+ ],
391
+ "favorited": false
392
+ }
393
+ ```
394
+
395
+ </details>
396
+
397
+ ---
398
+
399
+ ### `patchDashboard`
400
+
401
+ Partially update a dashboard by ID. Update content (title/tiles) and/or manage sharing
402
+ (owners, shared_with, org_access) — only owners may change sharing.
403
+ `owners` and `shared_with` replace the whole
404
+
405
+ `PATCH /v1/dashboard/dashboards/{id}`
406
+
407
+ ```ts
408
+ const { data } = await client.patchDashboard(
409
+ {
410
+ id: '123e4567-e89b-12d3-a456-426614174000',
411
+ },
412
+ {
413
+ owners: ['string'],
414
+ shared_with: [
415
+ {
416
+ user_id: '10598',
417
+ permission: 'view'
418
+ }
419
+ ],
420
+ org_access: 'view',
421
+ title: 'Employee Dashboard',
422
+ tiles: [
423
+ {
424
+ id: 'e4af1297-1fd6-440f-9846-f475f580d40f',
425
+ coordinates: {},
426
+ title: 'Number of opportunities created by journeys every month',
427
+ insight_id: '8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e',
428
+ visualisation_id: 'timechart',
284
429
  visualisation_config: {
285
430
  query: {
286
431
  dataset: 'entity_operations',
287
432
  measure: 'count_operations',
288
- filters: [
289
- {
290
- operation: ['createEntity']
291
- },
433
+ dimensions: [
292
434
  {
293
- entity_schema: ['opportunity']
435
+ time_with_granularity: 'year-month'
294
436
  }
295
437
  ],
296
- dimensions: [
297
- {
298
- time_with_granularity: 'month'
299
- },
438
+ filters: [
300
439
  {
301
- entity_attribute: 'source.title'
440
+ entity_schema: 'opportunity'
302
441
  }
303
442
  ]
304
443
  },
305
444
  options: {
306
- type: 'line'
445
+ type: 'bar'
307
446
  }
308
447
  }
309
448
  }
@@ -317,40 +456,29 @@ const { data } = await client.putDashboard(
317
456
 
318
457
  ```json
319
458
  {
459
+ "created_by": "10598",
460
+ "created_at": "1970-01-01T00:00:00.000Z",
461
+ "updated_by": "10598",
462
+ "updated_at": "1970-01-01T00:00:00.000Z",
463
+ "owner_org_id": "739224",
464
+ "owners": ["10598"],
465
+ "shared_with": [
466
+ {
467
+ "user_id": "10598",
468
+ "permission": "view"
469
+ }
470
+ ],
471
+ "org_access": "view",
320
472
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
321
473
  "title": "Employee Dashboard",
322
474
  "tiles": [
323
475
  {
324
476
  "id": "e4af1297-1fd6-440f-9846-f475f580d40f",
325
477
  "coordinates": {},
326
- "visualisation": "timechart",
327
- "visualisation_config": {
328
- "query": {
329
- "dataset": "entity_operations",
330
- "measure": "count_operations",
331
- "filters": [
332
- {
333
- "operation": ["createEntity"]
334
- },
335
- {
336
- "entity_schema": ["opportunity"]
337
- }
338
- ],
339
- "dimensions": [
340
- {
341
- "time_with_granularity": "month"
342
- },
343
- {
344
- "entity_attribute": "source.title"
345
- }
346
- ]
347
- },
348
- "options": {
349
- "type": "line"
350
- }
351
- }
478
+ "insight_id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e"
352
479
  }
353
- ]
480
+ ],
481
+ "favorited": false
354
482
  }
355
483
  ```
356
484
 
@@ -375,40 +503,115 @@ const { data } = await client.deleteDashboard({
375
503
 
376
504
  ```json
377
505
  {
506
+ "created_by": "10598",
507
+ "created_at": "1970-01-01T00:00:00.000Z",
508
+ "updated_by": "10598",
509
+ "updated_at": "1970-01-01T00:00:00.000Z",
510
+ "owner_org_id": "739224",
511
+ "owners": ["10598"],
512
+ "shared_with": [
513
+ {
514
+ "user_id": "10598",
515
+ "permission": "view"
516
+ }
517
+ ],
518
+ "org_access": "view",
378
519
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
379
520
  "title": "Employee Dashboard",
380
521
  "tiles": [
381
522
  {
382
523
  "id": "e4af1297-1fd6-440f-9846-f475f580d40f",
383
524
  "coordinates": {},
384
- "visualisation": "timechart",
525
+ "insight_id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e"
526
+ }
527
+ ],
528
+ "favorited": false
529
+ }
530
+ ```
531
+
532
+ </details>
533
+
534
+ ---
535
+
536
+ ### `listInsights`
537
+
538
+ List insights (saved charts) available to the user
539
+
540
+ `GET /v1/dashboard/insights`
541
+
542
+ ```ts
543
+ const { data } = await client.listInsights({
544
+ q: 'example',
545
+ visualisation_id: ['...'],
546
+ tags: ['...'],
547
+ tags_match: 'example',
548
+ created_by: 'example',
549
+ created_after: 'example',
550
+ created_before: 'example',
551
+ updated_after: 'example',
552
+ updated_before: 'example',
553
+ shared_with: ['...'],
554
+ owner: ['...'],
555
+ accessible_to: 'example',
556
+ sort: 'example',
557
+ order: 'example',
558
+ limit: 1,
559
+ offset: 1,
560
+ })
561
+ ```
562
+
563
+ <details>
564
+ <summary>Response</summary>
565
+
566
+ ```json
567
+ {
568
+ "results": [
569
+ {
570
+ "created_by": "10598",
571
+ "created_at": "1970-01-01T00:00:00.000Z",
572
+ "updated_by": "10598",
573
+ "updated_at": "1970-01-01T00:00:00.000Z",
574
+ "owner_org_id": "739224",
575
+ "owners": ["10598"],
576
+ "shared_with": [
577
+ {
578
+ "user_id": "10598",
579
+ "permission": "view"
580
+ }
581
+ ],
582
+ "org_access": "view",
583
+ "id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e",
584
+ "name": "Opportunities created by journeys every month",
585
+ "description": "Monthly count of opportunities grouped by source journey",
586
+ "visualisation_id": "timechart",
385
587
  "visualisation_config": {
386
588
  "query": {
387
589
  "dataset": "entity_operations",
388
590
  "measure": "count_operations",
389
- "filters": [
390
- {
391
- "operation": ["createEntity"]
392
- },
591
+ "dimensions": [
393
592
  {
394
- "entity_schema": ["opportunity"]
593
+ "time_with_granularity": "year-month"
395
594
  }
396
595
  ],
397
- "dimensions": [
398
- {
399
- "time_with_granularity": "month"
400
- },
596
+ "filters": [
401
597
  {
402
- "entity_attribute": "source.title"
598
+ "entity_schema": "opportunity"
403
599
  }
404
600
  ]
405
601
  },
406
602
  "options": {
407
- "type": "line"
603
+ "type": "bar"
408
604
  }
409
- }
605
+ },
606
+ "tags": ["revenue", "marketing"]
410
607
  }
411
- ]
608
+ ],
609
+ "pagination": {
610
+ "total": 0,
611
+ "limit": 0,
612
+ "offset": 0,
613
+ "has_more": true
614
+ }
412
615
  }
413
616
  ```
414
617
 
@@ -416,14 +619,55 @@ const { data } = await client.deleteDashboard({
416
619
 
417
620
  ---
418
621
 
419
- ### `listAvailableVisualisations`
622
+ ### `createInsight`
420
623
 
421
- Returns list of available Visualisations to configure new dashboard tiles
624
+ Create a new insight (saved chart). The caller becomes the owner.
422
625
 
423
- `GET /v1/dashboard/visualisations`
626
+ `POST /v1/dashboard/insights`
424
627
 
425
628
  ```ts
426
- const { data } = await client.listAvailableVisualisations()
629
+ const { data } = await client.createInsight(
630
+ null,
631
+ {
632
+ created_by: '10598',
633
+ created_at: '1970-01-01T00:00:00.000Z',
634
+ updated_by: '10598',
635
+ updated_at: '1970-01-01T00:00:00.000Z',
636
+ owner_org_id: '739224',
637
+ owners: ['10598'],
638
+ shared_with: [
639
+ {
640
+ user_id: '10598',
641
+ permission: 'view'
642
+ }
643
+ ],
644
+ org_access: 'view',
645
+ id: '8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e',
646
+ name: 'Opportunities created by journeys every month',
647
+ description: 'Monthly count of opportunities grouped by source journey',
648
+ visualisation_id: 'timechart',
649
+ visualisation_config: {
650
+ query: {
651
+ dataset: 'entity_operations',
652
+ measure: 'count_operations',
653
+ dimensions: [
654
+ {
655
+ time_with_granularity: 'year-month'
656
+ }
657
+ ],
658
+ filters: [
659
+ {
660
+ entity_schema: 'opportunity'
661
+ }
662
+ ]
663
+ },
664
+ options: {
665
+ type: 'bar'
666
+ }
667
+ },
668
+ tags: ['revenue', 'marketing']
669
+ },
670
+ )
427
671
  ```
428
672
 
429
673
  <details>
@@ -431,20 +675,43 @@ const { data } = await client.listAvailableVisualisations()
431
675
 
432
676
  ```json
433
677
  {
434
- "results": [
678
+ "created_by": "10598",
679
+ "created_at": "1970-01-01T00:00:00.000Z",
680
+ "updated_by": "10598",
681
+ "updated_at": "1970-01-01T00:00:00.000Z",
682
+ "owner_org_id": "739224",
683
+ "owners": ["10598"],
684
+ "shared_with": [
435
685
  {
436
- "visualisation": "timechart",
437
- "title": "Time Series Visualisation",
438
- "description": "Visualise your metrics with respect to time series",
439
- "package_name": "@epilot360/highcharts"
686
+ "user_id": "10598",
687
+ "permission": "view"
688
+ }
689
+ ],
690
+ "org_access": "view",
691
+ "id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e",
692
+ "name": "Opportunities created by journeys every month",
693
+ "description": "Monthly count of opportunities grouped by source journey",
694
+ "visualisation_id": "timechart",
695
+ "visualisation_config": {
696
+ "query": {
697
+ "dataset": "entity_operations",
698
+ "measure": "count_operations",
699
+ "dimensions": [
700
+ {
701
+ "time_with_granularity": "year-month"
702
+ }
703
+ ],
704
+ "filters": [
705
+ {
706
+ "entity_schema": "opportunity"
707
+ }
708
+ ]
440
709
  },
441
- {
442
- "visualisation": "kpi",
443
- "title": "KPI Visualisation",
444
- "description": "Visualise your key performance indicators",
445
- "package_name": "@epilot360/kpi"
710
+ "options": {
711
+ "type": "bar"
446
712
  }
447
- ]
713
+ },
714
+ "tags": ["revenue", "marketing"]
448
715
  }
449
716
  ```
450
717
 
@@ -452,7 +719,388 @@ const { data } = await client.listAvailableVisualisations()
452
719
 
453
720
  ---
454
721
 
455
- ### `listAvailableExamples`
722
+ ### `listInsightTags`
723
+
724
+ List the distinct tags used by insights in the organization (for filter facets)
725
+
726
+ `GET /v1/dashboard/insights/tags`
727
+
728
+ ```ts
729
+ const { data } = await client.listInsightTags()
730
+ ```
731
+
732
+ <details>
733
+ <summary>Response</summary>
734
+
735
+ ```json
736
+ {
737
+ "results": ["string"]
738
+ }
739
+ ```
740
+
741
+ </details>
742
+
743
+ ---
744
+
745
+ ### `getInsight`
746
+
747
+ Get insight by ID
748
+
749
+ `GET /v1/dashboard/insights/{id}`
750
+
751
+ ```ts
752
+ const { data } = await client.getInsight({
753
+ id: '123e4567-e89b-12d3-a456-426614174000',
754
+ })
755
+ ```
756
+
757
+ <details>
758
+ <summary>Response</summary>
759
+
760
+ ```json
761
+ {
762
+ "created_by": "10598",
763
+ "created_at": "1970-01-01T00:00:00.000Z",
764
+ "updated_by": "10598",
765
+ "updated_at": "1970-01-01T00:00:00.000Z",
766
+ "owner_org_id": "739224",
767
+ "owners": ["10598"],
768
+ "shared_with": [
769
+ {
770
+ "user_id": "10598",
771
+ "permission": "view"
772
+ }
773
+ ],
774
+ "org_access": "view",
775
+ "id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e",
776
+ "name": "Opportunities created by journeys every month",
777
+ "description": "Monthly count of opportunities grouped by source journey",
778
+ "visualisation_id": "timechart",
779
+ "visualisation_config": {
780
+ "query": {
781
+ "dataset": "entity_operations",
782
+ "measure": "count_operations",
783
+ "dimensions": [
784
+ {
785
+ "time_with_granularity": "year-month"
786
+ }
787
+ ],
788
+ "filters": [
789
+ {
790
+ "entity_schema": "opportunity"
791
+ }
792
+ ]
793
+ },
794
+ "options": {
795
+ "type": "bar"
796
+ }
797
+ },
798
+ "tags": ["revenue", "marketing"]
799
+ }
800
+ ```
801
+
802
+ </details>
803
+
804
+ ---
805
+
806
+ ### `putInsight`
807
+
808
+ Replace an insight's content by ID. Sharing is managed via patchInsight.
809
+
810
+ `PUT /v1/dashboard/insights/{id}`
811
+
812
+ ```ts
813
+ const { data } = await client.putInsight(
814
+ {
815
+ id: '123e4567-e89b-12d3-a456-426614174000',
816
+ },
817
+ {
818
+ created_by: '10598',
819
+ created_at: '1970-01-01T00:00:00.000Z',
820
+ updated_by: '10598',
821
+ updated_at: '1970-01-01T00:00:00.000Z',
822
+ owner_org_id: '739224',
823
+ owners: ['10598'],
824
+ shared_with: [
825
+ {
826
+ user_id: '10598',
827
+ permission: 'view'
828
+ }
829
+ ],
830
+ org_access: 'view',
831
+ id: '8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e',
832
+ name: 'Opportunities created by journeys every month',
833
+ description: 'Monthly count of opportunities grouped by source journey',
834
+ visualisation_id: 'timechart',
835
+ visualisation_config: {
836
+ query: {
837
+ dataset: 'entity_operations',
838
+ measure: 'count_operations',
839
+ dimensions: [
840
+ {
841
+ time_with_granularity: 'year-month'
842
+ }
843
+ ],
844
+ filters: [
845
+ {
846
+ entity_schema: 'opportunity'
847
+ }
848
+ ]
849
+ },
850
+ options: {
851
+ type: 'bar'
852
+ }
853
+ },
854
+ tags: ['revenue', 'marketing']
855
+ },
856
+ )
857
+ ```
858
+
859
+ <details>
860
+ <summary>Response</summary>
861
+
862
+ ```json
863
+ {
864
+ "created_by": "10598",
865
+ "created_at": "1970-01-01T00:00:00.000Z",
866
+ "updated_by": "10598",
867
+ "updated_at": "1970-01-01T00:00:00.000Z",
868
+ "owner_org_id": "739224",
869
+ "owners": ["10598"],
870
+ "shared_with": [
871
+ {
872
+ "user_id": "10598",
873
+ "permission": "view"
874
+ }
875
+ ],
876
+ "org_access": "view",
877
+ "id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e",
878
+ "name": "Opportunities created by journeys every month",
879
+ "description": "Monthly count of opportunities grouped by source journey",
880
+ "visualisation_id": "timechart",
881
+ "visualisation_config": {
882
+ "query": {
883
+ "dataset": "entity_operations",
884
+ "measure": "count_operations",
885
+ "dimensions": [
886
+ {
887
+ "time_with_granularity": "year-month"
888
+ }
889
+ ],
890
+ "filters": [
891
+ {
892
+ "entity_schema": "opportunity"
893
+ }
894
+ ]
895
+ },
896
+ "options": {
897
+ "type": "bar"
898
+ }
899
+ },
900
+ "tags": ["revenue", "marketing"]
901
+ }
902
+ ```
903
+
904
+ </details>
905
+
906
+ ---
907
+
908
+ ### `patchInsight`
909
+
910
+ Partially update an insight by ID. Update content (name/description/visualisation/tags) and/or
911
+ manage sharing (owners, shared_with, org_access) — only owners may change sharing.
912
+ `owners` and `shared_w
913
+
914
+ `PATCH /v1/dashboard/insights/{id}`
915
+
916
+ ```ts
917
+ const { data } = await client.patchInsight(
918
+ {
919
+ id: '123e4567-e89b-12d3-a456-426614174000',
920
+ },
921
+ {
922
+ owners: ['string'],
923
+ shared_with: [
924
+ {
925
+ user_id: '10598',
926
+ permission: 'view'
927
+ }
928
+ ],
929
+ org_access: 'view',
930
+ name: 'string',
931
+ description: 'string',
932
+ visualisation_id: 'timechart',
933
+ visualisation_config: {
934
+ query: {
935
+ dataset: 'entity_operations',
936
+ measure: 'count_operations',
937
+ dimensions: [
938
+ {
939
+ time_with_granularity: 'year-month'
940
+ }
941
+ ],
942
+ filters: [
943
+ {
944
+ entity_schema: 'opportunity'
945
+ }
946
+ ]
947
+ },
948
+ options: {
949
+ type: 'bar'
950
+ }
951
+ },
952
+ tags: ['revenue', 'marketing']
953
+ },
954
+ )
955
+ ```
956
+
957
+ <details>
958
+ <summary>Response</summary>
959
+
960
+ ```json
961
+ {
962
+ "created_by": "10598",
963
+ "created_at": "1970-01-01T00:00:00.000Z",
964
+ "updated_by": "10598",
965
+ "updated_at": "1970-01-01T00:00:00.000Z",
966
+ "owner_org_id": "739224",
967
+ "owners": ["10598"],
968
+ "shared_with": [
969
+ {
970
+ "user_id": "10598",
971
+ "permission": "view"
972
+ }
973
+ ],
974
+ "org_access": "view",
975
+ "id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e",
976
+ "name": "Opportunities created by journeys every month",
977
+ "description": "Monthly count of opportunities grouped by source journey",
978
+ "visualisation_id": "timechart",
979
+ "visualisation_config": {
980
+ "query": {
981
+ "dataset": "entity_operations",
982
+ "measure": "count_operations",
983
+ "dimensions": [
984
+ {
985
+ "time_with_granularity": "year-month"
986
+ }
987
+ ],
988
+ "filters": [
989
+ {
990
+ "entity_schema": "opportunity"
991
+ }
992
+ ]
993
+ },
994
+ "options": {
995
+ "type": "bar"
996
+ }
997
+ },
998
+ "tags": ["revenue", "marketing"]
999
+ }
1000
+ ```
1001
+
1002
+ </details>
1003
+
1004
+ ---
1005
+
1006
+ ### `deleteInsight`
1007
+
1008
+ Delete an insight by ID. Only owners may delete.
1009
+
1010
+ `DELETE /v1/dashboard/insights/{id}`
1011
+
1012
+ ```ts
1013
+ const { data } = await client.deleteInsight({
1014
+ id: '123e4567-e89b-12d3-a456-426614174000',
1015
+ })
1016
+ ```
1017
+
1018
+ <details>
1019
+ <summary>Response</summary>
1020
+
1021
+ ```json
1022
+ {
1023
+ "created_by": "10598",
1024
+ "created_at": "1970-01-01T00:00:00.000Z",
1025
+ "updated_by": "10598",
1026
+ "updated_at": "1970-01-01T00:00:00.000Z",
1027
+ "owner_org_id": "739224",
1028
+ "owners": ["10598"],
1029
+ "shared_with": [
1030
+ {
1031
+ "user_id": "10598",
1032
+ "permission": "view"
1033
+ }
1034
+ ],
1035
+ "org_access": "view",
1036
+ "id": "8d2e1c7a-3b4f-4a2e-9c1d-2f3a4b5c6d7e",
1037
+ "name": "Opportunities created by journeys every month",
1038
+ "description": "Monthly count of opportunities grouped by source journey",
1039
+ "visualisation_id": "timechart",
1040
+ "visualisation_config": {
1041
+ "query": {
1042
+ "dataset": "entity_operations",
1043
+ "measure": "count_operations",
1044
+ "dimensions": [
1045
+ {
1046
+ "time_with_granularity": "year-month"
1047
+ }
1048
+ ],
1049
+ "filters": [
1050
+ {
1051
+ "entity_schema": "opportunity"
1052
+ }
1053
+ ]
1054
+ },
1055
+ "options": {
1056
+ "type": "bar"
1057
+ }
1058
+ },
1059
+ "tags": ["revenue", "marketing"]
1060
+ }
1061
+ ```
1062
+
1063
+ </details>
1064
+
1065
+ ---
1066
+
1067
+ ### `listAvailableVisualisations`
1068
+
1069
+ Returns list of available Visualisations to configure new dashboard tiles
1070
+
1071
+ `GET /v1/dashboard/visualisations`
1072
+
1073
+ ```ts
1074
+ const { data } = await client.listAvailableVisualisations()
1075
+ ```
1076
+
1077
+ <details>
1078
+ <summary>Response</summary>
1079
+
1080
+ ```json
1081
+ {
1082
+ "results": [
1083
+ {
1084
+ "visualisation": "timechart",
1085
+ "title": "Time Series Visualisation",
1086
+ "description": "Visualise your metrics with respect to time series",
1087
+ "package_name": "@epilot360/highcharts"
1088
+ },
1089
+ {
1090
+ "visualisation": "kpi",
1091
+ "title": "KPI Visualisation",
1092
+ "description": "Visualise your key performance indicators",
1093
+ "package_name": "@epilot360/kpi"
1094
+ }
1095
+ ]
1096
+ }
1097
+ ```
1098
+
1099
+ </details>
1100
+
1101
+ ---
1102
+
1103
+ ### `listAvailableExamples`
456
1104
 
457
1105
  Returns list of available exampless for visualisations to configure new dashboard tiles
458
1106
 
@@ -507,22 +1155,38 @@ type DashboardID = string // uuid
507
1155
 
508
1156
  ### `Dashboard`
509
1157
 
510
- Adashboard configuration with tiles
1158
+ A dashboard configuration. A dashboard is a canvas whose tiles arrange and
1159
+ position insights (saved charts). Tiles may reference an insight by `insight_id`
1160
+ or, for backwards compatibility, embed a visualisation inline.
1161
+
511
1162
 
512
1163
  ```ts
513
1164
  type Dashboard = {
1165
+ created_by?: string
1166
+ created_at?: string // date-time
1167
+ updated_by?: string
1168
+ updated_at?: string // date-time
1169
+ owner_org_id?: string
1170
+ owners?: string[]
1171
+ shared_with?: Array<{
1172
+ user_id: string
1173
+ permission: "view" | "edit"
1174
+ }>
1175
+ org_access?: "view" | "edit" | null
514
1176
  id?: string // uuid
515
1177
  title: string
516
1178
  tiles: Array<{
517
1179
  id?: string // uuid
518
1180
  coordinates?: object
519
1181
  title?: string
1182
+ insight_id?: string // uuid
520
1183
  visualisation_id?: "kpi" | "funnel" | "toplist" | "timechart" | "pie" | "bar" | "entity_list" | "markdown" | "news_feed" | "workflow"
521
1184
  visualisation_config?: {
522
1185
  query?: { ... }
523
1186
  options?: { ... }
524
1187
  }
525
1188
  }>
1189
+ favorited?: boolean
526
1190
  }
527
1191
  ```
528
1192
 
@@ -534,13 +1198,213 @@ Unique identifier for a tile in a dashboard
534
1198
  type DashboardTileID = string // uuid
535
1199
  ```
536
1200
 
1201
+ ### `SharePermission`
1202
+
1203
+ Permission level granted to a user (or the whole organization) on a shared resource.
1204
+ `view` allows read-only access; `edit` additionally allows updating the content.
1205
+ Full control (delete and managing sharing) is reserved for owners.
1206
+
1207
+
1208
+ ```ts
1209
+ type SharePermission = "view" | "edit"
1210
+ ```
1211
+
1212
+ ### `ShareGrant`
1213
+
1214
+ Grants a single user a permission level on a resource
1215
+
1216
+ ```ts
1217
+ type ShareGrant = {
1218
+ user_id: string
1219
+ permission: "view" | "edit"
1220
+ }
1221
+ ```
1222
+
1223
+ ### `OrgAccess`
1224
+
1225
+ Optional organization-wide grant. When set, every user in the resource's organization
1226
+ is granted this permission level. `null` (or omitted) means the resource is not shared
1227
+ org-wide.
1228
+
1229
+
1230
+ ```ts
1231
+ type OrgAccess = "view" | "edit" | null
1232
+ ```
1233
+
1234
+ ### `AccessControl`
1235
+
1236
+ Ownership and sharing metadata common to dashboards and insights. `created_*`/`updated_*`
1237
+ fields are managed by the server. `owners`, `shared_with` and `org_access` describe who
1238
+ may access the resource. New resources are private to their creator until shared.
1239
+
1240
+
1241
+ ```ts
1242
+ type AccessControl = {
1243
+ created_by?: string
1244
+ created_at?: string // date-time
1245
+ updated_by?: string
1246
+ updated_at?: string // date-time
1247
+ owner_org_id?: string
1248
+ owners?: string[]
1249
+ shared_with?: Array<{
1250
+ user_id: string
1251
+ permission: "view" | "edit"
1252
+ }>
1253
+ org_access?: "view" | "edit" | null
1254
+ }
1255
+ ```
1256
+
1257
+ ### `AccessControlUpdate`
1258
+
1259
+ Sharing fields that can be mutated via PATCH (owners only). `owners` and `shared_with` are
1260
+ full replacements of their arrays, not merges — omit a field to leave it unchanged.
1261
+
1262
+
1263
+ ```ts
1264
+ type AccessControlUpdate = {
1265
+ owners?: string[]
1266
+ shared_with?: Array<{
1267
+ user_id: string
1268
+ permission: "view" | "edit"
1269
+ }>
1270
+ org_access?: "view" | "edit" | null
1271
+ }
1272
+ ```
1273
+
1274
+ ### `DashboardPatch`
1275
+
1276
+ Fields that can be partially updated on a dashboard
1277
+
1278
+ ```ts
1279
+ type DashboardPatch = {
1280
+ owners?: string[]
1281
+ shared_with?: Array<{
1282
+ user_id: string
1283
+ permission: "view" | "edit"
1284
+ }>
1285
+ org_access?: "view" | "edit" | null
1286
+ title?: string
1287
+ tiles?: Array<{
1288
+ id?: string // uuid
1289
+ coordinates?: object
1290
+ title?: string
1291
+ insight_id?: string // uuid
1292
+ visualisation_id?: "kpi" | "funnel" | "toplist" | "timechart" | "pie" | "bar" | "entity_list" | "markdown" | "news_feed" | "workflow"
1293
+ visualisation_config?: {
1294
+ query?: { ... }
1295
+ options?: { ... }
1296
+ }
1297
+ }>
1298
+ }
1299
+ ```
1300
+
1301
+ ### `InsightID`
1302
+
1303
+ Unique identifier for an insight (a saved chart / visualisation)
1304
+
1305
+ ```ts
1306
+ type InsightID = string // uuid
1307
+ ```
1308
+
1309
+ ### `Insight`
1310
+
1311
+ An insight is a saved, reusable chart definition (a visualisation plus its query/options).
1312
+ Insights exist independently of dashboards: they can be created, shared and edited on their
1313
+ own, and referenced by one or more dashboard tiles via `insight_id`.
1314
+
1315
+
1316
+ ```ts
1317
+ type Insight = {
1318
+ created_by?: string
1319
+ created_at?: string // date-time
1320
+ updated_by?: string
1321
+ updated_at?: string // date-time
1322
+ owner_org_id?: string
1323
+ owners?: string[]
1324
+ shared_with?: Array<{
1325
+ user_id: string
1326
+ permission: "view" | "edit"
1327
+ }>
1328
+ org_access?: "view" | "edit" | null
1329
+ id?: string // uuid
1330
+ name: string
1331
+ description?: string
1332
+ visualisation_id: "kpi" | "funnel" | "toplist" | "timechart" | "pie" | "bar" | "entity_list" | "markdown" | "news_feed" | "workflow"
1333
+ visualisation_config?: {
1334
+ query?: {
1335
+ dataset?: { ... }
1336
+ measure?: { ... }
1337
+ dimensions?: { ... }
1338
+ filters?: { ... }
1339
+ }
1340
+ options?: Record<string, unknown>
1341
+ }
1342
+ tags?: string[]
1343
+ }
1344
+ ```
1345
+
1346
+ ### `InsightPatch`
1347
+
1348
+ Fields that can be partially updated on an insight
1349
+
1350
+ ```ts
1351
+ type InsightPatch = {
1352
+ owners?: string[]
1353
+ shared_with?: Array<{
1354
+ user_id: string
1355
+ permission: "view" | "edit"
1356
+ }>
1357
+ org_access?: "view" | "edit" | null
1358
+ name?: string
1359
+ description?: string
1360
+ visualisation_id?: "kpi" | "funnel" | "toplist" | "timechart" | "pie" | "bar" | "entity_list" | "markdown" | "news_feed" | "workflow"
1361
+ visualisation_config?: {
1362
+ query?: {
1363
+ dataset?: { ... }
1364
+ measure?: { ... }
1365
+ dimensions?: { ... }
1366
+ filters?: { ... }
1367
+ }
1368
+ options?: Record<string, unknown>
1369
+ }
1370
+ tags?: string[]
1371
+ }
1372
+ ```
1373
+
1374
+ ### `Tags`
1375
+
1376
+ Free-form labels for grouping and filtering insights
1377
+
1378
+ ```ts
1379
+ type Tags = string[]
1380
+ ```
1381
+
1382
+ ### `Pagination`
1383
+
1384
+ Offset-based pagination metadata for list responses
1385
+
1386
+ ```ts
1387
+ type Pagination = {
1388
+ total: number
1389
+ limit: number
1390
+ offset: number
1391
+ has_more: boolean
1392
+ }
1393
+ ```
1394
+
537
1395
  ### `DashboardTile`
538
1396
 
1397
+ A positioned tile on a dashboard canvas. A tile references a saved insight via
1398
+ `insight_id`. Inline `visualisation_id`/`visualisation_config` remain supported for
1399
+ backwards compatibility (ad-hoc tiles that are not backed by a shared insight).
1400
+
1401
+
539
1402
  ```ts
540
1403
  type DashboardTile = {
541
1404
  id?: string // uuid
542
1405
  coordinates?: object
543
1406
  title?: string
1407
+ insight_id?: string // uuid
544
1408
  visualisation_id?: "kpi" | "funnel" | "toplist" | "timechart" | "pie" | "bar" | "entity_list" | "markdown" | "news_feed" | "workflow"
545
1409
  visualisation_config?: {
546
1410
  query?: {