@thinkai/tai-api-contract 2.70.0 → 2.72.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.
@@ -356,7 +356,7 @@ export interface paths {
356
356
  put?: never;
357
357
  /**
358
358
  * Invite member to workspace
359
- * @description Workspace admin only. Upserts `tai_users` by email and adds or reactivates `tai_workspace_members`. Idempotent when the email is already an active member: returns **201** with the existing row and **does not change** their role if the request body role differs. Does not send email; optional `tai_workspace_invitations` row may be recorded (no accept/link flow yet).
359
+ * @description Workspace admin only. Creates or refreshes a **pending** `tai_workspace_invitations` row and emails an accept link; it does **not** create `tai_workspace_members`. Membership is granted only by `POST /invitations/{token}/accept`. Applies to new and existing platform users alike. Idempotent when the email is already an active member: returns **201** with `outcome: "already_member"` and the existing row, **does not change** their role if the request body role differs, and sends no email. Re-inviting a pending email refreshes the token and 7-day expiry (the previous link stops working). When SMTP is not configured the invitation is still created and a warning is logged.
360
360
  */
361
361
  post: operations["inviteTenantMember"];
362
362
  delete?: never;
@@ -389,6 +389,86 @@ export interface paths {
389
389
  patch: operations["updateTenantMemberRole"];
390
390
  trace?: never;
391
391
  };
392
+ "/workspaces/{workspaceId}/invitations": {
393
+ parameters: {
394
+ query?: never;
395
+ header?: never;
396
+ path?: never;
397
+ cookie?: never;
398
+ };
399
+ /**
400
+ * List pending workspace invitations
401
+ * @description Workspace admin only. Returns invitations still awaiting a decision so the team settings page can show "pending" alongside active members. Rows whose `expiresAt` has passed are flipped to `expired` on read and omitted.
402
+ */
403
+ get: operations["listWorkspaceInvitations"];
404
+ put?: never;
405
+ post?: never;
406
+ delete?: never;
407
+ options?: never;
408
+ head?: never;
409
+ patch?: never;
410
+ trace?: never;
411
+ };
412
+ "/invitations/{token}": {
413
+ parameters: {
414
+ query?: never;
415
+ header?: never;
416
+ path?: never;
417
+ cookie?: never;
418
+ };
419
+ /**
420
+ * Preview a workspace invitation (public)
421
+ * @description **Unauthenticated.** Lets the SPA render the invite landing page before the invitee has signed in. The invited email is **masked** (`j••••e@example.com`) so a leaked link does not disclose an address. Returns `404` with a generic message for unknown, revoked, or rejected tokens; a past-due `pending` invitation is flipped to `expired` and returned with that status so the SPA can show a stable message.
422
+ */
423
+ get: operations["getWorkspaceInvitationPreview"];
424
+ put?: never;
425
+ post?: never;
426
+ delete?: never;
427
+ options?: never;
428
+ head?: never;
429
+ patch?: never;
430
+ trace?: never;
431
+ };
432
+ "/invitations/{token}/accept": {
433
+ parameters: {
434
+ query?: never;
435
+ header?: never;
436
+ path?: never;
437
+ cookie?: never;
438
+ };
439
+ get?: never;
440
+ put?: never;
441
+ /**
442
+ * Accept a workspace invitation
443
+ * @description Requires a Supabase JWT whose email matches the invited email. Creates the `tai_workspace_members` row with the invited role and closes the invitation as `accepted`. This is the **only** path that grants workspace membership — signing up alone never does. Idempotent: re-accepting your own accepted invitation returns `200` unchanged.
444
+ */
445
+ post: operations["acceptWorkspaceInvitation"];
446
+ delete?: never;
447
+ options?: never;
448
+ head?: never;
449
+ patch?: never;
450
+ trace?: never;
451
+ };
452
+ "/invitations/{token}/reject": {
453
+ parameters: {
454
+ query?: never;
455
+ header?: never;
456
+ path?: never;
457
+ cookie?: never;
458
+ };
459
+ get?: never;
460
+ put?: never;
461
+ /**
462
+ * Decline a workspace invitation
463
+ * @description Requires a Supabase JWT whose email matches the invited email — anonymous decline with only the token is not allowed. Closes the invitation as `rejected` and creates no member row. Idempotent for an already-rejected invitation.
464
+ */
465
+ post: operations["rejectWorkspaceInvitation"];
466
+ delete?: never;
467
+ options?: never;
468
+ head?: never;
469
+ patch?: never;
470
+ trace?: never;
471
+ };
392
472
  "/workspaces/{workspaceId}/org-chart/status": {
393
473
  parameters: {
394
474
  query?: never;
@@ -3099,6 +3179,54 @@ export interface components {
3099
3179
  /** @enum {string} */
3100
3180
  role: "admin" | "editor" | "viewer";
3101
3181
  };
3182
+ /**
3183
+ * @description `revoked` is an admin cancelling the invitation; `rejected` is the invitee declining it. Both leave the invitee outside the workspace.
3184
+ * @enum {string}
3185
+ */
3186
+ WorkspaceInvitationStatusDto: "pending" | "accepted" | "expired" | "revoked" | "rejected";
3187
+ /** @description Workspace invitation as seen by an authenticated admin or invitee. */
3188
+ WorkspaceInvitationDto: {
3189
+ /** Format: uuid */
3190
+ id: string;
3191
+ /** Format: uuid */
3192
+ workspaceId: string;
3193
+ workspaceName: string;
3194
+ /** @description Invited email address. */
3195
+ email: string;
3196
+ /** @enum {string} */
3197
+ role: "admin" | "editor" | "viewer";
3198
+ status: components["schemas"]["WorkspaceInvitationStatusDto"];
3199
+ invitedByName?: string | null;
3200
+ invitedByEmail?: string | null;
3201
+ /** Format: date-time */
3202
+ expiresAt: string;
3203
+ /** Format: date-time */
3204
+ createdAt: string;
3205
+ /** Format: date-time */
3206
+ acceptedAt?: string | null;
3207
+ };
3208
+ /** @description Unauthenticated invitation preview. `maskedEmail` is the only view of the invited address; compare it to the signed-in account client-side before calling accept. */
3209
+ WorkspaceInvitationPreviewDto: {
3210
+ workspaceName: string;
3211
+ /** @enum {string} */
3212
+ role: "admin" | "editor" | "viewer";
3213
+ status: components["schemas"]["WorkspaceInvitationStatusDto"];
3214
+ /** @example j••••e@example.com */
3215
+ maskedEmail: string;
3216
+ invitedByName?: string | null;
3217
+ /** Format: date-time */
3218
+ expiresAt: string;
3219
+ };
3220
+ WorkspaceInvitationListDto: {
3221
+ invitations: components["schemas"]["WorkspaceInvitationDto"][];
3222
+ };
3223
+ /** @description Discriminated on `outcome`. `invited` carries the new pending invitation; `already_member` carries the existing membership row unchanged. */
3224
+ InviteTeamMemberResultDto: {
3225
+ /** @enum {string} */
3226
+ outcome: "invited" | "already_member";
3227
+ invitation?: components["schemas"]["WorkspaceInvitationDto"];
3228
+ member?: components["schemas"]["TeamMemberDto"];
3229
+ };
3102
3230
  /** @description Granular person erasure categories. All default to true when omitted. */
3103
3231
  EraseInsightsPersonBodyDto: {
3104
3232
  /** @description Remove the person node from `tai_workspace_config.org_chart`. */
@@ -3437,6 +3565,32 @@ export interface components {
3437
3565
  projectKey: string;
3438
3566
  branch?: string;
3439
3567
  };
3568
+ /** @description PagerDuty incident monitoring source for `PUT /workspaces/{workspaceId}/sources` and `POST /workspaces/{workspaceId}/sources/test`. Requires a REST API v2 token (an "API Access Key" from PagerDuty → **Integrations → API Access Keys**). */
3569
+ PagerDutySourceDto: {
3570
+ /** @enum {string} */
3571
+ type: "pagerduty";
3572
+ /** @description PagerDuty REST API v2 token (API Access Key, write-only on PUT). */
3573
+ token: string;
3574
+ /** @description Optional API base URL override. Default `https://api.pagerduty.com`. */
3575
+ baseUrl?: string;
3576
+ /** @description Optional display name from a successful connection test (echo-after-test). */
3577
+ userName?: string;
3578
+ /** @description Optional email from a successful connection test (echo-after-test). */
3579
+ userEmail?: string;
3580
+ };
3581
+ /** @description Redacted PagerDuty source returned by `GET /workspaces/{workspaceId}/config`. Raw token is never returned. */
3582
+ PagerDutySourceConfigDto: {
3583
+ /** @enum {string} */
3584
+ type: "pagerduty";
3585
+ /** @description Whether an API token is stored for this workspace. */
3586
+ hasToken: boolean;
3587
+ /** @description Configured API base URL override, when set. */
3588
+ baseUrl?: string;
3589
+ /** @description PagerDuty user name when known from the last successful verify. */
3590
+ userName?: string;
3591
+ /** @description PagerDuty user email when known from the last successful verify. */
3592
+ userEmail?: string;
3593
+ };
3440
3594
  /**
3441
3595
  * @description The agent execution account used for Agentic Foundation runs (readiness scanner + fix queue). Exactly one is active per workspace.
3442
3596
  * - `thinkai_platform_cursor`: ThinkAI platform Cursor key (Cursor Agent CLI) — opt-in, never default.
@@ -3446,7 +3600,7 @@ export interface components {
3446
3600
  */
3447
3601
  AgentExecutionProviderDto: "thinkai_platform_cursor" | "cursor_user_api_key" | "claude_api_key";
3448
3602
  WorkspaceConfigDto: {
3449
- sources: (components["schemas"]["CursorSourceConfigDto"] | components["schemas"]["ClaudeSourceConfigDto"] | components["schemas"]["NewRelicSourceConfigDto"] | components["schemas"]["PrometheusSourceConfigDto"] | components["schemas"]["GrafanaSourceConfigDto"] | components["schemas"]["SonarQubeSourceConfigDto"] | components["schemas"]["TenantSourceEntryDto"])[];
3603
+ sources: (components["schemas"]["CursorSourceConfigDto"] | components["schemas"]["ClaudeSourceConfigDto"] | components["schemas"]["NewRelicSourceConfigDto"] | components["schemas"]["PrometheusSourceConfigDto"] | components["schemas"]["GrafanaSourceConfigDto"] | components["schemas"]["SonarQubeSourceConfigDto"] | components["schemas"]["PagerDutySourceConfigDto"] | components["schemas"]["TenantSourceEntryDto"])[];
3450
3604
  orgChart?: components["schemas"]["ScoringOrgChartDto"] | null;
3451
3605
  /** @enum {string|null} */
3452
3606
  region?: "us" | "eu" | "me" | null;
@@ -6216,7 +6370,7 @@ export interface components {
6216
6370
  * @description Type of workspace lifecycle event.
6217
6371
  * @enum {string}
6218
6372
  */
6219
- 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" | "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.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.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" | "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";
6373
+ 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" | "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.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" | "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";
6220
6374
  ActivityLogActorDto: {
6221
6375
  /** Format: uuid */
6222
6376
  userId: string;
@@ -6771,6 +6925,8 @@ export interface components {
6771
6925
  NotificationId: string;
6772
6926
  /** @description Workspace member user id (`tai_users.id`). */
6773
6927
  WorkspaceMemberId: string;
6928
+ /** @description Opaque workspace invitation token from the emailed accept link. Only its SHA-256 hash is stored server-side; the plaintext is shown exactly once, in the email. */
6929
+ WorkspaceInvitationToken: string;
6774
6930
  /** @description Privacy request id (`tai_privacy_requests.id`). */
6775
6931
  PrivacyRequestId: string;
6776
6932
  FixId: string;
@@ -6836,6 +6992,11 @@ export type TeamMemberDto = components['schemas']['TeamMemberDto'];
6836
6992
  export type TeamMemberListDto = components['schemas']['TeamMemberListDto'];
6837
6993
  export type InviteTeamMemberBodyDto = components['schemas']['InviteTeamMemberBodyDto'];
6838
6994
  export type UpdateTeamMemberRoleBodyDto = components['schemas']['UpdateTeamMemberRoleBodyDto'];
6995
+ export type WorkspaceInvitationStatusDto = components['schemas']['WorkspaceInvitationStatusDto'];
6996
+ export type WorkspaceInvitationDto = components['schemas']['WorkspaceInvitationDto'];
6997
+ export type WorkspaceInvitationPreviewDto = components['schemas']['WorkspaceInvitationPreviewDto'];
6998
+ export type WorkspaceInvitationListDto = components['schemas']['WorkspaceInvitationListDto'];
6999
+ export type InviteTeamMemberResultDto = components['schemas']['InviteTeamMemberResultDto'];
6839
7000
  export type EraseInsightsPersonBodyDto = components['schemas']['EraseInsightsPersonBodyDto'];
6840
7001
  export type EraseInsightsPersonResultDto = components['schemas']['EraseInsightsPersonResultDto'];
6841
7002
  export type OrgChartNodeDto = components['schemas']['OrgChartNodeDto'];
@@ -6865,6 +7026,8 @@ export type GrafanaSourceDto = components['schemas']['GrafanaSourceDto'];
6865
7026
  export type GrafanaSourceConfigDto = components['schemas']['GrafanaSourceConfigDto'];
6866
7027
  export type SonarQubeSourceDto = components['schemas']['SonarQubeSourceDto'];
6867
7028
  export type SonarQubeSourceConfigDto = components['schemas']['SonarQubeSourceConfigDto'];
7029
+ export type PagerDutySourceDto = components['schemas']['PagerDutySourceDto'];
7030
+ export type PagerDutySourceConfigDto = components['schemas']['PagerDutySourceConfigDto'];
6868
7031
  export type AgentExecutionProviderDto = components['schemas']['AgentExecutionProviderDto'];
6869
7032
  export type WorkspaceConfigDto = components['schemas']['WorkspaceConfigDto'];
6870
7033
  export type TestConnectionResponseDto = components['schemas']['TestConnectionResponseDto'];
@@ -7182,6 +7345,7 @@ export type ParameterProviderSlug = components['parameters']['ProviderSlug'];
7182
7345
  export type ParameterProjectId = components['parameters']['ProjectId'];
7183
7346
  export type ParameterNotificationId = components['parameters']['NotificationId'];
7184
7347
  export type ParameterWorkspaceMemberId = components['parameters']['WorkspaceMemberId'];
7348
+ export type ParameterWorkspaceInvitationToken = components['parameters']['WorkspaceInvitationToken'];
7185
7349
  export type ParameterPrivacyRequestId = components['parameters']['PrivacyRequestId'];
7186
7350
  export type ParameterFixId = components['parameters']['FixId'];
7187
7351
  export type ParameterInsightsProductivityRangeId = components['parameters']['InsightsProductivityRangeId'];
@@ -8225,13 +8389,13 @@ export interface operations {
8225
8389
  };
8226
8390
  };
8227
8391
  responses: {
8228
- /** @description Invited member row */
8392
+ /** @description Pending invitation, or the existing member row when already a member */
8229
8393
  201: {
8230
8394
  headers: {
8231
8395
  [name: string]: unknown;
8232
8396
  };
8233
8397
  content: {
8234
- "application/json": components["schemas"]["TeamMemberDto"];
8398
+ "application/json": components["schemas"]["InviteTeamMemberResultDto"];
8235
8399
  };
8236
8400
  };
8237
8401
  /** @description Invalid email or role */
@@ -8360,6 +8524,191 @@ export interface operations {
8360
8524
  };
8361
8525
  };
8362
8526
  };
8527
+ listWorkspaceInvitations: {
8528
+ parameters: {
8529
+ query?: never;
8530
+ header?: never;
8531
+ path: {
8532
+ workspaceId: components["parameters"]["WorkspaceId"];
8533
+ };
8534
+ cookie?: never;
8535
+ };
8536
+ requestBody?: never;
8537
+ responses: {
8538
+ /** @description Pending invitations */
8539
+ 200: {
8540
+ headers: {
8541
+ [name: string]: unknown;
8542
+ };
8543
+ content: {
8544
+ "application/json": components["schemas"]["WorkspaceInvitationListDto"];
8545
+ };
8546
+ };
8547
+ 401: components["responses"]["Unauthorized"];
8548
+ 403: components["responses"]["Forbidden"];
8549
+ /** @description Workspace does not exist or malformed workspaceId */
8550
+ 404: {
8551
+ headers: {
8552
+ [name: string]: unknown;
8553
+ };
8554
+ content: {
8555
+ "application/json": components["schemas"]["ErrorMessageDto"];
8556
+ };
8557
+ };
8558
+ };
8559
+ };
8560
+ getWorkspaceInvitationPreview: {
8561
+ parameters: {
8562
+ query?: never;
8563
+ header?: never;
8564
+ path: {
8565
+ /** @description Opaque workspace invitation token from the emailed accept link. Only its SHA-256 hash is stored server-side; the plaintext is shown exactly once, in the email. */
8566
+ token: components["parameters"]["WorkspaceInvitationToken"];
8567
+ };
8568
+ cookie?: never;
8569
+ };
8570
+ requestBody?: never;
8571
+ responses: {
8572
+ /** @description Invitation preview */
8573
+ 200: {
8574
+ headers: {
8575
+ [name: string]: unknown;
8576
+ };
8577
+ content: {
8578
+ "application/json": components["schemas"]["WorkspaceInvitationPreviewDto"];
8579
+ };
8580
+ };
8581
+ /** @description Unknown or no longer available invitation */
8582
+ 404: {
8583
+ headers: {
8584
+ [name: string]: unknown;
8585
+ };
8586
+ content: {
8587
+ "application/json": components["schemas"]["ErrorMessageDto"];
8588
+ };
8589
+ };
8590
+ };
8591
+ };
8592
+ acceptWorkspaceInvitation: {
8593
+ parameters: {
8594
+ query?: never;
8595
+ header?: never;
8596
+ path: {
8597
+ /** @description Opaque workspace invitation token from the emailed accept link. Only its SHA-256 hash is stored server-side; the plaintext is shown exactly once, in the email. */
8598
+ token: components["parameters"]["WorkspaceInvitationToken"];
8599
+ };
8600
+ cookie?: never;
8601
+ };
8602
+ requestBody?: never;
8603
+ responses: {
8604
+ /** @description Invitation accepted; caller is now a workspace member */
8605
+ 200: {
8606
+ headers: {
8607
+ [name: string]: unknown;
8608
+ };
8609
+ content: {
8610
+ "application/json": components["schemas"]["WorkspaceInvitationDto"];
8611
+ };
8612
+ };
8613
+ 401: components["responses"]["Unauthorized"];
8614
+ /** @description Signed-in email does not match the invited email */
8615
+ 403: {
8616
+ headers: {
8617
+ [name: string]: unknown;
8618
+ };
8619
+ content: {
8620
+ "application/json": components["schemas"]["ErrorMessageDto"];
8621
+ };
8622
+ };
8623
+ /** @description Unknown invitation token */
8624
+ 404: {
8625
+ headers: {
8626
+ [name: string]: unknown;
8627
+ };
8628
+ content: {
8629
+ "application/json": components["schemas"]["ErrorMessageDto"];
8630
+ };
8631
+ };
8632
+ /** @description Invitation is no longer actionable */
8633
+ 409: {
8634
+ headers: {
8635
+ [name: string]: unknown;
8636
+ };
8637
+ content: {
8638
+ "application/json": components["schemas"]["ErrorMessageDto"];
8639
+ };
8640
+ };
8641
+ /** @description Invitation expired */
8642
+ 410: {
8643
+ headers: {
8644
+ [name: string]: unknown;
8645
+ };
8646
+ content: {
8647
+ "application/json": components["schemas"]["ErrorMessageDto"];
8648
+ };
8649
+ };
8650
+ };
8651
+ };
8652
+ rejectWorkspaceInvitation: {
8653
+ parameters: {
8654
+ query?: never;
8655
+ header?: never;
8656
+ path: {
8657
+ /** @description Opaque workspace invitation token from the emailed accept link. Only its SHA-256 hash is stored server-side; the plaintext is shown exactly once, in the email. */
8658
+ token: components["parameters"]["WorkspaceInvitationToken"];
8659
+ };
8660
+ cookie?: never;
8661
+ };
8662
+ requestBody?: never;
8663
+ responses: {
8664
+ /** @description Invitation declined */
8665
+ 200: {
8666
+ headers: {
8667
+ [name: string]: unknown;
8668
+ };
8669
+ content: {
8670
+ "application/json": components["schemas"]["WorkspaceInvitationDto"];
8671
+ };
8672
+ };
8673
+ 401: components["responses"]["Unauthorized"];
8674
+ /** @description Signed-in email does not match the invited email */
8675
+ 403: {
8676
+ headers: {
8677
+ [name: string]: unknown;
8678
+ };
8679
+ content: {
8680
+ "application/json": components["schemas"]["ErrorMessageDto"];
8681
+ };
8682
+ };
8683
+ /** @description Unknown invitation token */
8684
+ 404: {
8685
+ headers: {
8686
+ [name: string]: unknown;
8687
+ };
8688
+ content: {
8689
+ "application/json": components["schemas"]["ErrorMessageDto"];
8690
+ };
8691
+ };
8692
+ /** @description Invitation was already accepted */
8693
+ 409: {
8694
+ headers: {
8695
+ [name: string]: unknown;
8696
+ };
8697
+ content: {
8698
+ "application/json": components["schemas"]["ErrorMessageDto"];
8699
+ };
8700
+ };
8701
+ /** @description Invitation expired */
8702
+ 410: {
8703
+ headers: {
8704
+ [name: string]: unknown;
8705
+ };
8706
+ content: {
8707
+ "application/json": components["schemas"]["ErrorMessageDto"];
8708
+ };
8709
+ };
8710
+ };
8711
+ };
8363
8712
  getWorkspaceOrgChartStatus: {
8364
8713
  parameters: {
8365
8714
  query?: never;
@@ -8580,7 +8929,7 @@ export interface operations {
8580
8929
  requestBody: {
8581
8930
  content: {
8582
8931
  "application/json": {
8583
- sources: (components["schemas"]["CursorSourcePatchDto"] | components["schemas"]["CursorSourceDto"] | components["schemas"]["ClaudeSourcePatchDto"] | components["schemas"]["ClaudeSourceDto"] | components["schemas"]["NewRelicSourceDto"] | components["schemas"]["PrometheusSourceDto"] | components["schemas"]["GrafanaSourceDto"] | components["schemas"]["SonarQubeSourceDto"] | components["schemas"]["TenantSourceEntryDto"])[];
8932
+ sources: (components["schemas"]["CursorSourcePatchDto"] | components["schemas"]["CursorSourceDto"] | components["schemas"]["ClaudeSourcePatchDto"] | components["schemas"]["ClaudeSourceDto"] | components["schemas"]["NewRelicSourceDto"] | components["schemas"]["PrometheusSourceDto"] | components["schemas"]["GrafanaSourceDto"] | components["schemas"]["SonarQubeSourceDto"] | components["schemas"]["PagerDutySourceDto"] | components["schemas"]["TenantSourceEntryDto"])[];
8584
8933
  };
8585
8934
  };
8586
8935
  };
@@ -8634,7 +8983,7 @@ export interface operations {
8634
8983
  };
8635
8984
  requestBody: {
8636
8985
  content: {
8637
- "application/json": components["schemas"]["CursorSourcePatchDto"] | components["schemas"]["CursorSourceDto"] | components["schemas"]["ClaudeSourcePatchDto"] | components["schemas"]["ClaudeSourceDto"] | components["schemas"]["NewRelicSourceDto"] | components["schemas"]["PrometheusSourceDto"] | components["schemas"]["GrafanaSourceDto"] | components["schemas"]["SonarQubeSourceDto"] | components["schemas"]["TenantSourceEntryDto"];
8986
+ "application/json": components["schemas"]["CursorSourcePatchDto"] | components["schemas"]["CursorSourceDto"] | components["schemas"]["ClaudeSourcePatchDto"] | components["schemas"]["ClaudeSourceDto"] | components["schemas"]["NewRelicSourceDto"] | components["schemas"]["PrometheusSourceDto"] | components["schemas"]["GrafanaSourceDto"] | components["schemas"]["SonarQubeSourceDto"] | components["schemas"]["PagerDutySourceDto"] | components["schemas"]["TenantSourceEntryDto"];
8638
8987
  };
8639
8988
  };
8640
8989
  responses: {