@alvera-ai/platform-sdk 0.7.3 → 0.9.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.
@@ -22,29 +22,37 @@ export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends
22
22
  };
23
23
 
24
24
  /**
25
- * Resolve a short URL token to a page
26
- *
27
- * Given a connected app slug and a Puid short URL token, resolves the token to
28
- * the pre-stored route path and MDM subject ID. The Cloudflare app calls this
29
- * endpoint when a customer clicks a short URL, forwarding the original client
30
- * headers (user-agent, IP, country) in the request body.
31
- *
32
- * When the page token is linked to a message (via workflow action execution),
33
- * the regulated message details (raw body, channel, status) are included in
34
- * the response.
25
+ * List tools
35
26
  *
36
- * **Requires X-API-Key authentication.**
27
+ * Returns a paginated list of tools for the authenticated tenant.
28
+ */
29
+ export const platformApiToolControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiToolControllerIndexResponses, PlatformApiToolControllerIndexErrors, ThrowOnError>({
30
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
31
+ requestValidator: async (data: unknown) => await v.parseAsync(v.object({
32
+ body: v.optional(v.never()),
33
+ path: vPlatformApiToolControllerIndexPath,
34
+ query: v.optional(vPlatformApiToolControllerIndexQuery)
35
+ }), data),
36
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerIndexResponse, data),
37
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
38
+ url: '/api/v1/tenants/{tenant_slug}/tools',
39
+ ...options
40
+ });
41
+
42
+ /**
43
+ * Create a tool
37
44
  *
45
+ * Creates a new tool for the authenticated tenant.
38
46
  */
39
- export const platformApiConnectedAppControllerResolvePage = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppControllerResolvePageData, ThrowOnError>) => (options.client ?? client).post<PlatformApiConnectedAppControllerResolvePageResponses, PlatformApiConnectedAppControllerResolvePageErrors, ThrowOnError>({
47
+ export const platformApiToolControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiToolControllerCreateResponses, PlatformApiToolControllerCreateErrors, ThrowOnError>({
40
48
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
41
- body: vPlatformApiConnectedAppControllerResolvePageBody,
42
- path: vPlatformApiConnectedAppControllerResolvePagePath,
49
+ body: v.optional(vPlatformApiToolControllerCreateBody),
50
+ path: vPlatformApiToolControllerCreatePath,
43
51
  query: v.optional(v.never())
44
52
  }), data),
45
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppControllerResolvePageResponse, data),
53
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerCreateResponse, data),
46
54
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
47
- url: '/api/v1/tenants/{tenant_slug}/connected-apps/{slug}/resolve-page',
55
+ url: '/api/v1/tenants/{tenant_slug}/tools',
48
56
  ...options,
49
57
  headers: {
50
58
  'Content-Type': 'application/json',
@@ -53,60 +61,53 @@ export const platformApiConnectedAppControllerResolvePage = <ThrowOnError extend
53
61
  });
54
62
 
55
63
  /**
56
- * Run a contract against a payload (sandbox)
64
+ * Delete a data activation client
57
65
  *
58
- * Runs the contract's `filter transform mdm_input` pipeline against the supplied JSON row. Stateless no DB writes. Use for template authoring/testing.
66
+ * Deletes a DAC. Returns 422 if the DAC is a platform default (is_default=true). Returns 409 if referenced by other resources.
59
67
  */
60
- export const platformApiInteroperabilityContractControllerRun = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerRunData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInteroperabilityContractControllerRunResponses, PlatformApiInteroperabilityContractControllerRunErrors, ThrowOnError>({
61
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
68
+ export const platformApiDataActivationClientControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiDataActivationClientControllerDeleteResponses, PlatformApiDataActivationClientControllerDeleteErrors, ThrowOnError>({
62
69
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
63
- body: vPlatformApiInteroperabilityContractControllerRunBody,
64
- path: vPlatformApiInteroperabilityContractControllerRunPath,
65
- query: v.optional(vPlatformApiInteroperabilityContractControllerRunQuery)
70
+ body: v.optional(v.never()),
71
+ path: vPlatformApiDataActivationClientControllerDeletePath,
72
+ query: v.optional(v.never())
66
73
  }), data),
67
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInteroperabilityContractControllerRunResponse, data),
74
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerDeleteResponse, data),
68
75
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
69
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{slug}/run',
70
- ...options,
71
- headers: {
72
- 'Content-Type': 'application/json',
73
- ...options.headers
74
- }
76
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}',
77
+ ...options
75
78
  });
76
79
 
77
80
  /**
78
- * List action status updaters
81
+ * Get a data activation client
79
82
  *
80
- * Returns a paginated list of action status updaters for the authenticated tenant.
83
+ * Returns a single DAC by datalake-scoped slug.
81
84
  */
82
- export const platformApiActionStatusUpdaterControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiActionStatusUpdaterControllerIndexResponses, PlatformApiActionStatusUpdaterControllerIndexErrors, ThrowOnError>({
83
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
85
+ export const platformApiDataActivationClientControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerShowResponses, PlatformApiDataActivationClientControllerShowErrors, ThrowOnError>({
84
86
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
85
87
  body: v.optional(v.never()),
86
- path: vPlatformApiActionStatusUpdaterControllerIndexPath,
87
- query: v.optional(vPlatformApiActionStatusUpdaterControllerIndexQuery)
88
+ path: vPlatformApiDataActivationClientControllerShowPath,
89
+ query: v.optional(v.never())
88
90
  }), data),
89
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiActionStatusUpdaterControllerIndexResponse, data),
91
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerShowResponse, data),
90
92
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
91
- url: '/api/v1/tenants/{tenant_slug}/action-status-updaters',
93
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}',
92
94
  ...options
93
95
  });
94
96
 
95
97
  /**
96
- * Create an action status updater
98
+ * Replace a data activation client
97
99
  *
98
- * Creates a new action status updater for the authenticated tenant.
100
+ * Replaces a DAC with the full resource body. PUT semantics — all required fields must be present. `slug` is immutable.
99
101
  */
100
- export const platformApiActionStatusUpdaterControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiActionStatusUpdaterControllerCreateResponses, PlatformApiActionStatusUpdaterControllerCreateErrors, ThrowOnError>({
101
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
102
+ export const platformApiDataActivationClientControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiDataActivationClientControllerUpdateResponses, PlatformApiDataActivationClientControllerUpdateErrors, ThrowOnError>({
102
103
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
103
- body: v.optional(vPlatformApiActionStatusUpdaterControllerCreateBody),
104
- path: vPlatformApiActionStatusUpdaterControllerCreatePath,
105
- query: v.optional(vPlatformApiActionStatusUpdaterControllerCreateQuery)
104
+ body: v.optional(vPlatformApiDataActivationClientControllerUpdateBody),
105
+ path: vPlatformApiDataActivationClientControllerUpdatePath,
106
+ query: v.optional(v.never())
106
107
  }), data),
107
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiActionStatusUpdaterControllerCreateResponse, data),
108
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerUpdateResponse, data),
108
109
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
109
- url: '/api/v1/tenants/{tenant_slug}/action-status-updaters',
110
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}',
110
111
  ...options,
111
112
  headers: {
112
113
  'Content-Type': 'application/json',
@@ -115,118 +116,97 @@ export const platformApiActionStatusUpdaterControllerCreate = <ThrowOnError exte
115
116
  });
116
117
 
117
118
  /**
118
- * List batch run logs
119
+ * Enqueue datalake migrations
120
+ *
121
+ * Enqueues a `DatalakeMigrationWorker` Oban job that brings the datalake's
122
+ * per-tenant database to the current schema version. Required after
123
+ * `POST /datalakes`, which only persists the metadata row — it does NOT
124
+ * run migrations against the per-tenant DB. Without this step, every
125
+ * downstream resource that touches per-datalake tables
126
+ * (`data_activation_logs`, MDM tables, dataset tables) will fail with
127
+ * `relation … does not exist`.
128
+ *
129
+ * Asynchronous: returns 202 Accepted as soon as the job is enqueued.
130
+ * Callers poll `GET /datalakes/:id` and watch for `status: :ready`.
131
+ * Idempotent at the job level — re-enqueueing on a migrated datalake
132
+ * is a no-op once the worker completes.
133
+ *
134
+ * The LiveView "Migrate Datalake" button calls the same migrator
135
+ * synchronously inside the LiveView process.
136
+ *
137
+ * Requires a tenant-scoped Bearer with membership role `admin`.
119
138
  *
120
- * Returns a paginated list of batch-level workflow run logs.
121
139
  */
122
- export const platformApiAgenticWorkflowOperationsControllerBatchLogsIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexErrors, ThrowOnError>({
123
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
140
+ export const platformApiDatalakeControllerMigrate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerMigrateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerMigrateResponses, PlatformApiDatalakeControllerMigrateErrors, ThrowOnError>({
124
141
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
125
142
  body: v.optional(v.never()),
126
- path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexPath,
127
- query: v.optional(vPlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexQuery)
143
+ path: vPlatformApiDatalakeControllerMigratePath,
144
+ query: v.optional(v.never())
128
145
  }), data),
129
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponse, data),
146
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerMigrateResponse, data),
130
147
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
131
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs',
148
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/migrate',
132
149
  ...options
133
150
  });
134
151
 
135
152
  /**
136
- * Create and execute a SQL search for a dataset
153
+ * Verify current session
137
154
  *
138
- * Creates a `UserSearch` row, runs `INSERT INTO search_results SELECT ... WHERE <search_query>` against the regulated schema, and returns the `UserSearch` resource (including `status`, `results_count`, and `error_message`). The session's `data_access_mode` controls which schema is queried.
139
- */
140
- export const platformApiDatasetControllerCreateUserSearch = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerCreateUserSearchData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatasetControllerCreateUserSearchResponses, PlatformApiDatasetControllerCreateUserSearchErrors, ThrowOnError>({
141
- requestValidator: async (data: unknown) => await v.parseAsync(v.object({
142
- body: v.optional(vPlatformApiDatasetControllerCreateUserSearchBody),
143
- path: vPlatformApiDatasetControllerCreateUserSearchPath,
144
- query: v.optional(vPlatformApiDatasetControllerCreateUserSearchQuery)
145
- }), data),
146
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatasetControllerCreateUserSearchResponse, data),
147
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
148
- url: '/api/v1/datasets/{dataset}/user-searches',
149
- ...options,
150
- headers: {
151
- 'Content-Type': 'application/json',
152
- ...options.headers
153
- }
154
- });
155
-
156
- /**
157
- * Page results from a UserSearch — outer SQL chunk + inner resource Flop
155
+ * Returns the current session's tenant, role, and identity information.
158
156
  *
159
- * Two-tier pagination at two layers:
157
+ * Works with both authentication methods:
158
+ * - `X-API-Key` header (M2M)
159
+ * - `Authorization: Bearer <session_token>` (human sessions)
160
160
  *
161
- * * **Outer** `outer_pagination[page]` / `outer_pagination[page_size]`
162
- * (defaults `1` / `1000`, max `1000`) pages cached IDs from
163
- * `search_results`. The cap is dictated by Postgres' `WHERE id IN (^ids)`
164
- * plan — past ~1k parameters the planner regresses.
165
- * * **Inner** — `inner_search[page]`, `inner_search[page_size]` (defaults
166
- * `1` / `20`), `inner_search[order_direction]` (sort on the schema's
167
- * `:global_search` compound), `inner_search[global_search]` (single
168
- * ILIKE-OR text-search knob).
161
+ * Use this as a "who am I" endpoint to confirm credentials are valid and
162
+ * inspect the resolved tenant, role, and identity.
169
163
  *
170
- * Response carries both metas under `meta.sql` and `meta.flop`. A caller
171
- * that only drives the inner page sees `meta.sql.has_next_page=true` when
172
- * the SQL search isn't exhausted; advancing `outer_pagination[page]`
173
- * fetches the next chunk.
164
+ * **Requires authentication** (X-API-Key or Bearer token).
174
165
  *
175
166
  */
176
- export const platformApiDatasetControllerSearch = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerSearchData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatasetControllerSearchResponses, PlatformApiDatasetControllerSearchErrors, ThrowOnError>({
167
+ export const platformApiSessionControllerVerify = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiSessionControllerVerifyData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiSessionControllerVerifyResponses, PlatformApiSessionControllerVerifyErrors, ThrowOnError>({
177
168
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
178
169
  body: v.optional(v.never()),
179
- path: vPlatformApiDatasetControllerSearchPath,
180
- query: v.optional(vPlatformApiDatasetControllerSearchQuery)
170
+ path: v.optional(v.never()),
171
+ query: v.optional(v.never())
181
172
  }), data),
182
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatasetControllerSearchResponse, data),
183
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
184
- url: '/api/v1/datasets/{dataset}/search',
173
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiSessionControllerVerifyResponse, data),
174
+ security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],
175
+ url: '/api/v1/sessions/verify',
185
176
  ...options
186
177
  });
187
178
 
188
179
  /**
189
- * List workflow execution logs
180
+ * Download execution context
190
181
  *
191
- * Returns a paginated list of per-event execution logs for a workflow.
182
+ * Returns a presigned URL for downloading the execution context JSON from R2.
192
183
  */
193
- export const platformApiAgenticWorkflowOperationsControllerWorkflowLogsIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexErrors, ThrowOnError>({
194
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
184
+ export const platformApiAgenticWorkflowOperationsControllerWorkflowLogDownload = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadErrors, ThrowOnError>({
195
185
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
196
186
  body: v.optional(v.never()),
197
- path: vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexPath,
198
- query: v.optional(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexQuery)
187
+ path: vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadPath,
188
+ query: v.optional(v.never())
199
189
  }), data),
200
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponse, data),
190
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponse, data),
201
191
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
202
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/workflow-logs',
192
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/workflow-logs/{id}/download',
203
193
  ...options
204
194
  });
205
195
 
206
196
  /**
207
- * Invite a user to the tenant
208
- *
209
- * Creates a `tenant_admin`-issued invitation. Mirrors the LiveView flow at
210
- * `/app/team` → "Invite new member". Wraps `Tenants.send_tenant_invitation/3`
211
- * verbatim, including the email send.
212
- *
213
- * The `role` enum is **membership-level** (`member`, `researcher`, `admin`),
214
- * NOT the platform-wide `User.role` enum — privilege-escalation safe by
215
- * construction.
216
- *
217
- * Requires a tenant-scoped Bearer with membership role `:admin`
218
- * (`current_role.name == "tenant_admin"`).
197
+ * Create datalake download link
219
198
  *
199
+ * Returns a presigned GET URL for an object stored in one of the datalake's cloud storage buckets (regulated or unregulated). Typical use: read a `DACRawLogFile.object_key` (`s3://bucket/key`) off a data-activation log row, split it into `bucket` and `key`, then POST here to obtain a short-lived download URL.
220
200
  */
221
- export const platformApiInvitationControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInvitationControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInvitationControllerCreateResponses, PlatformApiInvitationControllerCreateErrors, ThrowOnError>({
201
+ export const platformApiDatalakeControllerCreateDownloadLink = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerCreateDownloadLinkData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerCreateDownloadLinkResponses, PlatformApiDatalakeControllerCreateDownloadLinkErrors, ThrowOnError>({
222
202
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
223
- body: vPlatformApiInvitationControllerCreateBody,
224
- path: vPlatformApiInvitationControllerCreatePath,
203
+ body: vPlatformApiDatalakeControllerCreateDownloadLinkBody,
204
+ path: vPlatformApiDatalakeControllerCreateDownloadLinkPath,
225
205
  query: v.optional(v.never())
226
206
  }), data),
227
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInvitationControllerCreateResponse, data),
228
- security: [{ scheme: 'bearer', type: 'http' }],
229
- url: '/api/v1/tenants/{tenant_slug}/invitations',
207
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerCreateDownloadLinkResponse, data),
208
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
209
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link',
230
210
  ...options,
231
211
  headers: {
232
212
  'Content-Type': 'application/json',
@@ -235,36 +215,37 @@ export const platformApiInvitationControllerCreate = <ThrowOnError extends boole
235
215
  });
236
216
 
237
217
  /**
238
- * Get a connected app
218
+ * Get a datalake
239
219
  *
240
- * Returns a single connected app by ID.
220
+ * Returns a single datalake by ID (non-sensitive metadata only).
241
221
  */
242
- export const platformApiConnectedAppMgmtControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiConnectedAppMgmtControllerShowResponses, PlatformApiConnectedAppMgmtControllerShowErrors, ThrowOnError>({
222
+ export const platformApiDatalakeControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerShowResponses, PlatformApiDatalakeControllerShowErrors, ThrowOnError>({
223
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
243
224
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
244
225
  body: v.optional(v.never()),
245
- path: vPlatformApiConnectedAppMgmtControllerShowPath,
246
- query: v.optional(v.never())
226
+ path: vPlatformApiDatalakeControllerShowPath,
227
+ query: v.optional(vPlatformApiDatalakeControllerShowQuery)
247
228
  }), data),
248
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerShowResponse, data),
229
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerShowResponse, data),
249
230
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
250
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps/{id}',
231
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{id}',
251
232
  ...options
252
233
  });
253
234
 
254
235
  /**
255
- * Replace a connected app
236
+ * Test invoke a tool
256
237
  *
257
- * Replaces a connected app with the full resource body. PUT semantics all required fields must be present.
238
+ * Manually invokes a tool with caller-supplied parameters — the API equivalent of the 'Try It' panel in the tool form. Records a `ManualToolInvocation` for audit and returns the provider response (or error). Does not access tenant datasets, so no capability ceiling check is applied.
258
239
  */
