@thinkai/tai-api-contract 2.162.0 → 2.164.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.
@@ -1,7 +1,7 @@
1
1
  openapi: 3.0.3
2
2
  info:
3
3
  title: ThinkAI API
4
- version: 2.162.0
4
+ version: 2.164.0
5
5
  description: >
6
6
  Contract surface for the AI Driven SDLC backend used by ThinkAI.
7
7
  Workspace-scoped routes use `/workspaces/{workspaceId}/...`.
@@ -1039,7 +1039,6 @@ paths:
1039
1039
  email: new.member@example.com
1040
1040
  role: editor
1041
1041
  status: pending
1042
- invitedByName: Dana Admin
1043
1042
  expiresAt: "2026-08-01T12:00:00.000Z"
1044
1043
  createdAt: "2026-07-25T12:00:00.000Z"
1045
1044
  alreadyMember:
@@ -6423,6 +6422,91 @@ paths:
6423
6422
  schema:
6424
6423
  $ref: "#/components/schemas/ErrorMessageDto"
6425
6424
 
6425
+ /workspaces/{workspaceId}/aggregate-use-consent:
6426
+ get:
6427
+ tags: [Workspace]
6428
+ summary: Read anonymized aggregate-use permission
6429
+ operationId: getAggregateUseConsent
6430
+ description: >
6431
+ Returns whether ThinkAI may use this workspace's anonymized aggregate results in
6432
+ marketing and peer benchmarks. A workspace that never chose returns `unset`, which
6433
+ behaves as opted out (`effective: false`). The permission never covers company name,
6434
+ logo, quote, raw report, repository or person identity, or customer reference.
6435
+ Any workspace member may read it.
6436
+ parameters:
6437
+ - $ref: "#/components/parameters/WorkspaceId"
6438
+ responses:
6439
+ "200":
6440
+ description: Current permission and the sentence reports must print
6441
+ content:
6442
+ application/json:
6443
+ schema:
6444
+ $ref: "#/components/schemas/AggregateUseConsentDto"
6445
+ "401":
6446
+ $ref: "#/components/responses/Unauthorized"
6447
+ "403":
6448
+ $ref: "#/components/responses/Forbidden"
6449
+ "404":
6450
+ description: Workspace does not exist
6451
+ content:
6452
+ application/json:
6453
+ schema:
6454
+ $ref: "#/components/schemas/ErrorMessageDto"
6455
+ put:
6456
+ tags: [Workspace]
6457
+ summary: Set anonymized aggregate-use permission
6458
+ operationId: putAggregateUseConsent
6459
+ description: >
6460
+ Workspace admins opt in or out. Every change writes one
6461
+ `workspace.aggregate_use.changed` activity-log row in the same transaction.
6462
+ Moving from `opt_in` to `opt_out` records a withdrawal and stops future extraction.
6463
+ Opt-in requires the current legal-approved notice version; while no notice is
6464
+ approved, opt-in returns `409 aggregate_use_notice_unapproved`. Opt-out is always
6465
+ accepted. A refusal does not change price, delivery, support, or assessment output.
6466
+ parameters:
6467
+ - $ref: "#/components/parameters/WorkspaceId"
6468
+ requestBody:
6469
+ required: true
6470
+ content:
6471
+ application/json:
6472
+ schema:
6473
+ $ref: "#/components/schemas/AggregateUseConsentPutDto"
6474
+ responses:
6475
+ "200":
6476
+ description: Saved permission
6477
+ content:
6478
+ application/json:
6479
+ schema:
6480
+ $ref: "#/components/schemas/AggregateUseConsentDto"
6481
+ "400":
6482
+ description: "Invalid body (`code`: `invalid_input`)"
6483
+ content:
6484
+ application/json:
6485
+ schema:
6486
+ $ref: "#/components/schemas/ErrorMessageDto"
6487
+ "401":
6488
+ $ref: "#/components/responses/Unauthorized"
6489
+ "403":
6490
+ description: "Caller is not a workspace admin (`code`: `workspace_admin_required`)"
6491
+ content:
6492
+ application/json:
6493
+ schema:
6494
+ $ref: "#/components/schemas/ErrorMessageDto"
6495
+ "404":
6496
+ description: Workspace does not exist
6497
+ content:
6498
+ application/json:
6499
+ schema:
6500
+ $ref: "#/components/schemas/ErrorMessageDto"
6501
+ "409":
6502
+ description: >
6503
+ Opt-in refused because no notice is approved (`aggregate_use_notice_unapproved`)
6504
+ or the submitted notice version is not current (`aggregate_use_notice_stale`).
6505
+ content:
6506
+ application/json:
6507
+ schema:
6508
+ $ref: "#/components/schemas/ErrorMessageDto"
6509
+
6426
6510
  /workspaces/{workspaceId}/report-center/exports:
