@thinkai/tai-api-contract 2.184.0 → 2.186.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -222,6 +222,79 @@ export interface paths {
222
222
  patch?: never;
223
223
  trace?: never;
224
224
  };
225
+ "/admin/automation-cost/summary": {
226
+ parameters: {
227
+ query?: never;
228
+ header?: never;
229
+ path?: never;
230
+ cookie?: never;
231
+ };
232
+ /**
233
+ * Estimated Agent automation spend by workspace and operation
234
+ * @description Rolls up `tai_readiness_token_usage` for the given UTC range (defaults to the current UTC calendar month when `from`/`to` are omitted). Each row is one `(workspaceId, operation)` with token totals, invocation count, and `estimatedSpendCents` from `workers.automationCost.pricing` (Cursor Auto pool list-rate defaults when keys are missing). Portfolio `totals` are sums of the returned rows.
235
+ * **Authorization:** Bearer JWT required. Caller email must appear in `PLATFORM_ADMIN_EMAILS`. Separate from customer Insights AI Usage & Spend / `ai_cost_budget`.
236
+ */
237
+ get: operations["adminGetAutomationCostSummary"];
238
+ put?: never;
239
+ post?: never;
240
+ delete?: never;
241
+ options?: never;
242
+ head?: never;
243
+ patch?: never;
244
+ trace?: never;
245
+ };
246
+ "/admin/workspaces/{workspaceId}/automation-cost/budget": {
247
+ parameters: {
248
+ query?: never;
249
+ header?: never;
250
+ path?: never;
251
+ cookie?: never;
252
+ };
253
+ /**
254
+ * Get automation-cost budget and month status for a workspace
255
+ * @description Returns budget rows for `readiness_analysis` and/or `readiness_fix` with `monthSpendCents` (estimated from token rows in the current UTC month) and `status` (`ok` | `warn` | `hard_stopped` | `paused`). When no budget is configured, `monthlyBudgetCents` is null and status is `ok` (unlimited) unless paused.
256
+ * **Authorization:** Bearer JWT + `PLATFORM_ADMIN_EMAILS`.
257
+ */
258
+ get: operations["adminGetAutomationCostBudget"];
259
+ /**
260
+ * Upsert automation-cost budget for one operation
261
+ * @description Upserts `{ operation, monthlyBudgetCents, warnThresholdPct, hardEnabled }` into workspace `automation_cost_budget` (not `ai_cost_budget`). Default `warnThresholdPct` is 80. `monthlyBudgetCents: 0` with `hardEnabled: true` is an immediate hard stop. Returns the refreshed budget view for that operation.
262
+ * **Authorization:** Bearer JWT + `PLATFORM_ADMIN_EMAILS`.
263
+ */
264
+ put: operations["adminPutAutomationCostBudget"];
265
+ post?: never;
266
+ delete?: never;
267
+ options?: never;
268
+ head?: never;
269
+ patch?: never;
270
+ trace?: never;
271
+ };
272
+ "/admin/workspaces/{workspaceId}/automation-cost/pause": {
273
+ parameters: {
274
+ query?: never;
275
+ header?: never;
276
+ path?: never;
277
+ cookie?: never;
278
+ };
279
+ get?: never;
280
+ put?: never;
281
+ /**
282
+ * Pause Agent automation for selected operations
283
+ * @description Sets a per-workspace pause kill-switch for the listed operations. Workers honor pause the same as a hard budget stop (enforcement is a follow-up slice). Empty `operations` → `400`.
284
+ * **Authorization:** Bearer JWT + `PLATFORM_ADMIN_EMAILS`.
285
+ */
286
+ post: operations["adminPostAutomationCostPause"];
287
+ /**
288
+ * Clear automation-cost pause for a workspace
289
+ * @description Clears `automation_cost_pause` for the workspace so workers may resume when under hard cap.
290
+ * **Authorization:** Bearer JWT + `PLATFORM_ADMIN_EMAILS`.
291
+ */
292
+ delete: operations["adminDeleteAutomationCostPause"];
293
+ options?: never;
294
+ head?: never;
295
+ patch?: never;
296
+ trace?: never;
297
+ };
225
298
  "/privacy-requests": {
226
299
  parameters: {
227
300
  query?: never;
@@ -2227,6 +2300,46 @@ export interface paths {
2227
2300
  patch?: never;
2228
2301
  trace?: never;
2229
2302
  };
2303
+ "/workspaces/{workspaceId}/integrations/datadog": {
2304
+ parameters: {
2305
+ query?: never;
2306
+ header?: never;
2307
+ path?: never;
2308
+ cookie?: never;
2309
+ };
2310
+ /**
2311
+ * Datadog monitoring integration status
2312
+ * @description Returns whether Datadog is connected for the workspace (site + dual keys) and the last monitoring ingest sync outcome (incidents/deployments pulled into Quality and DORA metrics).
2313
+ */
2314
+ get: operations["getWorkspaceDatadogIntegrationStatus"];
2315
+ put?: never;
2316
+ post?: never;
2317
+ delete?: never;
2318
+ options?: never;
2319
+ head?: never;
2320
+ patch?: never;
2321
+ trace?: never;
2322
+ };
2323
+ "/workspaces/{workspaceId}/integrations/datadog/sync": {
2324
+ parameters: {
2325
+ query?: never;
2326
+ header?: never;
2327
+ path?: never;
2328
+ cookie?: never;
2329
+ };
2330
+ get?: never;
2331
+ put?: never;
2332
+ /**
2333
+ * Trigger Datadog monitoring ingest now
2334
+ * @description Manually polls Datadog for incidents and deployment-tagged events, persists canonical monitoring events, and refreshes org-level Quality/DORA dashboard buckets. Requires editor role.
2335
+ */
2336
+ post: operations["postWorkspaceDatadogIntegrationSync"];
2337
+ delete?: never;
2338
+ options?: never;
2339
+ head?: never;
2340
+ patch?: never;
2341
+ trace?: never;
2342
+ };
2230
2343
  "/integrations/github/webhook": {
2231
2344
  parameters: {
2232
2345
  query?: never;
@@ -7907,6 +8020,50 @@ export interface components {
7907
8020
  durationMs?: number;
7908
8021
  error?: string;
7909
8022
  };
8023
+ DatadogIntegrationStatusDto: {
8024
+ /** @description True when a type:datadog workspace source is configured. */
8025
+ connected: boolean;
8026
+ /**
8027
+ * @description Configured Datadog site when connected.
8028
+ * @enum {string}
8029
+ */
8030
+ site?: "datadoghq.com" | "us3.datadoghq.com" | "us5.datadoghq.com" | "datadoghq.eu" | "ap1.datadoghq.com";
8031
+ /** @description Org display name when known from the last successful verify. */
8032
+ orgName?: string;
8033
+ /**
8034
+ * Format: date-time
8035
+ * @description Timestamp of the last monitoring ingest attempt (success or failure).
8036
+ */
8037
+ lastSyncAt?: string | null;
8038
+ /**
8039
+ * @description Outcome of the most recent sync (`never` when not yet synced).
8040
+ * @enum {string}
8041
+ */
8042
+ status: "ok" | "error" | "never";
8043
+ lastError?: string | null;
8044
+ /** @description Incidents fetched on the last successful sync (30d lookback). */
8045
+ issueCount?: number | null;
8046
+ /** @description Deployment-tagged events fetched on the last successful sync (30d lookback). */
8047
+ deploymentCount?: number | null;
8048
+ /** @description Canonical monitoring events upserted on the last successful sync. */
8049
+ eventCount?: number | null;
8050
+ };
8051
+ DatadogTriggerSyncResultDto: {
8052
+ /** @enum {string} */
8053
+ status: "ok" | "skipped" | "error";
8054
+ /** @description Stable machine-readable code (e.g. `datadog_not_connected`). */
8055
+ code?: string;
8056
+ /** @description Human-readable skip reason when status is skipped. */
8057
+ reason?: string;
8058
+ issueCount?: number;
8059
+ deploymentCount?: number;
8060
+ eventCount?: number;
8061
+ /** @description Weekly dashboard metric buckets updated from monitoring events. */
8062
+ bucketsWritten?: number;
8063
+ durationMs?: number;
8064
+ /** @description Error message when status is error. */
8065
+ error?: string;
8066
+ };
7910
8067
  GithubActionsEnableResponseDto: {
7911
8068
  /** @enum {string} */
7912
8069
  outcome: "enabled" | "needs_github" | "permissions_missing" | "error";
@@ -9602,7 +9759,7 @@ export interface components {
9602
9759
  * @description Type of workspace lifecycle event.
9603
9760
  * @enum {string}
9604
9761
  */
9605
- ActivityLogEventTypeDto: "repo.added" | "repo.removed" | "repo.readded" | "integration.github.added" | "integration.github.updated" | "integration.github.removed" | "integration.github.permissions_changed" | "integration.github.suspended" | "integration.github.unsuspended" | "integration.github.repo_added" | "integration.github.repo_removed" | "fix.requested" | "fix.generating" | "fix.pr_created" | "fix.merged" | "fix.failed" | "readiness.scan_started" | "readiness.scan_completed" | "readiness.scan_failed" | "readiness.scan_partial" | "code_insights.design_run_started" | "integrations.agent_execution.provider_changed" | "integrations.repo_eligibility.overrides_changed" | "integrations.repo_eligibility.languages_refresh_requested" | "integrations.cursor.platform_key_enabled" | "integrations.cursor.platform_key_disabled" | "member.invited" | "member.invite_accepted" | "member.invite_rejected" | "member.role_changed" | "member.removed" | "hris.personio.sync_started" | "hris.personio.sync_completed" | "hris.personio.sync_failed" | "hris.zenhr.sync_started" | "hris.zenhr.sync_completed" | "hris.zenhr.sync_failed" | "hris.zelt.sync_started" | "hris.zelt.sync_completed" | "hris.zelt.sync_failed" | "hris.hibob.sync_started" | "hris.hibob.sync_completed" | "hris.hibob.sync_failed" | "hris.sync_started" | "hris.sync_completed" | "hris.sync_failed" | "repo.sync_skipped" | "integrations.cursor.execution_key.added" | "integrations.cursor.execution_key.updated" | "integrations.cursor.execution_key.removed" | "integrations.cursor.execution_key.check_failed" | "integrations.cursor.admin_key.added" | "integrations.cursor.admin_key.updated" | "integrations.cursor.admin_key.removed" | "integrations.claude.execution_key.added" | "integrations.claude.execution_key.updated" | "integrations.claude.execution_key.removed" | "integrations.claude.execution_key.check_failed" | "integrations.claude.admin_key.added" | "integrations.claude.admin_key.updated" | "integrations.claude.admin_key.removed" | "integrations.claude.analytics_key.added" | "integrations.claude.analytics_key.updated" | "integrations.claude.analytics_key.removed" | "integrations.code_intelligence.settings_changed" | "integrations.code_intelligence.execution_key.added" | "integrations.code_intelligence.execution_key.updated" | "integrations.code_intelligence.execution_key.removed" | "integrations.code_intelligence.execution_key.check_failed" | "readiness.scan_precheck_failed" | "productivity.ingest.completed" | "productivity.ingest.failed" | "productivity.ingest.skipped" | "productivity.ingest.repo_skipped" | "productivity.ingest.coverage_gap_detected" | "integrations.newrelic.added" | "integrations.newrelic.removed" | "integrations.newrelic.sync_completed" | "integrations.newrelic.sync_failed" | "integrations.prometheus.added" | "integrations.prometheus.removed" | "integrations.prometheus.sync_completed" | "integrations.prometheus.sync_failed" | "integrations.grafana.added" | "integrations.grafana.removed" | "integrations.grafana.sync_completed" | "integrations.grafana.sync_failed" | "integrations.zelt.added" | "integrations.zelt.removed" | "report.exported" | "report.assessment_stored" | "report.assessment_link_sent" | "report.assessment_link_revoked" | "report.assessment_downloaded" | "report.assessment_hidden" | "report.assessment_restored" | "workspace.aggregate_use.changed" | "workspace.assessment_rollout.changed";
9762
+ ActivityLogEventTypeDto: "repo.added" | "repo.removed" | "repo.readded" | "integration.github.added" | "integration.github.updated" | "integration.github.removed" | "integration.github.permissions_changed" | "integration.github.suspended" | "integration.github.unsuspended" | "integration.github.repo_added" | "integration.github.repo_removed" | "fix.requested" | "fix.generating" | "fix.pr_created" | "fix.merged" | "fix.failed" | "readiness.scan_started" | "readiness.scan_completed" | "readiness.scan_failed" | "readiness.scan_partial" | "code_insights.design_run_started" | "integrations.agent_execution.provider_changed" | "integrations.repo_eligibility.overrides_changed" | "integrations.repo_eligibility.languages_refresh_requested" | "integrations.cursor.platform_key_enabled" | "integrations.cursor.platform_key_disabled" | "member.invited" | "member.invite_accepted" | "member.invite_rejected" | "member.role_changed" | "member.removed" | "hris.personio.sync_started" | "hris.personio.sync_completed" | "hris.personio.sync_failed" | "hris.zenhr.sync_started" | "hris.zenhr.sync_completed" | "hris.zenhr.sync_failed" | "hris.zelt.sync_started" | "hris.zelt.sync_completed" | "hris.zelt.sync_failed" | "hris.hibob.sync_started" | "hris.hibob.sync_completed" | "hris.hibob.sync_failed" | "hris.sync_started" | "hris.sync_completed" | "hris.sync_failed" | "repo.sync_skipped" | "integrations.cursor.execution_key.added" | "integrations.cursor.execution_key.updated" | "integrations.cursor.execution_key.removed" | "integrations.cursor.execution_key.check_failed" | "integrations.cursor.admin_key.added" | "integrations.cursor.admin_key.updated" | "integrations.cursor.admin_key.removed" | "integrations.claude.execution_key.added" | "integrations.claude.execution_key.updated" | "integrations.claude.execution_key.removed" | "integrations.claude.execution_key.check_failed" | "integrations.claude.admin_key.added" | "integrations.claude.admin_key.updated" | "integrations.claude.admin_key.removed" | "integrations.claude.analytics_key.added" | "integrations.claude.analytics_key.updated" | "integrations.claude.analytics_key.removed" | "integrations.code_intelligence.settings_changed" | "integrations.code_intelligence.execution_key.added" | "integrations.code_intelligence.execution_key.updated" | "integrations.code_intelligence.execution_key.removed" | "integrations.code_intelligence.execution_key.check_failed" | "readiness.scan_precheck_failed" | "productivity.ingest.completed" | "productivity.ingest.failed" | "productivity.ingest.skipped" | "productivity.ingest.repo_skipped" | "productivity.ingest.coverage_gap_detected" | "integrations.newrelic.added" | "integrations.newrelic.removed" | "integrations.newrelic.sync_completed" | "integrations.newrelic.sync_failed" | "integrations.prometheus.added" | "integrations.prometheus.removed" | "integrations.prometheus.sync_completed" | "integrations.prometheus.sync_failed" | "integrations.grafana.added" | "integrations.grafana.removed" | "integrations.grafana.sync_completed" | "integrations.grafana.sync_failed" | "integrations.datadog.added" | "integrations.datadog.removed" | "integrations.datadog.sync_completed" | "integrations.datadog.sync_failed" | "integrations.zelt.added" | "integrations.zelt.removed" | "report.exported" | "report.assessment_stored" | "report.assessment_link_sent" | "report.assessment_link_revoked" | "report.assessment_downloaded" | "report.assessment_hidden" | "report.assessment_restored" | "workspace.aggregate_use.changed" | "workspace.assessment_rollout.changed";
9606
9763
  /** @description Current legal-approved opt-in notice, or `unset` while opt-in is unavailable. */
9607
9764
  AggregateUseNoticeStatusDto: {
9608
9765
  /** @enum {string} */
@@ -9765,7 +9922,7 @@ export interface components {
9765
9922
  };
9766
9923
  AssessmentDictionaryDto: {
9767
9924
  /** @enum {string} */
9768
- version: "2026-10-24.1";
9925
+ version: "2026-10-25.1";
9769
9926
  /** @enum {integer} */
9770
9927
  periodDays: 90;
9771
9928
  /** @enum {integer} */
@@ -9801,7 +9958,7 @@ export interface components {
9801
9958
  aiProviders: ("cursor" | "claude" | "copilot")[];
9802
9959
  optionalProviders: {
9803
9960
  roadmap: "jira"[];
9804
- incident: ("pagerduty" | "opsgenie" | "goalert" | "newrelic" | "prometheus" | "grafana")[];
9961
+ incident: ("pagerduty" | "opsgenie" | "goalert" | "newrelic" | "prometheus" | "grafana" | "datadog")[];
9805
9962
  };
9806
9963
  selfManagedGit: {
9807
9964
  /** @enum {string} */
@@ -10457,6 +10614,83 @@ export interface components {
10457
10614
  ActivityLogPageDto: components["schemas"]["PageMetaDto"] & {
10458
10615
  items: components["schemas"]["ActivityLogEntryDto"][];
10459
10616
  };
10617
+ /**
10618
+ * @description Platform Agent job type in the readiness token ledger.
10619
+ * @enum {string}
10620
+ */
10621
+ AutomationCostOperationDto: "readiness_analysis" | "readiness_fix";
10622
+ AutomationCostSummaryRowDto: {
10623
+ /** Format: uuid */
10624
+ workspaceId: string;
10625
+ operation: components["schemas"]["AutomationCostOperationDto"];
10626
+ /** Format: int64 */
10627
+ inputTokens: number;
10628
+ /** Format: int64 */
10629
+ outputTokens: number;
10630
+ /** Format: int64 */
10631
+ cacheReadTokens: number;
10632
+ /** Format: int64 */
10633
+ cacheWriteTokens: number;
10634
+ /** @description Ops estimate from token totals × runtime-config pricing (integer cents). */
10635
+ estimatedSpendCents: number;
10636
+ invocationCount: number;
10637
+ };
10638
+ AutomationCostSummaryTotalsDto: {
10639
+ /** Format: int64 */
10640
+ inputTokens: number;
10641
+ /** Format: int64 */
10642
+ outputTokens: number;
10643
+ /** Format: int64 */
10644
+ cacheReadTokens: number;
10645
+ /** Format: int64 */
10646
+ cacheWriteTokens: number;
10647
+ estimatedSpendCents: number;
10648
+ invocationCount: number;
10649
+ };
10650
+ AutomationCostSummaryDto: {
10651
+ rows: components["schemas"]["AutomationCostSummaryRowDto"][];
10652
+ totals: components["schemas"]["AutomationCostSummaryTotalsDto"];
10653
+ };
10654
+ /** @enum {string} */
10655
+ AutomationCostBudgetStatusDto: "ok" | "warn" | "hard_stopped" | "paused";
10656
+ AutomationCostBudgetViewDto: {
10657
+ operation: components["schemas"]["AutomationCostOperationDto"];
10658
+ /** @description Null when no budget is configured (unlimited). */
10659
+ monthlyBudgetCents: number | null;
10660
+ warnThresholdPct: number;
10661
+ hardEnabled: boolean;
10662
+ /** @description Estimated spend for this operation in the current UTC calendar month. */
10663
+ monthSpendCents: number;
10664
+ status: components["schemas"]["AutomationCostBudgetStatusDto"];
10665
+ paused: boolean;
10666
+ pauseReason?: string | null;
10667
+ };
10668
+ AutomationCostBudgetListDto: {
10669
+ budgets: components["schemas"]["AutomationCostBudgetViewDto"][];
10670
+ };
10671
+ AutomationCostBudgetUpsertDto: {
10672
+ operation: components["schemas"]["AutomationCostOperationDto"];
10673
+ monthlyBudgetCents: number;
10674
+ /** @default 80 */
10675
+ warnThresholdPct: number;
10676
+ /** @default false */
10677
+ hardEnabled: boolean;
10678
+ };
10679
+ AutomationCostPauseBodyDto: {
10680
+ operations: components["schemas"]["AutomationCostOperationDto"][];
10681
+ reason: string;
10682
+ };
10683
+ AutomationCostPauseStateDto: {
10684
+ operations: components["schemas"]["AutomationCostOperationDto"][];
10685
+ reason: string;
10686
+ /** Format: date-time */
10687
+ pausedAt: string;
10688
+ /** @description Platform admin email that set the pause, when known. */
10689
+ pausedBy?: string | null;
10690
+ };
10691
+ AutomationCostPauseResponseDto: {
10692
+ pause: components["schemas"]["AutomationCostPauseStateDto"];
10693
+ };
10460
10694
  ReadinessTokenUsageRowDto: {
10461
10695
  /**
10462
10696
  * Format: uuid
@@ -12753,6 +12987,8 @@ export type PrometheusIntegrationStatusDto = components['schemas']['PrometheusIn
12753
12987
  export type PrometheusTriggerSyncResultDto = components['schemas']['PrometheusTriggerSyncResultDto'];
12754
12988
  export type GrafanaIntegrationStatusDto = components['schemas']['GrafanaIntegrationStatusDto'];
12755
12989
  export type GrafanaTriggerSyncResultDto = components['schemas']['GrafanaTriggerSyncResultDto'];
12990
+ export type DatadogIntegrationStatusDto = components['schemas']['DatadogIntegrationStatusDto'];
12991
+ export type DatadogTriggerSyncResultDto = components['schemas']['DatadogTriggerSyncResultDto'];
12756
12992
  export type GithubActionsEnableResponseDto = components['schemas']['GithubActionsEnableResponseDto'];
12757
12993
  export type GithubInstallationStatusDto = components['schemas']['GithubInstallationStatusDto'];
12758
12994
  export type GithubInstallUrlRequestDto = components['schemas']['GithubInstallUrlRequestDto'];
@@ -12988,6 +13224,17 @@ export type ZenHrBranchSelectionResultDto = components['schemas']['ZenHrBranchSe
12988
13224
  export type HrisTriggerSyncResultDto = components['schemas']['HrisTriggerSyncResultDto'];
12989
13225
  export type HrisProviderSyncResultDto = components['schemas']['HrisProviderSyncResultDto'];
12990
13226
  export type ActivityLogPageDto = components['schemas']['ActivityLogPageDto'];
13227
+ export type AutomationCostOperationDto = components['schemas']['AutomationCostOperationDto'];
13228
+ export type AutomationCostSummaryRowDto = components['schemas']['AutomationCostSummaryRowDto'];
13229
+ export type AutomationCostSummaryTotalsDto = components['schemas']['AutomationCostSummaryTotalsDto'];
13230
+ export type AutomationCostSummaryDto = components['schemas']['AutomationCostSummaryDto'];
13231
+ export type AutomationCostBudgetStatusDto = components['schemas']['AutomationCostBudgetStatusDto'];
13232
+ export type AutomationCostBudgetViewDto = components['schemas']['AutomationCostBudgetViewDto'];
13233
+ export type AutomationCostBudgetListDto = components['schemas']['AutomationCostBudgetListDto'];
13234
+ export type AutomationCostBudgetUpsertDto = components['schemas']['AutomationCostBudgetUpsertDto'];
13235
+ export type AutomationCostPauseBodyDto = components['schemas']['AutomationCostPauseBodyDto'];
13236
+ export type AutomationCostPauseStateDto = components['schemas']['AutomationCostPauseStateDto'];
13237
+ export type AutomationCostPauseResponseDto = components['schemas']['AutomationCostPauseResponseDto'];
12991
13238
  export type ReadinessTokenUsageRowDto = components['schemas']['ReadinessTokenUsageRowDto'];
12992
13239
  export type ReadinessTokenUsageByDimensionRowDto = components['schemas']['ReadinessTokenUsageByDimensionRowDto'];
12993
13240
  export type SdlcModuleId = components['schemas']['SdlcModuleId'];
@@ -14021,68 +14268,50 @@ export interface operations {
14021
14268
  };
14022
14269
  };
14023
14270
  };
14024
- submitPublicPrivacyRequest: {
14271
+ adminGetAutomationCostSummary: {
14025
14272
  parameters: {
14026
- query?: never;
14273
+ query?: {
14274
+ /** @description Filter by workspace UUID. */
14275
+ workspaceId?: string;
14276
+ /** @description Inclusive start (ISO-8601). Defaults to start of current UTC month. */
14277
+ from?: string;
14278
+ /** @description Inclusive end (ISO-8601). Defaults to end of current UTC month. */
14279
+ to?: string;
14280
+ };
14027
14281
  header?: never;
14028
14282
  path?: never;
14029
14283
  cookie?: never;
14030
14284
  };
14031
- requestBody: {
14032
- content: {
14033
- "application/json": components["schemas"]["CreatePrivacyRequestBodyDto"];
14034
- };
14035
- };
14285
+ requestBody?: never;
14036
14286
  responses: {
14037
- /** @description Request accepted and queued for privacy ops. */
14038
- 201: {
14039
- headers: {
14040
- [name: string]: unknown;
14041
- };
14042
- content: {
14043
- "application/json": components["schemas"]["CreatePrivacyRequestResultDto"];
14044
- };
14045
- };
14046
- /** @description Missing or invalid email, unknown request type, or details too long. */
14047
- 400: {
14287
+ /** @description Summary rows and portfolio totals (empty rows / zero totals when no usage). */
14288
+ 200: {
14048
14289
  headers: {
14049
14290
  [name: string]: unknown;
14050
14291
  };
14051
14292
  content: {
14052
- /**
14053
- * @example {
14054
- * "error": "A valid email is required",
14055
- * "code": "invalid_email"
14056
- * }
14057
- */
14058
- "application/json": components["schemas"]["ErrorMessageDto"];
14293
+ "application/json": components["schemas"]["AutomationCostSummaryDto"];
14059
14294
  };
14060
14295
  };
14061
- /** @description An open request for this email and type already exists. */
14062
- 409: {
14296
+ /** @description Missing or invalid JWT. */
14297
+ 401: {
14063
14298
  headers: {
14064
14299
  [name: string]: unknown;
14065
14300
  };
14066
14301
  content: {
14067
- /**
14068
- * @example {
14069
- * "error": "An open request for this email already exists",
14070
- * "code": "duplicate_open_request"
14071
- * }
14072
- */
14073
14302
  "application/json": components["schemas"]["ErrorMessageDto"];
14074
14303
  };
14075
14304
  };
14076
- /** @description Too many submissions from this client; retry later. */
14077
- 429: {
14305
+ /** @description Caller is not a platform admin. */
14306
+ 403: {
14078
14307
  headers: {
14079
14308
  [name: string]: unknown;
14080
14309
  };
14081
14310
  content: {
14082
14311
  /**
14083
14312
  * @example {
14084
- * "error": "Too many requests",
14085
- * "code": "too_many_requests"
14313
+ * "error": "Forbidden",
14314
+ * "code": "forbidden"
14086
14315
  * }
14087
14316
  */
14088
14317
  "application/json": components["schemas"]["ErrorMessageDto"];
@@ -14090,77 +14319,71 @@ export interface operations {
14090
14319
  };
14091
14320
  };
14092
14321
  };
14093
- listMyPrivacyRequests: {
14322
+ adminGetAutomationCostBudget: {
14094
14323
  parameters: {
14095
- query?: never;
14324
+ query?: {
14325
+ /** @description Limit to one operation; omit for both. */
14326
+ operation?: "readiness_analysis" | "readiness_fix";
14327
+ };
14096
14328
  header?: never;
14097
- path?: never;
14329
+ path: {
14330
+ workspaceId: components["parameters"]["WorkspaceId"];
14331
+ };
14098
14332
  cookie?: never;
14099
14333
  };
14100
14334
  requestBody?: never;
14101
14335
  responses: {
14102
- /** @description Caller's privacy requests, newest first. */
14336
+ /** @description Budget views for the requested operations. */
14103
14337
  200: {
14104
14338
  headers: {
14105
14339
  [name: string]: unknown;
14106
14340
  };
14107
14341
  content: {
14108
- "application/json": components["schemas"]["MyPrivacyRequestListDto"];
14342
+ "application/json": components["schemas"]["AutomationCostBudgetListDto"];
14109
14343
  };
14110
14344
  };
14111
- 401: components["responses"]["Unauthorized"];
14112
- };
14113
- };
14114
- submitMyPrivacyRequest: {
14115
- parameters: {
14116
- query?: never;
14117
- header?: never;
14118
- path?: never;
14119
- cookie?: never;
14120
- };
14121
- requestBody: {
14122
- content: {
14123
- "application/json": components["schemas"]["CreateMyPrivacyRequestBodyDto"];
14124
- };
14125
- };
14126
- responses: {
14127
- /** @description Request accepted and queued. */
14128
- 201: {
14345
+ /** @description Missing or invalid JWT. */
14346
+ 401: {
14129
14347
  headers: {
14130
14348
  [name: string]: unknown;
14131
14349
  };
14132
14350
  content: {
14133
- "application/json": components["schemas"]["CreatePrivacyRequestResultDto"];
14351
+ "application/json": components["schemas"]["ErrorMessageDto"];
14134
14352
  };
14135
14353
  };
14136
- /** @description Unknown request type, details too long, or email override attempted. */
14137
- 400: {
14354
+ /** @description Caller is not a platform admin. */
14355
+ 403: {
14138
14356
  headers: {
14139
14357
  [name: string]: unknown;
14140
14358
  };
14141
14359
  content: {
14142
14360
  /**
14143
14361
  * @example {
14144
- * "error": "Email cannot be overridden on an authenticated request",
14145
- * "code": "email_override_rejected"
14362
+ * "error": "Forbidden",
14363
+ * "code": "forbidden"
14146
14364
  * }
14147
14365
  */
14148
14366
  "application/json": components["schemas"]["ErrorMessageDto"];
14149
14367
  };
14150
14368
  };
14151
- 401: components["responses"]["Unauthorized"];
14152
- /** @description An open request for this subject and type already exists. */
14153
- 409: {
14369
+ /** @description Workspace not found. */
14370
+ 404: {
14154
14371
  headers: {
14155
14372
  [name: string]: unknown;
14156
14373
  };
14157
14374
  content: {
14375
+ /**
14376
+ * @example {
14377
+ * "error": "Workspace not found",
14378
+ * "code": "workspace_not_found"
14379
+ * }
14380
+ */
14158
14381
  "application/json": components["schemas"]["ErrorMessageDto"];
14159
14382
  };
14160
14383
  };
14161
14384
  };
14162
14385
  };
14163
- submitWorkspacePrivacyRequest: {
14386
+ adminPutAutomationCostBudget: {
14164
14387
  parameters: {
14165
14388
  query?: never;
14166
14389
  header?: never;
@@ -14171,12 +14394,358 @@ export interface operations {
14171
14394
  };
14172
14395
  requestBody: {
14173
14396
  content: {
14174
- "application/json": components["schemas"]["CreateWorkspacePrivacyRequestBodyDto"];
14397
+ "application/json": components["schemas"]["AutomationCostBudgetUpsertDto"];
14175
14398
  };
14176
14399
  };
14177
14400
  responses: {
14178
- /** @description Request accepted and queued. */
14179
- 201: {
14401
+ /** @description Updated budget view(s). */
14402
+ 200: {
14403
+ headers: {
14404
+ [name: string]: unknown;
14405
+ };
14406
+ content: {
14407
+ "application/json": components["schemas"]["AutomationCostBudgetListDto"];
14408
+ };
14409
+ };
14410
+ /** @description Invalid body. */
14411
+ 400: {
14412
+ headers: {
14413
+ [name: string]: unknown;
14414
+ };
14415
+ content: {
14416
+ "application/json": components["schemas"]["ErrorMessageDto"];
14417
+ };
14418
+ };
14419
+ /** @description Missing or invalid JWT. */
14420
+ 401: {
14421
+ headers: {
14422
+ [name: string]: unknown;
14423
+ };
14424
+ content: {
14425
+ "application/json": components["schemas"]["ErrorMessageDto"];
14426
+ };
14427
+ };
14428
+ /** @description Caller is not a platform admin. */
14429
+ 403: {
14430
+ headers: {
14431
+ [name: string]: unknown;
14432
+ };
14433
+ content: {
14434
+ /**
14435
+ * @example {
14436
+ * "error": "Forbidden",
14437
+ * "code": "forbidden"
14438
+ * }
14439
+ */
14440
+ "application/json": components["schemas"]["ErrorMessageDto"];
14441
+ };
14442
+ };
14443
+ /** @description Workspace not found. */
14444
+ 404: {
14445
+ headers: {
14446
+ [name: string]: unknown;
14447
+ };
14448
+ content: {
14449
+ /**
14450
+ * @example {
14451
+ * "error": "Workspace not found",
14452
+ * "code": "workspace_not_found"
14453
+ * }
14454
+ */
14455
+ "application/json": components["schemas"]["ErrorMessageDto"];
14456
+ };
14457
+ };
14458
+ };
14459
+ };
14460
+ adminPostAutomationCostPause: {
14461
+ parameters: {
14462
+ query?: never;
14463
+ header?: never;
14464
+ path: {
14465
+ workspaceId: components["parameters"]["WorkspaceId"];
14466
+ };
14467
+ cookie?: never;
14468
+ };
14469
+ requestBody: {
14470
+ content: {
14471
+ "application/json": components["schemas"]["AutomationCostPauseBodyDto"];
14472
+ };
14473
+ };
14474
+ responses: {
14475
+ /** @description Pause state stored. */
14476
+ 200: {
14477
+ headers: {
14478
+ [name: string]: unknown;
14479
+ };
14480
+ content: {
14481
+ "application/json": components["schemas"]["AutomationCostPauseResponseDto"];
14482
+ };
14483
+ };
14484
+ /** @description Empty or invalid operations list. */
14485
+ 400: {
14486
+ headers: {
14487
+ [name: string]: unknown;
14488
+ };
14489
+ content: {
14490
+ "application/json": components["schemas"]["ErrorMessageDto"];
14491
+ };
14492
+ };
14493
+ /** @description Missing or invalid JWT. */
14494
+ 401: {
14495
+ headers: {
14496
+ [name: string]: unknown;
14497
+ };
14498
+ content: {
14499
+ "application/json": components["schemas"]["ErrorMessageDto"];
14500
+ };
14501
+ };
14502
+ /** @description Caller is not a platform admin. */
14503
+ 403: {
14504
+ headers: {
14505
+ [name: string]: unknown;
14506
+ };
14507
+ content: {
14508
+ /**
14509
+ * @example {
14510
+ * "error": "Forbidden",
14511
+ * "code": "forbidden"
14512
+ * }
14513
+ */
14514
+ "application/json": components["schemas"]["ErrorMessageDto"];
14515
+ };
14516
+ };
14517
+ /** @description Workspace not found. */
14518
+ 404: {
14519
+ headers: {
14520
+ [name: string]: unknown;
14521
+ };
14522
+ content: {
14523
+ /**
14524
+ * @example {
14525
+ * "error": "Workspace not found",
14526
+ * "code": "workspace_not_found"
14527
+ * }
14528
+ */
14529
+ "application/json": components["schemas"]["ErrorMessageDto"];
14530
+ };
14531
+ };
14532
+ };
14533
+ };
14534
+ adminDeleteAutomationCostPause: {
14535
+ parameters: {
14536
+ query?: never;
14537
+ header?: never;
14538
+ path: {
14539
+ workspaceId: components["parameters"]["WorkspaceId"];
14540
+ };
14541
+ cookie?: never;
14542
+ };
14543
+ requestBody?: never;
14544
+ responses: {
14545
+ /** @description Pause cleared. */
14546
+ 204: {
14547
+ headers: {
14548
+ [name: string]: unknown;
14549
+ };
14550
+ content?: never;
14551
+ };
14552
+ /** @description Missing or invalid JWT. */
14553
+ 401: {
14554
+ headers: {
14555
+ [name: string]: unknown;
14556
+ };
14557
+ content: {
14558
+ "application/json": components["schemas"]["ErrorMessageDto"];
14559
+ };
14560
+ };
14561
+ /** @description Caller is not a platform admin. */
14562
+ 403: {
14563
+ headers: {
14564
+ [name: string]: unknown;
14565
+ };
14566
+ content: {
14567
+ /**
14568
+ * @example {
14569
+ * "error": "Forbidden",
14570
+ * "code": "forbidden"
14571
+ * }
14572
+ */
14573
+ "application/json": components["schemas"]["ErrorMessageDto"];
14574
+ };
14575
+ };
14576
+ /** @description Workspace not found. */
14577
+ 404: {
14578
+ headers: {
14579
+ [name: string]: unknown;
14580
+ };
14581
+ content: {
14582
+ /**
14583
+ * @example {
14584
+ * "error": "Workspace not found",
14585
+ * "code": "workspace_not_found"
14586
+ * }
14587
+ */
14588
+ "application/json": components["schemas"]["ErrorMessageDto"];
14589
+ };
14590
+ };
14591
+ };
14592
+ };
14593
+ submitPublicPrivacyRequest: {
14594
+ parameters: {
14595
+ query?: never;
14596
+ header?: never;
14597
+ path?: never;
14598
+ cookie?: never;
14599
+ };
14600
+ requestBody: {
14601
+ content: {
14602
+ "application/json": components["schemas"]["CreatePrivacyRequestBodyDto"];
14603
+ };
14604
+ };
14605
+ responses: {
14606
+ /** @description Request accepted and queued for privacy ops. */
14607
+ 201: {
14608
+ headers: {
14609
+ [name: string]: unknown;
14610
+ };
14611
+ content: {
14612
+ "application/json": components["schemas"]["CreatePrivacyRequestResultDto"];
14613
+ };
14614
+ };
14615
+ /** @description Missing or invalid email, unknown request type, or details too long. */
14616
+ 400: {
14617
+ headers: {
14618
+ [name: string]: unknown;
14619
+ };
14620
+ content: {
14621
+ /**
14622
+ * @example {
14623
+ * "error": "A valid email is required",
14624
+ * "code": "invalid_email"
14625
+ * }
14626
+ */
14627
+ "application/json": components["schemas"]["ErrorMessageDto"];
14628
+ };
14629
+ };
14630
+ /** @description An open request for this email and type already exists. */
14631
+ 409: {
14632
+ headers: {
14633
+ [name: string]: unknown;
14634
+ };
14635
+ content: {
14636
+ /**
14637
+ * @example {
14638
+ * "error": "An open request for this email already exists",
14639
+ * "code": "duplicate_open_request"
14640
+ * }
14641
+ */
14642
+ "application/json": components["schemas"]["ErrorMessageDto"];
14643
+ };
14644
+ };
14645
+ /** @description Too many submissions from this client; retry later. */
14646
+ 429: {
14647
+ headers: {
14648
+ [name: string]: unknown;
14649
+ };
14650
+ content: {
14651
+ /**
14652
+ * @example {
14653
+ * "error": "Too many requests",
14654
+ * "code": "too_many_requests"
14655
+ * }
14656
+ */
14657
+ "application/json": components["schemas"]["ErrorMessageDto"];
14658
+ };
14659
+ };
14660
+ };
14661
+ };
14662
+ listMyPrivacyRequests: {
14663
+ parameters: {
14664
+ query?: never;
14665
+ header?: never;
14666
+ path?: never;
14667
+ cookie?: never;
14668
+ };
14669
+ requestBody?: never;
14670
+ responses: {
14671
+ /** @description Caller's privacy requests, newest first. */
14672
+ 200: {
14673
+ headers: {
14674
+ [name: string]: unknown;
14675
+ };
14676
+ content: {
14677
+ "application/json": components["schemas"]["MyPrivacyRequestListDto"];
14678
+ };
14679
+ };
14680
+ 401: components["responses"]["Unauthorized"];
14681
+ };
14682
+ };
14683
+ submitMyPrivacyRequest: {
14684
+ parameters: {
14685
+ query?: never;
14686
+ header?: never;
14687
+ path?: never;
14688
+ cookie?: never;
14689
+ };
14690
+ requestBody: {
14691
+ content: {
14692
+ "application/json": components["schemas"]["CreateMyPrivacyRequestBodyDto"];
14693
+ };
14694
+ };
14695
+ responses: {
14696
+ /** @description Request accepted and queued. */
14697
+ 201: {
14698
+ headers: {
14699
+ [name: string]: unknown;
14700
+ };
14701
+ content: {
14702
+ "application/json": components["schemas"]["CreatePrivacyRequestResultDto"];
14703
+ };
14704
+ };
14705
+ /** @description Unknown request type, details too long, or email override attempted. */
14706
+ 400: {
14707
+ headers: {
14708
+ [name: string]: unknown;
14709
+ };
14710
+ content: {
14711
+ /**
14712
+ * @example {
14713
+ * "error": "Email cannot be overridden on an authenticated request",
14714
+ * "code": "email_override_rejected"
14715
+ * }
14716
+ */
14717
+ "application/json": components["schemas"]["ErrorMessageDto"];
14718
+ };
14719
+ };
14720
+ 401: components["responses"]["Unauthorized"];
14721
+ /** @description An open request for this subject and type already exists. */
14722
+ 409: {
14723
+ headers: {
14724
+ [name: string]: unknown;
14725
+ };
14726
+ content: {
14727
+ "application/json": components["schemas"]["ErrorMessageDto"];
14728
+ };
14729
+ };
14730
+ };
14731
+ };
14732
+ submitWorkspacePrivacyRequest: {
14733
+ parameters: {
14734
+ query?: never;
14735
+ header?: never;
14736
+ path: {
14737
+ workspaceId: components["parameters"]["WorkspaceId"];
14738
+ };
14739
+ cookie?: never;
14740
+ };
14741
+ requestBody: {
14742
+ content: {
14743
+ "application/json": components["schemas"]["CreateWorkspacePrivacyRequestBodyDto"];
14744
+ };
14745
+ };
14746
+ responses: {
14747
+ /** @description Request accepted and queued. */
14748
+ 201: {
14180
14749
  headers: {
14181
14750
  [name: string]: unknown;
14182
14751
  };
@@ -19407,6 +19976,90 @@ export interface operations {
19407
19976
  };
19408
19977
  };
19409
19978
  };
19979
+ getWorkspaceDatadogIntegrationStatus: {
19980
+ parameters: {
19981
+ query?: never;
19982
+ header?: never;
19983
+ path: {
19984
+ workspaceId: components["parameters"]["WorkspaceId"];
19985
+ };
19986
+ cookie?: never;
19987
+ };
19988
+ requestBody?: never;
19989
+ responses: {
19990
+ /** @description Datadog integration status */
19991
+ 200: {
19992
+ headers: {
19993
+ [name: string]: unknown;
19994
+ };
19995
+ content: {
19996
+ "application/json": components["schemas"]["DatadogIntegrationStatusDto"];
19997
+ };
19998
+ };
19999
+ 401: components["responses"]["Unauthorized"];
20000
+ 403: components["responses"]["Forbidden"];
20001
+ /** @description Workspace does not exist or malformed workspaceId */
20002
+ 404: {
20003
+ headers: {
20004
+ [name: string]: unknown;
20005
+ };
20006
+ content: {
20007
+ "application/json": components["schemas"]["ErrorMessageDto"];
20008
+ };
20009
+ };
20010
+ };
20011
+ };
20012
+ postWorkspaceDatadogIntegrationSync: {
20013
+ parameters: {
20014
+ query?: never;
20015
+ header?: never;
20016
+ path: {
20017
+ workspaceId: components["parameters"]["WorkspaceId"];
20018
+ };
20019
+ cookie?: never;
20020
+ };
20021
+ requestBody?: never;
20022
+ responses: {
20023
+ /** @description Sync completed */
20024
+ 200: {
20025
+ headers: {
20026
+ [name: string]: unknown;
20027
+ };
20028
+ content: {
20029
+ "application/json": components["schemas"]["DatadogTriggerSyncResultDto"];
20030
+ };
20031
+ };
20032
+ 401: components["responses"]["Unauthorized"];
20033
+ 403: components["responses"]["Forbidden"];
20034
+ /** @description Workspace does not exist or malformed workspaceId */
20035
+ 404: {
20036
+ headers: {
20037
+ [name: string]: unknown;
20038
+ };
20039
+ content: {
20040
+ "application/json": components["schemas"]["ErrorMessageDto"];
20041
+ };
20042
+ };
20043
+ /** @description Datadog is not connected on this workspace */
20044
+ 422: {
20045
+ headers: {
20046
+ [name: string]: unknown;
20047
+ };
20048
+ content: {
20049
+ "application/json": components["schemas"]["DatadogTriggerSyncResultDto"];
20050
+ };
20051
+ };
20052
+ /** @description Sync failed (Datadog API or persistence error) */
20053
+ 503: {
20054
+ headers: {
20055
+ [name: string]: unknown;
20056
+ };
20057
+ content: {
20058
+ "application/json": components["schemas"]["DatadogTriggerSyncResultDto"];
20059
+ };
20060
+ };
20061
+ };
20062
+ };
19410
20063
  postGithubWebhook: {
19411
20064
  parameters: {
19412
20065
  query?: never;