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