259
- export const platformApiConnectedAppMgmtControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiConnectedAppMgmtControllerUpdateResponses, PlatformApiConnectedAppMgmtControllerUpdateErrors, ThrowOnError>({
240
+ export const platformApiToolControllerTestInvocation = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerTestInvocationData, ThrowOnError>) => (options.client ?? client).post<PlatformApiToolControllerTestInvocationResponses, PlatformApiToolControllerTestInvocationErrors, ThrowOnError>({
260
241
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
261
- body: v.optional(vPlatformApiConnectedAppMgmtControllerUpdateBody),
262
- path: vPlatformApiConnectedAppMgmtControllerUpdatePath,
242
+ body: v.optional(vPlatformApiToolControllerTestInvocationBody),
243
+ path: vPlatformApiToolControllerTestInvocationPath,
263
244
  query: v.optional(v.never())
264
245
  }), data),
265
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerUpdateResponse, data),
246
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerTestInvocationResponse, data),
266
247
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
267
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps/{id}',
248
+ url: '/api/v1/tenants/{tenant_slug}/tools/{id}/test-invocation',
268
249
  ...options,
269
250
  headers: {
270
251
  'Content-Type': 'application/json',
@@ -273,60 +254,72 @@ export const platformApiConnectedAppMgmtControllerUpdate = <ThrowOnError extends
273
254
  });
274
255
 
275
256
  /**
276
- * Verify subject identity
277
- *
278
- * Verify a subject's identity against their master record using fuzzy matching.
257
+ * Get schema metadata for a specific dataset type
279
258
  *
280
- * Supports verification by:
281
- * - **family_name** — Jaro distance >= 0.85
282
- * - **given_name** Jaro distance >= 0.80
283
- * - **birth_date** Fuzzy component matching >= 0.80
284
- * - **identifiers** — Exact (system, value) match
259
+ * Returns a markdown document describing the fields available on a dataset type. For standard datasets (patient, appointment, etc.) returns the schema moduledoc. For generic tables, pass the generic_table_id query parameter.
260
+ */
261
+ export const platformApiDatasetControllerDatasetMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerDatasetMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatasetControllerDatasetMetadataResponses, PlatformApiDatasetControllerDatasetMetadataErrors, ThrowOnError>({
262
+ requestValidator: async (data: unknown) => await v.parseAsync(v.object({
263
+ body: v.optional(v.never()),
264
+ path: vPlatformApiDatasetControllerDatasetMetadataPath,
265
+ query: v.optional(vPlatformApiDatasetControllerDatasetMetadataQuery)
266
+ }), data),
267
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatasetControllerDatasetMetadataResponse, data),
268
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
269
+ url: '/api/v1/datasets/{dataset_type}/metadata',
270
+ ...options
271
+ });
272
+
273
+ /**
274
+ * List accessible tenants
285
275
  *
286
- * At least one verification field is required.
276
+ * Returns a paginated list of tenants accessible to the authenticated identity.
287
277
  *
288
- * **Requires X-API-Key authentication.**
278
+ * - **Bearer token**: returns all tenants the user has membership in.
279
+ * - **X-API-Key**: returns the single tenant the API key is scoped to.
289
280
  *
290
281
  */
291
- export const platformApiMdmControllerVerify = <ThrowOnError extends boolean = false>(options: Options<PlatformApiMdmControllerVerifyData, ThrowOnError>) => (options.client ?? client).post<PlatformApiMdmControllerVerifyResponses, PlatformApiMdmControllerVerifyErrors, ThrowOnError>({
282
+ export const platformApiTenantControllerIndex = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiTenantControllerIndexData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiTenantControllerIndexResponses, PlatformApiTenantControllerIndexErrors, ThrowOnError>({
283
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
292
284
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
293
- body: vPlatformApiMdmControllerVerifyBody,
294
- path: vPlatformApiMdmControllerVerifyPath,
295
- query: v.optional(v.never())
285
+ body: v.optional(v.never()),
286
+ path: v.optional(v.never()),
287
+ query: v.optional(vPlatformApiTenantControllerIndexQuery)
296
288
  }), data),
297
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiMdmControllerVerifyResponse, data),
298
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
299
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/mdm/verify',
300
- ...options,
301
- headers: {
302
- 'Content-Type': 'application/json',
303
- ...options.headers
304
- }
289
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiTenantControllerIndexResponse, data),
290
+ security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],
291
+ url: '/api/v1/tenants',
292
+ ...options
305
293
  });
306
294
 
307
295
  /**
308
- * Sign up a new user
296
+ * Create a tenant
309
297
  *
310
- * Register a new user account. Mirrors the `/auth/register` LiveView form
311
- * submission shape — wraps `Accounts.register_user/2` verbatim with no
312
- * business-logic divergence.
298
+ * Creates a new tenant and an `:admin` membership for the authenticated user.
299
+ * Wraps `Platform.Tenants.create_tenant/3` verbatim same primitive that
300
+ * backs the `/app/tenants/new` LiveView.
313
301
  *
314
- * The created user is **unconfirmed** and has **no tenant memberships**. To
315
- * obtain a Bearer token, the user must first be confirmed (via the email
316
- * confirmation flow in production, or via `PUT /api/v1/admin/users/:id/confirm`
317
- * in test bootstrap), then exchange credentials at `POST /api/v1/sessions`.
302
+ * On success returns a regular `SessionResponse` carrying a freshly-minted
303
+ * **tenant-scoped Bearer** (`session_token`), the new tenant, and the
304
+ * membership role. Callers swap their tenant-less Bearer for this token
305
+ * and proceed with tenant-scoped work no second sign-in round-trip.
318
306
  *
319
- * No authentication required this endpoint is the entry point for new users.
307
+ * The user must be confirmed (`confirmed_at IS NOT NULL`); unconfirmed
308
+ * callers receive 403. Duplicate tenant names (slug collision) return 422.
309
+ *
310
+ * Requires `Authorization: Bearer <token>` (X-API-Key cannot create tenants —
311
+ * it carries no platform-user identity to bind the membership to).
320
312
  *
321
313
  */
322
- export const platformApiAuthControllerSignUp = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAuthControllerSignUpData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAuthControllerSignUpResponses, PlatformApiAuthControllerSignUpErrors, ThrowOnError>({
314
+ export const platformApiTenantControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiTenantControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiTenantControllerCreateResponses, PlatformApiTenantControllerCreateErrors, ThrowOnError>({
323
315
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
324
- body: vPlatformApiAuthControllerSignUpBody,
316
+ body: vPlatformApiTenantControllerCreateBody,
325
317
  path: v.optional(v.never()),
326
318
  query: v.optional(v.never())
327
319
  }), data),
328
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAuthControllerSignUpResponse, data),
329
- url: '/api/v1/auth/sign-up',
320
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiTenantControllerCreateResponse, data),
321
+ security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],
322
+ url: '/api/v1/tenants',
330
323
  ...options,
331
324
  headers: {
332
325
  'Content-Type': 'application/json',
@@ -335,37 +328,37 @@ export const platformApiAuthControllerSignUp = <ThrowOnError extends boolean = f
335
328
  });
336
329
 
337
330
  /**
338
- * List data activation clients
331
+ * List generic tables
339
332
  *
340
- * Returns a paginated list of DACs for the datalake in the path.
333
+ * Returns a paginated list of generic tables for the datalake (custom tables + system tables for the data domain).
341
334
  */
342
- export const platformApiDataActivationClientControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerIndexResponses, PlatformApiDataActivationClientControllerIndexErrors, ThrowOnError>({
335
+ export const platformApiGenericTableControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiGenericTableControllerIndexResponses, PlatformApiGenericTableControllerIndexErrors, ThrowOnError>({
343
336
  querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
344
337
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
345
338
  body: v.optional(v.never()),
346
- path: vPlatformApiDataActivationClientControllerIndexPath,
347
- query: v.optional(vPlatformApiDataActivationClientControllerIndexQuery)
339
+ path: vPlatformApiGenericTableControllerIndexPath,
340
+ query: v.optional(vPlatformApiGenericTableControllerIndexQuery)
348
341
  }), data),
349
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerIndexResponse, data),
342
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiGenericTableControllerIndexResponse, data),
350
343
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
351
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients',
344
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables',
352
345
  ...options
353
346
  });
354
347
 
355
348
  /**
356
- * Create a data activation client
349
+ * Create a generic table
357
350
  *
358
- * Creates a new DAC. `slug` is auto-generated from `name`. `tool_call` is a polymorphic object whose shape depends on the `tool_call_type` discriminator — see `tool_call_type` enum for valid variants (RESTCall, SQLQueryCall, SFTPCall, SharePointExcelCall, AWSLambdaCall, ManualUploadCall, S3Call).
351
+ * Creates a new custom generic table within the datalake.
359
352
  */
360
- export const platformApiDataActivationClientControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerCreateResponses, PlatformApiDataActivationClientControllerCreateErrors, ThrowOnError>({
353
+ export const platformApiGenericTableControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiGenericTableControllerCreateResponses, PlatformApiGenericTableControllerCreateErrors, ThrowOnError>({
361
354
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
362
- body: v.optional(vPlatformApiDataActivationClientControllerCreateBody),
363
- path: vPlatformApiDataActivationClientControllerCreatePath,
355
+ body: v.optional(vPlatformApiGenericTableControllerCreateBody),
356
+ path: vPlatformApiGenericTableControllerCreatePath,
364
357
  query: v.optional(v.never())
365
358
  }), data),
366
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerCreateResponse, data),
359
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiGenericTableControllerCreateResponse, data),
367
360
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
368
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients',
361
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables',
369
362
  ...options,
370
363
  headers: {
371
364
  'Content-Type': 'application/json',
@@ -374,109 +367,146 @@ export const platformApiDataActivationClientControllerCreate = <ThrowOnError ext
374
367
  });
375
368
 
376
369
  /**
377
- * Sync routes
370
+ * List the authenticated user's pending invitations
371
+ *
372
+ * Returns invitations addressed to the authenticated user that have not
373
+ * yet been accepted. Mirrors the LiveView at `/app/users/tenant-invitations`
374
+ * that recipients see after sign-in. Wraps `Tenants.list_invitations_by_user/1`
375
+ * verbatim — always filtered to the current user, never accepts a query
376
+ * parameter that could leak another user's invitations.
377
+ *
378
+ * Requires any Bearer (tenant-less is fine — recipients typically don't
379
+ * have tenant scope yet at this point in the bootstrap flow).
378
380
  *
379
- * Enqueues a background job to fetch routes from the connected app's `/.well-known/routes.json` endpoint and update the stored routes.
380
381
  */
381
- export const platformApiConnectedAppMgmtControllerSyncRoutes = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerSyncRoutesData, ThrowOnError>) => (options.client ?? client).post<PlatformApiConnectedAppMgmtControllerSyncRoutesResponses, PlatformApiConnectedAppMgmtControllerSyncRoutesErrors, ThrowOnError>({
382
+ export const platformApiInvitationControllerIndex = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiInvitationControllerIndexData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiInvitationControllerIndexResponses, PlatformApiInvitationControllerIndexErrors, ThrowOnError>({
382
383
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
383
384
  body: v.optional(v.never()),
384
- path: vPlatformApiConnectedAppMgmtControllerSyncRoutesPath,
385
+ path: v.optional(v.never()),
385
386
  query: v.optional(v.never())
386
387
  }), data),
387
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerSyncRoutesResponse, data),
388
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
389
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps/{id}/sync-routes',
388
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInvitationControllerIndexResponse, data),
389
+ security: [{ scheme: 'bearer', type: 'http' }],
390
+ url: '/api/v1/invitations',
390
391
  ...options
391
392
  });
392
393
 
393
394
  /**
394
- * Health check
395
- *
396
- * Public health check endpoint that returns:
397
- * - Application version
398
- * - Database connectivity status (SELECT 1 query)
399
- * - Current timestamp
400
- *
401
- * **No authentication required.**
395
+ * List interoperability contracts
402
396
  *
397
+ * Returns a paginated list of contracts scoped to the datalake.
403
398
  */
404
- export const platformApiPingControllerPing = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiPingControllerPingData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiPingControllerPingResponses, PlatformApiPingControllerPingErrors, ThrowOnError>({
399
+ export const platformApiInteroperabilityContractControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiInteroperabilityContractControllerIndexResponses, PlatformApiInteroperabilityContractControllerIndexErrors, ThrowOnError>({
400
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
405
401
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
406
402
  body: v.optional(v.never()),
407
- path: v.optional(v.never()),
408
- query: v.optional(v.never())
403
+ path: vPlatformApiInteroperabilityContractControllerIndexPath,
404
+ query: v.optional(vPlatformApiInteroperabilityContractControllerIndexQuery)
409
405
  }), data),
410
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiPingControllerPingResponse, data),
411
- url: '/api/ping',
406
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInteroperabilityContractControllerIndexResponse, data),
407
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
408
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts',
412
409
  ...options
413
410
  });
414
411
 
415
412
  /**
416
- * Get workflow metadata
413
+ * Create an interoperability contract
417
414
  *
418
- * Returns a markdown document describing the workflow's variable pipeline available variables at each node (event dataset, MDM, context datasets, enrichment, filter, decision, actions).
415
+ * Creates a new contract. `slug` is auto-generated from `name` on insert.
419
416
  */
420
- export const platformApiAgenticWorkflowControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerMetadataResponses, PlatformApiAgenticWorkflowControllerMetadataErrors, ThrowOnError>({
417
+ export const platformApiInteroperabilityContractControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInteroperabilityContractControllerCreateResponses, PlatformApiInteroperabilityContractControllerCreateErrors, ThrowOnError>({
418
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
419
+ requestValidator: async (data: unknown) => await v.parseAsync(v.object({
420
+ body: v.optional(vPlatformApiInteroperabilityContractControllerCreateBody),
421
+ path: vPlatformApiInteroperabilityContractControllerCreatePath,
422
+ query: v.optional(vPlatformApiInteroperabilityContractControllerCreateQuery)
423
+ }), data),
424
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInteroperabilityContractControllerCreateResponse, data),
425
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
426
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts',
427
+ ...options,
428
+ headers: {
429
+ 'Content-Type': 'application/json',
430
+ ...options.headers
431
+ }
432
+ });
433
+
434
+ /**
435
+ * Get contract field metadata
436
+ *
437
+ * Returns a markdown document describing the fields of the contract's target resource type. Combines `@moduledoc` (resource description) and `@typedoc` (field definitions) from the schema.
438
+ */
439
+ export const platformApiInteroperabilityContractControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiInteroperabilityContractControllerMetadataResponses, PlatformApiInteroperabilityContractControllerMetadataErrors, ThrowOnError>({
440
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
421
441
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
422
442
  body: v.optional(v.never()),
423
- path: vPlatformApiAgenticWorkflowControllerMetadataPath,
424
- query: v.optional(v.never())
443
+ path: vPlatformApiInteroperabilityContractControllerMetadataPath,
444
+ query: v.optional(vPlatformApiInteroperabilityContractControllerMetadataQuery)
425
445
  }), data),
426
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerMetadataResponse, data),
446
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInteroperabilityContractControllerMetadataResponse, data),
427
447
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
428
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}/metadata',
448
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{slug}/metadata',
429
449
  ...options
430
450
  });
431
451
 
432
452
  /**
433
- * Delete a tool
453
+ * Get a batch run log
434
454
  *
435
- * Deletes a tool. Returns 409 if the tool is referenced by another resource.
455
+ * Returns a single batch-level workflow run log with merged artifacts.
436
456
  */
437
- export const platformApiToolControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiToolControllerDeleteResponses, PlatformApiToolControllerDeleteErrors, ThrowOnError>({
457
+ export const platformApiAgenticWorkflowOperationsControllerBatchLogShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogShowErrors, ThrowOnError>({
438
458
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
439
459
  body: v.optional(v.never()),
440
- path: vPlatformApiToolControllerDeletePath,
460
+ path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogShowPath,
441
461
  query: v.optional(v.never())
442
462
  }), data),
443
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerDeleteResponse, data),
463
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponse, data),
444
464
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
445
- url: '/api/v1/tenants/{tenant_slug}/tools/{id}',
465
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}',
446
466
  ...options
447
467
  });
448
468
 
449
469
  /**
450
- * Get a tool
470
+ * Accept a tenant invitation
471
+ *
472
+ * Accepts a pending invitation addressed to the authenticated user, creating
473
+ * a `Membership` and deleting the invitation. Mirrors the LiveView flow at
474
+ * `/app/users/tenant-invitations` → "Accept" button. Wraps
475
+ * `Tenants.accept_invitation!/2` verbatim.
476
+ *
477
+ * The function-level guard `get_invitation_by_user!/2` ensures the invitation
478
+ * is addressed to the caller — cross-user acceptance returns 404.
479
+ *
480
+ * Requires any Bearer (the recipient often has only a tenant-less Bearer at
481
+ * this point — they just signed up and haven't joined a tenant yet).
451
482
  *
452
- * Returns a single tool by ID.
453
483
  */
454
- export const platformApiToolControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiToolControllerShowResponses, PlatformApiToolControllerShowErrors, ThrowOnError>({
484
+ export const platformApiInvitationControllerAccept = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInvitationControllerAcceptData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInvitationControllerAcceptResponses, PlatformApiInvitationControllerAcceptErrors, ThrowOnError>({
455
485
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
456
486
  body: v.optional(v.never()),
457
- path: vPlatformApiToolControllerShowPath,
487
+ path: vPlatformApiInvitationControllerAcceptPath,
458
488
  query: v.optional(v.never())
459
489
  }), data),
460
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerShowResponse, data),
461
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
462
- url: '/api/v1/tenants/{tenant_slug}/tools/{id}',
490
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInvitationControllerAcceptResponse, data),
491
+ security: [{ scheme: 'bearer', type: 'http' }],
492
+ url: '/api/v1/invitations/{id}/accept',
463
493
  ...options
