@celigo/api-specs 0.2.1

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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/dist/account.yml +592 -0
  4. package/dist/agent.yml +908 -0
  5. package/dist/ai-agent.yml +5471 -0
  6. package/dist/api.yml +4140 -0
  7. package/dist/apim.yml +1286 -0
  8. package/dist/asynchelper.yml +3391 -0
  9. package/dist/audit.yml +2006 -0
  10. package/dist/connection.yml +8665 -0
  11. package/dist/connector.yml +1406 -0
  12. package/dist/ediprofile.yml +911 -0
  13. package/dist/editransaction.yml +1210 -0
  14. package/dist/enduser.yml +1724 -0
  15. package/dist/environment.yml +568 -0
  16. package/dist/eventreport.yml +692 -0
  17. package/dist/export.yml +17610 -0
  18. package/dist/filedefinition.yml +1396 -0
  19. package/dist/filestorage.yml +3102 -0
  20. package/dist/flow.yml +7928 -0
  21. package/dist/guardrail.yml +2763 -0
  22. package/dist/httpconnector.yml +2277 -0
  23. package/dist/httpconnectorendpoint.yml +722 -0
  24. package/dist/httpconnectorresource.yml +396 -0
  25. package/dist/iclient.yml +4452 -0
  26. package/dist/import.yml +15381 -0
  27. package/dist/integration.yml +4406 -0
  28. package/dist/job.yml +2014 -0
  29. package/dist/lookupcache.yml +1325 -0
  30. package/dist/marketplace.yml +685 -0
  31. package/dist/mcp-oauth-provider.yml +590 -0
  32. package/dist/mcp-server.yml +2656 -0
  33. package/dist/notification.yml +488 -0
  34. package/dist/processor.yml +1253 -0
  35. package/dist/profile.yml +455 -0
  36. package/dist/recyclebin.yml +768 -0
  37. package/dist/script.yml +1128 -0
  38. package/dist/stack.yml +1291 -0
  39. package/dist/state.yml +894 -0
  40. package/dist/subscription.yml +1405 -0
  41. package/dist/sync.yml +4857 -0
  42. package/dist/tag.yml +553 -0
  43. package/dist/template.yml +897 -0
  44. package/dist/tool.yml +33656 -0
  45. package/dist/tradingpartnerconnector.yml +1490 -0
  46. package/dist/user.yml +831 -0
  47. package/package.json +41 -0
  48. package/schemas.json +8420 -0