6427
6511
  post:
6428
6512
  tags: [WorkspaceActivity]
@@ -6500,7 +6584,7 @@ paths:
6500
6584
  required: false
6501
6585
  description: >
6502
6586
  Coarse product-area grouping filter (#156). `integration` = GitHub + AI-tool key events;
6503
- `agentic_foundation` = repos, readiness scans, fixes; `workspace_team` = members + HRIS + report exports;
6587
+ `agentic_foundation` = repos, readiness scans, fixes; `workspace_team` = members + HRIS + report exports + workspace settings;
6504
6588
  `productivity` = productivity ingest lifecycle events. Omit (or pass `all`) for every area.
6505
6589
  schema:
6506
6590
  type: string
@@ -11833,7 +11917,10 @@ components:
11833
11917
 
11834
11918
  WorkspaceInvitationDto:
11835
11919
  type: object
11836
- description: Workspace invitation as seen by an authenticated admin or invitee.
11920
+ description: >
11921
+ Workspace invitation as seen by an authenticated admin or invitee.
11922
+ Inviter identity is omitted from this DTO (mailer uses store rows; public
11923
+ preview exposes `invitedByName` on `WorkspaceInvitationPreviewDto` only).
11837
11924
  required: [id, workspaceId, workspaceName, email, role, status, expiresAt, createdAt]
11838
11925
  properties:
11839
11926
  id:
@@ -11852,12 +11939,6 @@ components:
11852
11939
  enum: [admin, editor, viewer]
11853
11940
  status:
11854
11941
  $ref: "#/components/schemas/WorkspaceInvitationStatusDto"
11855
- invitedByName:
11856
- type: string
11857
- nullable: true
11858
- invitedByEmail:
11859
- type: string
11860
- nullable: true
11861
11942
  expiresAt:
11862
11943
  type: string
11863
11944
  format: date-time
@@ -15640,18 +15721,15 @@ components:
15640
15721
 
15641
15722
  MeProfileDto:
15642
15723
  type: object
15643
- required: [id, email, name, roles]
15724
+ required: [id, email, name]
15644
15725
  properties:
15645
15726
  id:
15646
15727
  type: string
15728
+ description: Authenticated subject id (JWT `sub`).
15647
15729
  email:
15648
15730
  type: string
15649
15731
  name:
15650
15732
  type: string
15651
- roles:
15652
- type: array
15653
- items:
15654
- type: string
15655
15733
  defaultWorkspaceId:
15656
15734
  type: string
15657
15735
  nullable: true
@@ -20593,6 +20671,7 @@ components:
20593
20671
  - integrations.zelt.added
20594
20672
  - integrations.zelt.removed
20595
20673
  - report.exported
20674
+ - workspace.aggregate_use.changed
20596
20675
 
20597
20676
  UnsetAssessmentDecisionDto:
20598
20677
  type: object
@@ -20603,6 +20682,94 @@ components:
20603
20682
  type: string
20604
20683
  enum: [unset]
20605
20684
 
20685
+ AggregateUseNoticeStatusDto:
20686
+ type: object
20687
+ additionalProperties: false
20688
+ required: [status]
20689
+ description: Current legal-approved opt-in notice, or `unset` while opt-in is unavailable.
20690
+ properties:
20691
+ status:
20692
+ type: string
20693
+ enum: [approved, unset]
20694
+ version:
20695
+ type: string
20696
+ description: Present only when `status` is `approved`. Send it back on opt-in.
20697
+
20698
+ AggregateUseConsentDto:
20699
+ type: object
20700
+ additionalProperties: false
20701
+ required:
20702
+ - aggregateUse
20703
+ - effective
20704
+ - noticeVersion
20705
+ - source
20706
+ - recordedAt
20707
+ - recordedBy
20708
+ - withdrawnAt
20709
+ - currentNotice
20710
+ - reportSentence
20711
+ properties:
20712
+ aggregateUse:
20713
+ type: string
20714
+ enum: [opt_in, opt_out, unset]
20715
+ description: Saved choice. `unset` means the workspace never chose and is treated as opted out.
20716
+ effective:
20717
+ type: boolean
20718
+ description: True only for `opt_in`. Benchmark and marketing extraction must check this.
20719
+ noticeVersion:
20720
+ type: string
20721
+ nullable: true
20722
+ description: Notice version accepted with the current opt-in; null otherwise.
20723
+ source:
20724
+ type: string
20725
+ nullable: true
20726
+ enum: [workspace_settings]
20727
+ recordedAt:
20728
+ type: string
20729
+ format: date-time
20730
+ nullable: true
20731
+ description: When the current choice was saved; null when `unset`.
20732
+ recordedBy:
20733
+ type: object
20734
+ nullable: true
20735
+ additionalProperties: false
20736
+ required: [userId, displayName]
20737
+ properties:
20738
+ userId:
20739
+ type: string
20740
+ format: uuid
20741
+ displayName:
20742
+ type: string
20743
+ nullable: true
20744
+ withdrawnAt:
20745
+ type: string
20746
+ format: date-time
20747
+ nullable: true
20748
+ description: Most recent opt-in withdrawal while the workspace remains opted out.
20749
+ currentNotice:
20750
+ $ref: "#/components/schemas/AggregateUseNoticeStatusDto"
20751
+ reportSentence:
20752
+ type: string
20753
+ nullable: true
20754
+ description: >
20755
+ Exact sentence the assessment PDF prints beside `recordedAt`. Opted-out and unset
20756
+ workspaces get the fixed refusal sentence. Opt-in returns the approved sentence for
20757
+ the accepted notice, or null if that notice is unknown, which blocks validation.
20758
+
20759
+ AggregateUseConsentPutDto:
20760
+ type: object
20761
+ additionalProperties: false
20762
+ required: [aggregateUse]
20763
+ properties:
20764
+ aggregateUse:
20765
+ type: string
20766
+ enum: [opt_in, opt_out]
20767
+ noticeVersion:
20768
+ type: string
20769
+ nullable: true
20770
+ minLength: 1
20771
+ description: Required for `opt_in` and must equal `currentNotice.version`. Ignored for `opt_out`.
20772
+
20606
20773
  AssessmentDictionaryDto:
20607
20774
  type: object
20608
20775
  additionalProperties: false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.162.0",
3
+ "version": "2.164.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -2420,6 +2420,30 @@ export interface paths {
2420
2420
  patch?: never;
2421
2421
  trace?: never;
2422
2422
  };