464
494
  });
465
495
 
466
496
  /**
467
- * Replace a tool
497
+ * Execute an individual action for a dataset record
468
498
  *
469
- * Replaces a tool with the full resource body. PUT semantics all required fields must be present.
499
+ * Executes a single workflow action identified by decision_key for the given dataset record, bypassing filter and decision evaluation
470
500
  */
471
- export const platformApiToolControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiToolControllerUpdateResponses, PlatformApiToolControllerUpdateErrors, ThrowOnError>({
501
+ export const platformApiAgenticWorkflowOperationsControllerExecute = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerExecuteData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerExecuteResponses, PlatformApiAgenticWorkflowOperationsControllerExecuteErrors, ThrowOnError>({
472
502
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
473
- body: v.optional(vPlatformApiToolControllerUpdateBody),
474
- path: vPlatformApiToolControllerUpdatePath,
503
+ body: vPlatformApiAgenticWorkflowOperationsControllerExecuteBody,
504
+ path: vPlatformApiAgenticWorkflowOperationsControllerExecutePath,
475
505
  query: v.optional(v.never())
476
506
  }), data),
477
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerUpdateResponse, data),
507
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerExecuteResponse, data),
478
508
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
479
- url: '/api/v1/tenants/{tenant_slug}/tools/{id}',
509
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/execute',
480
510
  ...options,
481
511
  headers: {
482
512
  'Content-Type': 'application/json',
@@ -485,89 +515,99 @@ export const platformApiToolControllerUpdate = <ThrowOnError extends boolean = f
485
515
  });
486
516
 
487
517
  /**
488
- * List processing logs for a Data Activation Client
518
+ * Create datalake upload link
489
519
  *
490
- * Returns a Flop-paginated list of `DataActivationLog` rows for this DAC. One log per `(batch_id, dataset_table)` a single run produces multiple log rows, one per dataset table the DAC writes into. Filter or group client-side on `batch_id` to reconstruct a batch-level view.
520
+ * Returns a presigned PUT URL for uploading a file (NDJSON or CSV) directly to the datalake's regulated cloud storage. The returned key lives under `uploads/<datalake_id>/` and can be passed to downstream endpoints (e.g. data activation client ingest-file) that accept a pre-uploaded storage key.
491
521
  */
492
- export const platformApiDataActivationClientControllerLogsIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerLogsIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerLogsIndexResponses, PlatformApiDataActivationClientControllerLogsIndexErrors, ThrowOnError>({
522
+ export const platformApiDatalakeControllerCreateUploadLink = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerCreateUploadLinkData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerCreateUploadLinkResponses, PlatformApiDatalakeControllerCreateUploadLinkErrors, ThrowOnError>({
493
523
  querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
494
524
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
495
- body: v.optional(v.never()),
496
- path: vPlatformApiDataActivationClientControllerLogsIndexPath,
497
- query: v.optional(vPlatformApiDataActivationClientControllerLogsIndexQuery)
525
+ body: vPlatformApiDatalakeControllerCreateUploadLinkBody,
526
+ path: vPlatformApiDatalakeControllerCreateUploadLinkPath,
527
+ query: v.optional(vPlatformApiDatalakeControllerCreateUploadLinkQuery)
498
528
  }), data),
499
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerLogsIndexResponse, data),
529
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerCreateUploadLinkResponse, data),
500
530
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
501
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/logs',
502
- ...options
503
- });
504
-
505
- /**
506
- * Stop refresh polling for a batch run log
531
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/upload-link',
532
+ ...options,
533
+ headers: {
534
+ 'Content-Type': 'application/json',
535
+ ...options.headers
536
+ }
537
+ });
538
+
539
+ /**
540
+ * List datalakes
507
541
  *
508
- * Deletes the DynamicCron job that polls this batch. The batch log is NOT deleted.
542
+ * Returns a paginated list of datalakes for the authenticated tenant.
509
543
  */
510
- export const platformApiAgenticWorkflowOperationsControllerBatchLogStop = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogStopData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogStopErrors, ThrowOnError>({
544
+ export const platformApiDatalakeControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerIndexResponses, PlatformApiDatalakeControllerIndexErrors, ThrowOnError>({
545
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
511
546
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
512
547
  body: v.optional(v.never()),
513
- path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogStopPath,
514
- query: v.optional(v.never())
548
+ path: vPlatformApiDatalakeControllerIndexPath,
549
+ query: v.optional(vPlatformApiDatalakeControllerIndexQuery)
515
550
  }), data),
516
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponse, data),
551
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerIndexResponse, data),
517
552
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
518
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/stop',
553
+ url: '/api/v1/tenants/{tenant_slug}/datalakes',
519
554
  ...options
520
555
  });
521
556
 
522
557
  /**
523
- * Get DAC dataset metadata
558
+ * Create a datalake
524
559
  *
525
- * Returns a markdown document describing the fields of each dataset connected to this data activation client via its interoperability contracts.
560
+ * Creates a new datalake for the authenticated tenant.
526
561
  */
527
- export const platformApiDataActivationClientControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerMetadataResponses, PlatformApiDataActivationClientControllerMetadataErrors, ThrowOnError>({
562
+ export const platformApiDatalakeControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerCreateResponses, PlatformApiDatalakeControllerCreateErrors, ThrowOnError>({
563
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
528
564
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
529
- body: v.optional(v.never()),
530
- path: vPlatformApiDataActivationClientControllerMetadataPath,
531
- query: v.optional(v.never())
565
+ body: v.optional(vPlatformApiDatalakeControllerCreateBody),
566
+ path: vPlatformApiDatalakeControllerCreatePath,
567
+ query: v.optional(vPlatformApiDatalakeControllerCreateQuery)
532
568
  }), data),
533
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerMetadataResponse, data),
569
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerCreateResponse, data),
534
570
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
535
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/metadata',
536
- ...options
571
+ url: '/api/v1/tenants/{tenant_slug}/datalakes',
572
+ ...options,
573
+ headers: {
574
+ 'Content-Type': 'application/json',
575
+ ...options.headers
576
+ }
537
577
  });
538
578
 
539
579
  /**
540
- * List agentic workflows
580
+ * Show a single DAC processing log
541
581
  *
542
- * Returns a paginated list of workflows for a datalake.
582
+ * Returns a single `DataActivationLog` row scoped to this DAC. Returns 404 if the id belongs to a different client.
543
583
  */
544
- export const platformApiAgenticWorkflowControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerIndexResponses, PlatformApiAgenticWorkflowControllerIndexErrors, ThrowOnError>({
545
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
584
+ export const platformApiDataActivationClientControllerLogShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerLogShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerLogShowResponses, PlatformApiDataActivationClientControllerLogShowErrors, ThrowOnError>({
546
585
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
547
586
  body: v.optional(v.never()),
548
- path: vPlatformApiAgenticWorkflowControllerIndexPath,
549
- query: v.optional(vPlatformApiAgenticWorkflowControllerIndexQuery)
587
+ path: vPlatformApiDataActivationClientControllerLogShowPath,
588
+ query: v.optional(v.never())
550
589
  }), data),
551
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerIndexResponse, data),
590
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerLogShowResponse, data),
552
591
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
553
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows',
592
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/logs/{id}',
554
593
  ...options
555
594
  });
556
595
 
557
596
  /**
558
- * Create an agentic workflow
597
+ * Replace a data source
559
598
  *
560
- * Creates a new workflow. Attach AI agents via the `ai_agents` array.
599
+ * Replaces a data source with the full resource body. PUT semantics all required fields must be present.
561
600
  */
562
- export const platformApiAgenticWorkflowControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowControllerCreateResponses, PlatformApiAgenticWorkflowControllerCreateErrors, ThrowOnError>({
601
+ export const platformApiDataSourceControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiDataSourceControllerUpdateResponses, PlatformApiDataSourceControllerUpdateErrors, ThrowOnError>({
602
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
563
603
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
564
- body: v.optional(vPlatformApiAgenticWorkflowControllerCreateBody),
565
- path: vPlatformApiAgenticWorkflowControllerCreatePath,
566
- query: v.optional(v.never())
604
+ body: v.optional(vPlatformApiDataSourceControllerUpdateBody),
605
+ path: vPlatformApiDataSourceControllerUpdatePath,
606
+ query: v.optional(vPlatformApiDataSourceControllerUpdateQuery)
567
607
  }), data),
568
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerCreateResponse, data),
608
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataSourceControllerUpdateResponse, data),
569
609
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
570
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows',
610
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}',
571
611
  ...options,
572
612
  headers: {
573
613
  'Content-Type': 'application/json',
@@ -576,105 +616,114 @@ export const platformApiAgenticWorkflowControllerCreate = <ThrowOnError extends
576
616
  });
577
617
 
578
618
  /**
579
- * Update message tracking fields for a page
580
- *
581
- * Updates tracking timestamps (opened_at, form_submitted_at) on the message
582
- * linked to a page token. Called by the connected app when a user opens a page
583
- * or submits a form.
584
- *
585
- * **Requires X-API-Key authentication.**
619
+ * Delete an agentic workflow
586
620
  *
621
+ * Deletes a workflow and all associated actions, context datasets, and AI agent attachments.
587
622
  */
588
- export const platformApiConnectedAppControllerUpdateMessageTracking = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppControllerUpdateMessageTrackingData, ThrowOnError>) => (options.client ?? client).patch<PlatformApiConnectedAppControllerUpdateMessageTrackingResponses, PlatformApiConnectedAppControllerUpdateMessageTrackingErrors, ThrowOnError>({
623
+ export const platformApiAgenticWorkflowControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiAgenticWorkflowControllerDeleteResponses, PlatformApiAgenticWorkflowControllerDeleteErrors, ThrowOnError>({
589
624
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
590
- body: vPlatformApiConnectedAppControllerUpdateMessageTrackingBody,
591
- path: vPlatformApiConnectedAppControllerUpdateMessageTrackingPath,
625
+ body: v.optional(v.never()),
626
+ path: vPlatformApiAgenticWorkflowControllerDeletePath,
592
627
  query: v.optional(v.never())
593
628
  }), data),
594
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppControllerUpdateMessageTrackingResponse, data),
629
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerDeleteResponse, data),
595
630
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
596
- url: '/api/v1/tenants/{tenant_slug}/connected-apps/{slug}/update-message-tracking',
597
- ...options,
598
- headers: {
599
- 'Content-Type': 'application/json',
600
- ...options.headers
601
- }
631
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}',
632
+ ...options
602
633
  });
603
634
 
604
635
  /**
605
- * Start or restart refresh polling for a batch run log
636
+ * Get an agentic workflow
606
637
  *
607
- * Creates a DynamicCron job to poll this batch. Idempotent — if cron already exists, it's a no-op.
638
+ * Returns a single workflow by ID with nested AI agents.
608
639
  */
609
- export const platformApiAgenticWorkflowOperationsControllerBatchLogStart = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogStartData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogStartErrors, ThrowOnError>({
640
+ export const platformApiAgenticWorkflowControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerShowResponses, PlatformApiAgenticWorkflowControllerShowErrors, ThrowOnError>({
610
641
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
611
642
  body: v.optional(v.never()),
612
- path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogStartPath,
643
+ path: vPlatformApiAgenticWorkflowControllerShowPath,
613
644
  query: v.optional(v.never())
614
645
  }), data),
615
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponse, data),
646
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerShowResponse, data),
616
647
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
617
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/start',
648
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}',
618
649
  ...options
619
650
  });
620
651
 
621
652
  /**
622
- * Revoke current session
623
- *
624
- * Revokes the current Bearer session — deactivates the session and deletes
625
- * the linked UserToken. The Bearer token becomes immediately invalid.
626
- *
627
- * Only works with `Authorization: Bearer <session_token>` (not X-API-Key).
628
- *
629
- * **Requires Bearer authentication.**
653
+ * Replace an agentic workflow
630
654
  *
655
+ * Replaces a workflow with the full resource body. PUT semantics — all required fields must be present. The `ai_agents` array replaces the current set of attached agents transactionally.
631
656
  */
632
- export const platformApiSessionControllerDelete = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiSessionControllerDeleteData, ThrowOnError>) => (options?.client ?? client).delete<PlatformApiSessionControllerDeleteResponses, PlatformApiSessionControllerDeleteErrors, ThrowOnError>({
657
+ export const platformApiAgenticWorkflowControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiAgenticWorkflowControllerUpdateResponses, PlatformApiAgenticWorkflowControllerUpdateErrors, ThrowOnError>({
633
658
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
634
- body: v.optional(v.never()),
635
- path: v.optional(v.never()),
659
+ body: v.optional(vPlatformApiAgenticWorkflowControllerUpdateBody),
660
+ path: vPlatformApiAgenticWorkflowControllerUpdatePath,
636
661
  query: v.optional(v.never())
637
662
  }), data),
638
- security: [{ scheme: 'bearer', type: 'http' }],
639
- url: '/api/v1/sessions',
640
- ...options
663
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerUpdateResponse, data),
664
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
665
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}',
666
+ ...options,
667
+ headers: {
668
+ 'Content-Type': 'application/json',
669
+ ...options.headers
670
+ }
641
671
  });
642
672
 
643
673
  /**
644
- * Create a session (human auth)
674
+ * Run workflow for matching records
645
675
  *
646
- * Exchange user credentials for a Bearer session token.
676
+ * Executes the workflow for all dataset records matching the SQL WHERE clause.
677
+ * Creates sampled events and enqueues run_workflow jobs. Returns the batch ID
678
+ * and enqueued count. A WorkflowRunLog is created to track batch-level
679
+ * progress, polled by a daily DynamicCron.
647
680
  *
648
- * Send `{email, password}` (with optional `tenant_slug`) to authenticate a
649
- * human user and receive a session token. Use the returned `session_token`
650
- * as `Authorization: Bearer <session_token>` on subsequent API requests.
681
+ * ## Per-step artifacts (audit trail)
651
682
  *
652
- * When `tenant_slug` is **omitted**, returns a tenant-less Bearer for
653
- * pre-tenant flows: admin operations under `/api/v1/admin/...` and creating
654
- * your first tenant via `POST /api/v1/tenants`. Tenant-scoped routes will
655
- * reject such tokens with 403.
683
+ * Each per-row WorkflowExecutionLog (WEL) writes a fixed set of JSON
684
+ * artifacts to the datalake's regulated cloud-storage bucket. The path is
685
+ * deterministic and convention-driven there is no separate listing
686
+ * endpoint:
656
687
  *
657
- * When `tenant_slug` is **provided**, returns a tenant-scoped Bearer with
658
- * the caller's membership role (or 401 if the user has no membership in
659
- * that tenant).
688
+ * workflows/{workflow_id}/executions/{wel_id}/event.json
689
+ * workflows/{workflow_id}/executions/{wel_id}/filter.json
690
+ * workflows/{workflow_id}/executions/{wel_id}/enrichment.json
691
+ * workflows/{workflow_id}/executions/{wel_id}/error.json # only on failure
660
692
  *
661
- * Optionally specify `expires_in` (seconds) to control session duration.
662
- * Default: 86400 (24 hours). Maximum: 2592000 (30 days).
693
+ * | File | Written by stage | Body |
694
+ * | ----------------- | -------------------------------------- | ------------------------------------------------------------------ |
695
+ * | `event.json` | context build | full WorkflowContext (event_dataset, mdm_output, additional_context)|
696
+ * | `filter.json` | filter eval (both pass and reject) | `{filter_expression, filter_result: bool}` |
697
+ * | `enrichment.json` | enrichment terminal (success / skip / fail) | `{status: "completed" \| "failed" \| "skipped", <agent_slug>: ...}` |
698
+ * | `error.json` | ANY pipeline failure | `{stage, error_code, ai_agent_slug, error_message, detail}` |
663
699
  *
664
- * For M2M (server-to-server) authentication, use `X-API-Key` header directly
665
- * on each request instead no session exchange needed.
700
+ * `error.json`'s presence IS the failure signal — `WEL.error_message`
701
+ * carries only a code-grade summary; the rich URL/HTTP-status/transport
702
+ * detail lives ONLY in `error.json["detail"]`. Engineers debugging a
703
+ * failed run should download `error.json` for full context.
666
704
  *
667
- * **No authentication required** — this endpoint authenticates the caller.
705
+ * ### Fetching an artifact
706
+ *
707
+ * Use the standard datalake download-link endpoint
708
+ * (`POST /api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link`)
709
+ * with `bucket = <regulated bucket>` and the convention key above. Example:
710
+ *
711
+ * POST /api/v1/tenants/acme/datalakes/clinical/download-link
712
+ * { "bucket": "clinical-regulated", "key": "workflows/<wf_id>/executions/<wel_id>/error.json" }
713
+ *
714
+ * The response carries a short-lived signed URL. The regulated bucket is
715
+ * exposed on the datalake response as `regulated_cloud_storage.bucket`.
668
716
  *
669
717
  */