@@ -0,0 +1,1724 @@
1
+ openapi: 3.2.0
2
+ info:
3
+ version: 1.0.0
4
+ title: End Users
5
+ description: API for managing end users — MCP-only consumers of an account — and the groups and roles that control their access.
6
+ servers:
7
+ - url: https://api.integrator.io
8
+ description: Production (US / default region)
9
+ - url: https://api.eu.integrator.io
10
+ description: Production (EU region)
11
+ - url: https://api.au.integrator.io
12
+ description: Production (AU region)
13
+ - url: https://api.ca.integrator.io
14
+ description: Production (CA region)
15
+ security:
16
+ - bearerAuth: []
17
+ tags:
18
+ - name: End Users
19
+ description: |-
20
+ End users are people who consume an account's MCP servers without
21
+ getting workspace access — they sign in through MCP OAuth, optionally
22
+ via an external IdP. Use these endpoints to invite end users (singly or
23
+ in bulk), list and revoke them, and inspect the effective MCP tool
24
+ access compiled from their grants, groups, and roles.
25
+
26
+ ## End user schema
27
+
28
+ {% openapi-schemas spec="enduser" schemas="EndUser" grouped="true" %}
29
+ - name: Groups
30
+ description: |-
31
+ Groups bundle roles and resource grants so end-user access can be
32
+ managed collectively. End users receive a group's access through
33
+ membership, added manually or synced from an identity provider's group
34
+ claims.
35
+
36
+ ## Group schema
37
+
38
+ {% openapi-schemas spec="enduser" schemas="Group" grouped="true" %}
39
+ - name: Roles
40
+ description: |-
41
+ Roles are named, reusable bundles of resource grants. Assign them to
42
+ end users directly or pin them to groups; their grants are compiled
43
+ into each member's effective access.
44
+
45
+ ## Role schema
46
+
47
+ {% openapi-schemas spec="enduser" schemas="Role" grouped="true" %}
48
+ paths:
49
+ /v1/endusers:
50
+ get:
51
+ x-internal: false
52
+ summary: List end users
53
+ operationId: listEndUsers
54
+ tags:
55
+ - End Users
56
+ description: |-
57
+ Returns the account's end users with identity fields (`email`, `name`,
58
+ `lastSignIn`) joined from each user record, plus a computed
59
+ `hasWorkspaceShare` flag indicating whether the same person also holds a
60
+ workspace access record. Requires account owner or administrator access.
61
+ parameters:
62
+ - name: provisionedBy
63
+ in: query
64
+ required: false
65
+ description: Return only end users created by the given provisioning source.
66
+ schema:
67
+ type: string
68
+ enum:
69
+ - invite
70
+ - jit
71
+ x-enumDescriptions:
72
+ invite: Created through an explicit invite (or by migration from a workspace user)
73
+ jit: Provisioned just-in-time on first sign-in through an external IdP
74
+ responses:
75
+ '200':
76
+ description: List of end users.
77
+ content:
78
+ application/json:
79
+ schema:
80
+ type: array
81
+ items:
82
+ $ref: '#/components/schemas/EndUser'
83
+ examples:
84
+ default:
85
+ value:
86
+ - _id: 68b1c2d3e4f5a6b7c8d9e0f1
87
+ _userId: 5f8d43a1b9e5a80011a35f2c
88
+ _sharedWithUserId: 624774a6a7574d3ed9f9a5cc
89
+ userType: end-user
90
+ provisionedBy: invite
91
+ accepted: true
92
+ dismissed: false
93
+ disabled: false
94
+ groupMemberships:
95
+ - _groupId: 68a1b2c3d4e5f6a7b8c9d0e1
96
+ source: manual
97
+ resourceGrants:
98
+ - resourceType: mcpServer
99
+ _resourceId: 6a1b2c3d4e5f6a7b8c9d0e1f
100
+ capabilities:
101
+ - tool:all
102
+ _roleIds: []
103
+ email: enduser@example.com
104
+ name: Ana Enduser
105
+ lastSignIn: '2026-08-02T17:02:59.370Z'
106
+ hasWorkspaceShare: false
107
+ createdAt: '2026-07-01T09:15:32Z'
108
+ lastModified: '2026-08-15T14:30:15Z'
109
+ '400':
110
+ $ref: '#/components/responses/400-bad-request'
111
+ '401':
112
+ $ref: '#/components/responses/401-unauthorized'
113
+ '403':
114
+ $ref: '#/components/responses/403-forbidden'
115
+ /v1/endusers/invite:
116
+ post:
117
+ x-internal: false
118
+ summary: Invite an end user
119
+ operationId: inviteEndUser
120
+ tags:
121
+ - End Users
122
+ description: |-
123
+ Finds or creates the user by email, creates an end-user access record,
124
+ applies the requested group memberships and direct grants, and sends an
125
+ invite email. Account owners cannot be invited as end users. Requires
126
+ account owner or administrator access.
127
+ requestBody:
128
+ required: true
129
+ content:
130
+ application/json:
131
+ schema:
132
+ $ref: '#/components/schemas/InviteRequest'
133
+ examples:
134
+ minimal:
135
+ summary: Invite by email only
136
+ value:
137
+ email: enduser@example.com
138
+ withAccess:
139
+ summary: Invite with groups and a direct grant
140
+ value:
141
+ email: enduser@example.com
142
+ name: Ana Enduser
143
+ groupIds:
144
+ - 68a1b2c3d4e5f6a7b8c9d0e1
145
+ directGrants:
146
+ - resourceType: mcpServer
147
+ _resourceId: 6a1b2c3d4e5f6a7b8c9d0e1f
148
+ capabilities:
149
+ - tool:all
150
+ responses:
151
+ '201':
152
+ description: End user invited.
153
+ content:
154
+ application/json:
155
+ schema:
156
+ $ref: '#/components/schemas/InviteResponse'
157
+ examples:
158
+ default:
159
+ value:
160
+ _userId: 5f8d43a1b9e5a80011a35f2c
161
+ _ashareId: 68b1c2d3e4f5a6b7c8d9e0f1
162
+ status: invited
163
+ '400':
164
+ $ref: '#/components/responses/400-bad-request'
165
+ '401':
166
+ $ref: '#/components/responses/401-unauthorized'
167
+ '403':
168
+ $ref: '#/components/responses/403-forbidden'
169
+ '409':
170
+ description: |-
171
+ An end-user record already exists for this user in the account.
172
+ Error code: `enduser_ashare_exists`.
173
+ content:
174
+ application/json:
175
+ schema:
176
+ $ref: '#/components/schemas/Error'
177
+ '422':
178
+ $ref: '#/components/responses/422-unprocessable-entity'
179
+ /v1/endusers/invite/bulk:
180
+ post:
181
+ x-internal: false
182
+ summary: Invite end users in bulk
183
+ operationId: inviteEndUsersBulk
184
+ tags:
185
+ - End Users
186
+ description: |-
187
+ Invites 1–100 end users in one request, applying the same optional
188
+ `groupIds` and `directGrants` to every invite. Processing is sequential
189
+ and partial-success: a failed item never aborts the batch, so the
190
+ response is HTTP 200 with a per-email result even when some items fail.
191
+ Only top-level structural errors (missing or non-array `emails`, more
192
+ than 100 emails, non-array `groupIds`/`directGrants`) return 400.
193
+ Requires account owner or administrator access.
194
+ requestBody:
195
+ required: true
196
+ content:
197
+ application/json:
198
+ schema:
199
+ $ref: '#/components/schemas/BulkInviteRequest'
200
+ examples:
201
+ default:
202
+ value:
203
+ emails:
204
+ - a@example.com
205
+ - b@example.com
206
+ groupIds:
207
+ - 68a1b2c3d4e5f6a7b8c9d0e1
208
+ responses:
209
+ '200':
210
+ description: Batch processed, including partial success. One result per input email.
211
+ content:
212
+ application/json:
213
+ schema:
214
+ $ref: '#/components/schemas/BulkInviteResponse'
215
+ examples:
216
+ partialSuccess:
217
+ value:
218
+ summary:
219
+ total: 2
220
+ invited: 1
221
+ failed: 1
222
+ skipped: 0
223
+ results:
224
+ - email: a@example.com
225
+ status: invited
226
+ _userId: 5f8d43a1b9e5a80011a35f2c
227
+ _ashareId: 68b1c2d3e4f5a6b7c8d9e0f1
228
+ - email: b@example.com
229
+ status: failed
230
+ code: enduser_ashare_exists
231
+ '400':
232
+ $ref: '#/components/responses/400-bad-request'
233
+ '401':
234
+ $ref: '#/components/responses/401-unauthorized'
235
+ '403':
236
+ $ref: '#/components/responses/403-forbidden'
237
+ /v1/endusers/{_ashareId}:
238
+ delete:
239
+ x-internal: false
240
+ summary: Revoke an end user
241
+ operationId: revokeEndUser
242
+ tags:
243
+ - End Users
244
+ description: |-
245
+ Soft-deletes the end-user access record and clears its group
246
+ memberships. Any workspace access record the same person holds is
247
+ unaffected. Requires account owner or administrator access.
248
+ parameters:
249
+ - name: _ashareId
250
+ in: path
251
+ required: true
252
+ description: End-user access-record id (from the end users list).
253
+ schema:
254
+ type: string
255
+ format: objectId
256
+ responses:
257
+ '204':
258
+ description: End user revoked.
259
+ '400':
260
+ $ref: '#/components/responses/400-bad-request'
261
+ '401':
262
+ $ref: '#/components/responses/401-unauthorized'
263
+ '403':
264
+ $ref: '#/components/responses/403-forbidden'
265
+ '404':
266
+ $ref: '#/components/responses/404-not-found'
267
+ /v1/endusers/{_ashareId}/effective-access:
268
+ get:
269
+ x-internal: false
270
+ summary: Get an end user's effective access
271
+ operationId: getEndUserEffectiveAccess
272
+ tags:
273
+ - End Users
274
+ description: |-
275
+ Compiles the end user's effective MCP server tool access with source
276
+ attribution — the union of direct grants, group grants, role grants, and
277
+ permission sets. The result is recomputed on every request rather than
278
+ cached. Requires account owner or administrator access.
279
+ parameters:
280
+ - name: _ashareId
281
+ in: path
282
+ required: true
283
+ description: End-user access-record id (from the end users list).
284
+ schema:
285
+ type: string
286
+ format: objectId
287
+ responses:
288
+ '200':
289
+ description: Compiled effective access with attribution.
290
+ content:
291
+ application/json:
292
+ schema:
293
+ $ref: '#/components/schemas/EffectiveAccess'
294
+ examples:
295
+ default:
296
+ value:
297
+ _ashareId: 68b1c2d3e4f5a6b7c8d9e0f1
298
+ _userId: 624774a6a7574d3ed9f9a5cc
299
+ userType: end-user
300
+ provisionedBy: invite
301
+ groups:
302
+ - _id: 68a1b2c3d4e5f6a7b8c9d0e1
303
+ name: Finance
304
+ source: manual
305
+ roles:
306
+ - _id: 68c1d2e3f4a5b6c7d8e9f0a1
307
+ name: Finance tools
308
+ via:
309
+ - group:Finance
310
+ access:
311
+ - resourceType: mcpServer
312
+ _resourceId: 6a1b2c3d4e5f6a7b8c9d0e1f
313
+ resourceName: Finance MCP
314
+ tools:
315
+ - _id: 6b2c3d4e5f6a7b8c9d0e1f2a
316
+ name: lookup-invoice
317
+ via:
318
+ - role:Finance tools (group:Finance)
319
+ deniedTools: []
320
+ '400':
321
+ $ref: '#/components/responses/400-bad-request'
322
+ '401':
323
+ $ref: '#/components/responses/401-unauthorized'
324
+ '403':
325
+ $ref: '#/components/responses/403-forbidden'
326
+ '404':
327
+ $ref: '#/components/responses/404-not-found'
328
+ /v1/groups:
329
+ get:
330
+ x-internal: false
331
+ summary: List groups
332
+ operationId: listGroups
333
+ tags:
334
+ - Groups
335
+ description: |-
336
+ Returns all active groups in the account. Requires account owner or
337
+ administrator access.
338
+ responses:
339
+ '200':
340
+ description: List of groups.
341
+ content:
342
+ application/json:
343
+ schema:
344
+ type: array
345
+ items:
346
+ $ref: '#/components/schemas/Group'
347
+ examples:
348
+ default:
349
+ value:
350
+ - _id: 68a1b2c3d4e5f6a7b8c9d0e1
351
+ _userId: 5f8d43a1b9e5a80011a35f2c
352
+ name: Finance
353
+ description: Finance department end users
354
+ intendedFor:
355
+ - end-user
356
+ _roleIds:
357
+ - 68c1d2e3f4a5b6c7d8e9f0a1
358
+ resourceGrants: []
359
+ hasIdpSyncedMembers: false
360
+ createdAt: '2026-07-01T09:15:32Z'
361
+ lastModified: '2026-08-15T14:30:15Z'
362
+ '204':
363
+ description: No groups exist in the account.
364
+ '400':
365
+ $ref: '#/components/responses/400-bad-request'
366
+ '401':
367
+ $ref: '#/components/responses/401-unauthorized'
368
+ '403':
369
+ $ref: '#/components/responses/403-forbidden'
370
+ post:
371
+ x-internal: false
372
+ summary: Create a group
373
+ operationId: createGroup
374
+ tags:
375
+ - Groups
376
+ description: |-
377
+ Creates a group for end-user access management. Group names must be
378
+ unique within the account (case-insensitive), and any `_roleIds` or
379
+ `resourceGrants._resourceId` values must reference resources owned by
380
+ the same account. Requires account owner or administrator access.
381
+ requestBody:
382
+ required: true
383
+ content:
384
+ application/json:
385
+ schema:
386
+ $ref: '#/components/schemas/GroupRequest'
387
+ examples:
388
+ minimal:
389
+ summary: Name only
390
+ value:
391
+ name: Finance
392
+ withAccess:
393
+ summary: With a pinned role and a direct grant
394
+ value:
395
+ name: Finance
396
+ description: Finance department end users
397
+ intendedFor:
398
+ - end-user
399
+ _roleIds:
400
+ - 68c1d2e3f4a5b6c7d8e9f0a1
401
+ resourceGrants:
402
+ - resourceType: mcpServer
403
+ _resourceId: 6a1b2c3d4e5f6a7b8c9d0e1f
404
+ capabilities:
405
+ - tool:all
406
+ responses:
407
+ '201':
408
+ description: Group created.
409
+ content:
410
+ application/json:
411
+ schema:
412
+ $ref: '#/components/schemas/Group'
413
+ examples:
414
+ default:
415
+ value:
416
+ _id: 68a1b2c3d4e5f6a7b8c9d0e1
417
+ _userId: 5f8d43a1b9e5a80011a35f2c
418
+ name: Finance
419
+ description: Finance department end users
420
+ intendedFor:
421
+ - end-user
422
+ _roleIds:
423
+ - 68c1d2e3f4a5b6c7d8e9f0a1
424
+ resourceGrants: []
425
+ hasIdpSyncedMembers: false
426
+ createdAt: '2026-07-01T09:15:32Z'
427
+ lastModified: '2026-07-01T09:15:32Z'
428
+ '400':
429
+ $ref: '#/components/responses/400-bad-request'
430
+ '401':
431
+ $ref: '#/components/responses/401-unauthorized'
432
+ '403':
433
+ $ref: '#/components/responses/403-forbidden'
434
+ '409':
435
+ description: A group with this name already exists in the account.
436
+ content:
437
+ application/json:
438
+ schema:
439
+ $ref: '#/components/schemas/Error'
440
+ '422':
441
+ $ref: '#/components/responses/422-unprocessable-entity'
442
+ /v1/groups/{_id}:
443
+ get:
444
+ x-internal: false
445
+ summary: Get a group
446
+ operationId: getGroup
447
+ tags:
448
+ - Groups
449
+ description: Retrieves a single group by ID.
450
+ parameters:
451
+ - name: _id
452
+ in: path
453
+ required: true
454
+ description: Group ID.
455
+ schema:
456
+ type: string
457
+ format: objectId
458
+ x-celigo-refModel: groups
459
+ responses:
460
+ '200':
461
+ description: Group details.
462
+ content:
463
+ application/json:
464
+ schema:
465
+ $ref: '#/components/schemas/Group'
466
+ '400':
467
+ $ref: '#/components/responses/400-bad-request'
468
+ '401':
469
+ $ref: '#/components/responses/401-unauthorized'
470
+ '403':
471
+ $ref: '#/components/responses/403-forbidden'
472
+ '404':
473
+ $ref: '#/components/responses/404-not-found'
474
+ put:
475
+ x-internal: false
476
+ summary: Update a group
477
+ operationId: updateGroup
478
+ tags:
479
+ - Groups
480
+ description: |-
481
+ Replaces the group's writable fields. Prefer resending the complete
482
+ object — omitted fields are not preserved. Requires account owner or
483
+ administrator access.
484
+ parameters:
485
+ - name: _id
486
+ in: path
487
+ required: true
488
+ description: Group ID.
489
+ schema:
490
+ type: string
491
+ format: objectId
492
+ x-celigo-refModel: groups
493
+ requestBody:
494
+ required: true
495
+ content:
496
+ application/json:
497
+ schema:
498
+ $ref: '#/components/schemas/GroupRequest'
499
+ examples:
500
+ rename:
501
+ summary: Rename the group
502
+ value:
503
+ name: Finance EMEA
504
+ responses:
505
+ '200':
506
+ description: Updated group.
507
+ content:
508
+ application/json:
509
+ schema:
510
+ $ref: '#/components/schemas/Group'
511
+ '400':
512
+ $ref: '#/components/responses/400-bad-request'
513
+ '401':
514
+ $ref: '#/components/responses/401-unauthorized'
515
+ '403':
516
+ $ref: '#/components/responses/403-forbidden'
517
+ '404':
518
+ $ref: '#/components/responses/404-not-found'
519
+ '409':
520
+ description: A group with this name already exists in the account.
521
+ content:
522
+ application/json:
523
+ schema:
524
+ $ref: '#/components/schemas/Error'
525
+ '422':
526
+ $ref: '#/components/responses/422-unprocessable-entity'
527
+ delete:
528
+ x-internal: false
529
+ summary: Delete a group
530
+ operationId: deleteGroup
531
+ tags:
532
+ - Groups
533
+ description: |-
534
+ Soft-deletes the group and removes the corresponding membership entry
535
+ from every end user in the account. Requires account owner or
536
+ administrator access.
537
+ parameters:
538
+ - name: _id
539
+ in: path
540
+ required: true
541
+ description: Group ID.
542
+ schema:
543
+ type: string
544
+ format: objectId
545
+ x-celigo-refModel: groups
546
+ responses:
547
+ '204':
548
+ description: Group deleted.
549
+ '400':
550
+ $ref: '#/components/responses/400-bad-request'
551
+ '401':
552
+ $ref: '#/components/responses/401-unauthorized'
553
+ '403':
554
+ $ref: '#/components/responses/403-forbidden'
555
+ '404':
556
+ $ref: '#/components/responses/404-not-found'
557
+ /v1/groups/{_groupId}/members:
558
+ post:
559
+ x-internal: false
560
+ summary: Add end users to a group
561
+ operationId: addGroupMembers
562
+ tags:
563
+ - Groups
564
+ description: |-
565
+ Bulk-adds up to 100 end users to the group as manual memberships. The
566
+ operation is idempotent for end users already in the group. Requires
567
+ account owner or administrator access.
568
+ parameters:
569
+ - name: _groupId
570
+ in: path
571
+ required: true
572
+ description: Group ID.
573
+ schema:
574
+ type: string
575
+ format: objectId
576
+ x-celigo-refModel: groups
577
+ requestBody:
578
+ required: true
579
+ content:
580
+ application/json:
581
+ schema:
582
+ $ref: '#/components/schemas/GroupMembersRequest'
583
+ examples:
584
+ default:
585
+ value:
586
+ _ashareIds:
587
+ - 68b1c2d3e4f5a6b7c8d9e0f1
588
+ responses:
589
+ '200':
590
+ description: Members added.
591
+ content:
592
+ application/json:
593
+ schema:
594
+ $ref: '#/components/schemas/GroupMembersResponse'
595
+ examples:
596
+ default:
597
+ value:
598
+ updated: 1
599
+ '400':
600
+ $ref: '#/components/responses/400-bad-request'
601
+ '401':
602
+ $ref: '#/components/responses/401-unauthorized'
603
+ '403':
604
+ $ref: '#/components/responses/403-forbidden'
605
+ '404':
606
+ $ref: '#/components/responses/404-not-found'
607
+ /v1/groups/{_groupId}/members/remove:
608
+ post:
609
+ x-internal: false
610
+ summary: Remove end users from a group
611
+ operationId: removeGroupMembers
612
+ tags:
613
+ - Groups
614
+ description: |-
615
+ Bulk-removes manual memberships from the group. Only manual memberships
616
+ can be removed this way — attempting to remove an IdP-synced membership
617
+ returns 409; change the IdP group mapping instead. Uses POST rather than
618
+ DELETE so the request body survives proxies and CDNs. Requires account
619
+ owner or administrator access.
620
+ parameters:
621
+ - name: _groupId
622
+ in: path
623
+ required: true
624
+ description: Group ID.
625
+ schema:
626
+ type: string
627
+ format: objectId
628
+ x-celigo-refModel: groups
629
+ requestBody:
630
+ required: true
631
+ content:
632
+ application/json:
633
+ schema:
634
+ $ref: '#/components/schemas/GroupMembersRequest'
635
+ examples:
636
+ default:
637
+ value:
638
+ _ashareIds:
639
+ - 68b1c2d3e4f5a6b7c8d9e0f1
640
+ responses:
641
+ '200':
642
+ description: Members removed.
643
+ content:
644
+ application/json:
645
+ schema:
646
+ $ref: '#/components/schemas/GroupMembersResponse'
647
+ examples:
648
+ default:
649
+ value:
650
+ updated: 1
651
+ '400':
652
+ $ref: '#/components/responses/400-bad-request'
653
+ '401':
654
+ $ref: '#/components/responses/401-unauthorized'
655
+ '403':
656
+ $ref: '#/components/responses/403-forbidden'
657
+ '404':
658
+ $ref: '#/components/responses/404-not-found'
659
+ '409':
660
+ description: |-
661
+ One or more of the memberships is IdP-synced and cannot be removed
662
+ manually. Error code: `conflict`.
663
+ content:
664
+ application/json:
665
+ schema:
666
+ $ref: '#/components/schemas/Error'
667
+ /v1/roles:
668
+ get:
669
+ x-internal: false
670
+ summary: List roles
671
+ operationId: listRoles
672
+ tags:
673
+ - Roles
674
+ description: |-
675
+ Returns all active roles in the account. Requires account owner or
676
+ administrator access.
677
+ responses:
678
+ '200':
679
+ description: List of roles.
680
+ content:
681
+ application/json:
682
+ schema:
683
+ type: array
684
+ items:
685
+ $ref: '#/components/schemas/Role'
686
+ examples:
687
+ default:
688
+ value:
689
+ - _id: 68c1d2e3f4a5b6c7d8e9f0a1
690
+ _userId: 5f8d43a1b9e5a80011a35f2c
691
+ name: Finance tools
692
+ description: Read access to finance MCP tools
693
+ resourceGrants:
694
+ - resourceType: mcpServer
695
+ _resourceId: 6a1b2c3d4e5f6a7b8c9d0e1f
696
+ capabilities:
697
+ - pset:6c3d4e5f6a7b8c9d0e1f2a3b
698
+ createdAt: '2026-07-01T09:15:32Z'
699
+ lastModified: '2026-08-15T14:30:15Z'
700
+ '204':
701
+ description: No roles exist in the account.
702
+ '400':
703
+ $ref: '#/components/responses/400-bad-request'
704
+ '401':
705
+ $ref: '#/components/responses/401-unauthorized'
706
+ '403':
707
+ $ref: '#/components/responses/403-forbidden'
708
+ post:
709
+ x-internal: false
710
+ summary: Create a role
711
+ operationId: createRole
712
+ tags:
713
+ - Roles
714
+ description: |-
715
+ Creates a role. Role names must be unique within the account
716
+ (case-insensitive), and `resourceGrants._resourceId` values must
717
+ reference resources owned by the same account. Requires account owner or
718
+ administrator access.
719
+ requestBody:
720
+ required: true
721
+ content:
722
+ application/json:
723
+ schema:
724
+ $ref: '#/components/schemas/RoleRequest'
725
+ examples:
726
+ default:
727
+ value:
728
+ name: Finance tools
729
+ description: Read access to finance MCP tools
730
+ resourceGrants:
731
+ - resourceType: mcpServer
732
+ _resourceId: 6a1b2c3d4e5f6a7b8c9d0e1f
733
+ capabilities:
734
+ - pset:6c3d4e5f6a7b8c9d0e1f2a3b
735
+ responses:
736
+ '201':
737
+ description: Role created.
738
+ content:
739
+ application/json:
740
+ schema:
741
+ $ref: '#/components/schemas/Role'
742
+ examples:
743
+ default:
744
+ value:
745
+ _id: 68c1d2e3f4a5b6c7d8e9f0a1
746
+ _userId: 5f8d43a1b9e5a80011a35f2c
747
+ name: Finance tools
748
+ description: Read access to finance MCP tools
749
+ resourceGrants:
750
+ - resourceType: mcpServer
751
+ _resourceId: 6a1b2c3d4e5f6a7b8c9d0e1f
752
+ capabilities:
753
+ - pset:6c3d4e5f6a7b8c9d0e1f2a3b
754
+ createdAt: '2026-07-01T09:15:32Z'
755
+ lastModified: '2026-07-01T09:15:32Z'
756
+ '400':
757
+ $ref: '#/components/responses/400-bad-request'
758
+ '401':
759
+ $ref: '#/components/responses/401-unauthorized'
760
+ '403':
761
+ $ref: '#/components/responses/403-forbidden'
762
+ '409':
763
+ description: A role with this name already exists in the account.
764
+ content:
765
+ application/json:
766
+ schema:
767
+ $ref: '#/components/schemas/Error'
768
+ '422':
769
+ $ref: '#/components/responses/422-unprocessable-entity'
770
+ /v1/roles/{_id}:
771
+ get:
772
+ x-internal: false
773
+ summary: Get a role
774
+ operationId: getRole
775
+ tags:
776
+ - Roles
777
+ description: Retrieves a single role by ID.
778
+ parameters:
779
+ - name: _id
780
+ in: path
781
+ required: true
782
+ description: Role ID.
783
+ schema:
784
+ type: string
785
+ format: objectId
786
+ x-celigo-refModel: roles
787
+ responses:
788
+ '200':
789
+ description: Role details.
790
+ content:
791
+ application/json:
792
+ schema:
793
+ $ref: '#/components/schemas/Role'
794
+ '400':
795
+ $ref: '#/components/responses/400-bad-request'
796
+ '401':
797
+ $ref: '#/components/responses/401-unauthorized'
798
+ '403':
799
+ $ref: '#/components/responses/403-forbidden'
800
+ '404':
801
+ $ref: '#/components/responses/404-not-found'
802
+ put:
803
+ x-internal: false
804
+ summary: Update a role
805
+ operationId: updateRole
806
+ tags:
807
+ - Roles
808
+ description: |-
809
+ Replaces the role's writable fields. Prefer resending the complete
810
+ object — omitted fields are not preserved. Requires account owner or
811
+ administrator access.
812
+ parameters:
813
+ - name: _id
814
+ in: path
815
+ required: true
816
+ description: Role ID.
817
+ schema:
818
+ type: string
819
+ format: objectId
820
+ x-celigo-refModel: roles
821
+ requestBody:
822
+ required: true
823
+ content:
824
+ application/json:
825
+ schema:
826
+ $ref: '#/components/schemas/RoleRequest'
827
+ examples:
828
+ updateDescription:
829
+ summary: Update the description
830
+ value:
831
+ name: Finance tools
832
+ description: Updated description
833
+ responses:
834
+ '200':
835
+ description: Updated role.
836
+ content:
837
+ application/json:
838
+ schema:
839
+ $ref: '#/components/schemas/Role'
840
+ '400':
841
+ $ref: '#/components/responses/400-bad-request'
842
+ '401':
843
+ $ref: '#/components/responses/401-unauthorized'
844
+ '403':
845
+ $ref: '#/components/responses/403-forbidden'
846
+ '404':
847
+ $ref: '#/components/responses/404-not-found'
848
+ '409':
849
+ description: A role with this name already exists in the account.
850
+ content:
851
+ application/json:
852
+ schema:
853
+ $ref: '#/components/schemas/Error'
854
+ '422':
855
+ $ref: '#/components/responses/422-unprocessable-entity'
856
+ delete:
857
+ x-internal: false
858
+ summary: Delete a role
859
+ operationId: deleteRole
860
+ tags:
861
+ - Roles
862
+ description: |-
863
+ Soft-deletes the role and removes it from the `_roleIds` of every group
864
+ in the account. Requires account owner or administrator access.
865
+ parameters:
866
+ - name: _id
867
+ in: path
868
+ required: true
869
+ description: Role ID.
870
+ schema:
871
+ type: string
872
+ format: objectId
873
+ x-celigo-refModel: roles
874
+ responses:
875
+ '204':
876
+ description: Role deleted.
877
+ '400':
878
+ $ref: '#/components/responses/400-bad-request'
879
+ '401':
880
+ $ref: '#/components/responses/401-unauthorized'
881
+ '403':
882
+ $ref: '#/components/responses/403-forbidden'
883
+ '404':
884
+ $ref: '#/components/responses/404-not-found'
885
+ components:
886
+ securitySchemes:
887
+ bearerAuth:
888
+ type: http
889
+ scheme: bearer
890
+ schemas:
891
+ GroupMembership:
892
+ type: object
893
+ description: An end user's membership in a group, with the source that created it.
894
+ properties:
895
+ _groupId:
896
+ type: string
897
+ format: objectId
898
+ x-celigo-refModel: groups
899
+ examples:
900
+ - 68a1b2c3d4e5f6a7b8c9d0e1
901
+ description: Group the end user belongs to.
902
+ source:
903
+ type: string
904
+ enum:
905
+ - manual
906
+ - idp
907
+ x-enumDescriptions:
908
+ manual: Membership was added by an owner or administrator (invite or group members API)
909
+ idp: Membership is synced from the identity provider's group claims
910
+ description: |-
911
+ How the membership was created. IdP-synced memberships cannot be
912
+ removed through the group members API — change the IdP group mapping
913
+ instead.
914
+ ResourceGrant:
915
+ type: object
916
+ description: |-
917
+ Grants access to a resource (currently MCP servers only). A grant names
918
+ the resource, or applies as a wildcard across all resources of the type,
919
+ and lists the capabilities granted on it.
920
+ required:
921
+ - resourceType
922
+ - capabilities
923
+ properties:
924
+ resourceType:
925
+ type: string
926
+ enum:
927
+ - mcpServer
928
+ x-enumDescriptions:
929
+ mcpServer: Grants access to an MCP server and its tools, APIs, or permission sets.
930
+ description: Resource type this grant applies to.
931
+ _resourceId:
932
+ type:
933
+ - string
934
+ - 'null'
935
+ format: objectId
936
+ x-celigo-refModel: mcpservers
937
+ examples:
938
+ - 6a1b2c3d4e5f6a7b8c9d0e1f
939
+ description: |-
940
+ MCP server this grant applies to. Omit or set to null for a wildcard
941
+ grant across all MCP servers in the account.
942
+ capabilities:
943
+ type: array
944
+ minItems: 1
945
+ description: Capabilities granted on the target resource.
946
+ items:
947
+ type: string
948
+ description: |-
949
+ Capability string. For `mcpServer` grants: `tool:all`,
950
+ `tool:<24-char-hex-id>` (an IO tool `_toolId` or attached prompt `_id`),
951
+ `api:all`, `api:<24-char-hex-apiId>`, or
952
+ `pset:<24-char-hex-permissionSetId>` referencing a permission set
953
+ defined on the target MCP server.
954
+ examples:
955
+ - tool:all
956
+ EndUser:
957
+ type: object
958
+ description: |-
959
+ An end user's access record in the account. End users authenticate through
960
+ MCP OAuth (optionally via an external IdP) to use MCP servers; they do not
961
+ get workspace access. The `_id` is the access-record id, not the user's own
962
+ id — the user's identity is in `_sharedWithUserId`.
963
+ required:
964
+ - _id
965
+ properties:
966
+ _id:
967
+ type: string
968
+ format: objectId
969
+ readOnly: true
970
+ examples:
971
+ - 68b1c2d3e4f5a6b7c8d9e0f1
972
+ description: Access-record id for this end user in the account.
973
+ _userId:
974
+ type: string
975
+ format: objectId
976
+ readOnly: true
977
+ x-celigo-refModel: users
978
+ examples:
979
+ - 5f8d43a1b9e5a80011a35f2c
980
+ description: Account owner's user id.
981
+ _sharedWithUserId:
982
+ type: string
983
+ format: objectId
984
+ readOnly: true
985
+ x-celigo-refModel: users
986
+ examples:
987
+ - 624774a6a7574d3ed9f9a5cc
988
+ description: The end user's own user id.
989
+ userType:
990
+ type: string
991
+ enum:
992
+ - end-user
993
+ x-enumDescriptions:
994
+ end-user: MCP-only access record, separate from workspace user access
995
+ description: Distinguishes end-user access records from workspace access records.
996
+ provisionedBy:
997
+ type: string
998
+ enum:
999
+ - invite
1000
+ - jit
1001
+ x-enumDescriptions:
1002
+ invite: Created through an explicit invite (or by migration from a workspace user)
1003
+ jit: Provisioned just-in-time on first sign-in through an external IdP
1004
+ description: How this end-user record was created.
1005
+ accepted:
1006
+ type: boolean
1007
+ description: When true, the end user has completed invite setup (or was JIT-provisioned).
1008
+ dismissed:
1009
+ type: boolean
1010
+ description: When true, the end user has declined the invitation.
1011
+ disabled:
1012
+ type: boolean
1013
+ description: When true, the end user's access is suspended without deleting the record.
1014
+ groupMemberships:
1015
+ type: array
1016
+ description: Groups this end user belongs to, with the source of each membership.
1017
+ items:
1018
+ $ref: '#/components/schemas/GroupMembership'
1019
+ resourceGrants:
1020
+ type: array
1021
+ description: Direct resource grants on this end user, in addition to any group- or role-derived access.
1022
+ items:
1023
+ $ref: '#/components/schemas/ResourceGrant'
1024
+ _roleIds:
1025
+ type: array
1026
+ description: Roles assigned directly to this end user.
1027
+ items:
1028
+ type: string
1029
+ format: objectId
1030
+ x-celigo-refModel: roles
1031
+ email:
1032
+ type: string
1033
+ format: email
1034
+ readOnly: true
1035
+ examples:
1036
+ - enduser@example.com
1037
+ description: Email address of the end user, joined from the user record.
1038
+ name:
1039
+ type: string
1040
+ readOnly: true
1041
+ examples:
1042
+ - Ana Enduser
1043
+ description: Display name of the end user, joined from the user record.
1044
+ lastSignIn:
1045
+ type:
1046
+ - string
1047
+ - 'null'
1048
+ format: date-time
1049
+ readOnly: true
1050
+ examples:
1051
+ - '2026-08-02T17:02:59.370Z'
1052
+ description: When the end user last signed in. Null when they have never signed in.
1053
+ hasWorkspaceShare:
1054
+ type: boolean
1055
+ readOnly: true
1056
+ description: When true, the same person also has an active workspace access record on this account.
1057
+ createdAt:
1058
+ type: string
1059
+ format: date-time
1060
+ readOnly: true
1061
+ examples:
1062
+ - '2026-07-01T09:15:32Z'
1063
+ description: Timestamp when the end-user record was created.
1064
+ lastModified:
1065
+ type: string
1066
+ format: date-time
1067
+ readOnly: true
1068
+ examples:
1069
+ - '2026-08-15T14:30:15Z'
1070
+ description: Timestamp when the end-user record was last updated.
1071
+ Error:
1072
+ type: object
1073
+ description: Standard error response envelope returned by integrator.io APIs.
1074
+ properties:
1075
+ errors:
1076
+ type: array
1077
+ description: List of errors that occurred while processing the request.
1078
+ items:
1079
+ type: object
1080
+ properties:
1081
+ code:
1082
+ oneOf:
1083
+ - type: string
1084
+ - type: integer
1085
+ description: |-
1086
+ Machine-readable error code. Usually a string like
1087
+ `invalid_ref`, `missing_required_field`, or `unauthorized`;
1088
+ may be an **integer** when the error mirrors an upstream HTTP
1089
+ status (e.g. `500`) — most commonly returned by connection-ping
1090
+ and adaptor-proxy responses.
1091
+ message:
1092
+ type: string
1093
+ description: Human-readable description of the error.
1094
+ field:
1095
+ type: string
1096
+ description: |-
1097
+ Optional pointer to the document field that caused the error.
1098
+ Used by structural validation errors (`missing_required_field`,
1099
+ `invalid_ref`) to indicate which field is at fault
1100
+ (e.g. `_id`, `type`, `http.baseURI`).
1101
+ source:
1102
+ type: string
1103
+ description: |-
1104
+ Optional origin layer for the error — e.g. `application` when
1105
+ the error came from the remote system the adaptor called,
1106
+ `connector` when the adaptor itself rejected the request.
1107
+ required:
1108
+ - message
1109
+ required:
1110
+ - errors
1111
+ InviteRequest:
1112
+ type: object
1113
+ description: Invitation details for a single end user.
1114
+ required:
1115
+ - email
1116
+ properties:
1117
+ email:
1118
+ type: string
1119
+ format: email
1120
+ examples:
1121
+ - enduser@example.com
1122
+ description: Email address to invite. Normalized to lowercase and trimmed.
1123
+ name:
1124
+ type: string
1125
+ examples:
1126
+ - Ana Enduser
1127
+ description: Display name for the invited user. Defaults to the email local-part when omitted.
1128
+ groupIds:
1129
+ type: array
1130
+ description: Groups to add the end user to as manual memberships.
1131
+ items:
1132
+ type: string
1133
+ format: objectId
1134
+ x-celigo-refModel: groups
1135
+ directGrants:
1136
+ type: array
1137
+ description: Direct resource grants placed on the new end-user record.
1138
+ items:
1139
+ $ref: '#/components/schemas/ResourceGrant'
1140
+ resourceGrants:
1141
+ type: array
1142
+ description: Alias for `directGrants`; send one or the other.
1143
+ items:
1144
+ $ref: '#/components/schemas/ResourceGrant'
1145
+ InviteResponse:
1146
+ type: object
1147
+ description: Result of a successful single invite.
1148
+ properties:
1149
+ _userId:
1150
+ type: string
1151
+ format: objectId
1152
+ x-celigo-refModel: users
1153
+ examples:
1154
+ - 5f8d43a1b9e5a80011a35f2c
1155
+ description: Account owner's user id.
1156
+ _ashareId:
1157
+ type: string
1158
+ format: objectId
1159
+ examples:
1160
+ - 68b1c2d3e4f5a6b7c8d9e0f1
1161
+ description: Access-record id of the newly created end user.
1162
+ status:
1163
+ type: string
1164
+ enum:
1165
+ - invited
1166
+ x-enumDescriptions:
1167
+ invited: The end user was created and the invite email was sent
1168
+ description: Outcome of the invite.
1169
+ BulkInviteRequest:
1170
+ type: object
1171
+ description: |-
1172
+ Batch invitation for up to 100 end users. The optional `groupIds` and
1173
+ `directGrants` are shared and applied identically to every invite in
1174
+ the batch.
1175
+ required:
1176
+ - emails
1177
+ properties:
1178
+ emails:
1179
+ type: array
1180
+ minItems: 1
1181
+ maxItems: 100
1182
+ description: Email addresses to invite. Normalized to lowercase, trimmed, and de-duplicated within the batch.
1183
+ items:
1184
+ type: string
1185
+ format: email
1186
+ groupIds:
1187
+ type: array
1188
+ description: Groups added as manual memberships on every created end-user record.
1189
+ items:
1190
+ type: string
1191
+ format: objectId
1192
+ x-celigo-refModel: groups
1193
+ directGrants:
1194
+ type: array
1195
+ description: Direct resource grants applied identically to every invite.
1196
+ items:
1197
+ $ref: '#/components/schemas/ResourceGrant'
1198
+ resourceGrants:
1199
+ type: array
1200
+ description: Alias for `directGrants`; send one or the other.
1201
+ items:
1202
+ $ref: '#/components/schemas/ResourceGrant'
1203
+ BulkInviteResponse:
1204
+ type: object
1205
+ description: |-
1206
+ Batch outcome with one result per input email, in input order. Processing
1207
+ is partial-success — a failed item never aborts the batch.
1208
+ required:
1209
+ - summary
1210
+ - results
1211
+ properties:
1212
+ summary:
1213
+ type: object
1214
+ description: Aggregate counts for the batch.
1215
+ required:
1216
+ - total
1217
+ - invited
1218
+ - failed
1219
+ - skipped
1220
+ properties:
1221
+ total:
1222
+ type: integer
1223
+ description: Number of input emails. Equals invited + failed + skipped.
1224
+ invited:
1225
+ type: integer
1226
+ description: Number of end users successfully invited.
1227
+ failed:
1228
+ type: integer
1229
+ description: Number of per-email failures. Excludes items skipped as in-batch duplicates.
1230
+ skipped:
1231
+ type: integer
1232
+ description: Number of emails skipped as duplicates within the batch.
1233
+ results:
1234
+ type: array
1235
+ description: One entry per input email, in input order.
1236
+ items:
1237
+ type: object
1238
+ required:
1239
+ - email
1240
+ - status
1241
+ properties:
1242
+ email:
1243
+ type: string
1244
+ description: The normalized email this result corresponds to.
1245
+ status:
1246
+ type: string
1247
+ enum:
1248
+ - invited
1249
+ - failed
1250
+ - skipped_duplicate_in_batch
1251
+ x-enumDescriptions:
1252
+ invited: The end user was created and the invite email was sent
1253
+ failed: The invite failed; see `code` for the reason
1254
+ skipped_duplicate_in_batch: The email appeared earlier in the same batch
1255
+ description: Outcome for this email.
1256
+ _userId:
1257
+ type: string
1258
+ format: objectId
1259
+ x-celigo-refModel: users
1260
+ description: Account owner's user id. Present when status is `invited`.
1261
+ _ashareId:
1262
+ type: string
1263
+ format: objectId
1264
+ description: Access-record id of the created end user. Present when status is `invited`.
1265
+ code:
1266
+ type: string
1267
+ enum:
1268
+ - email_invalid
1269
+ - enduser_ashare_exists
1270
+ - owner_self_invite_not_allowed
1271
+ - validation_failed
1272
+ - invite_failed
1273
+ x-enumDescriptions:
1274
+ email_invalid: The email address is not valid
1275
+ enduser_ashare_exists: An end-user record already exists for this user in the account
1276
+ owner_self_invite_not_allowed: Account owners cannot be invited as end users
1277
+ validation_failed: The shared groupIds or grants failed validation for this item
1278
+ invite_failed: An unexpected per-item error, caught so the batch can continue
1279
+ description: Failure reason. Present when status is `failed`.
1280
+ EffectiveAccess:
1281
+ type: object
1282
+ description: |-
1283
+ The compiled MCP access for one end user, with source attribution. Access
1284
+ is the union of the end user's direct grants, group grants, role grants
1285
+ (direct or via groups), and permission sets on the target servers,
1286
+ recompiled on every request.
1287
+ properties:
1288
+ _ashareId:
1289
+ type: string
1290
+ format: objectId
1291
+ readOnly: true
1292
+ examples:
1293
+ - 68b1c2d3e4f5a6b7c8d9e0f1
1294
+ description: End-user access-record id this compilation applies to.
1295
+ _userId:
1296
+ type: string
1297
+ format: objectId
1298
+ readOnly: true
1299
+ x-celigo-refModel: users
1300
+ examples:
1301
+ - 624774a6a7574d3ed9f9a5cc
1302
+ description: The end user's own user id.
1303
+ userType:
1304
+ type: string
1305
+ enum:
1306
+ - end-user
1307
+ x-enumDescriptions:
1308
+ end-user: MCP-only access record, separate from workspace user access
1309
+ description: Type of the access record the compilation was run for.
1310
+ provisionedBy:
1311
+ type: string
1312
+ enum:
1313
+ - invite
1314
+ - jit
1315
+ x-enumDescriptions:
1316
+ invite: Created through an explicit invite (or by migration from a workspace user)
1317
+ jit: Provisioned just-in-time on first sign-in through an external IdP
1318
+ description: How the end-user record was created.
1319
+ groups:
1320
+ type: array
1321
+ description: Groups that contributed to the compiled access.
1322
+ items:
1323
+ type: object
1324
+ properties:
1325
+ _id:
1326
+ type: string
1327
+ format: objectId
1328
+ x-celigo-refModel: groups
1329
+ description: Group id.
1330
+ name:
1331
+ type: string
1332
+ description: Group name.
1333
+ source:
1334
+ type: string
1335
+ enum:
1336
+ - manual
1337
+ - idp
1338
+ x-enumDescriptions:
1339
+ manual: Membership was added by an owner or administrator
1340
+ idp: Membership is synced from the identity provider's group claims
1341
+ description: How the end user's membership in this group was created.
1342
+ roles:
1343
+ type: array
1344
+ description: Roles that contributed to the compiled access.
1345
+ items:
1346
+ type: object
1347
+ properties:
1348
+ _id:
1349
+ type: string
1350
+ format: objectId
1351
+ x-celigo-refModel: roles
1352
+ description: Role id.
1353
+ name:
1354
+ type: string
1355
+ description: Role name.
1356
+ via:
1357
+ type: array
1358
+ description: Attribution paths through which the role applies, such as `role-direct` or `group:<name>`.
1359
+ items:
1360
+ type: string
1361
+ access:
1362
+ type: array
1363
+ description: Per-server compiled access, listing the tools the end user can and cannot use.
1364
+ items:
1365
+ type: object
1366
+ properties:
1367
+ resourceType:
1368
+ type: string
1369
+ enum:
1370
+ - mcpServer
1371
+ x-enumDescriptions:
1372
+ mcpServer: Access to an MCP server and its tools
1373
+ description: Resource type of the compiled entry.
1374
+ _resourceId:
1375
+ type: string
1376
+ format: objectId
1377
+ x-celigo-refModel: mcpservers
1378
+ description: MCP server this entry applies to.
1379
+ resourceName:
1380
+ type:
1381
+ - string
1382
+ - 'null'
1383
+ description: Display name of the MCP server. Null when the server no longer resolves.
1384
+ tools:
1385
+ type: array
1386
+ description: Tools the end user can invoke on this server.
1387
+ items:
1388
+ type: object
1389
+ properties:
1390
+ _id:
1391
+ type: string
1392
+ format: objectId
1393
+ description: Tool id.
1394
+ name:
1395
+ type: string
1396
+ description: Tool name.
1397
+ via:
1398
+ type: array
1399
+ description: |-
1400
+ Source attribution strings such as `direct`, `group:<name>`,
1401
+ `pset:<name> (group:<name>)`, `role-direct:<name>`, or
1402
+ `role:<name> (group:<name>)`.
1403
+ items:
1404
+ type: string
1405
+ deniedTools:
1406
+ type: array
1407
+ description: Tools on this server the end user cannot invoke, with the reason.
1408
+ items:
1409
+ type: object
1410
+ properties:
1411
+ _id:
1412
+ type: string
1413
+ format: objectId
1414
+ description: Tool id.
1415
+ name:
1416
+ type: string
1417
+ description: Tool name.
1418
+ reason:
1419
+ type: string
1420
+ description: Why the tool is not available to this end user.
1421
+ Group:
1422
+ type: object
1423
+ description: |-
1424
+ A named bundle of roles and resource grants for end-user access
1425
+ management. End users receive the group's access through membership,
1426
+ whether added manually or synced from an identity provider.
1427
+ required:
1428
+ - _id
1429
+ - name
1430
+ properties:
1431
+ _id:
1432
+ type: string
1433
+ format: objectId
1434
+ readOnly: true
1435
+ examples:
1436
+ - 68a1b2c3d4e5f6a7b8c9d0e1
1437
+ description: Unique identifier for the group.
1438
+ _userId:
1439
+ type: string
1440
+ format: objectId
1441
+ readOnly: true
1442
+ x-celigo-refModel: users
1443
+ examples:
1444
+ - 5f8d43a1b9e5a80011a35f2c
1445
+ description: Account owner's user id.
1446
+ name:
1447
+ type: string
1448
+ examples:
1449
+ - Finance
1450
+ description: Group name, unique within the account (case-insensitive).
1451
+ description:
1452
+ type: string
1453
+ examples:
1454
+ - Finance department end users
1455
+ description: Free-text description of the group's purpose.
1456
+ intendedFor:
1457
+ type: array
1458
+ default:
1459
+ - end-user
1460
+ description: Audience this group is intended for. Defaults to `["end-user"]` when omitted on write.
1461
+ items:
1462
+ type: string
1463
+ enum:
1464
+ - end-user
1465
+ x-enumDescriptions:
1466
+ end-user: The group manages access for end users (MCP consumers)
1467
+ _roleIds:
1468
+ type: array
1469
+ description: Roles pinned to this group. Members receive the roles' grants through the group.
1470
+ items:
1471
+ type: string
1472
+ format: objectId
1473
+ x-celigo-refModel: roles
1474
+ resourceGrants:
1475
+ type: array
1476
+ description: Resource grants attached directly to the group, in addition to any role-derived grants.
1477
+ items:
1478
+ $ref: '#/components/schemas/ResourceGrant'
1479
+ hasIdpSyncedMembers:
1480
+ type: boolean
1481
+ readOnly: true
1482
+ description: |-
1483
+ When true, at least one end user's membership in this group is synced
1484
+ from an identity provider's group claims. Maintained by the server —
1485
+ IdP-synced memberships cannot be removed through the group members
1486
+ API.
1487
+ createdAt:
1488
+ type: string
1489
+ format: date-time
1490
+ readOnly: true
1491
+ examples:
1492
+ - '2026-07-01T09:15:32Z'
1493
+ description: Timestamp when the group was created.
1494
+ lastModified:
1495
+ type: string
1496
+ format: date-time
1497
+ readOnly: true
1498
+ examples:
1499
+ - '2026-08-15T14:30:15Z'
1500
+ description: Timestamp when the group was last updated.
1501
+ GroupRequest:
1502
+ type: object
1503
+ description: Writable fields for creating or replacing a group.
1504
+ required:
1505
+ - name
1506
+ properties:
1507
+ name:
1508
+ type: string
1509
+ examples:
1510
+ - Finance
1511
+ description: Group name, unique within the account (case-insensitive).
1512
+ description:
1513
+ type: string
1514
+ examples:
1515
+ - Finance department end users
1516
+ description: Free-text description of the group's purpose.
1517
+ intendedFor:
1518
+ type: array
1519
+ default:
1520
+ - end-user
1521
+ description: Audience this group is intended for. Defaults to `["end-user"]` when omitted.
1522
+ items:
1523
+ type: string
1524
+ enum:
1525
+ - end-user
1526
+ x-enumDescriptions:
1527
+ end-user: The group manages access for end users (MCP consumers)
1528
+ _roleIds:
1529
+ type: array
1530
+ description: Roles to pin to this group. Must reference roles owned by the same account.
1531
+ items:
1532
+ type: string
1533
+ format: objectId
1534
+ x-celigo-refModel: roles
1535
+ resourceGrants:
1536
+ type: array
1537
+ description: Resource grants to attach directly to the group. `_resourceId` values must reference resources owned by the same account.
1538
+ items:
1539
+ $ref: '#/components/schemas/ResourceGrant'
1540
+ GroupMembersRequest:
1541
+ type: object
1542
+ description: End users to add to or remove from the group.
1543
+ required:
1544
+ - _ashareIds
1545
+ properties:
1546
+ _ashareIds:
1547
+ type: array
1548
+ minItems: 1
1549
+ maxItems: 100
1550
+ description: End-user access-record ids to add or remove.
1551
+ items:
1552
+ type: string
1553
+ format: objectId
1554
+ GroupMembersResponse:
1555
+ type: object
1556
+ description: Outcome of a bulk membership change.
1557
+ properties:
1558
+ updated:
1559
+ type: integer
1560
+ description: Number of end-user records updated. Members already in (or absent from) the group are not counted.
1561
+ Role:
1562
+ type: object
1563
+ description: |-
1564
+ A named, reusable bundle of resource grants. Roles are assigned to end
1565
+ users directly (`_roleIds` on the end-user record) or pinned to groups,
1566
+ and their grants are compiled into each member's effective access.
1567
+ required:
1568
+ - _id
1569
+ - name
1570
+ properties:
1571
+ _id:
1572
+ type: string
1573
+ format: objectId
1574
+ readOnly: true
1575
+ examples:
1576
+ - 68c1d2e3f4a5b6c7d8e9f0a1
1577
+ description: Unique identifier for the role.
1578
+ _userId:
1579
+ type: string
1580
+ format: objectId
1581
+ readOnly: true
1582
+ x-celigo-refModel: users
1583
+ examples:
1584
+ - 5f8d43a1b9e5a80011a35f2c
1585
+ description: Account owner's user id.
1586
+ name:
1587
+ type: string
1588
+ examples:
1589
+ - Finance tools
1590
+ description: Role name, unique within the account (case-insensitive).
1591
+ description:
1592
+ type: string
1593
+ examples:
1594
+ - Read access to finance MCP tools
1595
+ description: Free-text description of the role's purpose.
1596
+ resourceGrants:
1597
+ type: array
1598
+ description: Resource grants this role carries.
1599
+ items:
1600
+ $ref: '#/components/schemas/ResourceGrant'
1601
+ createdAt:
1602
+ type: string
1603
+ format: date-time
1604
+ readOnly: true
1605
+ examples:
1606
+ - '2026-07-01T09:15:32Z'
1607
+ description: Timestamp when the role was created.
1608
+ lastModified:
1609
+ type: string
1610
+ format: date-time
1611
+ readOnly: true
1612
+ examples:
1613
+ - '2026-08-15T14:30:15Z'
1614
+ description: Timestamp when the role was last updated.
1615
+ RoleRequest:
1616
+ type: object
1617
+ description: Writable fields for creating or replacing a role.
1618
+ required:
1619
+ - name
1620
+ properties:
1621
+ name:
1622
+ type: string
1623
+ examples:
1624
+ - Finance tools
1625
+ description: Role name, unique within the account (case-insensitive).
1626
+ description:
1627
+ type: string
1628
+ examples:
1629
+ - Read access to finance MCP tools
1630
+ description: Free-text description of the role's purpose.
1631
+ resourceGrants:
1632
+ type: array
1633
+ description: Resource grants this role carries. `_resourceId` values must reference resources owned by the same account.
1634
+ items:
1635
+ $ref: '#/components/schemas/ResourceGrant'
1636
+ responses:
1637
+ 400-bad-request:
1638
+ description: |
1639
+ Bad request. The server could not understand the request because of malformed syntax or invalid parameters.
1640
+ content:
1641
+ application/json:
1642
+ schema:
1643
+ $ref: '#/components/schemas/Error'
1644
+ examples:
1645
+ default:
1646
+ value:
1647
+ errors:
1648
+ - code: invalid_request
1649
+ message: The request body failed validation.
1650
+ 401-unauthorized:
1651
+ description: |-
1652
+ Unauthorized. The request lacks a valid bearer token, or the provided token
1653
+ failed to authenticate.
1654
+
1655
+ Note: the 401 response is produced by the auth middleware **before** the
1656
+ request reaches the endpoint handler, so it does **not** follow the
1657
+ standard `{errors: [...]}` envelope. Instead the body is a bare
1658
+ `{message: string}` object with no `code`, no `errors` array. Callers
1659
+ handling 401s should key off the HTTP status and the `message` string,
1660
+ not try to destructure an `errors[]`.
1661
+ content:
1662
+ application/json:
1663
+ schema:
1664
+ type: object
1665
+ properties:
1666
+ message:
1667
+ type: string
1668
+ description: |-
1669
+ Human-readable description of the auth failure. Known values:
1670
+ - `"Unauthorized"` — no `Authorization` header on the request.
1671
+ - `"Bearer Authentication Failed"` — header present but token
1672
+ is invalid, revoked, or expired.
1673
+ required:
1674
+ - message
1675
+ examples:
1676
+ missing_token:
1677
+ summary: No Authorization header sent
1678
+ value:
1679
+ message: Unauthorized
1680
+ invalid_token:
1681
+ summary: Bearer token invalid or revoked
1682
+ value:
1683
+ message: Bearer Authentication Failed
1684
+ 403-forbidden:
1685
+ description: |
1686
+ Forbidden. The authenticated caller does not have permission to perform this operation.
1687
+ content:
1688
+ application/json:
1689
+ schema:
1690
+ $ref: '#/components/schemas/Error'
1691
+ examples:
1692
+ default:
1693
+ value:
1694
+ errors:
1695
+ - code: forbidden
1696
+ message: You do not have permission to access this resource.
1697
+ 422-unprocessable-entity:
1698
+ description: |
1699
+ Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
1700
+ content:
1701
+ application/json:
1702
+ schema:
1703
+ $ref: '#/components/schemas/Error'
1704
+ examples:
1705
+ default:
1706
+ value:
1707
+ errors:
1708
+ - code: unprocessable_entity
1709
+ message: The request could not be processed due to a semantic error.
1710
+ 404-not-found:
1711
+ description: |
1712
+ Not found. The requested resource does not exist or is not visible to the caller.
1713
+ content:
1714
+ application/json:
1715
+ schema:
1716
+ $ref: '#/components/schemas/Error'
1717
+ examples:
1718
+ default:
1719
+ value:
1720
+ errors:
1721
+ - code: not_found
1722
+ message: The requested resource was not found.
1723
+ x-enable-proxy: true
1724
+ x-internal: false