2423
+ "/workspaces/{workspaceId}/aggregate-use-consent": {
2424
+ parameters: {
2425
+ query?: never;
2426
+ header?: never;
2427
+ path?: never;
2428
+ cookie?: never;
2429
+ };
2430
+ /**
2431
+ * Read anonymized aggregate-use permission
2432
+ * @description Returns whether ThinkAI may use this workspace's anonymized aggregate results in marketing and peer benchmarks. A workspace that never chose returns `unset`, which behaves as opted out (`effective: false`). The permission never covers company name, logo, quote, raw report, repository or person identity, or customer reference. Any workspace member may read it.
2433
+ */
2434
+ get: operations["getAggregateUseConsent"];
2435
+ /**
2436
+ * Set anonymized aggregate-use permission
2437
+ * @description Workspace admins opt in or out. Every change writes one `workspace.aggregate_use.changed` activity-log row in the same transaction. Moving from `opt_in` to `opt_out` records a withdrawal and stops future extraction. Opt-in requires the current legal-approved notice version; while no notice is approved, opt-in returns `409 aggregate_use_notice_unapproved`. Opt-out is always accepted. A refusal does not change price, delivery, support, or assessment output.
2438
+ */
2439
+ put: operations["putAggregateUseConsent"];
2440
+ post?: never;
2441
+ delete?: never;
2442
+ options?: never;
2443
+ head?: never;
2444
+ patch?: never;
2445
+ trace?: never;
2446
+ };
2423
2447
  "/workspaces/{workspaceId}/report-center/exports": {
2424
2448
  parameters: {
2425
2449
  query?: never;
@@ -4724,7 +4748,7 @@ export interface components {
4724
4748
  * @enum {string}
4725
4749
  */
4726
4750
  WorkspaceInvitationStatusDto: "pending" | "accepted" | "expired" | "revoked" | "rejected";
4727
- /** @description Workspace invitation as seen by an authenticated admin or invitee. */
4751
+ /** @description Workspace invitation as seen by an authenticated admin or invitee. Inviter identity is omitted from this DTO (mailer uses store rows; public preview exposes `invitedByName` on `WorkspaceInvitationPreviewDto` only). */
4728
4752
  WorkspaceInvitationDto: {
4729
4753
  /** Format: uuid */
4730
4754
  id: string;
@@ -4736,8 +4760,6 @@ export interface components {
4736
4760
  /** @enum {string} */
4737
4761
  role: "admin" | "editor" | "viewer";
4738
4762
  status: components["schemas"]["WorkspaceInvitationStatusDto"];
4739
- invitedByName?: string | null;
4740
- invitedByEmail?: string | null;
4741
4763
  /** Format: date-time */
4742
4764
  expiresAt: string;
4743
4765
  /** Format: date-time */
@@ -6528,10 +6550,10 @@ export interface components {
6528
6550
  heatmap: components["schemas"]["AiToolMemberHeatmapDayDto"][];
6529
6551
  };
6530
6552
  MeProfileDto: {
6553
+ /** @description Authenticated subject id (JWT `sub`). */
6531
6554
  id: string;
6532
6555
  email: string;
6533
6556
  name: string;
6534
- roles: string[];
6535
6557
  defaultWorkspaceId?: string | null;
6536
6558
  /** @description True when the caller's email is on the `PLATFORM_ADMIN_EMAILS` allowlist. Lets the frontend gate platform-admin surfaces (e.g. the privacy-request queue) without duplicating the allowlist client-side. */
6537
6559
  isPlatformAdmin?: boolean;
@@ -8725,11 +8747,55 @@ export interface components {
8725
8747
  * @description Type of workspace lifecycle event.
8726
8748
  * @enum {string}
8727
8749
  */
8728
- ActivityLogEventTypeDto: "repo.added" | "repo.removed" | "repo.readded" | "integration.github.added" | "integration.github.updated" | "integration.github.removed" | "integration.github.permissions_changed" | "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";
8750
+ ActivityLogEventTypeDto: "repo.added" | "repo.removed" | "repo.readded" | "integration.github.added" | "integration.github.updated" | "integration.github.removed" | "integration.github.permissions_changed" | "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" | "workspace.aggregate_use.changed";
8729
8751
  UnsetAssessmentDecisionDto: {
8730
8752
  /** @enum {string} */
8731
8753
  status: "unset";
8732
8754
  };
8755
+ /** @description Current legal-approved opt-in notice, or `unset` while opt-in is unavailable. */
8756
+ AggregateUseNoticeStatusDto: {
8757
+ /** @enum {string} */
8758
+ status: "approved" | "unset";
8759
+ /** @description Present only when `status` is `approved`. Send it back on opt-in. */
8760
+ version?: string;
8761
+ };
8762
+ AggregateUseConsentDto: {
8763
+ /**
8764
+ * @description Saved choice. `unset` means the workspace never chose and is treated as opted out.
8765
+ * @enum {string}
8766
+ */
8767
+ aggregateUse: "opt_in" | "opt_out" | "unset";
8768
+ /** @description True only for `opt_in`. Benchmark and marketing extraction must check this. */
8769
+ effective: boolean;
8770
+ /** @description Notice version accepted with the current opt-in; null otherwise. */
8771
+ noticeVersion: string | null;
8772
+ /** @enum {string|null} */
8773
+ source: "workspace_settings" | null;
8774
+ /**
8775
+ * Format: date-time
8776
+ * @description When the current choice was saved; null when `unset`.
8777
+ */
8778
+ recordedAt: string | null;
8779
+ recordedBy: {
8780
+ /** Format: uuid */
8781
+ userId: string;
8782
+ displayName: string | null;
8783
+ } | null;
8784
+ /**
8785
+ * Format: date-time
8786
+ * @description Most recent opt-in withdrawal while the workspace remains opted out.
8787
+ */
8788
+ withdrawnAt: string | null;
8789
+ currentNotice: components["schemas"]["AggregateUseNoticeStatusDto"];
8790
+ /** @description Exact sentence the assessment PDF prints beside `recordedAt`. Opted-out and unset workspaces get the fixed refusal sentence. Opt-in returns the approved sentence for the accepted notice, or null if that notice is unknown, which blocks validation. */
8791
+ reportSentence: string | null;
8792
+ };
8793
+ AggregateUseConsentPutDto: {
8794
+ /** @enum {string} */
8795
+ aggregateUse: "opt_in" | "opt_out";
8796
+ /** @description Required for `opt_in` and must equal `currentNotice.version`. Ignored for `opt_out`. */
8797
+ noticeVersion?: string | null;
8798
+ };
8733
8799
  AssessmentDictionaryDto: {
8734
8800
  /** @enum {string} */
8735
8801
  version: "2026-10-18.1";
@@ -11324,6 +11390,9 @@ export type PutAgenticFoundationRepoScopeFailureDto = components['schemas']['Put
11324
11390
  export type PutAgenticFoundationRepoScopeResponseDto = components['schemas']['PutAgenticFoundationRepoScopeResponseDto'];
11325
11391
  export type ActivityLogEventTypeDto = components['schemas']['ActivityLogEventTypeDto'];
11326
11392
  export type UnsetAssessmentDecisionDto = components['schemas']['UnsetAssessmentDecisionDto'];
11393
+ export type AggregateUseNoticeStatusDto = components['schemas']['AggregateUseNoticeStatusDto'];
11394
+ export type AggregateUseConsentDto = components['schemas']['AggregateUseConsentDto'];
11395
+ export type AggregateUseConsentPutDto = components['schemas']['AggregateUseConsentPutDto'];
11327
11396
  export type AssessmentDictionaryDto = components['schemas']['AssessmentDictionaryDto'];
11328
11397
  export type ReportCenterExportRecordBodyDto = components['schemas']['ReportCenterExportRecordBodyDto'];
11329
11398
  export type ReportCenterExportRecordResponseDto = components['schemas']['ReportCenterExportRecordResponseDto'];
@@ -17984,6 +18053,102 @@ export interface operations {
17984
18053
  };
17985
18054
  };
17986
18055
  };
18056
+ getAggregateUseConsent: {
18057
+ parameters: {
18058
+ query?: never;
18059
+ header?: never;
18060
+ path: {
18061
+ workspaceId: components["parameters"]["WorkspaceId"];
18062
+ };
18063
+ cookie?: never;
18064
+ };
18065
+ requestBody?: never;
18066
+ responses: {
18067
+ /** @description Current permission and the sentence reports must print */
18068
+ 200: {
18069
+ headers: {
18070
+ [name: string]: unknown;
18071
+ };
18072
+ content: {
18073
+ "application/json": components["schemas"]["AggregateUseConsentDto"];
18074
+ };
18075
+ };
18076
+ 401: components["responses"]["Unauthorized"];
18077
+ 403: components["responses"]["Forbidden"];
18078
+ /** @description Workspace does not exist */
18079
+ 404: {
18080
+ headers: {
18081
+ [name: string]: unknown;
18082
+ };
18083
+ content: {
18084
+ "application/json": components["schemas"]["ErrorMessageDto"];
18085
+ };
18086
+ };
18087
+ };
18088
+ };
18089
+ putAggregateUseConsent: {
18090
+ parameters: {
18091
+ query?: never;
18092
+ header?: never;
18093
+ path: {
18094
+ workspaceId: components["parameters"]["WorkspaceId"];
18095
+ };
18096
+ cookie?: never;
18097
+ };
18098
+ requestBody: {
18099
+ content: {
18100
+ "application/json": components["schemas"]["AggregateUseConsentPutDto"];
18101
+ };
18102
+ };
18103
+ responses: {
18104
+ /** @description Saved permission */
18105
+ 200: {
18106
+ headers: {
18107
+ [name: string]: unknown;
18108
+ };
18109
+ content: {
18110
+ "application/json": components["schemas"]["AggregateUseConsentDto"];
18111
+ };
18112
+ };
18113
+ /** @description Invalid body (`code`: `invalid_input`) */
18114
+ 400: {
18115
+ headers: {
18116
+ [name: string]: unknown;
18117
+ };
18118
+ content: {
18119
+ "application/json": components["schemas"]["ErrorMessageDto"];
18120
+ };
18121
+ };
18122
+ 401: components["responses"]["Unauthorized"];
18123
+ /** @description Caller is not a workspace admin (`code`: `workspace_admin_required`) */
18124
+ 403: {
18125
+ headers: {
18126
+ [name: string]: unknown;
18127
+ };
18128
+ content: {
18129
+ "application/json": components["schemas"]["ErrorMessageDto"];
18130
+ };
18131
+ };
18132
+ /** @description Workspace does not exist */
18133
+ 404: {
18134
+ headers: {
18135
+ [name: string]: unknown;
18136
+ };
18137
+ content: {
18138
+ "application/json": components["schemas"]["ErrorMessageDto"];
18139
+ };
18140
+ };
18141
+ /** @description Opt-in refused because no notice is approved (`aggregate_use_notice_unapproved`) or the submitted notice version is not current (`aggregate_use_notice_stale`). */
18142
+ 409: {
18143
+ headers: {
18144
+ [name: string]: unknown;
18145
+ };
18146
+ content: {
18147
+ "application/json": components["schemas"]["ErrorMessageDto"];
18148
+ };
18149
+ };
18150
+ };
18151
+ };
17987
18152
  recordReportCenterExport: {
17988
18153
  parameters: {
17989
18154
  query?: never;
@@ -18050,7 +18215,7 @@ export interface operations {
18050
18215
  order?: components["parameters"]["PaginationOrder"];
18051
18216
  /** @description Server-side sort column (the activity "5 W's"). Combined with `order` (asc/desc). Defaults to `when` (occurredAt). `occurredAt`/`id` is always the tiebreaker. */
18052
18217
  sort?: "when" | "who" | "what" | "why" | "where";
18053
- /** @description Coarse product-area grouping filter (#156). `integration` = GitHub + AI-tool key events; `agentic_foundation` = repos, readiness scans, fixes; `workspace_team` = members + HRIS + report exports; `productivity` = productivity ingest lifecycle events. Omit (or pass `all`) for every area. */
18218
+ /** @description Coarse product-area grouping filter (#156). `integration` = GitHub + AI-tool key events; `agentic_foundation` = repos, readiness scans, fixes; `workspace_team` = members + HRIS + report exports + workspace settings; `productivity` = productivity ingest lifecycle events. Omit (or pass `all`) for every area. */
18054
18219
  productArea?: "integration" | "agentic_foundation" | "workspace_team" | "productivity" | "all";
18055
18220
  /** @description Filter to a specific event type. */
18056
18221
  eventType?: components["schemas"]["ActivityLogEventTypeDto"];