670
- export const platformApiSessionControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiSessionControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiSessionControllerCreateResponses, PlatformApiSessionControllerCreateErrors, ThrowOnError>({
718
+ export const platformApiAgenticWorkflowOperationsControllerRunWorkflow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerRunWorkflowData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponses, PlatformApiAgenticWorkflowOperationsControllerRunWorkflowErrors, ThrowOnError>({
671
719
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
672
- body: vPlatformApiSessionControllerCreateBody,
673
- path: v.optional(v.never()),
720
+ body: vPlatformApiAgenticWorkflowOperationsControllerRunWorkflowBody,
721
+ path: vPlatformApiAgenticWorkflowOperationsControllerRunWorkflowPath,
674
722
  query: v.optional(v.never())
675
723
  }), data),
676
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiSessionControllerCreateResponse, data),
677
- url: '/api/v1/sessions',
724
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponse, data),
725
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
726
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/run-workflow',
678
727
  ...options,
679
728
  headers: {
680
729
  'Content-Type': 'application/json',
@@ -683,122 +732,76 @@ export const platformApiSessionControllerCreate = <ThrowOnError extends boolean
683
732
  });
684
733
 
685
734
  /**
686
- * List connected apps
735
+ * Force-refresh a batch run log
687
736
  *
688
- * Returns a paginated list of connected apps for the authenticated tenant.
737
+ * Triggers an immediate refresh of the batch run log metrics and merged artifacts.
689
738
  */
690
- export const platformApiConnectedAppMgmtControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiConnectedAppMgmtControllerIndexResponses, PlatformApiConnectedAppMgmtControllerIndexErrors, ThrowOnError>({
691
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
739
+ export const platformApiAgenticWorkflowOperationsControllerBatchLogRefresh = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshErrors, ThrowOnError>({
692
740
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
693
741
  body: v.optional(v.never()),
694
- path: vPlatformApiConnectedAppMgmtControllerIndexPath,
695
- query: v.optional(vPlatformApiConnectedAppMgmtControllerIndexQuery)
742
+ path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshPath,
743
+ query: v.optional(v.never())
696
744
  }), data),
697
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerIndexResponse, data),
745
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponse, data),
698
746
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
699
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps',
747
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/refresh',
700
748
  ...options
701
749
  });
702
750
 
703
751
  /**
704
- * Create a connected app
752
+ * Ingest JSON data
705
753
  *
706
- * Creates a new connected app with automatic API key provisioning.
707
- */
708
- export const platformApiConnectedAppMgmtControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiConnectedAppMgmtControllerCreateResponses, PlatformApiConnectedAppMgmtControllerCreateErrors, ThrowOnError>({
709
- requestValidator: async (data: unknown) => await v.parseAsync(v.object({
710
- body: v.optional(vPlatformApiConnectedAppMgmtControllerCreateBody),
711
- path: vPlatformApiConnectedAppMgmtControllerCreatePath,
712
- query: v.optional(v.never())
713
- }), data),
714
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerCreateResponse, data),
715
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
716
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps',
717
- ...options,
718
- headers: {
719
- 'Content-Type': 'application/json',
720
- ...options.headers
721
- }
722
- });
723
-
724
- /**
725
- * Confirm a user (admin bypass)
754
+ * Ingest a single JSON record for processing through the data activation
755
+ * pipeline. Returns immediately with `{batch_id, key, jobs_count}`; per-row
756
+ * work runs asynchronously on the data-activation Oban queue.
726
757
  *
727
- * Marks a user account as confirmed without requiring an email-confirmation
728
- * token. Idempotent — confirming an already-confirmed user is a 200 no-op
729
- * that returns the existing `confirmed_at` timestamp.
758
+ * ## Per-batch artifacts (audit trail)
730
759
  *
731
- * Wraps `Accounts.confirm_user!/1` verbatim exactly the primitive that
732
- * backs the dev/admin email-confirm path in the LiveView UI. **Zero new
733
- * business logic.**
760
+ * The DAC pipeline does NOT use the `<step>.json` convention that workflows
761
+ * do its byproducts are NDJSON archives, surfaced on the
762
+ * `DataActivationLog` row that the batch produces:
734
763
  *
735
- * Powerful primitive: bypasses the regular email-confirmation flow. Every
736
- * successful call is structured-logged with `caller_user_id` and
737
- * `target_user_id` for forensic trail.
764
+ * | Field | Bucket | Body |
765
+ * | --------------- | ------------ | ---------------------------------------------------------------------------------------- |
766
+ * | `key` (response)| regulated | the raw JSON payload uploaded by THIS request |
767
+ * | `input_files` | regulated | source artifacts consumed by the batch (one per ingest call merged into the batch) |
768
+ * | `output_files` | mixed | merged NDJSON archives, one `{object_key, mode}` per bucket (`regulated` + `unregulated`)|
738
769
  *
739
- * **Requires platform-admin authentication** (`User.role == :admin`).
770
+ * ### Fetching diagnostic artifacts
740
771
  *
741
- */
742
- export const platformApiAdminControllerConfirmUser = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdminControllerConfirmUserData, ThrowOnError>) => (options.client ?? client).put<PlatformApiAdminControllerConfirmUserResponses, PlatformApiAdminControllerConfirmUserErrors, ThrowOnError>({
743
- requestValidator: async (data: unknown) => await v.parseAsync(v.object({
744
- body: v.optional(v.never()),
745
- path: vPlatformApiAdminControllerConfirmUserPath,
746
- query: v.optional(v.never())
747
- }), data),
748
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAdminControllerConfirmUserResponse, data),
749
- security: [{ scheme: 'bearer', type: 'http' }],
750
- url: '/api/v1/admin/users/{id}/confirm',
751
- ...options
752
- });
753
-
754
- /**
755
- * Delete an AI agent
772
+ * Use the same datalake download-link endpoint as workflow artifacts
773
+ * (`POST /api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link`):
756
774
  *
757
- * Deletes an AI agent. Returns 409 if the agent is attached to a workflow.
758
- */
759
- export const platformApiAiAgentControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiAiAgentControllerDeleteResponses, PlatformApiAiAgentControllerDeleteErrors, ThrowOnError>({
760
- requestValidator: async (data: unknown) => await v.parseAsync(v.object({
761
- body: v.optional(v.never()),
762
- path: vPlatformApiAiAgentControllerDeletePath,
763
- query: v.optional(v.never())
764
- }), data),
765
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerDeleteResponse, data),
766
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
767
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}',
768
- ...options
769
- });
770
-
771
- /**
772
- * Get an AI agent
775
+ * # raw payload that this ingest call uploaded
776
+ * { "bucket": "<regulated>", "key": "<response.key>" }
773
777
  *
774
- * Returns a single AI agent by ID.
775
- */
776
- export const platformApiAiAgentControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAiAgentControllerShowResponses, PlatformApiAiAgentControllerShowErrors, ThrowOnError>({
777
- requestValidator: async (data: unknown) => await v.parseAsync(v.object({
778
- body: v.optional(v.never()),
779
- path: vPlatformApiAiAgentControllerShowPath,
780
- query: v.optional(v.never())
781
- }), data),
782
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerShowResponse, data),
783
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
784
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}',
785
- ...options
786
- });
787
-
788
- /**
789
- * Replace an AI agent
778
+ * # per-bucket merged archive (after batch completes)
779
+ * { "bucket": "<regulated|unregulated>", "key": "<output_files[i].object_key>" }
780
+ *
781
+ * `output_files[i].mode` tells you which bucket each archive lives in
782
+ * (`regulated` for raw attrs, `unregulated` for tokenized). The regulated /
783
+ * unregulated bucket names are exposed on the datalake response as
784
+ * `regulated_cloud_storage.bucket` / `unregulated_cloud_storage.bucket`.
785
+ *
786
+ * ### Failure surfacing
787
+ *
788
+ * On a `{:error, _}` ingest response the platform returns `422` with an
789
+ * `error` string. For pipeline failures (per-row Oban job exceptions),
790
+ * the DataActivationLog row's `rows_ingested` will be lower than the
791
+ * submitted count; per-row diagnostics live in the Oban job table
792
+ * (`oban_jobs.errors`) keyed by `batch_id`. There is no `error.json`
793
+ * artifact on the DAC path — that convention is workflow-only.
790
794
  *
791
- * Replaces an AI agent with the full resource body. PUT semantics — all required fields must be present.
792
795
  */
793
- export const platformApiAiAgentControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiAiAgentControllerUpdateResponses, PlatformApiAiAgentControllerUpdateErrors, ThrowOnError>({
796
+ export const platformApiDataActivationClientControllerIngest = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerIngestData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerIngestResponses, PlatformApiDataActivationClientControllerIngestErrors, ThrowOnError>({
794
797
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
795
- body: v.optional(vPlatformApiAiAgentControllerUpdateBody),
796
- path: vPlatformApiAiAgentControllerUpdatePath,
798
+ body: vPlatformApiDataActivationClientControllerIngestBody,
799
+ path: vPlatformApiDataActivationClientControllerIngestPath,
797
800
  query: v.optional(v.never())
798
801
  }), data),
799
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerUpdateResponse, data),
802
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerIngestResponse, data),
800
803
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
801
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}',
804
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/ingest',
802
805
  ...options,
803
806
  headers: {
804
807
  'Content-Type': 'application/json',
@@ -807,19 +810,20 @@ export const platformApiAiAgentControllerUpdate = <ThrowOnError extends boolean
807
810
  });
808
811
 
809
812
  /**
810
- * Trigger a manual run of a Data Activation Client
813
+ * Replace an action status updater
811
814
  *
812
- * Enqueues a one-off fetch/ingest pipeline run. Empty body or omitted `tool_call` runs with the DAC's persisted `tool_call`. Supplying a `tool_call` map applies a one-shot polymorphic override for this run only the persisted DAC record is not modified.
815
+ * Replaces an action status updater with the full resource body. PUT semanticsall required fields must be present.
813
816
  */
814
- export const platformApiDataActivationClientControllerRunManually = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerRunManuallyData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerRunManuallyResponses, PlatformApiDataActivationClientControllerRunManuallyErrors, ThrowOnError>({
817
+ export const platformApiActionStatusUpdaterControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiActionStatusUpdaterControllerUpdateResponses, PlatformApiActionStatusUpdaterControllerUpdateErrors, ThrowOnError>({
818
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
815
819
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
816
- body: v.optional(vPlatformApiDataActivationClientControllerRunManuallyBody),
817
- path: vPlatformApiDataActivationClientControllerRunManuallyPath,
818
- query: v.optional(v.never())
820
+ body: v.optional(vPlatformApiActionStatusUpdaterControllerUpdateBody),
821
+ path: vPlatformApiActionStatusUpdaterControllerUpdatePath,
822
+ query: v.optional(vPlatformApiActionStatusUpdaterControllerUpdateQuery)
819
823
  }), data),
820
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerRunManuallyResponse, data),
824
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiActionStatusUpdaterControllerUpdateResponse, data),
821
825
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
822
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/run-manually',
826
+ url: '/api/v1/tenants/{tenant_slug}/action-status-updaters/{id}',
823
827
  ...options,
824
828
  headers: {
825
829
  'Content-Type': 'application/json',
@@ -828,59 +832,37 @@ export const platformApiDataActivationClientControllerRunManually = <ThrowOnErro
828
832
  });
829
833
 
830
834
  /**
831
- * List data sources
835
+ * List AI agents
832
836
  *
833
- * Returns a paginated list of data sources for the authenticated tenant.
837
+ * Returns a paginated list of AI agents for the authenticated tenant.
834
838
  */
835
- export const platformApiDataSourceControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataSourceControllerIndexResponses, PlatformApiDataSourceControllerIndexErrors, ThrowOnError>({
839
+ export const platformApiAiAgentControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAiAgentControllerIndexResponses, PlatformApiAiAgentControllerIndexErrors, ThrowOnError>({
836
840
  querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
837
841
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
838
842
  body: v.optional(v.never()),
839
- path: vPlatformApiDataSourceControllerIndexPath,
840
- query: v.optional(vPlatformApiDataSourceControllerIndexQuery)
843
+ path: vPlatformApiAiAgentControllerIndexPath,
844
+ query: v.optional(vPlatformApiAiAgentControllerIndexQuery)
841
845
  }), data),
842
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataSourceControllerIndexResponse, data),
846
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerIndexResponse, data),
843
847
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
844
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources',
848
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents',
845
849
  ...options
846
850
  });
847
851
 
848
852
  /**
849
- * Create a data source
850
- *
851
- * Creates a new data source for the authenticated tenant.
852
- */
853
- export const platformApiDataSourceControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataSourceControllerCreateResponses, PlatformApiDataSourceControllerCreateErrors, ThrowOnError>({
854
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
855
- requestValidator: async (data: unknown) => await v.parseAsync(v.object({
856
- body: v.optional(vPlatformApiDataSourceControllerCreateBody),
857
- path: vPlatformApiDataSourceControllerCreatePath,
858
- query: v.optional(vPlatformApiDataSourceControllerCreateQuery)
859
- }), data),
860
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataSourceControllerCreateResponse, data),
861
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
862
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources',
863
- ...options,
864
- headers: {
865
- 'Content-Type': 'application/json',
866
- ...options.headers
867
- }
868
- });
869
-
870
- /**
871
- * Ingest previously uploaded file
853
+ * Create an AI agent
872
854
  *
873
- * Ingests a file that was uploaded via a presigned URL obtained from the datalake upload-link endpoint. The key must belong to this client's datalake prefix (`uploads/<datalake_id>/...`).
855
+ * Creates a new AI agent for the authenticated tenant.
874
856
  */
875
- export const platformApiDataActivationClientControllerIngestFile = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerIngestFileData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerIngestFileResponses, PlatformApiDataActivationClientControllerIngestFileErrors, ThrowOnError>({
857
+ export const platformApiAiAgentControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAiAgentControllerCreateResponses, PlatformApiAiAgentControllerCreateErrors, ThrowOnError>({
876
858
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
877
- body: vPlatformApiDataActivationClientControllerIngestFileBody,
878
- path: vPlatformApiDataActivationClientControllerIngestFilePath,
859
+ body: v.optional(vPlatformApiAiAgentControllerCreateBody),
860
+ path: vPlatformApiAiAgentControllerCreatePath,
879
861
  query: v.optional(v.never())
880
862
  }), data),
881
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerIngestFileResponse, data),
863
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerCreateResponse, data),
882
864
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
883
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/ingest-file',
865
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents',
884
866
  ...options,
885
867
  headers: {
886
868
  'Content-Type': 'application/json',
@@ -889,24 +871,20 @@ export const platformApiDataActivationClientControllerIngestFile = <ThrowOnError
889
871
  });
890
872
 
891
873
  /**
892
- * Get a workflow execution log
893
- *
894
- * Returns a single execution log with action execution details. Each action
895
- * execution log carries a `message_body` virtual field populated from the
896
- * datalake message linked via `message_id`. The `data_access_mode` query
897
- * parameter selects which datalake schema is read for the body — defaults
898
- * to the session's `data_access_mode` ceiling.
874
+ * Get datalake domain metadata
899
875
  *
876
+ * Returns a markdown document describing the datalake's data domain — its available standard resources and capabilities.
900
877
  */
901
- export const platformApiAgenticWorkflowOperationsControllerWorkflowLogShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowErrors, ThrowOnError>({
878
+ export const platformApiDatalakeControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerMetadataResponses, PlatformApiDatalakeControllerMetadataErrors, ThrowOnError>({
879
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
902
880
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
903
881
  body: v.optional(v.never()),
904
- path: vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowPath,
905
- query: v.optional(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowQuery)
882
+ path: vPlatformApiDatalakeControllerMetadataPath,
883
+ query: v.optional(vPlatformApiDatalakeControllerMetadataQuery)
906
884
  }), data),
907
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponse, data),
885
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerMetadataResponse, data),
908
886
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
909
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/workflow-logs/{id}',
887
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/metadata',
910
888
  ...options
911
889
  });
912
890
 
@@ -969,77 +947,81 @@ export const platformApiInteroperabilityContractControllerUpdate = <ThrowOnError
969
947
  });
970
948
 
971
949
  /**
972
- * Get datalake domain metadata
950
+ * Get a workflow execution log
951
+ *
952
+ * Returns a single execution log with action execution details. Each action
953
+ * execution log carries a `message_body` virtual field populated from the
954
+ * datalake message linked via `message_id`. The `data_access_mode` query
955
+ * parameter selects which datalake schema is read for the body — defaults
956
+ * to the session's `data_access_mode` ceiling.
973
957
  *
974
- * Returns a markdown document describing the datalake's data domain — its available standard resources and capabilities.
975
958
  */
976
- export const platformApiDatalakeControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerMetadataResponses, PlatformApiDatalakeControllerMetadataErrors, ThrowOnError>({
977
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
959
+ export const platformApiAgenticWorkflowOperationsControllerWorkflowLogShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowErrors, ThrowOnError>({
978
960
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
979
961
  body: v.optional(v.never()),
980
- path: vPlatformApiDatalakeControllerMetadataPath,
981
- query: v.optional(vPlatformApiDatalakeControllerMetadataQuery)
962
+ path: vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowPath,
963
+ query: v.optional(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowQuery)
982
964
  }), data),
983
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerMetadataResponse, data),
965
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponse, data),
984
966
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
985
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/metadata',
967
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/workflow-logs/{id}',
986
968
  ...options
987
969
  });
988
970
 
989
971
  /**
990
- * List AI agents
972
+ * Ingest previously uploaded file
991
973
  *
992
- * Returns a paginated list of AI agents for the authenticated tenant.
974
+ * Ingests a file that was uploaded via a presigned URL obtained from the datalake upload-link endpoint. The key must belong to this client's datalake prefix (`uploads/<datalake_id>/...`).
993
975
  */
