{"version":3,"file":"index.mjs","names":["lastEventId: string | undefined","retryDelay: number","requestInit: RequestInit","dataLines: Array<string>","eventName: string | undefined","data: unknown","joinedValues","values: string[]","style: ArraySeparatorStyle","search: string[]","buildUrl: Client['buildUrl']","entries: Array<[string, string]>","config","request: Client['request']","requestInit: ReqInit","request","response: Response","error","finalError","emptyData: any","data: any","jsonError: unknown","url","_buildUrl: Client['buildUrl']"],"sources":["../src/environments.generated.ts","../src/generated/core/bodySerializer.gen.ts","../src/generated/core/serverSentEvents.gen.ts","../src/generated/core/pathSerializer.gen.ts","../src/generated/core/utils.gen.ts","../src/generated/core/auth.gen.ts","../src/generated/client/utils.gen.ts","../src/generated/client/client.gen.ts","../src/generated/client.gen.ts","../src/generated/sdk.gen.ts","../src/generated/types.gen.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["// Generated from <monorepo-root>/openapi.yaml by scripts/gen-environments.ts — do not edit.\n\nexport interface EnvironmentConfig {\n  readonly base_url: string;\n  readonly description: string;\n}\n\nexport const ENVIRONMENTS = {\n  local: { base_url: \"http://localhost:4000\", description: \"Development server\" },\n  mock: { base_url: \"http://localhost:4010\", description: \"Mock server with limited state — spin up using alvera-cli (https://github.com/alvera-ai/homebrew-tap)\" },\n  demo: { base_url: \"https://demo.alvera.ai\", description: \"Demo server\" },\n  prod: { base_url: \"https://app.alvera.ai\", description: \"Prod Server\" },\n} as const satisfies Readonly<Record<string, EnvironmentConfig>>;\n\nexport const DEFAULT_ENVIRONMENT = \"prod\" as const;\n\nexport type EnvironmentName = keyof typeof ENVIRONMENTS;\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n  allowReserved?: boolean;\n  array?: Partial<SerializerOptions<ArrayStyle>>;\n  object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n  /**\n   * Per-parameter serialization overrides. When provided, these settings\n   * override the global array/object settings for specific parameter names.\n   */\n  parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (data: FormData, key: string, value: unknown): void => {\n  if (typeof value === 'string' || value instanceof Blob) {\n    data.append(key, value);\n  } else if (value instanceof Date) {\n    data.append(key, value.toISOString());\n  } else {\n    data.append(key, JSON.stringify(value));\n  }\n};\n\nconst serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value: unknown): void => {\n  if (typeof value === 'string') {\n    data.append(key, value);\n  } else {\n    data.append(key, JSON.stringify(value));\n  }\n};\n\nexport const formDataBodySerializer = {\n  bodySerializer: (body: unknown): FormData => {\n    const data = new FormData();\n\n    Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n      if (value === undefined || value === null) {\n        return;\n      }\n      if (Array.isArray(value)) {\n        value.forEach((v) => serializeFormDataPair(data, key, v));\n      } else {\n        serializeFormDataPair(data, key, value);\n      }\n    });\n\n    return data;\n  },\n};\n\nexport const jsonBodySerializer = {\n  bodySerializer: (body: unknown): string =>\n    JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),\n};\n\nexport const urlSearchParamsBodySerializer = {\n  bodySerializer: (body: unknown): string => {\n    const data = new URLSearchParams();\n\n    Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n      if (value === undefined || value === null) {\n        return;\n      }\n      if (Array.isArray(value)) {\n        value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n      } else {\n        serializeUrlSearchParamsPair(data, key, value);\n      }\n    });\n\n    return data.toString();\n  },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> &\n  Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n    /**\n     * Fetch API implementation. You can use this option to provide a custom\n     * fetch instance.\n     *\n     * @default globalThis.fetch\n     */\n    fetch?: typeof fetch;\n    /**\n     * Implementing clients can call request interceptors inside this hook.\n     */\n    onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n    /**\n     * Callback invoked when a network or parsing error occurs during streaming.\n     *\n     * This option applies only if the endpoint returns a stream of events.\n     *\n     * @param error The error that occurred.\n     */\n    onSseError?: (error: unknown) => void;\n    /**\n     * Callback invoked when an event is streamed from the server.\n     *\n     * This option applies only if the endpoint returns a stream of events.\n     *\n     * @param event Event streamed from the server.\n     * @returns Nothing (void).\n     */\n    onSseEvent?: (event: StreamEvent<TData>) => void;\n    serializedBody?: RequestInit['body'];\n    /**\n     * Default retry delay in milliseconds.\n     *\n     * This option applies only if the endpoint returns a stream of events.\n     *\n     * @default 3000\n     */\n    sseDefaultRetryDelay?: number;\n    /**\n     * Maximum number of retry attempts before giving up.\n     */\n    sseMaxRetryAttempts?: number;\n    /**\n     * Maximum retry delay in milliseconds.\n     *\n     * Applies only when exponential backoff is used.\n     *\n     * This option applies only if the endpoint returns a stream of events.\n     *\n     * @default 30000\n     */\n    sseMaxRetryDelay?: number;\n    /**\n     * Optional sleep function for retry backoff.\n     *\n     * Defaults to using `setTimeout`.\n     */\n    sseSleepFn?: (ms: number) => Promise<void>;\n    url: string;\n  };\n\nexport interface StreamEvent<TData = unknown> {\n  data: TData;\n  event?: string;\n  id?: string;\n  retry?: number;\n}\n\nexport type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {\n  stream: AsyncGenerator<\n    TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n    TReturn,\n    TNext\n  >;\n};\n\nexport function createSseClient<TData = unknown>({\n  onRequest,\n  onSseError,\n  onSseEvent,\n  responseTransformer,\n  responseValidator,\n  sseDefaultRetryDelay,\n  sseMaxRetryAttempts,\n  sseMaxRetryDelay,\n  sseSleepFn,\n  url,\n  ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n  let lastEventId: string | undefined;\n\n  const sleep = sseSleepFn ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n  const createStream = async function* () {\n    let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n    let attempt = 0;\n    const signal = options.signal ?? new AbortController().signal;\n\n    while (true) {\n      if (signal.aborted) break;\n\n      attempt++;\n\n      const headers =\n        options.headers instanceof Headers\n          ? options.headers\n          : new Headers(options.headers as Record<string, string> | undefined);\n\n      if (lastEventId !== undefined) {\n        headers.set('Last-Event-ID', lastEventId);\n      }\n\n      try {\n        const requestInit: RequestInit = {\n          redirect: 'follow',\n          ...options,\n          body: options.serializedBody,\n          headers,\n          signal,\n        };\n        let request = new Request(url, requestInit);\n        if (onRequest) {\n          request = await onRequest(url, requestInit);\n        }\n        // fetch must be assigned here, otherwise it would throw the error:\n        // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n        const _fetch = options.fetch ?? globalThis.fetch;\n        const response = await _fetch(request);\n\n        if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);\n\n        if (!response.body) throw new Error('No body in SSE response');\n\n        const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n\n        let buffer = '';\n\n        const abortHandler = () => {\n          try {\n            reader.cancel();\n          } catch {\n            // noop\n          }\n        };\n\n        signal.addEventListener('abort', abortHandler);\n\n        try {\n          while (true) {\n            const { done, value } = await reader.read();\n            if (done) break;\n            buffer += value;\n            buffer = buffer.replace(/\\r\\n?/g, '\\n'); // normalize line endings\n\n            const chunks = buffer.split('\\n\\n');\n            buffer = chunks.pop() ?? '';\n\n            for (const chunk of chunks) {\n              const lines = chunk.split('\\n');\n              const dataLines: Array<string> = [];\n              let eventName: string | undefined;\n\n              for (const line of lines) {\n                if (line.startsWith('data:')) {\n                  dataLines.push(line.replace(/^data:\\s*/, ''));\n                } else if (line.startsWith('event:')) {\n                  eventName = line.replace(/^event:\\s*/, '');\n                } else if (line.startsWith('id:')) {\n                  lastEventId = line.replace(/^id:\\s*/, '');\n                } else if (line.startsWith('retry:')) {\n                  const parsed = Number.parseInt(line.replace(/^retry:\\s*/, ''), 10);\n                  if (!Number.isNaN(parsed)) {\n                    retryDelay = parsed;\n                  }\n                }\n              }\n\n              let data: unknown;\n              let parsedJson = false;\n\n              if (dataLines.length) {\n                const rawData = dataLines.join('\\n');\n                try {\n                  data = JSON.parse(rawData);\n                  parsedJson = true;\n                } catch {\n                  data = rawData;\n                }\n              }\n\n              if (parsedJson) {\n                if (responseValidator) {\n                  await responseValidator(data);\n                }\n\n                if (responseTransformer) {\n                  data = await responseTransformer(data);\n                }\n              }\n\n              onSseEvent?.({\n                data,\n                event: eventName,\n                id: lastEventId,\n                retry: retryDelay,\n              });\n\n              if (dataLines.length) {\n                yield data as any;\n              }\n            }\n          }\n        } finally {\n          signal.removeEventListener('abort', abortHandler);\n          reader.releaseLock();\n        }\n\n        break; // exit loop on normal completion\n      } catch (error) {\n        // connection failed or aborted; retry after delay\n        onSseError?.(error);\n\n        if (sseMaxRetryAttempts !== undefined && attempt >= sseMaxRetryAttempts) {\n          break; // stop after firing error\n        }\n\n        // exponential backoff: double retry each attempt, cap at 30s\n        const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 30000);\n        await sleep(backoff);\n      }\n    }\n  };\n\n  const stream = createStream();\n\n  return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T> extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n  allowReserved?: boolean;\n  name: string;\n}\n\nexport interface SerializerOptions<T> {\n  /**\n   * @default true\n   */\n  explode: boolean;\n  style: T;\n}\n\nexport type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited' | 'deepObject';\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = 'label' | 'matrix' | 'simple';\nexport type ObjectStyle = 'form' | 'deepObject';\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n  value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle) => {\n  switch (style) {\n    case 'label':\n      return '.';\n    case 'matrix':\n      return ';';\n    case 'simple':\n      return ',';\n    default:\n      return '&';\n  }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle) => {\n  switch (style) {\n    case 'form':\n      return ',';\n    case 'pipeDelimited':\n      return '|';\n    case 'spaceDelimited':\n      return '%20';\n    default:\n      return ',';\n  }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle) => {\n  switch (style) {\n    case 'label':\n      return '.';\n    case 'matrix':\n      return ';';\n    case 'simple':\n      return ',';\n    default:\n      return '&';\n  }\n};\n\nexport const serializeArrayParam = ({\n  allowReserved,\n  explode,\n  name,\n  style,\n  value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n  value: unknown[];\n}) => {\n  if (!explode) {\n    const joinedValues = (\n      allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n    ).join(separatorArrayNoExplode(style));\n    switch (style) {\n      case 'label':\n        return `.${joinedValues}`;\n      case 'matrix':\n        return `;${name}=${joinedValues}`;\n      case 'simple':\n        return joinedValues;\n      default:\n        return `${name}=${joinedValues}`;\n    }\n  }\n\n  const separator = separatorArrayExplode(style);\n  const joinedValues = value\n    .map((v) => {\n      if (style === 'label' || style === 'simple') {\n        return allowReserved ? v : encodeURIComponent(v as string);\n      }\n\n      return serializePrimitiveParam({\n        allowReserved,\n        name,\n        value: v as string,\n      });\n    })\n    .join(separator);\n  return style === 'label' || style === 'matrix' ? separator + joinedValues : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n  allowReserved,\n  name,\n  value,\n}: SerializePrimitiveParam) => {\n  if (value === undefined || value === null) {\n    return '';\n  }\n\n  if (typeof value === 'object') {\n    throw new Error(\n      'Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.',\n    );\n  }\n\n  return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n  allowReserved,\n  explode,\n  name,\n  style,\n  value,\n  valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n  value: Record<string, unknown> | Date;\n  valueOnly?: boolean;\n}) => {\n  if (value instanceof Date) {\n    return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n  }\n\n  if (style !== 'deepObject' && !explode) {\n    let values: string[] = [];\n    Object.entries(value).forEach(([key, v]) => {\n      values = [...values, key, allowReserved ? (v as string) : encodeURIComponent(v as string)];\n    });\n    const joinedValues = values.join(',');\n    switch (style) {\n      case 'form':\n        return `${name}=${joinedValues}`;\n      case 'label':\n        return `.${joinedValues}`;\n      case 'matrix':\n        return `;${name}=${joinedValues}`;\n      default:\n        return joinedValues;\n    }\n  }\n\n  const separator = separatorObjectExplode(style);\n  const joinedValues = Object.entries(value)\n    .map(([key, v]) =>\n      serializePrimitiveParam({\n        allowReserved,\n        name: style === 'deepObject' ? `${name}[${key}]` : key,\n        value: v as string,\n      }),\n    )\n    .join(separator);\n  return style === 'label' || style === 'matrix' ? separator + joinedValues : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from './bodySerializer.gen';\nimport {\n  type ArraySeparatorStyle,\n  serializeArrayParam,\n  serializeObjectParam,\n  serializePrimitiveParam,\n} from './pathSerializer.gen';\n\nexport interface PathSerializer {\n  path: Record<string, unknown>;\n  url: string;\n}\n\nexport const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {\n  let url = _url;\n  const matches = _url.match(PATH_PARAM_RE);\n  if (matches) {\n    for (const match of matches) {\n      let explode = false;\n      let name = match.substring(1, match.length - 1);\n      let style: ArraySeparatorStyle = 'simple';\n\n      if (name.endsWith('*')) {\n        explode = true;\n        name = name.substring(0, name.length - 1);\n      }\n\n      if (name.startsWith('.')) {\n        name = name.substring(1);\n        style = 'label';\n      } else if (name.startsWith(';')) {\n        name = name.substring(1);\n        style = 'matrix';\n      }\n\n      const value = path[name];\n\n      if (value === undefined || value === null) {\n        continue;\n      }\n\n      if (Array.isArray(value)) {\n        url = url.replace(match, serializeArrayParam({ explode, name, style, value }));\n        continue;\n      }\n\n      if (typeof value === 'object') {\n        url = url.replace(\n          match,\n          serializeObjectParam({\n            explode,\n            name,\n            style,\n            value: value as Record<string, unknown>,\n            valueOnly: true,\n          }),\n        );\n        continue;\n      }\n\n      if (style === 'matrix') {\n        url = url.replace(\n          match,\n          `;${serializePrimitiveParam({\n            name,\n            value: value as string,\n          })}`,\n        );\n        continue;\n      }\n\n      const replaceValue = encodeURIComponent(\n        style === 'label' ? `.${value as string}` : (value as string),\n      );\n      url = url.replace(match, replaceValue);\n    }\n  }\n  return url;\n};\n\nexport const getUrl = ({\n  baseUrl,\n  path,\n  query,\n  querySerializer,\n  url: _url,\n}: {\n  baseUrl?: string;\n  path?: Record<string, unknown>;\n  query?: Record<string, unknown>;\n  querySerializer: QuerySerializer;\n  url: string;\n}) => {\n  const pathUrl = _url.startsWith('/') ? _url : `/${_url}`;\n  let url = (baseUrl ?? '') + pathUrl;\n  if (path) {\n    url = defaultPathSerializer({ path, url });\n  }\n  let search = query ? querySerializer(query) : '';\n  if (search.startsWith('?')) {\n    search = search.substring(1);\n  }\n  if (search) {\n    url += `?${search}`;\n  }\n  return url;\n};\n\nexport function getValidRequestBody(options: {\n  body?: unknown;\n  bodySerializer?: BodySerializer | null;\n  serializedBody?: unknown;\n}) {\n  const hasBody = options.body !== undefined;\n  const isSerializedBody = hasBody && options.bodySerializer;\n\n  if (isSerializedBody) {\n    if ('serializedBody' in options) {\n      const hasSerializedBody =\n        options.serializedBody !== undefined && options.serializedBody !== '';\n\n      return hasSerializedBody ? options.serializedBody : null;\n    }\n\n    // not all clients implement a serializedBody property (i.e., client-axios)\n    return options.body !== '' ? options.body : null;\n  }\n\n  // plain/text body\n  if (hasBody) {\n    return options.body;\n  }\n\n  // no body was provided\n  return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n  /**\n   * Which part of the request do we use to send the auth?\n   *\n   * @default 'header'\n   */\n  in?: 'header' | 'query' | 'cookie';\n  /**\n   * Header or query parameter name.\n   *\n   * @default 'Authorization'\n   */\n  name?: string;\n  scheme?: 'basic' | 'bearer';\n  type: 'apiKey' | 'http';\n}\n\nexport const getAuthToken = async (\n  auth: Auth,\n  callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken,\n): Promise<string | undefined> => {\n  const token = typeof callback === 'function' ? await callback(auth) : callback;\n\n  if (!token) {\n    return;\n  }\n\n  if (auth.scheme === 'bearer') {\n    return `Bearer ${token}`;\n  }\n\n  if (auth.scheme === 'basic') {\n    return `Basic ${btoa(token)}`;\n  }\n\n  return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from '../core/auth.gen';\nimport type { QuerySerializerOptions } from '../core/bodySerializer.gen';\nimport { jsonBodySerializer } from '../core/bodySerializer.gen';\nimport {\n  serializeArrayParam,\n  serializeObjectParam,\n  serializePrimitiveParam,\n} from '../core/pathSerializer.gen';\nimport { getUrl } from '../core/utils.gen';\nimport type { Client, ClientOptions, Config, RequestOptions } from './types.gen';\n\nexport const createQuerySerializer = <T = unknown>({\n  parameters = {},\n  ...args\n}: QuerySerializerOptions = {}) => {\n  const querySerializer = (queryParams: T) => {\n    const search: string[] = [];\n    if (queryParams && typeof queryParams === 'object') {\n      for (const name in queryParams) {\n        const value = queryParams[name];\n\n        if (value === undefined || value === null) {\n          continue;\n        }\n\n        const options = parameters[name] || args;\n\n        if (Array.isArray(value)) {\n          const serializedArray = serializeArrayParam({\n            allowReserved: options.allowReserved,\n            explode: true,\n            name,\n            style: 'form',\n            value,\n            ...options.array,\n          });\n          if (serializedArray) search.push(serializedArray);\n        } else if (typeof value === 'object') {\n          const serializedObject = serializeObjectParam({\n            allowReserved: options.allowReserved,\n            explode: true,\n            name,\n            style: 'deepObject',\n            value: value as Record<string, unknown>,\n            ...options.object,\n          });\n          if (serializedObject) search.push(serializedObject);\n        } else {\n          const serializedPrimitive = serializePrimitiveParam({\n            allowReserved: options.allowReserved,\n            name,\n            value: value as string,\n          });\n          if (serializedPrimitive) search.push(serializedPrimitive);\n        }\n      }\n    }\n    return search.join('&');\n  };\n  return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (contentType: string | null): Exclude<Config['parseAs'], 'auto'> => {\n  if (!contentType) {\n    // If no Content-Type header is provided, the best we can do is return the raw response body,\n    // which is effectively the same as the 'stream' option.\n    return 'stream';\n  }\n\n  const cleanContent = contentType.split(';')[0]?.trim();\n\n  if (!cleanContent) {\n    return;\n  }\n\n  if (cleanContent.startsWith('application/json') || cleanContent.endsWith('+json')) {\n    return 'json';\n  }\n\n  if (cleanContent === 'multipart/form-data') {\n    return 'formData';\n  }\n\n  if (\n    ['application/', 'audio/', 'image/', 'video/'].some((type) => cleanContent.startsWith(type))\n  ) {\n    return 'blob';\n  }\n\n  if (cleanContent.startsWith('text/')) {\n    return 'text';\n  }\n\n  return;\n};\n\nconst checkForExistence = (\n  options: Pick<RequestOptions, 'auth' | 'query'> & {\n    headers: Headers;\n  },\n  name?: string,\n): boolean => {\n  if (!name) {\n    return false;\n  }\n  if (\n    options.headers.has(name) ||\n    options.query?.[name] ||\n    options.headers.get('Cookie')?.includes(`${name}=`)\n  ) {\n    return true;\n  }\n  return false;\n};\n\nexport const setAuthParams = async ({\n  security,\n  ...options\n}: Pick<Required<RequestOptions>, 'security'> &\n  Pick<RequestOptions, 'auth' | 'query'> & {\n    headers: Headers;\n  }) => {\n  for (const auth of security) {\n    if (checkForExistence(options, auth.name)) {\n      continue;\n    }\n\n    const token = await getAuthToken(auth, options.auth);\n\n    if (!token) {\n      continue;\n    }\n\n    const name = auth.name ?? 'Authorization';\n\n    switch (auth.in) {\n      case 'query':\n        if (!options.query) {\n          options.query = {};\n        }\n        options.query[name] = token;\n        break;\n      case 'cookie':\n        options.headers.append('Cookie', `${name}=${token}`);\n        break;\n      case 'header':\n      default:\n        options.headers.set(name, token);\n        break;\n    }\n  }\n};\n\nexport const buildUrl: Client['buildUrl'] = (options) =>\n  getUrl({\n    baseUrl: options.baseUrl as string,\n    path: options.path,\n    query: options.query,\n    querySerializer:\n      typeof options.querySerializer === 'function'\n        ? options.querySerializer\n        : createQuerySerializer(options.querySerializer),\n    url: options.url,\n  });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n  const config = { ...a, ...b };\n  if (config.baseUrl?.endsWith('/')) {\n    config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n  }\n  config.headers = mergeHeaders(a.headers, b.headers);\n  return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n  const entries: Array<[string, string]> = [];\n  headers.forEach((value, key) => {\n    entries.push([key, value]);\n  });\n  return entries;\n};\n\nexport const mergeHeaders = (\n  ...headers: Array<Required<Config>['headers'] | undefined>\n): Headers => {\n  const mergedHeaders = new Headers();\n  for (const header of headers) {\n    if (!header) {\n      continue;\n    }\n\n    const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header);\n\n    for (const [key, value] of iterator) {\n      if (value === null) {\n        mergedHeaders.delete(key);\n      } else if (Array.isArray(value)) {\n        for (const v of value) {\n          mergedHeaders.append(key, v as string);\n        }\n      } else if (value !== undefined) {\n        // assume object headers are meant to be JSON stringified, i.e., their\n        // content value in OpenAPI specification is 'application/json'\n        mergedHeaders.set(\n          key,\n          typeof value === 'object' ? JSON.stringify(value) : (value as string),\n        );\n      }\n    }\n  }\n  return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n  error: Err,\n  response: Res,\n  request: Req,\n  options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n  response: Res,\n  request: Req,\n  options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n  fns: Array<Interceptor | null> = [];\n\n  clear(): void {\n    this.fns = [];\n  }\n\n  eject(id: number | Interceptor): void {\n    const index = this.getInterceptorIndex(id);\n    if (this.fns[index]) {\n      this.fns[index] = null;\n    }\n  }\n\n  exists(id: number | Interceptor): boolean {\n    const index = this.getInterceptorIndex(id);\n    return Boolean(this.fns[index]);\n  }\n\n  getInterceptorIndex(id: number | Interceptor): number {\n    if (typeof id === 'number') {\n      return this.fns[id] ? id : -1;\n    }\n    return this.fns.indexOf(id);\n  }\n\n  update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false {\n    const index = this.getInterceptorIndex(id);\n    if (this.fns[index]) {\n      this.fns[index] = fn;\n      return id;\n    }\n    return false;\n  }\n\n  use(fn: Interceptor): number {\n    this.fns.push(fn);\n    return this.fns.length - 1;\n  }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n  error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n  request: Interceptors<ReqInterceptor<Req, Options>>;\n  response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n  Req,\n  Res,\n  Err,\n  Options\n> => ({\n  error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n  request: new Interceptors<ReqInterceptor<Req, Options>>(),\n  response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n  allowReserved: false,\n  array: {\n    explode: true,\n    style: 'form',\n  },\n  object: {\n    explode: true,\n    style: 'deepObject',\n  },\n});\n\nconst defaultHeaders = {\n  'Content-Type': 'application/json',\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n  override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n  ...jsonBodySerializer,\n  headers: defaultHeaders,\n  parseAs: 'auto',\n  querySerializer: defaultQuerySerializer,\n  ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type { Client, Config, RequestOptions, ResolvedRequestOptions } from './types.gen';\nimport {\n  buildUrl,\n  createConfig,\n  createInterceptors,\n  getParseAs,\n  mergeConfigs,\n  mergeHeaders,\n  setAuthParams,\n} from './utils.gen';\n\ntype ReqInit = Omit<RequestInit, 'body' | 'headers'> & {\n  body?: any;\n  headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n  let _config = mergeConfigs(createConfig(), config);\n\n  const getConfig = (): Config => ({ ..._config });\n\n  const setConfig = (config: Config): Config => {\n    _config = mergeConfigs(_config, config);\n    return getConfig();\n  };\n\n  const interceptors = createInterceptors<Request, Response, unknown, ResolvedRequestOptions>();\n\n  const beforeRequest = async <\n    TData = unknown,\n    TResponseStyle extends 'data' | 'fields' = 'fields',\n    ThrowOnError extends boolean = boolean,\n    Url extends string = string,\n  >(\n    options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n  ) => {\n    const opts = {\n      ..._config,\n      ...options,\n      fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n      headers: mergeHeaders(_config.headers, options.headers),\n      serializedBody: undefined as string | undefined,\n    };\n\n    if (opts.security) {\n      await setAuthParams({\n        ...opts,\n        security: opts.security,\n      });\n    }\n\n    if (opts.requestValidator) {\n      await opts.requestValidator(opts);\n    }\n\n    if (opts.body !== undefined && opts.bodySerializer) {\n      opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;\n    }\n\n    // remove Content-Type header if body is empty to avoid sending invalid requests\n    if (opts.body === undefined || opts.serializedBody === '') {\n      opts.headers.delete('Content-Type');\n    }\n\n    const resolvedOpts = opts as typeof opts &\n      ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n    const url = buildUrl(resolvedOpts);\n\n    return { opts: resolvedOpts, url };\n  };\n\n  const request: Client['request'] = async (options) => {\n    const { opts, url } = await beforeRequest(options);\n    const requestInit: ReqInit = {\n      redirect: 'follow',\n      ...opts,\n      body: getValidRequestBody(opts),\n    };\n\n    let request = new Request(url, requestInit);\n\n    for (const fn of interceptors.request.fns) {\n      if (fn) {\n        request = await fn(request, opts);\n      }\n    }\n\n    // fetch must be assigned here, otherwise it would throw the error:\n    // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n    const _fetch = opts.fetch!;\n    let response: Response;\n\n    try {\n      response = await _fetch(request);\n    } catch (error) {\n      // Handle fetch exceptions (AbortError, network errors, etc.)\n      let finalError = error;\n\n      for (const fn of interceptors.error.fns) {\n        if (fn) {\n          finalError = (await fn(error, undefined as any, request, opts)) as unknown;\n        }\n      }\n\n      finalError = finalError || ({} as unknown);\n\n      if (opts.throwOnError) {\n        throw finalError;\n      }\n\n      // Return error response\n      return opts.responseStyle === 'data'\n        ? undefined\n        : {\n            error: finalError,\n            request,\n            response: undefined as any,\n          };\n    }\n\n    for (const fn of interceptors.response.fns) {\n      if (fn) {\n        response = await fn(response, request, opts);\n      }\n    }\n\n    const result = {\n      request,\n      response,\n    };\n\n    if (response.ok) {\n      const parseAs =\n        (opts.parseAs === 'auto'\n          ? getParseAs(response.headers.get('Content-Type'))\n          : opts.parseAs) ?? 'json';\n\n      if (response.status === 204 || response.headers.get('Content-Length') === '0') {\n        let emptyData: any;\n        switch (parseAs) {\n          case 'arrayBuffer':\n          case 'blob':\n          case 'text':\n            emptyData = await response[parseAs]();\n            break;\n          case 'formData':\n            emptyData = new FormData();\n            break;\n          case 'stream':\n            emptyData = response.body;\n            break;\n          case 'json':\n          default:\n            emptyData = {};\n            break;\n        }\n        return opts.responseStyle === 'data'\n          ? emptyData\n          : {\n              data: emptyData,\n              ...result,\n            };\n      }\n\n      let data: any;\n      switch (parseAs) {\n        case 'arrayBuffer':\n        case 'blob':\n        case 'formData':\n        case 'text':\n          data = await response[parseAs]();\n          break;\n        case 'json': {\n          // Some servers return 200 with no Content-Length and empty body.\n          // response.json() would throw; read as text and parse if non-empty.\n          const text = await response.text();\n          data = text ? JSON.parse(text) : {};\n          break;\n        }\n        case 'stream':\n          return opts.responseStyle === 'data'\n            ? response.body\n            : {\n                data: response.body,\n                ...result,\n              };\n      }\n\n      if (parseAs === 'json') {\n        if (opts.responseValidator) {\n          await opts.responseValidator(data);\n        }\n\n        if (opts.responseTransformer) {\n          data = await opts.responseTransformer(data);\n        }\n      }\n\n      return opts.responseStyle === 'data'\n        ? data\n        : {\n            data,\n            ...result,\n          };\n    }\n\n    const textError = await response.text();\n    let jsonError: unknown;\n\n    try {\n      jsonError = JSON.parse(textError);\n    } catch {\n      // noop\n    }\n\n    const error = jsonError ?? textError;\n    let finalError = error;\n\n    for (const fn of interceptors.error.fns) {\n      if (fn) {\n        finalError = (await fn(error, response, request, opts)) as string;\n      }\n    }\n\n    finalError = finalError || ({} as string);\n\n    if (opts.throwOnError) {\n      throw finalError;\n    }\n\n    // TODO: we probably want to return error and improve types\n    return opts.responseStyle === 'data'\n      ? undefined\n      : {\n          error: finalError,\n          ...result,\n        };\n  };\n\n  const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n    request({ ...options, method });\n\n  const makeSseFn = (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n    const { opts, url } = await beforeRequest(options);\n    return createSseClient({\n      ...opts,\n      body: opts.body as BodyInit | null | undefined,\n      headers: opts.headers as unknown as Record<string, string>,\n      method,\n      onRequest: async (url, init) => {\n        let request = new Request(url, init);\n        for (const fn of interceptors.request.fns) {\n          if (fn) {\n            request = await fn(request, opts);\n          }\n        }\n        return request;\n      },\n      serializedBody: getValidRequestBody(opts) as BodyInit | null | undefined,\n      url,\n    });\n  };\n\n  const _buildUrl: Client['buildUrl'] = (options) => buildUrl({ ..._config, ...options });\n\n  return {\n    buildUrl: _buildUrl,\n    connect: makeMethodFn('CONNECT'),\n    delete: makeMethodFn('DELETE'),\n    get: makeMethodFn('GET'),\n    getConfig,\n    head: makeMethodFn('HEAD'),\n    interceptors,\n    options: makeMethodFn('OPTIONS'),\n    patch: makeMethodFn('PATCH'),\n    post: makeMethodFn('POST'),\n    put: makeMethodFn('PUT'),\n    request,\n    setConfig,\n    sse: {\n      connect: makeSseFn('CONNECT'),\n      delete: makeSseFn('DELETE'),\n      get: makeSseFn('GET'),\n      head: makeSseFn('HEAD'),\n      options: makeSseFn('OPTIONS'),\n      patch: makeSseFn('PATCH'),\n      post: makeSseFn('POST'),\n      put: makeSseFn('PUT'),\n      trace: makeSseFn('TRACE'),\n    },\n    trace: makeMethodFn('TRACE'),\n  } as Client;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type ClientOptions, type Config, createClient, createConfig } from './client';\nimport type { ClientOptions as ClientOptions2 } from './types.gen';\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>({ baseUrl: 'http://localhost:4000' }));\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, Options as Options2, TDataShape } from './client';\nimport { client } from './client.gen';\nimport type { PlatformApiActionStatusUpdaterControllerChecksumData, PlatformApiActionStatusUpdaterControllerChecksumErrors, PlatformApiActionStatusUpdaterControllerChecksumResponses, PlatformApiActionStatusUpdaterControllerCreateData, PlatformApiActionStatusUpdaterControllerCreateErrors, PlatformApiActionStatusUpdaterControllerCreateResponses, PlatformApiActionStatusUpdaterControllerDeleteData, PlatformApiActionStatusUpdaterControllerDeleteErrors, PlatformApiActionStatusUpdaterControllerDeleteResponses, PlatformApiActionStatusUpdaterControllerIndexData, PlatformApiActionStatusUpdaterControllerIndexErrors, PlatformApiActionStatusUpdaterControllerIndexResponses, PlatformApiActionStatusUpdaterControllerMetadataData, PlatformApiActionStatusUpdaterControllerMetadataDetailsData, PlatformApiActionStatusUpdaterControllerMetadataDetailsErrors, PlatformApiActionStatusUpdaterControllerMetadataDetailsResponses, PlatformApiActionStatusUpdaterControllerMetadataErrors, PlatformApiActionStatusUpdaterControllerMetadataResponses, PlatformApiActionStatusUpdaterControllerRefreshData, PlatformApiActionStatusUpdaterControllerRefreshErrors, PlatformApiActionStatusUpdaterControllerRefreshResponses, PlatformApiActionStatusUpdaterControllerShowData, PlatformApiActionStatusUpdaterControllerShowErrors, PlatformApiActionStatusUpdaterControllerShowResponses, PlatformApiActionStatusUpdaterControllerUpdateData, PlatformApiActionStatusUpdaterControllerUpdateErrors, PlatformApiActionStatusUpdaterControllerUpdateResponses, PlatformApiAdvancedMigrationControllerChecksumData, PlatformApiAdvancedMigrationControllerChecksumErrors, PlatformApiAdvancedMigrationControllerChecksumResponses, PlatformApiAdvancedMigrationControllerCreateData, PlatformApiAdvancedMigrationControllerCreateErrors, PlatformApiAdvancedMigrationControllerCreateResponses, PlatformApiAdvancedMigrationControllerDeleteData, PlatformApiAdvancedMigrationControllerDeleteErrors, PlatformApiAdvancedMigrationControllerDeleteResponses, PlatformApiAdvancedMigrationControllerIndexData, PlatformApiAdvancedMigrationControllerIndexErrors, PlatformApiAdvancedMigrationControllerIndexResponses, PlatformApiAdvancedMigrationControllerMetadataData, PlatformApiAdvancedMigrationControllerMetadataDetailsData, PlatformApiAdvancedMigrationControllerMetadataDetailsErrors, PlatformApiAdvancedMigrationControllerMetadataDetailsResponses, PlatformApiAdvancedMigrationControllerMetadataErrors, PlatformApiAdvancedMigrationControllerMetadataResponses, PlatformApiAdvancedMigrationControllerShowData, PlatformApiAdvancedMigrationControllerShowErrors, PlatformApiAdvancedMigrationControllerShowResponses, PlatformApiAdvancedMigrationControllerUpdateData, PlatformApiAdvancedMigrationControllerUpdateErrors, PlatformApiAdvancedMigrationControllerUpdateResponses, PlatformApiAgenticWorkflowControllerChecksumData, PlatformApiAgenticWorkflowControllerChecksumErrors, PlatformApiAgenticWorkflowControllerChecksumResponses, PlatformApiAgenticWorkflowControllerCreateData, PlatformApiAgenticWorkflowControllerCreateErrors, PlatformApiAgenticWorkflowControllerCreateResponses, PlatformApiAgenticWorkflowControllerDeleteData, PlatformApiAgenticWorkflowControllerDeleteErrors, PlatformApiAgenticWorkflowControllerDeleteResponses, PlatformApiAgenticWorkflowControllerIndexData, PlatformApiAgenticWorkflowControllerIndexErrors, PlatformApiAgenticWorkflowControllerIndexResponses, PlatformApiAgenticWorkflowControllerMetadataData, PlatformApiAgenticWorkflowControllerMetadataDetailsData, PlatformApiAgenticWorkflowControllerMetadataDetailsErrors, PlatformApiAgenticWorkflowControllerMetadataDetailsResponses, PlatformApiAgenticWorkflowControllerMetadataErrors, PlatformApiAgenticWorkflowControllerMetadataResponses, PlatformApiAgenticWorkflowControllerShowData, PlatformApiAgenticWorkflowControllerShowErrors, PlatformApiAgenticWorkflowControllerShowResponses, PlatformApiAgenticWorkflowControllerUpdateData, PlatformApiAgenticWorkflowControllerUpdateErrors, PlatformApiAgenticWorkflowControllerUpdateResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshData, PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshErrors, PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogShowData, PlatformApiAgenticWorkflowOperationsControllerBatchLogShowErrors, PlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexData, PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexErrors, PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogStartData, PlatformApiAgenticWorkflowOperationsControllerBatchLogStartErrors, PlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogStopData, PlatformApiAgenticWorkflowOperationsControllerBatchLogStopErrors, PlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponses, PlatformApiAgenticWorkflowOperationsControllerExecuteData, PlatformApiAgenticWorkflowOperationsControllerExecuteErrors, PlatformApiAgenticWorkflowOperationsControllerExecuteResponses, PlatformApiAgenticWorkflowOperationsControllerRunWorkflowData, PlatformApiAgenticWorkflowOperationsControllerRunWorkflowErrors, PlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadData, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadErrors, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowData, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowErrors, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexData, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexErrors, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponses, PlatformApiAiAgentControllerChecksumData, PlatformApiAiAgentControllerChecksumErrors, PlatformApiAiAgentControllerChecksumResponses, PlatformApiAiAgentControllerCreateData, PlatformApiAiAgentControllerCreateErrors, PlatformApiAiAgentControllerCreateResponses, PlatformApiAiAgentControllerDeleteData, PlatformApiAiAgentControllerDeleteErrors, PlatformApiAiAgentControllerDeleteResponses, PlatformApiAiAgentControllerIndexData, PlatformApiAiAgentControllerIndexErrors, PlatformApiAiAgentControllerIndexResponses, PlatformApiAiAgentControllerInvokeData, PlatformApiAiAgentControllerInvokeErrors, PlatformApiAiAgentControllerInvokeResponses, PlatformApiAiAgentControllerMetadataData, PlatformApiAiAgentControllerMetadataDetailsData, PlatformApiAiAgentControllerMetadataDetailsErrors, PlatformApiAiAgentControllerMetadataDetailsResponses, PlatformApiAiAgentControllerMetadataErrors, PlatformApiAiAgentControllerMetadataResponses, PlatformApiAiAgentControllerShowData, PlatformApiAiAgentControllerShowErrors, PlatformApiAiAgentControllerShowResponses, PlatformApiAiAgentControllerUpdateData, PlatformApiAiAgentControllerUpdateErrors, PlatformApiAiAgentControllerUpdateResponses, PlatformApiAuthenticatedLinkControllerExchangeData, PlatformApiAuthenticatedLinkControllerExchangeErrors, PlatformApiAuthenticatedLinkControllerExchangeResponses, PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingData, PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingErrors, PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingResponses, PlatformApiDataActivationClientControllerBatchesIndexData, PlatformApiDataActivationClientControllerBatchesIndexErrors, PlatformApiDataActivationClientControllerBatchesIndexResponses, PlatformApiDataActivationClientControllerBatchShowData, PlatformApiDataActivationClientControllerBatchShowErrors, PlatformApiDataActivationClientControllerBatchShowResponses, PlatformApiDataActivationClientControllerChecksumData, PlatformApiDataActivationClientControllerChecksumErrors, PlatformApiDataActivationClientControllerChecksumResponses, PlatformApiDataActivationClientControllerCreateData, PlatformApiDataActivationClientControllerCreateErrors, PlatformApiDataActivationClientControllerCreateResponses, PlatformApiDataActivationClientControllerDeleteData, PlatformApiDataActivationClientControllerDeleteErrors, PlatformApiDataActivationClientControllerDeleteResponses, PlatformApiDataActivationClientControllerIndexData, PlatformApiDataActivationClientControllerIndexErrors, PlatformApiDataActivationClientControllerIndexResponses, PlatformApiDataActivationClientControllerIngestData, PlatformApiDataActivationClientControllerIngestErrors, PlatformApiDataActivationClientControllerIngestFileData, PlatformApiDataActivationClientControllerIngestFileErrors, PlatformApiDataActivationClientControllerIngestFileResponses, PlatformApiDataActivationClientControllerIngestResponses, PlatformApiDataActivationClientControllerLogShowData, PlatformApiDataActivationClientControllerLogShowErrors, PlatformApiDataActivationClientControllerLogShowResponses, PlatformApiDataActivationClientControllerLogsIndexData, PlatformApiDataActivationClientControllerLogsIndexErrors, PlatformApiDataActivationClientControllerLogsIndexResponses, PlatformApiDataActivationClientControllerMetadataData, PlatformApiDataActivationClientControllerMetadataDetailsData, PlatformApiDataActivationClientControllerMetadataDetailsErrors, PlatformApiDataActivationClientControllerMetadataDetailsResponses, PlatformApiDataActivationClientControllerMetadataErrors, PlatformApiDataActivationClientControllerMetadataResponses, PlatformApiDataActivationClientControllerRunManuallyData, PlatformApiDataActivationClientControllerRunManuallyErrors, PlatformApiDataActivationClientControllerRunManuallyResponses, PlatformApiDataActivationClientControllerShowData, PlatformApiDataActivationClientControllerShowErrors, PlatformApiDataActivationClientControllerShowResponses, PlatformApiDataActivationClientControllerUpdateData, PlatformApiDataActivationClientControllerUpdateErrors, PlatformApiDataActivationClientControllerUpdateResponses, PlatformApiDatalakeControllerChecksumData, PlatformApiDatalakeControllerChecksumErrors, PlatformApiDatalakeControllerChecksumResponses, PlatformApiDatalakeControllerCreateData, PlatformApiDatalakeControllerCreateDownloadLinkData, PlatformApiDatalakeControllerCreateDownloadLinkErrors, PlatformApiDatalakeControllerCreateDownloadLinkResponses, PlatformApiDatalakeControllerCreateErrors, PlatformApiDatalakeControllerCreateResponses, PlatformApiDatalakeControllerCreateUploadLinkData, PlatformApiDatalakeControllerCreateUploadLinkErrors, PlatformApiDatalakeControllerCreateUploadLinkResponses, PlatformApiDatalakeControllerDeleteData, PlatformApiDatalakeControllerDeleteErrors, PlatformApiDatalakeControllerDeleteResponses, PlatformApiDatalakeControllerDerivedLakeTablesData, PlatformApiDatalakeControllerDerivedLakeTablesErrors, PlatformApiDatalakeControllerDerivedLakeTablesResponses, PlatformApiDatalakeControllerExecuteSqlData, PlatformApiDatalakeControllerExecuteSqlErrors, PlatformApiDatalakeControllerExecuteSqlResponses, PlatformApiDatalakeControllerIndexData, PlatformApiDatalakeControllerIndexErrors, PlatformApiDatalakeControllerIndexResponses, PlatformApiDatalakeControllerMetadataData, PlatformApiDatalakeControllerMetadataDetailsData, PlatformApiDatalakeControllerMetadataDetailsErrors, PlatformApiDatalakeControllerMetadataDetailsResponses, PlatformApiDatalakeControllerMetadataErrors, PlatformApiDatalakeControllerMetadataResponses, PlatformApiDatalakeControllerMigrateData, PlatformApiDatalakeControllerMigrateErrors, PlatformApiDatalakeControllerMigrateResponses, PlatformApiDatalakeControllerProvisionTokenizationData, PlatformApiDatalakeControllerProvisionTokenizationErrors, PlatformApiDatalakeControllerProvisionTokenizationResponses, PlatformApiDatalakeControllerResyncTableData, PlatformApiDatalakeControllerResyncTableErrors, PlatformApiDatalakeControllerResyncTableResponses, PlatformApiDatalakeControllerShowData, PlatformApiDatalakeControllerShowErrors, PlatformApiDatalakeControllerShowResponses, PlatformApiDatalakeControllerSystemDatasetsData, PlatformApiDatalakeControllerSystemDatasetsErrors, PlatformApiDatalakeControllerSystemDatasetsResponses, PlatformApiDatalakeControllerTextToSqlData, PlatformApiDatalakeControllerTextToSqlErrors, PlatformApiDatalakeControllerTextToSqlResponses, PlatformApiDatalakeControllerUpdateData, PlatformApiDatalakeControllerUpdateErrors, PlatformApiDatalakeControllerUpdateResponses, PlatformApiDatasetControllerCreateUserSearchData, PlatformApiDatasetControllerCreateUserSearchErrors, PlatformApiDatasetControllerCreateUserSearchResponses, PlatformApiDatasetControllerDatasetMetadataData, PlatformApiDatasetControllerDatasetMetadataErrors, PlatformApiDatasetControllerDatasetMetadataResponses, PlatformApiDatasetControllerMetadataData, PlatformApiDatasetControllerMetadataErrors, PlatformApiDatasetControllerMetadataResponses, PlatformApiDatasetControllerSearchData, PlatformApiDatasetControllerSearchErrors, PlatformApiDatasetControllerSearchResponses, PlatformApiDataSourceControllerChecksumData, PlatformApiDataSourceControllerChecksumErrors, PlatformApiDataSourceControllerChecksumResponses, PlatformApiDataSourceControllerCreateData, PlatformApiDataSourceControllerCreateErrors, PlatformApiDataSourceControllerCreateResponses, PlatformApiDataSourceControllerDeleteData, PlatformApiDataSourceControllerDeleteErrors, PlatformApiDataSourceControllerDeleteResponses, PlatformApiDataSourceControllerIndexData, PlatformApiDataSourceControllerIndexErrors, PlatformApiDataSourceControllerIndexResponses, PlatformApiDataSourceControllerMetadataData, PlatformApiDataSourceControllerMetadataDetailsData, PlatformApiDataSourceControllerMetadataDetailsErrors, PlatformApiDataSourceControllerMetadataDetailsResponses, PlatformApiDataSourceControllerMetadataErrors, PlatformApiDataSourceControllerMetadataResponses, PlatformApiDataSourceControllerShowData, PlatformApiDataSourceControllerShowErrors, PlatformApiDataSourceControllerShowResponses, PlatformApiDataSourceControllerUpdateData, PlatformApiDataSourceControllerUpdateErrors, PlatformApiDataSourceControllerUpdateResponses, PlatformApiGenericTableControllerChecksumData, PlatformApiGenericTableControllerChecksumErrors, PlatformApiGenericTableControllerChecksumResponses, PlatformApiGenericTableControllerCreateData, PlatformApiGenericTableControllerCreateErrors, PlatformApiGenericTableControllerCreateResponses, PlatformApiGenericTableControllerDeleteData, PlatformApiGenericTableControllerDeleteErrors, PlatformApiGenericTableControllerDeleteResponses, PlatformApiGenericTableControllerIndexData, PlatformApiGenericTableControllerIndexErrors, PlatformApiGenericTableControllerIndexResponses, PlatformApiGenericTableControllerMetadataData, PlatformApiGenericTableControllerMetadataDetailsData, PlatformApiGenericTableControllerMetadataDetailsErrors, PlatformApiGenericTableControllerMetadataDetailsResponses, PlatformApiGenericTableControllerMetadataErrors, PlatformApiGenericTableControllerMetadataResponses, PlatformApiGenericTableControllerShowData, PlatformApiGenericTableControllerShowErrors, PlatformApiGenericTableControllerShowResponses, PlatformApiGenericTableControllerUpdateData, PlatformApiGenericTableControllerUpdateErrors, PlatformApiGenericTableControllerUpdateResponses, PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionData, PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionErrors, PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionResponses, PlatformApiIntegrationTestOnlyAdminControllerConfirmUserData, PlatformApiIntegrationTestOnlyAdminControllerConfirmUserErrors, PlatformApiIntegrationTestOnlyAdminControllerConfirmUserResponses, PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyData, PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyErrors, PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyResponses, PlatformApiIntegrationTestOnlyAdminControllerSignUpData, PlatformApiIntegrationTestOnlyAdminControllerSignUpErrors, PlatformApiIntegrationTestOnlyAdminControllerSignUpResponses, PlatformApiInteroperabilityContractControllerChecksumData, PlatformApiInteroperabilityContractControllerChecksumErrors, PlatformApiInteroperabilityContractControllerChecksumResponses, PlatformApiInteroperabilityContractControllerCreateData, PlatformApiInteroperabilityContractControllerCreateErrors, PlatformApiInteroperabilityContractControllerCreateResponses, PlatformApiInteroperabilityContractControllerDeleteData, PlatformApiInteroperabilityContractControllerDeleteErrors, PlatformApiInteroperabilityContractControllerDeleteResponses, PlatformApiInteroperabilityContractControllerIndexData, PlatformApiInteroperabilityContractControllerIndexErrors, PlatformApiInteroperabilityContractControllerIndexResponses, PlatformApiInteroperabilityContractControllerMetadataData, PlatformApiInteroperabilityContractControllerMetadataDetailsData, PlatformApiInteroperabilityContractControllerMetadataDetailsErrors, PlatformApiInteroperabilityContractControllerMetadataDetailsResponses, PlatformApiInteroperabilityContractControllerMetadataErrors, PlatformApiInteroperabilityContractControllerMetadataResponses, PlatformApiInteroperabilityContractControllerRunData, PlatformApiInteroperabilityContractControllerRunErrors, PlatformApiInteroperabilityContractControllerRunResponses, PlatformApiInteroperabilityContractControllerShowData, PlatformApiInteroperabilityContractControllerShowErrors, PlatformApiInteroperabilityContractControllerShowResponses, PlatformApiInteroperabilityContractControllerUpdateData, PlatformApiInteroperabilityContractControllerUpdateErrors, PlatformApiInteroperabilityContractControllerUpdateResponses, PlatformApiInvitationControllerAcceptData, PlatformApiInvitationControllerAcceptErrors, PlatformApiInvitationControllerAcceptResponses, PlatformApiInvitationControllerCreateData, PlatformApiInvitationControllerCreateErrors, PlatformApiInvitationControllerCreateResponses, PlatformApiInvitationControllerIndexData, PlatformApiInvitationControllerIndexErrors, PlatformApiInvitationControllerIndexResponses, PlatformApiMdmControllerVerifyData, PlatformApiMdmControllerVerifyErrors, PlatformApiMdmControllerVerifyResponses, PlatformApiPingControllerPingData, PlatformApiPingControllerPingErrors, PlatformApiPingControllerPingResponses, PlatformApiSessionControllerCreateData, PlatformApiSessionControllerCreateErrors, PlatformApiSessionControllerCreateResponses, PlatformApiSessionControllerDeleteData, PlatformApiSessionControllerDeleteErrors, PlatformApiSessionControllerDeleteResponses, PlatformApiSessionControllerVerifyApiKeyData, PlatformApiSessionControllerVerifyApiKeyErrors, PlatformApiSessionControllerVerifyApiKeyResponses, PlatformApiSessionControllerVerifyData, PlatformApiSessionControllerVerifyErrors, PlatformApiSessionControllerVerifyResponses, PlatformApiTemplatesControllerIndexData, PlatformApiTemplatesControllerIndexErrors, PlatformApiTemplatesControllerIndexResponses, PlatformApiTemplatesControllerMetadataData, PlatformApiTemplatesControllerMetadataDetailsData, PlatformApiTemplatesControllerMetadataDetailsErrors, PlatformApiTemplatesControllerMetadataDetailsResponses, PlatformApiTemplatesControllerMetadataErrors, PlatformApiTemplatesControllerMetadataResponses, PlatformApiTenantControllerCreateData, PlatformApiTenantControllerCreateErrors, PlatformApiTenantControllerCreateResponses, PlatformApiTenantControllerIndexData, PlatformApiTenantControllerIndexErrors, PlatformApiTenantControllerIndexResponses, PlatformApiToolControllerChecksumData, PlatformApiToolControllerChecksumErrors, PlatformApiToolControllerChecksumResponses, PlatformApiToolControllerCreateData, PlatformApiToolControllerCreateErrors, PlatformApiToolControllerCreateResponses, PlatformApiToolControllerDeleteData, PlatformApiToolControllerDeleteErrors, PlatformApiToolControllerDeleteResponses, PlatformApiToolControllerIndexData, PlatformApiToolControllerIndexErrors, PlatformApiToolControllerIndexResponses, PlatformApiToolControllerMetadataData, PlatformApiToolControllerMetadataDetailsData, PlatformApiToolControllerMetadataDetailsErrors, PlatformApiToolControllerMetadataDetailsResponses, PlatformApiToolControllerMetadataErrors, PlatformApiToolControllerMetadataResponses, PlatformApiToolControllerShowData, PlatformApiToolControllerShowErrors, PlatformApiToolControllerShowResponses, PlatformApiToolControllerTestInvocationData, PlatformApiToolControllerTestInvocationErrors, PlatformApiToolControllerTestInvocationResponses, PlatformApiToolControllerUpdateData, PlatformApiToolControllerUpdateErrors, PlatformApiToolControllerUpdateResponses, PlatformApiWorkflowRunControllerCancelData, PlatformApiWorkflowRunControllerCancelErrors, PlatformApiWorkflowRunControllerCancelResponses, PlatformApiWorkflowRunControllerIndexData, PlatformApiWorkflowRunControllerIndexErrors, PlatformApiWorkflowRunControllerIndexResponses, PlatformApiWorkflowRunControllerShowData, PlatformApiWorkflowRunControllerShowErrors, PlatformApiWorkflowRunControllerShowResponses } from './types.gen';\n\nexport type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {\n    /**\n     * You can provide a client instance returned by `createClient()` instead of\n     * individual options. This might be also useful if you want to implement a\n     * custom client.\n     */\n    client?: Client;\n    /**\n     * You can pass arbitrary values through the `meta` object. This can be\n     * used to access values that aren't defined as part of the SDK function.\n     */\n    meta?: Record<string, unknown>;\n};\n\n/**\n * Compute the drift checksum for an agentic workflow config\n *\n * Returns the server-computed drift fingerprint a create/update would stamp for the submitted config, without persisting anything. A client posts a desired config here and compares the result against the deployed workflow's `checksum` (from GET) to detect drift (absent / unchanged / edited).\n */\nexport const platformApiAgenticWorkflowControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowControllerChecksumResponses, PlatformApiAgenticWorkflowControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Get single generic table metadata as markdown\n *\n * Returns markdown describing one generic table's column schema, addressed by id within the datalake.\n */\nexport const platformApiGenericTableControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiGenericTableControllerMetadataDetailsResponses, PlatformApiGenericTableControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/{id}/metadata',\n    ...options\n});\n\n/**\n * Mint a public_api API key for a tenant (admin)\n *\n * Creates a `public_api` API key for a tenant and returns its plaintext\n * (shown once, same as the API-keys UI's create flow). Exists because the\n * integration-test bootstrap authenticates purely over HTTP/SDK and has no\n * LiveView console to use the normal API-keys UI.\n *\n * Wraps `Platform.ApiKeys.create_api_key/4` verbatim — **zero new business\n * logic**. Every successful call is structured-logged with `caller_user_id`,\n * `tenant_id`, and `api_key_id` for a forensic trail.\n *\n * **Requires platform-admin authentication** (`User.role == :admin`).\n *\n */\nexport const platformApiIntegrationTestOnlyAdminControllerCreateTenantApiKey = <ThrowOnError extends boolean = false>(options: Options<PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyData, ThrowOnError>) => (options.client ?? client).post<PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyResponses, PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyErrors, ThrowOnError>({\n    security: [{ scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/admin/tenants/{tenant_slug}/api-keys',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Single tool metadata as markdown\n *\n * Returns markdown for one tool — wrapper, body-side schema, and the test-invocation block. No shared-types section (use the catalog endpoint for that).\n */\nexport const platformApiToolControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiToolControllerMetadataDetailsResponses, PlatformApiToolControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}/metadata',\n    ...options\n});\n\n/**\n * Data sources catalog as markdown\n *\n * Returns one page of the data source catalog for the current datalake, rendered as markdown. Accepts the same pagination, filtering, and ordering parameters as `index`; each entry includes wrapper fields + bound tools. The page's pagination state is written into a narrative line at the top. Trailing `Shared Types` section documents `TemplateConfig` + Solid filters.\n */\nexport const platformApiDataSourceControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataSourceControllerMetadataResponses, PlatformApiDataSourceControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/metadata',\n    ...options\n});\n\n/**\n * Delete a tool\n *\n * Deletes a tool. Returns 409 if the tool is referenced by another resource.\n */\nexport const platformApiToolControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiToolControllerDeleteResponses, PlatformApiToolControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}',\n    ...options\n});\n\n/**\n * Get a tool\n *\n * Returns a single tool by ID, scoped to the current datalake.\n */\nexport const platformApiToolControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiToolControllerShowResponses, PlatformApiToolControllerShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}',\n    ...options\n});\n\n/**\n * Replace a tool\n *\n * Replaces a tool with the full resource body. PUT semantics — all required fields must be present.\n */\nexport const platformApiToolControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiToolControllerUpdateResponses, PlatformApiToolControllerUpdateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Generate datalake SQL from a natural-language prompt\n *\n * Generates a SQL statement for a natural-language `prompt` against the datalake, with\n * ordered multi-provider LLM failover. Returns the SQL plus a best-effort plain-language\n * `explanation` (`null` when the explainer is unavailable). The SQL is returned for review;\n * run it via `POST .../execute-sql`. Only the prompt + schema are sent to the LLM — no\n * datalake data leaves the boundary, so this is safe in both modes. Returns 422 when every\n * configured provider fails.\n *\n */\nexport const platformApiDatalakeControllerTextToSql = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerTextToSqlData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerTextToSqlResponses, PlatformApiDatalakeControllerTextToSqlErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/text-to-sql',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Get the advanced migrations catalog as markdown\n *\n * Returns one page of this datalake's advanced migrations, rendered as markdown for AI context. Accepts the same pagination, filtering and ordering parameters as `index`; each migration appears with its version, checksum and both SQL statements.\n */\nexport const platformApiAdvancedMigrationControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdvancedMigrationControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAdvancedMigrationControllerMetadataResponses, PlatformApiAdvancedMigrationControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/metadata',\n    ...options\n});\n\n/**\n * Verify an X-API-Key credential\n *\n * Returns the API-key session's tenant, role, and key information — the\n * \"who am I\" endpoint for key-only (M2M) callers. The key-only half of the\n * old dual-mode `GET /sessions/verify`, split out so each operation carries\n * exactly one security posture.\n *\n * Key-only: Bearer callers receive a 422 pointing at\n * `GET /api/v1/sessions/verify`.\n *\n * **Requires X-API-Key authentication.**\n *\n */\nexport const platformApiSessionControllerVerifyApiKey = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiSessionControllerVerifyApiKeyData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiSessionControllerVerifyApiKeyResponses, PlatformApiSessionControllerVerifyApiKeyErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }],\n    url: '/api/v1/api-keys/verify',\n    ...options\n});\n\n/**\n * Enqueue datalake migrations\n *\n * Enqueues a `Platform.Datalakes.Workers.Migrator` Oban job that brings the\n * datalake's per-tenant database to the current schema version, **and one\n * more for every lake derived from it**. Asking a *derived* lake to migrate\n * enqueues only that lake. Required after `POST /datalakes`, which only\n * persists the metadata row — it does NOT run migrations against the\n * per-tenant DB. Without this step, every downstream resource that touches\n * per-datalake tables (`data_activation_logs`, MDM tables, dataset tables)\n * will fail with `relation … does not exist`.\n *\n * Asynchronous: returns 202 Accepted as soon as the jobs are enqueued.\n * Callers poll `GET /datalakes/:id` and watch for `status: :ready`.\n *\n * **The response describes one job — this datalake's own.** It is the first\n * of the batch; the derived lakes' jobs queue behind it and are not reported\n * here.\n *\n * Deduplicated rather than idempotent: uniqueness is keyed on\n * `(datalake_id, mode)` while a job waits, so a second call while the first\n * job is still queued comes back with **that** job instead of inserting a new\n * one — `job_id` and `enqueued_at` are then the earlier job's, and `status`\n * still reads `enqueued`. A call while the first job is already running\n * inserts a new job that runs after it, so a dataset created mid-migration is\n * still built. Once every job has completed, a fresh call inserts a job that\n * runs and finds nothing left to migrate.\n *\n * The LiveView \"Migrate Datalake\" button enqueues the same jobs through the\n * same helper. Neither path migrates inside the calling process.\n *\n * Requires a tenant-scoped Bearer with membership role `admin`.\n *\n */\nexport const platformApiDatalakeControllerMigrate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerMigrateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerMigrateResponses, PlatformApiDatalakeControllerMigrateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/migrate',\n    ...options\n});\n\n/**\n * Verify current Bearer session\n *\n * Returns the current Bearer session's tenant, role, and identity\n * information — the \"who am I\" endpoint for human sessions.\n *\n * Bearer sessions only: key-only (M2M) callers receive a 422 pointing at\n * `GET /api/v1/api-keys/verify`, the key-credential counterpart.\n *\n * **Requires Bearer authentication with the tenant's X-API-Key companion.**\n *\n */\nexport const platformApiSessionControllerVerify = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiSessionControllerVerifyData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiSessionControllerVerifyResponses, PlatformApiSessionControllerVerifyErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/sessions/verify',\n    ...options\n});\n\n/**\n * Compute the drift checksum for a data activation client config\n *\n * Returns the server-computed drift fingerprint a create/update would stamp for the submitted config, without persisting anything. `alvera plan` posts the operator's desired config here and compares the result against the deployed client's `checksum` (from GET) to decide absent / unchanged / edited.\n */\nexport const platformApiDataActivationClientControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerChecksumResponses, PlatformApiDataActivationClientControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Stop refresh polling for a batch run log\n *\n * Deletes the DynamicCron job that polls this batch. The batch log is NOT deleted.\n */\nexport const platformApiAgenticWorkflowOperationsControllerBatchLogStop = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogStopData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogStopErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/stop',\n    ...options\n});\n\n/**\n * Delete a data activation client\n *\n * Deletes a DAC. Returns 422 if the DAC is a platform default (is_default=true). Returns 409 if referenced by other resources.\n */\nexport const platformApiDataActivationClientControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiDataActivationClientControllerDeleteResponses, PlatformApiDataActivationClientControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{id}',\n    ...options\n});\n\n/**\n * Get a data activation client\n *\n * Returns a single DAC by datalake-scoped slug.\n */\nexport const platformApiDataActivationClientControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerShowResponses, PlatformApiDataActivationClientControllerShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{id}',\n    ...options\n});\n\n/**\n * Replace a data activation client\n *\n * Replaces a DAC with the full resource body. PUT semantics — all required fields must be present. `slug` is immutable.\n */\nexport const platformApiDataActivationClientControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiDataActivationClientControllerUpdateResponses, PlatformApiDataActivationClientControllerUpdateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Create datalake download link\n *\n * Returns a presigned GET URL for an object stored in one of the datalake's cloud storage buckets (raw or tokenized). 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.\n */\nexport const platformApiDatalakeControllerCreateDownloadLink = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerCreateDownloadLinkData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerCreateDownloadLinkResponses, PlatformApiDatalakeControllerCreateDownloadLinkErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Delete a datalake\n *\n * Deletes a datalake, but only while it is a fresh, un-migrated, metadata-only\n * shell. Returns `409 Conflict` if the datalake is already `:ready` or has run\n * through any migration cycle (its per-tenant schemas are built and may hold\n * tenant data), or if it still owns any child resource (tools, workflows,\n * contracts, clients, tables, …). A deletable datalake has no physical schema,\n * so this is a pure metadata delete.\n *\n */\nexport const platformApiDatalakeControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiDatalakeControllerDeleteResponses, PlatformApiDatalakeControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{id}',\n    ...options\n});\n\n/**\n * Get a datalake\n *\n * Returns a single datalake by ID (non-sensitive metadata only).\n */\nexport const platformApiDatalakeControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerShowResponses, PlatformApiDatalakeControllerShowErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{id}',\n    ...options\n});\n\n/**\n * Update a datalake (full replace)\n *\n * Replaces the datalake's configuration with the supplied body. PUT semantics:\n * the request body MUST carry every field — partial updates are not\n * supported. Mirrors the same `DatalakeRequest` schema as create so callers\n * can resend a full manifest unchanged.\n *\n * The platform performs the same gates as create before persisting: DB\n * connection probes against every raw/tokenized reader/writer\n * declared in the body, plus a cloud-storage reachability probe. Any\n * probe failure surfaces as `422 Unprocessable Entity` with the failing\n * field annotated in the changeset.\n *\n * Used by `alvera apply` when the manifest's `[datalake]` block has\n * drifted from server state. Idempotent: re-applying the same body\n * against a converged datalake is a no-op at the wire level (the\n * changeset detects no changes; the row is rewritten with identical\n * values, lifecycle hooks fire).\n *\n */\nexport const platformApiDatalakeControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiDatalakeControllerUpdateResponses, PlatformApiDatalakeControllerUpdateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Resolve an authenticated link's token\n *\n * Called by the host serving an action's link prefix when a person taps\n * `<link_prefix>/<token>`. Returns the link: where it goes, the recipient's\n * legal entity, the workflow, run and action that sent it, when it expires\n * and when a person first clicked it, with the message it was sent in. The\n * message carries its metadata as stored: the recipient's `to` merged with\n * what the action's metadata template rendered.\n *\n * A person's tap also moves the message to `clicked`, in the same request;\n * the first click stamps the link's `link_clicked_at` and the message's\n * `clicked_at`, and later ones keep both. A `HEAD` request, a\n * prefetch header, an empty user agent, or a bot, link-preview or\n * mail-scanner user agent looks automated and moves nothing. Every tap is\n * recorded with the request details forwarded here and the signal that\n * flagged it, if any. Answers every time until the link expires: 404 for an\n * unknown token, 410 past its expiry, 503 when the datalake cannot be\n * reached.\n *\n * **Requires X-API-Key authentication.** A publishable key is enough.\n *\n */\nexport const platformApiAuthenticatedLinkControllerExchange = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAuthenticatedLinkControllerExchangeData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAuthenticatedLinkControllerExchangeResponses, PlatformApiAuthenticatedLinkControllerExchangeErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/authenticated-links/exchange',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * List accessible tenants\n *\n * Returns a paginated list of tenants accessible to the authenticated identity.\n *\n * - **Bearer token**: returns all tenants the user has membership in.\n * - **X-API-Key**: returns the single tenant the API key is scoped to.\n *\n */\nexport const platformApiTenantControllerIndex = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiTenantControllerIndexData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiTenantControllerIndexResponses, PlatformApiTenantControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants',\n    ...options\n});\n\n/**\n * Create a tenant\n *\n * Creates a new tenant and an `:admin` membership for the authenticated user.\n * Wraps `Platform.Tenants.create_tenant/3` verbatim — same primitive that\n * backs the `/app/tenants/new` LiveView.\n *\n * On success returns the freshly-created tenant (`id`, `slug`, `name`,\n * `description`). The caller's tenant-less Bearer remains valid; to obtain\n * a **tenant-scoped Bearer** for subsequent work, call\n * `POST /api/v1/sessions` with `{ tenant_slug }` — same primitive used by\n * every other tenant sign-in.\n *\n * The user must be confirmed (`confirmed_at IS NOT NULL`); unconfirmed\n * callers receive 403. Duplicate tenant names (slug collision) return 422.\n *\n * Requires `Authorization: Bearer <token>` (X-API-Key cannot create tenants —\n * it carries no platform-user identity to bind the membership to).\n *\n */\nexport const platformApiTenantControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiTenantControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiTenantControllerCreateResponses, PlatformApiTenantControllerCreateErrors, ThrowOnError>({\n    security: [{ scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Download execution context\n *\n * Returns a presigned URL for downloading the execution context JSON from R2.\n */\nexport const platformApiAgenticWorkflowOperationsControllerWorkflowLogDownload = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/workflow-logs/{id}/download',\n    ...options\n});\n\n/**\n * List generic tables\n *\n * Returns a paginated list of generic tables for the datalake (custom tables + system tables for the data domain).\n */\nexport const platformApiGenericTableControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiGenericTableControllerIndexResponses, PlatformApiGenericTableControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables',\n    ...options\n});\n\n/**\n * Create a generic table\n *\n * Creates a new custom generic table within the datalake.\n */\nexport const platformApiGenericTableControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiGenericTableControllerCreateResponses, PlatformApiGenericTableControllerCreateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * List the authenticated user's pending invitations\n *\n * Returns invitations addressed to the authenticated user that have not\n * yet been accepted. Mirrors the LiveView at `/app/users/tenant-invitations`\n * that recipients see after sign-in. Wraps `Tenants.list_invitations_by_user/1`\n * verbatim — always filtered to the current user, never accepts a query\n * parameter that could leak another user's invitations.\n *\n * Requires any Bearer (tenant-less is fine — recipients typically don't\n * have tenant scope yet at this point in the bootstrap flow).\n *\n */\nexport const platformApiInvitationControllerIndex = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiInvitationControllerIndexData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiInvitationControllerIndexResponses, PlatformApiInvitationControllerIndexErrors, ThrowOnError>({\n    security: [{ scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/invitations',\n    ...options\n});\n\n/**\n * List interoperability contracts\n *\n * Returns a paginated list of contracts scoped to the datalake.\n */\nexport const platformApiInteroperabilityContractControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiInteroperabilityContractControllerIndexResponses, PlatformApiInteroperabilityContractControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts',\n    ...options\n});\n\n/**\n * Create an interoperability contract\n *\n * Creates a new contract. `slug` is auto-generated from `name` on insert.\n */\nexport const platformApiInteroperabilityContractControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInteroperabilityContractControllerCreateResponses, PlatformApiInteroperabilityContractControllerCreateErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Get workflows catalog as markdown\n *\n * Returns one page of the workflow catalog for the current datalake, rendered as markdown. Accepts the same pagination, filtering, and ordering parameters as `index`; each workflow appears with its full variable pipeline (event dataset, MDM, context datasets, enrichment, filter, decision, actions) and the page's pagination state in a narrative line at the top. Trailing `Shared Types` section documents `TemplateConfig` + Solid filters.\n */\nexport const platformApiAgenticWorkflowControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerMetadataResponses, PlatformApiAgenticWorkflowControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/metadata',\n    ...options\n});\n\n/**\n * Get interoperability contracts catalog as markdown\n *\n * Returns one page of the interoperability contract catalog for the current datalake, rendered as markdown. Accepts the same pagination, filtering, and ordering parameters as `index`; each contract appears with its target-resource field schema and the page's pagination state in a narrative line at the top. Trailing `Shared Types` section documents `TemplateConfig` + Solid filters.\n */\nexport const platformApiInteroperabilityContractControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiInteroperabilityContractControllerMetadataResponses, PlatformApiInteroperabilityContractControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/metadata',\n    ...options\n});\n\n/**\n * Get single DAC dataset metadata\n *\n * Returns a markdown document describing the fields of each dataset connected to this data activation client via its interoperability contracts.\n */\nexport const platformApiDataActivationClientControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerMetadataDetailsResponses, PlatformApiDataActivationClientControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{id}/metadata',\n    ...options\n});\n\n/**\n * Accept a tenant invitation\n *\n * Accepts a pending invitation addressed to the authenticated user, creating\n * a `Membership` and deleting the invitation. Mirrors the LiveView flow at\n * `/app/users/tenant-invitations` → \"Accept\" button. Wraps\n * `Tenants.accept_invitation!/2` verbatim.\n *\n * The function-level guard `get_invitation_by_user!/2` ensures the invitation\n * is addressed to the caller — cross-user acceptance returns 404.\n *\n * Requires any Bearer (the recipient often has only a tenant-less Bearer at\n * this point — they just signed up and haven't joined a tenant yet).\n *\n */\nexport const platformApiInvitationControllerAccept = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInvitationControllerAcceptData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInvitationControllerAcceptResponses, PlatformApiInvitationControllerAcceptErrors, ThrowOnError>({\n    security: [{ scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/invitations/{id}/accept',\n    ...options\n});\n\n/**\n * Cancel a scheduled workflow run\n *\n * Stops a run that has not fired, and cancels the job that would have fired it.\n *\n * Allowed **only while the run is `scheduled`** — before its segment has been\n * resolved and before a single per-record job has been enqueued. Once the run\n * is `processing` the fan-out has begun and those jobs have no way to learn the\n * parent was cancelled; a \"cancellation\" then would report a campaign as\n * stopped while it kept sending. The endpoint returns 422 instead.\n *\n * Safe to call against a run whose job is being picked up at that exact moment:\n * the cancellation and the worker contend for the same row in one statement, so\n * exactly one wins and the other is told. A run that returns 200 here has sent\n * nothing.\n *\n */\nexport const platformApiWorkflowRunControllerCancel = <ThrowOnError extends boolean = false>(options: Options<PlatformApiWorkflowRunControllerCancelData, ThrowOnError>) => (options.client ?? client).post<PlatformApiWorkflowRunControllerCancelResponses, PlatformApiWorkflowRunControllerCancelErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/workflow-runs/{id}/cancel',\n    ...options\n});\n\n/**\n * Create datalake upload link\n *\n * Returns a presigned PUT URL for uploading a file (NDJSON or CSV) directly to the datalake's raw 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.\n */\nexport const platformApiDatalakeControllerCreateUploadLink = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerCreateUploadLinkData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerCreateUploadLinkResponses, PlatformApiDatalakeControllerCreateUploadLinkErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/upload-link',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * List datalakes\n *\n * Returns a paginated list of datalakes for the authenticated tenant.\n */\nexport const platformApiDatalakeControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerIndexResponses, PlatformApiDatalakeControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes',\n    ...options\n});\n\n/**\n * Create a datalake\n *\n * Creates a new datalake for the authenticated tenant.\n */\nexport const platformApiDatalakeControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerCreateResponses, PlatformApiDatalakeControllerCreateErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Show a single DAC processing log\n *\n * Returns a single `DataActivationLog` row scoped to this DAC. Returns 404 if the id belongs to a different client.\n */\nexport const platformApiDataActivationClientControllerLogShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerLogShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerLogShowResponses, PlatformApiDataActivationClientControllerLogShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/logs/{id}',\n    ...options\n});\n\n/**\n * Delete a data source\n *\n * Deletes a data source (addressed by id) within the authenticated datalake.\n */\nexport const platformApiDataSourceControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiDataSourceControllerDeleteResponses, PlatformApiDataSourceControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}',\n    ...options\n});\n\n/**\n * Get a data source\n *\n * Returns a single data source by id within the authenticated tenant + datalake.\n */\nexport const platformApiDataSourceControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataSourceControllerShowResponses, PlatformApiDataSourceControllerShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}',\n    ...options\n});\n\n/**\n * Replace a data source\n *\n * Replaces a data source with the full resource body. PUT semantics — all required fields must be present.\n */\nexport const platformApiDataSourceControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiDataSourceControllerUpdateResponses, PlatformApiDataSourceControllerUpdateErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Delete an agentic workflow\n *\n * Deletes a workflow and all associated actions, context datasets, and AI agent attachments. A workflow with run logs cannot be deleted (409 Conflict) — the logs preserve its run history; rename the workflow instead to free its name for a replacement.\n */\nexport const platformApiAgenticWorkflowControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiAgenticWorkflowControllerDeleteResponses, PlatformApiAgenticWorkflowControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}',\n    ...options\n});\n\n/**\n * Get an agentic workflow\n *\n * Returns a single workflow by ID with nested AI agents.\n */\nexport const platformApiAgenticWorkflowControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerShowResponses, PlatformApiAgenticWorkflowControllerShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}',\n    ...options\n});\n\n/**\n * Replace an agentic workflow\n *\n * Replaces a workflow with the full resource body. PUT semantics — all required fields must be present. AI agents are nested under `workflow_ai_agents`; the array replaces the attached set transactionally.\n */\nexport const platformApiAgenticWorkflowControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiAgenticWorkflowControllerUpdateResponses, PlatformApiAgenticWorkflowControllerUpdateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Trigger a manual poll of an action status updater\n *\n * Enqueues one poll trampoline on demand — the manual counterpart of the cron tick, mirroring the data activation client's run-manually. Empty body or omitted `updater_body` polls with the updater's persisted `updater_body`. Supplying an `updater_body` map applies a one-shot override for this run only (e.g. a widened historical poll window) — the persisted updater is not modified. The poll runs fully asynchronously: this responds 202 with the updater row as-is; poll the updater and read the outcome from `last_run_status`, `last_run_events_found`, and `last_run_error`. Apply jobs are asynchronous too — observe message status on the message rows. A halted updater (`status` other than `active`) answers 409, naming its status and last run error, and queues nothing; set `status` back to `active` to resume polling. A refresh made while a poll for the updater is already queued also answers 409 and queues nothing, override included; retry once that poll finishes.\n */\nexport const platformApiActionStatusUpdaterControllerRefresh = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerRefreshData, ThrowOnError>) => (options.client ?? client).post<PlatformApiActionStatusUpdaterControllerRefreshResponses, PlatformApiActionStatusUpdaterControllerRefreshErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}/refresh',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Compute the drift checksum for a datalake config\n *\n * Returns the server-computed drift fingerprint a create/update would stamp for the submitted config, without persisting anything. `alvera plan` posts the operator's desired config here and compares the result against the deployed datalake's `checksum` (from GET) to decide absent / unchanged / edited.\n */\nexport const platformApiDatalakeControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerChecksumResponses, PlatformApiDatalakeControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Ingest JSON data asynchronously\n *\n * Ingest a single JSON record for processing through the data activation\n * pipeline. Returns `202 Accepted` immediately with `{batch_id, key,\n * jobs_count}`; per-row work runs asynchronously on the data-activation Oban\n * queue.\n *\n * ## Per-batch artifacts (audit trail)\n *\n * The DAC pipeline does NOT use the `<step>.json` convention that workflows\n * do — its byproducts are NDJSON archives, surfaced on the\n * `DataActivationLog` row that the batch produces:\n *\n * | Field           | Bucket       | Body                                                                                     |\n * | --------------- | ------------ | ---------------------------------------------------------------------------------------- |\n * | `key` (response)| raw    | the raw JSON payload uploaded by THIS request                                            |\n * | `input_files`   | raw    | source artifacts consumed by the batch (one per ingest call merged into the batch)       |\n * | `output_files`  | raw    | the merged NDJSON archive as `{object_key, mode}`                                        |\n *\n * ### Fetching diagnostic artifacts\n *\n * Use the same datalake download-link endpoint as workflow artifacts\n * (`POST /api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link`):\n *\n * # raw payload that this ingest call uploaded\n * { \"bucket\": \"<raw>\", \"key\": \"<response.key>\" }\n *\n * # merged archive (after batch completes)\n * { \"bucket\": \"<raw>\", \"key\": \"<output_files[0].object_key>\" }\n *\n * The lake has one bucket, so there is one archive and\n * `output_files[0].mode` is always `raw`. The bucket name is exposed on the\n * datalake response as `cloud_storage.bucket`.\n *\n * ### Failure surfacing\n *\n * On a `{:error, _}` ingest response the platform returns `422` with an\n * `error` string.\n *\n * For pipeline failures (a row the contract refused), read the\n * `DataActivationLog` row's **`status` and `error`**: a refused row moves\n * `status` to `partial` and writes the reason into `error`. Those two are the\n * failure signal.\n *\n * **`rows_ingested` is not.** It is seeded to the submitted total when the\n * batch is enqueued and is never lowered — a batch that took ten rows and\n * persisted nine still reads ten. `dataset_updated`, maintained by a database\n * trigger, counts only the rows whose checksum actually changed, so it sits\n * below `rows_ingested` on clean batches too and cannot be used to infer a\n * failure either.\n *\n * Per-row diagnostics live in the Oban job table (`oban_jobs.errors`) keyed by\n * `batch_id`. There is no `error.json` artifact on the DAC path — that\n * convention is workflow-only.\n *\n */\nexport const platformApiDataActivationClientControllerIngest = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerIngestData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerIngestResponses, PlatformApiDataActivationClientControllerIngestErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/ingest',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Delete an action status updater\n *\n * Deletes an action status updater (addressed by id) within the authenticated datalake.\n */\nexport const platformApiActionStatusUpdaterControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiActionStatusUpdaterControllerDeleteResponses, PlatformApiActionStatusUpdaterControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}',\n    ...options\n});\n\n/**\n * Get an action status updater\n *\n * Returns a single action status updater by id within the authenticated datalake.\n */\nexport const platformApiActionStatusUpdaterControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiActionStatusUpdaterControllerShowResponses, PlatformApiActionStatusUpdaterControllerShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}',\n    ...options\n});\n\n/**\n * Replace an action status updater\n *\n * Replaces an action status updater with the full resource body. PUT semantics — all required fields must be present.\n */\nexport const platformApiActionStatusUpdaterControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiActionStatusUpdaterControllerUpdateResponses, PlatformApiActionStatusUpdaterControllerUpdateErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * List advanced migrations\n *\n * Returns a paginated list of the datalake's advanced migrations, oldest version first. A migration belongs to exactly one datalake, so this is the whole list for it.\n */\nexport const platformApiAdvancedMigrationControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdvancedMigrationControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAdvancedMigrationControllerIndexResponses, PlatformApiAdvancedMigrationControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations',\n    ...options\n});\n\n/**\n * Create an advanced migration\n *\n * Writes a new advanced migration for the datalake. It is stored, not executed — the migrator applies it on the datalake's next migration run, in version order. The version is assigned by the platform; `datalake_id` comes from the URL, not the body.\n */\nexport const platformApiAdvancedMigrationControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdvancedMigrationControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAdvancedMigrationControllerCreateResponses, PlatformApiAdvancedMigrationControllerCreateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Tools catalog as markdown\n *\n * Returns one page of the tools catalog for the current datalake, rendered as markdown. Accepts the same pagination, filtering, and ordering parameters as `index`; each tool appears with its wrapper fields, body-side schema, and the test-invocation block. The page's pagination state is written into a narrative line at the top of the body. Trailing `Shared Types` section documents `TemplateConfig` + Solid filters.\n */\nexport const platformApiToolControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiToolControllerMetadataResponses, PlatformApiToolControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/metadata',\n    ...options\n});\n\n/**\n * Compute the drift checksum for an AI agent config\n *\n * Returns the server-computed drift fingerprint a create/update would stamp for the submitted config, without persisting anything. `alvera plan` posts the operator's desired config here and compares the result against the deployed agent's `checksum` (from GET) to decide absent / unchanged / edited.\n */\nexport const platformApiAiAgentControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAiAgentControllerChecksumResponses, PlatformApiAiAgentControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Get a workflow run\n *\n * Returns one run with everything known about it so far.\n *\n * Which fields are populated is itself the progress report. A `scheduled` run\n * carries `preview_user_search_id`, `scheduled_at` and `matched_count` and\n * nothing else — nothing has executed. Once it fires it gains\n * `execution_user_search_id` (the search whose results **are** the audience),\n * `batch_id` and `workflow_run_log_id`. A run that failed to resolve its clause\n * carries `failure_reason`.\n *\n */\nexport const platformApiWorkflowRunControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiWorkflowRunControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiWorkflowRunControllerShowResponses, PlatformApiWorkflowRunControllerShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/workflow-runs/{id}',\n    ...options\n});\n\n/**\n * List runs for a Data Activation Client\n *\n * Returns a Flop-paginated list of this client's runs — **one row per run**, not one per dataset table. `closed_at` is empty while a run is still going, and `status` means nothing until it is set. For the per-table detail of a run, read `/logs` and filter on the same `batch_id`.\n */\nexport const platformApiDataActivationClientControllerBatchesIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerBatchesIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerBatchesIndexResponses, PlatformApiDataActivationClientControllerBatchesIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/batches',\n    ...options\n});\n\n/**\n * List the datasets the platform registers\n *\n * Returns the dataset name strings the platform registers:\n * `action_log`, `beneficial_owner`, `document`, `legal_entity`, `message`.\n * Each name is a valid argument to\n * `GET /api/v1/datasets/:dataset_type/metadata` for the rendered\n * schema docs, and to `GET /api/v1/datasets/:dataset_type/search` for\n * row data.\n *\n * **The list does not vary by datalake or by tenant.** It is the key set of a\n * literal map in `Platform.Datasets`, read through\n * `Platform.Datasets.registered_datasets/0` — every datalake answers the same\n * five names, and the datalake in the path scopes the request for\n * authorisation only. There is no per-industry registry behind it.\n *\n * **This endpoint does not list user-defined generic tables.** Concern\n * separation: generic tables are CRUD-able resources with their own\n * lifecycle and live under\n * `GET /api/v1/tenants/:tenant_slug/datalakes/:datalake_slug/generic-tables`.\n * To enumerate the full set of queryable datasets a caller must hit\n * both endpoints (`system-datasets` for the platform-registered five and\n * `generic-tables` for operator-defined ones). Each surface owns one\n * concern: enumeration here, lifecycle there.\n *\n * Pure read — no DB access on the platform side.\n *\n */\nexport const platformApiDatalakeControllerSystemDatasets = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerSystemDatasetsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerSystemDatasetsResponses, PlatformApiDatalakeControllerSystemDatasetsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/system-datasets',\n    ...options\n});\n\n/**\n * List AI agents\n *\n * Returns a paginated list of AI agents for the authenticated tenant.\n */\nexport const platformApiAiAgentControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAiAgentControllerIndexResponses, PlatformApiAiAgentControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents',\n    ...options\n});\n\n/**\n * Create an AI agent\n *\n * Creates a new AI agent for the authenticated tenant.\n */\nexport const platformApiAiAgentControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAiAgentControllerCreateResponses, PlatformApiAiAgentControllerCreateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * List workflow runs\n *\n * Returns the datalake's workflow runs, **soonest send first** — the order a\n * campaign screen reads top-down.\n *\n * Filter with `filter[status]` to answer the question the screen opens on:\n * `scheduled` is everything still cancellable, `processing` everything mid\n * fan-out. `mode` and `batch_id` are filterable too; `batch_id` is how you get\n * from a message back to the run that sent it.\n *\n * `global_search` is one box over the two things a row can be recognised by:\n * the **workflow slug** and the `batch_id`. Searching `batch_id` alone finds\n * nothing that has not fired yet — which is every run still worth acting on —\n * so the slug is in the same compound.\n *\n * `matched_count` on each row is the operator's **preview** — how many records\n * the clause matched when the run was scheduled. It is not the delivered\n * count, and it is not re-derived: the run resolves its clause again at send\n * time, so the audience can differ. Read what actually went out from the\n * workflow logs for the run's `batch_id`.\n *\n */\nexport const platformApiWorkflowRunControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiWorkflowRunControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiWorkflowRunControllerIndexResponses, PlatformApiWorkflowRunControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/workflow-runs',\n    ...options\n});\n\n/**\n * Get generic tables catalog as markdown\n *\n * Returns one page of the generic table catalog for the datalake, rendered as markdown — operator-defined custom tables plus system tables for the data domain. Accepts the same pagination, filtering, and ordering parameters as `index`; each table appears with its column schema and the page's pagination state in a narrative line at the top. Trailing `Shared Types` section documents `TemplateConfig` + Solid filters.\n */\nexport const platformApiGenericTableControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiGenericTableControllerMetadataResponses, PlatformApiGenericTableControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/metadata',\n    ...options\n});\n\n/**\n * List workflow execution logs\n *\n * Returns a paginated list of per-event execution logs for a workflow.\n */\nexport const platformApiAgenticWorkflowOperationsControllerWorkflowLogsIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/workflow-logs',\n    ...options\n});\n\n/**\n * Show a single run\n *\n * Returns one run by the identifier every job of that run carries. **This is the \"is it done yet\" question**: `closed_at` is empty while the run is still going and set once it is over, whatever the outcome — read `status` for that, and only once `closed_at` is set. Returns 404 if the identifier belongs to a different client.\n */\nexport const platformApiDataActivationClientControllerBatchShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerBatchShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerBatchShowResponses, PlatformApiDataActivationClientControllerBatchShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/batches/{batch_id}',\n    ...options\n});\n\n/**\n * Get single contract field metadata\n *\n * 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.\n */\nexport const platformApiInteroperabilityContractControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiInteroperabilityContractControllerMetadataDetailsResponses, PlatformApiInteroperabilityContractControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{id}/metadata',\n    ...options\n});\n\n/**\n * Get datalake domain metadata\n *\n * Returns a markdown document describing the datalake's data domain — its available standard resources and capabilities.\n */\nexport const platformApiDatalakeControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerMetadataDetailsResponses, PlatformApiDatalakeControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/metadata',\n    ...options\n});\n\n/**\n * Execute an individual action for a dataset record\n *\n * Executes a single workflow action identified by decision_key for the given dataset record, bypassing filter and decision evaluation\n */\nexport const platformApiAgenticWorkflowOperationsControllerExecute = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerExecuteData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerExecuteResponses, PlatformApiAgenticWorkflowOperationsControllerExecuteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/execute',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Report engagement on an authenticated link's message\n *\n * Called by the host serving an action's link prefix to report what the\n * person did after the exchange, with develop's fields: `opened` with\n * `opened_at` when its landing page opened, `form_submitted` with\n * `form_submitted_at` when they finish the link's form. The status goes\n * through the message's order guard, so it only ever moves the message\n * forward; a time left empty keeps the message's value. Returns the link with\n * its message, as the exchange does.\n *\n * Takes the link's token until it expires: 404 for an unknown token, 410 past\n * its expiry, 503 when the datalake cannot be reached, 422 for a status a\n * message cannot have.\n *\n * **Requires X-API-Key authentication.** A publishable key is enough.\n *\n */\nexport const platformApiAuthenticatedLinkControllerUpdateMessageTracking = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingData, ThrowOnError>) => (options.client ?? client).patch<PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingResponses, PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/authenticated-links/update-message-tracking',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Page results from a UserSearch — outer SQL chunk + inner resource Flop\n *\n * Two-tier pagination at two layers:\n *\n * * **Outer** — `outer_pagination[page]` / `outer_pagination[page_size]`\n * (defaults `1` / `1000`, max `1000`) pages cached IDs from\n * `search_results`. The cap is dictated by Postgres' `WHERE id IN (^ids)`\n * plan — past ~1k parameters the planner regresses.\n * * **Inner** — `inner_search[page]`, `inner_search[page_size]` (defaults\n * `1` / `20`), `inner_search[order_direction]` (sort on the schema's\n * `:global_search` compound), `inner_search[global_search]` (single\n * ILIKE-OR text-search knob).\n *\n * Response carries both metas under `meta.sql` and `meta.flop`. A caller\n * that only drives the inner page sees `meta.sql.has_next_page=true` when\n * the SQL search isn't exhausted; advancing `outer_pagination[page]`\n * fetches the next chunk.\n *\n */\nexport const platformApiDatasetControllerSearch = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerSearchData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatasetControllerSearchResponses, PlatformApiDatasetControllerSearchErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/datasets/{dataset}/search',\n    ...options\n});\n\n/**\n * Create and execute a SQL search for a dataset\n *\n * Creates a `UserSearch` row, runs `INSERT INTO search_results SELECT ... WHERE <search_query>` against the lake, and returns the `UserSearch` resource (including `status`, `results_count`, and `error_message`). The session's `data_access_mode` controls which schema is queried.\n */\nexport const platformApiDatasetControllerCreateUserSearch = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerCreateUserSearchData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatasetControllerCreateUserSearchResponses, PlatformApiDatasetControllerCreateUserSearchErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/datasets/{dataset}/user-searches',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * How far each table in a derived lake's copy has got\n *\n * Every table the tokenized or redacted copy carries, and how far each one has\n * got. The same list, in the same words, that the platform's own Tokenization\n * screen shows — a table reading `copying` there never reads something else here.\n *\n * **Every table, not only the ones behind.** A caller cannot ask to re-copy a\n * table it cannot see, and a table someone merely suspects has to be listed even\n * when the copy says it is fine.\n *\n * Only `caught_up` has arrived. `finished_copy` sounds like it has and has not:\n * the first pass is done and the changes since have not been applied yet, so a\n * table sitting there is still behind.\n *\n * For tables that are behind, `resync_empties` says what `POST .../resync` would\n * actually empty — the table plus anything that points at it. Postgres will not\n * empty a table anything references, so re-copying a parent means re-copying its\n * children too, and a caller offering that action should be able to say how many\n * before it happens.\n *\n * `:mode` is `tokenized` or `redacted` and names the COPY. The path names the\n * primary lake, because a derived lake is reached by naming its primary and a\n * data-access mode — it has a slug, but a slug is not an address.\n *\n * Requires a tenant-scoped Bearer with membership role `admin`.\n *\n */\nexport const platformApiDatalakeControllerDerivedLakeTables = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerDerivedLakeTablesData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerDerivedLakeTablesResponses, PlatformApiDatalakeControllerDerivedLakeTablesErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tokenization/{mode}/tables',\n    ...options\n});\n\n/**\n * Compute the drift checksum for a generic table config\n *\n * Returns the server-computed drift fingerprint a create/update would stamp for the submitted config, without persisting anything. `alvera plan` posts the operator's desired config here and compares the result against the deployed table's `checksum` (from GET) to decide absent / unchanged / edited.\n */\nexport const platformApiGenericTableControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiGenericTableControllerChecksumResponses, PlatformApiGenericTableControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Compute the drift checksum for a data source config\n *\n * Returns the server-computed drift fingerprint a create/update would stamp for the submitted config, without persisting anything. `alvera plan` posts the operator's desired config here and compares the result against the deployed data source's `checksum` (from GET) to decide absent / unchanged / edited.\n */\nexport const platformApiDataSourceControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataSourceControllerChecksumResponses, PlatformApiDataSourceControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Action status updaters catalog as markdown\n *\n * Returns one page of the action status updater catalog for the current datalake, rendered as markdown. Accepts the same pagination, filtering, and ordering parameters as `index`; each entry includes wrapper fields + cron + updater body + template configs + bound tools, with the page's pagination state in a narrative line at the top. Trailing `Shared Types` section documents `TemplateConfig` + Solid filters.\n */\nexport const platformApiActionStatusUpdaterControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiActionStatusUpdaterControllerMetadataResponses, PlatformApiActionStatusUpdaterControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/metadata',\n    ...options\n});\n\n/**\n * Ingest previously uploaded file\n *\n * 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>/...`).\n */\nexport const platformApiDataActivationClientControllerIngestFile = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerIngestFileData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerIngestFileResponses, PlatformApiDataActivationClientControllerIngestFileErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/ingest-file',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * List data sources\n *\n * Returns a paginated list of data sources for the authenticated tenant.\n */\nexport const platformApiDataSourceControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataSourceControllerIndexResponses, PlatformApiDataSourceControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources',\n    ...options\n});\n\n/**\n * Create a data source\n *\n * Creates a new data source for the authenticated tenant.\n */\nexport const platformApiDataSourceControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataSourceControllerCreateResponses, PlatformApiDataSourceControllerCreateErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Admin tenant sign-up — register a tenant user (integration-test only)\n *\n * Register a new user account. Mirrors the `/auth/register` LiveView form\n * submission shape — wraps `Accounts.register_user/2` verbatim with no\n * business-logic divergence. Used by the integration-test bootstrap to\n * create tenant users (production user creation is UI-driven).\n *\n * The created user is **unconfirmed** and has **no tenant memberships**. To\n * obtain a Bearer token, the user must first be confirmed (via\n * `PUT /api/v1/admin/users/:id/confirm`), then exchange credentials at\n * `POST /api/v1/admin/bootstrap-session` (tenantless) or\n * `POST /api/v1/sessions` (tenant-scoped).\n *\n * Route exists only when `integration_test_only_admin_api?` is enabled\n * (dev/test); prod builds 404.\n *\n */\nexport const platformApiIntegrationTestOnlyAdminControllerSignUp = <ThrowOnError extends boolean = false>(options: Options<PlatformApiIntegrationTestOnlyAdminControllerSignUpData, ThrowOnError>) => (options.client ?? client).post<PlatformApiIntegrationTestOnlyAdminControllerSignUpResponses, PlatformApiIntegrationTestOnlyAdminControllerSignUpErrors, ThrowOnError>({\n    url: '/api/v1/admin/sign-up',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Trigger a manual run of a Data Activation Client\n *\n * 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.\n */\nexport const platformApiDataActivationClientControllerRunManually = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerRunManuallyData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerRunManuallyResponses, PlatformApiDataActivationClientControllerRunManuallyErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/run-manually',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * AI agents catalog as markdown\n *\n * Returns one page of the AI agent catalog for the current datalake, rendered as markdown. Accepts the same pagination, filtering, and ordering parameters as `index`; each entry includes wrapper fields + prompt config + bound tool + I/O schemas, with the page's pagination state in a narrative line at the top. Trailing `Shared Types` section documents `TemplateConfig` + Solid filters.\n */\nexport const platformApiAiAgentControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAiAgentControllerMetadataResponses, PlatformApiAiAgentControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/metadata',\n    ...options\n});\n\n/**\n * List action status updaters\n *\n * Returns a paginated list of action status updaters for the authenticated datalake.\n */\nexport const platformApiActionStatusUpdaterControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiActionStatusUpdaterControllerIndexResponses, PlatformApiActionStatusUpdaterControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters',\n    ...options\n});\n\n/**\n * Create an action status updater\n *\n * Creates a new action status updater for the authenticated datalake.\n */\nexport const platformApiActionStatusUpdaterControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiActionStatusUpdaterControllerCreateResponses, PlatformApiActionStatusUpdaterControllerCreateErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Delete an AI agent\n *\n * Deletes an AI agent. Returns 409 if the agent is attached to a workflow.\n */\nexport const platformApiAiAgentControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiAiAgentControllerDeleteResponses, PlatformApiAiAgentControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}',\n    ...options\n});\n\n/**\n * Get an AI agent\n *\n * Returns a single AI agent by ID.\n */\nexport const platformApiAiAgentControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAiAgentControllerShowResponses, PlatformApiAiAgentControllerShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}',\n    ...options\n});\n\n/**\n * Replace an AI agent\n *\n * Replaces an AI agent with the full resource body. PUT semantics — all required fields must be present.\n */\nexport const platformApiAiAgentControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiAiAgentControllerUpdateResponses, PlatformApiAiAgentControllerUpdateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Confirm a user (admin bypass)\n *\n * Marks a user account as confirmed without requiring an email-confirmation\n * token. Idempotent — confirming an already-confirmed user is a 200 no-op\n * that returns the existing `confirmed_at` timestamp.\n *\n * Wraps `Accounts.confirm_user!/1` verbatim — exactly the primitive that\n * backs the dev/admin email-confirm path in the LiveView UI. **Zero new\n * business logic.**\n *\n * Powerful primitive: bypasses the regular email-confirmation flow. Every\n * successful call is structured-logged with `caller_user_id` and\n * `target_user_id` for forensic trail.\n *\n * **Requires platform-admin authentication** (`User.role == :admin`).\n *\n */\nexport const platformApiIntegrationTestOnlyAdminControllerConfirmUser = <ThrowOnError extends boolean = false>(options: Options<PlatformApiIntegrationTestOnlyAdminControllerConfirmUserData, ThrowOnError>) => (options.client ?? client).put<PlatformApiIntegrationTestOnlyAdminControllerConfirmUserResponses, PlatformApiIntegrationTestOnlyAdminControllerConfirmUserErrors, ThrowOnError>({\n    security: [{ scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/admin/users/{id}/confirm',\n    ...options\n});\n\n/**\n * List system templates\n *\n * Returns every system template usable from the datalake's data domain, plus global (domain-agnostic) templates. Each entry includes identifier, Liquid source, and optional output JSON Schema. Companion to `/datasets/:dataset_type/metadata`.\n */\nexport const platformApiTemplatesControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiTemplatesControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiTemplatesControllerIndexResponses, PlatformApiTemplatesControllerIndexErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/system-templates',\n    ...options\n});\n\n/**\n * Compute the drift checksum for an action status updater config\n *\n * Returns the server-computed drift fingerprint a create/update would stamp for the submitted config, without persisting anything. `alvera plan` posts the operator's desired config here and compares the result against the deployed updater's `checksum` (from GET) to decide absent / unchanged / edited.\n */\nexport const platformApiActionStatusUpdaterControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiActionStatusUpdaterControllerChecksumResponses, PlatformApiActionStatusUpdaterControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Invoke an AI agent\n *\n * Executes an AI agent with the provided input variables. The input must conform to the agent's `input_schema` (if defined). Returns the parsed JSON output and usage telemetry.\n */\nexport const platformApiAiAgentControllerInvoke = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerInvokeData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAiAgentControllerInvokeResponses, PlatformApiAiAgentControllerInvokeErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}/invoke',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Revoke current session\n *\n * Revokes the current Bearer session — deactivates the session and deletes\n * the linked UserToken. The Bearer token becomes immediately invalid.\n *\n * Only works with `Authorization: Bearer <session_token>` (not X-API-Key\n * alone) — the key rides along as the mandatory companion credential.\n *\n */\nexport const platformApiSessionControllerDelete = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiSessionControllerDeleteData, ThrowOnError>) => (options?.client ?? client).delete<PlatformApiSessionControllerDeleteResponses, PlatformApiSessionControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/sessions',\n    ...options\n});\n\n/**\n * Sign in to a tenant (human auth)\n *\n * Exchange user credentials for a tenant-scoped Bearer session token.\n *\n * Send `{email, password, tenant_slug}` — all three required — plus the\n * tenant's publishable `X-API-Key` header. Returns a Bearer carrying the\n * caller's membership role in that tenant (or 401 if the user has no\n * membership). The key must belong to the tenant named by `tenant_slug`\n * (403 otherwise) and is stamped onto the created session's `api_key_id`\n * so it can be traced back to the publishable key that authenticated it.\n *\n * Use the returned `session_token` as `Authorization: Bearer <session_token>`\n * — accompanied by the same `X-API-Key` — on subsequent API requests.\n *\n * Optionally specify `expires_in` (seconds) to control session duration.\n * Default: 86400 (24 hours). Maximum: 2592000 (30 days).\n *\n * The tenantless bootstrap login (platform admin, pre-tenant flows) lives\n * at `POST /api/v1/admin/bootstrap-session` — an integration-test-only\n * route that does not exist in prod builds.\n *\n */\nexport const platformApiSessionControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiSessionControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiSessionControllerCreateResponses, PlatformApiSessionControllerCreateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }],\n    url: '/api/v1/sessions',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Get data activation clients catalog as markdown\n *\n * Returns one page of the data activation client catalog for the current datalake, rendered as markdown. Accepts the same pagination, filtering, and ordering parameters as `index`; each client appears with its connected-dataset field schema and the page's pagination state in a narrative line at the top. Trailing `Shared Types` section documents `TemplateConfig` + Solid filters.\n */\nexport const platformApiDataActivationClientControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerMetadataResponses, PlatformApiDataActivationClientControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/metadata',\n    ...options\n});\n\n/**\n * List agentic workflows\n *\n * Returns a paginated list of workflows for a datalake.\n */\nexport const platformApiAgenticWorkflowControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerIndexResponses, PlatformApiAgenticWorkflowControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows',\n    ...options\n});\n\n/**\n * Create an agentic workflow\n *\n * Creates a new workflow. AI agents are nested directly in the request body under `workflow_ai_agents` and attached transactionally with the workflow.\n */\nexport const platformApiAgenticWorkflowControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowControllerCreateResponses, PlatformApiAgenticWorkflowControllerCreateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * List processing logs for a Data Activation Client\n *\n * 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.\n */\nexport const platformApiDataActivationClientControllerLogsIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerLogsIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerLogsIndexResponses, PlatformApiDataActivationClientControllerLogsIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/logs',\n    ...options\n});\n\n/**\n * Test invoke a tool\n *\n * 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.\n */\nexport const platformApiToolControllerTestInvocation = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerTestInvocationData, ThrowOnError>) => (options.client ?? client).post<PlatformApiToolControllerTestInvocationResponses, PlatformApiToolControllerTestInvocationErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}/test-invocation',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Single AI agent metadata as markdown\n *\n * Returns markdown for one AI agent — wrapper + prompt config + bound tool + I/O schemas. Drill into the bound tool's full metadata via `GET /datalakes/:datalake_slug/tools/:id/metadata`.\n */\nexport const platformApiAiAgentControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAiAgentControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAiAgentControllerMetadataDetailsResponses, PlatformApiAiAgentControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}/metadata',\n    ...options\n});\n\n/**\n * List batch run logs\n *\n * Returns a paginated list of batch-level workflow run logs.\n */\nexport const platformApiAgenticWorkflowOperationsControllerBatchLogsIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs',\n    ...options\n});\n\n/**\n * Compute the drift checksum for an advanced migration config\n *\n * Returns the server-computed drift fingerprint a create/replace would stamp for the submitted config, without persisting anything. `alvera plan` posts the desired config here and compares the result against the stored `checksum` (from GET) to decide absent / unchanged / edited. The version is server-assigned and is deliberately not part of the fingerprint.\n */\nexport const platformApiAdvancedMigrationControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdvancedMigrationControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAdvancedMigrationControllerChecksumResponses, PlatformApiAdvancedMigrationControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Get datalakes catalog as markdown\n *\n * Returns one page of the datalake catalog for the tenant, rendered as markdown — each entry carries slug, name, status, repo_version and points at the per-datalake metadata endpoint for the full domain inventory. Accepts the same pagination, filtering, and ordering parameters as the datalake `index`; the page's pagination state is written into a narrative line at the top.\n */\nexport const platformApiDatalakeControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatalakeControllerMetadataResponses, PlatformApiDatalakeControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/metadata',\n    ...options\n});\n\n/**\n * Empty one table in a derived lake's copy and copy it again\n *\n * The repair for a table that stopped arriving because the copy already held\n * rows it was being sent. Restarting the copy cannot fix that one — it restarts a\n * worker and discards nothing, so a copy that broke on a row it cannot insert\n * breaks on the same row again.\n *\n * **It empties the table, then copies it from the start.** Every row in a derived\n * lake can be produced again from the original, which is what makes emptying one\n * a repair rather than a loss. Nothing is written to the original lake — the only\n * thing that changes there is which tables its publication names, and only for\n * the tables being repaired.\n *\n * **It may empty more than one table.** Postgres will not empty a table anything\n * points at, however few rows the referencing tables hold, so repairing a parent\n * empties its children too — all of them re-copied by the same run. The response\n * says exactly which tables were emptied, and `GET .../tables` says beforehand.\n *\n * **It refuses a name it did not give you.** The table must be one this copy\n * carries or one the original can send. That gate is what stands between a typo\n * and an emptied table.\n *\n * **It does not roll back.** A failure part-way leaves the table empty and says\n * so, because the rows to put back are the ones that broke the copy in the first\n * place.\n *\n * Returns **202**: a fresh first pass has started and finishes later. Poll\n * `GET .../tables` and wait for the table to read `caught_up`.\n *\n * Requires a tenant-scoped Bearer with membership role `admin`.\n *\n */\nexport const platformApiDatalakeControllerResyncTable = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerResyncTableData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerResyncTableResponses, PlatformApiDatalakeControllerResyncTableErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tokenization/{mode}/resync',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Single action status updater metadata as markdown\n *\n * Returns markdown for one action status updater — wrapper + cron + updater body + template configs + bound tools. Drill into a bound tool's full metadata via `GET /datalakes/:datalake_slug/tools/:id/metadata`.\n */\nexport const platformApiActionStatusUpdaterControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiActionStatusUpdaterControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiActionStatusUpdaterControllerMetadataDetailsResponses, PlatformApiActionStatusUpdaterControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}/metadata',\n    ...options\n});\n\n/**\n * Get single workflow metadata\n *\n * Returns a markdown document describing the workflow's variable pipeline — available variables at each node (event dataset, MDM, context datasets, enrichment, filter, decision, actions).\n */\nexport const platformApiAgenticWorkflowControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowControllerMetadataDetailsResponses, PlatformApiAgenticWorkflowControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}/metadata',\n    ...options\n});\n\n/**\n * Health check\n *\n * Public health check endpoint that returns:\n * - Application version\n * - Database connectivity status (SELECT 1 query)\n * - Current timestamp\n *\n * **No authentication required.**\n *\n */\nexport const platformApiPingControllerPing = <ThrowOnError extends boolean = false>(options?: Options<PlatformApiPingControllerPingData, ThrowOnError>) => (options?.client ?? client).get<PlatformApiPingControllerPingResponses, PlatformApiPingControllerPingErrors, ThrowOnError>({ url: '/api/ping', ...options });\n\n/**\n * List data activation clients\n *\n * Returns a paginated list of DACs for the datalake in the path.\n */\nexport const platformApiDataActivationClientControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataActivationClientControllerIndexResponses, PlatformApiDataActivationClientControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients',\n    ...options\n});\n\n/**\n * Create a data activation client\n *\n * 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).\n */\nexport const platformApiDataActivationClientControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataActivationClientControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDataActivationClientControllerCreateResponses, PlatformApiDataActivationClientControllerCreateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Verify legal entity identity\n *\n * Verify a legal entity's identity against its master record.\n *\n * The body carries `legal_entity_id` plus the legal entity's identity fields —\n * see the `MDMVerifyRequest` schema for the field set (person identity, company\n * identity, and fields for either, such as `identifiers`, `phone` and `email`).\n * String fields are fuzzy-matched (Jaro-Winkler), dates component-fuzzy-matched,\n * and identifiers exact-matched on `(system, value)`; the rule for each field is\n * documented on its schema property.\n *\n * At least one field that can stand alone as evidence is required (the\n * `MDMVerifyRequest` schema lists them) — a body with none returns 422 in the\n * house error envelope, pointer `/base`.\n * A subject that does not verify returns 422 the same way, one entry per\n * field that did not match, each pointing at its field (`/business_name`,\n * `/addresses`).\n *\n * **Requires X-API-Key authentication.**\n *\n */\nexport const platformApiMdmControllerVerify = <ThrowOnError extends boolean = false>(options: Options<PlatformApiMdmControllerVerifyData, ThrowOnError>) => (options.client ?? client).post<PlatformApiMdmControllerVerifyResponses, PlatformApiMdmControllerVerifyErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/mdm/verify',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Bootstrap a tenantless platform-admin session (integration-test only)\n *\n * Exchanges email + password for a **tenantless** Bearer session — how the\n * very first Bearer of an environment comes into existence, before any\n * tenant (and therefore any tenant-scoped publishable key) exists. Keyless\n * by structural necessity; tenant logins belong to `POST /api/v1/sessions`,\n * which requires the tenant's `X-API-Key` — supplying `tenant_slug` here is\n * a 422.\n *\n * Route exists only when `integration_test_only_admin_api?` is enabled\n * (dev/test); prod builds 404.\n *\n */\nexport const platformApiIntegrationTestOnlyAdminControllerBootstrapSession = <ThrowOnError extends boolean = false>(options: Options<PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionData, ThrowOnError>) => (options.client ?? client).post<PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionResponses, PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionErrors, ThrowOnError>({\n    url: '/api/v1/admin/bootstrap-session',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Get system templates catalog as markdown\n *\n * Returns one page of the system template catalog for the datalake's data domain, rendered as markdown. Templates are a filesystem corpus: the catalog sorts them alphabetically and fake-paginates the sorted list — it reuses the `page` / `page_size` query parameters but makes no Flop DB call. Each template appears with its identifier, Liquid source, and (when present) the companion `output_schema`; the page's pagination state is written into a narrative line at the top. Trailing `Shared Types` section documents the shared `TemplateConfig` schema + Solid custom filters.\n */\nexport const platformApiTemplatesControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiTemplatesControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiTemplatesControllerMetadataResponses, PlatformApiTemplatesControllerMetadataErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/system-templates/metadata',\n    ...options\n});\n\n/**\n * Compute the drift checksum for an interoperability contract config\n *\n * Returns the server-computed drift fingerprint a create/update would stamp for the submitted config, without persisting anything. A client posts a desired config here and compares the result against the deployed contract's `checksum` (from GET) to detect drift (absent / unchanged / edited).\n */\nexport const platformApiInteroperabilityContractControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInteroperabilityContractControllerChecksumResponses, PlatformApiInteroperabilityContractControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Get schema metadata for a specific dataset type\n *\n * 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.\n */\nexport const platformApiDatasetControllerDatasetMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerDatasetMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatasetControllerDatasetMetadataResponses, PlatformApiDatasetControllerDatasetMetadataErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/datasets/{dataset_type}/metadata',\n    ...options\n});\n\n/**\n * Turn tokenization on for a datalake\n *\n * Provisions the two lakes derived from a raw one — the tokenized lake and\n * the redacted lake — and enqueues a migration for each. Returns the raw\n * lake with `derived_datalakes` preloaded.\n *\n * **The platform asks infrastructure for each lake's database.** A derived\n * lake's database is a CloudFormation stack: this call requests one per lake,\n * reads back where it ended up, and only then writes the lake's row. An\n * environment that names no template cannot make that request, and this call\n * refuses with `not_provisioned` rather than writing a lake pointing at a\n * database nobody created. The console's button is gated on the same check and\n * does not render there.\n *\n * **A stack that fails leaves nothing behind** — no database, no row, and no\n * stack, because a stack left standing collides with the next attempt by name\n * and reports itself as a CloudFormation error rather than a lake problem.\n *\n * Nothing here creates a database directly. The platform asks, infrastructure\n * decides whether and where to make one, and the connection is still probed\n * before the lake is accepted. A **raw** lake's database is unchanged: it\n * belongs to whoever runs the server it sits on, and the platform neither\n * makes nor removes it.\n *\n * Each derived database is named from the raw lake's `db_writer_name` and\n * `db_reader_name` with `_tokenized` or `_redacted` appended. **That suffix is\n * not configurable.** It is written into the platform, and it is the name the\n * stack request carries.\n *\n * **They do not run on the raw lake's server.** The tokenized and redacted\n * lakes sit on Postgres separate from the raw lake and from each other: they\n * run `postgresql_anonymizer` and PL/Python, and the raw lake holds real\n * values and should have neither installed. Where each one ended up is a\n * stack output, along with the user and password to open it — the row records\n * what infrastructure answered rather than what the platform assumed.\n *\n * **A limit on what a raw lake may be called.** Postgres truncates an\n * identifier longer than 63 bytes silently, which would put two differently\n * named derived lakes on one physical database and read as flake rather than\n * as the collision it is. So this call refuses out loud instead, when a\n * derived name would exceed 63 bytes. `_tokenized` is the longer of the two\n * suffixes, which leaves a raw lake's writer and reader names 53 bytes — worth\n * knowing when the lake is being named, because it cannot be renamed after.\n *\n * **Intended as both or neither** — they are created, destroyed and paid for\n * together. **Not atomic today.** The two are provisioned in sequence and each\n * commits on its own, so a run that provisions the tokenized lake and then\n * cannot provision the redacted one reports the failure and leaves the first in\n * place. Making the pair transactional is filed tech debt.\n *\n * A caller that gets an error here should re-read the lake and check\n * `derived_datalakes` rather than assume nothing was created. Note that the\n * console's \"Turn on tokenization\" button only appears when there are none, so a\n * half-provisioned lake is repaired through this endpoint or not at all.\n *\n * **Idempotent.** Already-provisioned lakes are returned exactly as they are,\n * so this is safe to call twice.\n *\n * The migration is not optional and not a second call: a derived lake is\n * provisioned EMPTY, and it needs the same tables the primary has before a\n * single row can land in it. Migrating is what labels its columns and starts\n * the copy.\n *\n * A derived lake is written in `status: \"provisioning\"` — its stack has been\n * asked for and its database may still be coming up — and the migration moves\n * it on. Those migrations are asynchronous: poll `GET /datalakes` and watch\n * the derived lakes for `status: :ready`.\n *\n * A derived lake is otherwise fully managed: nothing writes to one but the\n * replication apply, and there is no endpoint that creates, configures or\n * deletes one directly.\n *\n * The LiveView \"Turn on tokenization\" button does the same two things in the\n * same order.\n *\n * Requires a tenant-scoped Bearer with membership role `admin`.\n *\n */\nexport const platformApiDatalakeControllerProvisionTokenization = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerProvisionTokenizationData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerProvisionTokenizationResponses, PlatformApiDatalakeControllerProvisionTokenizationErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tokenization',\n    ...options\n});\n\n/**\n * Invite a user to the tenant\n *\n * Creates a `tenant_admin`-issued invitation. Mirrors the LiveView flow at\n * `/app/team` → \"Invite new member\". Wraps `Tenants.send_tenant_invitation/3`\n * verbatim, including the email send.\n *\n * The `role` enum is **membership-level** (`member`, `researcher`, `admin`),\n * NOT the platform-wide `User.role` enum — privilege-escalation safe by\n * construction.\n *\n * Requires a tenant-scoped Bearer with membership role `:admin`\n * (`current_role.name == \"tenant_admin\"`).\n *\n */\nexport const platformApiInvitationControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInvitationControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInvitationControllerCreateResponses, PlatformApiInvitationControllerCreateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/invitations',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * List tools\n *\n * Returns a paginated list of tools for the current datalake.\n */\nexport const platformApiToolControllerIndex = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerIndexData, ThrowOnError>) => (options.client ?? client).get<PlatformApiToolControllerIndexResponses, PlatformApiToolControllerIndexErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools',\n    ...options\n});\n\n/**\n * Create a tool\n *\n * Creates a new tool for the current datalake. Any `datalake_id` in the request body is ignored — the URL's `:datalake_slug` is authoritative.\n */\nexport const platformApiToolControllerCreate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerCreateData, ThrowOnError>) => (options.client ?? client).post<PlatformApiToolControllerCreateResponses, PlatformApiToolControllerCreateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Compute the drift checksum for a tool config\n *\n * Returns the server-computed drift fingerprint a create/update would stamp for the submitted config, without persisting anything. `alvera plan` posts the operator's desired config here and compares the result against the deployed tool's `checksum` (from GET) to decide absent / unchanged / edited.\n */\nexport const platformApiToolControllerChecksum = <ThrowOnError extends boolean = false>(options: Options<PlatformApiToolControllerChecksumData, ThrowOnError>) => (options.client ?? client).post<PlatformApiToolControllerChecksumResponses, PlatformApiToolControllerChecksumErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/checksum',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Get single system template details as markdown\n *\n * Returns markdown for one system template, identified by its basename (`filename`) + `intent` query parameter. The datalake (derived from `:datalake_slug`) is combined with `intent` to compute the search prefix; the server then resolves `filename` uniquely under that prefix. Out-of-domain templates are unreachable by URL construction. Returns 404 if no match, 409 if the basename is ambiguous within the resolved scope.\n */\nexport const platformApiTemplatesControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiTemplatesControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiTemplatesControllerMetadataDetailsResponses, PlatformApiTemplatesControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/system-templates/{filename}/metadata',\n    ...options\n});\n\n/**\n * Get a batch run log\n *\n * Returns a single batch-level workflow run log with merged artifacts.\n */\nexport const platformApiAgenticWorkflowOperationsControllerBatchLogShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}',\n    ...options\n});\n\n/**\n * Execute a read-only SQL query against the datalake\n *\n * Executes a read-only `sql` statement (INSERT/UPDATE/DELETE/DDL are rejected) on the\n * mode-appropriate datalake schema, with Flop-inspired pagination (`page` / `page_size`;\n * page size capped server-side). Returns the page of rows in `data` and structural +\n * pagination metadata in `meta`. Pass `?format=csv` to download the page as a CSV attachment.\n *\n */\nexport const platformApiDatalakeControllerExecuteSql = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatalakeControllerExecuteSqlData, ThrowOnError>) => (options.client ?? client).post<PlatformApiDatalakeControllerExecuteSqlResponses, PlatformApiDatalakeControllerExecuteSqlErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/execute-sql',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Schedule a workflow run for matching records\n *\n * Records a **workflow run** for all dataset records matching the SQL WHERE\n * clause, and returns immediately with its id. Pass `scheduled_at` to fire it\n * at a chosen time; omit it to fire as soon as a worker picks it up. Either\n * way a run row exists, so the invocation can be listed, polled and — while\n * still `scheduled` — cancelled.\n *\n * **Breaking change in 0.23.0.** This endpoint used to execute inline and\n * return `enqueued_count`, `batch_id` and `workflow_run_log_id`. It no longer\n * can: the segment is resolved when the run fires, so the batch those fields\n * describe does not exist at response time. Read them from the run once its\n * status leaves `scheduled`.\n *\n * The clause is resolved once at request time to produce `matched_count` —\n * a preview for sanity-checking the clause. It is **not** the audience: the\n * run resolves the clause again at send time, so a run scheduled on Monday for\n * Friday reaches Friday's matches, minus suppressed records.\n *\n * When the run fires it takes the ordinary path — sampled events, workflow\n * jobs, and a WorkflowRunLog tracking batch-level progress, polled by a daily\n * DynamicCron. When that log reports the batch exhausted, the run completes.\n *\n * ## Per-step artifacts (audit trail)\n *\n * Each per-row WorkflowExecutionLog (WEL) writes a fixed set of JSON\n * artifacts to the datalake's cloud-storage bucket. The path is\n * deterministic and convention-driven — there is no separate listing\n * endpoint:\n *\n * workflows/{workflow_id}/executions/{wel_id}/event.json\n * workflows/{workflow_id}/executions/{wel_id}/filter.json\n * workflows/{workflow_id}/executions/{wel_id}/enrichment.json\n * workflows/{workflow_id}/executions/{wel_id}/error.json   # only on failure\n *\n * | File              | Written by stage                       | Body                                                               |\n * | ----------------- | -------------------------------------- | ------------------------------------------------------------------ |\n * | `event.json`      | context build                          | full WorkflowContext (event_dataset, mdm_output, additional_context)|\n * | `filter.json`     | filter eval (both pass and reject)     | `{filter_expression, filter_result: bool}`                         |\n * | `enrichment.json` | enrichment terminal (success / skip / fail) | `{status: \"completed\" \\| \"failed\" \\| \"skipped\", <agent_slug>: ...}` |\n * | `error.json`      | ANY pipeline failure                   | `{stage, error_code, ai_agent_slug, error_message, detail}`        |\n *\n * `error.json`'s presence IS the failure signal — `WEL.error_message`\n * carries only a code-grade summary; the rich URL/HTTP-status/transport\n * detail lives ONLY in `error.json[\"detail\"]`. Engineers debugging a\n * failed run should download `error.json` for full context.\n *\n * ### Fetching an artifact\n *\n * Use the standard datalake download-link endpoint\n * (`POST /api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link`)\n * with `bucket = <the datalake's bucket>` and the convention key above. Example:\n *\n * POST /api/v1/tenants/acme/datalakes/clinical/download-link\n * { \"bucket\": \"clinical-lake\", \"key\": \"workflows/<wf_id>/executions/<wel_id>/error.json\" }\n *\n * The response carries a short-lived signed URL. The raw bucket is\n * exposed on the datalake response as `cloud_storage.bucket`.\n *\n */\nexport const platformApiAgenticWorkflowOperationsControllerRunWorkflow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerRunWorkflowData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponses, PlatformApiAgenticWorkflowOperationsControllerRunWorkflowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/run-workflow',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Single data source metadata as markdown\n *\n * Returns markdown for one data source — wrapper + bound tools listing. Drill into a bound tool's full metadata via `GET /datalakes/:datalake_slug/tools/:id/metadata`.\n */\nexport const platformApiDataSourceControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDataSourceControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDataSourceControllerMetadataDetailsResponses, PlatformApiDataSourceControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}/metadata',\n    ...options\n});\n\n/**\n * Force-refresh a batch run log\n *\n * Triggers an immediate refresh of the batch run log metrics and merged artifacts.\n */\nexport const platformApiAgenticWorkflowOperationsControllerBatchLogRefresh = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/refresh',\n    ...options\n});\n\n/**\n * Start or restart refresh polling for a batch run log\n *\n * Creates a DynamicCron job to poll this batch. Idempotent — if cron already exists, it's a no-op.\n */\nexport const platformApiAgenticWorkflowOperationsControllerBatchLogStart = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerBatchLogStartData, ThrowOnError>) => (options.client ?? client).post<PlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponses, PlatformApiAgenticWorkflowOperationsControllerBatchLogStartErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/start',\n    ...options\n});\n\n/**\n * Get a workflow execution log\n *\n * Returns a single execution log with action execution details. Each action\n * execution log carries a `message_body` virtual field populated from the\n * datalake message linked via `message_id`.\n *\n * Each action execution log also carries the state of the job running it —\n * `job_state`, `job_next_attempt_at` and `job_attempt`. `scheduled_at` says\n * when the action was meant to run; those three say what the job is doing\n * about it, which is how a run waiting to be picked up is told from one that\n * is stuck. They are null when no job carries the action.\n *\n * **This surface is raw-only.** There is one message body, nothing masks it,\n * and the message is read from the raw lake. The endpoint used to take a\n * `data_access_mode` query parameter and publish it as selecting which\n * database was read; it was checked in a function guard and never used, and\n * because the guard consumed the variable no unused-variable warning was ever\n * emitted. It is gone rather than made to work.\n *\n */\nexport const platformApiAgenticWorkflowOperationsControllerWorkflowLogShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponses, PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/workflow-logs/{id}',\n    ...options\n});\n\n/**\n * Get one advanced migration as markdown\n *\n * Returns a single advanced migration rendered as markdown for AI context.\n */\nexport const platformApiAdvancedMigrationControllerMetadataDetails = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdvancedMigrationControllerMetadataDetailsData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAdvancedMigrationControllerMetadataDetailsResponses, PlatformApiAdvancedMigrationControllerMetadataDetailsErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/{id}/metadata',\n    ...options\n});\n\n/**\n * Delete an interoperability contract\n *\n * Deletes a contract (addressed by id). System-created contracts are rejected with 422. DAC mappings to this contract are removed via DB cascade.\n */\nexport const platformApiInteroperabilityContractControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiInteroperabilityContractControllerDeleteResponses, PlatformApiInteroperabilityContractControllerDeleteErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{id}',\n    ...options\n});\n\n/**\n * Get an interoperability contract\n *\n * Returns a single contract by id, scoped to the datalake.\n */\nexport const platformApiInteroperabilityContractControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiInteroperabilityContractControllerShowResponses, PlatformApiInteroperabilityContractControllerShowErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{id}',\n    ...options\n});\n\n/**\n * Replace an interoperability contract\n *\n * Replaces a contract (addressed by id) with the full resource body. PUT semantics — all required fields must be present. `slug` is immutable.\n */\nexport const platformApiInteroperabilityContractControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiInteroperabilityContractControllerUpdateResponses, PlatformApiInteroperabilityContractControllerUpdateErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Delete an advanced migration\n *\n * Deletes an advanced migration that has not yet run. Returns 409 Conflict once it has been applied — the log of it running is tied to it, so deleting it would erase the record that it ever happened.\n */\nexport const platformApiAdvancedMigrationControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdvancedMigrationControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiAdvancedMigrationControllerDeleteResponses, PlatformApiAdvancedMigrationControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/{id}',\n    ...options\n});\n\n/**\n * Get an advanced migration\n *\n * Returns one advanced migration by id within the datalake. A migration belonging to another datalake answers 404 rather than revealing that it exists.\n */\nexport const platformApiAdvancedMigrationControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdvancedMigrationControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiAdvancedMigrationControllerShowResponses, PlatformApiAdvancedMigrationControllerShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/{id}',\n    ...options\n});\n\n/**\n * Replace an advanced migration\n *\n * Replaces an advanced migration that has not yet run. Returns 409 Conflict once it has been applied — a statement that has already executed against a lake cannot be rewritten after the fact, because the rewritten text would no longer describe what happened.\n */\nexport const platformApiAdvancedMigrationControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiAdvancedMigrationControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiAdvancedMigrationControllerUpdateResponses, PlatformApiAdvancedMigrationControllerUpdateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Delete a generic table\n *\n * Deletes a custom generic table addressed by id. Guarded: returns 409 Conflict when the backing table still holds rows — delete the rows first. When empty, drops both physical tables and removes the metadata.\n */\nexport const platformApiGenericTableControllerDelete = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerDeleteData, ThrowOnError>) => (options.client ?? client).delete<PlatformApiGenericTableControllerDeleteResponses, PlatformApiGenericTableControllerDeleteErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/{id}',\n    ...options\n});\n\n/**\n * Get a generic table\n *\n * Returns a single generic table by id within the datalake. Matches custom tables scoped to the datalake plus system tables for the data domain. Agents enumerate via `list` (the generic-tables index) — or resolve a name to its id via `filter[handle]` — and address by id. Industry-built datasets live separately under `system-datasets`.\n */\nexport const platformApiGenericTableControllerShow = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerShowData, ThrowOnError>) => (options.client ?? client).get<PlatformApiGenericTableControllerShowResponses, PlatformApiGenericTableControllerShowErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/{id}',\n    ...options\n});\n\n/**\n * Update a generic table\n *\n * Full-replace update of a custom generic table, addressed by id within the datalake. Every field in the request is required (PUT semantics) — the same body shape as create, so `alvera apply` can resend a full manifest to reconcile drift. Re-runs the mirror + migration for the new column set.\n */\nexport const platformApiGenericTableControllerUpdate = <ThrowOnError extends boolean = false>(options: Options<PlatformApiGenericTableControllerUpdateData, ThrowOnError>) => (options.client ?? client).put<PlatformApiGenericTableControllerUpdateResponses, PlatformApiGenericTableControllerUpdateErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/{id}',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Run a contract against a payload (sandbox)\n *\n * Runs three of the contract's pipeline stages — `filter → transform →\n * mdm_input` — against the supplied JSON row. Stateless: no DB writes, no MDM\n * resolution, no upsert. Use for template authoring/testing.\n *\n * **It does not run AI agent enrichment, and ingestion does.** The real\n * pipeline is `filter → ai_agent_enrichment → transform → mdm_input →\n * mdm.resolve → upsert`, and enrichment is what puts each attached agent's\n * parsed output under `enrichment.<agent_slug>` before the transform sees the\n * row. This endpoint hands the raw payload straight to **both** the transform\n * and the mdm_input render — ingestion hands each of them the enriched row —\n * so on a contract with agents attached every `{{ enrichment.… }}` reference\n * renders blank here and renders filled in production. Neither a transform\n * template nor an mdm_input template that reads enrichment can be proven\n * correct on this endpoint.\n *\n */\nexport const platformApiInteroperabilityContractControllerRun = <ThrowOnError extends boolean = false>(options: Options<PlatformApiInteroperabilityContractControllerRunData, ThrowOnError>) => (options.client ?? client).post<PlatformApiInteroperabilityContractControllerRunResponses, PlatformApiInteroperabilityContractControllerRunErrors, ThrowOnError>({\n    querySerializer: { parameters: { filters: { array: { style: 'deepObject' } } } },\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{slug}/run',\n    ...options,\n    headers: {\n        'Content-Type': 'application/json',\n        ...options.headers\n    }\n});\n\n/**\n * Dataset-type catalog as markdown\n *\n * Returns the markdown catalog of every dataset type registered to this datalake's data domain, each rendered with its schema documentation. The dataset-type set is small and fixed per domain, so the whole catalog is returned in one document — no pagination.\n */\nexport const platformApiDatasetControllerMetadata = <ThrowOnError extends boolean = false>(options: Options<PlatformApiDatasetControllerMetadataData, ThrowOnError>) => (options.client ?? client).get<PlatformApiDatasetControllerMetadataResponses, PlatformApiDatasetControllerMetadataErrors, ThrowOnError>({\n    security: [{ name: 'X-API-Key', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/datasets/metadata',\n    ...options\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type ClientOptions = {\n    baseUrl: 'http://localhost:4000' | 'http://localhost:4010' | 'https://demo.alvera.ai' | 'https://app.alvera.ai' | (string & {});\n};\n\n/**\n * TextToSqlRequest\n *\n * Natural-language prompt to generate datalake SQL for, plus the data access mode.\n */\nexport type TextToSqlRequest = {\n    /**\n     * Which lake to target: `raw`, `tokenized` or `redacted`\n     */\n    mode: 'raw' | 'tokenized' | 'redacted';\n    /**\n     * Natural-language description of the desired query\n     */\n    prompt: string;\n};\n\n/**\n * UserSearchResponse\n *\n * User SQL search resource. Created via `POST /datasets/:dataset/user-searches`\n * with a `WHERE`-clause body in `search_query`; the platform executes\n * `INSERT INTO search_results SELECT … WHERE <body>` to populate\n * `search_results` and reports back `status`, `results_count`, and\n * `error_message`.\n *\n * UserSearch carries no `data_access_mode` of its own — the capability check\n * runs where the lake's connection is acquired, via\n * `Platform.Datalakes.authorize_lake_access!/1`, which reads the ambient\n * session and raises 403 when the ceiling is insufficient. ExOpenApiUtils derives `UserSearchRequest` (writeable subset)\n * and `UserSearchResponse` (full readable shape) from this declaration via\n * the readOnly/writeOnly markers on each property.\n *\n */\nexport type UserSearchResponse = {\n    /**\n     * SQL execution error message when status is `error`; null otherwise\n     */\n    readonly error_message?: string | null;\n    /**\n     * Generic-table identifier. Required when the dataset is a generic table; must be omitted otherwise.\n     */\n    generic_table_id?: string | null;\n    /**\n     * User search ID\n     */\n    readonly id?: string;\n    /**\n     * Resource type the search runs against (e.g. \"patient\", \"appointment\", \"generic_table\"). On `POST /datasets/:dataset/user-searches` this is taken from the URL path; on the response it echoes that value.\n     */\n    readonly resource_type?: string;\n    /**\n     * Number of rows the SQL search matched\n     */\n    readonly results_count?: number | null;\n    /**\n     * SQL `WHERE`-clause body. The platform wraps it in `INSERT INTO search_results SELECT … WHERE <body>`. Reference the table aliases exposed by the dataset's base decomposed query (see `GET /datasets/:dataset_type/metadata`).\n     */\n    search_query: string;\n    /**\n     * Search execution status\n     */\n    readonly status?: 'new' | 'in_progress' | 'completed' | 'error';\n};\n\n/**\n * ActionExecutionLogResponse\n *\n * Per-action execution log — child of a WorkflowExecutionLog, one row per scheduled action.\n */\nexport type ActionExecutionLogResponse = {\n    /**\n     * Action ID\n     */\n    action_id: string;\n    action_type: ActionType;\n    /**\n     * Batch identifier\n     */\n    batch_id?: string | null;\n    /**\n     * Completed-at timestamp\n     */\n    completed_at?: string | null;\n    /**\n     * Context key\n     */\n    context_key?: string | null;\n    /**\n     * Decision key (denormalised from action)\n     */\n    decision_key?: string | null;\n    /**\n     * Error description (no customer data)\n     */\n    error_message?: string | null;\n    /**\n     * External system reference (Twilio SID, SES message ID, etc.)\n     */\n    external_id?: string | null;\n    /**\n     * Action execution log ID\n     */\n    id: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * How many times the job has been attempted. `0` means it has not run yet.\n     */\n    readonly job_attempt?: number | null;\n    /**\n     * When the job will next be attempted. Equal to `scheduled_at` until something moves it; a snoozing job carries the instant it wakes.\n     */\n    readonly job_next_attempt_at?: string | null;\n    /**\n     * State of the job carrying this action — one of `available`, `scheduled`, `executing`, `retryable`, `completed`, `discarded`, `cancelled`. Null when no job carries it.\n     */\n    readonly job_state?: string | null;\n    /**\n     * Rendered message body for this action (mode-driven; null when no message was sent)\n     */\n    readonly message_body?: string | null;\n    /**\n     * Cross-DB UUID of the message produced by this action (datalake-resident; no FK)\n     */\n    message_id?: string | null;\n    /**\n     * Execution mode (`live` = normal, `dry_run` = preview only)\n     */\n    mode: 'live' | 'dry_run';\n    /**\n     * Retry count\n     */\n    retry_count?: number;\n    /**\n     * Result of the action's runtime_filter Liquid expression\n     */\n    runtime_filter_result?: boolean | null;\n    /**\n     * Scheduled-at timestamp\n     */\n    scheduled_at?: string | null;\n    /**\n     * Started-at timestamp\n     */\n    started_at?: string | null;\n    /**\n     * Execution state\n     */\n    status: 'pending' | 'executing' | 'completed' | 'failed' | 'skipped' | 'filtered' | 'cancelled';\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n    /**\n     * Parent workflow execution log ID\n     */\n    workflow_execution_log_id: string;\n    /**\n     * Workflow ID\n     */\n    workflow_id: string;\n};\n\n/**\n * ManualUploadRequest\n *\n * Manual upload marker tool — no configuration fields, just an identity marker for manual ingestion workflows. Request\n */\nexport type ManualUploadRequest = {\n    [key: string]: unknown;\n};\n\n/**\n * ContextDatasetResponse\n *\n * Context dataset for a workflow — declares which records the context builder should load (and under what filter) before the enrichment and decision stages.\n */\nexport type ContextDatasetResponse = {\n    /**\n     * Dataset type — either a standard industry resource (e.g. \"patient\", \"appointment\") or \"generic_table\" to reference a custom table\n     */\n    dataset_type: string;\n    /**\n     * Required when `dataset_type == \"generic_table\"`\n     */\n    generic_table_id?: string | null;\n    /**\n     * Context dataset ID\n     */\n    readonly id?: string;\n    readonly inserted_at?: string;\n    /**\n     * Max records to load for this context dataset\n     */\n    limit?: number | null;\n    /**\n     * Ordering within the context-builder pipeline\n     */\n    position?: number;\n    readonly updated_at?: string;\n    /**\n     * Liquid-templated SQL WHERE clause for filtering records at runtime. The context builder appends the legal entity FK automatically.\n     */\n    where_clause?: string | null;\n    /**\n     * Parent workflow id\n     */\n    readonly workflow_id?: string;\n};\n\n/**\n * DatalakeRequest\n *\n * Datalake configuration. Secrets (DB passwords, credentials) are write-only — accepted on create but never returned in responses. Request\n */\nexport type DatalakeRequest = {\n    /**\n     * Reader auth method\n     */\n    db_reader_auth_method: 'password' | 'iam_role';\n    /**\n     * Enable SSL for reader\n     */\n    db_reader_enable_ssl: boolean;\n    /**\n     * Reader DB host. Null while a derived lake's database is still being provisioned\n     */\n    db_reader_host: string | null;\n    /**\n     * Reader DB name\n     */\n    db_reader_name: string;\n    /**\n     * Reader DB port. Null while a derived lake's database is still being provisioned\n     */\n    db_reader_port: number | null;\n    /**\n     * Reader DB schema name\n     */\n    db_reader_schema: string;\n    /**\n     * Writer auth method\n     */\n    db_writer_auth_method: 'password' | 'iam_role';\n    /**\n     * Enable SSL for writer\n     */\n    db_writer_enable_ssl: boolean;\n    /**\n     * Writer DB host. Null while a derived lake's database is still being provisioned\n     */\n    db_writer_host: string | null;\n    /**\n     * Writer DB name\n     */\n    db_writer_name: string;\n    /**\n     * Writer DB port. Null while a derived lake's database is still being provisioned\n     */\n    db_writer_port: number | null;\n    /**\n     * Writer DB schema name\n     */\n    db_writer_schema: string;\n    /**\n     * Datalake description\n     */\n    description?: string | null;\n    /**\n     * Datalake name\n     */\n    name: string;\n    /**\n     * Database connection pool size\n     */\n    pool_size: number | null;\n    /**\n     * The raw datalake this one derives from. Required on a tokenized or redacted datalake, and always null on a raw one.\n     */\n    primary_datalake_id?: string | null;\n    /**\n     * Datalake reporting timezone. Closed whitelist of 8 US timezones — general IANA values (including `UTC`) are rejected.\n     */\n    timezone: 'America/New_York' | 'America/Chicago' | 'America/Denver' | 'America/Los_Angeles' | 'America/Anchorage' | 'America/Adak' | 'Pacific/Honolulu' | 'America/Phoenix';\n    /**\n     * What this lake holds. `raw` is the lake the platform writes; `tokenized` and `redacted` are derived, read-only, and filled by replication.\n     */\n    type?: 'raw' | 'tokenized' | 'redacted';\n};\n\n/**\n * ToolRESTAPIRequest\n */\nexport type ToolRestapiRequest = RestapiRequest & {\n    tool_body_type: 'rest_api';\n};\n\n/**\n * DataActivationClientListResponse\n *\n * Paginated list of data activation clients\n */\nexport type DataActivationClientListResponse = {\n    /**\n     * List of data activation clients\n     */\n    data: Array<DataActivationClientResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * MembershipResponse\n *\n * Tenant membership — binds a user to a tenant with a role.\n */\nexport type MembershipResponse = {\n    /**\n     * Membership ID\n     */\n    readonly id: string;\n    /**\n     * Tenant-membership role.\n     */\n    readonly role: 'member' | 'researcher' | 'admin';\n    tenant?: TenantResponse;\n};\n\n/**\n * EmailCallRequest\n *\n * Email tool-call config — Liquid-templated recipient, subject, and body, and the prefix its links go out on. Request\n */\nexport type EmailCallRequest = {\n    body: SimpleTemplateConfigRequest;\n    /**\n     * Address of the host that serves this action's links. Every href in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    subject: SimpleTemplateConfigRequest;\n    to: SimpleTemplateConfigRequest;\n};\n\n/**\n * ActionEmailCallRequest\n */\nexport type ActionEmailCallRequest = EmailCallRequest & {\n    tool_call_type: 'email_request';\n};\n\n/**\n * DatalakeCloudStorageCustomResponse\n */\nexport type DatalakeCloudStorageCustomResponse = CloudStorageCustomResponse & {\n    cloud_storage_type: 'custom';\n};\n\n/**\n * AgenticWorkflowResponse\n *\n * Agentic Workflow — event-driven automation pipeline\n */\nexport type AgenticWorkflowResponse = {\n    /**\n     * Decision actions attached to this workflow (response — includes id, workflow_id and timestamps)\n     */\n    readonly actions?: Array<ActionResponse>;\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    /**\n     * Context-enrichment datasets loaded before the decision stage (response — includes id, workflow_id and timestamps)\n     */\n    readonly context_datasets?: Array<ContextDatasetResponse>;\n    datalake?: DatalakeResponse;\n    /**\n     * Dataset type the workflow listens on (e.g. legal_entity, document, generic_table)\n     */\n    dataset_type: string;\n    decision_config?: ComplexTemplateConfigResponse | null;\n    /**\n     * Workflow description\n     */\n    description: string;\n    filter_config?: SimpleTemplateConfigResponse | null;\n    /**\n     * Generic table ID (required when dataset_type is generic_table)\n     */\n    generic_table_id?: string | null;\n    /**\n     * Workflow ID\n     */\n    id?: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * Workflow name\n     */\n    name: string;\n    /**\n     * When true, skip MDM resolution\n     */\n    skip_mdm_resolution?: boolean;\n    /**\n     * URL-friendly slug\n     */\n    readonly slug?: string;\n    /**\n     * Workflow status. live = auto-fired by event sampling; draft = preview only (dry-run); manual = never auto-fired, but runs for real when an operator explicitly invokes it.\n     */\n    status: 'live' | 'draft' | 'manual';\n    /**\n     * Operator-authored labels. Free text — no taxonomy, no shared vocabulary. Not read by the execution pipeline, but they DO participate in the workflow checksum, so retagging shifts the drift fingerprint. REQUIRED on every write. Send `[]` for an untagged workflow — deliberately no default, so an omitted key is a 422 rather than a silent reset to empty.\n     */\n    tags: Array<string>;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n    /**\n     * AI agents attached to this workflow (response — full detail with nested agent)\n     */\n    readonly workflow_ai_agents?: Array<WorkflowAiAgentResponse>;\n};\n\n/**\n * AdvancedMigrationRequest\n *\n * An advanced migration — SQL a person wrote by hand for one datalake, run by the same migrator that applies the platform's own generated changes. Once it has run it can no longer be edited or deleted. Request\n */\nexport type AdvancedMigrationRequest = {\n    /**\n     * The SQL that reverses `up_statement`, used when rolling the datalake back.\n     */\n    down_statement: string;\n    /**\n     * Identifier for the migration, unique within the datalake. Must start with a capital letter and contain only letters, numbers and underscores — for example `RenameMemoToNote`.\n     */\n    name: string;\n    /**\n     * The SQL to run. Anything the platform will not generate for itself belongs here — renaming a column, changing its type, dropping one, adding an index.\n     */\n    up_statement: string;\n};\n\n/**\n * ManualToolInvocationResponse\n *\n * A manual test invocation of a tool. The request body carries only `tool_call` (polymorphic on `__type__`); all other fields are server-populated and returned in the response.\n */\nexport type ManualToolInvocationResponse = {\n    /**\n     * Provider error message on failure.\n     */\n    readonly error_message?: string | null;\n    /**\n     * Invocation ID\n     */\n    readonly id?: string;\n    /**\n     * Creation timestamp\n     */\n    readonly inserted_at?: string;\n    /**\n     * Provider response payload on success (provider-specific). SQL try-it returns `rows`, `row_count` and `truncated`; other providers return their own shape.\n     */\n    readonly result?: {\n        /**\n         * SQL try-it only — number of rows in `rows`.\n         */\n        row_count?: number;\n        /**\n         * SQL try-it only — result rows, each an array of column values.\n         */\n        rows?: Array<Array<unknown>>;\n        /**\n         * SQL try-it only — `true` when the preview filled its 100-row window, meaning this is a partial view and the query returns at least this many rows. Render it as a partial result, never as the complete answer.\n         */\n        truncated?: boolean;\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Execution status — server-set. `pending` is the initial state, `success`/`error` reflect provider response.\n     */\n    readonly status?: 'pending' | 'success' | 'error';\n    tool_call?: ({\n        tool_call_type: 'sms_request';\n    } & ManualToolInvocationSmsCallResponse) | ({\n        tool_call_type: 'mms_request';\n    } & ManualToolInvocationMmsCallResponse) | ({\n        tool_call_type: 'email_request';\n    } & ManualToolInvocationEmailCallResponse) | ({\n        tool_call_type: 'restapi_request';\n    } & ManualToolInvocationRestCallResponse) | ({\n        tool_call_type: 'aws_lambda_request';\n    } & ManualToolInvocationAwsLambdaCallResponse) | ({\n        tool_call_type: 'sql_query';\n    } & ManualToolInvocationSqlQueryCallResponse);\n    /**\n     * Last update timestamp\n     */\n    readonly updated_at?: string;\n};\n\n/**\n * CloudWatchLogGroupResponse\n *\n * AWS CloudWatch Logs authentication credential store. Referenced by ActionStatusUpdater for log-group polling.\n */\nexport type CloudWatchLogGroupResponse = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    base_filter_pattern?: ComplexTemplateConfigResponse | null;\n    /**\n     * Custom CloudWatch Logs endpoint URL (e.g., http://localhost:4566 for MiniStack)\n     */\n    endpoint_url?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * S3CallRequest\n *\n * S3 file-path descriptor — identifies an object for downstream validation/read. Request\n */\nexport type S3CallRequest = {\n    /**\n     * S3 object key/path (no s3:// prefix)\n     */\n    file_path: string;\n};\n\n/**\n * TenantResponse\n *\n * Tenant resource. The auto-generated `TenantRequest` shape carries only\n * the writable fields (`name`, `description`); `TenantResponse` returns the\n * full read surface (`id`, `slug`, `name`, `description`).\n *\n */\nexport type TenantResponse = {\n    /**\n     * Optional free-text description; max 1000 chars.\n     */\n    description?: string | null;\n    /**\n     * Tenant ID\n     */\n    readonly id: string;\n    /**\n     * Human-readable tenant name. Required on create; max 160 chars.\n     */\n    name: string;\n    /**\n     * URL-friendly tenant slug — derived from `name` by the server.\n     */\n    readonly slug: string;\n};\n\n/**\n * ActionSMSCallRequest\n */\nexport type ActionSmsCallRequest = SmsCallRequest & {\n    tool_call_type: 'sms_request';\n};\n\n/**\n * ComplexTemplateConfigRequest\n *\n * Inline Liquid template configuration including the rendered-output JSON Schema Request\n */\nexport type ComplexTemplateConfigRequest = {\n    /**\n     * Liquid template body (required for :custom type)\n     */\n    body?: string | null;\n    /**\n     * JSON Schema describing expected rendered output\n     */\n    output_schema: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Filesystem path (required for :system type)\n     */\n    path?: string | null;\n    /**\n     * Template resolution type\n     */\n    type: 'system' | 'custom' | 'identity' | 'null';\n};\n\n/**\n * DataActivationClientLogResponse\n *\n * One log row per `(batch_id, dataset_table)`. A batch fans out into one log per dataset table — so a single run (one `batch_id`) produces multiple log rows, one per table the DAC writes into. Once `BatchMergeWorker` has finished, `output_files` carries one entry per bucket mode, each an `object_key` — a cloud-storage key, not a URL. To read an archive, presign the key with `POST /datalakes/{datalake_slug}/download-link`.\n */\nexport type DataActivationClientLogResponse = {\n    /**\n     * Batch identifier stamped on every Oban job for this run\n     */\n    batch_id: string;\n    /**\n     * Owning Data Activation Client ID\n     */\n    readonly client_id: string;\n    /**\n     * Target dataset table for this slice (e.g. legal_entities, documents)\n     */\n    dataset_table: string;\n    /**\n     * Number of existing rows whose checksum changed (trigger-maintained)\n     */\n    dataset_updated?: number;\n    /**\n     * Structured failure reason when `status` is `failed` or `partial`; null otherwise.\n     */\n    readonly error?: string | null;\n    /**\n     * Run log ID\n     */\n    readonly id?: string;\n    /**\n     * Source file keys fetched for this slice\n     */\n    input_files?: Array<string>;\n    readonly inserted_at?: string;\n    /**\n     * Merged NDJSON archives produced by `BatchMergeWorker`, one entry per bucket mode. Empty until the merge completes. Parse `object_key` (`s3://bucket/key`) and fetch a presigned URL via the datalake download-link endpoint.\n     */\n    readonly output_files?: Array<DacRawLogFileResponse>;\n    /**\n     * Total source rows ingested by this slice of the batch\n     */\n    rows_ingested?: number;\n    /**\n     * `processing` from the moment the slice is enqueued until the batch finishes — the column has no default, so this is written, not assumed. `succeeded` is written once by the batch callback, and only over `processing`. `failed` when the batch died before enqueueing any row — the fetch or the enqueue itself errored, and `rows_ingested` and `input_files` are 0/[] on such a row. `partial` when the batch ran and at least one row was refused on the way in; the rows that landed are still there. Read `error` for the reason in the last two.\n     */\n    status?: 'processing' | 'succeeded' | 'partial' | 'failed';\n    readonly updated_at?: string;\n};\n\n/**\n * S3CallResponse\n *\n * S3 file-path descriptor — identifies an object for downstream validation/read.\n */\nexport type S3CallResponse = {\n    /**\n     * S3 object key/path (no s3:// prefix)\n     */\n    file_path: string;\n};\n\n/**\n * MessageResponse\n *\n * A message the platform sent, as an authenticated link's calls return it\n */\nexport type MessageResponse = {\n    /**\n     * The message as sent, links rewritten to the link prefix\n     */\n    readonly body?: string | null;\n    /**\n     * How the message was sent\n     */\n    readonly channel: 'sms' | 'mms' | 'email' | 'voice' | 'web_form' | 'push' | 'data_exchange';\n    /**\n     * When a person first clicked a link in the message, or Mailgun's click event\n     */\n    readonly clicked_at?: string | null;\n    /**\n     * When the provider reported delivery\n     */\n    readonly delivered_at?: string | null;\n    /**\n     * The provider's id for the message\n     */\n    readonly external_id?: string | null;\n    /**\n     * Why the provider failed the message\n     */\n    readonly failure_reason?: string | null;\n    /**\n     * When the link prefix host reported the form submitted\n     */\n    readonly form_submitted_at?: string | null;\n    /**\n     * The message's id in its raw lake\n     */\n    readonly id: string;\n    /**\n     * The recipient's `to` merged with what the action's metadata template rendered\n     */\n    readonly metadata?: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * When the link prefix host reported its landing page opened\n     */\n    readonly opened_at?: string | null;\n    /**\n     * When the provider queued the message\n     */\n    readonly queued_at?: string | null;\n    /**\n     * When the message was read; for email, Mailgun's opened event\n     */\n    readonly read_at?: string | null;\n    /**\n     * When the platform sent the message\n     */\n    readonly sent_at?: string | null;\n    /**\n     * The carrier the provider reported for an SMS\n     */\n    readonly sms_carrier?: string | null;\n    /**\n     * Delivery or engagement status; only ever moves forward\n     */\n    readonly status: 'pending' | 'accepted' | 'queued' | 'sending' | 'sent' | 'delivered' | 'read' | 'opened' | 'clicked' | 'form_submitted' | 'failed' | 'invalidated' | 'duplicate' | 'customer_rejected' | 'dry_run' | 'received';\n    /**\n     * The provider's or the host's detail for the status\n     */\n    readonly status_description?: string | null;\n    /**\n     * The email subject; empty for other channels\n     */\n    readonly subject?: string | null;\n};\n\n/**\n * ActionStatusUpdaterResponse\n *\n * Action Status Updater — automated polling for delivery status updates.\n */\nexport type ActionStatusUpdaterResponse = {\n    action_log_config: SimpleTemplateConfigResponse | null;\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    /**\n     * Cron schedule expression (e.g. \"*30 * * * *\")\n     */\n    cron_expression: string;\n    /**\n     * Datalake ID\n     */\n    datalake_id: string;\n    /**\n     * JSON Schema the rendered events_template output is validated against on every poll (required for restapi updaters). FLOOR: it must describe an array whose items are objects listing \"external_id\" in \"required\" — every event has to name the message it reconciles, so the events_template maps the provider's own id (messageId / id / sid) into external_id. Add whatever else your provider guarantees on top; the platform only enforces the floor.\n     */\n    events_output_schema?: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Action Status Updater ID\n     */\n    readonly id?: string;\n    /**\n     * Creation timestamp\n     */\n    readonly inserted_at?: string;\n    /**\n     * When the poll worker last completed a run (null until the first run)\n     */\n    readonly last_run_at?: string | null;\n    /**\n     * Why the last poll run failed; null when the run completed and read its whole window\n     */\n    readonly last_run_error?: string | null;\n    /**\n     * Events the last poll run fetched from the updater tool\n     */\n    readonly last_run_events_found?: number | null;\n    /**\n     * Outcome of the last poll run: `ok` when the run read its whole window, `error` when it stopped — read `last_run_error` for why. A run is never partial: every page of the window is read, one job per page.\n     */\n    readonly last_run_status?: 'ok' | 'error';\n    /**\n     * When a cron tick last skipped because an earlier run of this updater was still going (null if none has). A skip is not a run and leaves the last-run fields alone.\n     */\n    readonly last_skipped_at?: string | null;\n    message_config: SimpleTemplateConfigResponse;\n    /**\n     * Updater name\n     */\n    name: string;\n    /**\n     * JSON Schema the rendered pagination_context_template output is validated against on every poll (required for restapi updaters). FLOOR: it must describe an object listing \"has_next\" in \"required\" — that key is what ends the page loop. Add the provider's cursor keys on top; the platform only enforces the floor.\n     */\n    pagination_context_output_schema?: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * IDs of sender tools whose messages this updater monitors\n     */\n    sender_tool_ids?: Array<string> | null;\n    /**\n     * Whether this updater may poll. The server sets cycle_detected when a run re-reads events it has already handled, and every later job then fails without calling the provider. Set it back to active to resume polling — nothing else clears it.\n     */\n    status?: 'active' | 'cycle_detected';\n    /**\n     * Tenant ID\n     */\n    readonly tenant_id?: string;\n    /**\n     * Last update timestamp\n     */\n    readonly updated_at?: string;\n    updater_body: ({\n        updater_body_type: 'cloud_watch_request';\n    } & ActionStatusUpdaterCloudWatchQueryResponse) | ({\n        updater_body_type: 'restapi_request';\n    } & ActionStatusUpdaterRestCallResponse);\n    /**\n     * Tool providing auth credentials for polling\n     */\n    updater_tool_id: string;\n    /**\n     * Updater type — determines the updater_body shape\n     */\n    updater_type: 'cloud_watch' | 'restapi';\n};\n\n/**\n * IngestRequest\n *\n * Request body for data ingestion\n */\nexport type IngestRequest = {\n    /**\n     * JSON data to ingest\n     */\n    data: {\n        [key: string]: unknown;\n    };\n};\n\n/**\n * DataActivationClientSharePointExcelCallRequest\n */\nexport type DataActivationClientSharePointExcelCallRequest = SharePointExcelCallRequest & {\n    tool_call_type: 'microsoft_share_point_excel_request';\n};\n\n/**\n * WorkflowRunResponse\n *\n * A workflow invocation scheduled for a caller-chosen time. Every manual\n * invocation creates one, including an immediate send, which is simply\n * `scheduled_at` = now — there is no separate run-now path.\n *\n * A run is not a workflow run log. The run is the intent and is cancellable\n * while `scheduled`; the run log is the outcome it produces, and run logs also\n * arrive from Data Activation Client ingestion with no run behind them.\n *\n * The segment is resolved when the run **fires**, not when it is scheduled.\n * `matched_count` is the preview the operator saw; the audience is whatever\n * `execution_user_search_id` resolved to at send time, minus suppressed and\n * unreachable records.\n *\n */\nexport type WorkflowRunResponse = {\n    /**\n     * Batch identifier for correlating with the workflow run log. Null until the run fires.\n     */\n    readonly batch_id?: string | null;\n    /**\n     * When the run reached a terminal state.\n     */\n    readonly completed_at?: string | null;\n    /**\n     * The search actually resolved when the run fired — its results are the audience that received the send. Null until the run fires; never the same row as `preview_user_search_id`.\n     */\n    readonly execution_user_search_id?: string | null;\n    /**\n     * Why the run could not fan out, when status is 'failed'.\n     */\n    readonly failure_reason?: string | null;\n    /**\n     * When the fan-out began. Null until the run fires.\n     */\n    readonly fired_at?: string | null;\n    /**\n     * Workflow run ID\n     */\n    readonly id?: string;\n    /**\n     * Bypasses dedupe and idempotency checks for every record this run matches.\n     */\n    manual_override?: boolean;\n    /**\n     * Audience size previewed at schedule time. NOT the number that received the send — the segment is resolved again when the run fires, and suppressed records are excluded then.\n     */\n    readonly matched_count?: number | null;\n    /**\n     * 'live' fires real tool calls; 'dry_run' runs the pipeline without making external calls.\n     */\n    mode?: 'live' | 'dry_run';\n    /**\n     * The resolved search this run was scheduled against. Create it with `POST /datasets/:dataset/user-searches`; its `results_count` becomes this run's `matched_count`.\n     */\n    preview_user_search_id: string;\n    /**\n     * When this run fires, in UTC. An immediate send is simply now. Each action still passes through the workflow's action window, so an action may execute later than this.\n     */\n    scheduled_at: string;\n    /**\n     * Run state. Cancellation is refused once processing.\n     */\n    readonly status?: 'scheduled' | 'processing' | 'completed' | 'cancelled' | 'failed';\n    /**\n     * The workflow this run invokes\n     */\n    readonly workflow_id?: string;\n    /**\n     * The run log this run produced. Null until the run fires.\n     */\n    readonly workflow_run_log_id?: string | null;\n};\n\n/**\n * AgenticWorkflowRequest\n *\n * Agentic Workflow — event-driven automation pipeline Request\n */\nexport type AgenticWorkflowRequest = {\n    /**\n     * Dataset type the workflow listens on (e.g. legal_entity, document, generic_table)\n     */\n    dataset_type: string;\n    decision_config?: ComplexTemplateConfigRequest;\n    /**\n     * Workflow description\n     */\n    description: string;\n    filter_config?: SimpleTemplateConfigRequest;\n    /**\n     * Generic table ID (required when dataset_type is generic_table)\n     */\n    generic_table_id?: string | null;\n    /**\n     * Workflow ID\n     */\n    id?: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * Workflow name\n     */\n    name: string;\n    /**\n     * When true, skip MDM resolution\n     */\n    skip_mdm_resolution?: boolean;\n    /**\n     * Workflow status. live = auto-fired by event sampling; draft = preview only (dry-run); manual = never auto-fired, but runs for real when an operator explicitly invokes it.\n     */\n    status: 'live' | 'draft' | 'manual';\n    /**\n     * Operator-authored labels. Free text — no taxonomy, no shared vocabulary. Not read by the execution pipeline, but they DO participate in the workflow checksum, so retagging shifts the drift fingerprint. REQUIRED on every write. Send `[]` for an untagged workflow — deliberately no default, so an omitted key is a 422 rather than a silent reset to empty.\n     */\n    tags: Array<string>;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * ToolIntent\n *\n * Tool intent — what category of capability the tool provides.\n */\nexport enum ToolIntent {\n    SMS = 'sms',\n    MMS = 'mms',\n    EMAIL = 'email',\n    EXPORT = 'export',\n    VOICE = 'voice',\n    DATA_EXCHANGE = 'data_exchange',\n    STATUS_POLLER = 'status_poller',\n    LLM_ENRICHMENT = 'llm_enrichment'\n}\n\n/**\n * AWSLambdaResponse\n *\n * AWS Lambda tool configuration for an external, user-provided Lambda ARN.\n */\nexport type AwsLambdaResponse = {\n    /**\n     * AWS access key ID (required when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * Authentication method (required when type is external)\n     */\n    auth_method?: 'access_key' | 'iam_role' | 'cloudformation';\n    base_payload?: ComplexTemplateConfigResponse | null;\n    /**\n     * User-provided environment variable key-value entries passed to the Lambda function\n     */\n    env_vars?: Array<unknown>;\n    /**\n     * Lambda function ARN\n     */\n    function_arn?: string | null;\n    /**\n     * User-provided secret key-value entries synced to AWS Secrets Manager\n     */\n    secrets?: Array<unknown>;\n    /**\n     * Lambda deployment type. `external` = user-provided Lambda ARN. This is the only supported type.\n     */\n    type: 'external';\n};\n\n/**\n * ActionSharePointExcelCallResponse\n */\nexport type ActionSharePointExcelCallResponse = SharePointExcelCallResponse & {\n    tool_call_type: 'microsoft_share_point_excel_request';\n};\n\n/**\n * InteroperabilityContractAiAgentRequest\n *\n * Join entry linking an AI agent to an interoperability contract at a specific execution position in the enrichment pipeline. Request\n */\nexport type InteroperabilityContractAiAgentRequest = {\n    /**\n     * AI agent ID\n     */\n    ai_agent_id: string;\n    context_mapping_config: ComplexTemplateConfigRequest;\n    /**\n     * Execution order in the enrichment pipeline\n     */\n    position: number;\n};\n\n/**\n * DataActivationClientSQLQueryCallResponse\n */\nexport type DataActivationClientSqlQueryCallResponse = SqlQueryCallResponse & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * UserResponse\n *\n * Lean user reference — id, email, and names\n */\nexport type UserResponse = {\n    /**\n     * User email\n     */\n    email: string;\n    /**\n     * First name\n     */\n    first_name?: string | null;\n    /**\n     * User ID\n     */\n    readonly id: string;\n    /**\n     * Last name\n     */\n    last_name?: string | null;\n};\n\n/**\n * ExecuteActionRequest\n *\n * Request body for executing a workflow action for a dataset record\n */\nexport type ExecuteActionRequest = {\n    /**\n     * ID of the dataset record to process\n     */\n    dataset_id: string;\n    /**\n     * Decision key identifying which action to execute (e.g. 'send_welcome_email')\n     */\n    decision_key: string;\n    /**\n     * When true, bypasses idempotency and dedupe checks — action will fire even if already executed for this dataset record. Filters still apply. Mirrors `/run-workflow`'s `manual_override` field.\n     */\n    manual_override?: boolean;\n    /**\n     * Execution mode. 'live' fires real tool calls; 'dry_run' runs the full pipeline and records the computed payload without making external calls.\n     */\n    mode?: 'live' | 'dry_run';\n    /**\n     * When true, the action's `trigger_template` schedule is bypassed and the queued job is dispatched immediately. The ActionExecutionLog still records the trigger-rendered `scheduled_at` — only the Oban job is fast-forwarded. Use this to force an action whose trigger renders a future instant (e.g. a year-roll birthday SMS) to fire now, which is the only way to drive such a workflow to completion inside a live test or cookbook run. An action whose trigger renders a past instant does not need it: a past `scheduled_at` is staged on the next pass and runs on its own.\n     */\n    trigger_override?: boolean;\n};\n\n/**\n * InteroperabilityRunResponse\n *\n * Pipeline output for a single row. `stage` indicates the last pipeline stage reached; `transformed`/`mdm_input` are populated only when that stage executed successfully.\n */\nexport type InteroperabilityRunResponse = {\n    /**\n     * Result of the row-level Liquid filter.\n     */\n    filter_result: 'pass' | 'skip';\n    /**\n     * Output of `mdm_input_config` rendering. `null` when filtered or when mdm_input_config is null/identity.\n     */\n    mdm_input?: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * `completed` = row passed filter, transform, and mdm_input. `filtered` = skipped by filter_template (transform/mdm_input not run).\n     */\n    stage: 'completed' | 'filtered';\n    /**\n     * Output of `template_config` rendering. `null` when stage == \"filtered\".\n     */\n    transformed?: {\n        [key: string]: unknown;\n    } | null;\n};\n\n/**\n * ErrorResponse\n *\n * Error response\n */\nexport type ErrorResponse = {\n    /**\n     * Error details - values can be strings or arrays of strings (for validation errors)\n     */\n    errors?: {\n        [key: string]: string | Array<string>;\n    };\n};\n\n/**\n * ChecksumResponse\n *\n * Server-computed drift fingerprint for a submitted config.\n */\nexport type ChecksumResponse = {\n    /**\n     * sha256 fingerprint over the config's authored fields, hex-lowercased\n     */\n    checksum: string;\n};\n\n/**\n * ActionType\n *\n * Workflow action category — selects the downstream dispatcher.\n */\nexport enum ActionType {\n    SMS = 'sms',\n    MMS = 'mms',\n    EMAIL = 'email',\n    VOICE = 'voice',\n    DATA_EXCHANGE = 'data_exchange',\n    DATA_ACTIVATION = 'data_activation'\n}\n\n/**\n * MDMVerifyRequest\n *\n * Request body for MDM identity verification.\n *\n * Every legal entity is ultimately a **person** or a **company**, so the identity\n * fields are organized along that ontology rather than per industry. All identity\n * fields are optional on the wire, and every datalake reads the same set.\n *\n * At least one field that can stand alone as evidence is required: `first_name`,\n * `last_name`, `preferred_name`, `date_of_birth`, `business_name`, `date_formed`,\n * `phone`, `identifiers` or `addresses`. The rest (`legal_entity_type`,\n * `middle_name`, `citizenship_country`, `nationality`, `doing_business_as_names`,\n * `jurisdiction_country`, `email`) are accepted but cannot be the only evidence.\n * A body with none returns 422 in the house error envelope, pointer `/base`.\n *\n * Every property below is cast by `Platform.MDMInput.verification_changeset/2`:\n * `@verification_fields` plus the `identifiers` and `addresses` embeds. Keep the\n * two in step — a property advertised here but absent there is accepted by the\n * router and then silently dropped by `cast/3`, which reads to the caller as \"my\n * attribute did not match\".\n *\n */\nexport type MdmVerifyRequest = {\n    /**\n     * Addresses to match against the legal entity's own — every domain. Each supplied component must agree (case- and whitespace-insensitive); components left out are not compared, and at least one address in the list must match.\n     */\n    addresses?: Array<{\n        /**\n         * City / locality\n         */\n        city?: string;\n        /**\n         * Country\n         */\n        country?: string;\n        /**\n         * Postal code\n         */\n        postal_code?: string;\n        /**\n         * State / region\n         */\n        state?: string;\n        /**\n         * Street line 1\n         */\n        street1?: string;\n        /**\n         * Street line 2\n         */\n        street2?: string;\n    }>;\n    /**\n     * Business name (fuzzy match incl. doing-business-as names)\n     */\n    business_name?: string;\n    /**\n     * Citizenship country\n     */\n    citizenship_country?: string;\n    /**\n     * Company formation date (component-fuzzy match)\n     */\n    date_formed?: string;\n    /**\n     * Date of birth (component-fuzzy match)\n     */\n    date_of_birth?: string;\n    /**\n     * Doing-business-as names\n     */\n    doing_business_as_names?: Array<string>;\n    /**\n     * Email address\n     */\n    email?: string;\n    /**\n     * Given/first name (fuzzy match over first/middle/preferred)\n     */\n    first_name?: string;\n    /**\n     * Identifiers for exact (system, value) matching — every domain\n     */\n    identifiers?: Array<{\n        /**\n         * Issuing country\n         */\n        country?: string;\n        /**\n         * Identifier kind (e.g. us_ssn, lei, digital_identifier)\n         */\n        id_type?: string;\n        /**\n         * Identifier system (e.g. lei_register, us_ssn_authority)\n         */\n        system: string;\n        /**\n         * Identifier value\n         */\n        value: string;\n    }>;\n    /**\n     * Jurisdiction country\n     */\n    jurisdiction_country?: string;\n    /**\n     * Family/last name (fuzzy match)\n     */\n    last_name?: string;\n    /**\n     * The legal entity id to verify against\n     */\n    legal_entity_id: string;\n    /**\n     * individual | business | household\n     */\n    legal_entity_type?: string;\n    /**\n     * Middle name\n     */\n    middle_name?: string;\n    /**\n     * Nationality\n     */\n    nationality?: string;\n    /**\n     * Phone number\n     */\n    phone?: string;\n    /**\n     * Preferred/nickname\n     */\n    preferred_name?: string;\n};\n\n/**\n * MMSCallRequest\n *\n * MMS tool-call config — Liquid-templated recipient, optional caption, plain public media URL, and the prefix its links go out on. Request\n */\nexport type MmsCallRequest = {\n    body?: SimpleTemplateConfigRequest;\n    /**\n     * Address of the host that serves this action's links. Every URL in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    /**\n     * Public http(s) URL of the media to attach — re-staged into the tool's S3 media bucket (End User Messaging) or fetched by Twilio directly\n     */\n    media_url: string;\n    to: SimpleTemplateConfigRequest;\n};\n\n/**\n * ActionResponse\n *\n * Workflow action — executes when the decision table routes to this `decision_key`. Polymorphic `tool_call` payload is variant-specific via `tool_call_type` discriminator.\n */\nexport type ActionResponse = {\n    action_type: ActionType;\n    /**\n     * Hour (0–23) when the action's execution window closes\n     */\n    action_window_end?: number | null;\n    /**\n     * Hour (0–23) when the action's execution window opens (failsafe, typically SMS)\n     */\n    action_window_start?: number | null;\n    /**\n     * Unique decision_key within the workflow — maps to a decision-table outcome\n     */\n    decision_key: string;\n    /**\n     * Action ID\n     */\n    readonly id?: string;\n    /**\n     * Liquid template producing the idempotency key; receives checksum, legal_entity_id, legal_entity_id, workflow_id, action_id, decision_key\n     */\n    idempotency_template: string;\n    readonly inserted_at?: string;\n    /**\n     * Liquid template rendered to JSON once per send, on every action type. Stored on the message the send writes, and returned by the authenticated-link exchange as metadata (optional). A template that does not render fails the send.\n     */\n    metadata_template?: string | null;\n    /**\n     * Display order within the workflow\n     */\n    position?: number;\n    /**\n     * Liquid template evaluated at execution time; when falsy, the action is skipped\n     */\n    runtime_filter?: string | null;\n    tool_call: ({\n        tool_call_type: 'sms_request';\n    } & ActionSmsCallResponse) | ({\n        tool_call_type: 'mms_request';\n    } & ActionMmsCallResponse) | ({\n        tool_call_type: 'email_request';\n    } & ActionEmailCallResponse) | ({\n        tool_call_type: 'sql_query';\n    } & ActionSqlQueryCallResponse) | ({\n        tool_call_type: 'restapi_request';\n    } & ActionRestCallResponse) | ({\n        tool_call_type: 'sftp_request';\n    } & ActionSftpCallResponse) | ({\n        tool_call_type: 'microsoft_share_point_excel_request';\n    } & ActionSharePointExcelCallResponse) | ({\n        tool_call_type: 'aws_lambda_request';\n    } & ActionAwsLambdaCallResponse) | ({\n        tool_call_type: 'manual_upload';\n    } & ActionManualUploadCallResponse) | ({\n        tool_call_type: 'run_data_activation_client';\n    } & ActionRunDataActivationClientCallResponse);\n    /**\n     * Tool that executes this action. Required for every action type except data_activation, which refuses one: its client carries its own tool.\n     */\n    tool_id?: string | null;\n    /**\n     * Liquid template that determines when this action executes\n     */\n    trigger_template: string;\n    readonly updated_at?: string;\n    /**\n     * Parent workflow id\n     */\n    readonly workflow_id?: string;\n};\n\n/**\n * ManualUploadCallRequest\n *\n * Identity manual-upload marker. No fields — the discriminator alone indicates the tool call is a manual upload. Request\n */\nexport type ManualUploadCallRequest = {\n    [key: string]: unknown;\n};\n\n/**\n * EndUserMessagingRequest\n *\n * AWS End User Messaging tool configuration for sending MMS via the SendMediaMessage API. Request\n */\nexport type EndUserMessagingRequest = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer (auto-generated when auth_method is assume_role)\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    base_message?: ComplexTemplateConfigRequest;\n    /**\n     * AWS End User Messaging configuration set that routes delivery events to CloudWatch\n     */\n    configuration_set_name: string;\n    /**\n     * Custom sms-voice endpoint URL (e.g. http://localhost:8080 for the WireMock stub); leave blank for real AWS\n     */\n    endpoint_url?: string | null;\n    /**\n     * S3 bucket (same region as the sending number) where author media is re-staged for SendMediaMessage\n     */\n    media_bucket: string;\n    /**\n     * Origination phone number or identity in E.164 format (e.g., +15551234567); must be MMS-capable\n     */\n    phone_number: string;\n    /**\n     * ID of the primary End User Messaging tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * AWS region (e.g., us-west-2)\n     */\n    region: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * InteroperabilityContractResponse\n *\n * Declarative execution spec binding a `(datalake, resource_type)` pair to the ingestion pipeline: filter → transform → mdm_input → resolve → upsert.\n */\nexport type InteroperabilityContractResponse = {\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    /**\n     * Owning datalake ID (matches `:datalake_slug` path segment). Server-set on create; request bodies should omit this — it is taken from the path.\n     */\n    readonly datalake_id?: string;\n    /**\n     * Optional description\n     */\n    description?: string | null;\n    /**\n     * Liquid filter body. Renders to empty/whitespace → row passes; any non-empty trimmed render → row is skipped (rendered string is the skip reason). Nil/empty body = no filter.\n     */\n    filter_template?: string | null;\n    /**\n     * Generic table ID (required when resource_type == \"generic_table\")\n     */\n    generic_table_id?: string | null;\n    /**\n     * Contract ID\n     */\n    id?: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * AI agents attached to this contract (response — full detail with nested agent)\n     */\n    readonly interoperability_contract_ai_agents?: Array<InteroperabilityContractAiAgentResponse>;\n    mdm_input_config?: SimpleTemplateConfigResponse | null;\n    /**\n     * Human-readable contract name\n     */\n    name: string;\n    /**\n     * Dataset this contract targets (e.g. \"legal_entity\", \"beneficial_owner\", \"generic_table\")\n     */\n    resource_type: string;\n    /**\n     * URL-friendly slug (derived from name on insert; immutable)\n     */\n    slug?: string;\n    /**\n     * Whether this contract was auto-created by the system (read-only, cannot be edited or deleted)\n     */\n    readonly system_created?: boolean;\n    template_config: SimpleTemplateConfigResponse;\n    /**\n     * Template type (synced from template_config.type)\n     */\n    type?: 'system' | 'custom' | 'identity' | 'null';\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * DownloadLinkRequest\n *\n * Request body for presigning a GET URL against a datalake's cloud storage. `bucket` must match the cloud storage config of the path-scoped datalake; `key` is the object key within that bucket.\n */\nexport type DownloadLinkRequest = {\n    /**\n     * Cloud-storage bucket — must belong to the path-scoped datalake.\n     */\n    bucket: string;\n    /**\n     * Object key within the bucket (no leading slash).\n     */\n    key: string;\n};\n\n/**\n * ToolSharePointRequest\n */\nexport type ToolSharePointRequest = SharePointRequest & {\n    tool_body_type: 'sharepoint';\n};\n\n/**\n * ActionSMSCallResponse\n */\nexport type ActionSmsCallResponse = SmsCallResponse & {\n    tool_call_type: 'sms_request';\n};\n\n/**\n * ToolAWSLambdaResponse\n */\nexport type ToolAwsLambdaResponse = AwsLambdaResponse & {\n    tool_body_type: 'aws_lambda';\n};\n\n/**\n * ToolManualUploadResponse\n */\nexport type ToolManualUploadResponse = ManualUploadResponse & {\n    tool_body_type: 'manual_upload';\n};\n\n/**\n * ExecuteSqlMeta\n *\n * Structural and pagination metadata for an `execute-sql` result — enough for an agent to\n * reason about the shape of the result without scanning the rows. The pagination fields\n * (`page`, `page_size`, `total_count`, `total_pages`) mirror `PaginationMeta`; their values\n * come from the Lotus window result, not Flop.\n *\n */\nexport type ExecuteSqlMeta = {\n    /**\n     * Result column names, in order\n     */\n    columns: Array<string>;\n    /**\n     * SQL command tag (e.g. `SELECT`)\n     */\n    command?: string | null;\n    /**\n     * Query execution time in milliseconds\n     */\n    duration_ms?: number | null;\n    /**\n     * Rows returned in this page\n     */\n    num_rows: number;\n    /**\n     * 1-based page number\n     */\n    page: number;\n    /**\n     * Rows per page actually applied (after capping)\n     */\n    page_size: number;\n    /**\n     * Total rows across all pages (null if uncounted)\n     */\n    total_count: number | null;\n    /**\n     * Total pages (null if uncounted)\n     */\n    total_pages: number | null;\n};\n\n/**\n * InvitationResponse\n *\n * Pending tenant invitation — resolved into a Membership on accept.\n */\nexport type InvitationResponse = {\n    /**\n     * Recipient email address. Must be unique per tenant.\n     */\n    email: string;\n    /**\n     * Invitation ID\n     */\n    readonly id?: string;\n    /**\n     * Tenant-membership role to grant on acceptance. NOT the platform-wide `User.role` enum — `tenant_admin` here is a tenant-scoped admin, not a platform admin.\n     */\n    role: 'member' | 'researcher' | 'admin';\n    tenant?: TenantResponse;\n};\n\n/**\n * ToolRequest\n *\n * Tool — a configurable capability reference for external services. Request\n */\nexport type ToolRequest = {\n    /**\n     * Data Source ID\n     */\n    data_source_id?: string | null;\n    /**\n     * Datalake ID\n     */\n    datalake_id?: string;\n    /**\n     * Tool description\n     */\n    description?: string | null;\n    intent?: ToolIntent;\n    /**\n     * Tool name\n     */\n    name?: string;\n    response_extractor?: ComplexTemplateConfigRequest;\n    /**\n     * Tool status\n     */\n    status?: 'draft' | 'active' | 'inactive' | 'error' | 'marked_for_deletion';\n};\n\n/**\n * SimpleTemplateConfigRequest\n *\n * Inline Liquid template configuration (output_schema is server-derived, never request-supplied) Request\n */\nexport type SimpleTemplateConfigRequest = {\n    /**\n     * Liquid template body (required for :custom type)\n     */\n    body?: string | null;\n    /**\n     * Filesystem path (required for :system type)\n     */\n    path?: string | null;\n    /**\n     * Template resolution type\n     */\n    type: 'system' | 'custom' | 'identity' | 'null';\n};\n\n/**\n * AWSLambdaRequest\n *\n * AWS Lambda tool configuration for an external, user-provided Lambda ARN. Request\n */\nexport type AwsLambdaRequest = {\n    /**\n     * AWS access key ID (required when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * Authentication method (required when type is external)\n     */\n    auth_method?: 'access_key' | 'iam_role' | 'cloudformation';\n    base_payload?: ComplexTemplateConfigRequest;\n    /**\n     * User-provided environment variable key-value entries passed to the Lambda function\n     */\n    env_vars?: Array<unknown>;\n    /**\n     * Lambda function ARN\n     */\n    function_arn?: string | null;\n    /**\n     * User-provided secret key-value entries synced to AWS Secrets Manager\n     */\n    secrets?: Array<unknown>;\n    /**\n     * Lambda deployment type. `external` = user-provided Lambda ARN. This is the only supported type.\n     */\n    type: 'external';\n};\n\n/**\n * ToolSQSRequest\n */\nexport type ToolSqsRequest = SqsRequest & {\n    tool_body_type: 'sqs';\n};\n\n/**\n * DownloadUrlResponse\n *\n * Presigned download URL for a stored cloud-storage artifact.\n */\nexport type DownloadUrlResponse = {\n    /**\n     * Presigned URL valid for a short TTL; fetch the artifact within the window.\n     */\n    url: string;\n};\n\n/**\n * SMSCallResponse\n *\n * SMS tool-call config — Liquid-templated recipient and body, transactional/promotional category, and the prefix its links go out on.\n */\nexport type SmsCallResponse = {\n    body: SimpleTemplateConfigResponse;\n    /**\n     * Address of the host that serves this action's links. Every URL in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    /**\n     * SMS category — transactional vs promotional\n     */\n    sms_type?: 'transactional' | 'promotional';\n    to: SimpleTemplateConfigResponse;\n};\n\n/**\n * ActionRequest\n *\n * Workflow action — executes when the decision table routes to this `decision_key`. Polymorphic `tool_call` payload is variant-specific via `tool_call_type` discriminator. Request\n */\nexport type ActionRequest = {\n    action_type: ActionType;\n    /**\n     * Hour (0–23) when the action's execution window closes\n     */\n    action_window_end?: number | null;\n    /**\n     * Hour (0–23) when the action's execution window opens (failsafe, typically SMS)\n     */\n    action_window_start?: number | null;\n    /**\n     * Unique decision_key within the workflow — maps to a decision-table outcome\n     */\n    decision_key: string;\n    /**\n     * Liquid template producing the idempotency key; receives checksum, legal_entity_id, legal_entity_id, workflow_id, action_id, decision_key\n     */\n    idempotency_template: string;\n    /**\n     * Liquid template rendered to JSON once per send, on every action type. Stored on the message the send writes, and returned by the authenticated-link exchange as metadata (optional). A template that does not render fails the send.\n     */\n    metadata_template?: string | null;\n    /**\n     * Display order within the workflow\n     */\n    position?: number;\n    /**\n     * Liquid template evaluated at execution time; when falsy, the action is skipped\n     */\n    runtime_filter?: string | null;\n    /**\n     * Tool that executes this action. Required for every action type except data_activation, which refuses one: its client carries its own tool.\n     */\n    tool_id?: string | null;\n    /**\n     * Liquid template that determines when this action executes\n     */\n    trigger_template: string;\n};\n\n/**\n * DatalakeCloudStorageR2Request\n */\nexport type DatalakeCloudStorageR2Request = CloudStorageR2Request & {\n    cloud_storage_type: 'r2';\n};\n\n/**\n * AWSLambdaCallResponse\n *\n * AWS Lambda invocation descriptor — Liquid-templated payload + timeout.\n */\nexport type AwsLambdaCallResponse = {\n    payload: SimpleTemplateConfigResponse;\n    /**\n     * Lambda invocation timeout in milliseconds (max 900000 = 15 minutes)\n     */\n    timeout_ms?: number;\n};\n\n/**\n * DataActivationClientRESTCallRequest\n */\nexport type DataActivationClientRestCallRequest = RestCallRequest & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * RESTCallResponse\n *\n * REST API call descriptor — HTTP method, path, body, params, pagination context template, and events extraction template. Reused across ActionStatusUpdater polling, data activation clients, tool protocols, OAuth token fetching, and chat completion; events_template is the status-poll extraction concern and is required only there.\n */\nexport type RestCallResponse = {\n    body?: SimpleTemplateConfigResponse | null;\n    events_template?: SimpleTemplateConfigResponse | null;\n    /**\n     * HTTP method\n     */\n    method: 'head' | 'get' | 'put' | 'post' | 'delete' | 'patch';\n    pagination_context_template: SimpleTemplateConfigResponse;\n    params?: SimpleTemplateConfigResponse | null;\n    path: SimpleTemplateConfigResponse;\n};\n\n/**\n * CloudStorageCustomResponse\n *\n * Custom S3-compatible cloud storage configuration — for MinIO, DigitalOcean Spaces, Backblaze B2, and other S3-compatible services. Requires a custom endpoint URL.\n */\nexport type CloudStorageCustomResponse = {\n    /**\n     * Access key ID\n     */\n    access_key_id: string;\n    /**\n     * Base path prefix for objects within the bucket\n     */\n    base_path?: string;\n    /**\n     * Bucket name\n     */\n    bucket: string;\n    /**\n     * Custom S3-compatible endpoint URL (required)\n     */\n    endpoint: string;\n    /**\n     * Storage region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * WorkflowAiAgentRequest\n *\n * Join entry linking an AI agent to a workflow at a specific execution position in the enrichment pipeline. Request\n */\nexport type WorkflowAiAgentRequest = {\n    /**\n     * AI agent ID\n     */\n    ai_agent_id: string;\n    context_mapping_config: SimpleTemplateConfigRequest;\n    /**\n     * Execution order in the enrichment pipeline\n     */\n    position: number;\n};\n\n/**\n * AiAgentRequest\n *\n * AI Agent configuration — reusable chat-completion resource Request\n */\nexport type AiAgentRequest = {\n    /**\n     * Which lake the agent reads. `tokenized` means the agent's context is read from the tokenized copy, so it never sees a real identifier. It is enforced, not advisory: an agent set to `tokenized` in an environment with no tokenized lake fails its enrichment step rather than falling back to raw.\n     */\n    data_access: 'raw' | 'tokenized';\n    /**\n     * Agent description\n     */\n    description?: string | null;\n    /**\n     * Whether the agent is enabled\n     */\n    enabled: boolean;\n    /**\n     * AI Agent ID\n     */\n    id?: string;\n    /**\n     * JSON Schema describing the agent's input contract — validated by the runner against caller context on every invocation.\n     */\n    input_schema: {\n        [key: string]: unknown;\n    };\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * JSON Schema for LLM response format\n     */\n    llm_response_schema: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Maximum tokens for LLM response\n     */\n    max_tokens: number;\n    /**\n     * LLM model identifier\n     */\n    model: string;\n    /**\n     * Agent name\n     */\n    name: string;\n    prompt_config: SimpleTemplateConfigRequest;\n    /**\n     * URL-friendly slug\n     */\n    slug?: string;\n    /**\n     * Sampling temperature (0.0–2.0)\n     */\n    temperature: number;\n    /**\n     * Tool ID\n     */\n    tool_id: string;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * UploadLinkRequest\n *\n * Request body for creating a presigned upload link for bulk ingest\n */\nexport type UploadLinkRequest = {\n    /**\n     * MIME type of the file to be uploaded. Must match one of the supported container formats.\n     */\n    content_type: 'application/x-ndjson' | 'text/csv' | 'application/pdf' | 'image/png' | 'image/jpeg' | 'image/webp';\n    /**\n     * Original filename. Used to derive the stored object's extension (.ndjson or .csv).\n     */\n    filename: string;\n};\n\n/**\n * DataActivationClientManualUploadCallRequest\n */\nexport type DataActivationClientManualUploadCallRequest = ManualUploadCallRequest & {\n    tool_call_type: 'manual_upload';\n};\n\n/**\n * SharePointResponse\n *\n * Microsoft SharePoint integration via the Microsoft Graph API. Supports sites, document libraries, and lists with client-credential or managed-identity auth.\n */\nexport type SharePointResponse = {\n    /**\n     * Microsoft Graph authentication method\n     */\n    auth_method: 'client_credentials' | 'managed_identity';\n    /**\n     * Microsoft tenant ID (GUID)\n     */\n    azure_tenant_id: string;\n    base_path?: ComplexTemplateConfigResponse | null;\n    /**\n     * Azure AD application/client ID (used when auth_method is client_credentials)\n     */\n    client_id?: string | null;\n    /**\n     * Optional specific drive ID to access\n     */\n    drive_id?: string | null;\n    /**\n     * Optional path within the drive (e.g., Documents/Reports)\n     */\n    drive_path?: string | null;\n    /**\n     * Type of SharePoint resource to interact with\n     */\n    resource_type: 'site' | 'library' | 'list';\n    /**\n     * SharePoint site URL (e.g., https://contoso.sharepoint.com/sites/finance)\n     */\n    site_url?: string | null;\n};\n\n/**\n * SimpleTemplateConfigResponse\n *\n * Inline Liquid template configuration (output_schema is server-derived, never request-supplied)\n */\nexport type SimpleTemplateConfigResponse = {\n    /**\n     * Liquid template body (required for :custom type)\n     */\n    body?: string | null;\n    /**\n     * Filesystem path (required for :system type)\n     */\n    path?: string | null;\n    /**\n     * Template resolution type\n     */\n    type: 'system' | 'custom' | 'identity' | 'null';\n};\n\n/**\n * RESTAPIResponse\n *\n * REST API tool configuration with OpenAPI-compliant authentication (API key, basic, bearer, OAuth2, OIDC) plus base Liquid templates.\n */\nexport type RestapiResponse = {\n    /**\n     * Where to send the API key (header or query parameter)\n     */\n    api_key_location?: 'header' | 'query';\n    /**\n     * Header or query-parameter name for the API key\n     */\n    api_key_name?: string | null;\n    /**\n     * Authentication method\n     */\n    auth_method: 'none' | 'api_key' | 'basic' | 'bearer' | 'oauth2' | 'oidc';\n    base_body?: SimpleTemplateConfigResponse | null;\n    base_headers?: SimpleTemplateConfigResponse | null;\n    base_path?: SimpleTemplateConfigResponse | null;\n    base_query?: SimpleTemplateConfigResponse | null;\n    /**\n     * Base URL (https) of the REST API endpoint\n     */\n    base_url: string;\n    /**\n     * OAuth2 client ID\n     */\n    oauth2_client_id?: string | null;\n    /**\n     * OAuth2 grant type\n     */\n    oauth2_grant_type?: 'client_credentials' | 'authorization_code';\n    /**\n     * OAuth2 scope(s)\n     */\n    oauth2_scope?: string | null;\n    /**\n     * OAuth2 token cache TTL in seconds\n     */\n    oauth2_token_ttl?: number | null;\n    /**\n     * OAuth2 token endpoint URL\n     */\n    oauth2_token_url?: string | null;\n    /**\n     * OIDC client ID\n     */\n    oidc_client_id?: string | null;\n    /**\n     * OIDC issuer URL for discovery\n     */\n    oidc_issuer_url?: string | null;\n    /**\n     * OIDC token cache TTL in seconds\n     */\n    oidc_token_ttl?: number | null;\n    /**\n     * Request content type\n     */\n    request_type: 'json' | 'xml' | 'form_urlencoded' | 'multipart_form';\n    /**\n     * Response content type\n     */\n    response_type: 'json' | 'xml' | 'text' | 'binary';\n    /**\n     * Request timeout in milliseconds (max 300000)\n     */\n    timeout_ms: number;\n    /**\n     * Username (used when auth_method is basic)\n     */\n    username?: string | null;\n};\n\n/**\n * DataActivationClientRESTCallResponse\n */\nexport type DataActivationClientRestCallResponse = RestCallResponse & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * SystemTemplateListResponse\n *\n * List of system templates available to this datalake.\n */\nexport type SystemTemplateListResponse = {\n    /**\n     * Sorted list of system template configs.\n     */\n    data: Array<SystemTemplateConfig>;\n};\n\n/**\n * DataActivationClientS3CallResponse\n */\nexport type DataActivationClientS3CallResponse = S3CallResponse & {\n    tool_call_type: 's3_request';\n};\n\n/**\n * EmailRequest\n *\n * Email tool configuration — SES, Mailgun, SendGrid, SMTP, or mock (dev mailbox) provider plus base Liquid templates. Request\n */\nexport type EmailRequest = {\n    /**\n     * AWS access key ID (SES)\n     */\n    access_key_id?: string;\n    /**\n     * Sending domain (Mailgun)\n     */\n    domain?: string;\n    /**\n     * Custom provider endpoint; leave blank for the real provider. For SES, the whole request URL (e.g., http://localhost:4566 for MiniStack); blank means https://email.<region>.amazonaws.com. For Mailgun, the API base URL (e.g., https://api.eu.mailgun.net/v3 for EU domains, or a WireMock endpoint for integration tests)\n     */\n    endpoint_url?: string | null;\n    /**\n     * Default sender email address\n     */\n    from_email: string;\n    /**\n     * Default sender display name\n     */\n    from_name?: string | null;\n    /**\n     * ID of the primary Email tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * Email provider (mock = in-process dev mailbox, no credentials)\n     */\n    provider: 'ses' | 'mailgun' | 'sendgrid' | 'smtp' | 'mock';\n    /**\n     * AWS region (SES)\n     */\n    region?: string;\n    /**\n     * Default reply-to address\n     */\n    reply_to?: string | null;\n    /**\n     * SMTP server hostname\n     */\n    smtp_host?: string;\n    /**\n     * SMTP server port\n     */\n    smtp_port?: number;\n    /**\n     * SMTP username\n     */\n    smtp_username?: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * RunDataActivationClientCallRequest\n *\n * Runs a data activation client for the row that started the workflow, with the tool call the template renders for that row in place of the client's stored one. Request\n */\nexport type RunDataActivationClientCallRequest = {\n    /**\n     * Slug of the data activation client to run, in the workflow's datalake\n     */\n    client_slug: string;\n    /**\n     * Liquid template rendered against the row that started the workflow, to the client's whole tool call as JSON — the shape the run-manually endpoint takes. It replaces the client's stored tool call for this run only.\n     */\n    tool_call_override_template: string;\n};\n\n/**\n * EmailCallResponse\n *\n * Email tool-call config — Liquid-templated recipient, subject, and body, and the prefix its links go out on.\n */\nexport type EmailCallResponse = {\n    body: SimpleTemplateConfigResponse;\n    /**\n     * Address of the host that serves this action's links. Every href in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    subject: SimpleTemplateConfigResponse;\n    to: SimpleTemplateConfigResponse;\n};\n\n/**\n * ActionSQLQueryCallResponse\n */\nexport type ActionSqlQueryCallResponse = SqlQueryCallResponse & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * SFTPCallResponse\n *\n * SFTP file descriptor — remote path + expected MIME content type.\n */\nexport type SftpCallResponse = {\n    /**\n     * Expected MIME content type (e.g. application/json)\n     */\n    content_type: string;\n    /**\n     * Remote file path on the SFTP server\n     */\n    path: string;\n};\n\n/**\n * ActionStatusUpdaterRefreshRequest\n *\n * Optional polymorphic updater_body override for this refresh. When omitted or empty, the updater's persisted updater_body is used.\n */\nexport type ActionStatusUpdaterRefreshRequest = {\n    /**\n     * One-shot polymorphic updater_body override — e.g. a widened start_time/end_time window for a historical backfill. Same `updater_body_type` discriminator and variants as ActionStatusUpdaterRequest.updater_body. The persisted updater is not modified.\n     */\n    updater_body?: ({\n        updater_body_type: 'ActionStatusUpdaterRESTCallRequest';\n    } & ActionStatusUpdaterRestCallRequest) | ({\n        updater_body_type: 'ActionStatusUpdaterCloudWatchQueryRequest';\n    } & ActionStatusUpdaterCloudWatchQueryRequest) | null;\n};\n\n/**\n * S3CloudStorageR2Request\n */\nexport type S3CloudStorageR2Request = CloudStorageR2Request & {\n    storage_config_type: 'r2';\n};\n\n/**\n * ToolTwilioRequest\n */\nexport type ToolTwilioRequest = TwilioRequest & {\n    tool_body_type: 'twilio';\n};\n\n/**\n * WorkflowAiAgentResponse\n *\n * Join entry linking an AI agent to a workflow at a specific execution position in the enrichment pipeline.\n */\nexport type WorkflowAiAgentResponse = {\n    ai_agent?: MinimalAiAgentResponse;\n    /**\n     * AI agent ID\n     */\n    ai_agent_id: string;\n    context_mapping_config: SimpleTemplateConfigResponse;\n    /**\n     * Creation timestamp\n     */\n    readonly inserted_at?: string;\n    /**\n     * Execution order in the enrichment pipeline\n     */\n    position: number;\n    /**\n     * Last update timestamp\n     */\n    readonly updated_at?: string;\n};\n\n/**\n * WorkflowLogListResponse\n *\n * Paginated list of workflow execution logs\n */\nexport type WorkflowLogListResponse = {\n    /**\n     * List of workflow execution logs\n     */\n    data: Array<WorkflowLogResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * ToolSQLDatabaseRequest\n */\nexport type ToolSqlDatabaseRequest = SqlDatabaseRequest & {\n    tool_body_type: 'sql_database';\n};\n\n/**\n * SystemDatasetListResponse\n *\n * The dataset name strings the platform registers. Identical for every datalake.\n */\nexport type SystemDatasetListResponse = {\n    /**\n     * Sorted unique dataset name strings (e.g. `legal_entity`, `document`, `action_log`).\n     */\n    datasets: Array<string>;\n};\n\n/**\n * GenericTableListResponse\n *\n * Paginated list of generic tables\n */\nexport type GenericTableListResponse = {\n    /**\n     * List of generic tables\n     */\n    data: Array<GenericTableResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionRESTCallRequest\n */\nexport type ActionRestCallRequest = RestCallRequest & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * GenericTableRequest\n *\n * Generic Table — custom or system dataset table with column definitions. Request\n */\nexport type GenericTableRequest = {\n    /**\n     * Table description\n     */\n    description?: string;\n    /**\n     * User-friendly table title\n     */\n    title?: string;\n};\n\n/**\n * MMSCallResponse\n *\n * MMS tool-call config — Liquid-templated recipient, optional caption, plain public media URL, and the prefix its links go out on.\n */\nexport type MmsCallResponse = {\n    body?: SimpleTemplateConfigResponse;\n    /**\n     * Address of the host that serves this action's links. Every URL in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    /**\n     * Public http(s) URL of the media to attach — re-staged into the tool's S3 media bucket (End User Messaging) or fetched by Twilio directly\n     */\n    media_url: string;\n    to: SimpleTemplateConfigResponse;\n};\n\n/**\n * ManualToolInvocationEmailCallResponse\n */\nexport type ManualToolInvocationEmailCallResponse = EmailCallResponse & {\n    tool_call_type: 'email_request';\n};\n\n/**\n * ToolSharePointResponse\n */\nexport type ToolSharePointResponse = SharePointResponse & {\n    tool_body_type: 'sharepoint';\n};\n\n/**\n * SharePointExcelCallRequest\n *\n * Microsoft SharePoint request descriptor — drive URL + Excel sheet + search params. Request\n */\nexport type SharePointExcelCallRequest = {\n    /**\n     * Microsoft Azure tenant identifier (UUID)\n     */\n    azure_tenant_id: string;\n    /**\n     * SharePoint drive URL\n     */\n    drive_url: string;\n    /**\n     * Search parameters applied when locating files\n     */\n    search_params: string;\n    /**\n     * Excel sheet number (0-indexed) within the workbook\n     */\n    sheet_number: number;\n};\n\n/**\n * DACRawLogFileResponse\n *\n * A single merged NDJSON archive produced by BatchMergeWorker, tagged by bucket mode.\n */\nexport type DacRawLogFileResponse = {\n    /**\n     * Bucket the archive lives in. One archive is written per log, and it is raw.\n     */\n    mode: 'raw';\n    /**\n     * Cloud-storage object key of the merged NDJSON archive\n     */\n    object_key: string;\n};\n\n/**\n * ToolSFTPRequest\n */\nexport type ToolSftpRequest = SftpRequest & {\n    tool_body_type: 'sftp';\n};\n\n/**\n * DataActivationClientManualUploadCallResponse\n */\nexport type DataActivationClientManualUploadCallResponse = ManualUploadCallResponse & {\n    tool_call_type: 'manual_upload';\n};\n\n/**\n * DerivedLakeTablesResponse\n *\n * Every table a derived lake's copy carries, and how far each one has got.\n *\n * Every table, not only the ones behind — a caller cannot ask to re-copy a\n * table it cannot see, and a table someone merely suspects has to be listed\n * even when the copy says it is fine.\n *\n */\nexport type DerivedLakeTablesResponse = {\n    /**\n     * One entry per table the copy carries, ordered by name\n     */\n    data: Array<{\n        /**\n         * Whether this table has finished arriving\n         */\n        caught_up: boolean;\n        /**\n         * The same state in words, identical to what the platform's own screen shows\n         */\n        label: string;\n        /**\n         * Every table `POST .../resync` would empty for this one: the table\n         * itself, plus anything that points at it, transitively. Postgres will\n         * not empty a table anything references, so re-copying a parent means\n         * re-copying its children too. Present so a caller can say how many\n         * before offering the action; only computed for tables that are behind,\n         * and `null` for the rest.\n         *\n         */\n        resync_empties?: Array<string> | null;\n        /**\n         * How far this table has got. Only `caught_up` has arrived —\n         * `finished_copy` means the first pass is done and the changes since\n         * have not been applied yet, so a table sitting there is still behind.\n         *\n         */\n        state: 'waiting_to_start' | 'copying' | 'finished_copy' | 'catching_up' | 'caught_up';\n        /**\n         * Table name\n         */\n        table: string;\n    }>;\n};\n\n/**\n * ManualToolInvocationSMSCallResponse\n */\nexport type ManualToolInvocationSmsCallResponse = SmsCallResponse & {\n    tool_call_type: 'sms_request';\n};\n\n/**\n * ActionStatusUpdaterCloudWatchQueryResponse\n */\nexport type ActionStatusUpdaterCloudWatchQueryResponse = CloudWatchQueryResponse & {\n    updater_body_type: 'cloud_watch_request';\n};\n\n/**\n * ActionMMSCallResponse\n */\nexport type ActionMmsCallResponse = MmsCallResponse & {\n    tool_call_type: 'mms_request';\n};\n\n/**\n * ToolSQLDatabaseResponse\n */\nexport type ToolSqlDatabaseResponse = SqlDatabaseResponse & {\n    tool_body_type: 'sql_database';\n};\n\n/**\n * ActionSQLQueryCallRequest\n */\nexport type ActionSqlQueryCallRequest = SqlQueryCallRequest & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * ActionSFTPCallRequest\n */\nexport type ActionSftpCallRequest = SftpCallRequest & {\n    tool_call_type: 'sftp_request';\n};\n\n/**\n * SystemTemplateConfig\n *\n * One system template — identifier, Liquid source, and optional output schema.\n */\nexport type SystemTemplateConfig = {\n    /**\n     * Raw Liquid template source.\n     */\n    content: string;\n    /**\n     * JSON Schema describing the template's rendered output, read from the companion `_*.meta.json`. `null` when no schema is declared.\n     */\n    output_schema: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * System template identifier — the same string the UI stores when a user selects a system template (e.g. `ai_agents/contact_message_categorizer`).\n     */\n    path: string;\n};\n\n/**\n * BatchLogResponse\n *\n * Batch-level workflow run log — aggregation of per-event execution logs\n */\nexport type BatchLogResponse = {\n    /**\n     * Batch identifier (manual:{user_search_id} or DAC batch_id)\n     */\n    batch_id: string;\n    completed_at?: string | null;\n    /**\n     * Successfully completed WELs\n     */\n    completed_wels?: number;\n    /**\n     * Datalake ID\n     */\n    datalake_id?: string;\n    /**\n     * Number of events expected to produce WELs\n     */\n    expected_events?: number;\n    /**\n     * Failed WELs\n     */\n    failed_wels?: number;\n    /**\n     * Workflow run log ID\n     */\n    id?: string;\n    inserted_at?: string;\n    last_refreshed_at?: string | null;\n    started_at?: string | null;\n    /**\n     * Batch status\n     */\n    status: 'pending' | 'completed' | 'partial' | 'failed';\n    /**\n     * Tenant ID\n     */\n    tenant_id?: string;\n    /**\n     * Total WELs found at last refresh\n     */\n    total_wels?: number;\n    /**\n     * Parent workflow ID\n     */\n    workflow_id?: string;\n};\n\n/**\n * AiAgentInvokeRequest\n *\n * Request body for invoking an AI agent with input variables and optional file attachments.\n */\nexport type AiAgentInvokeRequest = {\n    /**\n     * Optional file references for multimodal processing. Each entry is a storage key returned by the upload-link endpoint paired with the MIME type used during upload.\n     */\n    files?: Array<{\n        /**\n         * MIME type of the uploaded file.\n         */\n        content_type: 'application/pdf' | 'image/png' | 'image/jpeg' | 'image/webp';\n        /**\n         * Cloud storage key returned by POST /tenants/:tenant_slug/datalakes/:datalake_slug/upload-link.\n         */\n        key: string;\n    }>;\n    /**\n     * Input variables passed to the agent's prompt template. Must conform to the agent's input_schema if one is defined.\n     */\n    input: {\n        [key: string]: unknown;\n    };\n};\n\n/**\n * DataActivationClientBatchResponse\n *\n * One record per run. A run fans out into one `DataActivationClientLog` per dataset table it writes into; this is the run itself. To wait on a run, read `closed_at` here rather than reconstructing it from those logs — it is set exactly once, however the run ended.\n */\nexport type DataActivationClientBatchResponse = {\n    /**\n     * Run identifier, stamped on every Oban job and every per-table log row of this run\n     */\n    batch_id: string;\n    /**\n     * Owning Data Activation Client ID\n     */\n    readonly client_id: string;\n    /**\n     * When the run was attempted and exhausted. Null while it is still going. It does not mean rows landed and it does not mean the archive was merged — read `status` for the outcome, and only once this is set.\n     */\n    readonly closed_at?: string | null;\n    /**\n     * Run record ID\n     */\n    readonly id?: string;\n    /**\n     * When the run started\n     */\n    readonly inserted_at?: string;\n    /**\n     * Source rows enqueued for this run. The run's own count; each per-table log keeps its own.\n     */\n    rows_total?: number;\n    /**\n     * How the run ended. **It means nothing until `closed_at` is set** — a run still in flight always reads `processing`. `failed` when the run died before writing anything; `partial` when it ran and at least one row was refused on the way in; `skipped` when it ran and there was nothing to do, because the file was empty, every row was filtered out, or the client has no contracts.\n     */\n    status?: 'processing' | 'succeeded' | 'partial' | 'skipped' | 'failed';\n    readonly updated_at?: string;\n};\n\n/**\n * AWSLambdaCallRequest\n *\n * AWS Lambda invocation descriptor — Liquid-templated payload + timeout. Request\n */\nexport type AwsLambdaCallRequest = {\n    payload: SimpleTemplateConfigRequest;\n    /**\n     * Lambda invocation timeout in milliseconds (max 900000 = 15 minutes)\n     */\n    timeout_ms?: number;\n};\n\n/**\n * AdvancedMigrationResponse\n *\n * An advanced migration — SQL a person wrote by hand for one datalake, run by the same migrator that applies the platform's own generated changes. Once it has run it can no longer be edited or deleted.\n */\nexport type AdvancedMigrationResponse = {\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    /**\n     * The datalake this migration belongs to. Taken from the URL, not the body.\n     */\n    readonly datalake_id?: string;\n    /**\n     * The SQL that reverses `up_statement`, used when rolling the datalake back.\n     */\n    down_statement: string;\n    /**\n     * Advanced migration ID\n     */\n    readonly id?: string;\n    /**\n     * Created at\n     */\n    readonly inserted_at?: string;\n    /**\n     * Identifier for the migration, unique within the datalake. Must start with a capital letter and contain only letters, numbers and underscores — for example `RenameMemoToNote`.\n     */\n    name: string;\n    /**\n     * The SQL to run. Anything the platform will not generate for itself belongs here — renaming a column, changing its type, dropping one, adding an index.\n     */\n    up_statement: string;\n    /**\n     * Updated at\n     */\n    readonly updated_at?: string;\n    /**\n     * Execution order, assigned by the platform from a sequence. Migrations run lowest-first.\n     */\n    readonly version?: number;\n};\n\n/**\n * ToolCloudWatchLogGroupRequest\n */\nexport type ToolCloudWatchLogGroupRequest = CloudWatchLogGroupRequest & {\n    tool_body_type: 'cloud_watch_log_group';\n};\n\n/**\n * ManualToolInvocationSQLQueryCallRequest\n */\nexport type ManualToolInvocationSqlQueryCallRequest = SqlQueryCallRequest & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * ManualUploadCallResponse\n *\n * Identity manual-upload marker. No fields — the discriminator alone indicates the tool call is a manual upload.\n */\nexport type ManualUploadCallResponse = {\n    [key: string]: unknown;\n};\n\n/**\n * ActionStatusUpdaterRESTCallResponse\n */\nexport type ActionStatusUpdaterRestCallResponse = RestCallResponse & {\n    updater_body_type: 'restapi_request';\n};\n\n/**\n * DataActivationClientAWSLambdaCallRequest\n */\nexport type DataActivationClientAwsLambdaCallRequest = AwsLambdaCallRequest & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * WorkflowRunListResponse\n *\n * Paginated list of workflow runs\n */\nexport type WorkflowRunListResponse = {\n    /**\n     * List of workflow runs\n     */\n    data: Array<WorkflowRunResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * MinimalAiAgentResponse\n *\n * AI Agent — identifier and runtime fields only (no tenant/datalake nesting)\n */\nexport type MinimalAiAgentResponse = {\n    /**\n     * Which lake the agent reads. `tokenized` means the agent's context is read from the tokenized copy, so it never sees a real identifier. It is enforced, not advisory: an agent set to `tokenized` in an environment with no tokenized lake fails its enrichment step rather than falling back to raw.\n     */\n    data_access: 'raw' | 'tokenized';\n    /**\n     * Agent description\n     */\n    description?: string | null;\n    /**\n     * Whether the agent is enabled\n     */\n    enabled: boolean;\n    /**\n     * AI Agent ID\n     */\n    id?: string;\n    /**\n     * JSON Schema describing the agent's input contract — validated by the runner against caller context on every invocation.\n     */\n    input_schema: {\n        [key: string]: unknown;\n    };\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * JSON Schema for LLM response format\n     */\n    llm_response_schema: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Maximum tokens for LLM response\n     */\n    max_tokens: number;\n    /**\n     * LLM model identifier\n     */\n    model: string;\n    /**\n     * Agent name\n     */\n    name: string;\n    prompt_config: SimpleTemplateConfigResponse;\n    /**\n     * URL-friendly slug\n     */\n    slug?: string;\n    /**\n     * Sampling temperature (0.0–2.0)\n     */\n    temperature: number;\n    tool?: ToolResponse;\n    /**\n     * Tool ID\n     */\n    tool_id: string;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * GenericTableColumnResponse\n *\n * Generic table column definition.\n */\nexport type GenericTableColumnResponse = {\n    /**\n     * Column description\n     */\n    description: string;\n    is_array?: boolean;\n    is_checksum?: boolean;\n    is_required?: boolean;\n    is_unique?: boolean;\n    /**\n     * Column name\n     */\n    name: string;\n    privacy_requirement?: 'none' | 'redact' | 'tokenize';\n    /**\n     * What the column holds, as opposed to how it is stored. Nullable.\n     */\n    semantic_kind?: 'string' | 'text' | 'email' | 'phone' | 'date' | 'json' | 'image' | 'pdf' | 'attachment';\n    /**\n     * Display title\n     */\n    title: string;\n    /**\n     * Column data type\n     */\n    type: 'string' | 'integer' | 'float' | 'boolean' | 'date' | 'datetime' | 'time' | 'decimal' | 'jsonb' | 'uuid';\n};\n\n/**\n * DataActivationClientS3CallRequest\n */\nexport type DataActivationClientS3CallRequest = S3CallRequest & {\n    tool_call_type: 's3_request';\n};\n\n/**\n * DatasetSearchResponse\n *\n * Double-paginated dataset search results scoped to a `UserSearch`. The\n * `meta` object carries two `Flop.Meta`-shaped sub-objects:\n *\n * - `sql` — outer page over `search_results` (up to 1000 dataset IDs per\n * chunk; cap dictated by Postgres' `WHERE id IN (^ids)` plan). `null`\n * when the request was not bound to a `user_search_id`.\n * - `flop` — inner Flop page over the resource (default 20 rows).\n *\n */\nexport type DatasetSearchResponse = {\n    /**\n     * Array of dataset records\n     */\n    data: Array<{\n        [key: string]: unknown;\n    }>;\n    /**\n     * Two-tier pagination metadata\n     */\n    meta: {\n        flop: PaginationMeta;\n        /**\n         * Outer page over search_results — null when no UserSearch bound\n         */\n        sql?: PaginationMeta | unknown;\n    };\n    user_search: UserSearchResponse;\n};\n\n/**\n * InvitationRequest\n *\n * Pending tenant invitation — resolved into a Membership on accept. Request\n */\nexport type InvitationRequest = {\n    /**\n     * Recipient email address. Must be unique per tenant.\n     */\n    email: string;\n    /**\n     * Tenant-membership role to grant on acceptance. NOT the platform-wide `User.role` enum — `tenant_admin` here is a tenant-scoped admin, not a platform admin.\n     */\n    role: 'member' | 'researcher' | 'admin';\n};\n\n/**\n * ActionAWSLambdaCallResponse\n */\nexport type ActionAwsLambdaCallResponse = AwsLambdaCallResponse & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * EndUserMessagingResponse\n *\n * AWS End User Messaging tool configuration for sending MMS via the SendMediaMessage API.\n */\nexport type EndUserMessagingResponse = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer (auto-generated when auth_method is assume_role)\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    base_message?: ComplexTemplateConfigResponse | null;\n    /**\n     * AWS End User Messaging configuration set that routes delivery events to CloudWatch\n     */\n    configuration_set_name: string;\n    /**\n     * Custom sms-voice endpoint URL (e.g. http://localhost:8080 for the WireMock stub); leave blank for real AWS\n     */\n    endpoint_url?: string | null;\n    /**\n     * S3 bucket (same region as the sending number) where author media is re-staged for SendMediaMessage\n     */\n    media_bucket: string;\n    /**\n     * Origination phone number or identity in E.164 format (e.g., +15551234567); must be MMS-capable\n     */\n    phone_number: string;\n    /**\n     * ID of the primary End User Messaging tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * AWS region (e.g., us-west-2)\n     */\n    region: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * ToolS3Response\n */\nexport type ToolS3Response = S3Response & {\n    tool_body_type: 's3';\n};\n\n/**\n * S3CloudStorageAwsRequest\n */\nexport type S3CloudStorageAwsRequest = CloudStorageAwsRequest & {\n    storage_config_type: 'aws';\n};\n\n/**\n * AuthenticatedLinkUpdateMessageTrackingRequest\n *\n * What the host serving the link prefix reports about a link's message: a status and the time it happened, as develop's update-message-tracking took them. Only the token is required\n */\nexport type AuthenticatedLinkUpdateMessageTrackingRequest = {\n    /**\n     * When the recipient submitted the form. Left empty, the message keeps its value\n     */\n    form_submitted_at?: string | null;\n    /**\n     * When the host's landing page opened. Left empty, the message keeps its value\n     */\n    opened_at?: string | null;\n    /**\n     * Engagement status the host reports, typically \"opened\" or \"form_submitted\". Applied through the message's order guard, so it only ever moves the message forward\n     */\n    status?: string | null;\n    /**\n     * The token from the link's path, `<link_prefix>/<token>`\n     */\n    token: string;\n};\n\n/**\n * DataActivationClientSFTPCallResponse\n */\nexport type DataActivationClientSftpCallResponse = SftpCallResponse & {\n    tool_call_type: 'sftp_request';\n};\n\n/**\n * CloudStorageR2Request\n *\n * Cloudflare R2 cloud storage configuration — S3-compatible with auto region and account-scoped endpoints. Request\n */\nexport type CloudStorageR2Request = {\n    /**\n     * R2 access key ID\n     */\n    access_key_id: string;\n    /**\n     * Base path prefix for objects within the bucket\n     */\n    base_path?: string;\n    /**\n     * R2 bucket name\n     */\n    bucket: string;\n    /**\n     * Account-scoped R2 endpoint URL, e.g. https://<account-id>.r2.cloudflarestorage.com\n     */\n    endpoint: string;\n    /**\n     * R2 region (defaults to \"auto\")\n     */\n    region?: string;\n};\n\n/**\n * ActionRunDataActivationClientCallResponse\n */\nexport type ActionRunDataActivationClientCallResponse = RunDataActivationClientCallResponse & {\n    tool_call_type: 'run_data_activation_client';\n};\n\n/**\n * DataSourceRequest\n *\n * Data source — connection to a third-party system or API Request\n */\nexport type DataSourceRequest = {\n    /**\n     * Data source description\n     */\n    description?: string | null;\n    /**\n     * Data Source ID\n     */\n    id?: string;\n    /**\n     * Image URL\n     */\n    image_url?: string | null;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * Whether this is the default data source\n     */\n    is_default: boolean;\n    /**\n     * Data source name\n     */\n    name: string;\n    /**\n     * Data source status\n     */\n    status: 'draft' | 'active' | 'inactive';\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n    /**\n     * Data source URI\n     */\n    uri: string;\n};\n\n/**\n * ExecuteSqlRequest\n *\n * A read-only SQL statement to execute against the datalake, the data access mode, and\n * optional Flop-inspired pagination. `page_size` is capped server-side.\n *\n */\nexport type ExecuteSqlRequest = {\n    /**\n     * Which lake to query: `raw`, `tokenized` or `redacted`\n     */\n    mode: 'raw' | 'tokenized' | 'redacted';\n    /**\n     * 1-based page number\n     */\n    page?: number | null;\n    /**\n     * Rows per page (capped at the server's default page size)\n     */\n    page_size?: number | null;\n    /**\n     * Read-only SQL statement to execute\n     */\n    sql: string;\n};\n\n/**\n * ToolManualUploadRequest\n */\nexport type ToolManualUploadRequest = ManualUploadRequest & {\n    tool_body_type: 'manual_upload';\n};\n\n/**\n * SharePointRequest\n *\n * Microsoft SharePoint integration via the Microsoft Graph API. Supports sites, document libraries, and lists with client-credential or managed-identity auth. Request\n */\nexport type SharePointRequest = {\n    /**\n     * Microsoft Graph authentication method\n     */\n    auth_method: 'client_credentials' | 'managed_identity';\n    /**\n     * Microsoft tenant ID (GUID)\n     */\n    azure_tenant_id: string;\n    base_path?: ComplexTemplateConfigRequest;\n    /**\n     * Azure AD application/client ID (used when auth_method is client_credentials)\n     */\n    client_id?: string | null;\n    /**\n     * Optional specific drive ID to access\n     */\n    drive_id?: string | null;\n    /**\n     * Optional path within the drive (e.g., Documents/Reports)\n     */\n    drive_path?: string | null;\n    /**\n     * Type of SharePoint resource to interact with\n     */\n    resource_type: 'site' | 'library' | 'list';\n    /**\n     * SharePoint site URL (e.g., https://contoso.sharepoint.com/sites/finance)\n     */\n    site_url?: string | null;\n};\n\n/**\n * ManualToolInvocationSMSCallRequest\n */\nexport type ManualToolInvocationSmsCallRequest = SmsCallRequest & {\n    tool_call_type: 'sms_request';\n};\n\n/**\n * ResyncTableRequest\n *\n * Which table to empty in the copy and copy again from the start\n */\nexport type ResyncTableRequest = {\n    /**\n     * A table this copy carries, or one the original can send. Any other name is\n     * refused — that gate is what stands between a typo and an emptied table.\n     * Read `GET .../tables` for the list.\n     *\n     */\n    table: string;\n};\n\n/**\n * ManualToolInvocationRequest\n *\n * A manual test invocation of a tool. The request body carries only `tool_call` (polymorphic on `__type__`); all other fields are server-populated and returned in the response. Request\n */\nexport type ManualToolInvocationRequest = {\n    [key: string]: unknown;\n};\n\n/**\n * ActionManualUploadCallResponse\n */\nexport type ActionManualUploadCallResponse = ManualUploadCallResponse & {\n    tool_call_type: 'manual_upload';\n};\n\n/**\n * SQLQueryCallRequest\n *\n * SQL query descriptor — Liquid-templated query body. Request\n */\nexport type SqlQueryCallRequest = {\n    query: SimpleTemplateConfigRequest;\n};\n\n/**\n * DatalakeResponse\n *\n * Datalake configuration. Secrets (DB passwords, credentials) are write-only — accepted on create but never returned in responses.\n */\nexport type DatalakeResponse = {\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    cloud_storage: ({\n        cloud_storage_type: 'aws';\n    } & DatalakeCloudStorageAwsResponse) | ({\n        cloud_storage_type: 'r2';\n    } & DatalakeCloudStorageR2Response) | ({\n        cloud_storage_type: 'custom';\n    } & DatalakeCloudStorageCustomResponse);\n    /**\n     * Reader auth method\n     */\n    db_reader_auth_method: 'password' | 'iam_role';\n    /**\n     * Enable SSL for reader\n     */\n    db_reader_enable_ssl: boolean;\n    /**\n     * Reader DB host. Null while a derived lake's database is still being provisioned\n     */\n    db_reader_host: string | null;\n    /**\n     * Reader DB name\n     */\n    db_reader_name: string;\n    /**\n     * Reader DB port. Null while a derived lake's database is still being provisioned\n     */\n    db_reader_port: number | null;\n    /**\n     * Reader DB schema name\n     */\n    db_reader_schema: string;\n    /**\n     * Writer auth method\n     */\n    db_writer_auth_method: 'password' | 'iam_role';\n    /**\n     * Enable SSL for writer\n     */\n    db_writer_enable_ssl: boolean;\n    /**\n     * Writer DB host. Null while a derived lake's database is still being provisioned\n     */\n    db_writer_host: string | null;\n    /**\n     * Writer DB name\n     */\n    db_writer_name: string;\n    /**\n     * Writer DB port. Null while a derived lake's database is still being provisioned\n     */\n    db_writer_port: number | null;\n    /**\n     * Writer DB schema name\n     */\n    db_writer_schema: string;\n    /**\n     * The tokenized and redacted lakes derived from this one\n     */\n    readonly derived_datalakes?: Array<DatalakeResponse>;\n    /**\n     * Datalake description\n     */\n    description?: string | null;\n    /**\n     * Datalake ID\n     */\n    readonly id?: string;\n    /**\n     * Creation timestamp\n     */\n    readonly inserted_at?: string;\n    /**\n     * Datalake name\n     */\n    name: string;\n    /**\n     * Database connection pool size\n     */\n    pool_size: number | null;\n    /**\n     * The raw datalake this one derives from. Required on a tokenized or redacted datalake, and always null on a raw one.\n     */\n    primary_datalake_id?: string | null;\n    /**\n     * URL-friendly slug. Server-computed from `name`; read-only on the wire — clients do not author this field.\n     */\n    readonly slug?: string;\n    /**\n     * Datalake setup status\n     */\n    readonly status?: 'provisioning' | 'new' | 'processing' | 'ready';\n    tenant?: TenantResponse;\n    /**\n     * Datalake reporting timezone. Closed whitelist of 8 US timezones — general IANA values (including `UTC`) are rejected.\n     */\n    timezone: 'America/New_York' | 'America/Chicago' | 'America/Denver' | 'America/Los_Angeles' | 'America/Anchorage' | 'America/Adak' | 'Pacific/Honolulu' | 'America/Phoenix';\n    /**\n     * What this lake holds. `raw` is the lake the platform writes; `tokenized` and `redacted` are derived, read-only, and filled by replication.\n     */\n    type?: 'raw' | 'tokenized' | 'redacted';\n    /**\n     * Last update timestamp\n     */\n    readonly updated_at?: string;\n};\n\n/**\n * AlveraAPIError\n *\n * Uniform JSON:API error response for the Alvera API. See module docs for pointer format, title/detail semantics, and pipeline error codes.\n */\nexport type AlveraApiError = {\n    /**\n     * One entry per validation failure. A 422 always has at least one error; an empty array is never emitted.\n     */\n    errors: Array<{\n        /**\n         * Human-readable message. Validator `%{var}` placeholders are already interpolated server-side; pipeline errors surface the underlying cause (Liquid parser line, JSON decode position, etc.).\n         */\n        detail: string;\n        /**\n         * Locates the offending field.\n         */\n        source: {\n            /**\n             * RFC 6901 JSON Pointer. For validation errors it points into the request body (`/name`, `/items`); for `/run` pipeline errors it points into the contract field whose template produced the failure (`/template_config/body`, `/mdm_input_config/body`, `/filter_template`).\n             */\n            pointer: string;\n        };\n        /**\n         * Short error category / machine-readable code. Validation errors: constant \"Invalid value\". Pipeline errors: stage code — \"transform_failed\", \"mdm_input_render_failed\", \"template_body_missing\", \"filter_evaluation_failed\". Clients can pattern-match on this field for programmatic dispatch.\n         */\n        title: string;\n    }>;\n    /**\n     * Which derived copy failed to provision — `tokenized` or `redacted`. `null` on every other structured error, which is why it is not required. Without it a client is told a copy of the pair failed but not which one, and a copy is repaired one mode at a time.\n     */\n    mode?: string | null;\n};\n\n/**\n * RunDataActivationClientCallResponse\n *\n * Runs a data activation client for the row that started the workflow, with the tool call the template renders for that row in place of the client's stored one.\n */\nexport type RunDataActivationClientCallResponse = {\n    /**\n     * Slug of the data activation client to run, in the workflow's datalake\n     */\n    client_slug: string;\n    /**\n     * Liquid template rendered against the row that started the workflow, to the client's whole tool call as JSON — the shape the run-manually endpoint takes. It replaces the client's stored tool call for this run only.\n     */\n    tool_call_override_template: string;\n};\n\n/**\n * CloudStorageAwsResponse\n *\n * AWS S3 cloud storage configuration supporting access key and IAM role authentication.\n */\nexport type CloudStorageAwsResponse = {\n    /**\n     * AWS access key ID (required when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method?: 'access_key' | 'iam_role';\n    /**\n     * Base path prefix for objects within the bucket\n     */\n    base_path?: string;\n    /**\n     * S3 bucket name\n     */\n    bucket: string;\n    /**\n     * Custom S3 endpoint URL (optional, defaults to AWS)\n     */\n    endpoint?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * SFTPResponse\n *\n * SFTP (SSH File Transfer Protocol) server connection configuration with password or SSH key auth.\n */\nexport type SftpResponse = {\n    /**\n     * SFTP authentication method\n     */\n    auth_method: 'password' | 'ssh_key';\n    /**\n     * Base directory path on the SFTP server\n     */\n    base_path: string;\n    base_path_template?: ComplexTemplateConfigResponse | null;\n    /**\n     * SFTP server hostname or IP address\n     */\n    host: string;\n    /**\n     * SFTP port\n     */\n    port: number;\n    /**\n     * SFTP username\n     */\n    user_name: string;\n};\n\n/**\n * ToolSNSResponse\n */\nexport type ToolSnsResponse = SnsResponse & {\n    tool_body_type: 'sns';\n};\n\n/**\n * UserSearchRequest\n *\n * User SQL search resource. Created via `POST /datasets/:dataset/user-searches`\n * with a `WHERE`-clause body in `search_query`; the platform executes\n * `INSERT INTO search_results SELECT … WHERE <body>` to populate\n * `search_results` and reports back `status`, `results_count`, and\n * `error_message`.\n *\n * UserSearch carries no `data_access_mode` of its own — the capability check\n * runs where the lake's connection is acquired, via\n * `Platform.Datalakes.authorize_lake_access!/1`, which reads the ambient\n * session and raises 403 when the ceiling is insufficient. ExOpenApiUtils derives `UserSearchRequest` (writeable subset)\n * and `UserSearchResponse` (full readable shape) from this declaration via\n * the readOnly/writeOnly markers on each property.\n * Request\n */\nexport type UserSearchRequest = {\n    /**\n     * Generic-table identifier. Required when the dataset is a generic table; must be omitted otherwise.\n     */\n    generic_table_id?: string | null;\n    /**\n     * SQL `WHERE`-clause body. The platform wraps it in `INSERT INTO search_results SELECT … WHERE <body>`. Reference the table aliases exposed by the dataset's base decomposed query (see `GET /datasets/:dataset_type/metadata`).\n     */\n    search_query: string;\n};\n\n/**\n * AdminApiKeyResponse\n *\n * A newly created API key's plaintext, for an admin caller.\n */\nexport type AdminApiKeyResponse = {\n    /**\n     * Browser origins permitted to use this key cross-origin.\n     */\n    allowed_origins: Array<string>;\n    /**\n     * Plaintext API key — record it now, it is never shown again.\n     */\n    api_key: string;\n    /**\n     * Last 4 characters of the key.\n     */\n    last_four: string;\n    /**\n     * ID of the tenant the key belongs to.\n     */\n    tenant_id: string;\n};\n\n/**\n * SQLQueryCallResponse\n *\n * SQL query descriptor — Liquid-templated query body.\n */\nexport type SqlQueryCallResponse = {\n    query: SimpleTemplateConfigResponse;\n};\n\n/**\n * ComplexTemplateConfigResponse\n *\n * Inline Liquid template configuration including the rendered-output JSON Schema\n */\nexport type ComplexTemplateConfigResponse = {\n    /**\n     * Liquid template body (required for :custom type)\n     */\n    body?: string | null;\n    /**\n     * JSON Schema describing expected rendered output\n     */\n    output_schema: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Filesystem path (required for :system type)\n     */\n    path?: string | null;\n    /**\n     * Template resolution type\n     */\n    type: 'system' | 'custom' | 'identity' | 'null';\n};\n\n/**\n * ActionSFTPCallResponse\n */\nexport type ActionSftpCallResponse = SftpCallResponse & {\n    tool_call_type: 'sftp_request';\n};\n\n/**\n * ManualUploadResponse\n *\n * Manual upload marker tool — no configuration fields, just an identity marker for manual ingestion workflows.\n */\nexport type ManualUploadResponse = {\n    [key: string]: unknown;\n};\n\n/**\n * DatalakeCloudStorageR2Response\n */\nexport type DatalakeCloudStorageR2Response = CloudStorageR2Response & {\n    cloud_storage_type: 'r2';\n};\n\n/**\n * CloudWatchLogGroupRequest\n *\n * AWS CloudWatch Logs authentication credential store. Referenced by ActionStatusUpdater for log-group polling. Request\n */\nexport type CloudWatchLogGroupRequest = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    base_filter_pattern?: ComplexTemplateConfigRequest;\n    /**\n     * Custom CloudWatch Logs endpoint URL (e.g., http://localhost:4566 for MiniStack)\n     */\n    endpoint_url?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * SNSRequest\n *\n * AWS SNS tool configuration for sending SMS messages via the SNS Publish API. Request\n */\nexport type SnsRequest = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer (auto-generated when auth_method is assume_role)\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    base_message?: ComplexTemplateConfigRequest;\n    /**\n     * Custom SNS endpoint URL (e.g., http://localhost:4566 for MiniStack); leave blank for real AWS\n     */\n    endpoint_url?: string | null;\n    /**\n     * Origination phone number in E.164 format (e.g., +15551234567)\n     */\n    phone_number: string;\n    /**\n     * ID of the primary SNS tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * ManualToolInvocationAWSLambdaCallResponse\n */\nexport type ManualToolInvocationAwsLambdaCallResponse = AwsLambdaCallResponse & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * PingResponse\n *\n * Health check response with version and database connectivity status\n */\nexport type PingResponse = {\n    database_status: 'connected' | 'disconnected';\n    /**\n     * The platform's own IAM task role — the principal a customer names in the trust policy of\n     * the role they create for the platform to assume (`auth_method: assume_role` on an AWS tool).\n     *\n     * Public by design: it has to reach every customer for onboarding to be possible. The control\n     * against a confused deputy is the per-tool external ID the platform generates, not\n     * concealment of this ARN. `null` where the platform runs without AWS, as in local development.\n     *\n     */\n    iam_role_arn?: string | null;\n    status: 'ok' | 'error';\n    timestamp: string;\n    version: string;\n};\n\n/**\n * UploadLinkResponse\n *\n * Response containing a presigned PUT URL for uploading a file to object storage\n */\nexport type UploadLinkResponse = {\n    /**\n     * Seconds until the presigned URL expires\n     */\n    expires_in: number;\n    /**\n     * Storage key to use in the subsequent ingest-file call\n     */\n    key: string;\n    /**\n     * Presigned HTTPS PUT URL. The file must be uploaded with the same Content-Type that was requested.\n     */\n    url: string;\n};\n\n/**\n * TenantListResponse\n *\n * Paginated list of tenants\n */\nexport type TenantListResponse = {\n    /**\n     * List of tenants\n     */\n    data: Array<TenantResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionEmailCallResponse\n */\nexport type ActionEmailCallResponse = EmailCallResponse & {\n    tool_call_type: 'email_request';\n};\n\n/**\n * S3Response\n *\n * S3-compatible storage tool configuration with a nested polymorphic provider config (AWS or R2).\n */\nexport type S3Response = {\n    base_prefix?: ComplexTemplateConfigResponse | null;\n    config: ({\n        storage_config_type: 'aws';\n    } & S3CloudStorageAwsResponse) | ({\n        storage_config_type: 'r2';\n    } & S3CloudStorageR2Response);\n};\n\n/**\n * RunWorkflowRequest\n *\n * Request body for bulk workflow execution via SQL WHERE clause\n */\nexport type RunWorkflowRequest = {\n    /**\n     * When true, bypasses dedupe and idempotency key checks so actions can fire again for the same record. Defaults to false.\n     */\n    manual_override?: boolean;\n    /**\n     * Execution mode. 'live' fires real tool calls; 'dry_run' runs the full pipeline without making external calls.\n     */\n    mode?: 'live' | 'dry_run';\n    /**\n     * When the run should fire, as an ISO-8601 timestamp **with an offset** (e.g. \"2026-08-12T09:00:00Z\"). Omit to fire as soon as a worker picks it up. The segment is resolved when the run fires, not when it is scheduled, so a run scheduled for Friday reaches Friday's matches. Each action still passes through the workflow's action window, so an action may execute later than this.\n     */\n    scheduled_at?: string | null;\n    /**\n     * SQL WHERE clause to filter dataset records (e.g. \"status = 'active'\")\n     */\n    sql_where_clause: string;\n};\n\n/**\n * SFTPCallRequest\n *\n * SFTP file descriptor — remote path + expected MIME content type. Request\n */\nexport type SftpCallRequest = {\n    /**\n     * Expected MIME content type (e.g. application/json)\n     */\n    content_type: string;\n    /**\n     * Remote file path on the SFTP server\n     */\n    path: string;\n};\n\n/**\n * ToolEmailRequest\n */\nexport type ToolEmailRequest = EmailRequest & {\n    tool_body_type: 'email';\n};\n\n/**\n * ManualToolInvocationRESTCallResponse\n */\nexport type ManualToolInvocationRestCallResponse = RestCallResponse & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * ManualToolInvocationMMSCallRequest\n */\nexport type ManualToolInvocationMmsCallRequest = MmsCallRequest & {\n    tool_call_type: 'mms_request';\n};\n\n/**\n * SessionResponse\n *\n * Authenticated session — issued at sign-in (`POST /api/v1/sessions`) or\n * derived from an `X-API-Key` header. The `session_token` field carries the\n * plaintext Bearer on creation responses and is null on verify responses.\n * `tenant`, `role`, and `user` are nullable for tenant-less / pre-tenant\n * sessions; `api_key` is populated for M2M sessions only.\n *\n */\nexport type SessionResponse = {\n    api_key?: ApiKeyResponse;\n    /**\n     * Capability ceiling for the session — the most sensitive lake it may read. `:raw` reaches the raw lake, which holds real PHI/PII values; `:tokenized` and `:redacted` name derived lakes, which hold none. Set at creation time from the membership role: a researcher is capped at `:tokenized` and can never reach the raw lake, while an admin or member is capped at `:raw`. Cannot be widened post-creation.\n     */\n    data_access_mode: 'raw' | 'tokenized' | 'redacted';\n    /**\n     * Expiration timestamp (null for non-expiring M2M sessions)\n     */\n    readonly expires_at?: string | null;\n    /**\n     * Session ID\n     */\n    readonly id?: string;\n    role?: RoleResponse;\n    /**\n     * Plaintext Bearer token. Returned only on creation; null on verify (token is not re-exposed).\n     */\n    readonly session_token?: string | null;\n    tenant?: TenantResponse;\n    /**\n     * Session type\n     */\n    readonly type: 'user' | 'api';\n    user?: UserResponse;\n};\n\n/**\n * AdvancedMigrationListResponse\n *\n * Paginated list of advanced migrations\n */\nexport type AdvancedMigrationListResponse = {\n    /**\n     * List of advanced migrations\n     */\n    data: Array<AdvancedMigrationResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionStatusUpdaterCloudWatchQueryRequest\n */\nexport type ActionStatusUpdaterCloudWatchQueryRequest = CloudWatchQueryRequest & {\n    updater_body_type: 'cloud_watch_request';\n};\n\n/**\n * ActionStatusUpdaterRESTCallRequest\n */\nexport type ActionStatusUpdaterRestCallRequest = RestCallRequest & {\n    updater_body_type: 'restapi_request';\n};\n\n/**\n * IngestResponse\n *\n * Response from data ingestion\n */\nexport type IngestResponse = {\n    /**\n     * Batch ID for tracking\n     */\n    batch_id: string;\n    /**\n     * Number of processing jobs created\n     */\n    jobs_count: number;\n    /**\n     * Storage key for the ingested data\n     */\n    key: string;\n};\n\n/**\n * SQSRequest\n *\n * AWS SQS (Simple Queue Service) tool configuration for sending and receiving queue messages. Request\n */\nexport type SqsRequest = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role';\n    base_message?: ComplexTemplateConfigRequest;\n    /**\n     * Whether the queue is a FIFO queue (URL must end with .fifo)\n     */\n    fifo?: boolean;\n    /**\n     * Optional human-readable queue name for identification\n     */\n    queue_name?: string | null;\n    /**\n     * Full SQS queue URL\n     */\n    queue_url: string;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * DataActivationClientAWSLambdaCallResponse\n */\nexport type DataActivationClientAwsLambdaCallResponse = AwsLambdaCallResponse & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * ToolResponse\n *\n * Tool — a configurable capability reference for external services.\n */\nexport type ToolResponse = {\n    body?: ({\n        tool_body_type: 'email';\n    } & ToolEmailResponse) | ({\n        tool_body_type: 'sns';\n    } & ToolSnsResponse) | ({\n        tool_body_type: 'twilio';\n    } & ToolTwilioResponse) | ({\n        tool_body_type: 'end_user_messaging';\n    } & ToolEndUserMessagingResponse) | ({\n        tool_body_type: 'rest_api';\n    } & ToolRestapiResponse) | ({\n        tool_body_type: 's3';\n    } & ToolS3Response) | ({\n        tool_body_type: 'aws_lambda';\n    } & ToolAwsLambdaResponse) | ({\n        tool_body_type: 'sql_database';\n    } & ToolSqlDatabaseResponse) | ({\n        tool_body_type: 'sqs';\n    } & ToolSqsResponse) | ({\n        tool_body_type: 'sftp';\n    } & ToolSftpResponse) | ({\n        tool_body_type: 'sharepoint';\n    } & ToolSharePointResponse) | ({\n        tool_body_type: 'cloud_watch_log_group';\n    } & ToolCloudWatchLogGroupResponse) | ({\n        tool_body_type: 'manual_upload';\n    } & ToolManualUploadResponse);\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    /**\n     * Data Source ID\n     */\n    data_source_id?: string | null;\n    /**\n     * Datalake ID\n     */\n    datalake_id?: string;\n    /**\n     * Tool description\n     */\n    description?: string | null;\n    /**\n     * Tool ID\n     */\n    readonly id?: string;\n    /**\n     * Creation timestamp\n     */\n    readonly inserted_at?: string;\n    intent?: ToolIntent;\n    /**\n     * Tool name\n     */\n    name?: string;\n    response_extractor?: ComplexTemplateConfigResponse | null;\n    /**\n     * Tool status\n     */\n    status?: 'draft' | 'active' | 'inactive' | 'error' | 'marked_for_deletion';\n    /**\n     * Last update timestamp\n     */\n    readonly updated_at?: string;\n};\n\n/**\n * IngestFileResponse\n *\n * Response from scheduling a bulk file ingest. Row extraction and per-row processing jobs are created asynchronously by the EnqueueRows worker.\n */\nexport type IngestFileResponse = {\n    /**\n     * Oban job id of the scheduled EnqueueRows job\n     */\n    job_id: number;\n    /**\n     * Storage key that was accepted for ingestion\n     */\n    key: string;\n    /**\n     * Initial state of the scheduled job (typically \"scheduled\" or \"available\")\n     */\n    status: string;\n};\n\n/**\n * ToolAWSLambdaRequest\n */\nexport type ToolAwsLambdaRequest = AwsLambdaRequest & {\n    tool_body_type: 'aws_lambda';\n};\n\n/**\n * DataSourceListResponse\n *\n * Paginated list of data sources\n */\nexport type DataSourceListResponse = {\n    /**\n     * List of data sources\n     */\n    data: Array<DataSourceResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * OuterPagination\n *\n * Outer page over the cached search_results table — chunks of up to 1 000 dataset IDs.\n */\nexport type OuterPagination = {\n    page?: number;\n    page_size?: number;\n};\n\n/**\n * ActionManualUploadCallRequest\n */\nexport type ActionManualUploadCallRequest = ManualUploadCallRequest & {\n    tool_call_type: 'manual_upload';\n};\n\n/**\n * SharePointExcelCallResponse\n *\n * Microsoft SharePoint request descriptor — drive URL + Excel sheet + search params.\n */\nexport type SharePointExcelCallResponse = {\n    /**\n     * Microsoft Azure tenant identifier (UUID)\n     */\n    azure_tenant_id: string;\n    /**\n     * SharePoint drive URL\n     */\n    drive_url: string;\n    /**\n     * Search parameters applied when locating files\n     */\n    search_params: string;\n    /**\n     * Excel sheet number (0-indexed) within the workbook\n     */\n    sheet_number: number;\n};\n\n/**\n * SNSResponse\n *\n * AWS SNS tool configuration for sending SMS messages via the SNS Publish API.\n */\nexport type SnsResponse = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer (auto-generated when auth_method is assume_role)\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    base_message?: ComplexTemplateConfigResponse | null;\n    /**\n     * Custom SNS endpoint URL (e.g., http://localhost:4566 for MiniStack); leave blank for real AWS\n     */\n    endpoint_url?: string | null;\n    /**\n     * Origination phone number in E.164 format (e.g., +15551234567)\n     */\n    phone_number: string;\n    /**\n     * ID of the primary SNS tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * InteroperabilityContractAiAgentResponse\n *\n * Join entry linking an AI agent to an interoperability contract at a specific execution position in the enrichment pipeline.\n */\nexport type InteroperabilityContractAiAgentResponse = {\n    ai_agent?: MinimalAiAgentResponse;\n    /**\n     * AI agent ID\n     */\n    ai_agent_id: string;\n    context_mapping_config: ComplexTemplateConfigResponse;\n    /**\n     * Creation timestamp\n     */\n    readonly inserted_at?: string;\n    /**\n     * Execution order in the enrichment pipeline\n     */\n    position: number;\n    /**\n     * Last update timestamp\n     */\n    readonly updated_at?: string;\n};\n\n/**\n * InteroperabilityRunRequest\n *\n * Raw source-row payload to run through a contract's filter → transform → mdm_input pipeline. Stateless: no DB writes. Accepts arbitrary keys by design — validation is deferred to the contract.\n */\nexport type InteroperabilityRunRequest = {\n    [key: string]: unknown;\n};\n\n/**\n * ActionSharePointExcelCallRequest\n */\nexport type ActionSharePointExcelCallRequest = SharePointExcelCallRequest & {\n    tool_call_type: 'microsoft_share_point_excel_request';\n};\n\n/**\n * InteroperabilityContractRequest\n *\n * Declarative execution spec binding a `(datalake, resource_type)` pair to the ingestion pipeline: filter → transform → mdm_input → resolve → upsert. Request\n */\nexport type InteroperabilityContractRequest = {\n    /**\n     * Optional description\n     */\n    description?: string | null;\n    /**\n     * Liquid filter body. Renders to empty/whitespace → row passes; any non-empty trimmed render → row is skipped (rendered string is the skip reason). Nil/empty body = no filter.\n     */\n    filter_template?: string | null;\n    /**\n     * Generic table ID (required when resource_type == \"generic_table\")\n     */\n    generic_table_id?: string | null;\n    /**\n     * Contract ID\n     */\n    id?: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    mdm_input_config?: SimpleTemplateConfigRequest;\n    /**\n     * Human-readable contract name\n     */\n    name: string;\n    /**\n     * Dataset this contract targets (e.g. \"legal_entity\", \"beneficial_owner\", \"generic_table\")\n     */\n    resource_type: string;\n    /**\n     * URL-friendly slug (derived from name on insert; immutable)\n     */\n    slug?: string;\n    template_config: SimpleTemplateConfigRequest;\n    /**\n     * Template type (synced from template_config.type)\n     */\n    type?: 'system' | 'custom' | 'identity' | 'null';\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * DatalakeMigrateResponse\n *\n * Accepted response for an enqueued datalake migration job\n */\nexport type DatalakeMigrateResponse = {\n    /**\n     * Datalake whose schemas will be migrated\n     */\n    datalake_id: string;\n    /**\n     * When the job was enqueued\n     */\n    enqueued_at: string;\n    /**\n     * Oban job ID for tracking. This datalake's own job — the first of the batch. The derived lakes are migrated by their own jobs, which are not reported here.\n     */\n    job_id: number;\n    /**\n     * Always the literal `enqueued` — a constant in the response body, not a\n     * reading of the job's state. A repeat call while a job for this datalake\n     * is still incomplete is deduplicated onto the existing job, so `job_id`\n     * and `enqueued_at` can describe an earlier request while this field\n     * still reads `enqueued`. Poll `GET /datalakes/:id` for real progress.\n     *\n     */\n    status: 'enqueued';\n};\n\n/**\n * RESTCallRequest\n *\n * REST API call descriptor — HTTP method, path, body, params, pagination context template, and events extraction template. Reused across ActionStatusUpdater polling, data activation clients, tool protocols, OAuth token fetching, and chat completion; events_template is the status-poll extraction concern and is required only there. Request\n */\nexport type RestCallRequest = {\n    body?: SimpleTemplateConfigRequest;\n    events_template?: SimpleTemplateConfigRequest;\n    /**\n     * HTTP method\n     */\n    method: 'head' | 'get' | 'put' | 'post' | 'delete' | 'patch';\n    pagination_context_template: SimpleTemplateConfigRequest;\n    params?: SimpleTemplateConfigRequest;\n    path: SimpleTemplateConfigRequest;\n};\n\n/**\n * SQLDatabaseResponse\n *\n * SQL database connection configuration (PostgreSQL, MySQL, MSSQL, SQLite, Snowflake).\n */\nexport type SqlDatabaseResponse = {\n    base_query?: ComplexTemplateConfigResponse | null;\n    /**\n     * Database host (hostname or IP address)\n     */\n    db_host: string;\n    /**\n     * Database name\n     */\n    db_name: string;\n    /**\n     * SQL database engine\n     */\n    db_type: 'postgres' | 'mysql' | 'mssql' | 'sqlite' | 'snowflake';\n    /**\n     * Ecto connection pool size\n     */\n    pool_size?: number | null;\n    /**\n     * Database port (defaults based on db_type: postgres=5432, mysql=3306, mssql=1433)\n     */\n    port?: number | null;\n    /**\n     * Enable SSL connection\n     */\n    ssl?: boolean | null;\n    /**\n     * SSL mode (e.g., 'require', 'verify-full')\n     */\n    ssl_mode?: string | null;\n    /**\n     * Database username\n     */\n    user_name: string;\n};\n\n/**\n * MDMVerifyResponse\n *\n * A legal entity that verified against its master record\n */\nexport type MdmVerifyResponse = {\n    /**\n     * The verified legal entity id\n     */\n    legal_entity_id: string;\n    status: 'verified';\n    /**\n     * Timestamp of verification\n     */\n    verified_at: string;\n};\n\n/**\n * S3CloudStorageAwsResponse\n */\nexport type S3CloudStorageAwsResponse = CloudStorageAwsResponse & {\n    storage_config_type: 'aws';\n};\n\n/**\n * S3CloudStorageR2Response\n */\nexport type S3CloudStorageR2Response = CloudStorageR2Response & {\n    storage_config_type: 'r2';\n};\n\n/**\n * ContextDatasetRequest\n *\n * Context dataset for a workflow — declares which records the context builder should load (and under what filter) before the enrichment and decision stages. Request\n */\nexport type ContextDatasetRequest = {\n    /**\n     * Dataset type — either a standard industry resource (e.g. \"patient\", \"appointment\") or \"generic_table\" to reference a custom table\n     */\n    dataset_type: string;\n    /**\n     * Required when `dataset_type == \"generic_table\"`\n     */\n    generic_table_id?: string | null;\n    /**\n     * Max records to load for this context dataset\n     */\n    limit?: number | null;\n    /**\n     * Ordering within the context-builder pipeline\n     */\n    position?: number;\n    /**\n     * Liquid-templated SQL WHERE clause for filtering records at runtime. The context builder appends the legal entity FK automatically.\n     */\n    where_clause?: string | null;\n};\n\n/**\n * ToolEmailResponse\n */\nexport type ToolEmailResponse = EmailResponse & {\n    tool_body_type: 'email';\n};\n\n/**\n * ToolListResponse\n *\n * Paginated list of tools\n */\nexport type ToolListResponse = {\n    /**\n     * List of tools\n     */\n    data: Array<ToolResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * ManualToolInvocationSQLQueryCallResponse\n */\nexport type ManualToolInvocationSqlQueryCallResponse = SqlQueryCallResponse & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * SQSResponse\n *\n * AWS SQS (Simple Queue Service) tool configuration for sending and receiving queue messages.\n */\nexport type SqsResponse = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role';\n    base_message?: ComplexTemplateConfigResponse | null;\n    /**\n     * Whether the queue is a FIFO queue (URL must end with .fifo)\n     */\n    fifo?: boolean;\n    /**\n     * Optional human-readable queue name for identification\n     */\n    queue_name?: string | null;\n    /**\n     * Full SQS queue URL\n     */\n    queue_url: string;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * DataActivationClientBatchListResponse\n *\n * Paginated list of data activation client runs\n */\nexport type DataActivationClientBatchListResponse = {\n    /**\n     * List of data activation client runs\n     */\n    data: Array<DataActivationClientBatchResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * RESTAPIRequest\n *\n * REST API tool configuration with OpenAPI-compliant authentication (API key, basic, bearer, OAuth2, OIDC) plus base Liquid templates. Request\n */\nexport type RestapiRequest = {\n    /**\n     * Where to send the API key (header or query parameter)\n     */\n    api_key_location?: 'header' | 'query';\n    /**\n     * Header or query-parameter name for the API key\n     */\n    api_key_name?: string | null;\n    /**\n     * Authentication method\n     */\n    auth_method: 'none' | 'api_key' | 'basic' | 'bearer' | 'oauth2' | 'oidc';\n    base_body?: SimpleTemplateConfigRequest;\n    base_headers?: SimpleTemplateConfigRequest;\n    base_path?: SimpleTemplateConfigRequest;\n    base_query?: SimpleTemplateConfigRequest;\n    /**\n     * Base URL (https) of the REST API endpoint\n     */\n    base_url: string;\n    /**\n     * OAuth2 client ID\n     */\n    oauth2_client_id?: string | null;\n    /**\n     * OAuth2 grant type\n     */\n    oauth2_grant_type?: 'client_credentials' | 'authorization_code';\n    /**\n     * OAuth2 scope(s)\n     */\n    oauth2_scope?: string | null;\n    /**\n     * OAuth2 token cache TTL in seconds\n     */\n    oauth2_token_ttl?: number | null;\n    /**\n     * OAuth2 token endpoint URL\n     */\n    oauth2_token_url?: string | null;\n    /**\n     * OIDC client ID\n     */\n    oidc_client_id?: string | null;\n    /**\n     * OIDC issuer URL for discovery\n     */\n    oidc_issuer_url?: string | null;\n    /**\n     * OIDC token cache TTL in seconds\n     */\n    oidc_token_ttl?: number | null;\n    /**\n     * Request content type\n     */\n    request_type: 'json' | 'xml' | 'form_urlencoded' | 'multipart_form';\n    /**\n     * Response content type\n     */\n    response_type: 'json' | 'xml' | 'text' | 'binary';\n    /**\n     * Request timeout in milliseconds (max 300000)\n     */\n    timeout_ms: number;\n    /**\n     * Username (used when auth_method is basic)\n     */\n    username?: string | null;\n};\n\n/**\n * DatalakeCloudStorageCustomRequest\n */\nexport type DatalakeCloudStorageCustomRequest = CloudStorageCustomRequest & {\n    cloud_storage_type: 'custom';\n};\n\n/**\n * PaginationMeta\n *\n * Pagination metadata for list responses\n */\nexport type PaginationMeta = {\n    /**\n     * Current page number (1-indexed)\n     */\n    page: number;\n    /**\n     * Number of items per page\n     */\n    page_size: number;\n    /**\n     * Total number of items across all pages\n     */\n    total_count: number;\n    /**\n     * Total number of pages\n     */\n    total_pages: number;\n};\n\n/**\n * DataActivationClientSharePointExcelCallResponse\n */\nexport type DataActivationClientSharePointExcelCallResponse = SharePointExcelCallResponse & {\n    tool_call_type: 'microsoft_share_point_excel_request';\n};\n\n/**\n * EmailResponse\n *\n * Email tool configuration — SES, Mailgun, SendGrid, SMTP, or mock (dev mailbox) provider plus base Liquid templates.\n */\nexport type EmailResponse = {\n    /**\n     * AWS access key ID (SES)\n     */\n    access_key_id?: string;\n    /**\n     * Sending domain (Mailgun)\n     */\n    domain?: string;\n    /**\n     * Custom provider endpoint; leave blank for the real provider. For SES, the whole request URL (e.g., http://localhost:4566 for MiniStack); blank means https://email.<region>.amazonaws.com. For Mailgun, the API base URL (e.g., https://api.eu.mailgun.net/v3 for EU domains, or a WireMock endpoint for integration tests)\n     */\n    endpoint_url?: string | null;\n    /**\n     * Default sender email address\n     */\n    from_email: string;\n    /**\n     * Default sender display name\n     */\n    from_name?: string | null;\n    /**\n     * ID of the primary Email tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * Email provider (mock = in-process dev mailbox, no credentials)\n     */\n    provider: 'ses' | 'mailgun' | 'sendgrid' | 'smtp' | 'mock';\n    /**\n     * AWS region (SES)\n     */\n    region?: string;\n    /**\n     * Default reply-to address\n     */\n    reply_to?: string | null;\n    /**\n     * SMTP server hostname\n     */\n    smtp_host?: string;\n    /**\n     * SMTP server port\n     */\n    smtp_port?: number;\n    /**\n     * SMTP username\n     */\n    smtp_username?: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * ManualToolInvocationMMSCallResponse\n */\nexport type ManualToolInvocationMmsCallResponse = MmsCallResponse & {\n    tool_call_type: 'mms_request';\n};\n\n/**\n * WorkflowLogResponse\n *\n * Workflow execution log — per-event execution detail\n */\nexport type WorkflowLogResponse = {\n    /**\n     * Per-action execution logs scheduled under this WEL (response only, preloaded server-side)\n     */\n    readonly action_execution_logs?: Array<ActionExecutionLogResponse>;\n    /**\n     * Completed action count\n     */\n    actions_completed?: number;\n    /**\n     * Actions that have started and not finished. A run showing `actions_pending: 1, actions_executing: 0` is waiting to be picked up; one showing `actions_pending: 1, actions_executing: 1` is mid-flight and may be stuck.\n     */\n    actions_executing?: number;\n    /**\n     * Failed action count\n     */\n    actions_failed?: number;\n    /**\n     * Unfinished action count — actions still queued plus actions already running. `actions_executing` is the running share of it.\n     */\n    actions_pending?: number;\n    /**\n     * Total action count\n     */\n    actions_total?: number;\n    /**\n     * Batch identifier\n     */\n    batch_id?: string | null;\n    completed_at?: string | null;\n    /**\n     * R2 storage key for context JSON\n     */\n    context_cloud_storage_key?: string | null;\n    /**\n     * Datalake ID\n     */\n    datalake_id?: string;\n    /**\n     * Error description\n     */\n    error_message?: string | null;\n    /**\n     * Whether the filter passed\n     */\n    filter_result?: boolean | null;\n    /**\n     * Execution log ID\n     */\n    id?: string;\n    inserted_at?: string;\n    /**\n     * The legal entity this run is about (cross-database id)\n     */\n    legal_entity_id?: string | null;\n    /**\n     * Execution mode\n     */\n    mode: 'live' | 'dry_run';\n    /**\n     * Sampled event ID\n     */\n    sampled_event_id?: string | null;\n    started_at?: string | null;\n    /**\n     * Execution status\n     */\n    status: 'filtered' | 'pending' | 'executing' | 'completed' | 'failed' | 'partial';\n    /**\n     * Tenant ID\n     */\n    tenant_id?: string;\n    /**\n     * Parent workflow ID\n     */\n    workflow_id?: string;\n};\n\n/**\n * AiAgentInvokeResponse\n *\n * Response from an AI agent invocation containing the parsed output and usage telemetry.\n */\nexport type AiAgentInvokeResponse = {\n    /**\n     * The model's reasoning trace, when the tool's response_extractor mapped one out (thinking-enabled providers); null otherwise.\n     */\n    explanation?: string | null;\n    /**\n     * Parsed JSON output from the agent's LLM response.\n     */\n    output: {\n        [key: string]: unknown;\n    };\n    /**\n     * Token usage and latency telemetry for the invocation.\n     */\n    usage: {\n        /**\n         * Number of input/prompt tokens consumed.\n         */\n        input_tokens?: number | null;\n        /**\n         * End-to-end execution latency in milliseconds.\n         */\n        latency_ms: number;\n        /**\n         * LLM model identifier used for this invocation.\n         */\n        model?: string | null;\n        /**\n         * Number of output/completion tokens generated.\n         */\n        output_tokens?: number | null;\n        /**\n         * Total tokens (input + output).\n         */\n        total_tokens?: number | null;\n    };\n};\n\n/**\n * CloudStorageAwsRequest\n *\n * AWS S3 cloud storage configuration supporting access key and IAM role authentication. Request\n */\nexport type CloudStorageAwsRequest = {\n    /**\n     * AWS access key ID (required when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method?: 'access_key' | 'iam_role';\n    /**\n     * Base path prefix for objects within the bucket\n     */\n    base_path?: string;\n    /**\n     * S3 bucket name\n     */\n    bucket: string;\n    /**\n     * Custom S3 endpoint URL (optional, defaults to AWS)\n     */\n    endpoint?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * AuthenticatedLinkResponse\n *\n * An authenticated link, with the message it was sent in\n */\nexport type AuthenticatedLinkResponse = {\n    /**\n     * The workflow action that sent the message\n     */\n    readonly action_id: string;\n    /**\n     * The URL as written in the message\n     */\n    readonly destination_url: string;\n    /**\n     * When the link stops resolving\n     */\n    readonly expires_at: string;\n    /**\n     * The recipient's legal entity, when MDM resolved one\n     */\n    readonly legal_entity_id?: string | null;\n    /**\n     * When a person first clicked this link; empty until then\n     */\n    readonly link_clicked_at?: string | null;\n    message: MessageResponse;\n    /**\n     * The message the link was sent in\n     */\n    readonly message_id: string;\n    /**\n     * The workflow run that sent the message\n     */\n    readonly workflow_execution_log_id: string;\n    /**\n     * The workflow that sent the message\n     */\n    readonly workflow_id: string;\n};\n\n/**\n * ToolSQSResponse\n */\nexport type ToolSqsResponse = SqsResponse & {\n    tool_body_type: 'sqs';\n};\n\n/**\n * ApiKeyResponse\n *\n * Lean API key reference — id, name, last_four, and data_access_mode (no plaintext)\n */\nexport type ApiKeyResponse = {\n    /**\n     * Capability ceiling baked into the key — the most sensitive lake a session derived from it may read. `:raw` reaches the raw lake, which holds real PHI/PII values; `:tokenized` and `:redacted` name derived lakes, which hold none. Sessions derived from this key inherit this value. Cannot be widened post-creation — revoke + re-mint instead.\n     */\n    data_access_mode: 'raw' | 'tokenized' | 'redacted';\n    /**\n     * API key ID\n     */\n    readonly id: string;\n    /**\n     * Last 4 characters of the key\n     */\n    readonly last_four: string;\n    /**\n     * API key name\n     */\n    name: string;\n};\n\n/**\n * DataActivationClientResponse\n *\n * Data Activation Client — binds a (datalake, data_source, tool) triple with a polymorphic `tool_call` config describing how to fetch data from the external system, plus optional cron schedule, row-level filter, downstream triggers, and interop contracts for row-level transformation.\n */\nexport type DataActivationClientResponse = {\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    /**\n     * Cron expressions (Crontab syntax, array). Examples: [\"0 *6 * * *\"] for every 6 hours. Omit for on-demand clients.\n     */\n    cron_expressions?: Array<string>;\n    /**\n     * Owning data source ID\n     */\n    data_source_id: string;\n    /**\n     * Owning datalake ID (matches :datalake_slug path segment)\n     */\n    readonly datalake_id?: string;\n    /**\n     * DAC description\n     */\n    description?: string | null;\n    /**\n     * IDs of downstream DACs triggered after this one completes\n     */\n    downstream_connection_ids?: Array<string>;\n    filter_config?: SimpleTemplateConfigResponse | null;\n    /**\n     * DAC ID\n     */\n    readonly id?: string;\n    /**\n     * Creation timestamp\n     */\n    readonly inserted_at?: string;\n    /**\n     * IDs of interoperability contracts used to transform each fetched row\n     */\n    interoperability_contract_ids?: Array<string>;\n    /**\n     * True for platform-created default DACs. Cannot be deleted.\n     */\n    readonly is_default?: boolean;\n    /**\n     * DAC name\n     */\n    name: string;\n    /**\n     * Optional row-level Liquid pre-filter. Renders to empty/whitespace → row passes; any non-empty trimmed render → row is skipped (rendered string is the skip reason). Nil/empty body = no filter. Same semantics as InteroperabilityContract.filter_template.\n     */\n    row_filter?: string | null;\n    rows_from_file_template?: SimpleTemplateConfigResponse | null;\n    /**\n     * URL-friendly slug (derived from name on insert; immutable)\n     */\n    readonly slug?: string;\n    tool_call: ({\n        tool_call_type: 'restapi_request';\n    } & DataActivationClientRestCallResponse) | ({\n        tool_call_type: 'sql_query';\n    } & DataActivationClientSqlQueryCallResponse) | ({\n        tool_call_type: 'sftp_request';\n    } & DataActivationClientSftpCallResponse) | ({\n        tool_call_type: 'microsoft_share_point_excel_request';\n    } & DataActivationClientSharePointExcelCallResponse) | ({\n        tool_call_type: 'aws_lambda_request';\n    } & DataActivationClientAwsLambdaCallResponse) | ({\n        tool_call_type: 'manual_upload';\n    } & DataActivationClientManualUploadCallResponse) | ({\n        tool_call_type: 's3_request';\n    } & DataActivationClientS3CallResponse);\n    /**\n     * Owning tool ID\n     */\n    tool_id: string;\n    /**\n     * Last update timestamp\n     */\n    readonly updated_at?: string;\n};\n\n/**\n * SFTPRequest\n *\n * SFTP (SSH File Transfer Protocol) server connection configuration with password or SSH key auth. Request\n */\nexport type SftpRequest = {\n    /**\n     * SFTP authentication method\n     */\n    auth_method: 'password' | 'ssh_key';\n    /**\n     * Base directory path on the SFTP server\n     */\n    base_path: string;\n    base_path_template?: ComplexTemplateConfigRequest;\n    /**\n     * SFTP server hostname or IP address\n     */\n    host: string;\n    /**\n     * SFTP port\n     */\n    port: number;\n    /**\n     * SFTP username\n     */\n    user_name: string;\n};\n\n/**\n * ActionRunDataActivationClientCallRequest\n */\nexport type ActionRunDataActivationClientCallRequest = RunDataActivationClientCallRequest & {\n    tool_call_type: 'run_data_activation_client';\n};\n\n/**\n * InnerSearch\n *\n * Inner search input over the resource. Defaults: page 1, page_size 20, order_direction asc. All keys optional; absent values fall through to the resource's `Flop.Schema` defaults.\n */\nexport type InnerSearch = {\n    /**\n     * Single text-search value applied across the schema's `:global_search` compound (ILIKE-OR over its underlying string fields). Empty / absent → no filter.\n     */\n    global_search?: string;\n    /**\n     * Sort direction over `id`. Ids are UUIDv6, so this is creation order. `asc` or `desc` only — no per-field overrides at this layer. Omit for `asc`.\n     */\n    order_direction?: 'asc' | 'desc';\n    page?: number;\n    page_size?: number;\n};\n\n/**\n * CloudStorageCustomRequest\n *\n * Custom S3-compatible cloud storage configuration — for MinIO, DigitalOcean Spaces, Backblaze B2, and other S3-compatible services. Requires a custom endpoint URL. Request\n */\nexport type CloudStorageCustomRequest = {\n    /**\n     * Access key ID\n     */\n    access_key_id: string;\n    /**\n     * Base path prefix for objects within the bucket\n     */\n    base_path?: string;\n    /**\n     * Bucket name\n     */\n    bucket: string;\n    /**\n     * Custom S3-compatible endpoint URL (required)\n     */\n    endpoint: string;\n    /**\n     * Storage region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * DatalakeListResponse\n *\n * Paginated list of datalakes\n */\nexport type DatalakeListResponse = {\n    /**\n     * List of datalakes\n     */\n    data: Array<DatalakeResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * RunWorkflowResponse\n *\n * Acknowledgement that a run has been scheduled.\n *\n * **Changed in 0.23.0.** This endpoint used to run the workflow inline and\n * return `enqueued_count`, `batch_id` and `workflow_run_log_id`. It now records\n * a workflow run and returns immediately, so none of those three are knowable\n * yet: the segment is resolved when the run fires, and the batch it produces\n * does not exist until then. Read them from the run via\n * `GET /tenants/{tenant_slug}/datalakes/{datalake_slug}/workflow-runs/{id}`\n * once its status leaves `scheduled`.\n *\n */\nexport type RunWorkflowResponse = {\n    /**\n     * How many records the clause matched **when it was scheduled**. A preview for sanity-checking the clause, not the audience: the segment is resolved again at send time, and suppressed records are excluded then.\n     */\n    matched_count?: number | null;\n    /**\n     * When the run will fire. Echoes the requested time, or the time the request was received when none was given.\n     */\n    scheduled_at: string;\n    /**\n     * Run state at the moment of this response — always `scheduled` here.\n     */\n    status: 'scheduled' | 'processing' | 'completed' | 'cancelled' | 'failed';\n    /**\n     * The scheduled run. Use it to poll status, or to cancel while still `scheduled`.\n     */\n    workflow_run_id: string;\n};\n\n/**\n * ExecuteActionResponse\n *\n * Response from executing a workflow action\n */\nexport type ExecuteActionResponse = {\n    /**\n     * Number of action executions scheduled\n     */\n    scheduled_count?: number;\n    /**\n     * Oban job id of the scheduled action execution. Nil when no job was scheduled (e.g. an invalid `trigger_template` produced a failed ActionExecutionLog instead).\n     */\n    scheduled_job_id?: number | null;\n    /**\n     * Current status of the workflow execution\n     */\n    status?: 'pending' | 'completed' | 'filtered' | 'failed';\n    /**\n     * ID of the workflow execution log (nil when async, populated when synchronous)\n     */\n    workflow_execution_log_id?: string | null;\n};\n\n/**\n * DatalakeCloudStorageAwsResponse\n */\nexport type DatalakeCloudStorageAwsResponse = CloudStorageAwsResponse & {\n    cloud_storage_type: 'aws';\n};\n\n/**\n * ActionRESTCallResponse\n */\nexport type ActionRestCallResponse = RestCallResponse & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * DataActivationClientRequest\n *\n * Data Activation Client — binds a (datalake, data_source, tool) triple with a polymorphic `tool_call` config describing how to fetch data from the external system, plus optional cron schedule, row-level filter, downstream triggers, and interop contracts for row-level transformation. Request\n */\nexport type DataActivationClientRequest = {\n    /**\n     * Cron expressions (Crontab syntax, array). Examples: [\"0 *6 * * *\"] for every 6 hours. Omit for on-demand clients.\n     */\n    cron_expressions?: Array<string>;\n    /**\n     * Owning data source ID\n     */\n    data_source_id: string;\n    /**\n     * DAC description\n     */\n    description?: string | null;\n    /**\n     * IDs of downstream DACs triggered after this one completes\n     */\n    downstream_connection_ids?: Array<string>;\n    filter_config?: SimpleTemplateConfigRequest;\n    /**\n     * IDs of interoperability contracts used to transform each fetched row\n     */\n    interoperability_contract_ids?: Array<string>;\n    /**\n     * DAC name\n     */\n    name: string;\n    /**\n     * Optional row-level Liquid pre-filter. Renders to empty/whitespace → row passes; any non-empty trimmed render → row is skipped (rendered string is the skip reason). Nil/empty body = no filter. Same semantics as InteroperabilityContract.filter_template.\n     */\n    row_filter?: string | null;\n    /**\n     * Owning tool ID\n     */\n    tool_id: string;\n};\n\n/**\n * IngestFileRequest\n *\n * Request body for ingesting a file that was previously uploaded via a presigned upload link\n */\nexport type IngestFileRequest = {\n    /**\n     * Optional business attributes merged into each row extracted from the uploaded file. For a document upload (image/PDF) the extracted row is just `{r2_key, content_type}`; these attrs ride alongside it (e.g. account_holder_number) so the interop contract can resolve the legal entity. File-derived keys (`r2_key`, `content_type`) always win over `data`.\n     */\n    data?: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Storage key returned from the upload-link endpoint. Must belong to the same data activation client.\n     */\n    key: string;\n};\n\n/**\n * ExecuteSqlResponse\n *\n * Read-only SQL result. `data` is the page of rows as an array-of-arrays (tabular, since\n * arbitrary SQL can have duplicate or expression column names that object keys would\n * collapse); the column names and pagination live in `meta`.\n *\n */\nexport type ExecuteSqlResponse = {\n    /**\n     * Page of result rows; each row is an array of cell values aligned to `meta.columns`\n     */\n    data: Array<Array<unknown>>;\n    meta: ExecuteSqlMeta;\n};\n\n/**\n * ToolCloudWatchLogGroupResponse\n */\nexport type ToolCloudWatchLogGroupResponse = CloudWatchLogGroupResponse & {\n    tool_body_type: 'cloud_watch_log_group';\n};\n\n/**\n * ActionAWSLambdaCallRequest\n */\nexport type ActionAwsLambdaCallRequest = AwsLambdaCallRequest & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * TwilioRequest\n *\n * Twilio tool configuration for sending SMS and MMS via the Programmable Messaging API. A primary holds the account credential; a variant names its primary and carries only its own sender identity. Request\n */\nexport type TwilioRequest = {\n    /**\n     * Twilio Account SID (required on a primary; supplied by the primary on a variant)\n     */\n    account_sid?: string | null;\n    /**\n     * Twilio API Key SID (required when auth_method is api_key)\n     */\n    api_key_sid?: string | null;\n    /**\n     * How this primary authenticates to Twilio. Defaults to auth_token.\n     */\n    auth_method?: 'auth_token' | 'api_key';\n    base_message?: ComplexTemplateConfigRequest;\n    /**\n     * Custom Twilio API base URL (e.g., http://localhost:8080 for WireMock); leave blank for https://api.twilio.com\n     */\n    base_url?: string | null;\n    /**\n     * Origination phone number in E.164 format (e.g., +15551234567)\n     */\n    from_number?: string | null;\n    /**\n     * Twilio Messaging Service SID, used instead of a from_number\n     */\n    messaging_service_sid?: string | null;\n    /**\n     * ID of the primary Twilio tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * Request timeout in milliseconds (1–300000)\n     */\n    timeout_ms?: number | null;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type: 'primary' | 'variant';\n};\n\n/**\n * CloudWatchQueryRequest\n *\n * CloudWatch log group query descriptor — log group name plus Liquid-templated time window. Reusable across any caller that needs CloudWatch polling (currently ActionStatusUpdater.updater_body). Title is CloudWatchQuery (not CloudWatchRequest) to avoid triple-`Request` stacking in the library-generated parent-contextual sibling module names (e.g. ActionStatusUpdaterCloudWatchQueryRequest). Request\n */\nexport type CloudWatchQueryRequest = {\n    /**\n     * Liquid template for the poll window end time, rendered with `{{ now_msec }}` in unix milliseconds (e.g., \"{{ now_msec }}\")\n     */\n    end_time: string;\n    /**\n     * CloudWatch log group name to poll for delivery events\n     */\n    log_group_name: string;\n    /**\n     * Liquid template for the poll window start time, rendered with `{{ now }}` in unix milliseconds (e.g., \"{{ now_msec | minutes_ago: 45 }}\")\n     */\n    start_time: string;\n};\n\n/**\n * GenericTableResponse\n *\n * Generic Table — custom or system dataset table with column definitions.\n */\nexport type GenericTableResponse = {\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    /**\n     * Table column definitions\n     */\n    readonly columns?: Array<GenericTableColumnResponse>;\n    /**\n     * Datalake ID\n     */\n    readonly datalake_id?: string;\n    /**\n     * Table description\n     */\n    description?: string;\n    /**\n     * Generic Table ID\n     */\n    readonly id?: string;\n    /**\n     * Creation timestamp\n     */\n    readonly inserted_at?: string;\n    /**\n     * Auto-generated table name (from title)\n     */\n    readonly name?: string;\n    /**\n     * Table deployment status\n     */\n    readonly status?: 'new' | 'stale' | 'processing' | 'deployed';\n    /**\n     * Tenant ID\n     */\n    readonly tenant_id?: string;\n    /**\n     * User-friendly table title\n     */\n    title?: string;\n    /**\n     * Table type\n     */\n    readonly type?: 'custom' | 'system';\n    /**\n     * Last update timestamp\n     */\n    readonly updated_at?: string;\n};\n\n/**\n * InteroperabilityContractListResponse\n *\n * Paginated list of interoperability contracts\n */\nexport type InteroperabilityContractListResponse = {\n    /**\n     * List of interoperability contracts\n     */\n    data: Array<InteroperabilityContractResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * ToolEndUserMessagingResponse\n */\nexport type ToolEndUserMessagingResponse = EndUserMessagingResponse & {\n    tool_body_type: 'end_user_messaging';\n};\n\n/**\n * TenantRequest\n *\n * Tenant resource. The auto-generated `TenantRequest` shape carries only\n * the writable fields (`name`, `description`); `TenantResponse` returns the\n * full read surface (`id`, `slug`, `name`, `description`).\n * Request\n */\nexport type TenantRequest = {\n    /**\n     * Optional free-text description; max 1000 chars.\n     */\n    description?: string | null;\n    /**\n     * Human-readable tenant name. Required on create; max 160 chars.\n     */\n    name: string;\n};\n\n/**\n * DataActivationClientSFTPCallRequest\n */\nexport type DataActivationClientSftpCallRequest = SftpCallRequest & {\n    tool_call_type: 'sftp_request';\n};\n\n/**\n * RunManuallyRequest\n *\n * Optional polymorphic tool_call override for this run. When omitted or empty, the DAC's persisted tool_call is used.\n */\nexport type RunManuallyRequest = {\n    /**\n     * One-shot polymorphic tool_call override. Same `tool_call_type` discriminator and variants as DataActivationClientRequest.tool_call.\n     */\n    tool_call?: ({\n        tool_call_type: 'DataActivationClientRESTCallRequest';\n    } & DataActivationClientRestCallRequest) | ({\n        tool_call_type: 'DataActivationClientSQLQueryCallRequest';\n    } & DataActivationClientSqlQueryCallRequest) | ({\n        tool_call_type: 'DataActivationClientSFTPCallRequest';\n    } & DataActivationClientSftpCallRequest) | ({\n        tool_call_type: 'DataActivationClientSharePointExcelCallRequest';\n    } & DataActivationClientSharePointExcelCallRequest) | ({\n        tool_call_type: 'DataActivationClientAWSLambdaCallRequest';\n    } & DataActivationClientAwsLambdaCallRequest) | ({\n        tool_call_type: 'DataActivationClientManualUploadCallRequest';\n    } & DataActivationClientManualUploadCallRequest) | ({\n        tool_call_type: 'DataActivationClientS3CallRequest';\n    } & DataActivationClientS3CallRequest) | null;\n};\n\n/**\n * ActionStatusUpdaterListResponse\n *\n * Paginated list of action status updaters\n */\nexport type ActionStatusUpdaterListResponse = {\n    /**\n     * List of action status updaters\n     */\n    data: Array<ActionStatusUpdaterResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * ToolEndUserMessagingRequest\n */\nexport type ToolEndUserMessagingRequest = EndUserMessagingRequest & {\n    tool_body_type: 'end_user_messaging';\n};\n\n/**\n * ManualToolInvocationEmailCallRequest\n */\nexport type ManualToolInvocationEmailCallRequest = EmailCallRequest & {\n    tool_call_type: 'email_request';\n};\n\n/**\n * TextToSqlResponse\n *\n * Generated SQL for a natural-language prompt. `explanation` is a best-effort plain-language\n * description of the SQL (`null` if the explainer was unavailable). The SQL is returned for\n * review/editing; run it via `POST .../execute-sql`.\n *\n */\nexport type TextToSqlResponse = {\n    /**\n     * Plain-language explanation of what the SQL does; null when unavailable\n     */\n    explanation: string | null;\n    /**\n     * The model that produced the SQL (e.g. `anthropic:claude-opus-4`)\n     */\n    model: string;\n    /**\n     * The provider that produced the SQL (e.g. `anthropic`, `ollama`)\n     */\n    provider: string;\n    /**\n     * The generated SQL statement\n     */\n    sql: string;\n};\n\n/**\n * DatalakeCloudStorageAwsRequest\n */\nexport type DatalakeCloudStorageAwsRequest = CloudStorageAwsRequest & {\n    cloud_storage_type: 'aws';\n};\n\n/**\n * AgenticWorkflowListResponse\n *\n * Paginated list of agentic workflows\n */\nexport type AgenticWorkflowListResponse = {\n    /**\n     * List of agentic workflows\n     */\n    data: Array<AgenticWorkflowResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionMMSCallRequest\n */\nexport type ActionMmsCallRequest = MmsCallRequest & {\n    tool_call_type: 'mms_request';\n};\n\n/**\n * RoleResponse\n *\n * Lean role reference — id, name, and description\n */\nexport type RoleResponse = {\n    /**\n     * Role description\n     */\n    description?: string | null;\n    /**\n     * Role ID\n     */\n    readonly id: string;\n    /**\n     * Role name (e.g. tenant_admin, platform_admin)\n     */\n    name: string;\n};\n\n/**\n * BatchLogListResponse\n *\n * Paginated list of batch run logs\n */\nexport type BatchLogListResponse = {\n    /**\n     * List of batch run logs\n     */\n    data: Array<BatchLogResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * RunManuallyResponse\n *\n * Acknowledgement of an enqueued manual run. The `batch_id` can be used to poll per-dataset processing logs (via upcoming runs list/show endpoints).\n */\nexport type RunManuallyResponse = {\n    /**\n     * Batch ID stamped on every Oban job for this run\n     */\n    batch_id: string;\n};\n\n/**\n * ToolTwilioResponse\n */\nexport type ToolTwilioResponse = TwilioResponse & {\n    tool_body_type: 'twilio';\n};\n\n/**\n * ManualToolInvocationAWSLambdaCallRequest\n */\nexport type ManualToolInvocationAwsLambdaCallRequest = AwsLambdaCallRequest & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * ToolSFTPResponse\n */\nexport type ToolSftpResponse = SftpResponse & {\n    tool_body_type: 'sftp';\n};\n\n/**\n * ResyncTableResponse\n *\n * The repair was accepted and a fresh copy has started. It finishes later —\n * poll `GET .../tables` and wait for the table to read `caught_up`.\n *\n */\nexport type ResyncTableResponse = {\n    /**\n     * Every table the repair emptied — the one asked for, plus anything that\n     * points at it, read from the catalog for this call. All of them are copied\n     * again by the same run. Returned in full because a caller that emptied nine\n     * tables should be told nine.\n     *\n     */\n    emptied: Array<string>;\n    /**\n     * Which copy was repaired\n     */\n    mode: 'tokenized' | 'redacted';\n    /**\n     * Always the literal `copying` — a constant written once the repair's last\n     * statement succeeded, not a reading of the copy. Nothing here queries the\n     * subscription. `copying` is *also* one of the real table states\n     * `GET .../tables` reports, and the two are unrelated: a table that has just\n     * been put back on the subscription usually reads `waiting_to_start` for a\n     * moment first. Poll `GET .../tables` for the state the copy is actually in.\n     *\n     */\n    status: 'copying';\n    /**\n     * The table asked for\n     */\n    table: string;\n};\n\n/**\n * SignInRequest\n *\n * Exchange user credentials for a Bearer session token.\n *\n * `tenant_slug` is optional — when omitted, returns a tenant-less Bearer for\n * use on `/api/v1/admin/...` operations and pre-tenant flows like\n * `POST /api/v1/tenants` (creating your first tenant). When provided,\n * returns a tenant-scoped Bearer with the caller's membership role.\n *\n * For M2M authentication, use the `X-API-Key` header directly instead.\n * Request\n */\nexport type SignInRequest = {\n    /**\n     * User email address\n     */\n    email: string;\n    /**\n     * Session duration in seconds. Default: 86400 (24h). Maximum: 2592000 (30 days).\n     */\n    expires_in?: number | null;\n    /**\n     * User password\n     */\n    password: string;\n    /**\n     * Tenant slug to create session for. Omit to mint a tenant-less Bearer (admin operations, pre-tenant sign-up flow).\n     */\n    tenant_slug?: string | null;\n};\n\n/**\n * GenericTableColumnRequest\n *\n * Generic table column definition. Request\n */\nexport type GenericTableColumnRequest = {\n    /**\n     * Column description\n     */\n    description: string;\n    is_array?: boolean;\n    is_checksum?: boolean;\n    is_required?: boolean;\n    is_unique?: boolean;\n    /**\n     * Column name\n     */\n    name: string;\n    privacy_requirement?: 'none' | 'redact' | 'tokenize';\n    /**\n     * What the column holds, as opposed to how it is stored. Nullable.\n     */\n    semantic_kind?: 'string' | 'text' | 'email' | 'phone' | 'date' | 'json' | 'image' | 'pdf' | 'attachment';\n    /**\n     * Display title\n     */\n    title: string;\n    /**\n     * Column data type\n     */\n    type: 'string' | 'integer' | 'float' | 'boolean' | 'date' | 'datetime' | 'time' | 'decimal' | 'jsonb' | 'uuid';\n};\n\n/**\n * ToolS3Request\n */\nexport type ToolS3Request = S3Request & {\n    tool_body_type: 's3';\n};\n\n/**\n * ManualToolInvocationRESTCallRequest\n */\nexport type ManualToolInvocationRestCallRequest = RestCallRequest & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * CloudWatchQueryResponse\n *\n * CloudWatch log group query descriptor — log group name plus Liquid-templated time window. Reusable across any caller that needs CloudWatch polling (currently ActionStatusUpdater.updater_body). Title is CloudWatchQuery (not CloudWatchRequest) to avoid triple-`Request` stacking in the library-generated parent-contextual sibling module names (e.g. ActionStatusUpdaterCloudWatchQueryRequest).\n */\nexport type CloudWatchQueryResponse = {\n    /**\n     * Liquid template for the poll window end time, rendered with `{{ now_msec }}` in unix milliseconds (e.g., \"{{ now_msec }}\")\n     */\n    end_time: string;\n    /**\n     * CloudWatch log group name to poll for delivery events\n     */\n    log_group_name: string;\n    /**\n     * Liquid template for the poll window start time, rendered with `{{ now }}` in unix milliseconds (e.g., \"{{ now_msec | minutes_ago: 45 }}\")\n     */\n    start_time: string;\n};\n\n/**\n * SignUpRequest\n *\n * Register a new user account. Mirrors the `/auth/register` LiveView form\n * submission shape. The created user is **unconfirmed** — caller must\n * confirm separately (e.g. via the email confirmation flow, or via\n * `PUT /api/v1/admin/users/:id/confirm` for tests) before signing in.\n *\n * No authentication is required.\n * Request\n */\nexport type SignUpRequest = {\n    /**\n     * User email\n     */\n    email: string;\n    /**\n     * First name\n     */\n    first_name: string | null;\n    /**\n     * Last name\n     */\n    last_name: string | null;\n};\n\n/**\n * AiAgentResponse\n *\n * AI Agent configuration — reusable chat-completion resource\n */\nexport type AiAgentResponse = {\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    /**\n     * Which lake the agent reads. `tokenized` means the agent's context is read from the tokenized copy, so it never sees a real identifier. It is enforced, not advisory: an agent set to `tokenized` in an environment with no tokenized lake fails its enrichment step rather than falling back to raw.\n     */\n    data_access: 'raw' | 'tokenized';\n    datalake?: DatalakeResponse;\n    /**\n     * Agent description\n     */\n    description?: string | null;\n    /**\n     * Whether the agent is enabled\n     */\n    enabled: boolean;\n    /**\n     * AI Agent ID\n     */\n    id?: string;\n    /**\n     * JSON Schema describing the agent's input contract — validated by the runner against caller context on every invocation.\n     */\n    input_schema: {\n        [key: string]: unknown;\n    };\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * JSON Schema for LLM response format\n     */\n    llm_response_schema: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Maximum tokens for LLM response\n     */\n    max_tokens: number;\n    /**\n     * LLM model identifier\n     */\n    model: string;\n    /**\n     * Agent name\n     */\n    name: string;\n    prompt_config: SimpleTemplateConfigResponse;\n    /**\n     * URL-friendly slug\n     */\n    slug?: string;\n    /**\n     * Sampling temperature (0.0–2.0)\n     */\n    temperature: number;\n    tenant?: TenantResponse;\n    tool?: ToolResponse;\n    /**\n     * Tool ID\n     */\n    tool_id: string;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * DataActivationClientSQLQueryCallRequest\n */\nexport type DataActivationClientSqlQueryCallRequest = SqlQueryCallRequest & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * ToolSNSRequest\n */\nexport type ToolSnsRequest = SnsRequest & {\n    tool_body_type: 'sns';\n};\n\n/**\n * InvitationListResponse\n *\n * Paginated list of invitations\n */\nexport type InvitationListResponse = {\n    /**\n     * List of invitations\n     */\n    data: Array<InvitationResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionStatusUpdaterRequest\n *\n * Action Status Updater — automated polling for delivery status updates. Request\n */\nexport type ActionStatusUpdaterRequest = {\n    action_log_config: SimpleTemplateConfigRequest;\n    /**\n     * Cron schedule expression (e.g. \"*30 * * * *\")\n     */\n    cron_expression: string;\n    /**\n     * Datalake ID\n     */\n    datalake_id: string;\n    /**\n     * JSON Schema the rendered events_template output is validated against on every poll (required for restapi updaters). FLOOR: it must describe an array whose items are objects listing \"external_id\" in \"required\" — every event has to name the message it reconciles, so the events_template maps the provider's own id (messageId / id / sid) into external_id. Add whatever else your provider guarantees on top; the platform only enforces the floor.\n     */\n    events_output_schema?: {\n        [key: string]: unknown;\n    } | null;\n    message_config: SimpleTemplateConfigRequest;\n    /**\n     * Updater name\n     */\n    name: string;\n    /**\n     * JSON Schema the rendered pagination_context_template output is validated against on every poll (required for restapi updaters). FLOOR: it must describe an object listing \"has_next\" in \"required\" — that key is what ends the page loop. Add the provider's cursor keys on top; the platform only enforces the floor.\n     */\n    pagination_context_output_schema?: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * IDs of sender tools whose messages this updater monitors\n     */\n    sender_tool_ids?: Array<string> | null;\n    /**\n     * Whether this updater may poll. The server sets cycle_detected when a run re-reads events it has already handled, and every later job then fails without calling the provider. Set it back to active to resume polling — nothing else clears it.\n     */\n    status?: 'active' | 'cycle_detected';\n    /**\n     * Tool providing auth credentials for polling\n     */\n    updater_tool_id: string;\n    /**\n     * Updater type — determines the updater_body shape\n     */\n    updater_type: 'cloud_watch' | 'restapi';\n};\n\n/**\n * DataActivationClientLogListResponse\n *\n * Paginated list of data activation client logs\n */\nexport type DataActivationClientLogListResponse = {\n    /**\n     * List of data activation client logs\n     */\n    data: Array<DataActivationClientLogResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * AiAgentListResponse\n *\n * Paginated list of AI agents\n */\nexport type AiAgentListResponse = {\n    /**\n     * List of AI agents\n     */\n    data: Array<AiAgentResponse>;\n    meta: PaginationMeta;\n};\n\n/**\n * AdminCreateTenantApiKeyRequest\n *\n * Attributes for an admin-provisioned public_api key.\n */\nexport type AdminCreateTenantApiKeyRequest = {\n    /**\n     * Browser origins permitted to use this key cross-origin. Defaults to none.\n     */\n    allowed_origins?: Array<string>;\n    /**\n     * Capability ceiling baked into the key — see ApiKey.data_access_mode.\n     */\n    data_access_mode: 'raw' | 'tokenized' | 'redacted';\n    /**\n     * Human-readable name for the key.\n     */\n    name: string;\n};\n\n/**\n * CloudStorageR2Response\n *\n * Cloudflare R2 cloud storage configuration — S3-compatible with auto region and account-scoped endpoints.\n */\nexport type CloudStorageR2Response = {\n    /**\n     * R2 access key ID\n     */\n    access_key_id: string;\n    /**\n     * Base path prefix for objects within the bucket\n     */\n    base_path?: string;\n    /**\n     * R2 bucket name\n     */\n    bucket: string;\n    /**\n     * Account-scoped R2 endpoint URL, e.g. https://<account-id>.r2.cloudflarestorage.com\n     */\n    endpoint: string;\n    /**\n     * R2 region (defaults to \"auto\")\n     */\n    region?: string;\n};\n\n/**\n * S3Request\n *\n * S3-compatible storage tool configuration with a nested polymorphic provider config (AWS or R2). Request\n */\nexport type S3Request = {\n    base_prefix?: ComplexTemplateConfigRequest;\n};\n\n/**\n * DataSourceResponse\n *\n * Data source — connection to a third-party system or API\n */\nexport type DataSourceResponse = {\n    /**\n     * SHA-256 drift fingerprint over authored fields (server-computed)\n     */\n    readonly checksum?: string;\n    datalake?: DatalakeResponse;\n    /**\n     * Data source description\n     */\n    description?: string | null;\n    /**\n     * Data Source ID\n     */\n    id?: string;\n    /**\n     * Image URL\n     */\n    image_url?: string | null;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * Whether this is the default data source\n     */\n    is_default: boolean;\n    /**\n     * Data source name\n     */\n    name: string;\n    /**\n     * Data source status\n     */\n    status: 'draft' | 'active' | 'inactive';\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n    /**\n     * Data source URI\n     */\n    uri: string;\n};\n\n/**\n * AuthenticatedLinkExchangeRequest\n *\n * A tap on an authenticated link, as the host serving the link prefix forwards it: the token from `<link_prefix>/<token>` and what the tap's request said about itself. Only the token is required\n */\nexport type AuthenticatedLinkExchangeRequest = {\n    /**\n     * The country the tap came from\n     */\n    country?: string | null;\n    /**\n     * The tap's request headers. A prefetch header (sec-purpose, purpose, x-purpose, x-moz) does not mark the message clicked. The tap is recorded with the client headers; never cookies or credentials\n     */\n    headers?: {\n        [key: string]: string;\n    } | null;\n    /**\n     * The address the tap came from\n     */\n    ip?: string | null;\n    /**\n     * The tap's HTTP method. A `HEAD` request looks automated and does not mark the message clicked\n     */\n    method?: string | null;\n    /**\n     * The token from the link's path, `<link_prefix>/<token>`\n     */\n    token: string;\n    /**\n     * The tap's User-Agent header. An empty one, or one naming a bot, link preview or mail scanner, does not mark the message clicked\n     */\n    user_agent?: string | null;\n};\n\n/**\n * TwilioResponse\n *\n * Twilio tool configuration for sending SMS and MMS via the Programmable Messaging API. A primary holds the account credential; a variant names its primary and carries only its own sender identity.\n */\nexport type TwilioResponse = {\n    /**\n     * Twilio Account SID (required on a primary; supplied by the primary on a variant)\n     */\n    account_sid?: string | null;\n    /**\n     * Twilio API Key SID (required when auth_method is api_key)\n     */\n    api_key_sid?: string | null;\n    /**\n     * How this primary authenticates to Twilio. Defaults to auth_token.\n     */\n    auth_method?: 'auth_token' | 'api_key';\n    base_message?: ComplexTemplateConfigResponse | null;\n    /**\n     * Custom Twilio API base URL (e.g., http://localhost:8080 for WireMock); leave blank for https://api.twilio.com\n     */\n    base_url?: string | null;\n    /**\n     * Origination phone number in E.164 format (e.g., +15551234567)\n     */\n    from_number?: string | null;\n    /**\n     * Twilio Messaging Service SID, used instead of a from_number\n     */\n    messaging_service_sid?: string | null;\n    /**\n     * ID of the primary Twilio tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * Request timeout in milliseconds (1–300000)\n     */\n    timeout_ms?: number | null;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type: 'primary' | 'variant';\n};\n\n/**\n * SQLDatabaseRequest\n *\n * SQL database connection configuration (PostgreSQL, MySQL, MSSQL, SQLite, Snowflake). Request\n */\nexport type SqlDatabaseRequest = {\n    base_query?: ComplexTemplateConfigRequest;\n    /**\n     * Database host (hostname or IP address)\n     */\n    db_host: string;\n    /**\n     * Database name\n     */\n    db_name: string;\n    /**\n     * SQL database engine\n     */\n    db_type: 'postgres' | 'mysql' | 'mssql' | 'sqlite' | 'snowflake';\n    /**\n     * Ecto connection pool size\n     */\n    pool_size?: number | null;\n    /**\n     * Database port (defaults based on db_type: postgres=5432, mysql=3306, mssql=1433)\n     */\n    port?: number | null;\n    /**\n     * Enable SSL connection\n     */\n    ssl?: boolean | null;\n    /**\n     * SSL mode (e.g., 'require', 'verify-full')\n     */\n    ssl_mode?: string | null;\n    /**\n     * Database username\n     */\n    user_name: string;\n};\n\n/**\n * SMSCallRequest\n *\n * SMS tool-call config — Liquid-templated recipient and body, transactional/promotional category, and the prefix its links go out on. Request\n */\nexport type SmsCallRequest = {\n    body: SimpleTemplateConfigRequest;\n    /**\n     * Address of the host that serves this action's links. Every URL in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    /**\n     * SMS category — transactional vs promotional\n     */\n    sms_type?: 'transactional' | 'promotional';\n    to: SimpleTemplateConfigRequest;\n};\n\n/**\n * ToolRESTAPIResponse\n */\nexport type ToolRestapiResponse = RestapiResponse & {\n    tool_body_type: 'rest_api';\n};\n\n/**\n * UserSearchResponse\n *\n * User SQL search resource. Created via `POST /datasets/:dataset/user-searches`\n * with a `WHERE`-clause body in `search_query`; the platform executes\n * `INSERT INTO search_results SELECT … WHERE <body>` to populate\n * `search_results` and reports back `status`, `results_count`, and\n * `error_message`.\n *\n * UserSearch carries no `data_access_mode` of its own — the capability check\n * runs where the lake's connection is acquired, via\n * `Platform.Datalakes.authorize_lake_access!/1`, which reads the ambient\n * session and raises 403 when the ceiling is insufficient. ExOpenApiUtils derives `UserSearchRequest` (writeable subset)\n * and `UserSearchResponse` (full readable shape) from this declaration via\n * the readOnly/writeOnly markers on each property.\n *\n */\nexport type UserSearchResponseWritable = {\n    /**\n     * Generic-table identifier. Required when the dataset is a generic table; must be omitted otherwise.\n     */\n    generic_table_id?: string | null;\n    /**\n     * SQL `WHERE`-clause body. The platform wraps it in `INSERT INTO search_results SELECT … WHERE <body>`. Reference the table aliases exposed by the dataset's base decomposed query (see `GET /datasets/:dataset_type/metadata`).\n     */\n    search_query: string;\n};\n\n/**\n * ActionExecutionLogResponse\n *\n * Per-action execution log — child of a WorkflowExecutionLog, one row per scheduled action.\n */\nexport type ActionExecutionLogResponseWritable = {\n    /**\n     * Action ID\n     */\n    action_id: string;\n    action_type: ActionType;\n    /**\n     * Batch identifier\n     */\n    batch_id?: string | null;\n    /**\n     * Completed-at timestamp\n     */\n    completed_at?: string | null;\n    /**\n     * Context key\n     */\n    context_key?: string | null;\n    /**\n     * Decision key (denormalised from action)\n     */\n    decision_key?: string | null;\n    /**\n     * Error description (no customer data)\n     */\n    error_message?: string | null;\n    /**\n     * External system reference (Twilio SID, SES message ID, etc.)\n     */\n    external_id?: string | null;\n    /**\n     * Action execution log ID\n     */\n    id: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * Cross-DB UUID of the message produced by this action (datalake-resident; no FK)\n     */\n    message_id?: string | null;\n    /**\n     * Execution mode (`live` = normal, `dry_run` = preview only)\n     */\n    mode: 'live' | 'dry_run';\n    /**\n     * Retry count\n     */\n    retry_count?: number;\n    /**\n     * Result of the action's runtime_filter Liquid expression\n     */\n    runtime_filter_result?: boolean | null;\n    /**\n     * Scheduled-at timestamp\n     */\n    scheduled_at?: string | null;\n    /**\n     * Started-at timestamp\n     */\n    started_at?: string | null;\n    /**\n     * Execution state\n     */\n    status: 'pending' | 'executing' | 'completed' | 'failed' | 'skipped' | 'filtered' | 'cancelled';\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n    /**\n     * Parent workflow execution log ID\n     */\n    workflow_execution_log_id: string;\n    /**\n     * Workflow ID\n     */\n    workflow_id: string;\n};\n\n/**\n * ContextDatasetResponse\n *\n * Context dataset for a workflow — declares which records the context builder should load (and under what filter) before the enrichment and decision stages.\n */\nexport type ContextDatasetResponseWritable = {\n    /**\n     * Dataset type — either a standard industry resource (e.g. \"patient\", \"appointment\") or \"generic_table\" to reference a custom table\n     */\n    dataset_type: string;\n    /**\n     * Required when `dataset_type == \"generic_table\"`\n     */\n    generic_table_id?: string | null;\n    /**\n     * Max records to load for this context dataset\n     */\n    limit?: number | null;\n    /**\n     * Ordering within the context-builder pipeline\n     */\n    position?: number;\n    /**\n     * Liquid-templated SQL WHERE clause for filtering records at runtime. The context builder appends the legal entity FK automatically.\n     */\n    where_clause?: string | null;\n};\n\n/**\n * DatalakeRequest\n *\n * Datalake configuration. Secrets (DB passwords, credentials) are write-only — accepted on create but never returned in responses. Request\n */\nexport type DatalakeRequestWritable = {\n    cloud_storage: ({\n        cloud_storage_type: 'aws';\n    } & DatalakeCloudStorageAwsRequestWritable) | ({\n        cloud_storage_type: 'r2';\n    } & DatalakeCloudStorageR2RequestWritable) | ({\n        cloud_storage_type: 'custom';\n    } & DatalakeCloudStorageCustomRequestWritable);\n    /**\n     * Reader auth method\n     */\n    db_reader_auth_method: 'password' | 'iam_role';\n    /**\n     * Enable SSL for reader\n     */\n    db_reader_enable_ssl: boolean;\n    /**\n     * Reader DB host. Null while a derived lake's database is still being provisioned\n     */\n    db_reader_host: string | null;\n    /**\n     * Reader DB name\n     */\n    db_reader_name: string;\n    /**\n     * Reader DB password\n     */\n    db_reader_pass: string;\n    /**\n     * Reader DB port. Null while a derived lake's database is still being provisioned\n     */\n    db_reader_port: number | null;\n    /**\n     * Reader DB schema name\n     */\n    db_reader_schema: string;\n    /**\n     * Reader DB username\n     */\n    db_reader_user: string;\n    /**\n     * Writer auth method\n     */\n    db_writer_auth_method: 'password' | 'iam_role';\n    /**\n     * Enable SSL for writer\n     */\n    db_writer_enable_ssl: boolean;\n    /**\n     * Writer DB host. Null while a derived lake's database is still being provisioned\n     */\n    db_writer_host: string | null;\n    /**\n     * Writer DB name\n     */\n    db_writer_name: string;\n    /**\n     * Writer DB password\n     */\n    db_writer_pass: string;\n    /**\n     * Writer DB port. Null while a derived lake's database is still being provisioned\n     */\n    db_writer_port: number | null;\n    /**\n     * Writer DB schema name\n     */\n    db_writer_schema: string;\n    /**\n     * Writer DB username\n     */\n    db_writer_user: string;\n    /**\n     * Datalake description\n     */\n    description?: string | null;\n    /**\n     * Datalake name\n     */\n    name: string;\n    /**\n     * Database connection pool size\n     */\n    pool_size: number | null;\n    /**\n     * The raw datalake this one derives from. Required on a tokenized or redacted datalake, and always null on a raw one.\n     */\n    primary_datalake_id?: string | null;\n    /**\n     * Datalake reporting timezone. Closed whitelist of 8 US timezones — general IANA values (including `UTC`) are rejected.\n     */\n    timezone: 'America/New_York' | 'America/Chicago' | 'America/Denver' | 'America/Los_Angeles' | 'America/Anchorage' | 'America/Adak' | 'Pacific/Honolulu' | 'America/Phoenix';\n    /**\n     * What this lake holds. `raw` is the lake the platform writes; `tokenized` and `redacted` are derived, read-only, and filled by replication.\n     */\n    type?: 'raw' | 'tokenized' | 'redacted';\n};\n\n/**\n * ToolRESTAPIRequest\n */\nexport type ToolRestapiRequestWritable = RestapiRequestWritable & {\n    tool_body_type: 'rest_api';\n};\n\n/**\n * DataActivationClientListResponse\n *\n * Paginated list of data activation clients\n */\nexport type DataActivationClientListResponseWritable = {\n    /**\n     * List of data activation clients\n     */\n    data: Array<DataActivationClientResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * MembershipResponse\n *\n * Tenant membership — binds a user to a tenant with a role.\n */\nexport type MembershipResponseWritable = {\n    tenant?: TenantResponseWritable;\n};\n\n/**\n * EmailCallRequest\n *\n * Email tool-call config — Liquid-templated recipient, subject, and body, and the prefix its links go out on. Request\n */\nexport type EmailCallRequestWritable = {\n    body: SimpleTemplateConfigRequest;\n    /**\n     * Address of the host that serves this action's links. Every href in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    subject: SimpleTemplateConfigRequest;\n    to: SimpleTemplateConfigRequest;\n};\n\n/**\n * ActionEmailCallRequest\n */\nexport type ActionEmailCallRequestWritable = EmailCallRequestWritable & {\n    tool_call_type: 'email_request';\n};\n\n/**\n * DatalakeCloudStorageCustomResponse\n */\nexport type DatalakeCloudStorageCustomResponseWritable = CloudStorageCustomResponse & {\n    cloud_storage_type: 'custom';\n};\n\n/**\n * AgenticWorkflowResponse\n *\n * Agentic Workflow — event-driven automation pipeline\n */\nexport type AgenticWorkflowResponseWritable = {\n    datalake?: DatalakeResponseWritable;\n    /**\n     * Dataset type the workflow listens on (e.g. legal_entity, document, generic_table)\n     */\n    dataset_type: string;\n    /**\n     * Workflow description\n     */\n    description: string;\n    /**\n     * Generic table ID (required when dataset_type is generic_table)\n     */\n    generic_table_id?: string | null;\n    /**\n     * Workflow ID\n     */\n    id?: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * Workflow name\n     */\n    name: string;\n    /**\n     * When true, skip MDM resolution\n     */\n    skip_mdm_resolution?: boolean;\n    /**\n     * Workflow status. live = auto-fired by event sampling; draft = preview only (dry-run); manual = never auto-fired, but runs for real when an operator explicitly invokes it.\n     */\n    status: 'live' | 'draft' | 'manual';\n    /**\n     * Operator-authored labels. Free text — no taxonomy, no shared vocabulary. Not read by the execution pipeline, but they DO participate in the workflow checksum, so retagging shifts the drift fingerprint. REQUIRED on every write. Send `[]` for an untagged workflow — deliberately no default, so an omitted key is a 422 rather than a silent reset to empty.\n     */\n    tags: Array<string>;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * ManualToolInvocationResponse\n *\n * A manual test invocation of a tool. The request body carries only `tool_call` (polymorphic on `__type__`); all other fields are server-populated and returned in the response.\n */\nexport type ManualToolInvocationResponseWritable = {\n    [key: string]: unknown;\n};\n\n/**\n * CloudWatchLogGroupResponse\n *\n * AWS CloudWatch Logs authentication credential store. Referenced by ActionStatusUpdater for log-group polling.\n */\nexport type CloudWatchLogGroupResponseWritable = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    /**\n     * Custom CloudWatch Logs endpoint URL (e.g., http://localhost:4566 for MiniStack)\n     */\n    endpoint_url?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * TenantResponse\n *\n * Tenant resource. The auto-generated `TenantRequest` shape carries only\n * the writable fields (`name`, `description`); `TenantResponse` returns the\n * full read surface (`id`, `slug`, `name`, `description`).\n *\n */\nexport type TenantResponseWritable = {\n    /**\n     * Optional free-text description; max 1000 chars.\n     */\n    description?: string | null;\n    /**\n     * Human-readable tenant name. Required on create; max 160 chars.\n     */\n    name: string;\n};\n\n/**\n * ActionSMSCallRequest\n */\nexport type ActionSmsCallRequestWritable = SmsCallRequestWritable & {\n    tool_call_type: 'sms_request';\n};\n\n/**\n * DataActivationClientLogResponse\n *\n * One log row per `(batch_id, dataset_table)`. A batch fans out into one log per dataset table — so a single run (one `batch_id`) produces multiple log rows, one per table the DAC writes into. Once `BatchMergeWorker` has finished, `output_files` carries one entry per bucket mode, each an `object_key` — a cloud-storage key, not a URL. To read an archive, presign the key with `POST /datalakes/{datalake_slug}/download-link`.\n */\nexport type DataActivationClientLogResponseWritable = {\n    /**\n     * Batch identifier stamped on every Oban job for this run\n     */\n    batch_id: string;\n    /**\n     * Target dataset table for this slice (e.g. legal_entities, documents)\n     */\n    dataset_table: string;\n    /**\n     * Number of existing rows whose checksum changed (trigger-maintained)\n     */\n    dataset_updated?: number;\n    /**\n     * Source file keys fetched for this slice\n     */\n    input_files?: Array<string>;\n    /**\n     * Total source rows ingested by this slice of the batch\n     */\n    rows_ingested?: number;\n    /**\n     * `processing` from the moment the slice is enqueued until the batch finishes — the column has no default, so this is written, not assumed. `succeeded` is written once by the batch callback, and only over `processing`. `failed` when the batch died before enqueueing any row — the fetch or the enqueue itself errored, and `rows_ingested` and `input_files` are 0/[] on such a row. `partial` when the batch ran and at least one row was refused on the way in; the rows that landed are still there. Read `error` for the reason in the last two.\n     */\n    status?: 'processing' | 'succeeded' | 'partial' | 'failed';\n};\n\n/**\n * ActionStatusUpdaterResponse\n *\n * Action Status Updater — automated polling for delivery status updates.\n */\nexport type ActionStatusUpdaterResponseWritable = {\n    /**\n     * Cron schedule expression (e.g. \"*30 * * * *\")\n     */\n    cron_expression: string;\n    /**\n     * Datalake ID\n     */\n    datalake_id: string;\n    /**\n     * JSON Schema the rendered events_template output is validated against on every poll (required for restapi updaters). FLOOR: it must describe an array whose items are objects listing \"external_id\" in \"required\" — every event has to name the message it reconciles, so the events_template maps the provider's own id (messageId / id / sid) into external_id. Add whatever else your provider guarantees on top; the platform only enforces the floor.\n     */\n    events_output_schema?: {\n        [key: string]: unknown;\n    } | null;\n    message_config: SimpleTemplateConfigResponse;\n    /**\n     * Updater name\n     */\n    name: string;\n    /**\n     * JSON Schema the rendered pagination_context_template output is validated against on every poll (required for restapi updaters). FLOOR: it must describe an object listing \"has_next\" in \"required\" — that key is what ends the page loop. Add the provider's cursor keys on top; the platform only enforces the floor.\n     */\n    pagination_context_output_schema?: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * IDs of sender tools whose messages this updater monitors\n     */\n    sender_tool_ids?: Array<string> | null;\n    /**\n     * Whether this updater may poll. The server sets cycle_detected when a run re-reads events it has already handled, and every later job then fails without calling the provider. Set it back to active to resume polling — nothing else clears it.\n     */\n    status?: 'active' | 'cycle_detected';\n    /**\n     * Tool providing auth credentials for polling\n     */\n    updater_tool_id: string;\n    /**\n     * Updater type — determines the updater_body shape\n     */\n    updater_type: 'cloud_watch' | 'restapi';\n};\n\n/**\n * DataActivationClientSharePointExcelCallRequest\n */\nexport type DataActivationClientSharePointExcelCallRequestWritable = SharePointExcelCallRequest & {\n    tool_call_type: 'microsoft_share_point_excel_request';\n};\n\n/**\n * WorkflowRunResponse\n *\n * A workflow invocation scheduled for a caller-chosen time. Every manual\n * invocation creates one, including an immediate send, which is simply\n * `scheduled_at` = now — there is no separate run-now path.\n *\n * A run is not a workflow run log. The run is the intent and is cancellable\n * while `scheduled`; the run log is the outcome it produces, and run logs also\n * arrive from Data Activation Client ingestion with no run behind them.\n *\n * The segment is resolved when the run **fires**, not when it is scheduled.\n * `matched_count` is the preview the operator saw; the audience is whatever\n * `execution_user_search_id` resolved to at send time, minus suppressed and\n * unreachable records.\n *\n */\nexport type WorkflowRunResponseWritable = {\n    /**\n     * Bypasses dedupe and idempotency checks for every record this run matches.\n     */\n    manual_override?: boolean;\n    /**\n     * 'live' fires real tool calls; 'dry_run' runs the pipeline without making external calls.\n     */\n    mode?: 'live' | 'dry_run';\n    /**\n     * The resolved search this run was scheduled against. Create it with `POST /datasets/:dataset/user-searches`; its `results_count` becomes this run's `matched_count`.\n     */\n    preview_user_search_id: string;\n    /**\n     * When this run fires, in UTC. An immediate send is simply now. Each action still passes through the workflow's action window, so an action may execute later than this.\n     */\n    scheduled_at: string;\n};\n\n/**\n * AgenticWorkflowRequest\n *\n * Agentic Workflow — event-driven automation pipeline Request\n */\nexport type AgenticWorkflowRequestWritable = {\n    /**\n     * Decision actions to attach to this workflow (request)\n     */\n    actions?: Array<ActionRequestWritable>;\n    /**\n     * Context-enrichment datasets to load before the decision stage (request)\n     */\n    context_datasets?: Array<ContextDatasetRequestWritable>;\n    /**\n     * Dataset type the workflow listens on (e.g. legal_entity, document, generic_table)\n     */\n    dataset_type: string;\n    decision_config?: ComplexTemplateConfigRequest;\n    /**\n     * Workflow description\n     */\n    description: string;\n    filter_config?: SimpleTemplateConfigRequest;\n    /**\n     * Generic table ID (required when dataset_type is generic_table)\n     */\n    generic_table_id?: string | null;\n    /**\n     * Workflow ID\n     */\n    id?: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * Workflow name\n     */\n    name: string;\n    /**\n     * When true, skip MDM resolution\n     */\n    skip_mdm_resolution?: boolean;\n    /**\n     * Workflow status. live = auto-fired by event sampling; draft = preview only (dry-run); manual = never auto-fired, but runs for real when an operator explicitly invokes it.\n     */\n    status: 'live' | 'draft' | 'manual';\n    /**\n     * Operator-authored labels. Free text — no taxonomy, no shared vocabulary. Not read by the execution pipeline, but they DO participate in the workflow checksum, so retagging shifts the drift fingerprint. REQUIRED on every write. Send `[]` for an untagged workflow — deliberately no default, so an omitted key is a 422 rather than a silent reset to empty.\n     */\n    tags: Array<string>;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n    /**\n     * AI agents to attach to this workflow (request)\n     */\n    workflow_ai_agents?: Array<WorkflowAiAgentRequestWritable>;\n};\n\n/**\n * AWSLambdaResponse\n *\n * AWS Lambda tool configuration for an external, user-provided Lambda ARN.\n */\nexport type AwsLambdaResponseWritable = {\n    /**\n     * AWS access key ID (required when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * Authentication method (required when type is external)\n     */\n    auth_method?: 'access_key' | 'iam_role' | 'cloudformation';\n    /**\n     * User-provided environment variable key-value entries passed to the Lambda function\n     */\n    env_vars?: Array<unknown>;\n    /**\n     * Lambda function ARN\n     */\n    function_arn?: string | null;\n    /**\n     * User-provided secret key-value entries synced to AWS Secrets Manager\n     */\n    secrets?: Array<unknown>;\n    /**\n     * Lambda deployment type. `external` = user-provided Lambda ARN. This is the only supported type.\n     */\n    type: 'external';\n};\n\n/**\n * ActionSharePointExcelCallResponse\n */\nexport type ActionSharePointExcelCallResponseWritable = SharePointExcelCallResponse & {\n    tool_call_type: 'microsoft_share_point_excel_request';\n};\n\n/**\n * InteroperabilityContractAiAgentRequest\n *\n * Join entry linking an AI agent to an interoperability contract at a specific execution position in the enrichment pipeline. Request\n */\nexport type InteroperabilityContractAiAgentRequestWritable = {\n    /**\n     * AI agent ID\n     */\n    ai_agent_id: string;\n    context_mapping_config: ComplexTemplateConfigRequest;\n    /**\n     * Execution order in the enrichment pipeline\n     */\n    position: number;\n};\n\n/**\n * DataActivationClientSQLQueryCallResponse\n */\nexport type DataActivationClientSqlQueryCallResponseWritable = SqlQueryCallResponseWritable & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * UserResponse\n *\n * Lean user reference — id, email, and names\n */\nexport type UserResponseWritable = {\n    /**\n     * User email\n     */\n    email: string;\n    /**\n     * First name\n     */\n    first_name?: string | null;\n    /**\n     * Last name\n     */\n    last_name?: string | null;\n};\n\n/**\n * MMSCallRequest\n *\n * MMS tool-call config — Liquid-templated recipient, optional caption, plain public media URL, and the prefix its links go out on. Request\n */\nexport type MmsCallRequestWritable = {\n    body?: SimpleTemplateConfigRequest;\n    /**\n     * Address of the host that serves this action's links. Every URL in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    /**\n     * Public http(s) URL of the media to attach — re-staged into the tool's S3 media bucket (End User Messaging) or fetched by Twilio directly\n     */\n    media_url: string;\n    to: SimpleTemplateConfigRequest;\n};\n\n/**\n * ActionResponse\n *\n * Workflow action — executes when the decision table routes to this `decision_key`. Polymorphic `tool_call` payload is variant-specific via `tool_call_type` discriminator.\n */\nexport type ActionResponseWritable = {\n    action_type: ActionType;\n    /**\n     * Hour (0–23) when the action's execution window closes\n     */\n    action_window_end?: number | null;\n    /**\n     * Hour (0–23) when the action's execution window opens (failsafe, typically SMS)\n     */\n    action_window_start?: number | null;\n    /**\n     * Unique decision_key within the workflow — maps to a decision-table outcome\n     */\n    decision_key: string;\n    /**\n     * Liquid template producing the idempotency key; receives checksum, legal_entity_id, legal_entity_id, workflow_id, action_id, decision_key\n     */\n    idempotency_template: string;\n    /**\n     * Liquid template rendered to JSON once per send, on every action type. Stored on the message the send writes, and returned by the authenticated-link exchange as metadata (optional). A template that does not render fails the send.\n     */\n    metadata_template?: string | null;\n    /**\n     * Display order within the workflow\n     */\n    position?: number;\n    /**\n     * Liquid template evaluated at execution time; when falsy, the action is skipped\n     */\n    runtime_filter?: string | null;\n    /**\n     * Tool that executes this action. Required for every action type except data_activation, which refuses one: its client carries its own tool.\n     */\n    tool_id?: string | null;\n    /**\n     * Liquid template that determines when this action executes\n     */\n    trigger_template: string;\n};\n\n/**\n * EndUserMessagingRequest\n *\n * AWS End User Messaging tool configuration for sending MMS via the SendMediaMessage API. Request\n */\nexport type EndUserMessagingRequestWritable = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer (auto-generated when auth_method is assume_role)\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    base_message?: ComplexTemplateConfigRequest;\n    /**\n     * AWS End User Messaging configuration set that routes delivery events to CloudWatch\n     */\n    configuration_set_name: string;\n    /**\n     * Custom sms-voice endpoint URL (e.g. http://localhost:8080 for the WireMock stub); leave blank for real AWS\n     */\n    endpoint_url?: string | null;\n    /**\n     * S3 bucket (same region as the sending number) where author media is re-staged for SendMediaMessage\n     */\n    media_bucket: string;\n    /**\n     * Origination phone number or identity in E.164 format (e.g., +15551234567); must be MMS-capable\n     */\n    phone_number: string;\n    /**\n     * ID of the primary End User Messaging tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * AWS region (e.g., us-west-2)\n     */\n    region: string;\n    /**\n     * AWS secret access key (used when auth_method is access_key)\n     */\n    secret_access_key?: string | null;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * InteroperabilityContractResponse\n *\n * Declarative execution spec binding a `(datalake, resource_type)` pair to the ingestion pipeline: filter → transform → mdm_input → resolve → upsert.\n */\nexport type InteroperabilityContractResponseWritable = {\n    /**\n     * Optional description\n     */\n    description?: string | null;\n    /**\n     * Liquid filter body. Renders to empty/whitespace → row passes; any non-empty trimmed render → row is skipped (rendered string is the skip reason). Nil/empty body = no filter.\n     */\n    filter_template?: string | null;\n    /**\n     * Generic table ID (required when resource_type == \"generic_table\")\n     */\n    generic_table_id?: string | null;\n    /**\n     * Contract ID\n     */\n    id?: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * Human-readable contract name\n     */\n    name: string;\n    /**\n     * Dataset this contract targets (e.g. \"legal_entity\", \"beneficial_owner\", \"generic_table\")\n     */\n    resource_type: string;\n    /**\n     * URL-friendly slug (derived from name on insert; immutable)\n     */\n    slug?: string;\n    template_config: SimpleTemplateConfigResponse;\n    /**\n     * Template type (synced from template_config.type)\n     */\n    type?: 'system' | 'custom' | 'identity' | 'null';\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * ToolSharePointRequest\n */\nexport type ToolSharePointRequestWritable = SharePointRequestWritable & {\n    tool_body_type: 'sharepoint';\n};\n\n/**\n * ActionSMSCallResponse\n */\nexport type ActionSmsCallResponseWritable = SmsCallResponseWritable & {\n    tool_call_type: 'sms_request';\n};\n\n/**\n * ToolAWSLambdaResponse\n */\nexport type ToolAwsLambdaResponseWritable = AwsLambdaResponseWritable & {\n    tool_body_type: 'aws_lambda';\n};\n\n/**\n * InvitationResponse\n *\n * Pending tenant invitation — resolved into a Membership on accept.\n */\nexport type InvitationResponseWritable = {\n    /**\n     * Recipient email address. Must be unique per tenant.\n     */\n    email: string;\n    /**\n     * Tenant-membership role to grant on acceptance. NOT the platform-wide `User.role` enum — `tenant_admin` here is a tenant-scoped admin, not a platform admin.\n     */\n    role: 'member' | 'researcher' | 'admin';\n    tenant?: TenantResponseWritable;\n};\n\n/**\n * ToolRequest\n *\n * Tool — a configurable capability reference for external services. Request\n */\nexport type ToolRequestWritable = {\n    body?: ({\n        tool_body_type: 'email';\n    } & ToolEmailRequestWritable) | ({\n        tool_body_type: 'sns';\n    } & ToolSnsRequestWritable) | ({\n        tool_body_type: 'twilio';\n    } & ToolTwilioRequestWritable) | ({\n        tool_body_type: 'end_user_messaging';\n    } & ToolEndUserMessagingRequestWritable) | ({\n        tool_body_type: 'rest_api';\n    } & ToolRestapiRequestWritable) | ({\n        tool_body_type: 's3';\n    } & ToolS3RequestWritable) | ({\n        tool_body_type: 'aws_lambda';\n    } & ToolAwsLambdaRequestWritable) | ({\n        tool_body_type: 'sql_database';\n    } & ToolSqlDatabaseRequestWritable) | ({\n        tool_body_type: 'sqs';\n    } & ToolSqsRequestWritable) | ({\n        tool_body_type: 'sftp';\n    } & ToolSftpRequestWritable) | ({\n        tool_body_type: 'sharepoint';\n    } & ToolSharePointRequestWritable) | ({\n        tool_body_type: 'cloud_watch_log_group';\n    } & ToolCloudWatchLogGroupRequestWritable) | ({\n        tool_body_type: 'manual_upload';\n    } & ToolManualUploadRequest);\n    /**\n     * Data Source ID\n     */\n    data_source_id?: string | null;\n    /**\n     * Datalake ID\n     */\n    datalake_id?: string;\n    /**\n     * Tool description\n     */\n    description?: string | null;\n    intent?: ToolIntent;\n    /**\n     * Tool name\n     */\n    name?: string;\n    response_extractor?: ComplexTemplateConfigRequest;\n    /**\n     * Tool status\n     */\n    status?: 'draft' | 'active' | 'inactive' | 'error' | 'marked_for_deletion';\n};\n\n/**\n * AWSLambdaRequest\n *\n * AWS Lambda tool configuration for an external, user-provided Lambda ARN. Request\n */\nexport type AwsLambdaRequestWritable = {\n    /**\n     * AWS access key ID (required when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * Authentication method (required when type is external)\n     */\n    auth_method?: 'access_key' | 'iam_role' | 'cloudformation';\n    base_payload?: ComplexTemplateConfigRequest;\n    /**\n     * User-provided environment variable key-value entries passed to the Lambda function\n     */\n    env_vars?: Array<unknown>;\n    /**\n     * Lambda function ARN\n     */\n    function_arn?: string | null;\n    /**\n     * AWS secret access key (required when auth_method is access_key)\n     */\n    secret_access_key?: string | null;\n    /**\n     * User-provided secret key-value entries synced to AWS Secrets Manager\n     */\n    secrets?: Array<unknown>;\n    /**\n     * Lambda deployment type. `external` = user-provided Lambda ARN. This is the only supported type.\n     */\n    type: 'external';\n};\n\n/**\n * ToolSQSRequest\n */\nexport type ToolSqsRequestWritable = SqsRequestWritable & {\n    tool_body_type: 'sqs';\n};\n\n/**\n * SMSCallResponse\n *\n * SMS tool-call config — Liquid-templated recipient and body, transactional/promotional category, and the prefix its links go out on.\n */\nexport type SmsCallResponseWritable = {\n    body: SimpleTemplateConfigResponse;\n    /**\n     * Address of the host that serves this action's links. Every URL in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    /**\n     * SMS category — transactional vs promotional\n     */\n    sms_type?: 'transactional' | 'promotional';\n    to: SimpleTemplateConfigResponse;\n};\n\n/**\n * ActionRequest\n *\n * Workflow action — executes when the decision table routes to this `decision_key`. Polymorphic `tool_call` payload is variant-specific via `tool_call_type` discriminator. Request\n */\nexport type ActionRequestWritable = {\n    action_type: ActionType;\n    /**\n     * Hour (0–23) when the action's execution window closes\n     */\n    action_window_end?: number | null;\n    /**\n     * Hour (0–23) when the action's execution window opens (failsafe, typically SMS)\n     */\n    action_window_start?: number | null;\n    /**\n     * Unique decision_key within the workflow — maps to a decision-table outcome\n     */\n    decision_key: string;\n    /**\n     * Action ID — echo it back on update to modify the existing action rather than replace it\n     */\n    id?: string;\n    /**\n     * Liquid template producing the idempotency key; receives checksum, legal_entity_id, legal_entity_id, workflow_id, action_id, decision_key\n     */\n    idempotency_template: string;\n    /**\n     * Liquid template rendered to JSON once per send, on every action type. Stored on the message the send writes, and returned by the authenticated-link exchange as metadata (optional). A template that does not render fails the send.\n     */\n    metadata_template?: string | null;\n    /**\n     * Display order within the workflow\n     */\n    position?: number;\n    /**\n     * Liquid template evaluated at execution time; when falsy, the action is skipped\n     */\n    runtime_filter?: string | null;\n    tool_call: ({\n        tool_call_type: 'sms_request';\n    } & ActionSmsCallRequestWritable) | ({\n        tool_call_type: 'mms_request';\n    } & ActionMmsCallRequestWritable) | ({\n        tool_call_type: 'email_request';\n    } & ActionEmailCallRequestWritable) | ({\n        tool_call_type: 'sql_query';\n    } & ActionSqlQueryCallRequestWritable) | ({\n        tool_call_type: 'restapi_request';\n    } & ActionRestCallRequestWritable) | ({\n        tool_call_type: 'sftp_request';\n    } & ActionSftpCallRequestWritable) | ({\n        tool_call_type: 'microsoft_share_point_excel_request';\n    } & ActionSharePointExcelCallRequestWritable) | ({\n        tool_call_type: 'aws_lambda_request';\n    } & ActionAwsLambdaCallRequestWritable) | ({\n        tool_call_type: 'manual_upload';\n    } & ActionManualUploadCallRequest) | ({\n        tool_call_type: 'run_data_activation_client';\n    } & ActionRunDataActivationClientCallRequestWritable);\n    /**\n     * Tool that executes this action. Required for every action type except data_activation, which refuses one: its client carries its own tool.\n     */\n    tool_id?: string | null;\n    /**\n     * Liquid template that determines when this action executes\n     */\n    trigger_template: string;\n};\n\n/**\n * DatalakeCloudStorageR2Request\n */\nexport type DatalakeCloudStorageR2RequestWritable = CloudStorageR2RequestWritable & {\n    cloud_storage_type: 'r2';\n};\n\n/**\n * AWSLambdaCallResponse\n *\n * AWS Lambda invocation descriptor — Liquid-templated payload + timeout.\n */\nexport type AwsLambdaCallResponseWritable = {\n    payload: SimpleTemplateConfigResponse;\n    /**\n     * Lambda invocation timeout in milliseconds (max 900000 = 15 minutes)\n     */\n    timeout_ms?: number;\n};\n\n/**\n * DataActivationClientRESTCallRequest\n */\nexport type DataActivationClientRestCallRequestWritable = RestCallRequestWritable & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * RESTCallResponse\n *\n * REST API call descriptor — HTTP method, path, body, params, pagination context template, and events extraction template. Reused across ActionStatusUpdater polling, data activation clients, tool protocols, OAuth token fetching, and chat completion; events_template is the status-poll extraction concern and is required only there.\n */\nexport type RestCallResponseWritable = {\n    /**\n     * HTTP method\n     */\n    method: 'head' | 'get' | 'put' | 'post' | 'delete' | 'patch';\n    pagination_context_template: SimpleTemplateConfigResponse;\n    path: SimpleTemplateConfigResponse;\n};\n\n/**\n * WorkflowAiAgentRequest\n *\n * Join entry linking an AI agent to a workflow at a specific execution position in the enrichment pipeline. Request\n */\nexport type WorkflowAiAgentRequestWritable = {\n    /**\n     * AI agent ID\n     */\n    ai_agent_id: string;\n    context_mapping_config: SimpleTemplateConfigRequest;\n    /**\n     * Execution order in the enrichment pipeline\n     */\n    position: number;\n};\n\n/**\n * AiAgentRequest\n *\n * AI Agent configuration — reusable chat-completion resource Request\n */\nexport type AiAgentRequestWritable = {\n    /**\n     * Which lake the agent reads. `tokenized` means the agent's context is read from the tokenized copy, so it never sees a real identifier. It is enforced, not advisory: an agent set to `tokenized` in an environment with no tokenized lake fails its enrichment step rather than falling back to raw.\n     */\n    data_access: 'raw' | 'tokenized';\n    /**\n     * Agent description\n     */\n    description?: string | null;\n    /**\n     * Whether the agent is enabled\n     */\n    enabled: boolean;\n    /**\n     * AI Agent ID\n     */\n    id?: string;\n    /**\n     * JSON Schema describing the agent's input contract — validated by the runner against caller context on every invocation.\n     */\n    input_schema: {\n        [key: string]: unknown;\n    };\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * JSON Schema for LLM response format\n     */\n    llm_response_schema: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Maximum tokens for LLM response\n     */\n    max_tokens: number;\n    /**\n     * LLM model identifier\n     */\n    model: string;\n    /**\n     * Agent name\n     */\n    name: string;\n    prompt_config: SimpleTemplateConfigRequest;\n    /**\n     * URL-friendly slug\n     */\n    slug?: string;\n    /**\n     * Sampling temperature (0.0–2.0)\n     */\n    temperature: number;\n    /**\n     * Tool ID\n     */\n    tool_id: string;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * SharePointResponse\n *\n * Microsoft SharePoint integration via the Microsoft Graph API. Supports sites, document libraries, and lists with client-credential or managed-identity auth.\n */\nexport type SharePointResponseWritable = {\n    /**\n     * Microsoft Graph authentication method\n     */\n    auth_method: 'client_credentials' | 'managed_identity';\n    /**\n     * Microsoft tenant ID (GUID)\n     */\n    azure_tenant_id: string;\n    /**\n     * Azure AD application/client ID (used when auth_method is client_credentials)\n     */\n    client_id?: string | null;\n    /**\n     * Optional specific drive ID to access\n     */\n    drive_id?: string | null;\n    /**\n     * Optional path within the drive (e.g., Documents/Reports)\n     */\n    drive_path?: string | null;\n    /**\n     * Type of SharePoint resource to interact with\n     */\n    resource_type: 'site' | 'library' | 'list';\n    /**\n     * SharePoint site URL (e.g., https://contoso.sharepoint.com/sites/finance)\n     */\n    site_url?: string | null;\n};\n\n/**\n * RESTAPIResponse\n *\n * REST API tool configuration with OpenAPI-compliant authentication (API key, basic, bearer, OAuth2, OIDC) plus base Liquid templates.\n */\nexport type RestapiResponseWritable = {\n    /**\n     * Where to send the API key (header or query parameter)\n     */\n    api_key_location?: 'header' | 'query';\n    /**\n     * Header or query-parameter name for the API key\n     */\n    api_key_name?: string | null;\n    /**\n     * Authentication method\n     */\n    auth_method: 'none' | 'api_key' | 'basic' | 'bearer' | 'oauth2' | 'oidc';\n    /**\n     * Base URL (https) of the REST API endpoint\n     */\n    base_url: string;\n    /**\n     * OAuth2 client ID\n     */\n    oauth2_client_id?: string | null;\n    /**\n     * OAuth2 grant type\n     */\n    oauth2_grant_type?: 'client_credentials' | 'authorization_code';\n    /**\n     * OAuth2 scope(s)\n     */\n    oauth2_scope?: string | null;\n    /**\n     * OAuth2 token cache TTL in seconds\n     */\n    oauth2_token_ttl?: number | null;\n    /**\n     * OAuth2 token endpoint URL\n     */\n    oauth2_token_url?: string | null;\n    /**\n     * OIDC client ID\n     */\n    oidc_client_id?: string | null;\n    /**\n     * OIDC issuer URL for discovery\n     */\n    oidc_issuer_url?: string | null;\n    /**\n     * OIDC token cache TTL in seconds\n     */\n    oidc_token_ttl?: number | null;\n    /**\n     * Request content type\n     */\n    request_type: 'json' | 'xml' | 'form_urlencoded' | 'multipart_form';\n    /**\n     * Response content type\n     */\n    response_type: 'json' | 'xml' | 'text' | 'binary';\n    /**\n     * Request timeout in milliseconds (max 300000)\n     */\n    timeout_ms: number;\n    /**\n     * Username (used when auth_method is basic)\n     */\n    username?: string | null;\n};\n\n/**\n * DataActivationClientRESTCallResponse\n */\nexport type DataActivationClientRestCallResponseWritable = RestCallResponseWritable & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * DataActivationClientS3CallResponse\n */\nexport type DataActivationClientS3CallResponseWritable = S3CallResponse & {\n    tool_call_type: 's3_request';\n};\n\n/**\n * EmailRequest\n *\n * Email tool configuration — SES, Mailgun, SendGrid, SMTP, or mock (dev mailbox) provider plus base Liquid templates. Request\n */\nexport type EmailRequestWritable = {\n    /**\n     * AWS access key ID (SES)\n     */\n    access_key_id?: string;\n    /**\n     * API key (Mailgun/SendGrid)\n     */\n    api_key?: string;\n    /**\n     * Sending domain (Mailgun)\n     */\n    domain?: string;\n    /**\n     * Custom provider endpoint; leave blank for the real provider. For SES, the whole request URL (e.g., http://localhost:4566 for MiniStack); blank means https://email.<region>.amazonaws.com. For Mailgun, the API base URL (e.g., https://api.eu.mailgun.net/v3 for EU domains, or a WireMock endpoint for integration tests)\n     */\n    endpoint_url?: string | null;\n    /**\n     * Default sender email address\n     */\n    from_email: string;\n    /**\n     * Default sender display name\n     */\n    from_name?: string | null;\n    /**\n     * ID of the primary Email tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * Email provider (mock = in-process dev mailbox, no credentials)\n     */\n    provider: 'ses' | 'mailgun' | 'sendgrid' | 'smtp' | 'mock';\n    /**\n     * AWS region (SES)\n     */\n    region?: string;\n    /**\n     * Default reply-to address\n     */\n    reply_to?: string | null;\n    /**\n     * AWS secret access key (SES)\n     */\n    secret_access_key?: string;\n    /**\n     * SMTP server hostname\n     */\n    smtp_host?: string;\n    /**\n     * SMTP password\n     */\n    smtp_password?: string;\n    /**\n     * SMTP server port\n     */\n    smtp_port?: number;\n    /**\n     * SMTP username\n     */\n    smtp_username?: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * EmailCallResponse\n *\n * Email tool-call config — Liquid-templated recipient, subject, and body, and the prefix its links go out on.\n */\nexport type EmailCallResponseWritable = {\n    body: SimpleTemplateConfigResponse;\n    /**\n     * Address of the host that serves this action's links. Every href in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    subject: SimpleTemplateConfigResponse;\n    to: SimpleTemplateConfigResponse;\n};\n\n/**\n * ActionSQLQueryCallResponse\n */\nexport type ActionSqlQueryCallResponseWritable = SqlQueryCallResponseWritable & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * ActionStatusUpdaterRefreshRequest\n *\n * Optional polymorphic updater_body override for this refresh. When omitted or empty, the updater's persisted updater_body is used.\n */\nexport type ActionStatusUpdaterRefreshRequestWritable = {\n    /**\n     * One-shot polymorphic updater_body override — e.g. a widened start_time/end_time window for a historical backfill. Same `updater_body_type` discriminator and variants as ActionStatusUpdaterRequest.updater_body. The persisted updater is not modified.\n     */\n    updater_body?: ({\n        updater_body_type: 'ActionStatusUpdaterRESTCallRequestWritable';\n    } & ActionStatusUpdaterRestCallRequestWritable) | ({\n        updater_body_type: 'ActionStatusUpdaterCloudWatchQueryRequestWritable';\n    } & ActionStatusUpdaterCloudWatchQueryRequestWritable) | null;\n};\n\n/**\n * S3CloudStorageR2Request\n */\nexport type S3CloudStorageR2RequestWritable = CloudStorageR2RequestWritable & {\n    storage_config_type: 'r2';\n};\n\n/**\n * ToolTwilioRequest\n */\nexport type ToolTwilioRequestWritable = TwilioRequestWritable & {\n    tool_body_type: 'twilio';\n};\n\n/**\n * WorkflowAiAgentResponse\n *\n * Join entry linking an AI agent to a workflow at a specific execution position in the enrichment pipeline.\n */\nexport type WorkflowAiAgentResponseWritable = {\n    ai_agent?: MinimalAiAgentResponseWritable;\n    /**\n     * AI agent ID\n     */\n    ai_agent_id: string;\n    context_mapping_config: SimpleTemplateConfigResponse;\n    /**\n     * Execution order in the enrichment pipeline\n     */\n    position: number;\n};\n\n/**\n * WorkflowLogListResponse\n *\n * Paginated list of workflow execution logs\n */\nexport type WorkflowLogListResponseWritable = {\n    /**\n     * List of workflow execution logs\n     */\n    data: Array<WorkflowLogResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ToolSQLDatabaseRequest\n */\nexport type ToolSqlDatabaseRequestWritable = SqlDatabaseRequestWritable & {\n    tool_body_type: 'sql_database';\n};\n\n/**\n * GenericTableListResponse\n *\n * Paginated list of generic tables\n */\nexport type GenericTableListResponseWritable = {\n    /**\n     * List of generic tables\n     */\n    data: Array<GenericTableResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionRESTCallRequest\n */\nexport type ActionRestCallRequestWritable = RestCallRequestWritable & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * GenericTableRequest\n *\n * Generic Table — custom or system dataset table with column definitions. Request\n */\nexport type GenericTableRequestWritable = {\n    /**\n     * Table column definitions\n     */\n    columns?: Array<GenericTableColumnRequest>;\n    /**\n     * Table description\n     */\n    description?: string;\n    /**\n     * User-friendly table title\n     */\n    title?: string;\n};\n\n/**\n * MMSCallResponse\n *\n * MMS tool-call config — Liquid-templated recipient, optional caption, plain public media URL, and the prefix its links go out on.\n */\nexport type MmsCallResponseWritable = {\n    body?: SimpleTemplateConfigResponse;\n    /**\n     * Address of the host that serves this action's links. Every URL in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    /**\n     * Public http(s) URL of the media to attach — re-staged into the tool's S3 media bucket (End User Messaging) or fetched by Twilio directly\n     */\n    media_url: string;\n    to: SimpleTemplateConfigResponse;\n};\n\n/**\n * ManualToolInvocationEmailCallResponse\n */\nexport type ManualToolInvocationEmailCallResponseWritable = EmailCallResponseWritable & {\n    tool_call_type: 'email_request';\n};\n\n/**\n * ToolSharePointResponse\n */\nexport type ToolSharePointResponseWritable = SharePointResponseWritable & {\n    tool_body_type: 'sharepoint';\n};\n\n/**\n * ToolSFTPRequest\n */\nexport type ToolSftpRequestWritable = SftpRequestWritable & {\n    tool_body_type: 'sftp';\n};\n\n/**\n * ManualToolInvocationSMSCallResponse\n */\nexport type ManualToolInvocationSmsCallResponseWritable = SmsCallResponseWritable & {\n    tool_call_type: 'sms_request';\n};\n\n/**\n * ActionStatusUpdaterCloudWatchQueryResponse\n */\nexport type ActionStatusUpdaterCloudWatchQueryResponseWritable = CloudWatchQueryResponse & {\n    updater_body_type: 'cloud_watch_request';\n};\n\n/**\n * ActionMMSCallResponse\n */\nexport type ActionMmsCallResponseWritable = MmsCallResponseWritable & {\n    tool_call_type: 'mms_request';\n};\n\n/**\n * ToolSQLDatabaseResponse\n */\nexport type ToolSqlDatabaseResponseWritable = SqlDatabaseResponseWritable & {\n    tool_body_type: 'sql_database';\n};\n\n/**\n * ActionSQLQueryCallRequest\n */\nexport type ActionSqlQueryCallRequestWritable = SqlQueryCallRequestWritable & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * ActionSFTPCallRequest\n */\nexport type ActionSftpCallRequestWritable = SftpCallRequest & {\n    tool_call_type: 'sftp_request';\n};\n\n/**\n * BatchLogResponse\n *\n * Batch-level workflow run log — aggregation of per-event execution logs\n */\nexport type BatchLogResponseWritable = {\n    /**\n     * Batch identifier (manual:{user_search_id} or DAC batch_id)\n     */\n    batch_id: string;\n    completed_at?: string | null;\n    /**\n     * Successfully completed WELs\n     */\n    completed_wels?: number;\n    /**\n     * Datalake ID\n     */\n    datalake_id?: string;\n    /**\n     * Number of events expected to produce WELs\n     */\n    expected_events?: number;\n    /**\n     * Failed WELs\n     */\n    failed_wels?: number;\n    /**\n     * Workflow run log ID\n     */\n    id?: string;\n    inserted_at?: string;\n    last_refreshed_at?: string | null;\n    started_at?: string | null;\n    /**\n     * Batch status\n     */\n    status: 'pending' | 'completed' | 'partial' | 'failed';\n    /**\n     * Tenant ID\n     */\n    tenant_id?: string;\n    /**\n     * Total WELs found at last refresh\n     */\n    total_wels?: number;\n    /**\n     * Parent workflow ID\n     */\n    workflow_id?: string;\n};\n\n/**\n * DataActivationClientBatchResponse\n *\n * One record per run. A run fans out into one `DataActivationClientLog` per dataset table it writes into; this is the run itself. To wait on a run, read `closed_at` here rather than reconstructing it from those logs — it is set exactly once, however the run ended.\n */\nexport type DataActivationClientBatchResponseWritable = {\n    /**\n     * Run identifier, stamped on every Oban job and every per-table log row of this run\n     */\n    batch_id: string;\n    /**\n     * Source rows enqueued for this run. The run's own count; each per-table log keeps its own.\n     */\n    rows_total?: number;\n    /**\n     * How the run ended. **It means nothing until `closed_at` is set** — a run still in flight always reads `processing`. `failed` when the run died before writing anything; `partial` when it ran and at least one row was refused on the way in; `skipped` when it ran and there was nothing to do, because the file was empty, every row was filtered out, or the client has no contracts.\n     */\n    status?: 'processing' | 'succeeded' | 'partial' | 'skipped' | 'failed';\n};\n\n/**\n * AWSLambdaCallRequest\n *\n * AWS Lambda invocation descriptor — Liquid-templated payload + timeout. Request\n */\nexport type AwsLambdaCallRequestWritable = {\n    payload: SimpleTemplateConfigRequest;\n    /**\n     * Lambda invocation timeout in milliseconds (max 900000 = 15 minutes)\n     */\n    timeout_ms?: number;\n};\n\n/**\n * AdvancedMigrationResponse\n *\n * An advanced migration — SQL a person wrote by hand for one datalake, run by the same migrator that applies the platform's own generated changes. Once it has run it can no longer be edited or deleted.\n */\nexport type AdvancedMigrationResponseWritable = {\n    /**\n     * The SQL that reverses `up_statement`, used when rolling the datalake back.\n     */\n    down_statement: string;\n    /**\n     * Identifier for the migration, unique within the datalake. Must start with a capital letter and contain only letters, numbers and underscores — for example `RenameMemoToNote`.\n     */\n    name: string;\n    /**\n     * The SQL to run. Anything the platform will not generate for itself belongs here — renaming a column, changing its type, dropping one, adding an index.\n     */\n    up_statement: string;\n};\n\n/**\n * ToolCloudWatchLogGroupRequest\n */\nexport type ToolCloudWatchLogGroupRequestWritable = CloudWatchLogGroupRequestWritable & {\n    tool_body_type: 'cloud_watch_log_group';\n};\n\n/**\n * ManualToolInvocationSQLQueryCallRequest\n */\nexport type ManualToolInvocationSqlQueryCallRequestWritable = SqlQueryCallRequestWritable & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * ActionStatusUpdaterRESTCallResponse\n */\nexport type ActionStatusUpdaterRestCallResponseWritable = RestCallResponseWritable & {\n    updater_body_type: 'restapi_request';\n};\n\n/**\n * DataActivationClientAWSLambdaCallRequest\n */\nexport type DataActivationClientAwsLambdaCallRequestWritable = AwsLambdaCallRequestWritable & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * WorkflowRunListResponse\n *\n * Paginated list of workflow runs\n */\nexport type WorkflowRunListResponseWritable = {\n    /**\n     * List of workflow runs\n     */\n    data: Array<WorkflowRunResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * MinimalAiAgentResponse\n *\n * AI Agent — identifier and runtime fields only (no tenant/datalake nesting)\n */\nexport type MinimalAiAgentResponseWritable = {\n    /**\n     * Which lake the agent reads. `tokenized` means the agent's context is read from the tokenized copy, so it never sees a real identifier. It is enforced, not advisory: an agent set to `tokenized` in an environment with no tokenized lake fails its enrichment step rather than falling back to raw.\n     */\n    data_access: 'raw' | 'tokenized';\n    /**\n     * Agent description\n     */\n    description?: string | null;\n    /**\n     * Whether the agent is enabled\n     */\n    enabled: boolean;\n    /**\n     * AI Agent ID\n     */\n    id?: string;\n    /**\n     * JSON Schema describing the agent's input contract — validated by the runner against caller context on every invocation.\n     */\n    input_schema: {\n        [key: string]: unknown;\n    };\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * JSON Schema for LLM response format\n     */\n    llm_response_schema: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Maximum tokens for LLM response\n     */\n    max_tokens: number;\n    /**\n     * LLM model identifier\n     */\n    model: string;\n    /**\n     * Agent name\n     */\n    name: string;\n    prompt_config: SimpleTemplateConfigResponse;\n    /**\n     * URL-friendly slug\n     */\n    slug?: string;\n    /**\n     * Sampling temperature (0.0–2.0)\n     */\n    temperature: number;\n    tool?: ToolResponseWritable;\n    /**\n     * Tool ID\n     */\n    tool_id: string;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * DataActivationClientS3CallRequest\n */\nexport type DataActivationClientS3CallRequestWritable = S3CallRequest & {\n    tool_call_type: 's3_request';\n};\n\n/**\n * DatasetSearchResponse\n *\n * Double-paginated dataset search results scoped to a `UserSearch`. The\n * `meta` object carries two `Flop.Meta`-shaped sub-objects:\n *\n * - `sql` — outer page over `search_results` (up to 1000 dataset IDs per\n * chunk; cap dictated by Postgres' `WHERE id IN (^ids)` plan). `null`\n * when the request was not bound to a `user_search_id`.\n * - `flop` — inner Flop page over the resource (default 20 rows).\n *\n */\nexport type DatasetSearchResponseWritable = {\n    /**\n     * Array of dataset records\n     */\n    data: Array<{\n        [key: string]: unknown;\n    }>;\n    /**\n     * Two-tier pagination metadata\n     */\n    meta: {\n        flop: PaginationMeta;\n        /**\n         * Outer page over search_results — null when no UserSearch bound\n         */\n        sql?: PaginationMeta | unknown;\n    };\n    user_search: UserSearchResponseWritable;\n};\n\n/**\n * ActionAWSLambdaCallResponse\n */\nexport type ActionAwsLambdaCallResponseWritable = AwsLambdaCallResponseWritable & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * EndUserMessagingResponse\n *\n * AWS End User Messaging tool configuration for sending MMS via the SendMediaMessage API.\n */\nexport type EndUserMessagingResponseWritable = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer (auto-generated when auth_method is assume_role)\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    /**\n     * AWS End User Messaging configuration set that routes delivery events to CloudWatch\n     */\n    configuration_set_name: string;\n    /**\n     * Custom sms-voice endpoint URL (e.g. http://localhost:8080 for the WireMock stub); leave blank for real AWS\n     */\n    endpoint_url?: string | null;\n    /**\n     * S3 bucket (same region as the sending number) where author media is re-staged for SendMediaMessage\n     */\n    media_bucket: string;\n    /**\n     * Origination phone number or identity in E.164 format (e.g., +15551234567); must be MMS-capable\n     */\n    phone_number: string;\n    /**\n     * ID of the primary End User Messaging tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * AWS region (e.g., us-west-2)\n     */\n    region: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * ToolS3Response\n */\nexport type ToolS3ResponseWritable = S3ResponseWritable & {\n    tool_body_type: 's3';\n};\n\n/**\n * S3CloudStorageAwsRequest\n */\nexport type S3CloudStorageAwsRequestWritable = CloudStorageAwsRequestWritable & {\n    storage_config_type: 'aws';\n};\n\n/**\n * DataActivationClientSFTPCallResponse\n */\nexport type DataActivationClientSftpCallResponseWritable = SftpCallResponse & {\n    tool_call_type: 'sftp_request';\n};\n\n/**\n * CloudStorageR2Request\n *\n * Cloudflare R2 cloud storage configuration — S3-compatible with auto region and account-scoped endpoints. Request\n */\nexport type CloudStorageR2RequestWritable = {\n    /**\n     * R2 access key ID\n     */\n    access_key_id: string;\n    /**\n     * Base path prefix for objects within the bucket\n     */\n    base_path?: string;\n    /**\n     * R2 bucket name\n     */\n    bucket: string;\n    /**\n     * Account-scoped R2 endpoint URL, e.g. https://<account-id>.r2.cloudflarestorage.com\n     */\n    endpoint: string;\n    /**\n     * R2 region (defaults to \"auto\")\n     */\n    region?: string;\n    /**\n     * R2 secret access key\n     */\n    secret_access_key: string;\n};\n\n/**\n * ActionRunDataActivationClientCallResponse\n */\nexport type ActionRunDataActivationClientCallResponseWritable = RunDataActivationClientCallResponse & {\n    tool_call_type: 'run_data_activation_client';\n};\n\n/**\n * SharePointRequest\n *\n * Microsoft SharePoint integration via the Microsoft Graph API. Supports sites, document libraries, and lists with client-credential or managed-identity auth. Request\n */\nexport type SharePointRequestWritable = {\n    /**\n     * Microsoft Graph authentication method\n     */\n    auth_method: 'client_credentials' | 'managed_identity';\n    /**\n     * Microsoft tenant ID (GUID)\n     */\n    azure_tenant_id: string;\n    base_path?: ComplexTemplateConfigRequest;\n    /**\n     * Azure AD application/client ID (used when auth_method is client_credentials)\n     */\n    client_id?: string | null;\n    /**\n     * Azure AD client secret (used when auth_method is client_credentials)\n     */\n    client_secret?: string | null;\n    /**\n     * Optional specific drive ID to access\n     */\n    drive_id?: string | null;\n    /**\n     * Optional path within the drive (e.g., Documents/Reports)\n     */\n    drive_path?: string | null;\n    /**\n     * Type of SharePoint resource to interact with\n     */\n    resource_type: 'site' | 'library' | 'list';\n    /**\n     * SharePoint site URL (e.g., https://contoso.sharepoint.com/sites/finance)\n     */\n    site_url?: string | null;\n};\n\n/**\n * ManualToolInvocationSMSCallRequest\n */\nexport type ManualToolInvocationSmsCallRequestWritable = SmsCallRequestWritable & {\n    tool_call_type: 'sms_request';\n};\n\n/**\n * ManualToolInvocationRequest\n *\n * A manual test invocation of a tool. The request body carries only `tool_call` (polymorphic on `__type__`); all other fields are server-populated and returned in the response. Request\n */\nexport type ManualToolInvocationRequestWritable = {\n    tool_call?: ({\n        tool_call_type: 'sms_request';\n    } & ManualToolInvocationSmsCallRequestWritable) | ({\n        tool_call_type: 'mms_request';\n    } & ManualToolInvocationMmsCallRequestWritable) | ({\n        tool_call_type: 'email_request';\n    } & ManualToolInvocationEmailCallRequestWritable) | ({\n        tool_call_type: 'restapi_request';\n    } & ManualToolInvocationRestCallRequestWritable) | ({\n        tool_call_type: 'aws_lambda_request';\n    } & ManualToolInvocationAwsLambdaCallRequestWritable) | ({\n        tool_call_type: 'sql_query';\n    } & ManualToolInvocationSqlQueryCallRequestWritable);\n};\n\n/**\n * SQLQueryCallRequest\n *\n * SQL query descriptor — Liquid-templated query body. Request\n */\nexport type SqlQueryCallRequestWritable = {\n    query: SimpleTemplateConfigRequest;\n};\n\n/**\n * DatalakeResponse\n *\n * Datalake configuration. Secrets (DB passwords, credentials) are write-only — accepted on create but never returned in responses.\n */\nexport type DatalakeResponseWritable = {\n    /**\n     * Reader auth method\n     */\n    db_reader_auth_method: 'password' | 'iam_role';\n    /**\n     * Enable SSL for reader\n     */\n    db_reader_enable_ssl: boolean;\n    /**\n     * Reader DB host. Null while a derived lake's database is still being provisioned\n     */\n    db_reader_host: string | null;\n    /**\n     * Reader DB name\n     */\n    db_reader_name: string;\n    /**\n     * Reader DB port. Null while a derived lake's database is still being provisioned\n     */\n    db_reader_port: number | null;\n    /**\n     * Reader DB schema name\n     */\n    db_reader_schema: string;\n    /**\n     * Writer auth method\n     */\n    db_writer_auth_method: 'password' | 'iam_role';\n    /**\n     * Enable SSL for writer\n     */\n    db_writer_enable_ssl: boolean;\n    /**\n     * Writer DB host. Null while a derived lake's database is still being provisioned\n     */\n    db_writer_host: string | null;\n    /**\n     * Writer DB name\n     */\n    db_writer_name: string;\n    /**\n     * Writer DB port. Null while a derived lake's database is still being provisioned\n     */\n    db_writer_port: number | null;\n    /**\n     * Writer DB schema name\n     */\n    db_writer_schema: string;\n    /**\n     * Datalake description\n     */\n    description?: string | null;\n    /**\n     * Datalake name\n     */\n    name: string;\n    /**\n     * Database connection pool size\n     */\n    pool_size: number | null;\n    /**\n     * The raw datalake this one derives from. Required on a tokenized or redacted datalake, and always null on a raw one.\n     */\n    primary_datalake_id?: string | null;\n    tenant?: TenantResponseWritable;\n    /**\n     * Datalake reporting timezone. Closed whitelist of 8 US timezones — general IANA values (including `UTC`) are rejected.\n     */\n    timezone: 'America/New_York' | 'America/Chicago' | 'America/Denver' | 'America/Los_Angeles' | 'America/Anchorage' | 'America/Adak' | 'Pacific/Honolulu' | 'America/Phoenix';\n    /**\n     * What this lake holds. `raw` is the lake the platform writes; `tokenized` and `redacted` are derived, read-only, and filled by replication.\n     */\n    type?: 'raw' | 'tokenized' | 'redacted';\n};\n\n/**\n * SFTPResponse\n *\n * SFTP (SSH File Transfer Protocol) server connection configuration with password or SSH key auth.\n */\nexport type SftpResponseWritable = {\n    /**\n     * SFTP authentication method\n     */\n    auth_method: 'password' | 'ssh_key';\n    /**\n     * Base directory path on the SFTP server\n     */\n    base_path: string;\n    /**\n     * SFTP server hostname or IP address\n     */\n    host: string;\n    /**\n     * SFTP port\n     */\n    port: number;\n    /**\n     * SFTP username\n     */\n    user_name: string;\n};\n\n/**\n * ToolSNSResponse\n */\nexport type ToolSnsResponseWritable = SnsResponseWritable & {\n    tool_body_type: 'sns';\n};\n\n/**\n * SQLQueryCallResponse\n *\n * SQL query descriptor — Liquid-templated query body.\n */\nexport type SqlQueryCallResponseWritable = {\n    query: SimpleTemplateConfigResponse;\n};\n\n/**\n * ActionSFTPCallResponse\n */\nexport type ActionSftpCallResponseWritable = SftpCallResponse & {\n    tool_call_type: 'sftp_request';\n};\n\n/**\n * DatalakeCloudStorageR2Response\n */\nexport type DatalakeCloudStorageR2ResponseWritable = CloudStorageR2Response & {\n    cloud_storage_type: 'r2';\n};\n\n/**\n * CloudWatchLogGroupRequest\n *\n * AWS CloudWatch Logs authentication credential store. Referenced by ActionStatusUpdater for log-group polling. Request\n */\nexport type CloudWatchLogGroupRequestWritable = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    base_filter_pattern?: ComplexTemplateConfigRequest;\n    /**\n     * Custom CloudWatch Logs endpoint URL (e.g., http://localhost:4566 for MiniStack)\n     */\n    endpoint_url?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n    /**\n     * AWS secret access key (used when auth_method is access_key)\n     */\n    secret_access_key?: string | null;\n};\n\n/**\n * SNSRequest\n *\n * AWS SNS tool configuration for sending SMS messages via the SNS Publish API. Request\n */\nexport type SnsRequestWritable = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer (auto-generated when auth_method is assume_role)\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    base_message?: ComplexTemplateConfigRequest;\n    /**\n     * Custom SNS endpoint URL (e.g., http://localhost:4566 for MiniStack); leave blank for real AWS\n     */\n    endpoint_url?: string | null;\n    /**\n     * Origination phone number in E.164 format (e.g., +15551234567)\n     */\n    phone_number: string;\n    /**\n     * ID of the primary SNS tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n    /**\n     * AWS secret access key (used when auth_method is access_key)\n     */\n    secret_access_key?: string | null;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * ManualToolInvocationAWSLambdaCallResponse\n */\nexport type ManualToolInvocationAwsLambdaCallResponseWritable = AwsLambdaCallResponseWritable & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * TenantListResponse\n *\n * Paginated list of tenants\n */\nexport type TenantListResponseWritable = {\n    /**\n     * List of tenants\n     */\n    data: Array<TenantResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionEmailCallResponse\n */\nexport type ActionEmailCallResponseWritable = EmailCallResponseWritable & {\n    tool_call_type: 'email_request';\n};\n\n/**\n * S3Response\n *\n * S3-compatible storage tool configuration with a nested polymorphic provider config (AWS or R2).\n */\nexport type S3ResponseWritable = {\n    [key: string]: unknown;\n};\n\n/**\n * ToolEmailRequest\n */\nexport type ToolEmailRequestWritable = EmailRequestWritable & {\n    tool_body_type: 'email';\n};\n\n/**\n * ManualToolInvocationRESTCallResponse\n */\nexport type ManualToolInvocationRestCallResponseWritable = RestCallResponseWritable & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * ManualToolInvocationMMSCallRequest\n */\nexport type ManualToolInvocationMmsCallRequestWritable = MmsCallRequestWritable & {\n    tool_call_type: 'mms_request';\n};\n\n/**\n * SessionResponse\n *\n * Authenticated session — issued at sign-in (`POST /api/v1/sessions`) or\n * derived from an `X-API-Key` header. The `session_token` field carries the\n * plaintext Bearer on creation responses and is null on verify responses.\n * `tenant`, `role`, and `user` are nullable for tenant-less / pre-tenant\n * sessions; `api_key` is populated for M2M sessions only.\n *\n */\nexport type SessionResponseWritable = {\n    api_key?: ApiKeyResponseWritable;\n    /**\n     * Capability ceiling for the session — the most sensitive lake it may read. `:raw` reaches the raw lake, which holds real PHI/PII values; `:tokenized` and `:redacted` name derived lakes, which hold none. Set at creation time from the membership role: a researcher is capped at `:tokenized` and can never reach the raw lake, while an admin or member is capped at `:raw`. Cannot be widened post-creation.\n     */\n    data_access_mode: 'raw' | 'tokenized' | 'redacted';\n    role?: RoleResponseWritable;\n    tenant?: TenantResponseWritable;\n    user?: UserResponseWritable;\n};\n\n/**\n * AdvancedMigrationListResponse\n *\n * Paginated list of advanced migrations\n */\nexport type AdvancedMigrationListResponseWritable = {\n    /**\n     * List of advanced migrations\n     */\n    data: Array<AdvancedMigrationResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionStatusUpdaterCloudWatchQueryRequest\n */\nexport type ActionStatusUpdaterCloudWatchQueryRequestWritable = CloudWatchQueryRequest & {\n    updater_body_type: 'cloud_watch_request';\n};\n\n/**\n * ActionStatusUpdaterRESTCallRequest\n */\nexport type ActionStatusUpdaterRestCallRequestWritable = RestCallRequestWritable & {\n    updater_body_type: 'restapi_request';\n};\n\n/**\n * SQSRequest\n *\n * AWS SQS (Simple Queue Service) tool configuration for sending and receiving queue messages. Request\n */\nexport type SqsRequestWritable = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role';\n    base_message?: ComplexTemplateConfigRequest;\n    /**\n     * Whether the queue is a FIFO queue (URL must end with .fifo)\n     */\n    fifo?: boolean;\n    /**\n     * Optional human-readable queue name for identification\n     */\n    queue_name?: string | null;\n    /**\n     * Full SQS queue URL\n     */\n    queue_url: string;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n    /**\n     * AWS secret access key (used when auth_method is access_key)\n     */\n    secret_access_key?: string | null;\n};\n\n/**\n * DataActivationClientAWSLambdaCallResponse\n */\nexport type DataActivationClientAwsLambdaCallResponseWritable = AwsLambdaCallResponseWritable & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * ToolResponse\n *\n * Tool — a configurable capability reference for external services.\n */\nexport type ToolResponseWritable = {\n    /**\n     * Data Source ID\n     */\n    data_source_id?: string | null;\n    /**\n     * Datalake ID\n     */\n    datalake_id?: string;\n    /**\n     * Tool description\n     */\n    description?: string | null;\n    intent?: ToolIntent;\n    /**\n     * Tool name\n     */\n    name?: string;\n    /**\n     * Tool status\n     */\n    status?: 'draft' | 'active' | 'inactive' | 'error' | 'marked_for_deletion';\n};\n\n/**\n * ToolAWSLambdaRequest\n */\nexport type ToolAwsLambdaRequestWritable = AwsLambdaRequestWritable & {\n    tool_body_type: 'aws_lambda';\n};\n\n/**\n * DataSourceListResponse\n *\n * Paginated list of data sources\n */\nexport type DataSourceListResponseWritable = {\n    /**\n     * List of data sources\n     */\n    data: Array<DataSourceResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * SNSResponse\n *\n * AWS SNS tool configuration for sending SMS messages via the SNS Publish API.\n */\nexport type SnsResponseWritable = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * IAM role ARN to assume in the customer's AWS account (used when auth_method is assume_role)\n     */\n    assume_role_arn?: string | null;\n    /**\n     * External ID for the STS AssumeRole call, unique per customer (auto-generated when auth_method is assume_role)\n     */\n    assume_role_external_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role' | 'assume_role';\n    /**\n     * Custom SNS endpoint URL (e.g., http://localhost:4566 for MiniStack); leave blank for real AWS\n     */\n    endpoint_url?: string | null;\n    /**\n     * Origination phone number in E.164 format (e.g., +15551234567)\n     */\n    phone_number: string;\n    /**\n     * ID of the primary SNS tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * InteroperabilityContractAiAgentResponse\n *\n * Join entry linking an AI agent to an interoperability contract at a specific execution position in the enrichment pipeline.\n */\nexport type InteroperabilityContractAiAgentResponseWritable = {\n    ai_agent?: MinimalAiAgentResponseWritable;\n    /**\n     * AI agent ID\n     */\n    ai_agent_id: string;\n    context_mapping_config: ComplexTemplateConfigResponse;\n    /**\n     * Execution order in the enrichment pipeline\n     */\n    position: number;\n};\n\n/**\n * ActionSharePointExcelCallRequest\n */\nexport type ActionSharePointExcelCallRequestWritable = SharePointExcelCallRequest & {\n    tool_call_type: 'microsoft_share_point_excel_request';\n};\n\n/**\n * InteroperabilityContractRequest\n *\n * Declarative execution spec binding a `(datalake, resource_type)` pair to the ingestion pipeline: filter → transform → mdm_input → resolve → upsert. Request\n */\nexport type InteroperabilityContractRequestWritable = {\n    /**\n     * Optional description\n     */\n    description?: string | null;\n    /**\n     * Liquid filter body. Renders to empty/whitespace → row passes; any non-empty trimmed render → row is skipped (rendered string is the skip reason). Nil/empty body = no filter.\n     */\n    filter_template?: string | null;\n    /**\n     * Generic table ID (required when resource_type == \"generic_table\")\n     */\n    generic_table_id?: string | null;\n    /**\n     * Contract ID\n     */\n    id?: string;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * AI agents to attach to this contract (request)\n     */\n    interoperability_contract_ai_agents?: Array<InteroperabilityContractAiAgentRequestWritable>;\n    mdm_input_config?: SimpleTemplateConfigRequest;\n    /**\n     * Human-readable contract name\n     */\n    name: string;\n    /**\n     * Dataset this contract targets (e.g. \"legal_entity\", \"beneficial_owner\", \"generic_table\")\n     */\n    resource_type: string;\n    /**\n     * URL-friendly slug (derived from name on insert; immutable)\n     */\n    slug?: string;\n    template_config: SimpleTemplateConfigRequest;\n    /**\n     * Template type (synced from template_config.type)\n     */\n    type?: 'system' | 'custom' | 'identity' | 'null';\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * RESTCallRequest\n *\n * REST API call descriptor — HTTP method, path, body, params, pagination context template, and events extraction template. Reused across ActionStatusUpdater polling, data activation clients, tool protocols, OAuth token fetching, and chat completion; events_template is the status-poll extraction concern and is required only there. Request\n */\nexport type RestCallRequestWritable = {\n    body?: SimpleTemplateConfigRequest;\n    events_template?: SimpleTemplateConfigRequest;\n    /**\n     * HTTP method\n     */\n    method: 'head' | 'get' | 'put' | 'post' | 'delete' | 'patch';\n    pagination_context_template: SimpleTemplateConfigRequest;\n    params?: SimpleTemplateConfigRequest;\n    path: SimpleTemplateConfigRequest;\n};\n\n/**\n * SQLDatabaseResponse\n *\n * SQL database connection configuration (PostgreSQL, MySQL, MSSQL, SQLite, Snowflake).\n */\nexport type SqlDatabaseResponseWritable = {\n    /**\n     * Database host (hostname or IP address)\n     */\n    db_host: string;\n    /**\n     * Database name\n     */\n    db_name: string;\n    /**\n     * SQL database engine\n     */\n    db_type: 'postgres' | 'mysql' | 'mssql' | 'sqlite' | 'snowflake';\n    /**\n     * Ecto connection pool size\n     */\n    pool_size?: number | null;\n    /**\n     * Database port (defaults based on db_type: postgres=5432, mysql=3306, mssql=1433)\n     */\n    port?: number | null;\n    /**\n     * Enable SSL connection\n     */\n    ssl?: boolean | null;\n    /**\n     * SSL mode (e.g., 'require', 'verify-full')\n     */\n    ssl_mode?: string | null;\n    /**\n     * Database username\n     */\n    user_name: string;\n};\n\n/**\n * S3CloudStorageAwsResponse\n */\nexport type S3CloudStorageAwsResponseWritable = CloudStorageAwsResponse & {\n    storage_config_type: 'aws';\n};\n\n/**\n * S3CloudStorageR2Response\n */\nexport type S3CloudStorageR2ResponseWritable = CloudStorageR2Response & {\n    storage_config_type: 'r2';\n};\n\n/**\n * ContextDatasetRequest\n *\n * Context dataset for a workflow — declares which records the context builder should load (and under what filter) before the enrichment and decision stages. Request\n */\nexport type ContextDatasetRequestWritable = {\n    /**\n     * Dataset type — either a standard industry resource (e.g. \"patient\", \"appointment\") or \"generic_table\" to reference a custom table\n     */\n    dataset_type: string;\n    /**\n     * Required when `dataset_type == \"generic_table\"`\n     */\n    generic_table_id?: string | null;\n    /**\n     * Context dataset ID — echo it back on update to modify the existing dataset rather than replace it\n     */\n    id?: string;\n    /**\n     * Max records to load for this context dataset\n     */\n    limit?: number | null;\n    /**\n     * Ordering within the context-builder pipeline\n     */\n    position?: number;\n    /**\n     * Liquid-templated SQL WHERE clause for filtering records at runtime. The context builder appends the legal entity FK automatically.\n     */\n    where_clause?: string | null;\n};\n\n/**\n * ToolEmailResponse\n */\nexport type ToolEmailResponseWritable = EmailResponseWritable & {\n    tool_body_type: 'email';\n};\n\n/**\n * ToolListResponse\n *\n * Paginated list of tools\n */\nexport type ToolListResponseWritable = {\n    /**\n     * List of tools\n     */\n    data: Array<ToolResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ManualToolInvocationSQLQueryCallResponse\n */\nexport type ManualToolInvocationSqlQueryCallResponseWritable = SqlQueryCallResponseWritable & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * SQSResponse\n *\n * AWS SQS (Simple Queue Service) tool configuration for sending and receiving queue messages.\n */\nexport type SqsResponseWritable = {\n    /**\n     * AWS access key ID (used when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method: 'access_key' | 'iam_role';\n    /**\n     * Whether the queue is a FIFO queue (URL must end with .fifo)\n     */\n    fifo?: boolean;\n    /**\n     * Optional human-readable queue name for identification\n     */\n    queue_name?: string | null;\n    /**\n     * Full SQS queue URL\n     */\n    queue_url: string;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n};\n\n/**\n * DataActivationClientBatchListResponse\n *\n * Paginated list of data activation client runs\n */\nexport type DataActivationClientBatchListResponseWritable = {\n    /**\n     * List of data activation client runs\n     */\n    data: Array<DataActivationClientBatchResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * RESTAPIRequest\n *\n * REST API tool configuration with OpenAPI-compliant authentication (API key, basic, bearer, OAuth2, OIDC) plus base Liquid templates. Request\n */\nexport type RestapiRequestWritable = {\n    /**\n     * API key value (used when auth_method is api_key)\n     */\n    api_key?: string | null;\n    /**\n     * Where to send the API key (header or query parameter)\n     */\n    api_key_location?: 'header' | 'query';\n    /**\n     * Header or query-parameter name for the API key\n     */\n    api_key_name?: string | null;\n    /**\n     * Authentication method\n     */\n    auth_method: 'none' | 'api_key' | 'basic' | 'bearer' | 'oauth2' | 'oidc';\n    base_body?: SimpleTemplateConfigRequest;\n    base_headers?: SimpleTemplateConfigRequest;\n    base_path?: SimpleTemplateConfigRequest;\n    base_query?: SimpleTemplateConfigRequest;\n    /**\n     * Base URL (https) of the REST API endpoint\n     */\n    base_url: string;\n    /**\n     * Static bearer token (used when auth_method is bearer)\n     */\n    bearer_token?: string | null;\n    /**\n     * OAuth2 client ID\n     */\n    oauth2_client_id?: string | null;\n    /**\n     * OAuth2 client secret\n     */\n    oauth2_client_secret?: string | null;\n    /**\n     * OAuth2 grant type\n     */\n    oauth2_grant_type?: 'client_credentials' | 'authorization_code';\n    /**\n     * OAuth2 refresh token for authorization_code grant. Obtained from the provider's OAuth consent flow and pasted here. The platform auto-rotates it.\n     */\n    oauth2_refresh_token?: string | null;\n    /**\n     * OAuth2 scope(s)\n     */\n    oauth2_scope?: string | null;\n    /**\n     * OAuth2 token cache TTL in seconds\n     */\n    oauth2_token_ttl?: number | null;\n    /**\n     * OAuth2 token endpoint URL\n     */\n    oauth2_token_url?: string | null;\n    /**\n     * OIDC client ID\n     */\n    oidc_client_id?: string | null;\n    /**\n     * OIDC client secret\n     */\n    oidc_client_secret?: string | null;\n    /**\n     * OIDC issuer URL for discovery\n     */\n    oidc_issuer_url?: string | null;\n    /**\n     * OIDC token cache TTL in seconds\n     */\n    oidc_token_ttl?: number | null;\n    /**\n     * Password (used when auth_method is basic)\n     */\n    password?: string | null;\n    /**\n     * Request content type\n     */\n    request_type: 'json' | 'xml' | 'form_urlencoded' | 'multipart_form';\n    /**\n     * Response content type\n     */\n    response_type: 'json' | 'xml' | 'text' | 'binary';\n    /**\n     * Request timeout in milliseconds (max 300000)\n     */\n    timeout_ms: number;\n    /**\n     * Username (used when auth_method is basic)\n     */\n    username?: string | null;\n};\n\n/**\n * DatalakeCloudStorageCustomRequest\n */\nexport type DatalakeCloudStorageCustomRequestWritable = CloudStorageCustomRequestWritable & {\n    cloud_storage_type: 'custom';\n};\n\n/**\n * DataActivationClientSharePointExcelCallResponse\n */\nexport type DataActivationClientSharePointExcelCallResponseWritable = SharePointExcelCallResponse & {\n    tool_call_type: 'microsoft_share_point_excel_request';\n};\n\n/**\n * EmailResponse\n *\n * Email tool configuration — SES, Mailgun, SendGrid, SMTP, or mock (dev mailbox) provider plus base Liquid templates.\n */\nexport type EmailResponseWritable = {\n    /**\n     * AWS access key ID (SES)\n     */\n    access_key_id?: string;\n    /**\n     * Sending domain (Mailgun)\n     */\n    domain?: string;\n    /**\n     * Custom provider endpoint; leave blank for the real provider. For SES, the whole request URL (e.g., http://localhost:4566 for MiniStack); blank means https://email.<region>.amazonaws.com. For Mailgun, the API base URL (e.g., https://api.eu.mailgun.net/v3 for EU domains, or a WireMock endpoint for integration tests)\n     */\n    endpoint_url?: string | null;\n    /**\n     * Default sender email address\n     */\n    from_email: string;\n    /**\n     * Default sender display name\n     */\n    from_name?: string | null;\n    /**\n     * ID of the primary Email tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * Email provider (mock = in-process dev mailbox, no credentials)\n     */\n    provider: 'ses' | 'mailgun' | 'sendgrid' | 'smtp' | 'mock';\n    /**\n     * AWS region (SES)\n     */\n    region?: string;\n    /**\n     * Default reply-to address\n     */\n    reply_to?: string | null;\n    /**\n     * SMTP server hostname\n     */\n    smtp_host?: string;\n    /**\n     * SMTP server port\n     */\n    smtp_port?: number;\n    /**\n     * SMTP username\n     */\n    smtp_username?: string;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type?: 'primary' | 'variant';\n};\n\n/**\n * ManualToolInvocationMMSCallResponse\n */\nexport type ManualToolInvocationMmsCallResponseWritable = MmsCallResponseWritable & {\n    tool_call_type: 'mms_request';\n};\n\n/**\n * WorkflowLogResponse\n *\n * Workflow execution log — per-event execution detail\n */\nexport type WorkflowLogResponseWritable = {\n    /**\n     * Completed action count\n     */\n    actions_completed?: number;\n    /**\n     * Actions that have started and not finished. A run showing `actions_pending: 1, actions_executing: 0` is waiting to be picked up; one showing `actions_pending: 1, actions_executing: 1` is mid-flight and may be stuck.\n     */\n    actions_executing?: number;\n    /**\n     * Failed action count\n     */\n    actions_failed?: number;\n    /**\n     * Unfinished action count — actions still queued plus actions already running. `actions_executing` is the running share of it.\n     */\n    actions_pending?: number;\n    /**\n     * Total action count\n     */\n    actions_total?: number;\n    /**\n     * Batch identifier\n     */\n    batch_id?: string | null;\n    completed_at?: string | null;\n    /**\n     * R2 storage key for context JSON\n     */\n    context_cloud_storage_key?: string | null;\n    /**\n     * Datalake ID\n     */\n    datalake_id?: string;\n    /**\n     * Error description\n     */\n    error_message?: string | null;\n    /**\n     * Whether the filter passed\n     */\n    filter_result?: boolean | null;\n    /**\n     * Execution log ID\n     */\n    id?: string;\n    inserted_at?: string;\n    /**\n     * The legal entity this run is about (cross-database id)\n     */\n    legal_entity_id?: string | null;\n    /**\n     * Execution mode\n     */\n    mode: 'live' | 'dry_run';\n    /**\n     * Sampled event ID\n     */\n    sampled_event_id?: string | null;\n    started_at?: string | null;\n    /**\n     * Execution status\n     */\n    status: 'filtered' | 'pending' | 'executing' | 'completed' | 'failed' | 'partial';\n    /**\n     * Tenant ID\n     */\n    tenant_id?: string;\n    /**\n     * Parent workflow ID\n     */\n    workflow_id?: string;\n};\n\n/**\n * CloudStorageAwsRequest\n *\n * AWS S3 cloud storage configuration supporting access key and IAM role authentication. Request\n */\nexport type CloudStorageAwsRequestWritable = {\n    /**\n     * AWS access key ID (required when auth_method is access_key)\n     */\n    access_key_id?: string | null;\n    /**\n     * AWS authentication method\n     */\n    auth_method?: 'access_key' | 'iam_role';\n    /**\n     * Base path prefix for objects within the bucket\n     */\n    base_path?: string;\n    /**\n     * S3 bucket name\n     */\n    bucket: string;\n    /**\n     * Custom S3 endpoint URL (optional, defaults to AWS)\n     */\n    endpoint?: string | null;\n    /**\n     * AWS region (e.g., us-east-1)\n     */\n    region: string;\n    /**\n     * AWS secret access key (required when auth_method is access_key)\n     */\n    secret_access_key?: string | null;\n};\n\n/**\n * AuthenticatedLinkResponse\n *\n * An authenticated link, with the message it was sent in\n */\nexport type AuthenticatedLinkResponseWritable = {\n    [key: string]: unknown;\n};\n\n/**\n * ToolSQSResponse\n */\nexport type ToolSqsResponseWritable = SqsResponseWritable & {\n    tool_body_type: 'sqs';\n};\n\n/**\n * ApiKeyResponse\n *\n * Lean API key reference — id, name, last_four, and data_access_mode (no plaintext)\n */\nexport type ApiKeyResponseWritable = {\n    /**\n     * Capability ceiling baked into the key — the most sensitive lake a session derived from it may read. `:raw` reaches the raw lake, which holds real PHI/PII values; `:tokenized` and `:redacted` name derived lakes, which hold none. Sessions derived from this key inherit this value. Cannot be widened post-creation — revoke + re-mint instead.\n     */\n    data_access_mode: 'raw' | 'tokenized' | 'redacted';\n    /**\n     * API key name\n     */\n    name: string;\n};\n\n/**\n * DataActivationClientResponse\n *\n * Data Activation Client — binds a (datalake, data_source, tool) triple with a polymorphic `tool_call` config describing how to fetch data from the external system, plus optional cron schedule, row-level filter, downstream triggers, and interop contracts for row-level transformation.\n */\nexport type DataActivationClientResponseWritable = {\n    /**\n     * Cron expressions (Crontab syntax, array). Examples: [\"0 *6 * * *\"] for every 6 hours. Omit for on-demand clients.\n     */\n    cron_expressions?: Array<string>;\n    /**\n     * Owning data source ID\n     */\n    data_source_id: string;\n    /**\n     * DAC description\n     */\n    description?: string | null;\n    /**\n     * IDs of downstream DACs triggered after this one completes\n     */\n    downstream_connection_ids?: Array<string>;\n    /**\n     * IDs of interoperability contracts used to transform each fetched row\n     */\n    interoperability_contract_ids?: Array<string>;\n    /**\n     * DAC name\n     */\n    name: string;\n    /**\n     * Optional row-level Liquid pre-filter. Renders to empty/whitespace → row passes; any non-empty trimmed render → row is skipped (rendered string is the skip reason). Nil/empty body = no filter. Same semantics as InteroperabilityContract.filter_template.\n     */\n    row_filter?: string | null;\n    /**\n     * Owning tool ID\n     */\n    tool_id: string;\n};\n\n/**\n * SFTPRequest\n *\n * SFTP (SSH File Transfer Protocol) server connection configuration with password or SSH key auth. Request\n */\nexport type SftpRequestWritable = {\n    /**\n     * SFTP authentication method\n     */\n    auth_method: 'password' | 'ssh_key';\n    /**\n     * Base directory path on the SFTP server\n     */\n    base_path: string;\n    base_path_template?: ComplexTemplateConfigRequest;\n    /**\n     * SFTP server hostname or IP address\n     */\n    host: string;\n    /**\n     * SFTP password (used when auth_method is password)\n     */\n    password?: string | null;\n    /**\n     * SFTP port\n     */\n    port: number;\n    /**\n     * SSH private key content (used when auth_method is ssh_key)\n     */\n    private_key?: string | null;\n    /**\n     * Optional passphrase for encrypted SSH private key\n     */\n    private_key_passphrase?: string | null;\n    /**\n     * SFTP username\n     */\n    user_name: string;\n};\n\n/**\n * ActionRunDataActivationClientCallRequest\n */\nexport type ActionRunDataActivationClientCallRequestWritable = RunDataActivationClientCallRequest & {\n    tool_call_type: 'run_data_activation_client';\n};\n\n/**\n * CloudStorageCustomRequest\n *\n * Custom S3-compatible cloud storage configuration — for MinIO, DigitalOcean Spaces, Backblaze B2, and other S3-compatible services. Requires a custom endpoint URL. Request\n */\nexport type CloudStorageCustomRequestWritable = {\n    /**\n     * Access key ID\n     */\n    access_key_id: string;\n    /**\n     * Base path prefix for objects within the bucket\n     */\n    base_path?: string;\n    /**\n     * Bucket name\n     */\n    bucket: string;\n    /**\n     * Custom S3-compatible endpoint URL (required)\n     */\n    endpoint: string;\n    /**\n     * Storage region (e.g., us-east-1)\n     */\n    region: string;\n    /**\n     * Secret access key\n     */\n    secret_access_key: string;\n};\n\n/**\n * DatalakeListResponse\n *\n * Paginated list of datalakes\n */\nexport type DatalakeListResponseWritable = {\n    /**\n     * List of datalakes\n     */\n    data: Array<DatalakeResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * DatalakeCloudStorageAwsResponse\n */\nexport type DatalakeCloudStorageAwsResponseWritable = CloudStorageAwsResponse & {\n    cloud_storage_type: 'aws';\n};\n\n/**\n * ActionRESTCallResponse\n */\nexport type ActionRestCallResponseWritable = RestCallResponseWritable & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * DataActivationClientRequest\n *\n * Data Activation Client — binds a (datalake, data_source, tool) triple with a polymorphic `tool_call` config describing how to fetch data from the external system, plus optional cron schedule, row-level filter, downstream triggers, and interop contracts for row-level transformation. Request\n */\nexport type DataActivationClientRequestWritable = {\n    /**\n     * Cron expressions (Crontab syntax, array). Examples: [\"0 *6 * * *\"] for every 6 hours. Omit for on-demand clients.\n     */\n    cron_expressions?: Array<string>;\n    /**\n     * Owning data source ID\n     */\n    data_source_id: string;\n    /**\n     * DAC description\n     */\n    description?: string | null;\n    /**\n     * IDs of downstream DACs triggered after this one completes\n     */\n    downstream_connection_ids?: Array<string>;\n    filter_config?: SimpleTemplateConfigRequest;\n    /**\n     * IDs of interoperability contracts used to transform each fetched row\n     */\n    interoperability_contract_ids?: Array<string>;\n    /**\n     * DAC name\n     */\n    name: string;\n    /**\n     * Optional row-level Liquid pre-filter. Renders to empty/whitespace → row passes; any non-empty trimmed render → row is skipped (rendered string is the skip reason). Nil/empty body = no filter. Same semantics as InteroperabilityContract.filter_template.\n     */\n    row_filter?: string | null;\n    rows_from_file_template?: SimpleTemplateConfigRequest | null;\n    tool_call: ({\n        tool_call_type: 'restapi_request';\n    } & DataActivationClientRestCallRequestWritable) | ({\n        tool_call_type: 'sql_query';\n    } & DataActivationClientSqlQueryCallRequestWritable) | ({\n        tool_call_type: 'sftp_request';\n    } & DataActivationClientSftpCallRequestWritable) | ({\n        tool_call_type: 'microsoft_share_point_excel_request';\n    } & DataActivationClientSharePointExcelCallRequestWritable) | ({\n        tool_call_type: 'aws_lambda_request';\n    } & DataActivationClientAwsLambdaCallRequestWritable) | ({\n        tool_call_type: 'manual_upload';\n    } & DataActivationClientManualUploadCallRequest) | ({\n        tool_call_type: 's3_request';\n    } & DataActivationClientS3CallRequestWritable);\n    /**\n     * Owning tool ID\n     */\n    tool_id: string;\n};\n\n/**\n * ToolCloudWatchLogGroupResponse\n */\nexport type ToolCloudWatchLogGroupResponseWritable = CloudWatchLogGroupResponseWritable & {\n    tool_body_type: 'cloud_watch_log_group';\n};\n\n/**\n * ActionAWSLambdaCallRequest\n */\nexport type ActionAwsLambdaCallRequestWritable = AwsLambdaCallRequestWritable & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * TwilioRequest\n *\n * Twilio tool configuration for sending SMS and MMS via the Programmable Messaging API. A primary holds the account credential; a variant names its primary and carries only its own sender identity. Request\n */\nexport type TwilioRequestWritable = {\n    /**\n     * Twilio Account SID (required on a primary; supplied by the primary on a variant)\n     */\n    account_sid?: string | null;\n    /**\n     * Twilio API Key Secret (required when auth_method is api_key)\n     */\n    api_key_secret?: string | null;\n    /**\n     * Twilio API Key SID (required when auth_method is api_key)\n     */\n    api_key_sid?: string | null;\n    /**\n     * How this primary authenticates to Twilio. Defaults to auth_token.\n     */\n    auth_method?: 'auth_token' | 'api_key';\n    /**\n     * Twilio Auth Token (required on a primary; supplied by the primary on a variant)\n     */\n    auth_token?: string | null;\n    base_message?: ComplexTemplateConfigRequest;\n    /**\n     * Custom Twilio API base URL (e.g., http://localhost:8080 for WireMock); leave blank for https://api.twilio.com\n     */\n    base_url?: string | null;\n    /**\n     * Origination phone number in E.164 format (e.g., +15551234567)\n     */\n    from_number?: string | null;\n    /**\n     * Twilio Messaging Service SID, used instead of a from_number\n     */\n    messaging_service_sid?: string | null;\n    /**\n     * ID of the primary Twilio tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * Request timeout in milliseconds (1–300000)\n     */\n    timeout_ms?: number | null;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type: 'primary' | 'variant';\n};\n\n/**\n * GenericTableResponse\n *\n * Generic Table — custom or system dataset table with column definitions.\n */\nexport type GenericTableResponseWritable = {\n    /**\n     * Table description\n     */\n    description?: string;\n    /**\n     * User-friendly table title\n     */\n    title?: string;\n};\n\n/**\n * InteroperabilityContractListResponse\n *\n * Paginated list of interoperability contracts\n */\nexport type InteroperabilityContractListResponseWritable = {\n    /**\n     * List of interoperability contracts\n     */\n    data: Array<InteroperabilityContractResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ToolEndUserMessagingResponse\n */\nexport type ToolEndUserMessagingResponseWritable = EndUserMessagingResponseWritable & {\n    tool_body_type: 'end_user_messaging';\n};\n\n/**\n * DataActivationClientSFTPCallRequest\n */\nexport type DataActivationClientSftpCallRequestWritable = SftpCallRequest & {\n    tool_call_type: 'sftp_request';\n};\n\n/**\n * RunManuallyRequest\n *\n * Optional polymorphic tool_call override for this run. When omitted or empty, the DAC's persisted tool_call is used.\n */\nexport type RunManuallyRequestWritable = {\n    /**\n     * One-shot polymorphic tool_call override. Same `tool_call_type` discriminator and variants as DataActivationClientRequest.tool_call.\n     */\n    tool_call?: ({\n        tool_call_type: 'DataActivationClientRESTCallRequestWritable';\n    } & DataActivationClientRestCallRequestWritable) | ({\n        tool_call_type: 'DataActivationClientSQLQueryCallRequestWritable';\n    } & DataActivationClientSqlQueryCallRequestWritable) | ({\n        tool_call_type: 'DataActivationClientSFTPCallRequestWritable';\n    } & DataActivationClientSftpCallRequestWritable) | ({\n        tool_call_type: 'DataActivationClientSharePointExcelCallRequestWritable';\n    } & DataActivationClientSharePointExcelCallRequestWritable) | ({\n        tool_call_type: 'DataActivationClientAWSLambdaCallRequestWritable';\n    } & DataActivationClientAwsLambdaCallRequestWritable) | ({\n        tool_call_type: 'DataActivationClientManualUploadCallRequest';\n    } & DataActivationClientManualUploadCallRequest) | ({\n        tool_call_type: 'DataActivationClientS3CallRequestWritable';\n    } & DataActivationClientS3CallRequestWritable) | null;\n};\n\n/**\n * ActionStatusUpdaterListResponse\n *\n * Paginated list of action status updaters\n */\nexport type ActionStatusUpdaterListResponseWritable = {\n    /**\n     * List of action status updaters\n     */\n    data: Array<ActionStatusUpdaterResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ToolEndUserMessagingRequest\n */\nexport type ToolEndUserMessagingRequestWritable = EndUserMessagingRequestWritable & {\n    tool_body_type: 'end_user_messaging';\n};\n\n/**\n * ManualToolInvocationEmailCallRequest\n */\nexport type ManualToolInvocationEmailCallRequestWritable = EmailCallRequestWritable & {\n    tool_call_type: 'email_request';\n};\n\n/**\n * DatalakeCloudStorageAwsRequest\n */\nexport type DatalakeCloudStorageAwsRequestWritable = CloudStorageAwsRequestWritable & {\n    cloud_storage_type: 'aws';\n};\n\n/**\n * AgenticWorkflowListResponse\n *\n * Paginated list of agentic workflows\n */\nexport type AgenticWorkflowListResponseWritable = {\n    /**\n     * List of agentic workflows\n     */\n    data: Array<AgenticWorkflowResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionMMSCallRequest\n */\nexport type ActionMmsCallRequestWritable = MmsCallRequestWritable & {\n    tool_call_type: 'mms_request';\n};\n\n/**\n * RoleResponse\n *\n * Lean role reference — id, name, and description\n */\nexport type RoleResponseWritable = {\n    /**\n     * Role description\n     */\n    description?: string | null;\n    /**\n     * Role name (e.g. tenant_admin, platform_admin)\n     */\n    name: string;\n};\n\n/**\n * BatchLogListResponse\n *\n * Paginated list of batch run logs\n */\nexport type BatchLogListResponseWritable = {\n    /**\n     * List of batch run logs\n     */\n    data: Array<BatchLogResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ToolTwilioResponse\n */\nexport type ToolTwilioResponseWritable = TwilioResponseWritable & {\n    tool_body_type: 'twilio';\n};\n\n/**\n * ManualToolInvocationAWSLambdaCallRequest\n */\nexport type ManualToolInvocationAwsLambdaCallRequestWritable = AwsLambdaCallRequestWritable & {\n    tool_call_type: 'aws_lambda_request';\n};\n\n/**\n * ToolSFTPResponse\n */\nexport type ToolSftpResponseWritable = SftpResponseWritable & {\n    tool_body_type: 'sftp';\n};\n\n/**\n * ToolS3Request\n */\nexport type ToolS3RequestWritable = S3RequestWritable & {\n    tool_body_type: 's3';\n};\n\n/**\n * ManualToolInvocationRESTCallRequest\n */\nexport type ManualToolInvocationRestCallRequestWritable = RestCallRequestWritable & {\n    tool_call_type: 'restapi_request';\n};\n\n/**\n * SignUpRequest\n *\n * Register a new user account. Mirrors the `/auth/register` LiveView form\n * submission shape. The created user is **unconfirmed** — caller must\n * confirm separately (e.g. via the email confirmation flow, or via\n * `PUT /api/v1/admin/users/:id/confirm` for tests) before signing in.\n *\n * No authentication is required.\n * Request\n */\nexport type SignUpRequestWritable = {\n    /**\n     * User email\n     */\n    email: string;\n    /**\n     * First name\n     */\n    first_name: string | null;\n    /**\n     * Last name\n     */\n    last_name: string | null;\n    /**\n     * Password (8–72 characters; mirrors the `/auth/register` LiveView form)\n     */\n    password: string;\n};\n\n/**\n * AiAgentResponse\n *\n * AI Agent configuration — reusable chat-completion resource\n */\nexport type AiAgentResponseWritable = {\n    /**\n     * Which lake the agent reads. `tokenized` means the agent's context is read from the tokenized copy, so it never sees a real identifier. It is enforced, not advisory: an agent set to `tokenized` in an environment with no tokenized lake fails its enrichment step rather than falling back to raw.\n     */\n    data_access: 'raw' | 'tokenized';\n    datalake?: DatalakeResponseWritable;\n    /**\n     * Agent description\n     */\n    description?: string | null;\n    /**\n     * Whether the agent is enabled\n     */\n    enabled: boolean;\n    /**\n     * AI Agent ID\n     */\n    id?: string;\n    /**\n     * JSON Schema describing the agent's input contract — validated by the runner against caller context on every invocation.\n     */\n    input_schema: {\n        [key: string]: unknown;\n    };\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * JSON Schema for LLM response format\n     */\n    llm_response_schema: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * Maximum tokens for LLM response\n     */\n    max_tokens: number;\n    /**\n     * LLM model identifier\n     */\n    model: string;\n    /**\n     * Agent name\n     */\n    name: string;\n    prompt_config: SimpleTemplateConfigResponse;\n    /**\n     * URL-friendly slug\n     */\n    slug?: string;\n    /**\n     * Sampling temperature (0.0–2.0)\n     */\n    temperature: number;\n    tenant?: TenantResponseWritable;\n    tool?: ToolResponseWritable;\n    /**\n     * Tool ID\n     */\n    tool_id: string;\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n};\n\n/**\n * DataActivationClientSQLQueryCallRequest\n */\nexport type DataActivationClientSqlQueryCallRequestWritable = SqlQueryCallRequestWritable & {\n    tool_call_type: 'sql_query';\n};\n\n/**\n * ToolSNSRequest\n */\nexport type ToolSnsRequestWritable = SnsRequestWritable & {\n    tool_body_type: 'sns';\n};\n\n/**\n * InvitationListResponse\n *\n * Paginated list of invitations\n */\nexport type InvitationListResponseWritable = {\n    /**\n     * List of invitations\n     */\n    data: Array<InvitationResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * ActionStatusUpdaterRequest\n *\n * Action Status Updater — automated polling for delivery status updates. Request\n */\nexport type ActionStatusUpdaterRequestWritable = {\n    action_log_config: SimpleTemplateConfigRequest;\n    /**\n     * Cron schedule expression (e.g. \"*30 * * * *\")\n     */\n    cron_expression: string;\n    /**\n     * Datalake ID\n     */\n    datalake_id: string;\n    /**\n     * JSON Schema the rendered events_template output is validated against on every poll (required for restapi updaters). FLOOR: it must describe an array whose items are objects listing \"external_id\" in \"required\" — every event has to name the message it reconciles, so the events_template maps the provider's own id (messageId / id / sid) into external_id. Add whatever else your provider guarantees on top; the platform only enforces the floor.\n     */\n    events_output_schema?: {\n        [key: string]: unknown;\n    } | null;\n    message_config: SimpleTemplateConfigRequest;\n    /**\n     * Updater name\n     */\n    name: string;\n    /**\n     * JSON Schema the rendered pagination_context_template output is validated against on every poll (required for restapi updaters). FLOOR: it must describe an object listing \"has_next\" in \"required\" — that key is what ends the page loop. Add the provider's cursor keys on top; the platform only enforces the floor.\n     */\n    pagination_context_output_schema?: {\n        [key: string]: unknown;\n    } | null;\n    /**\n     * IDs of sender tools whose messages this updater monitors\n     */\n    sender_tool_ids?: Array<string> | null;\n    /**\n     * Whether this updater may poll. The server sets cycle_detected when a run re-reads events it has already handled, and every later job then fails without calling the provider. Set it back to active to resume polling — nothing else clears it.\n     */\n    status?: 'active' | 'cycle_detected';\n    updater_body: ({\n        updater_body_type: 'cloud_watch_request';\n    } & ActionStatusUpdaterCloudWatchQueryRequestWritable) | ({\n        updater_body_type: 'restapi_request';\n    } & ActionStatusUpdaterRestCallRequestWritable);\n    /**\n     * Tool providing auth credentials for polling\n     */\n    updater_tool_id: string;\n    /**\n     * Updater type — determines the updater_body shape\n     */\n    updater_type: 'cloud_watch' | 'restapi';\n};\n\n/**\n * DataActivationClientLogListResponse\n *\n * Paginated list of data activation client logs\n */\nexport type DataActivationClientLogListResponseWritable = {\n    /**\n     * List of data activation client logs\n     */\n    data: Array<DataActivationClientLogResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * AiAgentListResponse\n *\n * Paginated list of AI agents\n */\nexport type AiAgentListResponseWritable = {\n    /**\n     * List of AI agents\n     */\n    data: Array<AiAgentResponseWritable>;\n    meta: PaginationMeta;\n};\n\n/**\n * S3Request\n *\n * S3-compatible storage tool configuration with a nested polymorphic provider config (AWS or R2). Request\n */\nexport type S3RequestWritable = {\n    base_prefix?: ComplexTemplateConfigRequest;\n    config: ({\n        storage_config_type: 'aws';\n    } & S3CloudStorageAwsRequestWritable) | ({\n        storage_config_type: 'r2';\n    } & S3CloudStorageR2RequestWritable);\n};\n\n/**\n * DataSourceResponse\n *\n * Data source — connection to a third-party system or API\n */\nexport type DataSourceResponseWritable = {\n    datalake?: DatalakeResponseWritable;\n    /**\n     * Data source description\n     */\n    description?: string | null;\n    /**\n     * Data Source ID\n     */\n    id?: string;\n    /**\n     * Image URL\n     */\n    image_url?: string | null;\n    /**\n     * Creation timestamp\n     */\n    inserted_at?: string;\n    /**\n     * Whether this is the default data source\n     */\n    is_default: boolean;\n    /**\n     * Data source name\n     */\n    name: string;\n    /**\n     * Data source status\n     */\n    status: 'draft' | 'active' | 'inactive';\n    /**\n     * Last update timestamp\n     */\n    updated_at?: string;\n    /**\n     * Data source URI\n     */\n    uri: string;\n};\n\n/**\n * TwilioResponse\n *\n * Twilio tool configuration for sending SMS and MMS via the Programmable Messaging API. A primary holds the account credential; a variant names its primary and carries only its own sender identity.\n */\nexport type TwilioResponseWritable = {\n    /**\n     * Twilio Account SID (required on a primary; supplied by the primary on a variant)\n     */\n    account_sid?: string | null;\n    /**\n     * Twilio API Key SID (required when auth_method is api_key)\n     */\n    api_key_sid?: string | null;\n    /**\n     * How this primary authenticates to Twilio. Defaults to auth_token.\n     */\n    auth_method?: 'auth_token' | 'api_key';\n    /**\n     * Custom Twilio API base URL (e.g., http://localhost:8080 for WireMock); leave blank for https://api.twilio.com\n     */\n    base_url?: string | null;\n    /**\n     * Origination phone number in E.164 format (e.g., +15551234567)\n     */\n    from_number?: string | null;\n    /**\n     * Twilio Messaging Service SID, used instead of a from_number\n     */\n    messaging_service_sid?: string | null;\n    /**\n     * ID of the primary Twilio tool supplying credentials; required when variant_type is variant\n     */\n    primary_tool_id?: string | null;\n    /**\n     * Request timeout in milliseconds (1–300000)\n     */\n    timeout_ms?: number | null;\n    /**\n     * Whether this tool holds the account credential (primary) or borrows another tool's (variant). Defaults to primary.\n     */\n    variant_type: 'primary' | 'variant';\n};\n\n/**\n * SQLDatabaseRequest\n *\n * SQL database connection configuration (PostgreSQL, MySQL, MSSQL, SQLite, Snowflake). Request\n */\nexport type SqlDatabaseRequestWritable = {\n    base_query?: ComplexTemplateConfigRequest;\n    /**\n     * Database host (hostname or IP address)\n     */\n    db_host: string;\n    /**\n     * Database name\n     */\n    db_name: string;\n    /**\n     * SQL database engine\n     */\n    db_type: 'postgres' | 'mysql' | 'mssql' | 'sqlite' | 'snowflake';\n    /**\n     * Database password\n     */\n    password: string;\n    /**\n     * Ecto connection pool size\n     */\n    pool_size?: number | null;\n    /**\n     * Database port (defaults based on db_type: postgres=5432, mysql=3306, mssql=1433)\n     */\n    port?: number | null;\n    /**\n     * Enable SSL connection\n     */\n    ssl?: boolean | null;\n    /**\n     * SSL mode (e.g., 'require', 'verify-full')\n     */\n    ssl_mode?: string | null;\n    /**\n     * Database username\n     */\n    user_name: string;\n};\n\n/**\n * SMSCallRequest\n *\n * SMS tool-call config — Liquid-templated recipient and body, transactional/promotional category, and the prefix its links go out on. Request\n */\nexport type SmsCallRequestWritable = {\n    body: SimpleTemplateConfigRequest;\n    /**\n     * Address of the host that serves this action's links. Every URL in the body goes out as <link_prefix>/<token>. An absolute http or https URL, path allowed, with no query, fragment or trailing slash.\n     */\n    link_prefix: string;\n    /**\n     * How many days each link resolves after the send\n     */\n    link_validity_days?: number;\n    /**\n     * SMS category — transactional vs promotional\n     */\n    sms_type?: 'transactional' | 'promotional';\n    to: SimpleTemplateConfigRequest;\n};\n\n/**\n * ToolRESTAPIResponse\n */\nexport type ToolRestapiResponseWritable = RestapiResponseWritable & {\n    tool_body_type: 'rest_api';\n};\n\nexport type PlatformApiAgenticWorkflowControllerChecksumData = {\n    /**\n     * Full workflow resource (same shape as create/update)\n     */\n    body?: AgenticWorkflowRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/checksum';\n};\n\nexport type PlatformApiAgenticWorkflowControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAgenticWorkflowControllerChecksumError = PlatformApiAgenticWorkflowControllerChecksumErrors[keyof PlatformApiAgenticWorkflowControllerChecksumErrors];\n\nexport type PlatformApiAgenticWorkflowControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiAgenticWorkflowControllerChecksumResponse = PlatformApiAgenticWorkflowControllerChecksumResponses[keyof PlatformApiAgenticWorkflowControllerChecksumResponses];\n\nexport type PlatformApiGenericTableControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Generic Table ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/{id}/metadata';\n};\n\nexport type PlatformApiGenericTableControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiGenericTableControllerMetadataDetailsError = PlatformApiGenericTableControllerMetadataDetailsErrors[keyof PlatformApiGenericTableControllerMetadataDetailsErrors];\n\nexport type PlatformApiGenericTableControllerMetadataDetailsResponses = {\n    /**\n     * Markdown body for the requested generic table\n     */\n    200: string;\n};\n\nexport type PlatformApiGenericTableControllerMetadataDetailsResponse = PlatformApiGenericTableControllerMetadataDetailsResponses[keyof PlatformApiGenericTableControllerMetadataDetailsResponses];\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyData = {\n    /**\n     * API key attributes\n     */\n    body: AdminCreateTenantApiKeyRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/admin/tenants/{tenant_slug}/api-keys';\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Forbidden\n     */\n    403: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyError = PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyErrors[keyof PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyErrors];\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyResponses = {\n    /**\n     * API key created\n     */\n    201: AdminApiKeyResponse;\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyResponse = PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyResponses[keyof PlatformApiIntegrationTestOnlyAdminControllerCreateTenantApiKeyResponses];\n\nexport type PlatformApiToolControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Tool ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}/metadata';\n};\n\nexport type PlatformApiToolControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiToolControllerMetadataDetailsError = PlatformApiToolControllerMetadataDetailsErrors[keyof PlatformApiToolControllerMetadataDetailsErrors];\n\nexport type PlatformApiToolControllerMetadataDetailsResponses = {\n    /**\n     * Markdown body for the requested tool\n     */\n    200: string;\n};\n\nexport type PlatformApiToolControllerMetadataDetailsResponse = PlatformApiToolControllerMetadataDetailsResponses[keyof PlatformApiToolControllerMetadataDetailsResponses];\n\nexport type PlatformApiDataSourceControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/metadata';\n};\n\nexport type PlatformApiDataSourceControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataSourceControllerMetadataError = PlatformApiDataSourceControllerMetadataErrors[keyof PlatformApiDataSourceControllerMetadataErrors];\n\nexport type PlatformApiDataSourceControllerMetadataResponses = {\n    /**\n     * One markdown page of the data source catalog for this datalake\n     */\n    200: string;\n};\n\nexport type PlatformApiDataSourceControllerMetadataResponse = PlatformApiDataSourceControllerMetadataResponses[keyof PlatformApiDataSourceControllerMetadataResponses];\n\nexport type PlatformApiToolControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Tool ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}';\n};\n\nexport type PlatformApiToolControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Tool is referenced by another resource\n     */\n    409: {\n        errors?: {\n            [key: string]: unknown;\n        };\n    };\n};\n\nexport type PlatformApiToolControllerDeleteError = PlatformApiToolControllerDeleteErrors[keyof PlatformApiToolControllerDeleteErrors];\n\nexport type PlatformApiToolControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiToolControllerDeleteResponse = PlatformApiToolControllerDeleteResponses[keyof PlatformApiToolControllerDeleteResponses];\n\nexport type PlatformApiToolControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Tool ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}';\n};\n\nexport type PlatformApiToolControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiToolControllerShowError = PlatformApiToolControllerShowErrors[keyof PlatformApiToolControllerShowErrors];\n\nexport type PlatformApiToolControllerShowResponses = {\n    /**\n     * Tool\n     */\n    200: ToolResponse;\n};\n\nexport type PlatformApiToolControllerShowResponse = PlatformApiToolControllerShowResponses[keyof PlatformApiToolControllerShowResponses];\n\nexport type PlatformApiToolControllerUpdateData = {\n    /**\n     * Full Tool resource (PUT semantics — all fields required)\n     */\n    body?: ToolRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Tool ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}';\n};\n\nexport type PlatformApiToolControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiToolControllerUpdateError = PlatformApiToolControllerUpdateErrors[keyof PlatformApiToolControllerUpdateErrors];\n\nexport type PlatformApiToolControllerUpdateResponses = {\n    /**\n     * Tool updated\n     */\n    200: ToolResponse;\n};\n\nexport type PlatformApiToolControllerUpdateResponse = PlatformApiToolControllerUpdateResponses[keyof PlatformApiToolControllerUpdateResponses];\n\nexport type PlatformApiDatalakeControllerTextToSqlData = {\n    /**\n     * Text-to-SQL request\n     */\n    body: TextToSqlRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/text-to-sql';\n};\n\nexport type PlatformApiDatalakeControllerTextToSqlErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerTextToSqlError = PlatformApiDatalakeControllerTextToSqlErrors[keyof PlatformApiDatalakeControllerTextToSqlErrors];\n\nexport type PlatformApiDatalakeControllerTextToSqlResponses = {\n    /**\n     * Generated SQL\n     */\n    200: TextToSqlResponse;\n};\n\nexport type PlatformApiDatalakeControllerTextToSqlResponse = PlatformApiDatalakeControllerTextToSqlResponses[keyof PlatformApiDatalakeControllerTextToSqlResponses];\n\nexport type PlatformApiAdvancedMigrationControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/metadata';\n};\n\nexport type PlatformApiAdvancedMigrationControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAdvancedMigrationControllerMetadataError = PlatformApiAdvancedMigrationControllerMetadataErrors[keyof PlatformApiAdvancedMigrationControllerMetadataErrors];\n\nexport type PlatformApiAdvancedMigrationControllerMetadataResponses = {\n    /**\n     * One markdown page of this datalake's advanced migrations\n     */\n    200: string;\n};\n\nexport type PlatformApiAdvancedMigrationControllerMetadataResponse = PlatformApiAdvancedMigrationControllerMetadataResponses[keyof PlatformApiAdvancedMigrationControllerMetadataResponses];\n\nexport type PlatformApiSessionControllerVerifyApiKeyData = {\n    body?: never;\n    path?: never;\n    query?: never;\n    url: '/api/v1/api-keys/verify';\n};\n\nexport type PlatformApiSessionControllerVerifyApiKeyErrors = {\n    /**\n     * Invalid or missing X-API-Key\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Bearer caller\n     */\n    422: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiSessionControllerVerifyApiKeyError = PlatformApiSessionControllerVerifyApiKeyErrors[keyof PlatformApiSessionControllerVerifyApiKeyErrors];\n\nexport type PlatformApiSessionControllerVerifyApiKeyResponses = {\n    /**\n     * API-key session details\n     */\n    200: SessionResponse;\n};\n\nexport type PlatformApiSessionControllerVerifyApiKeyResponse = PlatformApiSessionControllerVerifyApiKeyResponses[keyof PlatformApiSessionControllerVerifyApiKeyResponses];\n\nexport type PlatformApiDatalakeControllerMigrateData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/migrate';\n};\n\nexport type PlatformApiDatalakeControllerMigrateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerMigrateError = PlatformApiDatalakeControllerMigrateErrors[keyof PlatformApiDatalakeControllerMigrateErrors];\n\nexport type PlatformApiDatalakeControllerMigrateResponses = {\n    /**\n     * Migration job enqueued\n     */\n    202: DatalakeMigrateResponse;\n};\n\nexport type PlatformApiDatalakeControllerMigrateResponse = PlatformApiDatalakeControllerMigrateResponses[keyof PlatformApiDatalakeControllerMigrateResponses];\n\nexport type PlatformApiSessionControllerVerifyData = {\n    body?: never;\n    path?: never;\n    query?: never;\n    url: '/api/v1/sessions/verify';\n};\n\nexport type PlatformApiSessionControllerVerifyErrors = {\n    /**\n     * Invalid or missing credentials\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Key-only caller\n     */\n    422: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiSessionControllerVerifyError = PlatformApiSessionControllerVerifyErrors[keyof PlatformApiSessionControllerVerifyErrors];\n\nexport type PlatformApiSessionControllerVerifyResponses = {\n    /**\n     * Session details\n     */\n    200: SessionResponse;\n};\n\nexport type PlatformApiSessionControllerVerifyResponse = PlatformApiSessionControllerVerifyResponses[keyof PlatformApiSessionControllerVerifyResponses];\n\nexport type PlatformApiDataActivationClientControllerChecksumData = {\n    /**\n     * Full DAC resource (same shape as create/update)\n     */\n    body?: DataActivationClientRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/checksum';\n};\n\nexport type PlatformApiDataActivationClientControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataActivationClientControllerChecksumError = PlatformApiDataActivationClientControllerChecksumErrors[keyof PlatformApiDataActivationClientControllerChecksumErrors];\n\nexport type PlatformApiDataActivationClientControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerChecksumResponse = PlatformApiDataActivationClientControllerChecksumResponses[keyof PlatformApiDataActivationClientControllerChecksumResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStopData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n        /**\n         * Batch log ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/stop';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStopErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStopError = PlatformApiAgenticWorkflowOperationsControllerBatchLogStopErrors[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogStopErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponses = {\n    /**\n     * Batch log with polling stopped\n     */\n    200: BatchLogResponse;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponse = PlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponses[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogStopResponses];\n\nexport type PlatformApiDataActivationClientControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{id}';\n};\n\nexport type PlatformApiDataActivationClientControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * DAC is referenced by another resource\n     */\n    409: {\n        errors?: {\n            [key: string]: unknown;\n        };\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataActivationClientControllerDeleteError = PlatformApiDataActivationClientControllerDeleteErrors[keyof PlatformApiDataActivationClientControllerDeleteErrors];\n\nexport type PlatformApiDataActivationClientControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiDataActivationClientControllerDeleteResponse = PlatformApiDataActivationClientControllerDeleteResponses[keyof PlatformApiDataActivationClientControllerDeleteResponses];\n\nexport type PlatformApiDataActivationClientControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{id}';\n};\n\nexport type PlatformApiDataActivationClientControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataActivationClientControllerShowError = PlatformApiDataActivationClientControllerShowErrors[keyof PlatformApiDataActivationClientControllerShowErrors];\n\nexport type PlatformApiDataActivationClientControllerShowResponses = {\n    /**\n     * DAC\n     */\n    200: DataActivationClientResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerShowResponse = PlatformApiDataActivationClientControllerShowResponses[keyof PlatformApiDataActivationClientControllerShowResponses];\n\nexport type PlatformApiDataActivationClientControllerUpdateData = {\n    /**\n     * Full DAC resource (all required fields must be present)\n     */\n    body?: DataActivationClientRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{id}';\n};\n\nexport type PlatformApiDataActivationClientControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataActivationClientControllerUpdateError = PlatformApiDataActivationClientControllerUpdateErrors[keyof PlatformApiDataActivationClientControllerUpdateErrors];\n\nexport type PlatformApiDataActivationClientControllerUpdateResponses = {\n    /**\n     * DAC updated\n     */\n    200: DataActivationClientResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerUpdateResponse = PlatformApiDataActivationClientControllerUpdateResponses[keyof PlatformApiDataActivationClientControllerUpdateResponses];\n\nexport type PlatformApiDatalakeControllerCreateDownloadLinkData = {\n    /**\n     * Download link request\n     */\n    body: DownloadLinkRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/download-link';\n};\n\nexport type PlatformApiDatalakeControllerCreateDownloadLinkErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerCreateDownloadLinkError = PlatformApiDatalakeControllerCreateDownloadLinkErrors[keyof PlatformApiDatalakeControllerCreateDownloadLinkErrors];\n\nexport type PlatformApiDatalakeControllerCreateDownloadLinkResponses = {\n    /**\n     * Presigned download URL\n     */\n    200: DownloadUrlResponse;\n};\n\nexport type PlatformApiDatalakeControllerCreateDownloadLinkResponse = PlatformApiDatalakeControllerCreateDownloadLinkResponses[keyof PlatformApiDatalakeControllerCreateDownloadLinkResponses];\n\nexport type PlatformApiDatalakeControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{id}';\n};\n\nexport type PlatformApiDatalakeControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerDeleteError = PlatformApiDatalakeControllerDeleteErrors[keyof PlatformApiDatalakeControllerDeleteErrors];\n\nexport type PlatformApiDatalakeControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiDatalakeControllerDeleteResponse = PlatformApiDatalakeControllerDeleteResponses[keyof PlatformApiDatalakeControllerDeleteResponses];\n\nexport type PlatformApiDatalakeControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake ID\n         */\n        id: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{id}';\n};\n\nexport type PlatformApiDatalakeControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDatalakeControllerShowError = PlatformApiDatalakeControllerShowErrors[keyof PlatformApiDatalakeControllerShowErrors];\n\nexport type PlatformApiDatalakeControllerShowResponses = {\n    /**\n     * Datalake\n     */\n    200: DatalakeResponse;\n};\n\nexport type PlatformApiDatalakeControllerShowResponse = PlatformApiDatalakeControllerShowResponses[keyof PlatformApiDatalakeControllerShowResponses];\n\nexport type PlatformApiDatalakeControllerUpdateData = {\n    /**\n     * Full Datalake resource (PUT semantics — all fields required)\n     */\n    body?: DatalakeRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{id}';\n};\n\nexport type PlatformApiDatalakeControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerUpdateError = PlatformApiDatalakeControllerUpdateErrors[keyof PlatformApiDatalakeControllerUpdateErrors];\n\nexport type PlatformApiDatalakeControllerUpdateResponses = {\n    /**\n     * Datalake updated\n     */\n    200: DatalakeResponse;\n};\n\nexport type PlatformApiDatalakeControllerUpdateResponse = PlatformApiDatalakeControllerUpdateResponses[keyof PlatformApiDatalakeControllerUpdateResponses];\n\nexport type PlatformApiAuthenticatedLinkControllerExchangeData = {\n    /**\n     * A tap on a link\n     */\n    body: AuthenticatedLinkExchangeRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/authenticated-links/exchange';\n};\n\nexport type PlatformApiAuthenticatedLinkControllerExchangeErrors = {\n    /**\n     * Unauthorized\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Link expired\n     */\n    410: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation error\n     */\n    422: {\n        [key: string]: unknown;\n    };\n    /**\n     * Datalake unavailable\n     */\n    503: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAuthenticatedLinkControllerExchangeError = PlatformApiAuthenticatedLinkControllerExchangeErrors[keyof PlatformApiAuthenticatedLinkControllerExchangeErrors];\n\nexport type PlatformApiAuthenticatedLinkControllerExchangeResponses = {\n    /**\n     * The link, with its message\n     */\n    200: AuthenticatedLinkResponse;\n};\n\nexport type PlatformApiAuthenticatedLinkControllerExchangeResponse = PlatformApiAuthenticatedLinkControllerExchangeResponses[keyof PlatformApiAuthenticatedLinkControllerExchangeResponses];\n\nexport type PlatformApiTenantControllerIndexData = {\n    body?: never;\n    path?: never;\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants';\n};\n\nexport type PlatformApiTenantControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiTenantControllerIndexError = PlatformApiTenantControllerIndexErrors[keyof PlatformApiTenantControllerIndexErrors];\n\nexport type PlatformApiTenantControllerIndexResponses = {\n    /**\n     * Tenant list\n     */\n    200: TenantListResponse;\n};\n\nexport type PlatformApiTenantControllerIndexResponse = PlatformApiTenantControllerIndexResponses[keyof PlatformApiTenantControllerIndexResponses];\n\nexport type PlatformApiTenantControllerCreateData = {\n    /**\n     * Tenant attributes\n     */\n    body: TenantRequest;\n    path?: never;\n    query?: never;\n    url: '/api/v1/tenants';\n};\n\nexport type PlatformApiTenantControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Forbidden\n     */\n    403: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiTenantControllerCreateError = PlatformApiTenantControllerCreateErrors[keyof PlatformApiTenantControllerCreateErrors];\n\nexport type PlatformApiTenantControllerCreateResponses = {\n    /**\n     * Tenant created\n     */\n    201: TenantResponse;\n};\n\nexport type PlatformApiTenantControllerCreateResponse = PlatformApiTenantControllerCreateResponses[keyof PlatformApiTenantControllerCreateResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n        /**\n         * Execution log ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/workflow-logs/{id}/download';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadError = PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadErrors[keyof PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponses = {\n    /**\n     * Presigned download URL\n     */\n    200: {\n        url?: string;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponse = PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponses[keyof PlatformApiAgenticWorkflowOperationsControllerWorkflowLogDownloadResponses];\n\nexport type PlatformApiGenericTableControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables';\n};\n\nexport type PlatformApiGenericTableControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiGenericTableControllerIndexError = PlatformApiGenericTableControllerIndexErrors[keyof PlatformApiGenericTableControllerIndexErrors];\n\nexport type PlatformApiGenericTableControllerIndexResponses = {\n    /**\n     * Generic table list\n     */\n    200: GenericTableListResponse;\n};\n\nexport type PlatformApiGenericTableControllerIndexResponse = PlatformApiGenericTableControllerIndexResponses[keyof PlatformApiGenericTableControllerIndexResponses];\n\nexport type PlatformApiGenericTableControllerCreateData = {\n    /**\n     * Full Generic Table resource (PUT semantics — all fields required)\n     */\n    body?: GenericTableRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables';\n};\n\nexport type PlatformApiGenericTableControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiGenericTableControllerCreateError = PlatformApiGenericTableControllerCreateErrors[keyof PlatformApiGenericTableControllerCreateErrors];\n\nexport type PlatformApiGenericTableControllerCreateResponses = {\n    /**\n     * Generic table created\n     */\n    201: GenericTableResponse;\n};\n\nexport type PlatformApiGenericTableControllerCreateResponse = PlatformApiGenericTableControllerCreateResponses[keyof PlatformApiGenericTableControllerCreateResponses];\n\nexport type PlatformApiInvitationControllerIndexData = {\n    body?: never;\n    path?: never;\n    query?: never;\n    url: '/api/v1/invitations';\n};\n\nexport type PlatformApiInvitationControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiInvitationControllerIndexError = PlatformApiInvitationControllerIndexErrors[keyof PlatformApiInvitationControllerIndexErrors];\n\nexport type PlatformApiInvitationControllerIndexResponses = {\n    /**\n     * Pending invitations\n     */\n    200: InvitationListResponse;\n};\n\nexport type PlatformApiInvitationControllerIndexResponse = PlatformApiInvitationControllerIndexResponses[keyof PlatformApiInvitationControllerIndexResponses];\n\nexport type PlatformApiInteroperabilityContractControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts';\n};\n\nexport type PlatformApiInteroperabilityContractControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiInteroperabilityContractControllerIndexError = PlatformApiInteroperabilityContractControllerIndexErrors[keyof PlatformApiInteroperabilityContractControllerIndexErrors];\n\nexport type PlatformApiInteroperabilityContractControllerIndexResponses = {\n    /**\n     * Contract list\n     */\n    200: InteroperabilityContractListResponse;\n};\n\nexport type PlatformApiInteroperabilityContractControllerIndexResponse = PlatformApiInteroperabilityContractControllerIndexResponses[keyof PlatformApiInteroperabilityContractControllerIndexResponses];\n\nexport type PlatformApiInteroperabilityContractControllerCreateData = {\n    /**\n     * Full contract resource (PUT semantics on update — all required fields must be present)\n     */\n    body?: InteroperabilityContractRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts';\n};\n\nexport type PlatformApiInteroperabilityContractControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiInteroperabilityContractControllerCreateError = PlatformApiInteroperabilityContractControllerCreateErrors[keyof PlatformApiInteroperabilityContractControllerCreateErrors];\n\nexport type PlatformApiInteroperabilityContractControllerCreateResponses = {\n    /**\n     * Contract created\n     */\n    201: InteroperabilityContractResponse;\n};\n\nexport type PlatformApiInteroperabilityContractControllerCreateResponse = PlatformApiInteroperabilityContractControllerCreateResponses[keyof PlatformApiInteroperabilityContractControllerCreateResponses];\n\nexport type PlatformApiAgenticWorkflowControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/metadata';\n};\n\nexport type PlatformApiAgenticWorkflowControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowControllerMetadataError = PlatformApiAgenticWorkflowControllerMetadataErrors[keyof PlatformApiAgenticWorkflowControllerMetadataErrors];\n\nexport type PlatformApiAgenticWorkflowControllerMetadataResponses = {\n    /**\n     * One markdown page of the workflow catalog for this datalake\n     */\n    200: string;\n};\n\nexport type PlatformApiAgenticWorkflowControllerMetadataResponse = PlatformApiAgenticWorkflowControllerMetadataResponses[keyof PlatformApiAgenticWorkflowControllerMetadataResponses];\n\nexport type PlatformApiInteroperabilityContractControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/metadata';\n};\n\nexport type PlatformApiInteroperabilityContractControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiInteroperabilityContractControllerMetadataError = PlatformApiInteroperabilityContractControllerMetadataErrors[keyof PlatformApiInteroperabilityContractControllerMetadataErrors];\n\nexport type PlatformApiInteroperabilityContractControllerMetadataResponses = {\n    /**\n     * One markdown page of the interoperability contract catalog for this datalake\n     */\n    200: string;\n};\n\nexport type PlatformApiInteroperabilityContractControllerMetadataResponse = PlatformApiInteroperabilityContractControllerMetadataResponses[keyof PlatformApiInteroperabilityContractControllerMetadataResponses];\n\nexport type PlatformApiDataActivationClientControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{id}/metadata';\n};\n\nexport type PlatformApiDataActivationClientControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataActivationClientControllerMetadataDetailsError = PlatformApiDataActivationClientControllerMetadataDetailsErrors[keyof PlatformApiDataActivationClientControllerMetadataDetailsErrors];\n\nexport type PlatformApiDataActivationClientControllerMetadataDetailsResponses = {\n    /**\n     * Markdown with connected dataset field documentation\n     */\n    200: string;\n};\n\nexport type PlatformApiDataActivationClientControllerMetadataDetailsResponse = PlatformApiDataActivationClientControllerMetadataDetailsResponses[keyof PlatformApiDataActivationClientControllerMetadataDetailsResponses];\n\nexport type PlatformApiInvitationControllerAcceptData = {\n    body?: never;\n    path: {\n        /**\n         * Invitation ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/invitations/{id}/accept';\n};\n\nexport type PlatformApiInvitationControllerAcceptErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiInvitationControllerAcceptError = PlatformApiInvitationControllerAcceptErrors[keyof PlatformApiInvitationControllerAcceptErrors];\n\nexport type PlatformApiInvitationControllerAcceptResponses = {\n    /**\n     * Membership created\n     */\n    201: MembershipResponse;\n};\n\nexport type PlatformApiInvitationControllerAcceptResponse = PlatformApiInvitationControllerAcceptResponses[keyof PlatformApiInvitationControllerAcceptResponses];\n\nexport type PlatformApiWorkflowRunControllerCancelData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow run ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/workflow-runs/{id}/cancel';\n};\n\nexport type PlatformApiWorkflowRunControllerCancelErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiWorkflowRunControllerCancelError = PlatformApiWorkflowRunControllerCancelErrors[keyof PlatformApiWorkflowRunControllerCancelErrors];\n\nexport type PlatformApiWorkflowRunControllerCancelResponses = {\n    /**\n     * Cancelled run\n     */\n    200: WorkflowRunResponse;\n};\n\nexport type PlatformApiWorkflowRunControllerCancelResponse = PlatformApiWorkflowRunControllerCancelResponses[keyof PlatformApiWorkflowRunControllerCancelResponses];\n\nexport type PlatformApiDatalakeControllerCreateUploadLinkData = {\n    /**\n     * Upload link request\n     */\n    body: UploadLinkRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/upload-link';\n};\n\nexport type PlatformApiDatalakeControllerCreateUploadLinkErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerCreateUploadLinkError = PlatformApiDatalakeControllerCreateUploadLinkErrors[keyof PlatformApiDatalakeControllerCreateUploadLinkErrors];\n\nexport type PlatformApiDatalakeControllerCreateUploadLinkResponses = {\n    /**\n     * Presigned upload link\n     */\n    200: UploadLinkResponse;\n};\n\nexport type PlatformApiDatalakeControllerCreateUploadLinkResponse = PlatformApiDatalakeControllerCreateUploadLinkResponses[keyof PlatformApiDatalakeControllerCreateUploadLinkResponses];\n\nexport type PlatformApiDatalakeControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n    };\n    query?: {\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes';\n};\n\nexport type PlatformApiDatalakeControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDatalakeControllerIndexError = PlatformApiDatalakeControllerIndexErrors[keyof PlatformApiDatalakeControllerIndexErrors];\n\nexport type PlatformApiDatalakeControllerIndexResponses = {\n    /**\n     * Datalake list\n     */\n    200: DatalakeListResponse;\n};\n\nexport type PlatformApiDatalakeControllerIndexResponse = PlatformApiDatalakeControllerIndexResponses[keyof PlatformApiDatalakeControllerIndexResponses];\n\nexport type PlatformApiDatalakeControllerCreateData = {\n    /**\n     * Full Datalake resource (POST semantics — all fields required)\n     */\n    body?: DatalakeRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes';\n};\n\nexport type PlatformApiDatalakeControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerCreateError = PlatformApiDatalakeControllerCreateErrors[keyof PlatformApiDatalakeControllerCreateErrors];\n\nexport type PlatformApiDatalakeControllerCreateResponses = {\n    /**\n     * Datalake created\n     */\n    201: DatalakeResponse;\n};\n\nexport type PlatformApiDatalakeControllerCreateResponse = PlatformApiDatalakeControllerCreateResponses[keyof PlatformApiDatalakeControllerCreateResponses];\n\nexport type PlatformApiDataActivationClientControllerLogShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client slug\n         */\n        slug: string;\n        /**\n         * Log row id\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/logs/{id}';\n};\n\nexport type PlatformApiDataActivationClientControllerLogShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataActivationClientControllerLogShowError = PlatformApiDataActivationClientControllerLogShowErrors[keyof PlatformApiDataActivationClientControllerLogShowErrors];\n\nexport type PlatformApiDataActivationClientControllerLogShowResponses = {\n    /**\n     * DAC log\n     */\n    200: DataActivationClientLogResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerLogShowResponse = PlatformApiDataActivationClientControllerLogShowResponses[keyof PlatformApiDataActivationClientControllerLogShowResponses];\n\nexport type PlatformApiDataSourceControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Source ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}';\n};\n\nexport type PlatformApiDataSourceControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataSourceControllerDeleteError = PlatformApiDataSourceControllerDeleteErrors[keyof PlatformApiDataSourceControllerDeleteErrors];\n\nexport type PlatformApiDataSourceControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiDataSourceControllerDeleteResponse = PlatformApiDataSourceControllerDeleteResponses[keyof PlatformApiDataSourceControllerDeleteResponses];\n\nexport type PlatformApiDataSourceControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Source ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}';\n};\n\nexport type PlatformApiDataSourceControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataSourceControllerShowError = PlatformApiDataSourceControllerShowErrors[keyof PlatformApiDataSourceControllerShowErrors];\n\nexport type PlatformApiDataSourceControllerShowResponses = {\n    /**\n     * Data source\n     */\n    200: DataSourceResponse;\n};\n\nexport type PlatformApiDataSourceControllerShowResponse = PlatformApiDataSourceControllerShowResponses[keyof PlatformApiDataSourceControllerShowResponses];\n\nexport type PlatformApiDataSourceControllerUpdateData = {\n    /**\n     * Full Data Source resource (PUT semantics — all fields required)\n     */\n    body?: DataSourceRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Source ID\n         */\n        id: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}';\n};\n\nexport type PlatformApiDataSourceControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataSourceControllerUpdateError = PlatformApiDataSourceControllerUpdateErrors[keyof PlatformApiDataSourceControllerUpdateErrors];\n\nexport type PlatformApiDataSourceControllerUpdateResponses = {\n    /**\n     * Data source updated\n     */\n    200: DataSourceResponse;\n};\n\nexport type PlatformApiDataSourceControllerUpdateResponse = PlatformApiDataSourceControllerUpdateResponses[keyof PlatformApiDataSourceControllerUpdateResponses];\n\nexport type PlatformApiAgenticWorkflowControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}';\n};\n\nexport type PlatformApiAgenticWorkflowControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n};\n\nexport type PlatformApiAgenticWorkflowControllerDeleteError = PlatformApiAgenticWorkflowControllerDeleteErrors[keyof PlatformApiAgenticWorkflowControllerDeleteErrors];\n\nexport type PlatformApiAgenticWorkflowControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiAgenticWorkflowControllerDeleteResponse = PlatformApiAgenticWorkflowControllerDeleteResponses[keyof PlatformApiAgenticWorkflowControllerDeleteResponses];\n\nexport type PlatformApiAgenticWorkflowControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}';\n};\n\nexport type PlatformApiAgenticWorkflowControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowControllerShowError = PlatformApiAgenticWorkflowControllerShowErrors[keyof PlatformApiAgenticWorkflowControllerShowErrors];\n\nexport type PlatformApiAgenticWorkflowControllerShowResponses = {\n    /**\n     * Workflow\n     */\n    200: AgenticWorkflowResponse;\n};\n\nexport type PlatformApiAgenticWorkflowControllerShowResponse = PlatformApiAgenticWorkflowControllerShowResponses[keyof PlatformApiAgenticWorkflowControllerShowResponses];\n\nexport type PlatformApiAgenticWorkflowControllerUpdateData = {\n    /**\n     * Full workflow resource (PUT semantics — all required fields must be present)\n     */\n    body?: AgenticWorkflowRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}';\n};\n\nexport type PlatformApiAgenticWorkflowControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAgenticWorkflowControllerUpdateError = PlatformApiAgenticWorkflowControllerUpdateErrors[keyof PlatformApiAgenticWorkflowControllerUpdateErrors];\n\nexport type PlatformApiAgenticWorkflowControllerUpdateResponses = {\n    /**\n     * Workflow updated\n     */\n    200: AgenticWorkflowResponse;\n};\n\nexport type PlatformApiAgenticWorkflowControllerUpdateResponse = PlatformApiAgenticWorkflowControllerUpdateResponses[keyof PlatformApiAgenticWorkflowControllerUpdateResponses];\n\nexport type PlatformApiActionStatusUpdaterControllerRefreshData = {\n    /**\n     * Optional updater_body override\n     */\n    body?: ActionStatusUpdaterRefreshRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Action Status Updater ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}/refresh';\n};\n\nexport type PlatformApiActionStatusUpdaterControllerRefreshErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerRefreshError = PlatformApiActionStatusUpdaterControllerRefreshErrors[keyof PlatformApiActionStatusUpdaterControllerRefreshErrors];\n\nexport type PlatformApiActionStatusUpdaterControllerRefreshResponses = {\n    /**\n     * Poll enqueued; updater row as-is\n     */\n    202: ActionStatusUpdaterResponse;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerRefreshResponse = PlatformApiActionStatusUpdaterControllerRefreshResponses[keyof PlatformApiActionStatusUpdaterControllerRefreshResponses];\n\nexport type PlatformApiDatalakeControllerChecksumData = {\n    /**\n     * Full Datalake resource (same shape as create/update)\n     */\n    body?: DatalakeRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/checksum';\n};\n\nexport type PlatformApiDatalakeControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerChecksumError = PlatformApiDatalakeControllerChecksumErrors[keyof PlatformApiDatalakeControllerChecksumErrors];\n\nexport type PlatformApiDatalakeControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiDatalakeControllerChecksumResponse = PlatformApiDatalakeControllerChecksumResponses[keyof PlatformApiDatalakeControllerChecksumResponses];\n\nexport type PlatformApiDataActivationClientControllerIngestData = {\n    /**\n     * JSON payload\n     */\n    body: IngestRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client slug\n         */\n        slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/ingest';\n};\n\nexport type PlatformApiDataActivationClientControllerIngestErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataActivationClientControllerIngestError = PlatformApiDataActivationClientControllerIngestErrors[keyof PlatformApiDataActivationClientControllerIngestErrors];\n\nexport type PlatformApiDataActivationClientControllerIngestResponses = {\n    /**\n     * Ingest response\n     */\n    202: IngestResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerIngestResponse = PlatformApiDataActivationClientControllerIngestResponses[keyof PlatformApiDataActivationClientControllerIngestResponses];\n\nexport type PlatformApiActionStatusUpdaterControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Action Status Updater ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}';\n};\n\nexport type PlatformApiActionStatusUpdaterControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerDeleteError = PlatformApiActionStatusUpdaterControllerDeleteErrors[keyof PlatformApiActionStatusUpdaterControllerDeleteErrors];\n\nexport type PlatformApiActionStatusUpdaterControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerDeleteResponse = PlatformApiActionStatusUpdaterControllerDeleteResponses[keyof PlatformApiActionStatusUpdaterControllerDeleteResponses];\n\nexport type PlatformApiActionStatusUpdaterControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Action Status Updater ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}';\n};\n\nexport type PlatformApiActionStatusUpdaterControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiActionStatusUpdaterControllerShowError = PlatformApiActionStatusUpdaterControllerShowErrors[keyof PlatformApiActionStatusUpdaterControllerShowErrors];\n\nexport type PlatformApiActionStatusUpdaterControllerShowResponses = {\n    /**\n     * Action status updater\n     */\n    200: ActionStatusUpdaterResponse;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerShowResponse = PlatformApiActionStatusUpdaterControllerShowResponses[keyof PlatformApiActionStatusUpdaterControllerShowResponses];\n\nexport type PlatformApiActionStatusUpdaterControllerUpdateData = {\n    /**\n     * Full Action Status Updater resource (PUT semantics — all fields required)\n     */\n    body?: ActionStatusUpdaterRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Action Status Updater ID\n         */\n        id: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}';\n};\n\nexport type PlatformApiActionStatusUpdaterControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerUpdateError = PlatformApiActionStatusUpdaterControllerUpdateErrors[keyof PlatformApiActionStatusUpdaterControllerUpdateErrors];\n\nexport type PlatformApiActionStatusUpdaterControllerUpdateResponses = {\n    /**\n     * Action status updater updated\n     */\n    200: ActionStatusUpdaterResponse;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerUpdateResponse = PlatformApiActionStatusUpdaterControllerUpdateResponses[keyof PlatformApiActionStatusUpdaterControllerUpdateResponses];\n\nexport type PlatformApiAdvancedMigrationControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations';\n};\n\nexport type PlatformApiAdvancedMigrationControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAdvancedMigrationControllerIndexError = PlatformApiAdvancedMigrationControllerIndexErrors[keyof PlatformApiAdvancedMigrationControllerIndexErrors];\n\nexport type PlatformApiAdvancedMigrationControllerIndexResponses = {\n    /**\n     * Advanced migration list\n     */\n    200: AdvancedMigrationListResponse;\n};\n\nexport type PlatformApiAdvancedMigrationControllerIndexResponse = PlatformApiAdvancedMigrationControllerIndexResponses[keyof PlatformApiAdvancedMigrationControllerIndexResponses];\n\nexport type PlatformApiAdvancedMigrationControllerCreateData = {\n    /**\n     * Full advanced migration resource (PUT semantics — all fields required)\n     */\n    body?: AdvancedMigrationRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations';\n};\n\nexport type PlatformApiAdvancedMigrationControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAdvancedMigrationControllerCreateError = PlatformApiAdvancedMigrationControllerCreateErrors[keyof PlatformApiAdvancedMigrationControllerCreateErrors];\n\nexport type PlatformApiAdvancedMigrationControllerCreateResponses = {\n    /**\n     * Advanced migration created\n     */\n    201: AdvancedMigrationResponse;\n};\n\nexport type PlatformApiAdvancedMigrationControllerCreateResponse = PlatformApiAdvancedMigrationControllerCreateResponses[keyof PlatformApiAdvancedMigrationControllerCreateResponses];\n\nexport type PlatformApiToolControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/metadata';\n};\n\nexport type PlatformApiToolControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiToolControllerMetadataError = PlatformApiToolControllerMetadataErrors[keyof PlatformApiToolControllerMetadataErrors];\n\nexport type PlatformApiToolControllerMetadataResponses = {\n    /**\n     * One markdown page of the tools catalog for this datalake\n     */\n    200: string;\n};\n\nexport type PlatformApiToolControllerMetadataResponse = PlatformApiToolControllerMetadataResponses[keyof PlatformApiToolControllerMetadataResponses];\n\nexport type PlatformApiAiAgentControllerChecksumData = {\n    /**\n     * Full AI Agent resource (same shape as create/update)\n     */\n    body?: AiAgentRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/checksum';\n};\n\nexport type PlatformApiAiAgentControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAiAgentControllerChecksumError = PlatformApiAiAgentControllerChecksumErrors[keyof PlatformApiAiAgentControllerChecksumErrors];\n\nexport type PlatformApiAiAgentControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiAiAgentControllerChecksumResponse = PlatformApiAiAgentControllerChecksumResponses[keyof PlatformApiAiAgentControllerChecksumResponses];\n\nexport type PlatformApiWorkflowRunControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow run ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/workflow-runs/{id}';\n};\n\nexport type PlatformApiWorkflowRunControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiWorkflowRunControllerShowError = PlatformApiWorkflowRunControllerShowErrors[keyof PlatformApiWorkflowRunControllerShowErrors];\n\nexport type PlatformApiWorkflowRunControllerShowResponses = {\n    /**\n     * Workflow run\n     */\n    200: WorkflowRunResponse;\n};\n\nexport type PlatformApiWorkflowRunControllerShowResponse = PlatformApiWorkflowRunControllerShowResponses[keyof PlatformApiWorkflowRunControllerShowResponses];\n\nexport type PlatformApiDataActivationClientControllerBatchesIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client slug\n         */\n        slug: string;\n    };\n    query?: {\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/batches';\n};\n\nexport type PlatformApiDataActivationClientControllerBatchesIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataActivationClientControllerBatchesIndexError = PlatformApiDataActivationClientControllerBatchesIndexErrors[keyof PlatformApiDataActivationClientControllerBatchesIndexErrors];\n\nexport type PlatformApiDataActivationClientControllerBatchesIndexResponses = {\n    /**\n     * DAC run list\n     */\n    200: DataActivationClientBatchListResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerBatchesIndexResponse = PlatformApiDataActivationClientControllerBatchesIndexResponses[keyof PlatformApiDataActivationClientControllerBatchesIndexResponses];\n\nexport type PlatformApiDatalakeControllerSystemDatasetsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/system-datasets';\n};\n\nexport type PlatformApiDatalakeControllerSystemDatasetsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDatalakeControllerSystemDatasetsError = PlatformApiDatalakeControllerSystemDatasetsErrors[keyof PlatformApiDatalakeControllerSystemDatasetsErrors];\n\nexport type PlatformApiDatalakeControllerSystemDatasetsResponses = {\n    /**\n     * The datasets the platform registers\n     */\n    200: SystemDatasetListResponse;\n};\n\nexport type PlatformApiDatalakeControllerSystemDatasetsResponse = PlatformApiDatalakeControllerSystemDatasetsResponses[keyof PlatformApiDatalakeControllerSystemDatasetsResponses];\n\nexport type PlatformApiAiAgentControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents';\n};\n\nexport type PlatformApiAiAgentControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAiAgentControllerIndexError = PlatformApiAiAgentControllerIndexErrors[keyof PlatformApiAiAgentControllerIndexErrors];\n\nexport type PlatformApiAiAgentControllerIndexResponses = {\n    /**\n     * AI agent list\n     */\n    200: AiAgentListResponse;\n};\n\nexport type PlatformApiAiAgentControllerIndexResponse = PlatformApiAiAgentControllerIndexResponses[keyof PlatformApiAiAgentControllerIndexResponses];\n\nexport type PlatformApiAiAgentControllerCreateData = {\n    /**\n     * Full AI Agent resource (PUT semantics — all fields required)\n     */\n    body?: AiAgentRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents';\n};\n\nexport type PlatformApiAiAgentControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAiAgentControllerCreateError = PlatformApiAiAgentControllerCreateErrors[keyof PlatformApiAiAgentControllerCreateErrors];\n\nexport type PlatformApiAiAgentControllerCreateResponses = {\n    /**\n     * AI agent created\n     */\n    201: AiAgentResponse;\n};\n\nexport type PlatformApiAiAgentControllerCreateResponse = PlatformApiAiAgentControllerCreateResponses[keyof PlatformApiAiAgentControllerCreateResponses];\n\nexport type PlatformApiWorkflowRunControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/workflow-runs';\n};\n\nexport type PlatformApiWorkflowRunControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiWorkflowRunControllerIndexError = PlatformApiWorkflowRunControllerIndexErrors[keyof PlatformApiWorkflowRunControllerIndexErrors];\n\nexport type PlatformApiWorkflowRunControllerIndexResponses = {\n    /**\n     * Workflow run list\n     */\n    200: WorkflowRunListResponse;\n};\n\nexport type PlatformApiWorkflowRunControllerIndexResponse = PlatformApiWorkflowRunControllerIndexResponses[keyof PlatformApiWorkflowRunControllerIndexResponses];\n\nexport type PlatformApiGenericTableControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/metadata';\n};\n\nexport type PlatformApiGenericTableControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiGenericTableControllerMetadataError = PlatformApiGenericTableControllerMetadataErrors[keyof PlatformApiGenericTableControllerMetadataErrors];\n\nexport type PlatformApiGenericTableControllerMetadataResponses = {\n    /**\n     * One markdown page of the generic table catalog for this datalake\n     */\n    200: string;\n};\n\nexport type PlatformApiGenericTableControllerMetadataResponse = PlatformApiGenericTableControllerMetadataResponses[keyof PlatformApiGenericTableControllerMetadataResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/workflow-logs';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexError = PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexErrors[keyof PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponses = {\n    /**\n     * Execution log list\n     */\n    200: WorkflowLogListResponse;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponse = PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponses[keyof PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexResponses];\n\nexport type PlatformApiDataActivationClientControllerBatchShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client slug\n         */\n        slug: string;\n        /**\n         * The run identifier, as returned by run-manually or an ingest\n         */\n        batch_id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/batches/{batch_id}';\n};\n\nexport type PlatformApiDataActivationClientControllerBatchShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataActivationClientControllerBatchShowError = PlatformApiDataActivationClientControllerBatchShowErrors[keyof PlatformApiDataActivationClientControllerBatchShowErrors];\n\nexport type PlatformApiDataActivationClientControllerBatchShowResponses = {\n    /**\n     * DAC run\n     */\n    200: DataActivationClientBatchResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerBatchShowResponse = PlatformApiDataActivationClientControllerBatchShowResponses[keyof PlatformApiDataActivationClientControllerBatchShowResponses];\n\nexport type PlatformApiInteroperabilityContractControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Contract ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{id}/metadata';\n};\n\nexport type PlatformApiInteroperabilityContractControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiInteroperabilityContractControllerMetadataDetailsError = PlatformApiInteroperabilityContractControllerMetadataDetailsErrors[keyof PlatformApiInteroperabilityContractControllerMetadataDetailsErrors];\n\nexport type PlatformApiInteroperabilityContractControllerMetadataDetailsResponses = {\n    /**\n     * Markdown with resource field documentation\n     */\n    200: string;\n};\n\nexport type PlatformApiInteroperabilityContractControllerMetadataDetailsResponse = PlatformApiInteroperabilityContractControllerMetadataDetailsResponses[keyof PlatformApiInteroperabilityContractControllerMetadataDetailsResponses];\n\nexport type PlatformApiDatalakeControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/metadata';\n};\n\nexport type PlatformApiDatalakeControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDatalakeControllerMetadataDetailsError = PlatformApiDatalakeControllerMetadataDetailsErrors[keyof PlatformApiDatalakeControllerMetadataDetailsErrors];\n\nexport type PlatformApiDatalakeControllerMetadataDetailsResponses = {\n    /**\n     * Markdown document with domain metadata\n     */\n    200: string;\n};\n\nexport type PlatformApiDatalakeControllerMetadataDetailsResponse = PlatformApiDatalakeControllerMetadataDetailsResponses[keyof PlatformApiDatalakeControllerMetadataDetailsResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerExecuteData = {\n    /**\n     * Execute payload\n     */\n    body: ExecuteActionRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/execute';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerExecuteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerExecuteError = PlatformApiAgenticWorkflowOperationsControllerExecuteErrors[keyof PlatformApiAgenticWorkflowOperationsControllerExecuteErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerExecuteResponses = {\n    /**\n     * Execution result\n     */\n    200: ExecuteActionResponse;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerExecuteResponse = PlatformApiAgenticWorkflowOperationsControllerExecuteResponses[keyof PlatformApiAgenticWorkflowOperationsControllerExecuteResponses];\n\nexport type PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingData = {\n    /**\n     * Engagement report\n     */\n    body: AuthenticatedLinkUpdateMessageTrackingRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/authenticated-links/update-message-tracking';\n};\n\nexport type PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingErrors = {\n    /**\n     * Unauthorized\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Link expired\n     */\n    410: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation error\n     */\n    422: {\n        [key: string]: unknown;\n    };\n    /**\n     * Datalake unavailable\n     */\n    503: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingError = PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingErrors[keyof PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingErrors];\n\nexport type PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingResponses = {\n    /**\n     * The link, with its message\n     */\n    200: AuthenticatedLinkResponse;\n};\n\nexport type PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingResponse = PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingResponses[keyof PlatformApiAuthenticatedLinkControllerUpdateMessageTrackingResponses];\n\nexport type PlatformApiDatasetControllerSearchData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Dataset type (e.g. legal_entity, document, generic_table)\n         */\n        dataset: string;\n    };\n    query?: {\n        /**\n         * UserSearch ID. Omit to search the resource without a SQL search.\n         */\n        user_search_id?: string;\n        /**\n         * Optional override for the data access mode used by this read. Defaults to the session's `data_access_mode`. The session's capability ceiling still applies — escalating beyond it returns 403.\n         */\n        data_access_mode?: 'raw' | 'tokenized' | 'redacted';\n        /**\n         * Outer page over the cached search_results chunk.\n         */\n        outer_pagination?: OuterPagination;\n        /**\n         * Inner search input over the resource — page, sort, global_search.\n         */\n        inner_search?: InnerSearch;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/datasets/{dataset}/search';\n};\n\nexport type PlatformApiDatasetControllerSearchErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Forbidden\n     */\n    403: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatasetControllerSearchError = PlatformApiDatasetControllerSearchErrors[keyof PlatformApiDatasetControllerSearchErrors];\n\nexport type PlatformApiDatasetControllerSearchResponses = {\n    /**\n     * Dataset search results\n     */\n    200: DatasetSearchResponse;\n};\n\nexport type PlatformApiDatasetControllerSearchResponse = PlatformApiDatasetControllerSearchResponses[keyof PlatformApiDatasetControllerSearchResponses];\n\nexport type PlatformApiDatasetControllerCreateUserSearchData = {\n    /**\n     * UserSearch request body\n     */\n    body?: UserSearchRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Dataset type (e.g. legal_entity, document, generic_table)\n         */\n        dataset: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/datasets/{dataset}/user-searches';\n};\n\nexport type PlatformApiDatasetControllerCreateUserSearchErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Forbidden\n     */\n    403: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatasetControllerCreateUserSearchError = PlatformApiDatasetControllerCreateUserSearchErrors[keyof PlatformApiDatasetControllerCreateUserSearchErrors];\n\nexport type PlatformApiDatasetControllerCreateUserSearchResponses = {\n    /**\n     * UserSearch created\n     */\n    201: UserSearchResponse;\n};\n\nexport type PlatformApiDatasetControllerCreateUserSearchResponse = PlatformApiDatasetControllerCreateUserSearchResponses[keyof PlatformApiDatasetControllerCreateUserSearchResponses];\n\nexport type PlatformApiDatalakeControllerDerivedLakeTablesData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Primary datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Which copy to read\n         */\n        mode: 'tokenized' | 'redacted';\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tokenization/{mode}/tables';\n};\n\nexport type PlatformApiDatalakeControllerDerivedLakeTablesErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerDerivedLakeTablesError = PlatformApiDatalakeControllerDerivedLakeTablesErrors[keyof PlatformApiDatalakeControllerDerivedLakeTablesErrors];\n\nexport type PlatformApiDatalakeControllerDerivedLakeTablesResponses = {\n    /**\n     * Every table the copy carries\n     */\n    200: DerivedLakeTablesResponse;\n};\n\nexport type PlatformApiDatalakeControllerDerivedLakeTablesResponse = PlatformApiDatalakeControllerDerivedLakeTablesResponses[keyof PlatformApiDatalakeControllerDerivedLakeTablesResponses];\n\nexport type PlatformApiGenericTableControllerChecksumData = {\n    /**\n     * Full Generic Table resource (same shape as create/update)\n     */\n    body?: GenericTableRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/checksum';\n};\n\nexport type PlatformApiGenericTableControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiGenericTableControllerChecksumError = PlatformApiGenericTableControllerChecksumErrors[keyof PlatformApiGenericTableControllerChecksumErrors];\n\nexport type PlatformApiGenericTableControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiGenericTableControllerChecksumResponse = PlatformApiGenericTableControllerChecksumResponses[keyof PlatformApiGenericTableControllerChecksumResponses];\n\nexport type PlatformApiDataSourceControllerChecksumData = {\n    /**\n     * Full Data Source resource (same shape as create/update)\n     */\n    body?: DataSourceRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/checksum';\n};\n\nexport type PlatformApiDataSourceControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataSourceControllerChecksumError = PlatformApiDataSourceControllerChecksumErrors[keyof PlatformApiDataSourceControllerChecksumErrors];\n\nexport type PlatformApiDataSourceControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiDataSourceControllerChecksumResponse = PlatformApiDataSourceControllerChecksumResponses[keyof PlatformApiDataSourceControllerChecksumResponses];\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/metadata';\n};\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataError = PlatformApiActionStatusUpdaterControllerMetadataErrors[keyof PlatformApiActionStatusUpdaterControllerMetadataErrors];\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataResponses = {\n    /**\n     * One markdown page of the action status updater catalog for this datalake\n     */\n    200: string;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataResponse = PlatformApiActionStatusUpdaterControllerMetadataResponses[keyof PlatformApiActionStatusUpdaterControllerMetadataResponses];\n\nexport type PlatformApiDataActivationClientControllerIngestFileData = {\n    /**\n     * Ingest file request\n     */\n    body: IngestFileRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client slug\n         */\n        slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/ingest-file';\n};\n\nexport type PlatformApiDataActivationClientControllerIngestFileErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataActivationClientControllerIngestFileError = PlatformApiDataActivationClientControllerIngestFileErrors[keyof PlatformApiDataActivationClientControllerIngestFileErrors];\n\nexport type PlatformApiDataActivationClientControllerIngestFileResponses = {\n    /**\n     * Ingest file response\n     */\n    200: IngestFileResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerIngestFileResponse = PlatformApiDataActivationClientControllerIngestFileResponses[keyof PlatformApiDataActivationClientControllerIngestFileResponses];\n\nexport type PlatformApiDataSourceControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources';\n};\n\nexport type PlatformApiDataSourceControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataSourceControllerIndexError = PlatformApiDataSourceControllerIndexErrors[keyof PlatformApiDataSourceControllerIndexErrors];\n\nexport type PlatformApiDataSourceControllerIndexResponses = {\n    /**\n     * Data source list\n     */\n    200: DataSourceListResponse;\n};\n\nexport type PlatformApiDataSourceControllerIndexResponse = PlatformApiDataSourceControllerIndexResponses[keyof PlatformApiDataSourceControllerIndexResponses];\n\nexport type PlatformApiDataSourceControllerCreateData = {\n    /**\n     * Full Data Source resource (PUT semantics — all fields required)\n     */\n    body?: DataSourceRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources';\n};\n\nexport type PlatformApiDataSourceControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataSourceControllerCreateError = PlatformApiDataSourceControllerCreateErrors[keyof PlatformApiDataSourceControllerCreateErrors];\n\nexport type PlatformApiDataSourceControllerCreateResponses = {\n    /**\n     * Data source created\n     */\n    201: DataSourceResponse;\n};\n\nexport type PlatformApiDataSourceControllerCreateResponse = PlatformApiDataSourceControllerCreateResponses[keyof PlatformApiDataSourceControllerCreateResponses];\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerSignUpData = {\n    /**\n     * User registration\n     */\n    body: SignUpRequestWritable;\n    path?: never;\n    query?: never;\n    url: '/api/v1/admin/sign-up';\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerSignUpErrors = {\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerSignUpError = PlatformApiIntegrationTestOnlyAdminControllerSignUpErrors[keyof PlatformApiIntegrationTestOnlyAdminControllerSignUpErrors];\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerSignUpResponses = {\n    /**\n     * User registered (unconfirmed)\n     */\n    201: UserResponse;\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerSignUpResponse = PlatformApiIntegrationTestOnlyAdminControllerSignUpResponses[keyof PlatformApiIntegrationTestOnlyAdminControllerSignUpResponses];\n\nexport type PlatformApiDataActivationClientControllerRunManuallyData = {\n    /**\n     * Optional tool_call override\n     */\n    body?: RunManuallyRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client slug\n         */\n        slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/run-manually';\n};\n\nexport type PlatformApiDataActivationClientControllerRunManuallyErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataActivationClientControllerRunManuallyError = PlatformApiDataActivationClientControllerRunManuallyErrors[keyof PlatformApiDataActivationClientControllerRunManuallyErrors];\n\nexport type PlatformApiDataActivationClientControllerRunManuallyResponses = {\n    /**\n     * Run enqueued\n     */\n    202: RunManuallyResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerRunManuallyResponse = PlatformApiDataActivationClientControllerRunManuallyResponses[keyof PlatformApiDataActivationClientControllerRunManuallyResponses];\n\nexport type PlatformApiAiAgentControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/metadata';\n};\n\nexport type PlatformApiAiAgentControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAiAgentControllerMetadataError = PlatformApiAiAgentControllerMetadataErrors[keyof PlatformApiAiAgentControllerMetadataErrors];\n\nexport type PlatformApiAiAgentControllerMetadataResponses = {\n    /**\n     * One markdown page of the AI agent catalog for this datalake\n     */\n    200: string;\n};\n\nexport type PlatformApiAiAgentControllerMetadataResponse = PlatformApiAiAgentControllerMetadataResponses[keyof PlatformApiAiAgentControllerMetadataResponses];\n\nexport type PlatformApiActionStatusUpdaterControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters';\n};\n\nexport type PlatformApiActionStatusUpdaterControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiActionStatusUpdaterControllerIndexError = PlatformApiActionStatusUpdaterControllerIndexErrors[keyof PlatformApiActionStatusUpdaterControllerIndexErrors];\n\nexport type PlatformApiActionStatusUpdaterControllerIndexResponses = {\n    /**\n     * Action status updater list\n     */\n    200: ActionStatusUpdaterListResponse;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerIndexResponse = PlatformApiActionStatusUpdaterControllerIndexResponses[keyof PlatformApiActionStatusUpdaterControllerIndexResponses];\n\nexport type PlatformApiActionStatusUpdaterControllerCreateData = {\n    /**\n     * Full Action Status Updater resource (PUT semantics — all fields required)\n     */\n    body?: ActionStatusUpdaterRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters';\n};\n\nexport type PlatformApiActionStatusUpdaterControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerCreateError = PlatformApiActionStatusUpdaterControllerCreateErrors[keyof PlatformApiActionStatusUpdaterControllerCreateErrors];\n\nexport type PlatformApiActionStatusUpdaterControllerCreateResponses = {\n    /**\n     * Action status updater created\n     */\n    201: ActionStatusUpdaterResponse;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerCreateResponse = PlatformApiActionStatusUpdaterControllerCreateResponses[keyof PlatformApiActionStatusUpdaterControllerCreateResponses];\n\nexport type PlatformApiAiAgentControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * AI Agent ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}';\n};\n\nexport type PlatformApiAiAgentControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Agent is attached to a workflow and cannot be deleted\n     */\n    409: {\n        errors?: {\n            [key: string]: unknown;\n        };\n    };\n};\n\nexport type PlatformApiAiAgentControllerDeleteError = PlatformApiAiAgentControllerDeleteErrors[keyof PlatformApiAiAgentControllerDeleteErrors];\n\nexport type PlatformApiAiAgentControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiAiAgentControllerDeleteResponse = PlatformApiAiAgentControllerDeleteResponses[keyof PlatformApiAiAgentControllerDeleteResponses];\n\nexport type PlatformApiAiAgentControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * AI Agent ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}';\n};\n\nexport type PlatformApiAiAgentControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAiAgentControllerShowError = PlatformApiAiAgentControllerShowErrors[keyof PlatformApiAiAgentControllerShowErrors];\n\nexport type PlatformApiAiAgentControllerShowResponses = {\n    /**\n     * AI agent\n     */\n    200: AiAgentResponse;\n};\n\nexport type PlatformApiAiAgentControllerShowResponse = PlatformApiAiAgentControllerShowResponses[keyof PlatformApiAiAgentControllerShowResponses];\n\nexport type PlatformApiAiAgentControllerUpdateData = {\n    /**\n     * Full AI Agent resource (PUT semantics — all fields required)\n     */\n    body?: AiAgentRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * AI Agent ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}';\n};\n\nexport type PlatformApiAiAgentControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAiAgentControllerUpdateError = PlatformApiAiAgentControllerUpdateErrors[keyof PlatformApiAiAgentControllerUpdateErrors];\n\nexport type PlatformApiAiAgentControllerUpdateResponses = {\n    /**\n     * AI agent updated\n     */\n    200: AiAgentResponse;\n};\n\nexport type PlatformApiAiAgentControllerUpdateResponse = PlatformApiAiAgentControllerUpdateResponses[keyof PlatformApiAiAgentControllerUpdateResponses];\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerConfirmUserData = {\n    body?: never;\n    path: {\n        /**\n         * Target user ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/admin/users/{id}/confirm';\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerConfirmUserErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Forbidden\n     */\n    403: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerConfirmUserError = PlatformApiIntegrationTestOnlyAdminControllerConfirmUserErrors[keyof PlatformApiIntegrationTestOnlyAdminControllerConfirmUserErrors];\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerConfirmUserResponses = {\n    /**\n     * User confirmed (or already confirmed)\n     */\n    200: UserResponse;\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerConfirmUserResponse = PlatformApiIntegrationTestOnlyAdminControllerConfirmUserResponses[keyof PlatformApiIntegrationTestOnlyAdminControllerConfirmUserResponses];\n\nexport type PlatformApiTemplatesControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/system-templates';\n};\n\nexport type PlatformApiTemplatesControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiTemplatesControllerIndexError = PlatformApiTemplatesControllerIndexErrors[keyof PlatformApiTemplatesControllerIndexErrors];\n\nexport type PlatformApiTemplatesControllerIndexResponses = {\n    /**\n     * System template list\n     */\n    200: SystemTemplateListResponse;\n};\n\nexport type PlatformApiTemplatesControllerIndexResponse = PlatformApiTemplatesControllerIndexResponses[keyof PlatformApiTemplatesControllerIndexResponses];\n\nexport type PlatformApiActionStatusUpdaterControllerChecksumData = {\n    /**\n     * Full Action Status Updater resource (same shape as create/update)\n     */\n    body?: ActionStatusUpdaterRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/checksum';\n};\n\nexport type PlatformApiActionStatusUpdaterControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerChecksumError = PlatformApiActionStatusUpdaterControllerChecksumErrors[keyof PlatformApiActionStatusUpdaterControllerChecksumErrors];\n\nexport type PlatformApiActionStatusUpdaterControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerChecksumResponse = PlatformApiActionStatusUpdaterControllerChecksumResponses[keyof PlatformApiActionStatusUpdaterControllerChecksumResponses];\n\nexport type PlatformApiAiAgentControllerInvokeData = {\n    /**\n     * Input variables for the agent\n     */\n    body?: AiAgentInvokeRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * AI Agent ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}/invoke';\n};\n\nexport type PlatformApiAiAgentControllerInvokeErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAiAgentControllerInvokeError = PlatformApiAiAgentControllerInvokeErrors[keyof PlatformApiAiAgentControllerInvokeErrors];\n\nexport type PlatformApiAiAgentControllerInvokeResponses = {\n    /**\n     * Agent invocation result\n     */\n    200: AiAgentInvokeResponse;\n};\n\nexport type PlatformApiAiAgentControllerInvokeResponse = PlatformApiAiAgentControllerInvokeResponses[keyof PlatformApiAiAgentControllerInvokeResponses];\n\nexport type PlatformApiSessionControllerDeleteData = {\n    body?: never;\n    path?: never;\n    query?: never;\n    url: '/api/v1/sessions';\n};\n\nexport type PlatformApiSessionControllerDeleteErrors = {\n    /**\n     * Invalid or missing Bearer token\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Cannot revoke non-Bearer session\n     */\n    422: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiSessionControllerDeleteError = PlatformApiSessionControllerDeleteErrors[keyof PlatformApiSessionControllerDeleteErrors];\n\nexport type PlatformApiSessionControllerDeleteResponses = {\n    /**\n     * Session revoked\n     */\n    204: unknown;\n};\n\nexport type PlatformApiSessionControllerCreateData = {\n    /**\n     * User credentials\n     */\n    body: SignInRequest;\n    path?: never;\n    query?: never;\n    url: '/api/v1/sessions';\n};\n\nexport type PlatformApiSessionControllerCreateErrors = {\n    /**\n     * Invalid credentials\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Missing required fields\n     */\n    422: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiSessionControllerCreateError = PlatformApiSessionControllerCreateErrors[keyof PlatformApiSessionControllerCreateErrors];\n\nexport type PlatformApiSessionControllerCreateResponses = {\n    /**\n     * Session created\n     */\n    201: SessionResponse;\n};\n\nexport type PlatformApiSessionControllerCreateResponse = PlatformApiSessionControllerCreateResponses[keyof PlatformApiSessionControllerCreateResponses];\n\nexport type PlatformApiDataActivationClientControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/metadata';\n};\n\nexport type PlatformApiDataActivationClientControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataActivationClientControllerMetadataError = PlatformApiDataActivationClientControllerMetadataErrors[keyof PlatformApiDataActivationClientControllerMetadataErrors];\n\nexport type PlatformApiDataActivationClientControllerMetadataResponses = {\n    /**\n     * One markdown page of the data activation client catalog for this datalake\n     */\n    200: string;\n};\n\nexport type PlatformApiDataActivationClientControllerMetadataResponse = PlatformApiDataActivationClientControllerMetadataResponses[keyof PlatformApiDataActivationClientControllerMetadataResponses];\n\nexport type PlatformApiAgenticWorkflowControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows';\n};\n\nexport type PlatformApiAgenticWorkflowControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowControllerIndexError = PlatformApiAgenticWorkflowControllerIndexErrors[keyof PlatformApiAgenticWorkflowControllerIndexErrors];\n\nexport type PlatformApiAgenticWorkflowControllerIndexResponses = {\n    /**\n     * Workflow list\n     */\n    200: AgenticWorkflowListResponse;\n};\n\nexport type PlatformApiAgenticWorkflowControllerIndexResponse = PlatformApiAgenticWorkflowControllerIndexResponses[keyof PlatformApiAgenticWorkflowControllerIndexResponses];\n\nexport type PlatformApiAgenticWorkflowControllerCreateData = {\n    /**\n     * Full workflow resource (PUT semantics — all required fields must be present)\n     */\n    body?: AgenticWorkflowRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows';\n};\n\nexport type PlatformApiAgenticWorkflowControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAgenticWorkflowControllerCreateError = PlatformApiAgenticWorkflowControllerCreateErrors[keyof PlatformApiAgenticWorkflowControllerCreateErrors];\n\nexport type PlatformApiAgenticWorkflowControllerCreateResponses = {\n    /**\n     * Workflow created\n     */\n    201: AgenticWorkflowResponse;\n};\n\nexport type PlatformApiAgenticWorkflowControllerCreateResponse = PlatformApiAgenticWorkflowControllerCreateResponses[keyof PlatformApiAgenticWorkflowControllerCreateResponses];\n\nexport type PlatformApiDataActivationClientControllerLogsIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Activation Client slug\n         */\n        slug: string;\n    };\n    query?: {\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients/{slug}/logs';\n};\n\nexport type PlatformApiDataActivationClientControllerLogsIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataActivationClientControllerLogsIndexError = PlatformApiDataActivationClientControllerLogsIndexErrors[keyof PlatformApiDataActivationClientControllerLogsIndexErrors];\n\nexport type PlatformApiDataActivationClientControllerLogsIndexResponses = {\n    /**\n     * DAC log list\n     */\n    200: DataActivationClientLogListResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerLogsIndexResponse = PlatformApiDataActivationClientControllerLogsIndexResponses[keyof PlatformApiDataActivationClientControllerLogsIndexResponses];\n\nexport type PlatformApiToolControllerTestInvocationData = {\n    /**\n     * Test invocation payload — `tool_call` polymorphic on `__type__`.\n     */\n    body?: ManualToolInvocationRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Tool ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/{id}/test-invocation';\n};\n\nexport type PlatformApiToolControllerTestInvocationErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiToolControllerTestInvocationError = PlatformApiToolControllerTestInvocationErrors[keyof PlatformApiToolControllerTestInvocationErrors];\n\nexport type PlatformApiToolControllerTestInvocationResponses = {\n    /**\n     * Invocation recorded — inspect `status` for outcome\n     */\n    200: ManualToolInvocationResponse;\n};\n\nexport type PlatformApiToolControllerTestInvocationResponse = PlatformApiToolControllerTestInvocationResponses[keyof PlatformApiToolControllerTestInvocationResponses];\n\nexport type PlatformApiAiAgentControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * AI Agent ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/ai-agents/{id}/metadata';\n};\n\nexport type PlatformApiAiAgentControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAiAgentControllerMetadataDetailsError = PlatformApiAiAgentControllerMetadataDetailsErrors[keyof PlatformApiAiAgentControllerMetadataDetailsErrors];\n\nexport type PlatformApiAiAgentControllerMetadataDetailsResponses = {\n    /**\n     * Markdown body for the requested AI agent\n     */\n    200: string;\n};\n\nexport type PlatformApiAiAgentControllerMetadataDetailsResponse = PlatformApiAiAgentControllerMetadataDetailsResponses[keyof PlatformApiAiAgentControllerMetadataDetailsResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexError = PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexErrors[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponses = {\n    /**\n     * Batch log list\n     */\n    200: BatchLogListResponse;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponse = PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponses[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexResponses];\n\nexport type PlatformApiAdvancedMigrationControllerChecksumData = {\n    /**\n     * Full advanced migration resource (same shape as create/replace)\n     */\n    body?: AdvancedMigrationRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/checksum';\n};\n\nexport type PlatformApiAdvancedMigrationControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAdvancedMigrationControllerChecksumError = PlatformApiAdvancedMigrationControllerChecksumErrors[keyof PlatformApiAdvancedMigrationControllerChecksumErrors];\n\nexport type PlatformApiAdvancedMigrationControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiAdvancedMigrationControllerChecksumResponse = PlatformApiAdvancedMigrationControllerChecksumResponses[keyof PlatformApiAdvancedMigrationControllerChecksumResponses];\n\nexport type PlatformApiDatalakeControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/metadata';\n};\n\nexport type PlatformApiDatalakeControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDatalakeControllerMetadataError = PlatformApiDatalakeControllerMetadataErrors[keyof PlatformApiDatalakeControllerMetadataErrors];\n\nexport type PlatformApiDatalakeControllerMetadataResponses = {\n    /**\n     * One markdown page of the datalake catalog for this tenant\n     */\n    200: string;\n};\n\nexport type PlatformApiDatalakeControllerMetadataResponse = PlatformApiDatalakeControllerMetadataResponses[keyof PlatformApiDatalakeControllerMetadataResponses];\n\nexport type PlatformApiDatalakeControllerResyncTableData = {\n    /**\n     * Which table to re-copy\n     */\n    body: ResyncTableRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Primary datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Which copy to repair\n         */\n        mode: 'tokenized' | 'redacted';\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tokenization/{mode}/resync';\n};\n\nexport type PlatformApiDatalakeControllerResyncTableErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerResyncTableError = PlatformApiDatalakeControllerResyncTableErrors[keyof PlatformApiDatalakeControllerResyncTableErrors];\n\nexport type PlatformApiDatalakeControllerResyncTableResponses = {\n    /**\n     * The repair started\n     */\n    202: ResyncTableResponse;\n};\n\nexport type PlatformApiDatalakeControllerResyncTableResponse = PlatformApiDatalakeControllerResyncTableResponses[keyof PlatformApiDatalakeControllerResyncTableResponses];\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Action Status Updater ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/action-status-updaters/{id}/metadata';\n};\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataDetailsError = PlatformApiActionStatusUpdaterControllerMetadataDetailsErrors[keyof PlatformApiActionStatusUpdaterControllerMetadataDetailsErrors];\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataDetailsResponses = {\n    /**\n     * Markdown body for the requested action status updater\n     */\n    200: string;\n};\n\nexport type PlatformApiActionStatusUpdaterControllerMetadataDetailsResponse = PlatformApiActionStatusUpdaterControllerMetadataDetailsResponses[keyof PlatformApiActionStatusUpdaterControllerMetadataDetailsResponses];\n\nexport type PlatformApiAgenticWorkflowControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{id}/metadata';\n};\n\nexport type PlatformApiAgenticWorkflowControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowControllerMetadataDetailsError = PlatformApiAgenticWorkflowControllerMetadataDetailsErrors[keyof PlatformApiAgenticWorkflowControllerMetadataDetailsErrors];\n\nexport type PlatformApiAgenticWorkflowControllerMetadataDetailsResponses = {\n    /**\n     * Markdown document with variable pipeline\n     */\n    200: string;\n};\n\nexport type PlatformApiAgenticWorkflowControllerMetadataDetailsResponse = PlatformApiAgenticWorkflowControllerMetadataDetailsResponses[keyof PlatformApiAgenticWorkflowControllerMetadataDetailsResponses];\n\nexport type PlatformApiPingControllerPingData = {\n    body?: never;\n    path?: never;\n    query?: never;\n    url: '/api/ping';\n};\n\nexport type PlatformApiPingControllerPingErrors = {\n    /**\n     * Database connection failed\n     */\n    500: ErrorResponse;\n};\n\nexport type PlatformApiPingControllerPingError = PlatformApiPingControllerPingErrors[keyof PlatformApiPingControllerPingErrors];\n\nexport type PlatformApiPingControllerPingResponses = {\n    /**\n     * API is healthy\n     */\n    200: PingResponse;\n};\n\nexport type PlatformApiPingControllerPingResponse = PlatformApiPingControllerPingResponses[keyof PlatformApiPingControllerPingResponses];\n\nexport type PlatformApiDataActivationClientControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients';\n};\n\nexport type PlatformApiDataActivationClientControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataActivationClientControllerIndexError = PlatformApiDataActivationClientControllerIndexErrors[keyof PlatformApiDataActivationClientControllerIndexErrors];\n\nexport type PlatformApiDataActivationClientControllerIndexResponses = {\n    /**\n     * DAC list\n     */\n    200: DataActivationClientListResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerIndexResponse = PlatformApiDataActivationClientControllerIndexResponses[keyof PlatformApiDataActivationClientControllerIndexResponses];\n\nexport type PlatformApiDataActivationClientControllerCreateData = {\n    /**\n     * Full DAC resource (all required fields must be present)\n     */\n    body?: DataActivationClientRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-activation-clients';\n};\n\nexport type PlatformApiDataActivationClientControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDataActivationClientControllerCreateError = PlatformApiDataActivationClientControllerCreateErrors[keyof PlatformApiDataActivationClientControllerCreateErrors];\n\nexport type PlatformApiDataActivationClientControllerCreateResponses = {\n    /**\n     * DAC created\n     */\n    201: DataActivationClientResponse;\n};\n\nexport type PlatformApiDataActivationClientControllerCreateResponse = PlatformApiDataActivationClientControllerCreateResponses[keyof PlatformApiDataActivationClientControllerCreateResponses];\n\nexport type PlatformApiMdmControllerVerifyData = {\n    /**\n     * Verification attributes\n     */\n    body: MdmVerifyRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/mdm/verify';\n};\n\nexport type PlatformApiMdmControllerVerifyErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiMdmControllerVerifyError = PlatformApiMdmControllerVerifyErrors[keyof PlatformApiMdmControllerVerifyErrors];\n\nexport type PlatformApiMdmControllerVerifyResponses = {\n    /**\n     * Verification result\n     */\n    200: MdmVerifyResponse;\n};\n\nexport type PlatformApiMdmControllerVerifyResponse = PlatformApiMdmControllerVerifyResponses[keyof PlatformApiMdmControllerVerifyResponses];\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionData = {\n    /**\n     * User credentials\n     */\n    body: SignInRequest;\n    path?: never;\n    query?: never;\n    url: '/api/v1/admin/bootstrap-session';\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionError = PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionErrors[keyof PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionErrors];\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionResponses = {\n    /**\n     * Tenantless session created\n     */\n    201: SessionResponse;\n};\n\nexport type PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionResponse = PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionResponses[keyof PlatformApiIntegrationTestOnlyAdminControllerBootstrapSessionResponses];\n\nexport type PlatformApiTemplatesControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/system-templates/metadata';\n};\n\nexport type PlatformApiTemplatesControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiTemplatesControllerMetadataError = PlatformApiTemplatesControllerMetadataErrors[keyof PlatformApiTemplatesControllerMetadataErrors];\n\nexport type PlatformApiTemplatesControllerMetadataResponses = {\n    /**\n     * One markdown page of the system template catalog\n     */\n    200: string;\n};\n\nexport type PlatformApiTemplatesControllerMetadataResponse = PlatformApiTemplatesControllerMetadataResponses[keyof PlatformApiTemplatesControllerMetadataResponses];\n\nexport type PlatformApiInteroperabilityContractControllerChecksumData = {\n    /**\n     * Full contract resource (same shape as create/update)\n     */\n    body?: InteroperabilityContractRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/checksum';\n};\n\nexport type PlatformApiInteroperabilityContractControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiInteroperabilityContractControllerChecksumError = PlatformApiInteroperabilityContractControllerChecksumErrors[keyof PlatformApiInteroperabilityContractControllerChecksumErrors];\n\nexport type PlatformApiInteroperabilityContractControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiInteroperabilityContractControllerChecksumResponse = PlatformApiInteroperabilityContractControllerChecksumResponses[keyof PlatformApiInteroperabilityContractControllerChecksumResponses];\n\nexport type PlatformApiDatasetControllerDatasetMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Dataset type atom (e.g. 'legal_entity', 'document')\n         */\n        dataset_type: string;\n    };\n    query?: {\n        /**\n         * Generic table ID (required when dataset_type is 'generic_table')\n         */\n        generic_table_id?: string;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/datasets/{dataset_type}/metadata';\n};\n\nexport type PlatformApiDatasetControllerDatasetMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Forbidden\n     */\n    403: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDatasetControllerDatasetMetadataError = PlatformApiDatasetControllerDatasetMetadataErrors[keyof PlatformApiDatasetControllerDatasetMetadataErrors];\n\nexport type PlatformApiDatasetControllerDatasetMetadataResponses = {\n    /**\n     * Markdown document with field definitions\n     */\n    200: string;\n};\n\nexport type PlatformApiDatasetControllerDatasetMetadataResponse = PlatformApiDatasetControllerDatasetMetadataResponses[keyof PlatformApiDatasetControllerDatasetMetadataResponses];\n\nexport type PlatformApiDatalakeControllerProvisionTokenizationData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tokenization';\n};\n\nexport type PlatformApiDatalakeControllerProvisionTokenizationErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerProvisionTokenizationError = PlatformApiDatalakeControllerProvisionTokenizationErrors[keyof PlatformApiDatalakeControllerProvisionTokenizationErrors];\n\nexport type PlatformApiDatalakeControllerProvisionTokenizationResponses = {\n    /**\n     * The raw datalake, with its derived pair\n     */\n    201: DatalakeResponse;\n};\n\nexport type PlatformApiDatalakeControllerProvisionTokenizationResponse = PlatformApiDatalakeControllerProvisionTokenizationResponses[keyof PlatformApiDatalakeControllerProvisionTokenizationResponses];\n\nexport type PlatformApiInvitationControllerCreateData = {\n    /**\n     * Invitation attributes\n     */\n    body: InvitationRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/invitations';\n};\n\nexport type PlatformApiInvitationControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Forbidden\n     */\n    403: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiInvitationControllerCreateError = PlatformApiInvitationControllerCreateErrors[keyof PlatformApiInvitationControllerCreateErrors];\n\nexport type PlatformApiInvitationControllerCreateResponses = {\n    /**\n     * Invitation created\n     */\n    201: InvitationResponse;\n};\n\nexport type PlatformApiInvitationControllerCreateResponse = PlatformApiInvitationControllerCreateResponses[keyof PlatformApiInvitationControllerCreateResponses];\n\nexport type PlatformApiToolControllerIndexData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools';\n};\n\nexport type PlatformApiToolControllerIndexErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiToolControllerIndexError = PlatformApiToolControllerIndexErrors[keyof PlatformApiToolControllerIndexErrors];\n\nexport type PlatformApiToolControllerIndexResponses = {\n    /**\n     * Tool list\n     */\n    200: ToolListResponse;\n};\n\nexport type PlatformApiToolControllerIndexResponse = PlatformApiToolControllerIndexResponses[keyof PlatformApiToolControllerIndexResponses];\n\nexport type PlatformApiToolControllerCreateData = {\n    /**\n     * Full Tool resource (PUT semantics — all fields required)\n     */\n    body?: ToolRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools';\n};\n\nexport type PlatformApiToolControllerCreateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiToolControllerCreateError = PlatformApiToolControllerCreateErrors[keyof PlatformApiToolControllerCreateErrors];\n\nexport type PlatformApiToolControllerCreateResponses = {\n    /**\n     * Tool created\n     */\n    201: ToolResponse;\n};\n\nexport type PlatformApiToolControllerCreateResponse = PlatformApiToolControllerCreateResponses[keyof PlatformApiToolControllerCreateResponses];\n\nexport type PlatformApiToolControllerChecksumData = {\n    /**\n     * Full Tool resource (same shape as create/update)\n     */\n    body?: ToolRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/tools/checksum';\n};\n\nexport type PlatformApiToolControllerChecksumErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiToolControllerChecksumError = PlatformApiToolControllerChecksumErrors[keyof PlatformApiToolControllerChecksumErrors];\n\nexport type PlatformApiToolControllerChecksumResponses = {\n    /**\n     * Drift checksum for the submitted config\n     */\n    200: ChecksumResponse;\n};\n\nexport type PlatformApiToolControllerChecksumResponse = PlatformApiToolControllerChecksumResponses[keyof PlatformApiToolControllerChecksumResponses];\n\nexport type PlatformApiTemplatesControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Basename of the system template (no slashes, no `.liquid` extension)\n         */\n        filename: string;\n    };\n    query: {\n        /**\n         * Directory-prefix discriminator for the template\n         */\n        intent: 'ai_agent' | 'workflow_filter' | 'workflow_decision' | 'data_activation_interoperability' | 'data_activation_tool_calls' | 'status_poller';\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/system-templates/{filename}/metadata';\n};\n\nexport type PlatformApiTemplatesControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Ambiguous filename — multiple matches under the resolved prefix\n     */\n    409: {\n        errors?: {\n            [key: string]: unknown;\n        };\n    };\n};\n\nexport type PlatformApiTemplatesControllerMetadataDetailsError = PlatformApiTemplatesControllerMetadataDetailsErrors[keyof PlatformApiTemplatesControllerMetadataDetailsErrors];\n\nexport type PlatformApiTemplatesControllerMetadataDetailsResponses = {\n    /**\n     * Markdown body for the requested system template\n     */\n    200: string;\n};\n\nexport type PlatformApiTemplatesControllerMetadataDetailsResponse = PlatformApiTemplatesControllerMetadataDetailsResponses[keyof PlatformApiTemplatesControllerMetadataDetailsResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n        /**\n         * Batch log ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogShowError = PlatformApiAgenticWorkflowOperationsControllerBatchLogShowErrors[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogShowErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponses = {\n    /**\n     * Batch log\n     */\n    200: BatchLogResponse;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponse = PlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponses[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogShowResponses];\n\nexport type PlatformApiDatalakeControllerExecuteSqlData = {\n    /**\n     * Execute-SQL request\n     */\n    body: ExecuteSqlRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: {\n        /**\n         * Response format: json (default) or csv\n         */\n        format?: string;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/execute-sql';\n};\n\nexport type PlatformApiDatalakeControllerExecuteSqlErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiDatalakeControllerExecuteSqlError = PlatformApiDatalakeControllerExecuteSqlErrors[keyof PlatformApiDatalakeControllerExecuteSqlErrors];\n\nexport type PlatformApiDatalakeControllerExecuteSqlResponses = {\n    /**\n     * SQL result page\n     */\n    200: ExecuteSqlResponse;\n};\n\nexport type PlatformApiDatalakeControllerExecuteSqlResponse = PlatformApiDatalakeControllerExecuteSqlResponses[keyof PlatformApiDatalakeControllerExecuteSqlResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerRunWorkflowData = {\n    /**\n     * Run workflow payload\n     */\n    body: RunWorkflowRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/run-workflow';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerRunWorkflowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerRunWorkflowError = PlatformApiAgenticWorkflowOperationsControllerRunWorkflowErrors[keyof PlatformApiAgenticWorkflowOperationsControllerRunWorkflowErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponses = {\n    /**\n     * Run workflow result\n     */\n    200: RunWorkflowResponse;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponse = PlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponses[keyof PlatformApiAgenticWorkflowOperationsControllerRunWorkflowResponses];\n\nexport type PlatformApiDataSourceControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Data Source ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/data-sources/{id}/metadata';\n};\n\nexport type PlatformApiDataSourceControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDataSourceControllerMetadataDetailsError = PlatformApiDataSourceControllerMetadataDetailsErrors[keyof PlatformApiDataSourceControllerMetadataDetailsErrors];\n\nexport type PlatformApiDataSourceControllerMetadataDetailsResponses = {\n    /**\n     * Markdown body for the requested data source\n     */\n    200: string;\n};\n\nexport type PlatformApiDataSourceControllerMetadataDetailsResponse = PlatformApiDataSourceControllerMetadataDetailsResponses[keyof PlatformApiDataSourceControllerMetadataDetailsResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n        /**\n         * Batch log ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/refresh';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshError = PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshErrors[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponses = {\n    /**\n     * Refreshed batch log\n     */\n    200: BatchLogResponse;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponse = PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponses[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogRefreshResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStartData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n        /**\n         * Batch log ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/batch-logs/{id}/start';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStartErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStartError = PlatformApiAgenticWorkflowOperationsControllerBatchLogStartErrors[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogStartErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponses = {\n    /**\n     * Batch log with polling started\n     */\n    200: BatchLogResponse;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponse = PlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponses[keyof PlatformApiAgenticWorkflowOperationsControllerBatchLogStartResponses];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Workflow slug\n         */\n        workflow_slug: string;\n        /**\n         * Execution log ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/agentic-workflows/{workflow_slug}/workflow-logs/{id}';\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowError = PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowErrors[keyof PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowErrors];\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponses = {\n    /**\n     * Execution log\n     */\n    200: WorkflowLogResponse;\n};\n\nexport type PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponse = PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponses[keyof PlatformApiAgenticWorkflowOperationsControllerWorkflowLogShowResponses];\n\nexport type PlatformApiAdvancedMigrationControllerMetadataDetailsData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Advanced migration ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/{id}/metadata';\n};\n\nexport type PlatformApiAdvancedMigrationControllerMetadataDetailsErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAdvancedMigrationControllerMetadataDetailsError = PlatformApiAdvancedMigrationControllerMetadataDetailsErrors[keyof PlatformApiAdvancedMigrationControllerMetadataDetailsErrors];\n\nexport type PlatformApiAdvancedMigrationControllerMetadataDetailsResponses = {\n    /**\n     * The advanced migration, as markdown\n     */\n    200: string;\n};\n\nexport type PlatformApiAdvancedMigrationControllerMetadataDetailsResponse = PlatformApiAdvancedMigrationControllerMetadataDetailsResponses[keyof PlatformApiAdvancedMigrationControllerMetadataDetailsResponses];\n\nexport type PlatformApiInteroperabilityContractControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Contract ID\n         */\n        id: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{id}';\n};\n\nexport type PlatformApiInteroperabilityContractControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiInteroperabilityContractControllerDeleteError = PlatformApiInteroperabilityContractControllerDeleteErrors[keyof PlatformApiInteroperabilityContractControllerDeleteErrors];\n\nexport type PlatformApiInteroperabilityContractControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiInteroperabilityContractControllerDeleteResponse = PlatformApiInteroperabilityContractControllerDeleteResponses[keyof PlatformApiInteroperabilityContractControllerDeleteResponses];\n\nexport type PlatformApiInteroperabilityContractControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Contract ID\n         */\n        id: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{id}';\n};\n\nexport type PlatformApiInteroperabilityContractControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiInteroperabilityContractControllerShowError = PlatformApiInteroperabilityContractControllerShowErrors[keyof PlatformApiInteroperabilityContractControllerShowErrors];\n\nexport type PlatformApiInteroperabilityContractControllerShowResponses = {\n    /**\n     * Contract\n     */\n    200: InteroperabilityContractResponse;\n};\n\nexport type PlatformApiInteroperabilityContractControllerShowResponse = PlatformApiInteroperabilityContractControllerShowResponses[keyof PlatformApiInteroperabilityContractControllerShowResponses];\n\nexport type PlatformApiInteroperabilityContractControllerUpdateData = {\n    /**\n     * Full contract resource (all required fields must be present)\n     */\n    body?: InteroperabilityContractRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Contract ID\n         */\n        id: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{id}';\n};\n\nexport type PlatformApiInteroperabilityContractControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiInteroperabilityContractControllerUpdateError = PlatformApiInteroperabilityContractControllerUpdateErrors[keyof PlatformApiInteroperabilityContractControllerUpdateErrors];\n\nexport type PlatformApiInteroperabilityContractControllerUpdateResponses = {\n    /**\n     * Contract updated\n     */\n    200: InteroperabilityContractResponse;\n};\n\nexport type PlatformApiInteroperabilityContractControllerUpdateResponse = PlatformApiInteroperabilityContractControllerUpdateResponses[keyof PlatformApiInteroperabilityContractControllerUpdateResponses];\n\nexport type PlatformApiAdvancedMigrationControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Advanced migration ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/{id}';\n};\n\nexport type PlatformApiAdvancedMigrationControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n};\n\nexport type PlatformApiAdvancedMigrationControllerDeleteError = PlatformApiAdvancedMigrationControllerDeleteErrors[keyof PlatformApiAdvancedMigrationControllerDeleteErrors];\n\nexport type PlatformApiAdvancedMigrationControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiAdvancedMigrationControllerDeleteResponse = PlatformApiAdvancedMigrationControllerDeleteResponses[keyof PlatformApiAdvancedMigrationControllerDeleteResponses];\n\nexport type PlatformApiAdvancedMigrationControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Advanced migration ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/{id}';\n};\n\nexport type PlatformApiAdvancedMigrationControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiAdvancedMigrationControllerShowError = PlatformApiAdvancedMigrationControllerShowErrors[keyof PlatformApiAdvancedMigrationControllerShowErrors];\n\nexport type PlatformApiAdvancedMigrationControllerShowResponses = {\n    /**\n     * Advanced migration\n     */\n    200: AdvancedMigrationResponse;\n};\n\nexport type PlatformApiAdvancedMigrationControllerShowResponse = PlatformApiAdvancedMigrationControllerShowResponses[keyof PlatformApiAdvancedMigrationControllerShowResponses];\n\nexport type PlatformApiAdvancedMigrationControllerUpdateData = {\n    /**\n     * Full advanced migration resource (PUT semantics — all fields required)\n     */\n    body?: AdvancedMigrationRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Advanced migration ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/advanced-migrations/{id}';\n};\n\nexport type PlatformApiAdvancedMigrationControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiAdvancedMigrationControllerUpdateError = PlatformApiAdvancedMigrationControllerUpdateErrors[keyof PlatformApiAdvancedMigrationControllerUpdateErrors];\n\nexport type PlatformApiAdvancedMigrationControllerUpdateResponses = {\n    /**\n     * Advanced migration replaced\n     */\n    200: AdvancedMigrationResponse;\n};\n\nexport type PlatformApiAdvancedMigrationControllerUpdateResponse = PlatformApiAdvancedMigrationControllerUpdateResponses[keyof PlatformApiAdvancedMigrationControllerUpdateResponses];\n\nexport type PlatformApiGenericTableControllerDeleteData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Generic Table ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/{id}';\n};\n\nexport type PlatformApiGenericTableControllerDeleteErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n};\n\nexport type PlatformApiGenericTableControllerDeleteError = PlatformApiGenericTableControllerDeleteErrors[keyof PlatformApiGenericTableControllerDeleteErrors];\n\nexport type PlatformApiGenericTableControllerDeleteResponses = {\n    /**\n     * No Content\n     */\n    204: void;\n};\n\nexport type PlatformApiGenericTableControllerDeleteResponse = PlatformApiGenericTableControllerDeleteResponses[keyof PlatformApiGenericTableControllerDeleteResponses];\n\nexport type PlatformApiGenericTableControllerShowData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Generic Table ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/{id}';\n};\n\nexport type PlatformApiGenericTableControllerShowErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiGenericTableControllerShowError = PlatformApiGenericTableControllerShowErrors[keyof PlatformApiGenericTableControllerShowErrors];\n\nexport type PlatformApiGenericTableControllerShowResponses = {\n    /**\n     * Generic table\n     */\n    200: GenericTableResponse;\n};\n\nexport type PlatformApiGenericTableControllerShowResponse = PlatformApiGenericTableControllerShowResponses[keyof PlatformApiGenericTableControllerShowResponses];\n\nexport type PlatformApiGenericTableControllerUpdateData = {\n    /**\n     * Full Generic Table resource (PUT semantics — all fields required)\n     */\n    body?: GenericTableRequestWritable;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Generic Table ID\n         */\n        id: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/generic-tables/{id}';\n};\n\nexport type PlatformApiGenericTableControllerUpdateErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * The request conflicts with the current state of the target resource.\n     * Returned when a delete is refused because the resource still has\n     * dependents — e.g. a generic table that still holds rows, or a datalake\n     * that still owns child resources — and when an action status updater\n     * is asked to refresh while it is halted or a poll for it is already\n     * queued. Response body conforms to the `AlveraAPIError` schema.\n     *\n     */\n    409: AlveraApiError;\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiGenericTableControllerUpdateError = PlatformApiGenericTableControllerUpdateErrors[keyof PlatformApiGenericTableControllerUpdateErrors];\n\nexport type PlatformApiGenericTableControllerUpdateResponses = {\n    /**\n     * Generic table updated\n     */\n    200: GenericTableResponse;\n};\n\nexport type PlatformApiGenericTableControllerUpdateResponse = PlatformApiGenericTableControllerUpdateResponses[keyof PlatformApiGenericTableControllerUpdateResponses];\n\nexport type PlatformApiInteroperabilityContractControllerRunData = {\n    /**\n     * Raw source row\n     */\n    body: InteroperabilityRunRequest;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n        /**\n         * Contract slug\n         */\n        slug: string;\n    };\n    query?: {\n        /**\n         * Page number (1-indexed). Defaults to 1 when omitted.\n         */\n        page?: number;\n        /**\n         * Items per page (1-100). Defaults to the resource's Flop default when omitted.\n         */\n        page_size?: number;\n        /**\n         * Fields to sort by, in order of precedence. Must appear in the resource schema's Flop `sortable:` list — unknown fields return 422.\n         */\n        order_by?: Array<string>;\n        /**\n         * Sort direction(s), pair-wise with `order_by`. `asc` or `desc`. Defaults to `asc` per unpaired `order_by` entry.\n         */\n        order_directions?: Array<'asc' | 'desc'>;\n        /**\n         * Flop-native filter array. URL shape: `?filters[][field]=status&filters[][op]=%3D%3D&filters[][value]=pending` (empty brackets — consecutive `[]` entries group into one filter object per element; indexed brackets parse as a map and fail the array cast with 422). `op` is the symbol, percent-encoded — `%3D%3D` for `==`, `%3E%3D` for `>=` — not a word like `equal`; anything outside the enum above is a 422 before the request reaches Flop. Omit `op` entirely for equality. Unknown fields return 422 via Flop validation at the context layer.\n         */\n        filters?: Array<{\n            /**\n             * Filterable field name (must be in the resource's `filterable:`)\n             */\n            field: string;\n            /**\n             * Comparison operator. Defaults to `==` when omitted.\n             */\n            op?: '==' | '!=' | '<' | '<=' | '>' | '>=' | 'empty' | 'not_empty' | 'like' | 'ilike' | 'like_and' | 'like_or' | 'ilike_and' | 'ilike_or' | 'in' | 'not_in' | 'contains' | 'not_contains';\n            /**\n             * Filter value — shape depends on `field` and `op`.\n             */\n            value: unknown;\n        }>;\n    };\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/interoperability-contracts/{slug}/run';\n};\n\nexport type PlatformApiInteroperabilityContractControllerRunErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n    /**\n     * Validation or pipeline error. Response body conforms to the\n     * `AlveraAPIError` schema — a JSON:API-style error object with `errors`\n     * as a non-empty array of `{detail, source.pointer, title}` entries.\n     *\n     * `title` is the error category / machine-readable code:\n     * `\"Invalid value\"` for request-body validation, or a pipeline stage\n     * code (`\"transform_failed\"`, `\"mdm_input_render_failed\"`, etc.) for\n     * `/run` endpoint errors.\n     *\n     * `source.pointer` is an RFC 6901 JSON Pointer: into the request body\n     * for validation errors (`/name`, `/template_config/body`), or into the\n     * failing contract field for pipeline errors.\n     *\n     */\n    422: AlveraApiError;\n};\n\nexport type PlatformApiInteroperabilityContractControllerRunError = PlatformApiInteroperabilityContractControllerRunErrors[keyof PlatformApiInteroperabilityContractControllerRunErrors];\n\nexport type PlatformApiInteroperabilityContractControllerRunResponses = {\n    /**\n     * Pipeline output\n     */\n    200: InteroperabilityRunResponse;\n};\n\nexport type PlatformApiInteroperabilityContractControllerRunResponse = PlatformApiInteroperabilityContractControllerRunResponses[keyof PlatformApiInteroperabilityContractControllerRunResponses];\n\nexport type PlatformApiDatasetControllerMetadataData = {\n    body?: never;\n    path: {\n        /**\n         * Tenant slug\n         */\n        tenant_slug: string;\n        /**\n         * Datalake slug\n         */\n        datalake_slug: string;\n    };\n    query?: never;\n    url: '/api/v1/tenants/{tenant_slug}/datalakes/{datalake_slug}/datasets/metadata';\n};\n\nexport type PlatformApiDatasetControllerMetadataErrors = {\n    /**\n     * Unauthorised\n     */\n    401: {\n        [key: string]: unknown;\n    };\n    /**\n     * Not Found\n     */\n    404: {\n        [key: string]: unknown;\n    };\n};\n\nexport type PlatformApiDatasetControllerMetadataError = PlatformApiDatasetControllerMetadataErrors[keyof PlatformApiDatasetControllerMetadataErrors];\n\nexport type PlatformApiDatasetControllerMetadataResponses = {\n    /**\n     * Markdown catalog of every dataset type for this datalake's domain\n     */\n    200: string;\n};\n\nexport type PlatformApiDatasetControllerMetadataResponse = PlatformApiDatasetControllerMetadataResponses[keyof PlatformApiDatasetControllerMetadataResponses];\n","/**\n * Alvera Platform SDK — typed client.\n *\n * Architecture:\n *   generated/          auto-generated by @hey-api/openapi-ts (do not edit)\n *     sdk.gen.ts        type-safe endpoint methods\n *     types.gen.ts      request/response types from OpenAPI spec\n *     client.gen.ts     HTTP client instance\n *\n *   client.ts (this file)   override layer\n *     - configures the hey-api client with auth\n *     - exposes a curated, ergonomic resource surface\n *     - provides corrected types for fields the OpenAPI spec leaves as `object`\n *\n * Regenerate generated/ with: pnpm regen\n */\n\nimport { client } from './generated/client.gen.js';\nimport { type Client, createClient } from './generated/client/index.js';\nimport type {\n  ActionStatusUpdaterCloudWatchQueryRequest,\n  ActionStatusUpdaterRefreshRequest,\n  ActionStatusUpdaterRestCallRequest,\n  AdminCreateTenantApiKeyRequest,\n  AgenticWorkflowRequestWritable,\n  AiAgentInvokeRequest,\n  AuthenticatedLinkExchangeRequest,\n  AuthenticatedLinkUpdateMessageTrackingRequest,\n  PlatformApiActionStatusUpdaterControllerIndexData,\n  PlatformApiAgenticWorkflowControllerIndexData,\n  PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexData,\n  PlatformApiAdvancedMigrationControllerIndexData,\n  PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexData,\n  PlatformApiDataActivationClientControllerBatchesIndexData,\n  PlatformApiDataActivationClientControllerLogsIndexData,\n  PlatformApiWorkflowRunControllerIndexData,\n  PlatformApiTenantControllerIndexData,\n  PlatformApiAiAgentControllerIndexData,\n  PlatformApiDataActivationClientControllerIndexData,\n  PlatformApiDataSourceControllerIndexData,\n  PlatformApiDatalakeControllerIndexData,\n  PlatformApiDatalakeControllerMetadataData,\n  PlatformApiGenericTableControllerIndexData,\n  PlatformApiInteroperabilityContractControllerIndexData,\n  PlatformApiToolControllerIndexData,\n  ActionStatusUpdaterRequestWritable,\n  AdvancedMigrationRequest,\n  AiAgentRequestWritable,\n  DataActivationClientRequestWritable,\n  DatalakeRequestWritable,\n  DataSourceRequest,\n  ExecuteActionRequest,\n  ExecuteSqlRequest,\n  GenericTableRequestWritable,\n  IngestRequest,\n  InteroperabilityContractRequestWritable,\n  InteroperabilityRunRequest,\n  InvitationRequest,\n  ManualToolInvocationRequestWritable,\n  MdmVerifyRequest,\n  RunManuallyRequestWritable,\n  RunWorkflowRequest,\n  SignUpRequestWritable,\n  TenantRequest,\n  UserSearchRequest,\n  ExecuteSqlResponse,\n  GenericTableColumnRequest,\n  IngestFileRequest,\n  ResyncTableRequest,\n  TextToSqlRequest,\n  ToolRequestWritable,\n  UploadLinkRequest,\n} from './generated/types.gen.js';\n\n/**\n * Forward-compat alias for DataSource write paths.\n *\n * Hey-api emits `<Schema>RequestWritable` variants only when a schema\n * has at least one `writeOnly: true` field — otherwise the Writable\n * shape would be byte-identical to the bare Request type, so it skips\n * the duplicate. DataSource has no writeOnly fields today, so\n * `DataSourceRequestWritable` is not generated.\n *\n * Aliasing it here gives every write path a uniform `*Writable` import\n * name (Datalake / Tool / DataSource), matching the Elixir-test\n * convention of typing every Create/Update body explicitly. When a\n * writeOnly field is eventually added to DataSource, hey-api will emit\n * its own `DataSourceRequestWritable`; at that point this alias should\n * be deleted in favour of the generated one, and the TS compiler will\n * surface the structural change at every write call-site.\n */\nexport type DataSourceRequestWritable = DataSourceRequest;\nimport {\n  platformApiActionStatusUpdaterControllerCreate,\n  platformApiActionStatusUpdaterControllerDelete,\n  platformApiActionStatusUpdaterControllerMetadata,\n  platformApiActionStatusUpdaterControllerMetadataDetails,\n  platformApiActionStatusUpdaterControllerRefresh,\n  platformApiAuthenticatedLinkControllerExchange,\n  platformApiAuthenticatedLinkControllerUpdateMessageTracking,\n  platformApiIntegrationTestOnlyAdminControllerBootstrapSession,\n  platformApiIntegrationTestOnlyAdminControllerConfirmUser,\n  platformApiIntegrationTestOnlyAdminControllerCreateTenantApiKey,\n  platformApiIntegrationTestOnlyAdminControllerSignUp,\n  platformApiDatasetControllerCreateUserSearch,\n  platformApiInvitationControllerAccept,\n  platformApiInvitationControllerCreate,\n  platformApiInvitationControllerIndex,\n  platformApiTenantControllerCreate,\n  platformApiActionStatusUpdaterControllerIndex,\n  platformApiActionStatusUpdaterControllerShow,\n  platformApiActionStatusUpdaterControllerUpdate,\n  platformApiAgenticWorkflowControllerCreate,\n  platformApiAgenticWorkflowControllerDelete,\n  platformApiAgenticWorkflowControllerIndex,\n  platformApiAgenticWorkflowControllerMetadata,\n  platformApiAgenticWorkflowControllerMetadataDetails,\n  platformApiAgenticWorkflowControllerShow,\n  platformApiAgenticWorkflowControllerUpdate,\n  platformApiAgenticWorkflowOperationsControllerBatchLogRefresh,\n  platformApiAgenticWorkflowOperationsControllerBatchLogShow,\n  platformApiAgenticWorkflowOperationsControllerBatchLogStart,\n  platformApiAgenticWorkflowOperationsControllerBatchLogStop,\n  platformApiAgenticWorkflowOperationsControllerBatchLogsIndex,\n  platformApiAgenticWorkflowOperationsControllerExecute,\n  platformApiAgenticWorkflowOperationsControllerRunWorkflow,\n  platformApiAgenticWorkflowOperationsControllerWorkflowLogDownload,\n  platformApiAgenticWorkflowOperationsControllerWorkflowLogShow,\n  platformApiAgenticWorkflowOperationsControllerWorkflowLogsIndex,\n  platformApiAiAgentControllerCreate,\n  platformApiAiAgentControllerDelete,\n  platformApiAiAgentControllerIndex,\n  platformApiAiAgentControllerInvoke,\n  platformApiAiAgentControllerMetadata,\n  platformApiAiAgentControllerMetadataDetails,\n  platformApiAiAgentControllerShow,\n  platformApiAiAgentControllerUpdate,\n  platformApiDataActivationClientControllerCreate,\n  platformApiDataActivationClientControllerDelete,\n  platformApiDataActivationClientControllerBatchShow,\n  platformApiDataActivationClientControllerBatchesIndex,\n  platformApiDataActivationClientControllerIndex,\n  platformApiDataActivationClientControllerIngest,\n  platformApiDataActivationClientControllerIngestFile,\n  platformApiDataActivationClientControllerLogShow,\n  platformApiDataActivationClientControllerLogsIndex,\n  platformApiDataActivationClientControllerMetadata,\n  platformApiDataActivationClientControllerMetadataDetails,\n  platformApiDataActivationClientControllerRunManually,\n  platformApiDataActivationClientControllerShow,\n  platformApiDataActivationClientControllerUpdate,\n  platformApiDatalakeControllerCreate,\n  platformApiDatalakeControllerCreateDownloadLink,\n  platformApiDatalakeControllerCreateUploadLink,\n  platformApiDatalakeControllerDelete,\n  platformApiDatalakeControllerDerivedLakeTables,\n  platformApiDatalakeControllerExecuteSql,\n  platformApiDatalakeControllerIndex,\n  platformApiDatalakeControllerMetadata,\n  platformApiDatalakeControllerMetadataDetails,\n  platformApiDatalakeControllerMigrate,\n  platformApiDatalakeControllerProvisionTokenization,\n  platformApiDatalakeControllerResyncTable,\n  platformApiDatalakeControllerShow,\n  platformApiDatalakeControllerSystemDatasets,\n  platformApiDatalakeControllerTextToSql,\n  platformApiDatalakeControllerUpdate,\n  platformApiDatasetControllerDatasetMetadata,\n  platformApiDatasetControllerMetadata,\n  platformApiDatasetControllerSearch,\n  platformApiDataSourceControllerCreate,\n  platformApiDataSourceControllerDelete,\n  platformApiDataSourceControllerIndex,\n  platformApiDataSourceControllerMetadata,\n  platformApiDataSourceControllerMetadataDetails,\n  platformApiDataSourceControllerShow,\n  platformApiDataSourceControllerUpdate,\n  platformApiAdvancedMigrationControllerChecksum,\n  platformApiAdvancedMigrationControllerCreate,\n  platformApiAdvancedMigrationControllerDelete,\n  platformApiAdvancedMigrationControllerIndex,\n  platformApiAdvancedMigrationControllerMetadata,\n  platformApiAdvancedMigrationControllerMetadataDetails,\n  platformApiAdvancedMigrationControllerShow,\n  platformApiAdvancedMigrationControllerUpdate,\n  platformApiGenericTableControllerCreate,\n  platformApiGenericTableControllerDelete,\n  platformApiGenericTableControllerIndex,\n  platformApiGenericTableControllerMetadata,\n  platformApiGenericTableControllerMetadataDetails,\n  platformApiGenericTableControllerShow,\n  platformApiGenericTableControllerUpdate,\n  platformApiInteroperabilityContractControllerCreate,\n  platformApiInteroperabilityContractControllerDelete,\n  platformApiInteroperabilityContractControllerIndex,\n  platformApiInteroperabilityContractControllerMetadata,\n  platformApiInteroperabilityContractControllerMetadataDetails,\n  platformApiInteroperabilityContractControllerRun,\n  platformApiInteroperabilityContractControllerShow,\n  platformApiInteroperabilityContractControllerUpdate,\n  platformApiMdmControllerVerify,\n  platformApiPingControllerPing,\n  platformApiSessionControllerCreate,\n  platformApiSessionControllerDelete,\n  platformApiSessionControllerVerify,\n  platformApiSessionControllerVerifyApiKey,\n  platformApiTemplatesControllerIndex,\n  platformApiTemplatesControllerMetadata,\n  platformApiTemplatesControllerMetadataDetails,\n  platformApiTenantControllerIndex,\n  platformApiToolControllerCreate,\n  platformApiToolControllerDelete,\n  platformApiToolControllerIndex,\n  platformApiToolControllerMetadata,\n  platformApiToolControllerMetadataDetails,\n  platformApiToolControllerShow,\n  platformApiToolControllerTestInvocation,\n  platformApiToolControllerUpdate,\n  // Drift-checksum endpoints — server computes the would-be checksum for a\n  // submitted config body (cast → defaults → stamp, no persist). `alvera plan`\n  // POSTs the rendered body here for the desired checksum and compares it to\n  // the deployed resource's checksum to decide unchanged vs edited.\n  platformApiDatalakeControllerChecksum,\n  platformApiDataSourceControllerChecksum,\n  platformApiToolControllerChecksum,\n  platformApiAiAgentControllerChecksum,\n  platformApiActionStatusUpdaterControllerChecksum,\n  platformApiGenericTableControllerChecksum,\n  platformApiInteroperabilityContractControllerChecksum,\n  platformApiDataActivationClientControllerChecksum,\n  platformApiAgenticWorkflowControllerChecksum,\n  platformApiWorkflowRunControllerIndex,\n  platformApiWorkflowRunControllerShow,\n  platformApiWorkflowRunControllerCancel,\n} from './generated/sdk.gen.js';\n\n// Runtime enums — TypeScript `enum` declarations carry both a type\n// and a value, so they need a regular `export` (not `export type`).\n// Consumers import them as either narrowing types or value sources\n// (e.g. `Object.values(ActionType)` to enumerate at runtime).\nexport { ActionType, ToolIntent } from './generated/types.gen.js';\n\n// Re-export generated types that are correct as-is\nexport type {\n  ActionStatusUpdaterCloudWatchQueryRequest,\n  ActionStatusUpdaterRequestWritable,\n  ActionStatusUpdaterResponse,\n  ActionStatusUpdaterRestCallRequest,\n  AdminApiKeyResponse,\n  AdminCreateTenantApiKeyRequest,\n  AgenticWorkflowListResponse,\n  AdvancedMigrationListResponse,\n  AdvancedMigrationRequest,\n  AdvancedMigrationResponse,\n  AgenticWorkflowRequestWritable,\n  AgenticWorkflowResponse,\n  AiAgentInvokeRequest,\n  AiAgentRequestWritable,\n  AiAgentResponse,\n  // The JSON:API error envelope the server returns on 4xx — `{ errors: [{\n  // detail, source: { pointer }, title }] }`. A 422 always carries it (one\n  // entry per validation failure, with an RFC 6901 JSON Pointer to the\n  // offending field). Exposed so consumers can type and surface server errors.\n  AlveraApiError,\n  // GH-150 — the authenticated link that replaced Connected Apps and page\n  // tokens. Both calls answer with the link and the message it went out in.\n  AuthenticatedLinkExchangeRequest,\n  AuthenticatedLinkResponse,\n  AuthenticatedLinkUpdateMessageTrackingRequest,\n  BatchLogListResponse,\n  BatchLogResponse,\n  DataActivationClientBatchListResponse,\n  DataActivationClientBatchResponse,\n  DataActivationClientListResponse,\n  DataActivationClientLogListResponse,\n  DataActivationClientLogResponse,\n  DataActivationClientRequestWritable,\n  DataActivationClientResponse,\n  DatalakeRequestWritable,\n  DatalakeResponse,\n  DatasetSearchResponse,\n  DataSourceRequest,\n  DataSourceResponse,\n  DownloadUrlResponse,\n  ErrorResponse,\n  ExecuteActionRequest,\n  ExecuteActionResponse,\n  ExecuteSqlMeta,\n  ExecuteSqlRequest,\n  ExecuteSqlResponse,\n  GenericTableColumnRequest,\n  GenericTableColumnResponse,\n  GenericTableResponse,\n  IngestFileRequest,\n  IngestRequest,\n  InteroperabilityContractAiAgentRequestWritable,\n  InteroperabilityContractListResponse,\n  InteroperabilityContractRequestWritable,\n  InteroperabilityContractResponse,\n  InteroperabilityRunRequest,\n  InteroperabilityRunResponse,\n  MdmVerifyRequest,\n  MdmVerifyResponse,\n  MessageResponse,\n  PaginationMeta,\n  RunManuallyRequestWritable,\n  RunManuallyResponse,\n  RunWorkflowRequest,\n  RunWorkflowResponse,\n  SessionResponse,\n  // 0.23 GH-843 — a `workflows.run` now records a run rather than doing the\n  // work inline, so the run itself is a readable, cancellable resource.\n  WorkflowRunResponse,\n  WorkflowRunListResponse,\n  // 0.23 GH-843 — Twilio as a first-class sender body. `*Writable` is the one\n  // that carries `auth_token` (writeOnly); it appears on no read shape.\n  ToolTwilioRequest,\n  ToolTwilioRequestWritable,\n  ToolTwilioResponse,\n  TwilioRequest,\n  TwilioRequestWritable,\n  TwilioResponse,\n  DerivedLakeTablesResponse,\n  ResyncTableRequest,\n  ResyncTableResponse,\n  TenantListResponse,\n  TenantResponse,\n  TextToSqlRequest,\n  TextToSqlResponse,\n  ToolListResponse,\n  ToolRequest,\n  ToolRequestWritable,\n  ToolResponse,\n  UploadLinkRequest,\n  UploadLinkResponse,\n  WorkflowAiAgentRequestWritable,\n  WorkflowLogListResponse,\n  WorkflowLogResponse,\n} from './generated/types.gen.js';\n\nexport interface CreateGenericTableRequest {\n  title: string;\n  description?: string;\n  columns: GenericTableColumnRequest[];\n}\n\nexport interface TemplateConfig {\n  type: 'system' | 'custom';\n  path?: string;\n  body?: string;\n}\n\nexport interface CreateActionStatusUpdaterRequest {\n  name: string;\n  cron_expression: string;\n  updater_type: 'cloud_watch' | 'restapi';\n  updater_tool_id: string;\n  datalake_id: string;\n  sender_tool_ids?: string[] | null;\n  // Required by the platform changeset (cast_embed :message_config,\n  // required: true) and the OpenAPI schema's required list. Renders raw\n  // poll-result events into the {external_id, set_params} shape the\n  // reconciliation pipeline expects.\n  message_config: TemplateConfig;\n  // Required on create AND update (PUT) — omitting it is a 422 (`Missing field:\n  // action_log_config`). Renders each poll result into the action-log write shape:\n  // a JSON object with `external_id` plus at least one updatable field (`status`,\n  // `sent_at`, `metadata`) — the same contract `message_config` holds for messages.\n  // A config that renders `null`/empty is rejected (422 \"must render a JSON object\n  // containing external_id\"). The *response* reads this back nullable: rows created\n  // before it became required stay `null` until their next edit forces a real\n  // template (including status-resume and refresh-with-override edits).\n  action_log_config: TemplateConfig;\n  // Required for `restapi` updaters, omitted for `cloud_watch`. JSON Schemas the\n  // poll driver validates each rendered template output against on every cycle —\n  // the events render against `events_output_schema`, the pagination context\n  // (keyed on `has_next`) against `pagination_context_output_schema`. Same\n  // top-level JSON-schema shape as `CreateAiAgentRequest`'s `input_schema` /\n  // `llm_response_schema`.\n  events_output_schema?: Record<string, unknown> | null;\n  pagination_context_output_schema?: Record<string, unknown> | null;\n  // Required. Discriminated by `updater_body_type` (public OpenAPI\n  // discriminator); server-side `ex_open_api_utils` maps to internal\n  // `:__type__` Ecto routing. Same pattern as `cloud_storage_type` on\n  // Datalake and `tool_body_type` on Tool.\n  updater_body: ActionStatusUpdaterCloudWatchQueryRequest | ActionStatusUpdaterRestCallRequest;\n}\n\nexport interface CreateAiAgentRequest {\n  name: string;\n  model: string;\n  tool_id: string;\n  // Two values, not three — and DELIBERATE. Confirmed by the platform on\n  // GH-859 (narrowed in 50e27461e, on hh's explicit instruction), so do not\n  // \"fix\" this to match the three-value enums elsewhere.\n  //\n  // They are not the same field. `data_access` says which lake a saved agent\n  // reads, and an agent is never pointed at the redacted lake. Every\n  // `data_access_mode` — on a session, an API key, a read — is a CEILING on\n  // how far a person may reach, and there `tokenized` and `redacted` are peers.\n  // One names a target; the other bounds a range. They should not converge.\n  data_access: 'raw' | 'tokenized';\n  temperature: number;\n  max_tokens: number;\n  enabled: boolean;\n  slug?: string;\n  description?: string | null;\n  input_schema?: Record<string, unknown> | null;\n  llm_response_schema?: Record<string, unknown> | null;\n  prompt_config?: Record<string, unknown> | null;\n}\n\n// ---------------------------------------------------------------------------\n// Auth — session-based (Bearer token)\n// ---------------------------------------------------------------------------\n\nexport interface CreateSessionParams {\n  baseUrl: string;\n  email: string;\n  password: string;\n  /**\n   * Publishable API key of the tenant named by `tenantSlug`, sent as\n   * `X-API-Key`. Required — the server 401s without one and 403s a key\n   * belonging to a different tenant. The key is stamped onto the resulting\n   * session for lineage, and the same key must accompany every subsequent\n   * request alongside the Bearer.\n   */\n  apiKey: string;\n  /**\n   * Tenant slug to sign in to. Required — `POST /sessions` is tenant login\n   * only; the tenantless bootstrap login lives at\n   * `POST /api/v1/admin/bootstrap-session` (`createBootstrapSession`, an\n   * integration-test-only route absent from prod builds).\n   */\n  tenantSlug: string;\n  /** Session duration in seconds. Default 86400 (24h). Max 2592000 (30d). */\n  expiresIn?: number;\n}\n\nexport interface SessionResult {\n  /** Bearer token to pass into createPlatformApi. */\n  sessionToken: string;\n  /** ISO-8601 expiration timestamp, or null for non-expiring sessions. */\n  expiresAt: string | null;\n  /** Null for tenantless sessions (admin / pre-tenant bootstrap). */\n  tenant: { id: string; slug: string; name: string } | null;\n  /** Null for tenantless sessions. */\n  role: { id: string; name: string } | null;\n  user: { id: string; firstName: string | null; lastName: string | null } | null;\n}\n\n/**\n * Sign in to a tenant: exchange user credentials + the tenant's publishable\n * key for a tenant-scoped Bearer session token. For the tenantless\n * platform-admin bootstrap login use `createBootstrapSession` (an\n * integration-test-only route absent from prod builds).\n *\n * Throws on any non-2xx response (e.g. 401 invalid credentials).\n */\nexport async function createSession(\n  params: CreateSessionParams,\n): Promise<SessionResult> {\n  client.setConfig({ baseUrl: params.baseUrl.replace(/\\/$/, '') });\n\n  const { data } = await platformApiSessionControllerCreate({\n    headers: { 'X-API-Key': params.apiKey },\n    body: {\n      email: params.email,\n      password: params.password,\n      tenant_slug: params.tenantSlug,\n      ...(params.expiresIn !== undefined ? { expires_in: params.expiresIn } : {}),\n    },\n    throwOnError: true,\n  });\n\n  if (!data.session_token) {\n    throw new Error('Session created but no session_token was returned.');\n  }\n\n  return {\n    sessionToken: data.session_token,\n    expiresAt: data.expires_at ?? null,\n    tenant: data.tenant\n      ? { id: data.tenant.id, slug: data.tenant.slug, name: data.tenant.name }\n      : null,\n    role: data.role ? { id: data.role.id, name: data.role.name } : null,\n    user: data.user\n      ? {\n          id: data.user.id,\n          firstName: data.user.first_name ?? null,\n          lastName: data.user.last_name ?? null,\n        }\n      : null,\n  };\n}\n\n/**\n * Bootstrap a TENANTLESS Bearer session (platform-admin / pre-tenant flows)\n * via `POST /api/v1/admin/bootstrap-session` — keyless by structural\n * necessity (it mints the very first Bearer of an environment, before any\n * tenant key exists). Integration-test-only: the route does not exist in\n * prod builds. Returned `tenant` and `role` are always null.\n */\nexport async function createBootstrapSession(params: {\n  baseUrl: string;\n  email: string;\n  password: string;\n  expiresIn?: number;\n}): Promise<SessionResult> {\n  client.setConfig({ baseUrl: params.baseUrl.replace(/\\/$/, '') });\n\n  const { data } = await platformApiIntegrationTestOnlyAdminControllerBootstrapSession({\n    body: {\n      email: params.email,\n      password: params.password,\n      ...(params.expiresIn !== undefined ? { expires_in: params.expiresIn } : {}),\n    },\n    throwOnError: true,\n  });\n\n  if (!data.session_token) {\n    throw new Error('Session created but no session_token was returned.');\n  }\n\n  return {\n    sessionToken: data.session_token,\n    expiresAt: data.expires_at ?? null,\n    tenant: null,\n    role: null,\n    user: data.user\n      ? {\n          id: data.user.id,\n          firstName: data.user.first_name ?? null,\n          lastName: data.user.last_name ?? null,\n        }\n      : null,\n  };\n}\n\n/**\n * Revoke the currently-configured session token. After calling this,\n * the api instance will reject every subsequent request with 401.\n */\nexport async function revokeSession(): Promise<void> {\n  await platformApiSessionControllerDelete({ throwOnError: true });\n}\n\n// ---------------------------------------------------------------------------\n// Config\n// ---------------------------------------------------------------------------\n\n/**\n * Optional HTTP-layer instrumentation hook. When provided, the SDK\n * attaches request + response interceptors to its hey-api client and\n * invokes `log` once per request and once per response.\n *\n * The SDK is logger-agnostic — `log` is a plain callback. Consumer\n * (CLI, tests, downstream apps) decides where the line goes. The same\n * pattern Stripe, AWS SDK v3, Octokit, and the OpenAI SDK use.\n *\n * `redactStrings` is consumer-supplied: every literal occurrence of\n * each entry in the formatted request / response string is replaced\n * with `********` before `log` is called. This is how secret values\n * substituted client-side (e.g. resolved from the CLI's\n * `infra.secrets.toml`) stay out of debug logs even though the SDK\n * itself never sees the placeholder syntax — it only sees the\n * resolved literal in the outgoing body, and the redaction list says\n * which literals to scrub.\n *\n * `log` receives a fully-formatted line. The URL is ABSOLUTE — origin\n * included — because the origin is the only thing distinguishing one\n * environment from another. A path-only line reads identically whether\n * the call went to localhost or to a demo server, which makes the log\n * useless for the question it is most often asked: *where did this\n * actually go?*\n *\n *   `→ POST https://demo.example.com/api/v1/tenants/foo/datalakes\n *    {\n *      \"slug\": \"demo\",\n *      \"...\": \"...\"\n *    }`\n *\n *   `← 422 https://demo.example.com/api/v1/tenants/foo/datalakes\n *    {\n *      \"errors\": { ... }\n *    }`\n *\n * Newlines are part of the message — caller decides whether to\n * append another. Method/status arrows (`→` `←`) make request /\n * response easy to grep.\n */\nexport interface ApiDebugConfig {\n  log: (message: string) => void;\n  redactStrings?: readonly string[];\n}\n\n/**\n * `sessionToken` and `apiKey` travel together on an authorized request —\n * Firebase's \"API key + ID token\" split, not an either/or. `apiKey` identifies\n * the publishable client (and is what a server-side CORS check matches the\n * request's `Origin` against); `sessionToken` (Bearer) is what actually\n * authorizes the call. Neither ever substitutes for the other.\n *\n * `sessionToken` is OPTIONAL: a key-only client — the host behind an action's\n * link prefix, resolving a tap with `authenticatedLinks.exchange` on its\n * tenant's publishable key, is the usual one —\n * constructs with just `{ baseUrl, apiKey }` and sends no `Authorization`\n * header at all (never a fabricated `Bearer ` with an empty token). It\n * reaches only the limited surface the publishable key permits; everything\n * else 401s server-side, which is the intended ceiling.\n */\nexport interface ApiConfig {\n  baseUrl: string;\n  sessionToken?: string;\n  apiKey: string;\n  debug?: ApiDebugConfig;\n}\n\n// ---------------------------------------------------------------------------\n// Factories — two named entry points\n//\n//   createPlatformApi(config)            singleton mode (default)\n//     Mutates the shared, generated client. Cheap, single-bearer-at-a-time.\n//     Right for CLIs and single-user web apps where one logged-in user holds\n//     exactly one bearer at any moment.\n//\n//   createIsolatedPlatformApi(config)    private-client mode\n//     Builds its own Client via createClient() and threads it on every call.\n//     Right for code that needs MULTIPLE concurrent APIs bound to DIFFERENT\n//     bearers in the same process — integration tests holding a root session\n//     and a tenant-scoped session at once, or multi-tenant background jobs.\n//\n// Both factories return the same PlatformApi shape, built by _buildApi().\n// ---------------------------------------------------------------------------\n\nexport type PlatformApi = ReturnType<typeof _buildApi>;\n\n// Public-facing alias for the authenticated client. `PlatformApi` names the\n// builder's return type; `AlveraClient` is the name consumers reach for —\n// notably the `$alvera` ambient global the CLI injects into contract files.\n// Pure alias, no distinct shape.\nexport type AlveraClient = PlatformApi;\n\nexport interface DatasetSearchOptions {\n  userSearchId?: string;\n  /**\n   * Optional override for the data access mode used by this read.\n   * Defaults to the session's `data_access_mode`. The session's capability\n   * ceiling still applies — escalating beyond it returns 403.\n   */\n  dataAccessMode?: 'raw' | 'tokenized' | 'redacted';\n  /**\n   * Outer SQL-chunk pagination. Defaults page=1, page_size=1000 (max 1000).\n   * Pages cached IDs from `search_results`; the cap is dictated by\n   * Postgres' `WHERE id IN (^ids)` plan (planner regresses past ~1k params).\n   */\n  outerPagination?: { page?: number; pageSize?: number };\n  /**\n   * Inner resource Flop pagination. Defaults page=1, page_size=20.\n   * Also accepts an `orderDirection` (sorts on the schema's `:global_search`\n   * compound) and `globalSearch` (single ILIKE-OR text-search knob).\n   */\n  innerSearch?: {\n    page?: number;\n    pageSize?: number;\n    orderDirection?: 'asc' | 'desc';\n    globalSearch?: string;\n  };\n}\n\nexport interface DatasetMetadataOptions {\n  genericTableId?: string;\n}\n\nfunction authHeaders(config: ApiConfig): Record<string, string> {\n  // Key-only (no session): X-API-Key alone — omitting Authorization entirely\n  // beats sending `Bearer ` junk that a strict middleware would 401.\n  return {\n    ...(config.sessionToken ? { Authorization: `Bearer ${config.sessionToken}` } : {}),\n    'X-API-Key': config.apiKey,\n  };\n}\n\n// Serializes query params in the bracket style the API parses natively:\n// scalars as `k=v`, objects as `k[a]=v`, and arrays as repeated `k[]=v` —\n// including the case that matters, arrays of objects as `k[][a]=v`. The\n// list endpoints take `filters` as an array of `{field, op, value}`\n// objects (`filters[][field]=handle&filters[][op]=ilike&filters[][value]=x`);\n// the server groups consecutive `[]` entries into one object per element\n// (a repeated inner key starts the next element). Indexed brackets\n// (`filters[0][field]=…`) do NOT work — the server parses them into a\n// map keyed by the index string and rejects it as a non-array.\n//\n// The generated client can't produce this shape: its serializer refuses\n// arrays of objects outright (\"Deeply-nested arrays/objects aren't\n// supported\"). And client-level config alone is NOT enough — every\n// generated list function carries its own `querySerializer: {parameters:\n// {filters: …deepObject}}` option that shadows the client config at\n// request time (`...options` spreads last in the generated call). The\n// curated list wrappers therefore pass this function per call — a\n// per-call function takes precedence over the generated options object.\nexport function bracketQuerySerializer(query: Record<string, unknown>): string {\n  const params = new URLSearchParams();\n  const append = (key: string, value: unknown): void => {\n    if (value === undefined || value === null) return;\n    if (Array.isArray(value)) {\n      for (const item of value) append(`${key}[]`, item);\n      return;\n    }\n    if (typeof value === 'object') {\n      for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n        append(`${key}[${k}]`, v);\n      }\n      return;\n    }\n    params.append(key, String(value));\n  };\n  for (const [key, value] of Object.entries(query)) append(key, value);\n  return params.toString();\n}\n\nexport function createPlatformApi(config: ApiConfig): PlatformApi {\n  const baseUrl = config.baseUrl.replace(/\\/$/, '');\n  client.setConfig({\n    baseUrl,\n    headers: authHeaders(config),\n    querySerializer: bracketQuerySerializer,\n  });\n  if (config.debug) _attachDebugInterceptors(client, config.debug);\n  return _buildApi(client);\n}\n\nexport function createIsolatedPlatformApi(config: ApiConfig): PlatformApi {\n  const baseUrl = config.baseUrl.replace(/\\/$/, '');\n  const myClient = createClient({\n    baseUrl,\n    headers: authHeaders(config),\n    querySerializer: bracketQuerySerializer,\n  });\n  if (config.debug) _attachDebugInterceptors(myClient, config.debug);\n  return _buildApi(myClient);\n}\n\n// Decorates every thrown 4xx/5xx error with the HTTP status of the\n// originating Response. hey-api otherwise throws only the parsed body,\n// which makes 404 (a valid \"empty result\" outcome for the metadata\n// endpoints) indistinguishable from a malformed response. Consumers\n// (CLI `get-metadata`, agents driving the SDK) can then short-circuit\n// on `(err as { _httpStatus?: number })._httpStatus === 404` without\n// pattern-matching on body strings.\n//\n// Three input shapes the interceptor must survive:\n//\n//   1. HTTP 4xx/5xx — `response` is the real Response, `error` is the\n//      parsed body. Decorate `error` with `_httpStatus`.\n//\n//   2. HTTP 4xx/5xx with primitive body (`Not Found` plain text) —\n//      `response` is the real Response, `error` is a string. Wrap into\n//      `{_httpStatus, message}` so the status survives.\n//\n//   3. Transport failure (server down, DNS miss, abort) — `response` is\n//      undefined, `error` is the underlying TypeError (\"fetch failed\"\n//      etc.). NEVER read `.status` off undefined — that turns an\n//      already-recoverable error into a cryptic JS crash. Pass the\n//      error through unchanged so the caller's catch handler sees the\n//      real cause.\n// Pure function lifted out of the interceptor body so it's directly\n// testable without spinning up a real Client. The interceptor is one\n// thin wiring call; this is the actual logic.\nexport function decorateErrorWithStatus(\n  error: unknown,\n  response: Response | undefined,\n): unknown {\n  if (!response) {\n    return error;\n  }\n  const status = response.status;\n  if (error && typeof error === 'object') {\n    (error as Record<string, unknown>)._httpStatus = status;\n    return error;\n  }\n  return {\n    _httpStatus: status,\n    message: typeof error === 'string' ? error : String(error ?? response.statusText),\n  };\n}\n\nfunction _attachStatusInterceptor(myClient: Client): void {\n  myClient.interceptors.error.use(decorateErrorWithStatus);\n}\n\n/**\n * Replaces every literal occurrence of each entry in `redactStrings`\n * with `********`. Uses `split / join` — same approach as the CLI's\n * `redactInstalled` helper. Linear in `text.length × redactStrings.length`;\n * not optimized for speed (debug-mode only, off the hot path).\n *\n * Entries that are empty / falsy are skipped (avoids the infinite\n * replace loop that an empty needle produces in some implementations).\n */\nfunction redactLiterals(text: string, redactStrings: readonly string[] | undefined): string {\n  if (!redactStrings || redactStrings.length === 0) return text;\n  let out = text;\n  for (const literal of redactStrings) {\n    if (!literal) continue;\n    out = out.split(literal).join('********');\n  }\n  return out;\n}\n\n/**\n * Attaches request + response interceptors that produce a formatted log\n * line per call and hand it to `debug.log`.\n *\n * Format:\n *\n *   `→ POST /api/v1/tenants/foo/datalakes`\n *   `   <body JSON, indented 4 spaces, secrets redacted>`\n *\n *   `← 422 /api/v1/tenants/foo/datalakes`\n *   `   <response body JSON, indented 4 spaces, secrets redacted>`\n *\n * Request body extraction reads `request.clone().text()` so the original\n * stream stays consumable by the underlying fetch (clone() is the\n * standard fetch-API pattern for stream-double-read). Response body\n * extraction does the same on the response side. Both happen\n * asynchronously inside the interceptor; hey-api's middleware chain\n * awaits the returned promise before continuing.\n *\n * Errors thrown inside `debug.log` are caught and swallowed — a buggy\n * caller-supplied logger must never break the actual HTTP call.\n */\n/**\n * `origin + pathname` — the server, then the route. The query string is\n * deliberately left off: it carries filter values, not routing, and the\n * body below the line is where those are read.\n *\n * Falls back to the raw string if the URL will not parse, so a debug\n * logger can never be the thing that breaks a call.\n */\nfunction absoluteUrl(rawUrl: string): string {\n  try {\n    const parsed = new URL(rawUrl);\n    return `${parsed.origin}${parsed.pathname}`;\n  } catch {\n    return rawUrl;\n  }\n}\n\nfunction _attachDebugInterceptors(myClient: Client, debug: ApiDebugConfig): void {\n  const { log, redactStrings } = debug;\n\n  myClient.interceptors.request.use(async (request) => {\n    try {\n      const url = absoluteUrl(request.url);\n      const cloned = request.clone();\n      const body = cloned.body ? await cloned.text() : '';\n      const formatted = body\n        ? `→ ${request.method} ${url}\\n${indent(redactLiterals(body, redactStrings), 4)}`\n        : `→ ${request.method} ${url}`;\n      log(formatted);\n    } catch {\n      // never break the request because the debug logger failed\n    }\n    return request;\n  });\n\n  myClient.interceptors.response.use(async (response, request) => {\n    try {\n      const url = absoluteUrl(request.url);\n      const cloned = response.clone();\n      const body = await cloned.text();\n      const formatted = body\n        ? `← ${response.status} ${url}\\n${indent(redactLiterals(body, redactStrings), 4)}`\n        : `← ${response.status} ${url}`;\n      log(formatted);\n    } catch {\n      // never break the response chain because the debug logger failed\n    }\n    return response;\n  });\n}\n\nfunction indent(text: string, spaces: number): string {\n  const pad = ' '.repeat(spaces);\n  return text\n    .split('\\n')\n    .map((line) => pad + line)\n    .join('\\n');\n}\n\nfunction _buildApi(myClient: Client) {\n  _attachStatusInterceptor(myClient);\n  return {\n    ping: () =>\n      platformApiPingControllerPing({ client: myClient, throwOnError: true }),\n\n    sessions: {\n      verify: () =>\n        platformApiSessionControllerVerify({ client: myClient, throwOnError: true }),\n      // Key-only companion (GET /api-keys/verify, split from verify by\n      // GH-753): proves the X-API-Key alone resolves — no Bearer required.\n      verifyApiKey: () =>\n        platformApiSessionControllerVerifyApiKey({ client: myClient, throwOnError: true }),\n      // Revoke the current Bearer session — deactivates it and deletes the\n      // linked UserToken, so the token is invalid immediately. Answers 204 with\n      // no body. Requires `Authorization: Bearer <session_token>`; an X-API-Key\n      // alone cannot revoke (the key rides along as the mandatory companion\n      // credential). The client instance is not reset — build a new session\n      // rather than reusing this one after calling it.\n      delete: () => platformApiSessionControllerDelete({ client: myClient, throwOnError: true }),\n    },\n\n    admin: {\n      // Admin tenant sign-up (moved from /auth/sign-up): the test harness\n      // creating tenant users; production user creation is UI-driven.\n      signUp: (body: SignUpRequestWritable) =>\n        platformApiIntegrationTestOnlyAdminControllerSignUp({ body, client: myClient, throwOnError: true }),\n      confirmUser: (id: string) =>\n        platformApiIntegrationTestOnlyAdminControllerConfirmUser({ path: { id }, client: myClient, throwOnError: true }),\n      // Admin side door: mint a public_api key for a tenant. Exists for the\n      // integration-test bootstrap flow, which has no LiveView console to\n      // use the normal API-keys UI. Returns the plaintext once — record it,\n      // it is never shown again.\n      createTenantApiKey: (tenantSlug: string, body: AdminCreateTenantApiKeyRequest) =>\n        platformApiIntegrationTestOnlyAdminControllerCreateTenantApiKey({\n          path: { tenant_slug: tenantSlug },\n          body,\n          client: myClient,\n          throwOnError: true,\n        }),\n    },\n\n    tenants: {\n      list: (query?: PlatformApiTenantControllerIndexData['query']) =>\n        platformApiTenantControllerIndex({\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      create: (body: TenantRequest) =>\n        platformApiTenantControllerCreate({ body: body as never, client: myClient, throwOnError: true }),\n    },\n\n    invitations: {\n      list: () =>\n        platformApiInvitationControllerIndex({ client: myClient, throwOnError: true }),\n      create: (tenantSlug: string, body: InvitationRequest) =>\n        platformApiInvitationControllerCreate({\n          path: { tenant_slug: tenantSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      accept: (id: string) =>\n        platformApiInvitationControllerAccept({ path: { id }, client: myClient, throwOnError: true }),\n    },\n\n    datasets: {\n      // Dataset endpoints are datalake-slug-scoped:\n      //   /tenants/:tenant_slug/datalakes/:datalake_slug/datasets/...\n      // The datalake is mandatory + explicit in the URL — there is no\n      // `datalake_id` query param and no tenant-derived default.\n      search: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        dataset: string,\n        options: DatasetSearchOptions = {},\n      ) => {\n        // Platform uses two-tier nested pagination — `outer_pagination[page]`\n        // / `outer_pagination[page_size]` for the SQL chunk + `inner_search[*]`\n        // for the resource Flop. Flat `page` / `page_size` are NOT accepted by\n        // the strict OpenAPI plug.\n        const outer = options.outerPagination ?? {};\n        const inner = options.innerSearch ?? {};\n        const outerQuery =\n          outer.page !== undefined || outer.pageSize !== undefined\n            ? {\n                outer_pagination: {\n                  ...(outer.page !== undefined ? { page: outer.page } : {}),\n                  ...(outer.pageSize !== undefined ? { page_size: outer.pageSize } : {}),\n                },\n              }\n            : {};\n        const innerQuery =\n          inner.page !== undefined ||\n          inner.pageSize !== undefined ||\n          inner.orderDirection !== undefined ||\n          inner.globalSearch !== undefined\n            ? {\n                inner_search: {\n                  ...(inner.page !== undefined ? { page: inner.page } : {}),\n                  ...(inner.pageSize !== undefined ? { page_size: inner.pageSize } : {}),\n                  ...(inner.orderDirection !== undefined\n                    ? { order_direction: inner.orderDirection }\n                    : {}),\n                  ...(inner.globalSearch !== undefined\n                    ? { global_search: inner.globalSearch }\n                    : {}),\n                },\n              }\n            : {};\n\n        return platformApiDatasetControllerSearch({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, dataset },\n          query: {\n            ...(options.userSearchId !== undefined ? { user_search_id: options.userSearchId } : {}),\n            ...(options.dataAccessMode !== undefined\n              ? { data_access_mode: options.dataAccessMode }\n              : {}),\n            ...outerQuery,\n            ...innerQuery,\n          },\n          client: myClient,\n          throwOnError: true,\n        });\n      },\n      // `metadata` is the whole-catalog markdown of every dataset type\n      // registered to this datalake's domain (the platform's\n      // `DatasetController.metadata` action — siblings with\n      // `tools.metadata` / `dataSources.metadata` / etc.).\n      metadata: (tenantSlug: string, datalakeSlug: string) =>\n        platformApiDatasetControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          client: myClient, throwOnError: true,\n        }),\n      // `metadataDetails` is per-dataset-type metadata — pass a system\n      // dataset name (e.g. `patient`) or `'generic_table'` with a\n      // `genericTableId` option for an operator-defined table.\n      metadataDetails: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        datasetType: string,\n        options: DatasetMetadataOptions = {},\n      ) =>\n        platformApiDatasetControllerDatasetMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, dataset_type: datasetType },\n          query: {\n            ...(options.genericTableId !== undefined\n              ? { generic_table_id: options.genericTableId }\n              : {}),\n          },\n          client: myClient, throwOnError: true,\n        }),\n      createUserSearch: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        dataset: string,\n        body: UserSearchRequest,\n      ) =>\n        platformApiDatasetControllerCreateUserSearch({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, dataset },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    datalakes: {\n      list: (\n        tenantSlug: string,\n        query?: PlatformApiDatalakeControllerIndexData['query'],\n      ) =>\n        platformApiDatalakeControllerIndex({\n          path: { tenant_slug: tenantSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, id: string) =>\n        platformApiDatalakeControllerShow({\n          path: { tenant_slug: tenantSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      create: (tenantSlug: string, body: DatalakeRequestWritable) =>\n        platformApiDatalakeControllerCreate({\n          path: { tenant_slug: tenantSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      checksum: (tenantSlug: string, body: DatalakeRequestWritable) =>\n        platformApiDatalakeControllerChecksum({\n          path: { tenant_slug: tenantSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      update: (tenantSlug: string, id: string, body: DatalakeRequestWritable) =>\n        platformApiDatalakeControllerUpdate({\n          path: { tenant_slug: tenantSlug, id },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, id: string) =>\n        platformApiDatalakeControllerDelete({\n          path: { tenant_slug: tenantSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      // The full declared query, not just pagination. The endpoint takes a\n      // Flop `filters` array, and narrowing this wrapper to page/page_size is\n      // what left `get-metadata datalake --only` with no way to scope the\n      // roster — the one surface carrying `status` and the derived copies.\n      //\n      // WIDENING THE TYPE WITHOUT THE SERIALIZER IS A BROKEN CALL, not a\n      // narrower one: openapi-fetch's default refuses a nested array outright\n      // (\"Deeply-nested arrays/objects aren't supported\") before anything\n      // reaches the wire. Flop wants empty brackets — `filters[][field]=…` —\n      // which is what `bracketQuerySerializer` emits, and it is why every\n      // sibling list wrapper already passes it. The two go together.\n      metadata: (\n        tenantSlug: string,\n        query?: PlatformApiDatalakeControllerMetadataData['query'],\n      ) =>\n        platformApiDatalakeControllerMetadata({\n          path: { tenant_slug: tenantSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string) =>\n        platformApiDatalakeControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          client: myClient, throwOnError: true,\n        }),\n      systemDatasets: (tenantSlug: string, datalakeSlug: string) =>\n        platformApiDatalakeControllerSystemDatasets({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          client: myClient, throwOnError: true,\n        }),\n      migrate: (tenantSlug: string, datalakeSlug: string) =>\n        platformApiDatalakeControllerMigrate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          client: myClient, throwOnError: true,\n        }),\n      // Provision the raw lake's tokenized + redacted pair and enqueue a\n      // migration for each. Answers 201 with the RAW lake, its\n      // `derived_datalakes` preloaded — the pair is a has_many on the lake, not\n      // a type of its own, so there is no separate response shape to import.\n      //\n      // Idempotent: already-provisioned lakes come back untouched, so this is\n      // safe to call twice. Refuses with 422 when called on a lake that is not\n      // `type: 'raw'`.\n      //\n      // A derived lake is provisioned EMPTY — the enqueued migration is what\n      // creates its tables and starts the copy. Until those run, a read at\n      // `dataAccessMode: 'tokenized'` has no table to hit. Without this call a\n      // tenant has only its raw lake, and every masked read fails.\n      provisionTokenization: (tenantSlug: string, datalakeSlug: string) =>\n        platformApiDatalakeControllerProvisionTokenization({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          client: myClient, throwOnError: true,\n        }),\n      // How far each table of a derived copy has got. Note the addressing: you\n      // name the PRIMARY lake and a mode — a derived lake HAS a slug but that\n      // slug is not an address, and passing it here is a 404 by design, not a\n      // working alternative spelling.\n      //\n      // Read `caught_up`, never the state's name: `finished_copy` has NOT\n      // finished — the first pass is done but changes made during it are still\n      // unapplied. Only `caught_up: true` means arrived. `label` is the same\n      // state in words and matches the platform's own Tokenization screen, so\n      // use it verbatim rather than inventing a second vocabulary.\n      //\n      // `resync_empties` is what a repair of that table WOULD empty, so a\n      // surface can say how many before offering the action. It is `null` for\n      // tables already caught up (the platform does not pay a query per table\n      // to answer a question about tables nobody will repair) — `null` and `[]`\n      // are different answers, and `[]` never occurs.\n      derivedLakeTables: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        mode: 'tokenized' | 'redacted',\n      ) =>\n        platformApiDatalakeControllerDerivedLakeTables({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, mode },\n          client: myClient, throwOnError: true,\n        }),\n      // Empty one table in a derived copy and copy it again from the start.\n      //\n      // Answers 202: STARTED, not done. There is no completion callback — poll\n      // derivedLakeTables and wait for that table to read `caught_up`.\n      //\n      // It can empty more than the table you named. Postgres refuses to truncate\n      // any table with an inbound foreign key, so repairing a parent empties its\n      // whole dependent closure, transitively, in one statement; all of them are\n      // re-copied by the same run. `emptied` reports what actually went, which is\n      // why it is returned rather than assumed — on real data one request has\n      // reached nine tables.\n      //\n      // It does not roll back. A failure part-way leaves the table empty and says\n      // so, deliberately: the rows to put back are the ones that broke the copy.\n      // Call it again once the cause is addressed — it handles the case where a\n      // previous attempt left the table off the publication.\n      //\n      // `table` is gated against what the copy carries or the original can send;\n      // anything else is a 422 and NOTHING is emptied. That gate is what stands\n      // between a typo and an emptied table, so read derivedLakeTables for the\n      // list rather than constructing names.\n      resyncTable: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        mode: 'tokenized' | 'redacted',\n        body: ResyncTableRequest,\n      ) =>\n        platformApiDatalakeControllerResyncTable({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, mode },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      createUploadLink: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        body: UploadLinkRequest,\n      ) =>\n        platformApiDatalakeControllerCreateUploadLink({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      createDownloadLink: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        body: { bucket: string; key: string },\n      ) =>\n        platformApiDatalakeControllerCreateDownloadLink({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      // Talk to data — generate SQL from a natural-language prompt. Only the\n      // prompt + the datalake schema cross the LLM boundary (never rows), so this\n      // is safe in both modes. Returns SQL for review; run it via executeSql.\n      textToSql: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        body: TextToSqlRequest,\n      ) =>\n        platformApiDatalakeControllerTextToSql({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      // Talk to data — run a read-only SQL statement against the datalake. The\n      // JSON path returns `{ data, meta }` (data = array-of-arrays rows aligned to\n      // meta.columns). `{ format: 'csv' }` makes the server return a text/csv\n      // attachment, so `data` resolves to the raw CSV string; the curated return\n      // is widened to the documented `ExecuteSqlResponse | string` union.\n      executeSql: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        body: ExecuteSqlRequest,\n        options?: { format?: 'csv' },\n      ) => {\n        const result = platformApiDatalakeControllerExecuteSql({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          ...(options?.format === 'csv'\n            ? { query: { format: 'csv' }, parseAs: 'text' as const }\n            : {}),\n          client: myClient, throwOnError: true,\n        });\n        return result as Promise<\n          Omit<Awaited<typeof result>, 'data'> & { data: ExecuteSqlResponse | string }\n        >;\n      },\n    },\n\n    // Advanced migrations — SQL a person wrote by hand for one datalake.\n    // The platform writes two kinds of change itself (create a generic table,\n    // add a column to one); anything else — rename, retype, drop, index — is\n    // written here and applied by the same migrator.\n    //\n    // Datalake-scoped and immutable once run: `update` and `delete` answer\n    // 409 Conflict after the migration has been applied, because a statement\n    // that has already executed cannot be rewritten and deleting it would take\n    // the record of its running with it. Treat 409 here as \"already applied\",\n    // not as a transient conflict to retry.\n    //\n    // `checksum` is the drift fingerprint `alvera plan` posts the desired\n    // config to, comparing the answer against the stored `checksum` from a GET\n    // to decide absent / unchanged / edited. The version is server-assigned and\n    // is deliberately NOT part of the fingerprint.\n    //\n    // Outwardly an *advanced migration*; the platform stores it as\n    // `datalake_migrations`. The wire name is the one that matters here.\n    advancedMigrations: {\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiAdvancedMigrationControllerIndexData['query'],\n      ) =>\n        platformApiAdvancedMigrationControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiAdvancedMigrationControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      create: (tenantSlug: string, datalakeSlug: string, body: AdvancedMigrationRequest) =>\n        platformApiAdvancedMigrationControllerCreate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      update: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        id: string,\n        body: AdvancedMigrationRequest,\n      ) =>\n        platformApiAdvancedMigrationControllerUpdate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiAdvancedMigrationControllerDelete({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      checksum: (tenantSlug: string, datalakeSlug: string, body: AdvancedMigrationRequest) =>\n        platformApiAdvancedMigrationControllerChecksum({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiAdvancedMigrationControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiAdvancedMigrationControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    dataSources: {\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiDataSourceControllerIndexData['query'],\n      ) =>\n        platformApiDataSourceControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiDataSourceControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      create: (tenantSlug: string, datalakeSlug: string, body: DataSourceRequestWritable) =>\n        platformApiDataSourceControllerCreate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      checksum: (tenantSlug: string, datalakeSlug: string, body: DataSourceRequest) =>\n        platformApiDataSourceControllerChecksum({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      update: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        id: string,\n        body: DataSourceRequestWritable,\n      ) =>\n        platformApiDataSourceControllerUpdate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiDataSourceControllerDelete({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiDataSourceControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiDataSourceControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    tools: {\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiToolControllerIndexData['query'],\n      ) =>\n        platformApiToolControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiToolControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      create: (tenantSlug: string, datalakeSlug: string, body: ToolRequestWritable) =>\n        platformApiToolControllerCreate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      checksum: (tenantSlug: string, datalakeSlug: string, body: ToolRequestWritable) =>\n        platformApiToolControllerChecksum({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      update: (tenantSlug: string, datalakeSlug: string, id: string, body: ToolRequestWritable) =>\n        platformApiToolControllerUpdate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiToolControllerDelete({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      testInvocation: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        id: string,\n        body: ManualToolInvocationRequestWritable,\n      ) =>\n        platformApiToolControllerTestInvocation({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiToolControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiToolControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    genericTables: {\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiGenericTableControllerIndexData['query'],\n      ) =>\n        platformApiGenericTableControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiGenericTableControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      create: (tenantSlug: string, datalakeSlug: string, body: CreateGenericTableRequest) =>\n        platformApiGenericTableControllerCreate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body: body as never,\n          client: myClient, throwOnError: true,\n        }),\n      update: (tenantSlug: string, datalakeSlug: string, id: string, body: CreateGenericTableRequest) =>\n        platformApiGenericTableControllerUpdate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body: body as never,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiGenericTableControllerDelete({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      checksum: (tenantSlug: string, datalakeSlug: string, body: GenericTableRequestWritable) =>\n        platformApiGenericTableControllerChecksum({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiGenericTableControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiGenericTableControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    actionStatusUpdaters: {\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiActionStatusUpdaterControllerIndexData['query'],\n      ) =>\n        platformApiActionStatusUpdaterControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiActionStatusUpdaterControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      create: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        body: CreateActionStatusUpdaterRequest,\n      ) =>\n        platformApiActionStatusUpdaterControllerCreate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body: body as never,\n          client: myClient, throwOnError: true,\n        }),\n      checksum: (tenantSlug: string, datalakeSlug: string, body: ActionStatusUpdaterRequestWritable) =>\n        platformApiActionStatusUpdaterControllerChecksum({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      update: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        id: string,\n        body: CreateActionStatusUpdaterRequest,\n      ) =>\n        platformApiActionStatusUpdaterControllerUpdate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body: body as never,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiActionStatusUpdaterControllerDelete({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      // Enqueues one poll cycle on demand — the manual counterpart of the cron\n      // tick. Responds 202 with the updater row AS-IS (the poll runs\n      // asynchronously); poll the row's last_run_status / last_run_events_found\n      // / last_run_error fields for the outcome, and observe delivery status on\n      // the message rows, not in this response. An optional body carries a\n      // one-shot polymorphic updater_body override (e.g. a widened\n      // start_time/end_time window for a backfill) that does not mutate the\n      // persisted updater. Throws a 409 and queues nothing (override included)\n      // when the updater is halted (status other than active) or a poll for it\n      // is already queued or running.\n      refresh: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        id: string,\n        body?: ActionStatusUpdaterRefreshRequest,\n      ) =>\n        platformApiActionStatusUpdaterControllerRefresh({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body: body as never,\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiActionStatusUpdaterControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiActionStatusUpdaterControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    templates: {\n      systemTemplates: (tenantSlug: string, datalakeSlug: string) =>\n        platformApiTemplatesControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiTemplatesControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        filename: string,\n        intent:\n          | 'ai_agent'\n          | 'workflow_filter'\n          | 'workflow_decision'\n          | 'data_activation_interoperability'\n          | 'data_activation_tool_calls'\n          | 'status_poller',\n      ) =>\n        platformApiTemplatesControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, filename },\n          query: { intent },\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    aiAgents: {\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiAiAgentControllerIndexData['query'],\n      ) =>\n        platformApiAiAgentControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiAiAgentControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      create: (tenantSlug: string, datalakeSlug: string, body: CreateAiAgentRequest) =>\n        platformApiAiAgentControllerCreate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body: body as never,\n          client: myClient, throwOnError: true,\n        }),\n      checksum: (tenantSlug: string, datalakeSlug: string, body: AiAgentRequestWritable) =>\n        platformApiAiAgentControllerChecksum({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      update: (tenantSlug: string, datalakeSlug: string, id: string, body: CreateAiAgentRequest) =>\n        platformApiAiAgentControllerUpdate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body: body as never,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiAiAgentControllerDelete({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      invoke: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        id: string,\n        body: AiAgentInvokeRequest,\n      ) =>\n        platformApiAiAgentControllerInvoke({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body: body as never,\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiAiAgentControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiAiAgentControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    // Authenticated links (GH-150). An SMS, MMS or email action's URLs go out\n    // as `<link_prefix>/<token>`; the platform appends only the token, and any\n    // path belongs to the prefix. The host serving the prefix calls these two,\n    // and a publishable key is enough for both.\n    //\n    // Both answer with the link — where it goes, the recipient's legal entity,\n    // the workflow, run and action that sent it, when it expires, when a person\n    // first clicked it — and the message it went out in, whose `metadata` holds\n    // the recipient's `to` merged with what the action's `metadata_template`\n    // rendered. Both refuse the same three ways, thrown with `_httpStatus`:\n    // 404 for a token the platform never minted, 410 past the link's expiry,\n    // 503 when the datalake cannot be reached.\n    authenticatedLinks: {\n      // A tap on the link. Only the token is required; forward what the tap's\n      // request said about itself (method, user agent, ip, country, headers).\n      // A person's tap moves the message to `clicked` and stamps the first\n      // click; a HEAD, a prefetch, an empty user agent, or a bot, link-preview\n      // or mail-scanner user agent moves nothing.\n      exchange: (tenantSlug: string, datalakeSlug: string, body: AuthenticatedLinkExchangeRequest) =>\n        platformApiAuthenticatedLinkControllerExchange({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      // What happened on the page, keyed by the same token: `opened`, or\n      // `form_submitted`, with their times. Also 422 for a status the message\n      // cannot have.\n      updateMessageTracking: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        body: AuthenticatedLinkUpdateMessageTrackingRequest,\n      ) =>\n        platformApiAuthenticatedLinkControllerUpdateMessageTracking({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    dataActivationClients: {\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiDataActivationClientControllerIndexData['query'],\n      ) =>\n        platformApiDataActivationClientControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiDataActivationClientControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      create: (tenantSlug: string, datalakeSlug: string, body: DataActivationClientRequestWritable) =>\n        platformApiDataActivationClientControllerCreate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      checksum: (tenantSlug: string, datalakeSlug: string, body: DataActivationClientRequestWritable) =>\n        platformApiDataActivationClientControllerChecksum({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      update: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        id: string,\n        body: DataActivationClientRequestWritable,\n      ) =>\n        platformApiDataActivationClientControllerUpdate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiDataActivationClientControllerDelete({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiDataActivationClientControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiDataActivationClientControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      runManually: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        slug: string,\n        body?: RunManuallyRequestWritable,\n      ) =>\n        platformApiDataActivationClientControllerRunManually({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, slug },\n          body: body ?? {},\n          client: myClient, throwOnError: true,\n        }),\n      ingest: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        slug: string,\n        body: IngestRequest,\n      ) =>\n        platformApiDataActivationClientControllerIngest({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, slug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      ingestFile: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        slug: string,\n        body: IngestFileRequest,\n      ) =>\n        platformApiDataActivationClientControllerIngestFile({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, slug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      logs: {\n        list: (\n          tenantSlug: string,\n          datalakeSlug: string,\n          slug: string,\n          query?: PlatformApiDataActivationClientControllerLogsIndexData['query'],\n        ) =>\n          platformApiDataActivationClientControllerLogsIndex({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, slug },\n            query,\n            querySerializer: bracketQuerySerializer,\n            client: myClient, throwOnError: true,\n          }),\n        get: (tenantSlug: string, datalakeSlug: string, slug: string, id: string) =>\n          platformApiDataActivationClientControllerLogShow({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, slug, id },\n            client: myClient, throwOnError: true,\n          }),\n      },\n\n      // One record per RUN — the sibling `logs` above are one record per\n      // dataset table a run wrote into. Before this existed, \"is this run\n      // done?\" could only be answered by counting log rows and guessing, so a\n      // run that produced nothing and never would looked exactly like a run\n      // still going.\n      //\n      // The fields, as the platform documents them:\n      //\n      //   closed_at   When the run was attempted and exhausted. Null while it\n      //               is still going. It does NOT mean rows landed and it does\n      //               NOT mean the archive was merged — read `status` for the\n      //               outcome, and only once this is set.\n      //   status      processing | succeeded | partial | skipped | failed.\n      //               It means nothing until `closed_at` is set; a run in\n      //               flight always reads `processing`. `failed` = the run died\n      //               before writing anything. `partial` = it ran and at least\n      //               one row was refused on the way in. `skipped` = it ran and\n      //               there was nothing to do (empty file, every row filtered\n      //               out, or the client has no contracts).\n      //   rows_total  Source rows enqueued for this run. The run's own count;\n      //               each per-table log keeps its own.\n      //\n      // The run's enum has FIVE members and the per-table log's has FOUR —\n      // `skipped` is a property of a whole run, not of one table. They are two\n      // types on purpose; do not collapse them.\n      batches: {\n        // Full Flop surface (page/page_size/order_by/order_directions/filters)\n        // — without the query type + bracket serializer this wrapper is\n        // page-1-only, which is the exact defect the sibling list wrappers hit.\n        list: (\n          tenantSlug: string,\n          datalakeSlug: string,\n          slug: string,\n          query?: PlatformApiDataActivationClientControllerBatchesIndexData['query'],\n        ) =>\n          platformApiDataActivationClientControllerBatchesIndex({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, slug },\n            query,\n            querySerializer: bracketQuerySerializer,\n            client: myClient, throwOnError: true,\n          }),\n        // `batchId`, NOT `id`, unlike every sibling `get` in this file. The\n        // route keys on the batch_id COLUMN (the identifier every job of the\n        // run carries, as returned by runManually or an ingest), and the\n        // response carries BOTH that and a separate record `id` — so passing\n        // the wrong one of the two is a silent 404, never a type error.\n        get: (tenantSlug: string, datalakeSlug: string, slug: string, batchId: string) =>\n          platformApiDataActivationClientControllerBatchShow({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, slug, batch_id: batchId },\n            client: myClient, throwOnError: true,\n          }),\n      },\n    },\n\n    interoperabilityContracts: {\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiInteroperabilityContractControllerIndexData['query'],\n      ) =>\n        platformApiInteroperabilityContractControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiInteroperabilityContractControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      create: (tenantSlug: string, datalakeSlug: string, body: InteroperabilityContractRequestWritable) =>\n        platformApiInteroperabilityContractControllerCreate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      checksum: (tenantSlug: string, datalakeSlug: string, body: InteroperabilityContractRequestWritable) =>\n        platformApiInteroperabilityContractControllerChecksum({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      update: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        id: string,\n        body: InteroperabilityContractRequestWritable,\n      ) =>\n        platformApiInteroperabilityContractControllerUpdate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiInteroperabilityContractControllerDelete({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiInteroperabilityContractControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiInteroperabilityContractControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      run: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        slug: string,\n        body: InteroperabilityRunRequest,\n      ) =>\n        platformApiInteroperabilityContractControllerRun({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, slug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    mdm: {\n      verify: (tenantSlug: string, datalakeSlug: string, body: MdmVerifyRequest) =>\n        platformApiMdmControllerVerify({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n    },\n\n    workflows: {\n      // CRUD — datalake-scoped, addressed by workflow id\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiAgenticWorkflowControllerIndexData['query'],\n      ) =>\n        platformApiAgenticWorkflowControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiAgenticWorkflowControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      // create/update take the real generated body type rather than\n      // `Record<string, unknown>`. Both POST/PUT `AgenticWorkflowRequest`, and\n      // PUT is full-replacement (there is no PATCH and no add/remove-tag\n      // endpoint), so an omitted required key is a 422 rather than \"leave it\n      // alone\". Typing the body makes the next required field a compile error\n      // instead of a production 422 — the `tags` addition shipped 15 wrong\n      // examples through a green gate precisely because this was untyped.\n      create: (tenantSlug: string, datalakeSlug: string, body: AgenticWorkflowRequestWritable) =>\n        platformApiAgenticWorkflowControllerCreate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      // checksum is typed too. It POSTs the same `AgenticWorkflowRequest`, and\n      // tags participate in the drift fingerprint — so a checksum computed off\n      // a body missing them is a WRONG ANSWER rather than a rejected call,\n      // which is the worse failure: it returns 200 with a fingerprint that\n      // silently disagrees with the server's.\n      //\n      // This is knowingly stricter than the other resources' checksum, which\n      // still take the loose shape. The CLI dispatches all of them through one\n      // generic call site (`contracts/server-checksum.ts`); that caller needs\n      // updating for workflows.\n      checksum: (tenantSlug: string, datalakeSlug: string, body: AgenticWorkflowRequestWritable) =>\n        platformApiAgenticWorkflowControllerChecksum({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      update: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        id: string,\n        body: AgenticWorkflowRequestWritable,\n      ) =>\n        platformApiAgenticWorkflowControllerUpdate({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      delete: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiAgenticWorkflowControllerDelete({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      metadata: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: { page?: number; page_size?: number },\n      ) =>\n        platformApiAgenticWorkflowControllerMetadata({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          client: myClient, throwOnError: true,\n        }),\n      metadataDetails: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiAgenticWorkflowControllerMetadataDetails({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n\n      // Operations — datalake-scoped, addressed by workflow slug\n      execute: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        workflowSlug: string,\n        body: ExecuteActionRequest,\n      ) =>\n        platformApiAgenticWorkflowOperationsControllerExecute({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n      run: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        workflowSlug: string,\n        body: RunWorkflowRequest,\n      ) =>\n        platformApiAgenticWorkflowOperationsControllerRunWorkflow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug },\n          body,\n          client: myClient, throwOnError: true,\n        }),\n\n      batchLogs: {\n        list: (\n          tenantSlug: string,\n          datalakeSlug: string,\n          workflowSlug: string,\n          query?: PlatformApiAgenticWorkflowOperationsControllerBatchLogsIndexData['query'],\n        ) =>\n          platformApiAgenticWorkflowOperationsControllerBatchLogsIndex({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug },\n            query,\n            querySerializer: bracketQuerySerializer,\n            client: myClient, throwOnError: true,\n          }),\n        get: (tenantSlug: string, datalakeSlug: string, workflowSlug: string, id: string) =>\n          platformApiAgenticWorkflowOperationsControllerBatchLogShow({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug, id },\n            client: myClient, throwOnError: true,\n          }),\n        start: (tenantSlug: string, datalakeSlug: string, workflowSlug: string, id: string) =>\n          platformApiAgenticWorkflowOperationsControllerBatchLogStart({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug, id },\n            client: myClient, throwOnError: true,\n          }),\n        stop: (tenantSlug: string, datalakeSlug: string, workflowSlug: string, id: string) =>\n          platformApiAgenticWorkflowOperationsControllerBatchLogStop({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug, id },\n            client: myClient, throwOnError: true,\n          }),\n        refresh: (tenantSlug: string, datalakeSlug: string, workflowSlug: string, id: string) =>\n          platformApiAgenticWorkflowOperationsControllerBatchLogRefresh({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug, id },\n            client: myClient, throwOnError: true,\n          }),\n      },\n\n      workflowLogs: {\n        // Full Flop surface (the endpoint declares page/page_size/order_by/\n        // order_directions/filters) — without it the wrapper is page-1-only\n        // and older dispatches drown under newer rehearsal logs.\n        list: (\n          tenantSlug: string,\n          datalakeSlug: string,\n          workflowSlug: string,\n          query?: PlatformApiAgenticWorkflowOperationsControllerWorkflowLogsIndexData['query'],\n        ) =>\n          platformApiAgenticWorkflowOperationsControllerWorkflowLogsIndex({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug },\n            query,\n            // Flop arrays need empty-bracket serialization; the generated\n            // per-call options shadow the client config, so pass it here.\n            querySerializer: bracketQuerySerializer,\n            client: myClient, throwOnError: true,\n          }),\n        // No `dataAccessMode` here, deliberately. This endpoint used to take a\n        // `data_access_mode` query and the platform removed it — the\n        // regenerated type is now `query?: never`, so passing one does not\n        // compile. An execution log is workflow bookkeeping rather than lake\n        // rows, so there is no tier to select; the tier choice lives on the\n        // reads that return data (`datasets.search`, `datalakes.executeSql`).\n        get: (\n          tenantSlug: string,\n          datalakeSlug: string,\n          workflowSlug: string,\n          id: string,\n        ) =>\n          platformApiAgenticWorkflowOperationsControllerWorkflowLogShow({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug, id },\n            client: myClient, throwOnError: true,\n          }),\n        download: (tenantSlug: string, datalakeSlug: string, workflowSlug: string, id: string) =>\n          platformApiAgenticWorkflowOperationsControllerWorkflowLogDownload({\n            path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, workflow_slug: workflowSlug, id },\n            client: myClient, throwOnError: true,\n          }),\n      },\n    },\n\n    // Workflow runs — one row per `workflows.run` invocation. Deliberately\n    // datalake-scoped, NOT nested under `workflows`: the question a campaign\n    // screen asks is \"what is going out from this datalake\", across workflows.\n    // Nested under a workflow slug, a caller would have to fan out over every\n    // workflow to build one list.\n    //\n    // `workflows.run` now only SCHEDULES — its response carries\n    // workflow_run_id/status/scheduled_at and no longer carries\n    // enqueued_count/batch_id/workflow_run_log_id, because the segment is\n    // resolved when the run fires, not when it is scheduled. Those three\n    // become readable here, via `get`, once status leaves `scheduled`.\n    workflowRuns: {\n      // Full Flop surface (page/page_size/order_by/order_directions/filters)\n      // — without the query type + bracket serializer this wrapper is\n      // page-1-only, which is the exact defect the sibling list wrappers hit.\n      list: (\n        tenantSlug: string,\n        datalakeSlug: string,\n        query?: PlatformApiWorkflowRunControllerIndexData['query'],\n      ) =>\n        platformApiWorkflowRunControllerIndex({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug },\n          query,\n          querySerializer: bracketQuerySerializer,\n          client: myClient, throwOnError: true,\n        }),\n      get: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiWorkflowRunControllerShow({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n      // POST to a named sub-resource, not a status PUT: cancelling races the\n      // worker on a single conditional UPDATE, so exactly one side wins and\n      // the loser is told. Refused once a run reaches `processing` — the\n      // fan-out has begun and an executing Oban job cannot be stopped.\n      cancel: (tenantSlug: string, datalakeSlug: string, id: string) =>\n        platformApiWorkflowRunControllerCancel({\n          path: { tenant_slug: tenantSlug, datalake_slug: datalakeSlug, id },\n          client: myClient, throwOnError: true,\n        }),\n    },\n  };\n}\n","import { ENVIRONMENTS, type EnvironmentName } from './environments.generated.js';\n\nexport {\n  ActionType,\n  type ActionStatusUpdaterCloudWatchQueryRequest,\n  type ActionStatusUpdaterRequestWritable,\n  type ActionStatusUpdaterResponse,\n  type ActionStatusUpdaterRestCallRequest,\n  type AdvancedMigrationListResponse,\n  type AdvancedMigrationRequest,\n  type AdvancedMigrationResponse,\n  type AgenticWorkflowListResponse,\n  type AgenticWorkflowRequestWritable,\n  type AgenticWorkflowResponse,\n  type AiAgentRequestWritable,\n  type AiAgentResponse,\n  type AlveraApiError,\n  type AlveraClient,\n  type ApiConfig,\n  type ApiDebugConfig,\n  type AuthenticatedLinkExchangeRequest,\n  type AuthenticatedLinkResponse,\n  type AuthenticatedLinkUpdateMessageTrackingRequest,\n  type BatchLogListResponse,\n  type BatchLogResponse,\n  type CreateActionStatusUpdaterRequest,\n  type CreateAiAgentRequest,\n  type CreateGenericTableRequest,\n  createIsolatedPlatformApi,\n  createPlatformApi,\n  createBootstrapSession,\n  createSession,\n  type CreateSessionParams,\n  type DataActivationClientBatchListResponse,\n  type DataActivationClientBatchResponse,\n  type DataActivationClientListResponse,\n  type DataActivationClientLogListResponse,\n  type DataActivationClientLogResponse,\n  type DataActivationClientRequestWritable,\n  type DataActivationClientResponse,\n  type DatalakeRequestWritable,\n  type DatalakeResponse,\n  type DatasetMetadataOptions,\n  type DatasetSearchOptions,\n  type DatasetSearchResponse,\n  type DataSourceRequest,\n  type DataSourceRequestWritable,\n  type DataSourceResponse,\n  type DerivedLakeTablesResponse,\n  type DownloadUrlResponse,\n  type ErrorResponse,\n  type ExecuteActionRequest,\n  type ExecuteActionResponse,\n  type ExecuteSqlMeta,\n  type ExecuteSqlRequest,\n  type ExecuteSqlResponse,\n  type GenericTableColumnRequest,\n  type GenericTableColumnResponse,\n  type GenericTableResponse,\n  type IngestFileRequest,\n  type IngestRequest,\n  type InteroperabilityContractAiAgentRequestWritable,\n  type InteroperabilityContractListResponse,\n  type InteroperabilityContractRequestWritable,\n  type InteroperabilityContractResponse,\n  type InteroperabilityRunRequest,\n  type InteroperabilityRunResponse,\n  type MdmVerifyRequest,\n  type MdmVerifyResponse,\n  type MessageResponse,\n  type PaginationMeta,\n  type PlatformApi,\n  type ResyncTableRequest,\n  type ResyncTableResponse,\n  revokeSession,\n  type RunManuallyRequestWritable,\n  type RunManuallyResponse,\n  type RunWorkflowRequest,\n  type RunWorkflowResponse,\n  type WorkflowRunResponse,\n  type WorkflowRunListResponse,\n  type ToolTwilioRequest,\n  type ToolTwilioRequestWritable,\n  type ToolTwilioResponse,\n  type TwilioRequest,\n  type TwilioRequestWritable,\n  type TwilioResponse,\n  type SessionResponse,\n  type SessionResult,\n  type TemplateConfig,\n  type TenantListResponse,\n  type TenantResponse,\n  type TextToSqlRequest,\n  type TextToSqlResponse,\n  ToolIntent,\n  type ToolListResponse,\n  type ToolRequest,\n  type ToolRequestWritable,\n  type ToolResponse,\n  type UploadLinkRequest,\n  type UploadLinkResponse,\n  type WorkflowAiAgentRequestWritable,\n  type WorkflowLogListResponse,\n  type WorkflowLogResponse,\n} from './client.js';\n\n// Environment catalogue (generated from <monorepo-root>/openapi.yaml#servers\n// per v10 reversal). Exposed here so the CLI package can resolve `--env`\n// against the same canonical list the SDK uses to construct default base URLs.\nexport {\n  DEFAULT_ENVIRONMENT,\n  ENVIRONMENTS,\n  type EnvironmentName,\n} from './environments.generated.js';\n\n// Membership narrow over the env catalogue above. This is NOT a request/response\n// validator (the package still ships none — see the note below); it only checks an\n// arbitrary string against the SDK's own canonical env list, letting consumers\n// validate `ALVERA_ENV`-style input instead of an unchecked `as EnvironmentName` cast.\nexport function isEnvironmentName(name: string): name is EnvironmentName {\n  return Object.prototype.hasOwnProperty.call(ENVIRONMENTS, name);\n}\n\n// NOTE: there is intentionally NO `export *` from a generated module here.\n// The SDK ships TYPES + a fetch client only — it exposes no runtime\n// validators. Body validation is server-authoritative (requests → 422\n// `AlveraApiError`, responses → OpenApiSpex cast). The `alvera` CLI does its\n// own local AJV pre-flight at `plan` time, off the same `openapi.yaml`; it is\n// CLI-internal and not part of this package's surface.\n"],"mappings":"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"}