@thinkai/tai-api-contract 2.149.0 → 2.151.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.149.0
4
+ version: 2.151.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}/...`.
@@ -9200,6 +9200,295 @@ paths:
9200
9200
  "409":
9201
9201
  description: Corpus not ready
9202
9202
 
9203
+ /notifications/email/unsubscribe:
9204
+ get:
9205
+ tags: [Notifications]
9206
+ summary: Confirm a Message Center email unsubscribe (public)
9207
+ description: >
9208
+ **Unauthenticated.** Mail scanners prefetch GET, so this page does not change
9209
+ preferences. Status email cannot be turned off; the page says so. Other categories
9210
+ show a button that POSTs the same token. An unknown or expired token is `400` HTML.
9211
+ operationId: getNotificationEmailUnsubscribe
9212
+ security: []
9213
+ parameters:
9214
+ - name: token
9215
+ in: query
9216
+ required: true
9217
+ description: Opaque unsubscribe token from the email. Only its SHA-256 hash is stored.
9218
+ schema:
9219
+ type: string
9220
+ responses:
9221
+ "200":
9222
+ description: Confirm page. Preferences are unchanged.
9223
+ content:
9224
+ text/html:
9225
+ schema:
9226
+ type: string
9227
+ "400":
9228
+ description: Unknown or expired token
9229
+ content:
9230
+ text/html:
9231
+ schema:
9232
+ type: string
9233
+ post:
9234
+ tags: [Notifications]
9235
+ summary: Apply a Message Center email unsubscribe (public)
9236
+ description: >
9237
+ **Unauthenticated.** Sets that category's email cell to `off` when the category
9238
+ allows off. A status token leaves status email unchanged. Redirects `303` to
9239
+ `{spa}/settings?tab=preferences`. An unknown or expired token is `400` HTML and
9240
+ does not change preferences.
9241
+ operationId: postNotificationEmailUnsubscribe
9242
+ security: []
9243
+ parameters:
9244
+ - name: token
9245
+ in: query
9246
+ required: true
9247
+ description: Opaque unsubscribe token from the email. Only its SHA-256 hash is stored.
9248
+ schema:
9249
+ type: string
9250
+ responses:
9251
+ "303":
9252
+ description: Preference updated, or left unchanged for status email.
9253
+ headers:
9254
+ Location:
9255
+ description: "`{spa}/settings?tab=preferences`"
9256
+ schema:
9257
+ type: string
9258
+ "400":
9259
+ description: Unknown or expired token
9260
+ content:
9261
+ text/html:
9262
+ schema:
9263
+ type: string
9264
+ "200":
9265
+ description: Preference updated when no SPA origin is configured.
9266
+ content:
9267
+ text/html:
9268
+ schema:
9269
+ type: string
9270
+
9271
+ /workspaces/{workspaceId}/integrations/slack/install-url:
9272
+ get:
9273
+ tags: [Integrations]
9274
+ summary: Slack install URL for Message Center
9275
+ operationId: getSlackInstallUrl
9276
+ description: >
9277
+ Workspace admin only. Returns the Slack OAuth authorize URL. State is stored
9278
+ server-side and names this workspace and the signed-in admin. Editor or viewer
9279
+ is `403` with `code` `workspace_admin_required`. Missing Slack app settings are
9280
+ `503` with `code` `slack_not_configured`.
9281
+ security:
9282
+ - bearerAuth: []
9283
+ parameters:
9284
+ - $ref: "#/components/parameters/WorkspaceId"
9285
+ responses:
9286
+ "200":
9287
+ description: Slack authorize URL
9288
+ content:
9289
+ application/json:
9290
+ schema:
9291
+ $ref: "#/components/schemas/SlackInstallUrlDto"
9292
+ "401":
9293
+ $ref: "#/components/responses/Unauthorized"
9294
+ "403":
9295
+ description: Caller is not a workspace admin
9296
+ content:
9297
+ application/json:
9298
+ schema:
9299
+ $ref: "#/components/schemas/ErrorMessageDto"
9300
+ example:
9301
+ error: Forbidden
9302
+ code: workspace_admin_required
9303
+ "404":
9304
+ description: Workspace does not exist or malformed workspaceId
9305
+ content:
9306
+ application/json:
9307
+ schema:
9308
+ $ref: "#/components/schemas/ErrorMessageDto"
9309
+ "503":
9310
+ description: Slack app client id, secret, API origin, or SPA origin is unset
9311
+ content:
9312
+ application/json:
9313
+ schema:
9314
+ $ref: "#/components/schemas/ErrorMessageDto"
9315
+ example:
9316
+ error: Slack is not configured
9317
+ code: slack_not_configured
9318
+
9319
+ /integrations/slack/callback:
9320
+ get:
9321
+ tags: [Integrations]
9322
+ summary: Slack OAuth callback
9323
+ operationId: getSlackOauthCallback
9324
+ description: >
9325
+ Browser return from Slack. The provider redirect does not include the API
9326
+ bearer token. `state` was issued by `getSlackInstallUrl` to a signed-in admin
9327
+ and is single-use. The bot token is stored encrypted only when that user is
9328
+ still a workspace admin. Success redirects to
9329
+ `{spa}/settings?tab=preferences&chat=slack`. Failures redirect to the same
9330
+ page with `slack=error`. The token is never in the redirect.
9331
+ parameters:
9332
+ - name: code
9333
+ in: query
9334
+ schema:
9335
+ type: string
9336
+ - name: state
9337
+ in: query
9338
+ required: true
9339
+ schema:
9340
+ type: string
9341
+ - name: error
9342
+ in: query
9343
+ schema:
9344
+ type: string
9345
+ responses:
9346
+ "302":
9347
+ description: Redirect to Settings → Preferences
9348
+ headers:
9349
+ Location:
9350
+ schema:
9351
+ type: string
9352
+ "503":
9353
+ description: Slack app settings are unset and no SPA origin is available
9354
+ content:
9355
+ application/json:
9356
+ schema:
9357
+ $ref: "#/components/schemas/ErrorMessageDto"
9358
+
9359
+ /workspaces/{workspaceId}/integrations/slack:
9360
+ get:
9361
+ tags: [Integrations]
9362
+ summary: Slack connection status
9363
+ operationId: getSlackIntegration
9364
+ description: >
9365
+ Any workspace member. `{ connected, channelName }`. `channelName` is null
9366
+ until an admin saves a channel. The bot token is never returned.
9367
+ security:
9368
+ - bearerAuth: []
9369
+ parameters:
9370
+ - $ref: "#/components/parameters/WorkspaceId"
9371
+ responses:
9372
+ "200":
9373
+ description: Slack connection status
9374
+ content:
9375
+ application/json:
9376
+ schema:
9377
+ $ref: "#/components/schemas/SlackIntegrationStatusDto"
9378
+ "401":
9379
+ $ref: "#/components/responses/Unauthorized"
9380
+ "403":
9381
+ $ref: "#/components/responses/Forbidden"
9382
+ "404":
9383
+ description: Workspace does not exist or malformed workspaceId
9384
+ content:
9385
+ application/json:
9386
+ schema:
9387
+ $ref: "#/components/schemas/ErrorMessageDto"
9388
+ delete:
9389
+ tags: [Integrations]
9390
+ summary: Disconnect Slack
9391
+ operationId: deleteSlackIntegration
9392
+ description: >
9393
+ Workspace admin only. Removes the bot token and saved channel. Later
9394
+ Message Center delivery does not post to Slack.
9395
+ security:
9396
+ - bearerAuth: []
9397
+ parameters:
9398
+ - $ref: "#/components/parameters/WorkspaceId"
9399
+ responses:
9400
+ "204":
9401
+ description: Slack disconnected
9402
+ "401":
9403
+ $ref: "#/components/responses/Unauthorized"
9404
+ "403":
9405
+ description: Caller is not a workspace admin
9406
+ content:
9407
+ application/json:
9408
+ schema:
9409
+ $ref: "#/components/schemas/ErrorMessageDto"
9410
+ example:
9411
+ error: Forbidden
9412
+ code: workspace_admin_required
9413
+ "404":
9414
+ description: Workspace does not exist or malformed workspaceId
9415
+ content:
9416
+ application/json:
9417
+ schema:
9418
+ $ref: "#/components/schemas/ErrorMessageDto"
9419
+
9420
+ /workspaces/{workspaceId}/integrations/slack/channel:
9421
+ put:
9422
+ tags: [Integrations]
9423
+ summary: Save the Slack channel for Message Center
9424
+ operationId: putSlackChannel
9425
+ description: >
9426
+ Workspace admin only. Body `{ channelId }`. Slack must already be connected.
9427
+ The response is the same status object as `getSlackIntegration`, with the
9428
+ channel name Slack returned. Unknown or malformed `channelId` is `400`
9429
+ `invalid_slack_channel`. Not connected is `409` `slack_not_connected`.
9430
+ security:
9431
+ - bearerAuth: []
9432
+ parameters:
9433
+ - $ref: "#/components/parameters/WorkspaceId"
9434
+ requestBody:
9435
+ required: true
9436
+ content:
9437
+ application/json:
9438
+ schema:
9439
+ $ref: "#/components/schemas/SlackChannelBodyDto"
9440
+ responses:
9441
+ "200":
9442
+ description: Channel saved
9443
+ content:
9444
+ application/json:
9445
+ schema:
9446
+ $ref: "#/components/schemas/SlackIntegrationStatusDto"
9447
+ "400":
9448
+ description: channelId is missing, malformed, or unknown to Slack
9449
+ content:
9450
+ application/json:
9451
+ schema:
9452
+ $ref: "#/components/schemas/ErrorMessageDto"
9453
+ example:
9454
+ error: Slack channel was not found
9455
+ code: invalid_slack_channel
9456
+ "401":
9457
+ $ref: "#/components/responses/Unauthorized"
9458
+ "403":
9459
+ description: Caller is not a workspace admin
9460
+ content:
9461
+ application/json:
9462
+ schema:
9463
+ $ref: "#/components/schemas/ErrorMessageDto"
9464
+ example:
9465
+ error: Forbidden
9466
+ code: workspace_admin_required
9467
+ "404":
9468
+ description: Workspace does not exist or malformed workspaceId
9469
+ content:
9470
+ application/json:
9471
+ schema:
9472
+ $ref: "#/components/schemas/ErrorMessageDto"
9473
+ "409":
9474
+ description: Slack is not connected
9475
+ content:
9476
+ application/json:
9477
+ schema:
9478
+ $ref: "#/components/schemas/ErrorMessageDto"
9479
+ example:
9480
+ error: Slack is not connected
9481
+ code: slack_not_connected
9482
+ "502":
9483
+ description: Slack rejected the lookup
9484
+ content:
9485
+ application/json:
9486
+ schema:
9487
+ $ref: "#/components/schemas/ErrorMessageDto"
9488
+ example:
9489
+ error: Slack did not accept the channel
9490
+ code: slack_request_failed
9491
+
9203
9492
  /workspaces/{workspaceId}/notifications:
9204
9493
  get:
9205
9494
  tags: [Notifications]
@@ -9960,6 +10249,239 @@ paths:
9960
10249
  "403":
9961
10250
  $ref: "#/components/responses/Forbidden"
9962
10251
 
10252
+ /workspaces/{workspaceId}/integrations/teams/install-url:
10253
+ get:
10254
+ tags: [Integrations, Notifications]
10255
+ summary: Microsoft sign-in URL for Teams notification delivery
10256
+ operationId: getWorkspaceTeamsInstallUrl
10257
+ description: >
10258
+ Workspace **admin** only. Returns the Microsoft authorize URL. State carries the
10259
+ workspace and the signed-in admin. Editor or viewer is `403` `workspace_admin_required`.
10260
+ parameters:
10261
+ - $ref: "#/components/parameters/WorkspaceId"
10262
+ responses:
10263
+ "200":
10264
+ description: Authorize URL
10265
+ content:
10266
+ application/json:
10267
+ schema:
10268
+ $ref: "#/components/schemas/TeamsInstallUrlDto"
10269
+ example:
10270
+ url: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=example&state=example-state"
10271
+ "401":
10272
+ $ref: "#/components/responses/Unauthorized"
10273
+ "403":
10274
+ description: Editor or viewer
10275
+ content:
10276
+ application/json:
10277
+ schema:
10278
+ $ref: "#/components/schemas/ErrorMessageDto"
10279
+ example:
10280
+ error: Forbidden
10281
+ code: workspace_admin_required
10282
+ "404":
10283
+ description: Workspace not found
10284
+ content:
10285
+ application/json:
10286
+ schema:
10287
+ $ref: "#/components/schemas/ErrorMessageDto"
10288
+ example:
10289
+ error: Not found
10290
+ "503":
10291
+ description: Teams app credentials are not configured
10292
+ content:
10293
+ application/json:
10294
+ schema:
10295
+ $ref: "#/components/schemas/ErrorMessageDto"
10296
+ example:
10297
+ error: Teams sign-in is not configured
10298
+ code: teams_not_configured
10299
+
10300
+ /integrations/teams/callback:
10301
+ get:
10302
+ tags: [Integrations, Notifications]
10303
+ summary: Finish Teams Microsoft sign-in
10304
+ operationId: getTeamsIntegrationCallback
10305
+ description: >
10306
+ Public redirect target. The one-time state was minted by a signed-in admin and
10307
+ still requires that user to be a workspace admin. Stores the bot token encrypted
10308
+ and redirects to `{spa}/settings?tab=preferences&chat=teams`.
10309
+ security: []
10310
+ parameters:
10311
+ - name: code
10312
+ in: query
10313
+ schema:
10314
+ type: string
10315
+ - name: state
10316
+ in: query
10317
+ required: true
10318
+ schema:
10319
+ type: string
10320
+ - name: error
10321
+ in: query
10322
+ schema:
10323
+ type: string
10324
+ responses:
10325
+ "302":
10326
+ description: Redirect to Settings → Preferences
10327
+ headers:
10328
+ Location:
10329
+ schema:
10330
+ type: string
10331
+ example: "https://app.example.com/settings?tab=preferences&chat=teams"
10332
+ "503":
10333
+ description: SPA origin is not configured
10334
+ content:
10335
+ application/json:
10336
+ schema:
10337
+ $ref: "#/components/schemas/ErrorMessageDto"
10338
+
10339
+ /workspaces/{workspaceId}/integrations/teams:
10340
+ get:
10341
+ tags: [Integrations, Notifications]
10342
+ summary: Teams connection status
10343
+ operationId: getWorkspaceTeamsConnection
10344
+ description: >
10345
+ Any workspace member. `{ connected, channelName }`. Never returns the bot token.
10346
+ `channelName` is null until an admin saves a channel.
10347
+ parameters:
10348
+ - $ref: "#/components/parameters/WorkspaceId"
10349
+ responses:
10350
+ "200":
10351
+ description: Connection status
10352
+ content:
10353
+ application/json:
10354
+ schema:
10355
+ $ref: "#/components/schemas/TeamsConnectionDto"
10356
+ example:
10357
+ connected: true
10358
+ channelName: General
10359
+ "401":
10360
+ $ref: "#/components/responses/Unauthorized"
10361
+ "403":
10362
+ $ref: "#/components/responses/Forbidden"
10363
+ "404":
10364
+ description: Workspace not found
10365
+ content:
10366
+ application/json:
10367
+ schema:
10368
+ $ref: "#/components/schemas/ErrorMessageDto"
10369
+ example:
10370
+ error: Not found
10371
+ delete:
10372
+ tags: [Integrations, Notifications]
10373
+ summary: Disconnect Teams
10374
+ operationId: deleteWorkspaceTeamsConnection
10375
+ description: >
10376
+ Workspace **admin** only. Later Message Center posts do not go to Teams.
10377
+ Member chat cells stay unchanged.
10378
+ parameters:
10379
+ - $ref: "#/components/parameters/WorkspaceId"
10380
+ responses:
10381
+ "204":
10382
+ description: Disconnected
10383
+ "401":
10384
+ $ref: "#/components/responses/Unauthorized"
10385
+ "403":
10386
+ description: Editor or viewer
10387
+ content:
10388
+ application/json:
10389
+ schema:
10390
+ $ref: "#/components/schemas/ErrorMessageDto"
10391
+ example:
10392
+ error: Forbidden
10393
+ code: workspace_admin_required
10394
+ "404":
10395
+ description: Workspace not found
10396
+ content:
10397
+ application/json:
10398
+ schema:
10399
+ $ref: "#/components/schemas/ErrorMessageDto"
10400
+ example:
10401
+ error: Not found
10402
+
10403
+ /workspaces/{workspaceId}/integrations/teams/channel:
10404
+ put:
10405
+ tags: [Integrations, Notifications]
10406
+ summary: Save the Teams channel for notification posts
10407
+ operationId: putWorkspaceTeamsChannel
10408
+ description: >
10409
+ Workspace **admin** only. Body `{ channelId }`. The channel must be visible to the
10410
+ connected Microsoft account. Until a channel is saved, channel-mode delivery is
10411
+ skipped with `chat_channel_unset`.
10412
+ parameters:
10413
+ - $ref: "#/components/parameters/WorkspaceId"
10414
+ requestBody:
10415
+ required: true
10416
+ content:
10417
+ application/json:
10418
+ schema:
10419
+ $ref: "#/components/schemas/TeamsChannelBodyDto"
10420
+ example:
10421
+ channelId: "19:example@thread.tacv2"
10422
+ responses:
10423
+ "200":
10424
+ description: Channel saved
10425
+ content:
10426
+ application/json:
10427
+ schema:
10428
+ $ref: "#/components/schemas/TeamsConnectionDto"
10429
+ example:
10430
+ connected: true
10431
+ channelName: General
10432
+ "400":
10433
+ description: Missing channelId, or the channel was not found
10434
+ content:
10435
+ application/json:
10436
+ schema:
10437
+ $ref: "#/components/schemas/ErrorMessageDto"
10438
+ examples:
10439
+ invalid:
10440
+ value:
10441
+ error: channelId is required
10442
+ code: invalid_input
10443
+ missing:
10444
+ value:
10445
+ error: Teams channel was not found
10446
+ code: teams_channel_not_found
10447
+ "401":
10448
+ $ref: "#/components/responses/Unauthorized"
10449
+ "403":
10450
+ description: Editor or viewer
10451
+ content:
10452
+ application/json:
10453
+ schema:
10454
+ $ref: "#/components/schemas/ErrorMessageDto"
10455
+ example:
10456
+ error: Forbidden
10457
+ code: workspace_admin_required
10458
+ "404":
10459
+ description: Workspace not found
10460
+ content:
10461
+ application/json:
10462
+ schema:
10463
+ $ref: "#/components/schemas/ErrorMessageDto"
10464
+ example:
10465
+ error: Not found
10466
+ "409":
10467
+ description: Teams is not connected
10468
+ content:
10469
+ application/json:
10470
+ schema:
10471
+ $ref: "#/components/schemas/ErrorMessageDto"
10472
+ example:
10473
+ error: Teams is not connected
10474
+ code: teams_not_connected
10475
+ "502":
10476
+ description: Microsoft Graph rejected the channel lookup
10477
+ content:
10478
+ application/json:
10479
+ schema:
10480
+ $ref: "#/components/schemas/ErrorMessageDto"
10481
+ example:
10482
+ error: Teams channel lookup failed
10483
+ code: teams_graph_failed
10484
+
9963
10485
  /workspaces/{workspaceId}/integrations/zelt/authorize-url:
9964
10486
  post:
9965
10487
  tags: [HRIS, Integrations]
@@ -10972,6 +11494,35 @@ components:
10972
11494
  error: zenhr_sync_in_progress
10973
11495
 
10974
11496
  schemas:
11497
+ TeamsInstallUrlDto:
11498
+ type: object
11499
+ required: [url]
11500
+ properties:
11501
+ url:
11502
+ type: string
11503
+ format: uri
11504
+
11505
+ TeamsConnectionDto:
11506
+ type: object
11507
+ required: [connected, channelName]
11508
+ properties:
11509
+ connected:
11510
+ type: boolean
11511
+ description: True after an admin completes Microsoft sign-in.
11512
+ channelName:
11513
+ type: string
11514
+ nullable: true
11515
+ description: Selected channel display name. Null until an admin saves a channel.
11516
+
11517
+ TeamsChannelBodyDto:
11518
+ type: object
11519
+ required: [channelId]
11520
+ properties:
11521
+ channelId:
11522
+ type: string
11523
+ minLength: 1
11524
+ maxLength: 256
11525
+
10975
11526
  ErrorMessageDto:
10976
11527
  type: object
10977
11528
  required: [error]
@@ -18834,6 +19385,37 @@ components:
18834
19385
  teams:
18835
19386
  $ref: "#/components/schemas/NotificationChatChannelsDto"
18836
19387
 
19388
+ SlackInstallUrlDto:
19389
+ type: object
19390
+ additionalProperties: false
19391
+ required: [url]
19392
+ properties:
19393
+ url:
19394
+ type: string
19395
+ description: Slack OAuth authorize URL. The bot token is not included.
19396
+
19397
+ SlackIntegrationStatusDto:
19398
+ type: object
19399
+ additionalProperties: false
19400
+ required: [connected, channelName]
19401
+ properties:
19402
+ connected:
19403
+ type: boolean
19404
+ channelName:
19405
+ type: string
19406
+ nullable: true
19407
+ description: Saved channel name. Null until an admin saves a channel, and when disconnected.
19408
+
19409
+ SlackChannelBodyDto:
19410
+ type: object
19411
+ additionalProperties: false
19412
+ required: [channelId]
19413
+ properties:
19414
+ channelId:
19415
+ type: string
19416
+ minLength: 1
19417
+ maxLength: 32
19418
+
18837
19419
  PutNotificationEmailChannelsDto:
18838
19420
  type: object
18839
19421
  additionalProperties: false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.149.0",
3
+ "version": "2.151.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",