994
- export const platformApiAiAgentControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAiAgentControllerIndexResponses, PlatformApiAiAgentControllerIndexErrors, ThrowOnError>({
995
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
976
+ export const platformApiDataActivationClientControllerIngestFile = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerIngestFileData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerIngestFileResponses, PlatformApiDataActivationClientControllerIngestFileErrors, ThrowOnError>({
996
977
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
997
- body: v.optional(v.never()),
998
- path: vPlatformApiAiAgentControllerIndexPath,
999
- query: v.optional(vPlatformApiAiAgentControllerIndexQuery)
978
+ body: vPlatformApiDataActivationClientControllerIngestFileBody,
979
+ path: vPlatformApiDataActivationClientControllerIngestFilePath,
980
+ query: v.optional(v.never())
1000
981
  }), data),
1001
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerIndexResponse, data),
982
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerIngestFileResponse, data),
1002
983
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1003
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents',
1004
- ...options
984
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/ingest-file',
985
+ ...options,
986
+ headers: {
987
+ 'Content-Type': 'application/json',
988
+ ...options.headers
989
+ }
1005
990
  });
1006
991
 
1007
992
  /**
1008
- * Create an AI agent
993
+ * List data sources
1009
994
  *
1010
- * Creates a new AI agent for the authenticated tenant.
995
+ * Returns a paginated list of data sources for the authenticated tenant.
1011
996
  */
1012
- export const platformApiAiAgentControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAiAgentControllerCreateResponses, PlatformApiAiAgentControllerCreateErrors, ThrowOnError>({
997
+ export const platformApiDataSourceControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataSourceControllerIndexResponses, PlatformApiDataSourceControllerIndexErrors, ThrowOnError>({
998
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1013
999
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1014
- body: v.optional(vPlatformApiAiAgentControllerCreateBody),
1015
- path: vPlatformApiAiAgentControllerCreatePath,
1016
- query: v.optional(v.never())
1000
+ body: v.optional(v.never()),
1001
+ path: vPlatformApiDataSourceControllerIndexPath,
1002
+ query: v.optional(vPlatformApiDataSourceControllerIndexQuery)
1017
1003
  }), data),
1018
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerCreateResponse, data),
1004
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataSourceControllerIndexResponse, data),
1019
1005
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1020
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents',
1021
- ...options,
1022
- headers: {
1023
- 'Content-Type': 'application/json',
1024
- ...options.headers
1025
- }
1006
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources',
1007
+ ...options
1026
1008
  });
1027
1009
 
1028
1010
  /**
1029
- * Replace an action status updater
1011
+ * Create a data source
1030
1012
  *
1031
- * Replaces an action status updater with the full resource body. PUT semantics — all required fields must be present.
1013
+ * Creates a new data source for the authenticated tenant.
1032
1014
  */
1033
- export const platformApiActionStatusUpdaterControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiActionStatusUpdaterControllerUpdateResponses, PlatformApiActionStatusUpdaterControllerUpdateErrors, ThrowOnError>({
1015
+ export const platformApiDataSourceControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataSourceControllerCreateResponses, PlatformApiDataSourceControllerCreateErrors, ThrowOnError>({
1034
1016
  querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1035
1017
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1036
- body: v.optional(vPlatformApiActionStatusUpdaterControllerUpdateBody),
1037
- path: vPlatformApiActionStatusUpdaterControllerUpdatePath,
1038
- query: v.optional(vPlatformApiActionStatusUpdaterControllerUpdateQuery)
1018
+ body: v.optional(vPlatformApiDataSourceControllerCreateBody),
1019
+ path: vPlatformApiDataSourceControllerCreatePath,
1020
+ query: v.optional(vPlatformApiDataSourceControllerCreateQuery)
1039
1021
  }), data),
1040
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiActionStatusUpdaterControllerUpdateResponse, data),
1022
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataSourceControllerCreateResponse, data),
1041
1023
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1042
- url: '/api/v1/tenants/{tenant_slug}/action-status-updaters/{id}',
1024
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources',
1043
1025
  ...options,
1044
1026
  headers: {
1045
1027
  'Content-Type': 'application/json',
@@ -1048,59 +1030,19 @@ export const platformApiActionStatusUpdaterControllerUpdate = <ThrowOnError exte
1048
1030
  });
1049
1031
 
1050
1032
  /**
1051
- * Ingest JSON data
1052
- *
1053
- * Ingest a single JSON record for processing through the data activation
1054
- * pipeline. Returns immediately with `{batch_id, key, jobs_count}`; per-row
1055
- * work runs asynchronously on the data-activation Oban queue.
1056
- *
1057
- * ## Per-batch artifacts (audit trail)
1058
- *
1059
- * The DAC pipeline does NOT use the `<step>.json` convention that workflows
1060
- * do — its byproducts are NDJSON archives, surfaced on the
1061
- * `DataActivationLog` row that the batch produces:
1062
- *
1063
- * | Field | Bucket | Body |
1064
- * | --------------- | ------------ | ---------------------------------------------------------------------------------------- |
1065
- * | `key` (response)| regulated | the raw JSON payload uploaded by THIS request |
1066
- * | `input_files` | regulated | source artifacts consumed by the batch (one per ingest call merged into the batch) |
1067
- * | `output_files` | mixed | merged NDJSON archives, one `{object_key, mode}` per bucket (`regulated` + `unregulated`)|
1068
- *
1069
- * ### Fetching diagnostic artifacts
1070
- *
1071
- * Use the same datalake download-link endpoint as workflow artifacts
1072
- * (`POST /api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link`):
1073
- *
1074
- * # raw payload that this ingest call uploaded
1075
- * { "bucket": "<regulated>", "key": "<response.key>" }
1076
- *
1077
- * # per-bucket merged archive (after batch completes)
1078
- * { "bucket": "<regulated|unregulated>", "key": "<output_files[i].object_key>" }
1079
- *
1080
- * `output_files[i].mode` tells you which bucket each archive lives in
1081
- * (`regulated` for raw attrs, `unregulated` for tokenized). The regulated /
1082
- * unregulated bucket names are exposed on the datalake response as
1083
- * `regulated_cloud_storage.bucket` / `unregulated_cloud_storage.bucket`.
1084
- *
1085
- * ### Failure surfacing
1086
- *
1087
- * On a `{:error, _}` ingest response the platform returns `422` with an
1088
- * `error` string. For pipeline failures (per-row Oban job exceptions),
1089
- * the DataActivationLog row's `rows_ingested` will be lower than the
1090
- * submitted count; per-row diagnostics live in the Oban job table
1091
- * (`oban_jobs.errors`) keyed by `batch_id`. There is no `error.json`
1092
- * artifact on the DAC path — that convention is workflow-only.
1033
+ * Trigger a manual run of a Data Activation Client
1093
1034
  *
1035
+ * Enqueues a one-off fetch/ingest pipeline run. Empty body or omitted `tool_call` runs with the DAC's persisted `tool_call`. Supplying a `tool_call` map applies a one-shot polymorphic override for this run only — the persisted DAC record is not modified.
1094
1036
  */
1095
- export const platformApiDataActivationClientControllerIngest = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerIngestData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerIngestResponses, PlatformApiDataActivationClientControllerIngestErrors, ThrowOnError>({
1037
+ export const platformApiDataActivationClientControllerRunManually = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerRunManuallyData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerRunManuallyResponses, PlatformApiDataActivationClientControllerRunManuallyErrors, ThrowOnError>({
1096
1038
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1097
- body: vPlatformApiDataActivationClientControllerIngestBody,
1098
- path: vPlatformApiDataActivationClientControllerIngestPath,
1039
+ body: v.optional(vPlatformApiDataActivationClientControllerRunManuallyBody),
1040
+ path: vPlatformApiDataActivationClientControllerRunManuallyPath,
1099
1041
  query: v.optional(v.never())
1100
1042
  }), data),
1101
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerIngestResponse, data),
1043
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerRunManuallyResponse, data),
1102
1044
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1103
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/ingest',
1045
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/run-manually',
1104
1046
  ...options,
1105
1047
  headers: {
1106
1048
  'Content-Type': 'application/json',
@@ -1109,76 +1051,53 @@ export const platformApiDataActivationClientControllerIngest = <ThrowOnError ext
1109
1051
  });
1110
1052
 
1111
1053
  /**
1112
- * Force-refresh a batch run log
1054
+ * Delete an AI agent
1113
1055
  *
1114
- * Triggers an immediate refresh of the batch run log metrics and merged artifacts.
1056
+ * Deletes an AI agent. Returns 409 if the agent is attached to a workflow.
1115
1057
  */
1116
- export const platformApiAgenticWorkflowOperationsControllerBatchLogRefresh = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshErrors, ThrowOnError>({
1058
+ export const platformApiAiAgentControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiAiAgentControllerDeleteResponses, PlatformApiAiAgentControllerDeleteErrors, ThrowOnError>({
1117
1059
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1118
1060
  body: v.optional(v.never()),
1119
- path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshPath,
1061
+ path: vPlatformApiAiAgentControllerDeletePath,
1120
1062
  query: v.optional(v.never())
1121
1063
  }), data),
1122
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponse, data),
1064
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerDeleteResponse, data),
1123
1065
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1124
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/refresh',
1066
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}',
1125
1067
  ...options
1126
1068
  });
1127
1069
 
1128
1070
  /**
1129
- * Run workflow for matching records
1130
- *
1131
- * Executes the workflow for all dataset records matching the SQL WHERE clause.
1132
- * Creates sampled events and enqueues run_workflow jobs. Returns the batch ID
1133
- * and enqueued count. A WorkflowRunLog is created to track batch-level
1134
- * progress, polled by a daily DynamicCron.
1135
- *
1136
- * ## Per-step artifacts (audit trail)
1137
- *
1138
- * Each per-row WorkflowExecutionLog (WEL) writes a fixed set of JSON
1139
- * artifacts to the datalake's regulated cloud-storage bucket. The path is
1140
- * deterministic and convention-driven — there is no separate listing
1141
- * endpoint:
1142
- *
1143
- * workflows/{workflow_id}/executions/{wel_id}/event.json
1144
- * workflows/{workflow_id}/executions/{wel_id}/filter.json
1145
- * workflows/{workflow_id}/executions/{wel_id}/enrichment.json
1146
- * workflows/{workflow_id}/executions/{wel_id}/error.json # only on failure
1147
- *
1148
- * | File | Written by stage | Body |
1149
- * | ----------------- | -------------------------------------- | ------------------------------------------------------------------ |
1150
- * | `event.json` | context build | full WorkflowContext (event_dataset, mdm_output, additional_context)|
1151
- * | `filter.json` | filter eval (both pass and reject) | `{filter_expression, filter_result: bool}` |
1152
- * | `enrichment.json` | enrichment terminal (success / skip / fail) | `{status: "completed" \| "failed" \| "skipped", <agent_slug>: ...}` |
1153
- * | `error.json` | ANY pipeline failure | `{stage, error_code, ai_agent_slug, error_message, detail}` |
1154
- *
1155
- * `error.json`'s presence IS the failure signal — `WEL.error_message`
1156
- * carries only a code-grade summary; the rich URL/HTTP-status/transport
1157
- * detail lives ONLY in `error.json["detail"]`. Engineers debugging a
1158
- * failed run should download `error.json` for full context.
1159
- *
1160
- * ### Fetching an artifact
1161
- *
1162
- * Use the standard datalake download-link endpoint
1163
- * (`POST /api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link`)
1164
- * with `bucket = <regulated bucket>` and the convention key above. Example:
1165
- *
1166
- * POST /api/v1/tenants/acme/datalakes/clinical/download-link
1167
- * { "bucket": "clinical-regulated", "key": "workflows/<wf_id>/executions/<wel_id>/error.json" }
1071
+ * Get an AI agent
1168
1072
  *
1169
- * The response carries a short-lived signed URL. The regulated bucket is
1170
- * exposed on the datalake response as `regulated_cloud_storage.bucket`.
1073
+ * Returns a single AI agent by ID.
1074
+ */
1075
+ export const platformApiAiAgentControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAiAgentControllerShowResponses, PlatformApiAiAgentControllerShowErrors, ThrowOnError>({
1076
+ requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1077
+ body: v.optional(v.never()),
1078
+ path: vPlatformApiAiAgentControllerShowPath,
1079
+ query: v.optional(v.never())
1080
+ }), data),
1081
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerShowResponse, data),
1082
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
1083
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}',
1084
+ ...options
1085
+ });
1086
+
1087
+ /**
1088
+ * Replace an AI agent
1171
1089
  *
1090
+ * Replaces an AI agent with the full resource body. PUT semantics — all required fields must be present.
1172
1091
  */
1173
- export const platformApiAgenticWorkflowOperationsControllerRunWorkflow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerRunWorkflowData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponses, PlatformApiAgenticWorkflowOperationsControllerRunWorkflowErrors, ThrowOnError>({
1092
+ export const platformApiAiAgentControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiAiAgentControllerUpdateResponses, PlatformApiAiAgentControllerUpdateErrors, ThrowOnError>({
1174
1093
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1175
- body: vPlatformApiAgenticWorkflowOperationsControllerRunWorkflowBody,
1176
- path: vPlatformApiAgenticWorkflowOperationsControllerRunWorkflowPath,
1094
+ body: v.optional(vPlatformApiAiAgentControllerUpdateBody),
1095
+ path: vPlatformApiAiAgentControllerUpdatePath,
1177
1096
  query: v.optional(v.never())
1178
1097
  }), data),
1179
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponse, data),
1098
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAiAgentControllerUpdateResponse, data),
1180
1099
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1181
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/run-workflow',
1100
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}',
1182
1101
  ...options,
1183
1102
  headers: {
1184
1103
  'Content-Type': 'application/json',
@@ -1187,53 +1106,67 @@ export const platformApiAgenticWorkflowOperationsControllerRunWorkflow = <ThrowO
1187
1106
  });
1188
1107
 
1189
1108
  /**
1190
- * Delete an agentic workflow
1109
+ * Confirm a user (admin bypass)
1110
+ *
1111
+ * Marks a user account as confirmed without requiring an email-confirmation
1112
+ * token. Idempotent — confirming an already-confirmed user is a 200 no-op
1113
+ * that returns the existing `confirmed_at` timestamp.
1114
+ *
1115
+ * Wraps `Accounts.confirm_user!/1` verbatim — exactly the primitive that
1116
+ * backs the dev/admin email-confirm path in the LiveView UI. **Zero new
1117
+ * business logic.**
1118
+ *
1119
+ * Powerful primitive: bypasses the regular email-confirmation flow. Every
1120
+ * successful call is structured-logged with `caller_user_id` and
1121
+ * `target_user_id` for forensic trail.
1122
+ *
1123
+ * **Requires platform-admin authentication** (`User.role == :admin`).
1191
1124
  *
1192
- * Deletes a workflow and all associated actions, context datasets, and AI agent attachments.
1193
1125
  */
1194
- export const platformApiAgenticWorkflowControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiAgenticWorkflowControllerDeleteResponses, PlatformApiAgenticWorkflowControllerDeleteErrors, ThrowOnError>({
1126
+ export const platformApiAdminControllerConfirmUser = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdminControllerConfirmUserData, ThrowOnError>) => (options.client ?? client).put<PlatformApiAdminControllerConfirmUserResponses, PlatformApiAdminControllerConfirmUserErrors, ThrowOnError>({
1195
1127
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1196
1128
  body: v.optional(v.never()),
1197
- path: vPlatformApiAgenticWorkflowControllerDeletePath,
1129
+ path: vPlatformApiAdminControllerConfirmUserPath,
1198
1130
  query: v.optional(v.never())
1199
1131
  }), data),
1200
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerDeleteResponse, data),
1201
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
1202
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}',
1132
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAdminControllerConfirmUserResponse, data),
1133
+ security: [{ scheme: 'bearer', type: 'http' }],
1134
+ url: '/api/v1/admin/users/{id}/confirm',
1203
1135
  ...options
1204
1136
  });
1205
1137
 
1206
1138
  /**
1207
- * Get an agentic workflow
1139
+ * List connected apps
1208
1140
  *
1209
- * Returns a single workflow by ID with nested AI agents.
1141
+ * Returns a paginated list of connected apps for the authenticated tenant.
1210
1142
  */
1211
- export const platformApiAgenticWorkflowControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerShowResponses, PlatformApiAgenticWorkflowControllerShowErrors, ThrowOnError>({
1143
+ export const platformApiConnectedAppMgmtControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiConnectedAppMgmtControllerIndexResponses, PlatformApiConnectedAppMgmtControllerIndexErrors, ThrowOnError>({
1144
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1212
1145
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1213
1146
  body: v.optional(v.never()),
1214
- path: vPlatformApiAgenticWorkflowControllerShowPath,
1215
- query: v.optional(v.never())
1147
+ path: vPlatformApiConnectedAppMgmtControllerIndexPath,
1148
+ query: v.optional(vPlatformApiConnectedAppMgmtControllerIndexQuery)
1216
1149
  }), data),
1217
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerShowResponse, data),
1150
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerIndexResponse, data),
1218
1151
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1219
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}',
1152
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps',
1220
1153
  ...options
1221
1154
  });
1222
1155
 
1223
1156
  /**
1224
- * Replace an agentic workflow
1157
+ * Create a connected app
1225
1158
  *
1226
- * Replaces a workflow with the full resource body. PUT semantics — all required fields must be present. The `ai_agents` array replaces the current set of attached agents transactionally.
1159
+ * Creates a new connected app with automatic API key provisioning.
1227
1160
  */
1228
- export const platformApiAgenticWorkflowControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiAgenticWorkflowControllerUpdateResponses, PlatformApiAgenticWorkflowControllerUpdateErrors, ThrowOnError>({
1161
+ export const platformApiConnectedAppMgmtControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiConnectedAppMgmtControllerCreateResponses, PlatformApiConnectedAppMgmtControllerCreateErrors, ThrowOnError>({
1229
1162
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1230
- body: v.optional(vPlatformApiAgenticWorkflowControllerUpdateBody),
1231
- path: vPlatformApiAgenticWorkflowControllerUpdatePath,
1163
+ body: v.optional(vPlatformApiConnectedAppMgmtControllerCreateBody),
1164
+ path: vPlatformApiConnectedAppMgmtControllerCreatePath,
1232
1165
  query: v.optional(v.never())
1233
1166
  }), data),
1234
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerUpdateResponse, data),
1167
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerCreateResponse, data),
1235
1168
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1236
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}',
1169
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps',
1237
1170
  ...options,
1238
1171
  headers: {
1239
1172
  'Content-Type': 'application/json',
@@ -1242,20 +1175,62 @@ export const platformApiAgenticWorkflowControllerUpdate = <ThrowOnError extends
1242
1175
  });
1243
1176
 
1244
1177
  /**
1245
- * Replace a data source
1178
+ * Revoke current session
1179
+ *
1180
+ * Revokes the current Bearer session — deactivates the session and deletes
1181
+ * the linked UserToken. The Bearer token becomes immediately invalid.
1182
+ *
1183
+ * Only works with `Authorization: Bearer <session_token>` (not X-API-Key).
1184
+ *
1185
+ * **Requires Bearer authentication.**
1246
1186
  *
1247
- * Replaces a data source with the full resource body. PUT semantics — all required fields must be present.
1248
1187
  */
1249
- export const platformApiDataSourceControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiDataSourceControllerUpdateResponses, PlatformApiDataSourceControllerUpdateErrors, ThrowOnError>({
1250
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1188
+ export const platformApiSessionControllerDelete = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiSessionControllerDeleteData, ThrowOnError>) => (options?.client ?? client).delete<PlatformApiSessionControllerDeleteResponses, PlatformApiSessionControllerDeleteErrors, ThrowOnError>({
1251
1189
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1252
- body: v.optional(vPlatformApiDataSourceControllerUpdateBody),
1253
- path: vPlatformApiDataSourceControllerUpdatePath,
1254
- query: v.optional(vPlatformApiDataSourceControllerUpdateQuery)
1190
+ body: v.optional(v.never()),
1191
+ path: v.optional(v.never()),
1192
+ query: v.optional(v.never())
1255
1193
  }), data),
1256
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataSourceControllerUpdateResponse, data),
1257
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
1258
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}',
1194
+ security: [{ scheme: 'bearer', type: 'http' }],
1195
+ url: '/api/v1/sessions',
1196
+ ...options
1197
+ });
1198
+
1199
+ /**
1200
+ * Create a session (human auth)
1201
+ *
1202
+ * Exchange user credentials for a Bearer session token.
1203
+ *
1204
+ * Send `{email, password}` (with optional `tenant_slug`) to authenticate a
1205
+ * human user and receive a session token. Use the returned `session_token`
1206
+ * as `Authorization: Bearer <session_token>` on subsequent API requests.
1207
+ *
1208
+ * When `tenant_slug` is **omitted**, returns a tenant-less Bearer for
1209
+ * pre-tenant flows: admin operations under `/api/v1/admin/...` and creating
1210
+ * your first tenant via `POST /api/v1/tenants`. Tenant-scoped routes will
1211
+ * reject such tokens with 403.
1212
+ *
1213
+ * When `tenant_slug` is **provided**, returns a tenant-scoped Bearer with
1214
+ * the caller's membership role (or 401 if the user has no membership in
1215
+ * that tenant).
1216
+ *
1217
+ * Optionally specify `expires_in` (seconds) to control session duration.
1218
+ * Default: 86400 (24 hours). Maximum: 2592000 (30 days).
1219
+ *
1220
+ * For M2M (server-to-server) authentication, use `X-API-Key` header directly
1221
+ * on each request instead — no session exchange needed.
1222
+ *
1223
+ * **No authentication required** — this endpoint authenticates the caller.
1224
+ *
1225
+ */
1226
+ export const platformApiSessionControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiSessionControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiSessionControllerCreateResponses, PlatformApiSessionControllerCreateErrors, ThrowOnError>({
1227
+ requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1228
+ body: vPlatformApiSessionControllerCreateBody,
1229
+ path: v.optional(v.never()),
1230
+ query: v.optional(v.never())
1231
+ }), data),
1232
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiSessionControllerCreateResponse, data),
1233
+ url: '/api/v1/sessions',
1259
1234
  ...options,
1260
1235
  headers: {
1261
1236
  'Content-Type': 'application/json',
@@ -1264,77 +1239,80 @@ export const platformApiDataSourceControllerUpdate = <ThrowOnError extends boole
1264
1239
  });
1265
1240
 
1266
1241
  /**
1267
- * Show a single DAC processing log
1242
+ * Start or restart refresh polling for a batch run log
1268
1243
  *
1269
- * Returns a single `DataActivationLog` row scoped to this DAC. Returns 404 if the id belongs to a different client.
1244
+ * Creates a DynamicCron job to poll this batch. Idempotent if cron already exists, it's a no-op.
1270
1245
  */
1271
- export const platformApiDataActivationClientControllerLogShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerLogShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerLogShowResponses, PlatformApiDataActivationClientControllerLogShowErrors, ThrowOnError>({
1246
+ export const platformApiAgenticWorkflowOperationsControllerBatchLogStart = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogStartData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogStartErrors, ThrowOnError>({
1272
1247
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1273
1248
  body: v.optional(v.never()),
1274
- path: vPlatformApiDataActivationClientControllerLogShowPath,
1249
+ path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogStartPath,
1275
1250
  query: v.optional(v.never())
1276
1251
  }), data),
1277
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerLogShowResponse, data),
1252
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponse, data),
1278
1253
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1279
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/logs/{id}',
1254
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/start',
1280
1255
  ...options
1281
1256
  });
1282
1257
 
1283
1258
  /**
1284
- * List datalakes
1259
+ * Update message tracking fields for a page
1260
+ *
1261
+ * Updates tracking timestamps (opened_at, form_submitted_at) on the message
1262
+ * linked to a page token. Called by the connected app when a user opens a page
1263
+ * or submits a form.
1264
+ *
1265
+ * **Requires X-API-Key authentication.**
1285
1266
  *
1286
- * Returns a paginated list of datalakes for the authenticated tenant.
1287
1267
  */
1288
- export const platformApiDatalakeControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerIndexResponses, PlatformApiDatalakeControllerIndexErrors, ThrowOnError>({
1289
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1268
+ export const platformApiConnectedAppControllerUpdateMessageTracking = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppControllerUpdateMessageTrackingData, ThrowOnError>) => (options.client ?? client).patch<PlatformApiConnectedAppControllerUpdateMessageTrackingResponses, PlatformApiConnectedAppControllerUpdateMessageTrackingErrors, ThrowOnError>({
1290
1269
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1291
- body: v.optional(v.never()),
1292
- path: vPlatformApiDatalakeControllerIndexPath,
1293
- query: v.optional(vPlatformApiDatalakeControllerIndexQuery)
1270
+ body: vPlatformApiConnectedAppControllerUpdateMessageTrackingBody,
1271
+ path: vPlatformApiConnectedAppControllerUpdateMessageTrackingPath,
1272
+ query: v.optional(v.never())
1294
1273
  }), data),
1295
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerIndexResponse, data),
1274
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppControllerUpdateMessageTrackingResponse, data),
1296
1275
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1297
- url: '/api/v1/tenants/{tenant_slug}/datalakes',
1298
- ...options
1276
+ url: '/api/v1/tenants/{tenant_slug}/connected-apps/{slug}/update-message-tracking',
1277
+ ...options,
1278
+ headers: {
1279
+ 'Content-Type': 'application/json',
1280
+ ...options.headers
1281
+ }
1299
1282
  });
1300
1283
 
1301
1284
  /**
1302
- * Create a datalake
1285
+ * List agentic workflows
1303
1286
  *
1304
- * Creates a new datalake for the authenticated tenant.
1287
+ * Returns a paginated list of workflows for a datalake.
1305
1288
  */
1306
- export const platformApiDatalakeControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerCreateResponses, PlatformApiDatalakeControllerCreateErrors, ThrowOnError>({
1289
+ export const platformApiAgenticWorkflowControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerIndexResponses, PlatformApiAgenticWorkflowControllerIndexErrors, ThrowOnError>({
1307
1290
  querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1308
1291
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1309
- body: v.optional(vPlatformApiDatalakeControllerCreateBody),
1310
- path: vPlatformApiDatalakeControllerCreatePath,
1311
- query: v.optional(vPlatformApiDatalakeControllerCreateQuery)
1292
+ body: v.optional(v.never()),
1293
+ path: vPlatformApiAgenticWorkflowControllerIndexPath,
1294
+ query: v.optional(vPlatformApiAgenticWorkflowControllerIndexQuery)
1312
1295
  }), data),
1313
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerCreateResponse, data),
1296
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerIndexResponse, data),
1314
1297
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1315
- url: '/api/v1/tenants/{tenant_slug}/datalakes',
1316
- ...options,
1317
- headers: {
1318
- 'Content-Type': 'application/json',
1319
- ...options.headers
1320
- }
1298
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows',
1299
+ ...options
1321
1300
  });
1322
1301
 
1323
1302
  /**
1324
- * Create datalake upload link
1303
+ * Create an agentic workflow
1325
1304
  *
1326
- * Returns a presigned PUT URL for uploading a file (NDJSON or CSV) directly to the datalake's regulated cloud storage. The returned key lives under `uploads/<datalake_id>/` and can be passed to downstream endpoints (e.g. data activation client ingest-file) that accept a pre-uploaded storage key.
1305
+ * Creates a new workflow. Attach AI agents via the `ai_agents` array.
1327
1306
  */
1328
- export const platformApiDatalakeControllerCreateUploadLink = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerCreateUploadLinkData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerCreateUploadLinkResponses, PlatformApiDatalakeControllerCreateUploadLinkErrors, ThrowOnError>({
1329
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1307
+ export const platformApiAgenticWorkflowControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowControllerCreateResponses, PlatformApiAgenticWorkflowControllerCreateErrors, ThrowOnError>({
1330
1308
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1331
- body: vPlatformApiDatalakeControllerCreateUploadLinkBody,
1332
- path: vPlatformApiDatalakeControllerCreateUploadLinkPath,
1333
- query: v.optional(vPlatformApiDatalakeControllerCreateUploadLinkQuery)
1309
+ body: v.optional(vPlatformApiAgenticWorkflowControllerCreateBody),
1310
+ path: vPlatformApiAgenticWorkflowControllerCreatePath,
1311
+ query: v.optional(v.never())
1334
1312
  }), data),
1335
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerCreateUploadLinkResponse, data),
1313
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerCreateResponse, data),
1336
1314
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1337
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/upload-link',
1315
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows',
1338
1316
  ...options,
1339
1317
  headers: {
1340
1318
  'Content-Type': 'application/json',
@@ -1343,121 +1321,105 @@ export const platformApiDatalakeControllerCreateUploadLink = <ThrowOnError exten
1343
1321
  });
1344
1322
 
1345
1323
  /**
1346
- * Execute an individual action for a dataset record
1324
+ * Get DAC dataset metadata
1347
1325
  *
1348
- * Executes a single workflow action identified by decision_key for the given dataset record, bypassing filter and decision evaluation
1326
+ * Returns a markdown document describing the fields of each dataset connected to this data activation client via its interoperability contracts.
1349
1327
  */
1350
- export const platformApiAgenticWorkflowOperationsControllerExecute = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerExecuteData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerExecuteResponses, PlatformApiAgenticWorkflowOperationsControllerExecuteErrors, ThrowOnError>({
1328
+ export const platformApiDataActivationClientControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerMetadataResponses, PlatformApiDataActivationClientControllerMetadataErrors, ThrowOnError>({
1351
1329
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1352
- body: vPlatformApiAgenticWorkflowOperationsControllerExecuteBody,
1353
- path: vPlatformApiAgenticWorkflowOperationsControllerExecutePath,
1330
+ body: v.optional(v.never()),
1331
+ path: vPlatformApiDataActivationClientControllerMetadataPath,
1354
1332
  query: v.optional(v.never())
1355
1333
  }), data),
1356
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerExecuteResponse, data),
1334
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerMetadataResponse, data),
1357
1335
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1358
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/execute',
1359
- ...options,
1360
- headers: {
1361
- 'Content-Type': 'application/json',
1362
- ...options.headers
1363
- }
1336
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/metadata',
1337
+ ...options
1364
1338
  });
1365
1339
 
1366
1340
  /**
1367
- * Accept a tenant invitation
1368
- *
1369
- * Accepts a pending invitation addressed to the authenticated user, creating
1370
- * a `Membership` and deleting the invitation. Mirrors the LiveView flow at
1371
- * `/app/users/tenant-invitations` → "Accept" button. Wraps
1372
- * `Tenants.accept_invitation!/2` verbatim.
1373
- *
1374
- * The function-level guard `get_invitation_by_user!/2` ensures the invitation
1375
- * is addressed to the caller — cross-user acceptance returns 404.
1376
- *
1377
- * Requires any Bearer (the recipient often has only a tenant-less Bearer at
1378
- * this point — they just signed up and haven't joined a tenant yet).
1341
+ * Stop refresh polling for a batch run log
1379
1342
  *
1343
+ * Deletes the DynamicCron job that polls this batch. The batch log is NOT deleted.
1380
1344
  */
1381
- export const platformApiInvitationControllerAccept = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInvitationControllerAcceptData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInvitationControllerAcceptResponses, PlatformApiInvitationControllerAcceptErrors, ThrowOnError>({
1345
+ export const platformApiAgenticWorkflowOperationsControllerBatchLogStop = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogStopData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogStopErrors, ThrowOnError>({
1382
1346
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1383
1347
  body: v.optional(v.never()),
1384
- path: vPlatformApiInvitationControllerAcceptPath,
1348
+ path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogStopPath,
1385
1349
  query: v.optional(v.never())
1386
1350
  }), data),
1387
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInvitationControllerAcceptResponse, data),
1388
- security: [{ scheme: 'bearer', type: 'http' }],
1389
- url: '/api/v1/invitations/{id}/accept',
1351
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponse, data),
1352
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
1353
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/stop',
1390
1354
  ...options
1391
1355
  });
1392
1356
 
1393
1357
  /**
1394
- * Get a batch run log
1358
+ * List processing logs for a Data Activation Client
1395
1359
  *
1396
- * Returns a single batch-level workflow run log with merged artifacts.
1360
+ * Returns a Flop-paginated list of `DataActivationLog` rows for this DAC. One log per `(batch_id, dataset_table)` — a single run produces multiple log rows, one per dataset table the DAC writes into. Filter or group client-side on `batch_id` to reconstruct a batch-level view.
1397
1361
  */
1398
- export const platformApiAgenticWorkflowOperationsControllerBatchLogShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogShowErrors, ThrowOnError>({
1362
+ export const platformApiDataActivationClientControllerLogsIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerLogsIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerLogsIndexResponses, PlatformApiDataActivationClientControllerLogsIndexErrors, ThrowOnError>({
1363
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1399
1364
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1400
1365
  body: v.optional(v.never()),
1401
- path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogShowPath,
1402
- query: v.optional(v.never())
1366
+ path: vPlatformApiDataActivationClientControllerLogsIndexPath,
1367
+ query: v.optional(vPlatformApiDataActivationClientControllerLogsIndexQuery)
1403
1368
  }), data),
1404
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponse, data),
1369
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerLogsIndexResponse, data),
1405
1370
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1406
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}',
1371
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/logs',
1407
1372
  ...options
1408
1373
  });
1409
1374
 
1410
1375
  /**
1411
- * Get contract field metadata
1376
+ * Delete a tool
1412
1377
  *
1413
- * Returns a markdown document describing the fields of the contract's target resource type. Combines `@moduledoc` (resource description) and `@typedoc` (field definitions) from the schema.
1378
+ * Deletes a tool. Returns 409 if the tool is referenced by another resource.
1414
1379
  */
1415
- export const platformApiInteroperabilityContractControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiInteroperabilityContractControllerMetadataResponses, PlatformApiInteroperabilityContractControllerMetadataErrors, ThrowOnError>({
1416
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1380
+ export const platformApiToolControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiToolControllerDeleteResponses, PlatformApiToolControllerDeleteErrors, ThrowOnError>({
1417
1381
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1418
1382
  body: v.optional(v.never()),
1419
- path: vPlatformApiInteroperabilityContractControllerMetadataPath,
1420
- query: v.optional(vPlatformApiInteroperabilityContractControllerMetadataQuery)
1383
+ path: vPlatformApiToolControllerDeletePath,
1384
+ query: v.optional(v.never())
1421
1385
  }), data),
1422
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInteroperabilityContractControllerMetadataResponse, data),
1386
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerDeleteResponse, data),
1423
1387
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1424
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{slug}/metadata',
1388
+ url: '/api/v1/tenants/{tenant_slug}/tools/{id}',
1425
1389
  ...options
1426
1390
  });
1427
1391
 
1428
1392
  /**
1429
- * List interoperability contracts
1393
+ * Get a tool
1430
1394
  *
1431
- * Returns a paginated list of contracts scoped to the datalake.
1395
+ * Returns a single tool by ID.
1432
1396
  */
1433
- export const platformApiInteroperabilityContractControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiInteroperabilityContractControllerIndexResponses, PlatformApiInteroperabilityContractControllerIndexErrors, ThrowOnError>({
1434
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1397
+ export const platformApiToolControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiToolControllerShowResponses, PlatformApiToolControllerShowErrors, ThrowOnError>({
1435
1398
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1436
1399
  body: v.optional(v.never()),
1437
- path: vPlatformApiInteroperabilityContractControllerIndexPath,
1438
- query: v.optional(vPlatformApiInteroperabilityContractControllerIndexQuery)
1400
+ path: vPlatformApiToolControllerShowPath,
1401
+ query: v.optional(v.never())
1439
1402
  }), data),
1440
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInteroperabilityContractControllerIndexResponse, data),
1403
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerShowResponse, data),
1441
1404
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1442
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts',
1405
+ url: '/api/v1/tenants/{tenant_slug}/tools/{id}',
1443
1406
  ...options
1444
1407
  });
1445
1408
 
1446
1409
  /**
1447
- * Create an interoperability contract
1410
+ * Replace a tool
1448
1411
  *
1449
- * Creates a new contract. `slug` is auto-generated from `name` on insert.
1412
+ * Replaces a tool with the full resource body. PUT semantics all required fields must be present.
1450
1413
  */
1451
- export const platformApiInteroperabilityContractControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInteroperabilityContractControllerCreateResponses, PlatformApiInteroperabilityContractControllerCreateErrors, ThrowOnError>({
1452
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1414
+ export const platformApiToolControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiToolControllerUpdateResponses, PlatformApiToolControllerUpdateErrors, ThrowOnError>({
1453
1415
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1454
- body: v.optional(vPlatformApiInteroperabilityContractControllerCreateBody),
1455
- path: vPlatformApiInteroperabilityContractControllerCreatePath,
1456
- query: v.optional(vPlatformApiInteroperabilityContractControllerCreateQuery)
1416
+ body: v.optional(vPlatformApiToolControllerUpdateBody),
1417
+ path: vPlatformApiToolControllerUpdatePath,
1418
+ query: v.optional(v.never())
1457
1419
  }), data),
1458
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInteroperabilityContractControllerCreateResponse, data),
1420
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerUpdateResponse, data),
1459
1421
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1460
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts',
1422
+ url: '/api/v1/tenants/{tenant_slug}/tools/{id}',
1461
1423
  ...options,
1462
1424
  headers: {
1463
1425
  'Content-Type': 'application/json',
@@ -1466,62 +1428,93 @@ export const platformApiInteroperabilityContractControllerCreate = <ThrowOnError
1466
1428
  });
1467
1429
 
1468
1430
  /**
1469
- * List the authenticated user's pending invitations
1431
+ * Get workflow metadata
1470
1432
  *
1471
- * Returns invitations addressed to the authenticated user that have not
1472
- * yet been accepted. Mirrors the LiveView at `/app/users/tenant-invitations`
1473
- * that recipients see after sign-in. Wraps `Tenants.list_invitations_by_user/1`
1474
- * verbatim always filtered to the current user, never accepts a query
1475
- * parameter that could leak another user's invitations.
1433
+ * Returns a markdown document describing the workflow's variable pipeline available variables at each node (event dataset, MDM, context datasets, enrichment, filter, decision, actions).
1434
+ */
1435
+ export const platformApiAgenticWorkflowControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerMetadataResponses, PlatformApiAgenticWorkflowControllerMetadataErrors, ThrowOnError>({
1436
+ requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1437
+ body: v.optional(v.never()),
1438
+ path: vPlatformApiAgenticWorkflowControllerMetadataPath,
1439
+ query: v.optional(v.never())
1440
+ }), data),
1441
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowControllerMetadataResponse, data),
1442
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
1443
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}/metadata',
1444
+ ...options
1445
+ });
1446
+
1447
+ /**
1448
+ * Health check
1476
1449
  *
1477
- * Requires any Bearer (tenant-less is fine — recipients typically don't
1478
- * have tenant scope yet at this point in the bootstrap flow).
1450
+ * Public health check endpoint that returns:
1451
+ * - Application version
1452
+ * - Database connectivity status (SELECT 1 query)
1453
+ * - Current timestamp
1454
+ *
1455
+ * **No authentication required.**
1479
1456
  *
1480
1457
  */
1481
- export const platformApiInvitationControllerIndex = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiInvitationControllerIndexData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiInvitationControllerIndexResponses, PlatformApiInvitationControllerIndexErrors, ThrowOnError>({
1458
+ export const platformApiPingControllerPing = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiPingControllerPingData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiPingControllerPingResponses, PlatformApiPingControllerPingErrors, ThrowOnError>({
1482
1459
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1483
1460
  body: v.optional(v.never()),
1484
1461
  path: v.optional(v.never()),
1485
1462
  query: v.optional(v.never())
1486
1463
  }), data),
1487
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInvitationControllerIndexResponse, data),
1488
- security: [{ scheme: 'bearer', type: 'http' }],
1489
- url: '/api/v1/invitations',
1464
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiPingControllerPingResponse, data),
1465
+ url: '/api/ping',
1490
1466
  ...options
1491
1467
  });
1492
1468
 
1493
1469
  /**
1494
- * List generic tables
1470
+ * Sync routes
1495
1471
  *
1496
- * Returns a paginated list of generic tables for the datalake (custom tables + system tables for the data domain).
1472
+ * Enqueues a background job to fetch routes from the connected app's `/.well-known/routes.json` endpoint and update the stored routes.
1497
1473
  */
1498
- export const platformApiGenericTableControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiGenericTableControllerIndexResponses, PlatformApiGenericTableControllerIndexErrors, ThrowOnError>({
1474
+ export const platformApiConnectedAppMgmtControllerSyncRoutes = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerSyncRoutesData, ThrowOnError>) => (options.client ?? client).post<PlatformApiConnectedAppMgmtControllerSyncRoutesResponses, PlatformApiConnectedAppMgmtControllerSyncRoutesErrors, ThrowOnError>({
1475
+ requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1476
+ body: v.optional(v.never()),
1477
+ path: vPlatformApiConnectedAppMgmtControllerSyncRoutesPath,
1478
+ query: v.optional(v.never())
1479
+ }), data),
1480
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerSyncRoutesResponse, data),
1481
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
1482
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps/{id}/sync-routes',
1483
+ ...options
1484
+ });
1485
+
1486
+ /**
1487
+ * List data activation clients
1488
+ *
1489
+ * Returns a paginated list of DACs for the datalake in the path.
1490
+ */
1491
+ export const platformApiDataActivationClientControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerIndexResponses, PlatformApiDataActivationClientControllerIndexErrors, ThrowOnError>({
1499
1492
  querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1500
1493
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1501
1494
  body: v.optional(v.never()),
1502
- path: vPlatformApiGenericTableControllerIndexPath,
1503
- query: v.optional(vPlatformApiGenericTableControllerIndexQuery)
1495
+ path: vPlatformApiDataActivationClientControllerIndexPath,
1496
+ query: v.optional(vPlatformApiDataActivationClientControllerIndexQuery)
1504
1497
  }), data),
1505
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiGenericTableControllerIndexResponse, data),
1498
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerIndexResponse, data),
1506
1499
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1507
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables',
1500
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients',
1508
1501
  ...options
1509
1502
  });
1510
1503
 
1511
1504
  /**
1512
- * Create a generic table
1505
+ * Create a data activation client
1513
1506
  *
1514
- * Creates a new custom generic table within the datalake.
1507
+ * Creates a new DAC. `slug` is auto-generated from `name`. `tool_call` is a polymorphic object whose shape depends on the `tool_call_type` discriminator — see `tool_call_type` enum for valid variants (RESTCall, SQLQueryCall, SFTPCall, SharePointExcelCall, AWSLambdaCall, ManualUploadCall, S3Call).
1515
1508
  */
1516
- export const platformApiGenericTableControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiGenericTableControllerCreateResponses, PlatformApiGenericTableControllerCreateErrors, ThrowOnError>({
1509
+ export const platformApiDataActivationClientControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerCreateResponses, PlatformApiDataActivationClientControllerCreateErrors, ThrowOnError>({
1517
1510
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1518
- body: v.optional(vPlatformApiGenericTableControllerCreateBody),
1519
- path: vPlatformApiGenericTableControllerCreatePath,
1511
+ body: v.optional(vPlatformApiDataActivationClientControllerCreateBody),
1512
+ path: vPlatformApiDataActivationClientControllerCreatePath,
1520
1513
  query: v.optional(v.never())
1521
1514
  }), data),
1522
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiGenericTableControllerCreateResponse, data),
1515
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerCreateResponse, data),
1523
1516
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1524
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables',
1517
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients',
1525
1518
  ...options,
1526
1519
  headers: {
1527
1520
  'Content-Type': 'application/json',
@@ -1530,55 +1523,60 @@ export const platformApiGenericTableControllerCreate = <ThrowOnError extends boo
1530
1523
  });
1531
1524
 
1532
1525
  /**
1533
- * List accessible tenants
1526
+ * Sign up a new user
1534
1527
  *
1535
- * Returns a paginated list of tenants accessible to the authenticated identity.
1528
+ * Register a new user account. Mirrors the `/auth/register` LiveView form
1529
+ * submission shape — wraps `Accounts.register_user/2` verbatim with no
1530
+ * business-logic divergence.
1536
1531
  *
1537
- * - **Bearer token**: returns all tenants the user has membership in.
1538
- * - **X-API-Key**: returns the single tenant the API key is scoped to.
1532
+ * The created user is **unconfirmed** and has **no tenant memberships**. To
1533
+ * obtain a Bearer token, the user must first be confirmed (via the email
1534
+ * confirmation flow in production, or via `PUT /api/v1/admin/users/:id/confirm`
1535
+ * in test bootstrap), then exchange credentials at `POST /api/v1/sessions`.
1536
+ *
1537
+ * No authentication required — this endpoint is the entry point for new users.
1539
1538
  *
1540
1539
  */
1541
- export const platformApiTenantControllerIndex = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiTenantControllerIndexData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiTenantControllerIndexResponses, PlatformApiTenantControllerIndexErrors, ThrowOnError>({
1542
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1540
+ export const platformApiAuthControllerSignUp = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAuthControllerSignUpData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAuthControllerSignUpResponses, PlatformApiAuthControllerSignUpErrors, ThrowOnError>({
1543
1541
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1544
- body: v.optional(v.never()),
1542
+ body: vPlatformApiAuthControllerSignUpBody,
1545
1543
  path: v.optional(v.never()),
1546
- query: v.optional(vPlatformApiTenantControllerIndexQuery)
1544
+ query: v.optional(v.never())
1547
1545
  }), data),
1548
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiTenantControllerIndexResponse, data),
1549
- security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],
1550
- url: '/api/v1/tenants',
1551
- ...options
1546
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAuthControllerSignUpResponse, data),
1547
+ url: '/api/v1/auth/sign-up',
1548
+ ...options,
1549
+ headers: {
1550
+ 'Content-Type': 'application/json',
1551
+ ...options.headers
1552
+ }
1552
1553
  });
1553
1554
 
1554
1555
  /**
1555
- * Create a tenant
1556
+ * Verify subject identity
1556
1557
  *
1557
- * Creates a new tenant and an `:admin` membership for the authenticated user.
1558
- * Wraps `Platform.Tenants.create_tenant/3` verbatim — same primitive that
1559
- * backs the `/app/tenants/new` LiveView.
1558
+ * Verify a subject's identity against their master record using fuzzy matching.
1560
1559
  *
1561
- * On success returns a regular `SessionResponse` carrying a freshly-minted
1562
- * **tenant-scoped Bearer** (`session_token`), the new tenant, and the
1563
- * membership role. Callers swap their tenant-less Bearer for this token
1564
- * and proceed with tenant-scoped workno second sign-in round-trip.
1560
+ * Supports verification by:
1561
+ * - **family_name** Jaro distance >= 0.85
1562
+ * - **given_name** Jaro distance >= 0.80
1563
+ * - **birth_date**Fuzzy component matching >= 0.80
1564
+ * - **identifiers** — Exact (system, value) match
1565
1565
  *
1566
- * The user must be confirmed (`confirmed_at IS NOT NULL`); unconfirmed
1567
- * callers receive 403. Duplicate tenant names (slug collision) return 422.
1566
+ * At least one verification field is required.
1568
1567
  *
1569
- * Requires `Authorization: Bearer <token>` (X-API-Key cannot create tenants —
1570
- * it carries no platform-user identity to bind the membership to).
1568
+ * **Requires X-API-Key authentication.**
1571
1569
  *
1572
1570
  */
1573
- export const platformApiTenantControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiTenantControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiTenantControllerCreateResponses, PlatformApiTenantControllerCreateErrors, ThrowOnError>({
1571
+ export const platformApiMdmControllerVerify = <ThrowOnError extends boolean = false>(options: Options<PlatformApiMdmControllerVerifyData, ThrowOnError>) => (options.client ?? client).post<PlatformApiMdmControllerVerifyResponses, PlatformApiMdmControllerVerifyErrors, ThrowOnError>({
1574
1572
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1575
- body: vPlatformApiTenantControllerCreateBody,
1576
- path: v.optional(v.never()),
1573
+ body: vPlatformApiMdmControllerVerifyBody,
1574
+ path: vPlatformApiMdmControllerVerifyPath,
1577
1575
  query: v.optional(v.never())
1578
- }), data),
1579
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiTenantControllerCreateResponse, data),
1580
- security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],
1581
- url: '/api/v1/tenants',
1576
+ }), data),
1577
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiMdmControllerVerifyResponse, data),
1578
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
1579
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/mdm/verify',
1582
1580
  ...options,
1583
1581
  headers: {
1584
1582
  'Content-Type': 'application/json',
@@ -1587,36 +1585,36 @@ export const platformApiTenantControllerCreate = <ThrowOnError extends boolean =
1587
1585
  });
1588
1586
 
1589
1587
  /**
1590
- * Get schema metadata for a specific dataset type
1588
+ * Get a connected app
1591
1589
  *
1592
- * Returns a markdown document describing the fields available on a dataset type. For standard datasets (patient, appointment, etc.) returns the schema moduledoc. For generic tables, pass the generic_table_id query parameter.
1590
+ * Returns a single connected app by ID.
1593
1591
  */
1594
- export const platformApiDatasetControllerDatasetMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerDatasetMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatasetControllerDatasetMetadataResponses, PlatformApiDatasetControllerDatasetMetadataErrors, ThrowOnError>({
1592
+ export const platformApiConnectedAppMgmtControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiConnectedAppMgmtControllerShowResponses, PlatformApiConnectedAppMgmtControllerShowErrors, ThrowOnError>({
1595
1593
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1596
1594
  body: v.optional(v.never()),
1597
- path: vPlatformApiDatasetControllerDatasetMetadataPath,
1598
- query: v.optional(vPlatformApiDatasetControllerDatasetMetadataQuery)
1595
+ path: vPlatformApiConnectedAppMgmtControllerShowPath,
1596
+ query: v.optional(v.never())
1599
1597
  }), data),
1600
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatasetControllerDatasetMetadataResponse, data),
1598
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerShowResponse, data),
1601
1599
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1602
- url: '/api/v1/datasets/{dataset_type}/metadata',
1600
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps/{id}',
1603
1601
  ...options
1604
1602
  });
1605
1603
 
1606
1604
  /**
1607
- * Test invoke a tool
1605
+ * Replace a connected app
1608
1606
  *
1609
- * Manually invokes a tool with caller-supplied parameters — the API equivalent of the 'Try It' panel in the tool form. Records a `ManualToolInvocation` for audit and returns the provider response (or error). Does not access tenant datasets, so no capability ceiling check is applied.
1607
+ * Replaces a connected app with the full resource body. PUT semantics all required fields must be present.
1610
1608
  */
1611
- export const platformApiToolControllerTestInvocation = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerTestInvocationData, ThrowOnError>) => (options.client ?? client).post<PlatformApiToolControllerTestInvocationResponses, PlatformApiToolControllerTestInvocationErrors, ThrowOnError>({
1609
+ export const platformApiConnectedAppMgmtControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppMgmtControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiConnectedAppMgmtControllerUpdateResponses, PlatformApiConnectedAppMgmtControllerUpdateErrors, ThrowOnError>({
1612
1610
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1613
- body: v.optional(vPlatformApiToolControllerTestInvocationBody),
1614
- path: vPlatformApiToolControllerTestInvocationPath,
1611
+ body: v.optional(vPlatformApiConnectedAppMgmtControllerUpdateBody),
1612
+ path: vPlatformApiConnectedAppMgmtControllerUpdatePath,
1615
1613
  query: v.optional(v.never())
1616
1614
  }), data),
1617
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerTestInvocationResponse, data),
1615
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppMgmtControllerUpdateResponse, data),
1618
1616
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1619
- url: '/api/v1/tenants/{tenant_slug}/tools/{id}/test-invocation',
1617
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/connected-apps/{id}',
1620
1618
  ...options,
1621
1619
  headers: {
1622
1620
  'Content-Type': 'application/json',
@@ -1625,37 +1623,29 @@ export const platformApiToolControllerTestInvocation = <ThrowOnError extends boo
1625
1623
  });
1626
1624
 
1627
1625
  /**
1628
- * Get a datalake
1626
+ * Invite a user to the tenant
1629
1627
  *
1630
- * Returns a single datalake by ID (non-sensitive metadata only).
1631
- */
1632
- export const platformApiDatalakeControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerShowResponses, PlatformApiDatalakeControllerShowErrors, ThrowOnError>({
1633
- querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1634
- requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1635
- body: v.optional(v.never()),
1636
- path: vPlatformApiDatalakeControllerShowPath,
1637
- query: v.optional(vPlatformApiDatalakeControllerShowQuery)
1638
- }), data),
1639
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerShowResponse, data),
1640
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
1641
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{id}',
1642
- ...options
1643
- });
1644
-
1645
- /**
1646
- * Create datalake download link
1628
+ * Creates a `tenant_admin`-issued invitation. Mirrors the LiveView flow at
1629
+ * `/app/team` → "Invite new member". Wraps `Tenants.send_tenant_invitation/3`
1630
+ * verbatim, including the email send.
1631
+ *
1632
+ * The `role` enum is **membership-level** (`member`, `researcher`, `admin`),
1633
+ * NOT the platform-wide `User.role` enum — privilege-escalation safe by
1634
+ * construction.
1635
+ *
1636
+ * Requires a tenant-scoped Bearer with membership role `:admin`
1637
+ * (`current_role.name == "tenant_admin"`).
1647
1638
  *
1648
- * Returns a presigned GET URL for an object stored in one of the datalake's cloud storage buckets (regulated or unregulated). Typical use: read a `DACRawLogFile.object_key` (`s3://bucket/key`) off a data-activation log row, split it into `bucket` and `key`, then POST here to obtain a short-lived download URL.
1649
1639
  */
1650
- export const platformApiDatalakeControllerCreateDownloadLink = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerCreateDownloadLinkData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerCreateDownloadLinkResponses, PlatformApiDatalakeControllerCreateDownloadLinkErrors, ThrowOnError>({
1640
+ export const platformApiInvitationControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInvitationControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInvitationControllerCreateResponses, PlatformApiInvitationControllerCreateErrors, ThrowOnError>({
1651
1641
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1652
- body: vPlatformApiDatalakeControllerCreateDownloadLinkBody,
1653
- path: vPlatformApiDatalakeControllerCreateDownloadLinkPath,
1642
+ body: vPlatformApiInvitationControllerCreateBody,
1643
+ path: vPlatformApiInvitationControllerCreatePath,
1654
1644
  query: v.optional(v.never())
1655
1645
  }), data),
1656
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerCreateDownloadLinkResponse, data),
1657
- security: [{ name: 'X-API-Key', type: 'apiKey' }],
1658
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link',
1646
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInvitationControllerCreateResponse, data),
1647
+ security: [{ scheme: 'bearer', type: 'http' }],
1648
+ url: '/api/v1/tenants/{tenant_slug}/invitations',
1659
1649
  ...options,
1660
1650
  headers: {
1661
1651
  'Content-Type': 'application/json',
@@ -1664,131 +1654,127 @@ export const platformApiDatalakeControllerCreateDownloadLink = <ThrowOnError ext
1664
1654
  });
1665
1655
 
1666
1656
  /**
1667
- * Download execution context
1657
+ * List workflow execution logs
1668
1658
  *
1669
- * Returns a presigned URL for downloading the execution context JSON from R2.
1659
+ * Returns a paginated list of per-event execution logs for a workflow.
1670
1660
  */
1671
- export const platformApiAgenticWorkflowOperationsControllerWorkflowLogDownload = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadErrors, ThrowOnError>({
1661
+ export const platformApiAgenticWorkflowOperationsControllerWorkflowLogsIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexErrors, ThrowOnError>({
1662
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1672
1663
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1673
1664
  body: v.optional(v.never()),
1674
- path: vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadPath,
1675
- query: v.optional(v.never())
1665
+ path: vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexPath,
1666
+ query: v.optional(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexQuery)
1676
1667
  }), data),
1677
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponse, data),
1668
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponse, data),
1678
1669
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1679
- url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/workflow-logs/{id}/download',
1670
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/workflow-logs',
1680
1671
  ...options
1681
1672
  });
1682
1673
 
1683
1674
  /**
1684
- * Verify current session
1685
- *
1686
- * Returns the current session's tenant, role, and identity information.
1675
+ * Page results from a UserSearch — outer SQL chunk + inner resource Flop
1687
1676
  *
1688
- * Works with both authentication methods:
1689
- * - `X-API-Key` header (M2M)
1690
- * - `Authorization: Bearer <session_token>` (human sessions)
1677
+ * Two-tier pagination at two layers:
1691
1678
  *
1692
- * Use this as a "who am I" endpoint to confirm credentials are valid and
1693
- * inspect the resolved tenant, role, and identity.
1679
+ * * **Outer** `outer_pagination[page]` / `outer_pagination[page_size]`
1680
+ * (defaults `1` / `1000`, max `1000`) pages cached IDs from
1681
+ * `search_results`. The cap is dictated by Postgres' `WHERE id IN (^ids)`
1682
+ * plan — past ~1k parameters the planner regresses.
1683
+ * * **Inner** — `inner_search[page]`, `inner_search[page_size]` (defaults
1684
+ * `1` / `20`), `inner_search[order_direction]` (sort on the schema's
1685
+ * `:global_search` compound), `inner_search[global_search]` (single
1686
+ * ILIKE-OR text-search knob).
1694
1687
  *
1695
- * **Requires authentication** (X-API-Key or Bearer token).
1688
+ * Response carries both metas under `meta.sql` and `meta.flop`. A caller
1689
+ * that only drives the inner page sees `meta.sql.has_next_page=true` when
1690
+ * the SQL search isn't exhausted; advancing `outer_pagination[page]`
1691
+ * fetches the next chunk.
1696
1692
  *
1697
1693
  */
1698
- export const platformApiSessionControllerVerify = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiSessionControllerVerifyData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiSessionControllerVerifyResponses, PlatformApiSessionControllerVerifyErrors, ThrowOnError>({
1694
+ export const platformApiDatasetControllerSearch = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerSearchData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatasetControllerSearchResponses, PlatformApiDatasetControllerSearchErrors, ThrowOnError>({
1699
1695
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1700
1696
  body: v.optional(v.never()),
1701
- path: v.optional(v.never()),
1702
- query: v.optional(v.never())
1697
+ path: vPlatformApiDatasetControllerSearchPath,
1698
+ query: v.optional(vPlatformApiDatasetControllerSearchQuery)
1703
1699
  }), data),
1704
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiSessionControllerVerifyResponse, data),
1705
- security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],
1706
- url: '/api/v1/sessions/verify',
1700
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatasetControllerSearchResponse, data),
1701
+ security: [{ name: 'X-API-Key', type: 'apiKey' }],
1702
+ url: '/api/v1/datasets/{dataset}/search',
1707
1703
  ...options
1708
1704
  });
1709
1705
 
1710
1706
  /**
1711
- * Enqueue datalake migrations
1712
- *
1713
- * Enqueues a `DatalakeMigrationWorker` Oban job that brings the datalake's
1714
- * per-tenant database to the current schema version. Required after
1715
- * `POST /datalakes`, which only persists the metadata row — it does NOT
1716
- * run migrations against the per-tenant DB. Without this step, every
1717
- * downstream resource that touches per-datalake tables
1718
- * (`data_activation_logs`, MDM tables, dataset tables) will fail with
1719
- * `relation … does not exist`.
1720
- *
1721
- * Asynchronous: returns 202 Accepted as soon as the job is enqueued.
1722
- * Callers poll `GET /datalakes/:id` and watch for `status: :ready`.
1723
- * Idempotent at the job level — re-enqueueing on a migrated datalake
1724
- * is a no-op once the worker completes.
1725
- *
1726
- * The LiveView "Migrate Datalake" button calls the same migrator
1727
- * synchronously inside the LiveView process.
1728
- *
1729
- * Requires a tenant-scoped Bearer with membership role `admin`.
1707
+ * Create and execute a SQL search for a dataset
1730
1708
  *
1709
+ * Creates a `UserSearch` row, runs `INSERT INTO search_results SELECT ... WHERE <search_query>` against the regulated schema, and returns the `UserSearch` resource (including `status`, `results_count`, and `error_message`). The session's `data_access_mode` controls which schema is queried.
1731
1710
  */
1732
- export const platformApiDatalakeControllerMigrate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerMigrateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerMigrateResponses, PlatformApiDatalakeControllerMigrateErrors, ThrowOnError>({
1711
+ export const platformApiDatasetControllerCreateUserSearch = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerCreateUserSearchData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatasetControllerCreateUserSearchResponses, PlatformApiDatasetControllerCreateUserSearchErrors, ThrowOnError>({
1733
1712
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1734
- body: v.optional(v.never()),
1735
- path: vPlatformApiDatalakeControllerMigratePath,
1736
- query: v.optional(v.never())
1713
+ body: v.optional(vPlatformApiDatasetControllerCreateUserSearchBody),
1714
+ path: vPlatformApiDatasetControllerCreateUserSearchPath,
1715
+ query: v.optional(vPlatformApiDatasetControllerCreateUserSearchQuery)
1737
1716
  }), data),
1738
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatalakeControllerMigrateResponse, data),
1717
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDatasetControllerCreateUserSearchResponse, data),
1739
1718
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1740
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/migrate',
1741
- ...options
1719
+ url: '/api/v1/datasets/{dataset}/user-searches',
1720
+ ...options,
1721
+ headers: {
1722
+ 'Content-Type': 'application/json',
1723
+ ...options.headers
1724
+ }
1742
1725
  });
1743
1726
 
1744
1727
  /**
1745
- * Delete a data activation client
1728
+ * List batch run logs
1746
1729
  *
1747
- * Deletes a DAC. Returns 422 if the DAC is a platform default (is_default=true). Returns 409 if referenced by other resources.
1730
+ * Returns a paginated list of batch-level workflow run logs.
1748
1731
  */
1749
- export const platformApiDataActivationClientControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiDataActivationClientControllerDeleteResponses, PlatformApiDataActivationClientControllerDeleteErrors, ThrowOnError>({
1732
+ export const platformApiAgenticWorkflowOperationsControllerBatchLogsIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexErrors, ThrowOnError>({
1733
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1750
1734
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1751
1735
  body: v.optional(v.never()),
1752
- path: vPlatformApiDataActivationClientControllerDeletePath,
1753
- query: v.optional(v.never())
1736
+ path: vPlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexPath,
1737
+ query: v.optional(vPlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexQuery)
1754
1738
  }), data),
1755
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerDeleteResponse, data),
1739
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponse, data),
1756
1740
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1757
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}',
1741
+ url: '/api/v1/tenants/{tenant_slug}/agentic-workflows/{workflow_slug}/batch-logs',
1758
1742
  ...options
1759
1743
  });
1760
1744
 
1761
1745
  /**
1762
- * Get a data activation client
1746
+ * List action status updaters
1763
1747
  *
1764
- * Returns a single DAC by datalake-scoped slug.
1748
+ * Returns a paginated list of action status updaters for the authenticated tenant.
1765
1749
  */
1766
- export const platformApiDataActivationClientControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerShowResponses, PlatformApiDataActivationClientControllerShowErrors, ThrowOnError>({
1750
+ export const platformApiActionStatusUpdaterControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiActionStatusUpdaterControllerIndexResponses, PlatformApiActionStatusUpdaterControllerIndexErrors, ThrowOnError>({
1751
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1767
1752
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1768
1753
  body: v.optional(v.never()),
1769
- path: vPlatformApiDataActivationClientControllerShowPath,
1770
- query: v.optional(v.never())
1754
+ path: vPlatformApiActionStatusUpdaterControllerIndexPath,
1755
+ query: v.optional(vPlatformApiActionStatusUpdaterControllerIndexQuery)
1771
1756
  }), data),
1772
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerShowResponse, data),
1757
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiActionStatusUpdaterControllerIndexResponse, data),
1773
1758
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1774
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}',
1759
+ url: '/api/v1/tenants/{tenant_slug}/action-status-updaters',
1775
1760
  ...options
1776
1761
  });
1777
1762
 
1778
1763
  /**
1779
- * Replace a data activation client
1764
+ * Create an action status updater
1780
1765
  *
1781
- * Replaces a DAC with the full resource body. PUT semantics — all required fields must be present. `slug` is immutable.
1766
+ * Creates a new action status updater for the authenticated tenant.
1782
1767
  */
1783
- export const platformApiDataActivationClientControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiDataActivationClientControllerUpdateResponses, PlatformApiDataActivationClientControllerUpdateErrors, ThrowOnError>({
1768
+ export const platformApiActionStatusUpdaterControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiActionStatusUpdaterControllerCreateResponses, PlatformApiActionStatusUpdaterControllerCreateErrors, ThrowOnError>({
1769
+ querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1784
1770
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1785
- body: v.optional(vPlatformApiDataActivationClientControllerUpdateBody),
1786
- path: vPlatformApiDataActivationClientControllerUpdatePath,
1787
- query: v.optional(v.never())
1771
+ body: v.optional(vPlatformApiActionStatusUpdaterControllerCreateBody),
1772
+ path: vPlatformApiActionStatusUpdaterControllerCreatePath,
1773
+ query: v.optional(vPlatformApiActionStatusUpdaterControllerCreateQuery)
1788
1774
  }), data),
1789
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiDataActivationClientControllerUpdateResponse, data),
1775
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiActionStatusUpdaterControllerCreateResponse, data),
1790
1776
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1791
- url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}',
1777
+ url: '/api/v1/tenants/{tenant_slug}/action-status-updaters',
1792
1778
  ...options,
1793
1779
  headers: {
1794
1780
  'Content-Type': 'application/json',
@@ -1797,37 +1783,51 @@ export const platformApiDataActivationClientControllerUpdate = <ThrowOnError ext
1797
1783
  });
1798
1784
 
1799
1785
  /**
1800
- * List tools
1786
+ * Run a contract against a payload (sandbox)
1801
1787
  *
1802
- * Returns a paginated list of tools for the authenticated tenant.
1788
+ * Runs the contract's `filter transform mdm_input` pipeline against the supplied JSON row. Stateless — no DB writes. Use for template authoring/testing.
1803
1789
  */
1804
- export const platformApiToolControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiToolControllerIndexResponses, PlatformApiToolControllerIndexErrors, ThrowOnError>({
1790
+ export const platformApiInteroperabilityContractControllerRun = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerRunData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInteroperabilityContractControllerRunResponses, PlatformApiInteroperabilityContractControllerRunErrors, ThrowOnError>({
1805
1791
  querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },
1806
1792
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1807
- body: v.optional(v.never()),
1808
- path: vPlatformApiToolControllerIndexPath,
1809
- query: v.optional(vPlatformApiToolControllerIndexQuery)
1793
+ body: vPlatformApiInteroperabilityContractControllerRunBody,
1794
+ path: vPlatformApiInteroperabilityContractControllerRunPath,
1795
+ query: v.optional(vPlatformApiInteroperabilityContractControllerRunQuery)
1810
1796
  }), data),
1811
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerIndexResponse, data),
1797
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiInteroperabilityContractControllerRunResponse, data),
1812
1798
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1813
- url: '/api/v1/tenants/{tenant_slug}/tools',
1814
- ...options
1799
+ url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{slug}/run',
1800
+ ...options,
1801
+ headers: {
1802
+ 'Content-Type': 'application/json',
1803
+ ...options.headers
1804
+ }
1815
1805
  });
1816
1806
 
1817
1807
  /**
1818
- * Create a tool
1808
+ * Resolve a short URL token to a page
1809
+ *
1810
+ * Given a connected app slug and a Puid short URL token, resolves the token to
1811
+ * the pre-stored route path and MDM subject ID. The Cloudflare app calls this
1812
+ * endpoint when a customer clicks a short URL, forwarding the original client
1813
+ * headers (user-agent, IP, country) in the request body.
1814
+ *
1815
+ * When the page token is linked to a message (via workflow action execution),
1816
+ * the regulated message details (raw body, channel, status) are included in
1817
+ * the response.
1818
+ *
1819
+ * **Requires X-API-Key authentication.**
1819
1820
  *
1820
- * Creates a new tool for the authenticated tenant.
1821
1821
  */
1822
- export const platformApiToolControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiToolControllerCreateResponses, PlatformApiToolControllerCreateErrors, ThrowOnError>({
1822
+ export const platformApiConnectedAppControllerResolvePage = <ThrowOnError extends boolean = false>(options: Options<PlatformApiConnectedAppControllerResolvePageData, ThrowOnError>) => (options.client ?? client).post<PlatformApiConnectedAppControllerResolvePageResponses, PlatformApiConnectedAppControllerResolvePageErrors, ThrowOnError>({
1823
1823
  requestValidator: async (data: unknown) => await v.parseAsync(v.object({
1824
- body: v.optional(vPlatformApiToolControllerCreateBody),
1825
- path: vPlatformApiToolControllerCreatePath,
1824
+ body: vPlatformApiConnectedAppControllerResolvePageBody,
1825
+ path: vPlatformApiConnectedAppControllerResolvePagePath,
1826
1826
  query: v.optional(v.never())
1827
1827
  }), data),
1828
- responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiToolControllerCreateResponse, data),
1828
+ responseValidator: async (data: unknown) => await v.parseAsync(vPlatformApiConnectedAppControllerResolvePageResponse, data),
1829
1829
  security: [{ name: 'X-API-Key', type: 'apiKey' }],
1830
- url: '/api/v1/tenants/{tenant_slug}/tools',
1830
+ url: '/api/v1/tenants/{tenant_slug}/connected-apps/{slug}/resolve-page',
1831
1831
  ...options,
1832
1832
  headers: {
1833
1833
  'Content-Type': 'application/json',