@canopy-io/node 0.1.1 → 0.3.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.
- package/README.md +38 -1
- package/dist/index.cjs +190 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2738 -291
- package/dist/index.d.ts +2738 -291
- package/dist/index.js +189 -4
- package/dist/index.js.map +1 -1
- package/package.json +9 -4
package/dist/index.d.ts
CHANGED
|
@@ -327,6 +327,26 @@ interface paths {
|
|
|
327
327
|
patch: operations["ApiPermissionsController_updatePermission"];
|
|
328
328
|
trace?: never;
|
|
329
329
|
};
|
|
330
|
+
"/api/v1/permissions/{id}/usage": {
|
|
331
|
+
parameters: {
|
|
332
|
+
query?: never;
|
|
333
|
+
header?: never;
|
|
334
|
+
path?: never;
|
|
335
|
+
cookie?: never;
|
|
336
|
+
};
|
|
337
|
+
/**
|
|
338
|
+
* Get where a permission is used
|
|
339
|
+
* @description Returns the roles that grant a permission, each with the number of distinct identities holding that role, plus `role_count` and the distinct `identity_count` the permission reaches overall. Because a permission is only ever held through a role, this is the full blast radius of deleting it — the listed roles are exactly the ones a delete would strip it from. Deactivated roles are included; `identity_count` is not the sum of the per-role counts, since one identity may hold several granting roles. Returns `404` when no permission with that id exists in the Environment. Requires the `rbac.view_roles` permission.
|
|
340
|
+
*/
|
|
341
|
+
get: operations["ApiPermissionsController_getPermissionUsage"];
|
|
342
|
+
put?: never;
|
|
343
|
+
post?: never;
|
|
344
|
+
delete?: never;
|
|
345
|
+
options?: never;
|
|
346
|
+
head?: never;
|
|
347
|
+
patch?: never;
|
|
348
|
+
trace?: never;
|
|
349
|
+
};
|
|
330
350
|
"/api/v1/permissions/evaluate": {
|
|
331
351
|
parameters: {
|
|
332
352
|
query?: never;
|
|
@@ -878,7 +898,7 @@ interface paths {
|
|
|
878
898
|
put?: never;
|
|
879
899
|
/**
|
|
880
900
|
* Create a hierarchy node
|
|
881
|
-
* @description Creates a hierarchy node in the active Application's current Environment. Authorization is evaluated against `hierarchy.manage` on the parent node when `parent_node_id` is supplied, or Application-wide when creating the root. The node type and the parent/child relationship are validated against the
|
|
901
|
+
* @description Creates a hierarchy node in the active Application's current Environment. Prerequisite: the Environment must have a hierarchy schema — define it first via `PATCH /api/v1/hierarchy-schema` (or the Console's enable-hierarchy wizard), or this endpoint returns `400` ("Hierarchy schema is not configured"). Authorization is evaluated against `hierarchy.manage` on the parent node when `parent_node_id` is supplied, or Application-wide when creating the root. The node type and the parent/child relationship are validated against the schema, only one root node is permitted per Environment (a second returns `409`), and the configured `max_depth` is enforced; a missing `slug` is derived from the name. Returns `201` with the created node and writes a `node.created` audit row.
|
|
882
902
|
*/
|
|
883
903
|
post: operations["ApiNodesController_createNode"];
|
|
884
904
|
delete?: never;
|
|
@@ -1055,6 +1075,222 @@ interface paths {
|
|
|
1055
1075
|
patch?: never;
|
|
1056
1076
|
trace?: never;
|
|
1057
1077
|
};
|
|
1078
|
+
"/api/v1/organizations": {
|
|
1079
|
+
parameters: {
|
|
1080
|
+
query?: never;
|
|
1081
|
+
header?: never;
|
|
1082
|
+
path?: never;
|
|
1083
|
+
cookie?: never;
|
|
1084
|
+
};
|
|
1085
|
+
/**
|
|
1086
|
+
* List organizations
|
|
1087
|
+
* @description Lists the Environment's organizations with `member_count` and `pending_invite_count` per row, paginated and searchable by name or slug (`q`). Empty while the Environment has organizations disabled. Requires the `hierarchy.view` permission.
|
|
1088
|
+
*/
|
|
1089
|
+
get: operations["ApiOrganizationsController_listOrganizations"];
|
|
1090
|
+
put?: never;
|
|
1091
|
+
/**
|
|
1092
|
+
* Create an organization
|
|
1093
|
+
* @description Creates an organization from a `name` (slug auto-derived, display-only) with optional `description` and `metadata`. The Environment must have organizations enabled (`409 organization.not_enabled` otherwise); the container is independent of the access model, so flat and hierarchy Environments both hold organizations. Requires the `hierarchy.manage` permission and emits `organization.created`.
|
|
1094
|
+
*/
|
|
1095
|
+
post: operations["ApiOrganizationsController_createOrganization"];
|
|
1096
|
+
/**
|
|
1097
|
+
* Delete every organization
|
|
1098
|
+
* @description Deletes every live organization in the Environment the way the single delete does: memberships and every assignment beneath each organization are removed, pending invitations bound to the organization or its tree are revoked, and each organization is soft-deleted with its subtree. Member identities are untouched. This is the step before switching the container off. Responds `204 No Content`, requires the `hierarchy.manage` permission, and emits `organization.deleted_all` with the counts.
|
|
1099
|
+
*/
|
|
1100
|
+
delete: operations["ApiOrganizationsController_deleteAllOrganizations"];
|
|
1101
|
+
options?: never;
|
|
1102
|
+
head?: never;
|
|
1103
|
+
patch?: never;
|
|
1104
|
+
trace?: never;
|
|
1105
|
+
};
|
|
1106
|
+
"/api/v1/organizations/{id}": {
|
|
1107
|
+
parameters: {
|
|
1108
|
+
query?: never;
|
|
1109
|
+
header?: never;
|
|
1110
|
+
path?: never;
|
|
1111
|
+
cookie?: never;
|
|
1112
|
+
};
|
|
1113
|
+
/**
|
|
1114
|
+
* Get an organization
|
|
1115
|
+
* @description Returns a single organization by `id` with `member_count` and `pending_invite_count`. Returns `404` when the id does not name a live organization in the current Environment. Requires the `hierarchy.view` permission at the organization.
|
|
1116
|
+
*/
|
|
1117
|
+
get: operations["ApiOrganizationsController_getOrganization"];
|
|
1118
|
+
put?: never;
|
|
1119
|
+
post?: never;
|
|
1120
|
+
/**
|
|
1121
|
+
* Delete an organization
|
|
1122
|
+
* @description Deletes an organization by `id`: removes every membership and every assignment beneath the organization, revokes every pending invitation bound to it or its tree, and soft-deletes the organization with its subtree. Member identities themselves are untouched and keep their memberships in other organizations. Supports optimistic concurrency via the `If-Match` header (`409` on a version mismatch). Responds `204 No Content`, requires the `hierarchy.manage` permission at the organization, and emits `organization.deleted`.
|
|
1123
|
+
*/
|
|
1124
|
+
delete: operations["ApiOrganizationsController_deleteOrganization"];
|
|
1125
|
+
options?: never;
|
|
1126
|
+
head?: never;
|
|
1127
|
+
/**
|
|
1128
|
+
* Update an organization
|
|
1129
|
+
* @description Updates an organization's `name`, `description`, and/or `metadata` by `id`. The slug is frozen at create and never changes. Supports optimistic concurrency via the `If-Match` header carrying the organization's current version (`409` on a version mismatch). Requires the `hierarchy.manage` permission at the organization and emits `organization.updated`.
|
|
1130
|
+
*/
|
|
1131
|
+
patch: operations["ApiOrganizationsController_updateOrganization"];
|
|
1132
|
+
trace?: never;
|
|
1133
|
+
};
|
|
1134
|
+
"/api/v1/organizations/{id}/policy": {
|
|
1135
|
+
parameters: {
|
|
1136
|
+
query?: never;
|
|
1137
|
+
header?: never;
|
|
1138
|
+
path?: never;
|
|
1139
|
+
cookie?: never;
|
|
1140
|
+
};
|
|
1141
|
+
/**
|
|
1142
|
+
* Get an organization's authentication policy
|
|
1143
|
+
* @description Returns the organization's own authentication policy (null fields inherit the Environment) alongside the effective policy its members sign in under. Requires the `hierarchy.view` permission at the organization.
|
|
1144
|
+
*/
|
|
1145
|
+
get: operations["ApiOrganizationsController_getPolicy"];
|
|
1146
|
+
put?: never;
|
|
1147
|
+
post?: never;
|
|
1148
|
+
delete?: never;
|
|
1149
|
+
options?: never;
|
|
1150
|
+
head?: never;
|
|
1151
|
+
/**
|
|
1152
|
+
* Update an organization's authentication policy
|
|
1153
|
+
* @description Sets the organization's own authentication policy. A field set to `null` inherits the Environment again. The policy can only tighten the Environment's settings: `mfa_required` can be true where the Environment leaves MFA optional, `mfa_factor_allowlist` must be a subset of the Environment's, `mfa_after_sso` can be `require` where the Environment exempts, and `require_sso` refuses password and code logins for members. Returns `400` (`organization.policy_loosens`) when a value would loosen the Environment, `409` when `If-Match` does not match the policy version. Requires the `hierarchy.manage` permission at the organization and emits `organization.policy.updated`.
|
|
1154
|
+
*/
|
|
1155
|
+
patch: operations["ApiOrganizationsController_updatePolicy"];
|
|
1156
|
+
trace?: never;
|
|
1157
|
+
};
|
|
1158
|
+
"/api/v1/organizations/{id}/sso-connections": {
|
|
1159
|
+
parameters: {
|
|
1160
|
+
query?: never;
|
|
1161
|
+
header?: never;
|
|
1162
|
+
path?: never;
|
|
1163
|
+
cookie?: never;
|
|
1164
|
+
};
|
|
1165
|
+
/**
|
|
1166
|
+
* List an organization's SSO connections
|
|
1167
|
+
* @description Lists the end-user SSO connections bound to this organization, oldest first, each with the membership role a just-in-time provisioned login receives. Requires the `hierarchy.view` permission at the organization. The response is an unpaginated `{ items }` array.
|
|
1168
|
+
*/
|
|
1169
|
+
get: operations["ApiOrganizationsController_listSsoConnections"];
|
|
1170
|
+
put?: never;
|
|
1171
|
+
/**
|
|
1172
|
+
* Bind an SSO connection to an organization
|
|
1173
|
+
* @description Binds an `end_user` SSO connection to the organization: a login through the connection lands in this organization, joining as a member with `default_role_id` when the identity is provisioned or is not yet a member, and the session starts here. The connection must already be bound to the organization's Environment (that binding routes the email domain), and the role must belong to the Environment (`400` otherwise). A connection binds to one organization per Environment (`409`). Requires the `hierarchy.manage` permission at the organization and emits `organization.sso_connection.bound`.
|
|
1174
|
+
*/
|
|
1175
|
+
post: operations["ApiOrganizationsController_bindSsoConnection"];
|
|
1176
|
+
delete?: never;
|
|
1177
|
+
options?: never;
|
|
1178
|
+
head?: never;
|
|
1179
|
+
patch?: never;
|
|
1180
|
+
trace?: never;
|
|
1181
|
+
};
|
|
1182
|
+
"/api/v1/organizations/{id}/sso-connections/{connectionId}": {
|
|
1183
|
+
parameters: {
|
|
1184
|
+
query?: never;
|
|
1185
|
+
header?: never;
|
|
1186
|
+
path?: never;
|
|
1187
|
+
cookie?: never;
|
|
1188
|
+
};
|
|
1189
|
+
get?: never;
|
|
1190
|
+
put?: never;
|
|
1191
|
+
post?: never;
|
|
1192
|
+
/**
|
|
1193
|
+
* Unbind an SSO connection from an organization
|
|
1194
|
+
* @description Removes the binding; logins through the connection fall back to the Environment's placement. Existing memberships are untouched. Returns `404` when the connection is not bound to this organization. Requires the `hierarchy.manage` permission at the organization and emits `organization.sso_connection.unbound`.
|
|
1195
|
+
*/
|
|
1196
|
+
delete: operations["ApiOrganizationsController_unbindSsoConnection"];
|
|
1197
|
+
options?: never;
|
|
1198
|
+
head?: never;
|
|
1199
|
+
patch?: never;
|
|
1200
|
+
trace?: never;
|
|
1201
|
+
};
|
|
1202
|
+
"/api/v1/organizations/{id}/members": {
|
|
1203
|
+
parameters: {
|
|
1204
|
+
query?: never;
|
|
1205
|
+
header?: never;
|
|
1206
|
+
path?: never;
|
|
1207
|
+
cookie?: never;
|
|
1208
|
+
};
|
|
1209
|
+
/**
|
|
1210
|
+
* List an organization's members
|
|
1211
|
+
* @description Lists the organization's members: each row is the member's identity, their single role in this organization, effective dates, when they joined, and `node_assignments`, the grants the member also holds at nodes beneath the organization (empty in a flat Environment). Paginated; `q` searches name and email. Requires the `rbac.view_assignments` permission at the organization.
|
|
1212
|
+
*/
|
|
1213
|
+
get: operations["ApiOrganizationsController_listMembers"];
|
|
1214
|
+
put?: never;
|
|
1215
|
+
/**
|
|
1216
|
+
* Add a member to an organization
|
|
1217
|
+
* @description Adds a member: assigns `role_id` to `identity_id` at the organization. The identity must already hold an active membership in this Environment (invite by email instead for someone who does not). A member holds exactly one role per organization, so an identity that is already a member returns `409` — use the change-role operation. Requires the `rbac.manage_assignments` permission at the organization and emits `organization.member.added`.
|
|
1218
|
+
*/
|
|
1219
|
+
post: operations["ApiOrganizationsController_addMember"];
|
|
1220
|
+
delete?: never;
|
|
1221
|
+
options?: never;
|
|
1222
|
+
head?: never;
|
|
1223
|
+
patch?: never;
|
|
1224
|
+
trace?: never;
|
|
1225
|
+
};
|
|
1226
|
+
"/api/v1/organizations/{id}/members/{identityId}": {
|
|
1227
|
+
parameters: {
|
|
1228
|
+
query?: never;
|
|
1229
|
+
header?: never;
|
|
1230
|
+
path?: never;
|
|
1231
|
+
cookie?: never;
|
|
1232
|
+
};
|
|
1233
|
+
get?: never;
|
|
1234
|
+
put?: never;
|
|
1235
|
+
post?: never;
|
|
1236
|
+
/**
|
|
1237
|
+
* Remove a member from an organization
|
|
1238
|
+
* @description Removes the member from this organization, revoking their role here and nothing else — the identity and its memberships in other organizations are untouched. Returns `404` when the identity is not a member. Responds `204 No Content`, requires the `rbac.manage_assignments` permission at the organization, and emits `organization.member.removed`.
|
|
1239
|
+
*/
|
|
1240
|
+
delete: operations["ApiOrganizationsController_removeMember"];
|
|
1241
|
+
options?: never;
|
|
1242
|
+
head?: never;
|
|
1243
|
+
/**
|
|
1244
|
+
* Change a member's role
|
|
1245
|
+
* @description Replaces the member's role in this organization with `role_id`. A member holds exactly one role per organization, so this updates the existing membership in place; changing to the role already held is a no-op. Returns `404` when the identity is not a member. Requires the `rbac.manage_assignments` permission at the organization and emits `organization.member.role_changed`.
|
|
1246
|
+
*/
|
|
1247
|
+
patch: operations["ApiOrganizationsController_changeMemberRole"];
|
|
1248
|
+
trace?: never;
|
|
1249
|
+
};
|
|
1250
|
+
"/api/v1/organizations/{id}/invites": {
|
|
1251
|
+
parameters: {
|
|
1252
|
+
query?: never;
|
|
1253
|
+
header?: never;
|
|
1254
|
+
path?: never;
|
|
1255
|
+
cookie?: never;
|
|
1256
|
+
};
|
|
1257
|
+
/**
|
|
1258
|
+
* List an organization's invitations
|
|
1259
|
+
* @description Lists the organization's invitations (pending, accepted, revoked, and expired — filter with `status`), paginated. Requires the `identity.view` permission.
|
|
1260
|
+
*/
|
|
1261
|
+
get: operations["ApiOrganizationsController_listInvites"];
|
|
1262
|
+
put?: never;
|
|
1263
|
+
/**
|
|
1264
|
+
* Invite a member into an organization
|
|
1265
|
+
* @description Invites an email into the organization with the role bound to the invitation; acceptance creates the Environment membership and the organization membership in one step. Works for emails with no identity in the Environment — one is created on acceptance. Requires the `identity.manage` permission and emits `invite.created`.
|
|
1266
|
+
*/
|
|
1267
|
+
post: operations["ApiOrganizationsController_createInvite"];
|
|
1268
|
+
delete?: never;
|
|
1269
|
+
options?: never;
|
|
1270
|
+
head?: never;
|
|
1271
|
+
patch?: never;
|
|
1272
|
+
trace?: never;
|
|
1273
|
+
};
|
|
1274
|
+
"/api/v1/organizations/{id}/invites/{inviteId}": {
|
|
1275
|
+
parameters: {
|
|
1276
|
+
query?: never;
|
|
1277
|
+
header?: never;
|
|
1278
|
+
path?: never;
|
|
1279
|
+
cookie?: never;
|
|
1280
|
+
};
|
|
1281
|
+
get?: never;
|
|
1282
|
+
put?: never;
|
|
1283
|
+
post?: never;
|
|
1284
|
+
/**
|
|
1285
|
+
* Revoke an organization invitation
|
|
1286
|
+
* @description Revokes an invitation on this organization; the emailed link stops working immediately. Returns `404` when the invitation does not belong to this organization. Requires the `identity.manage` permission and emits `invite.revoked`.
|
|
1287
|
+
*/
|
|
1288
|
+
delete: operations["ApiOrganizationsController_revokeInvite"];
|
|
1289
|
+
options?: never;
|
|
1290
|
+
head?: never;
|
|
1291
|
+
patch?: never;
|
|
1292
|
+
trace?: never;
|
|
1293
|
+
};
|
|
1058
1294
|
"/api/v1/roles": {
|
|
1059
1295
|
parameters: {
|
|
1060
1296
|
query?: never;
|
|
@@ -1598,6 +1834,24 @@ interface components {
|
|
|
1598
1834
|
/** @description One or more permissions to register */
|
|
1599
1835
|
permissions: components["schemas"]["PermissionItemDto"][];
|
|
1600
1836
|
};
|
|
1837
|
+
PermissionUsageRoleDto: {
|
|
1838
|
+
id: string;
|
|
1839
|
+
name: string;
|
|
1840
|
+
description?: string | null;
|
|
1841
|
+
is_system_role: boolean;
|
|
1842
|
+
/** @description Deactivated roles still carry the grant, so they are listed too — deleting the permission strips it from them as well. */
|
|
1843
|
+
is_active: boolean;
|
|
1844
|
+
/** @description Number of distinct identities assigned this role, across all nodes. */
|
|
1845
|
+
member_count: number;
|
|
1846
|
+
};
|
|
1847
|
+
PermissionUsageDto: {
|
|
1848
|
+
permission_id: string;
|
|
1849
|
+
/** @description Number of roles that grant this permission. */
|
|
1850
|
+
role_count: number;
|
|
1851
|
+
/** @description Distinct identities that hold this permission through any granting role. Lower than the sum of `member_count` when an identity holds more than one granting role. */
|
|
1852
|
+
identity_count: number;
|
|
1853
|
+
roles: components["schemas"]["PermissionUsageRoleDto"][];
|
|
1854
|
+
};
|
|
1601
1855
|
UpdatePermissionDto: {
|
|
1602
1856
|
/** @description Updated name */
|
|
1603
1857
|
name?: string;
|
|
@@ -1606,18 +1860,6 @@ interface components {
|
|
|
1606
1860
|
/** @description Updated category */
|
|
1607
1861
|
category?: string;
|
|
1608
1862
|
};
|
|
1609
|
-
EvaluatePermissionDto: {
|
|
1610
|
-
/** @description Identity ID (from the `identities` table — the end user being evaluated, not an admin). */
|
|
1611
|
-
identity_id: string;
|
|
1612
|
-
permission: string;
|
|
1613
|
-
/**
|
|
1614
|
-
* @description Required. `node` asks 'does this identity have the permission *at* `node_id`?' (lineage walk). `app_wide` asks the coarse-grained 'does this identity have the permission *anywhere* in the org?' question — useful for UI gating, **never** for resource-scoped enforcement. `node` requires `node_id`; `app_wide` forbids it.
|
|
1615
|
-
* @enum {string}
|
|
1616
|
-
*/
|
|
1617
|
-
scope: "node" | "app_wide";
|
|
1618
|
-
/** @description Required when `scope` is `node`; must be omitted when `scope` is `app_wide`. */
|
|
1619
|
-
node_id?: string;
|
|
1620
|
-
};
|
|
1621
1863
|
EvaluateResponseDto: {
|
|
1622
1864
|
allowed: boolean;
|
|
1623
1865
|
permission: string;
|
|
@@ -1631,6 +1873,18 @@ interface components {
|
|
|
1631
1873
|
granting_roles: string[];
|
|
1632
1874
|
denial_reason?: string | null;
|
|
1633
1875
|
};
|
|
1876
|
+
EvaluatePermissionDto: {
|
|
1877
|
+
/** @description Identity ID (from the `identities` table — the end user being evaluated, not an admin). */
|
|
1878
|
+
identity_id: string;
|
|
1879
|
+
permission: string;
|
|
1880
|
+
/**
|
|
1881
|
+
* @description Required. `node` asks 'does this identity have the permission *at* `node_id`?' (lineage walk). `app_wide` asks the coarse-grained 'does this identity have the permission *anywhere* in the org?' question — useful for UI gating, **never** for resource-scoped enforcement. `node` requires `node_id`; `app_wide` forbids it.
|
|
1882
|
+
* @enum {string}
|
|
1883
|
+
*/
|
|
1884
|
+
scope: "node" | "app_wide";
|
|
1885
|
+
/** @description Required when `scope` is `node`; must be omitted when `scope` is `app_wide`. */
|
|
1886
|
+
node_id?: string;
|
|
1887
|
+
};
|
|
1634
1888
|
EvaluateCheckDto: {
|
|
1635
1889
|
/** @description Identity ID (from the `identities` table — the end user being evaluated, not an admin). */
|
|
1636
1890
|
identity_id: string;
|
|
@@ -1646,13 +1900,6 @@ interface components {
|
|
|
1646
1900
|
BulkEvaluatePermissionDto: {
|
|
1647
1901
|
checks: components["schemas"]["EvaluateCheckDto"][];
|
|
1648
1902
|
};
|
|
1649
|
-
ExplainPermissionDto: {
|
|
1650
|
-
/** @description Identity ID (from the `identities` table — the end user being explained, not an admin). */
|
|
1651
|
-
identity_id: string;
|
|
1652
|
-
permission: string;
|
|
1653
|
-
/** @description The hierarchy node to explain the decision at. The lineage from the root to this node is walked and returned in the trace. */
|
|
1654
|
-
node_id: string;
|
|
1655
|
-
};
|
|
1656
1903
|
PermissionTraceAssignmentDto: {
|
|
1657
1904
|
assignment_id: string;
|
|
1658
1905
|
role_id: string;
|
|
@@ -1688,6 +1935,13 @@ interface components {
|
|
|
1688
1935
|
/** @description Root-first lineage of the target node, each with the identity's assignments observed at that node. */
|
|
1689
1936
|
lineage: components["schemas"]["PermissionTraceNodeDto"][];
|
|
1690
1937
|
};
|
|
1938
|
+
ExplainPermissionDto: {
|
|
1939
|
+
/** @description Identity ID (from the `identities` table — the end user being explained, not an admin). */
|
|
1940
|
+
identity_id: string;
|
|
1941
|
+
permission: string;
|
|
1942
|
+
/** @description The hierarchy node to explain the decision at. The lineage from the root to this node is walked and returned in the trace. */
|
|
1943
|
+
node_id: string;
|
|
1944
|
+
};
|
|
1691
1945
|
PageMetaDto: {
|
|
1692
1946
|
/** @description Current page number (1-based) */
|
|
1693
1947
|
page: number;
|
|
@@ -1720,6 +1974,10 @@ interface components {
|
|
|
1720
1974
|
name: string;
|
|
1721
1975
|
node_id: string;
|
|
1722
1976
|
node_name: string;
|
|
1977
|
+
/** @description When this assignment starts; null means it is already active */
|
|
1978
|
+
effective_from: string | null;
|
|
1979
|
+
/** @description When this assignment expires; null means it never does */
|
|
1980
|
+
effective_to: string | null;
|
|
1723
1981
|
};
|
|
1724
1982
|
IdentityRowDto: {
|
|
1725
1983
|
id: string;
|
|
@@ -1891,29 +2149,6 @@ interface components {
|
|
|
1891
2149
|
expired_count: number;
|
|
1892
2150
|
revoked_count: number;
|
|
1893
2151
|
};
|
|
1894
|
-
CreateIdentityInviteDto: {
|
|
1895
|
-
/** @description OAuth client ID — determines which app the invite links to. If omitted, uses Canopy hosted fallback. */
|
|
1896
|
-
client_id?: string;
|
|
1897
|
-
/**
|
|
1898
|
-
* @description Optional. `activate` (default) creates a net-new identity OR — if an identity with this email already exists in the Account but has no active membership in this App — auto-derives an `add_to_app` invite that adds them to this App without touching their existing password. `password_reset` is the explicit admin-driven credential-rotation flow for an existing identity; it cannot carry a role/node assignment. The legacy `onboard` value is accepted and treated as `activate`.
|
|
1899
|
-
* @enum {string}
|
|
1900
|
-
*/
|
|
1901
|
-
intent?: "activate" | "password_reset" | "onboard";
|
|
1902
|
-
email: string;
|
|
1903
|
-
/** @description Required for `activate`. Ignored for `add_to_app` (the existing identity's name wins) and for `password_reset`. */
|
|
1904
|
-
first_name?: string;
|
|
1905
|
-
/** @description Required for `activate`. Ignored for `add_to_app` and `password_reset`. */
|
|
1906
|
-
last_name?: string;
|
|
1907
|
-
/** @description Role ID — required if node_id is provided */
|
|
1908
|
-
role_id?: string;
|
|
1909
|
-
/** @description Node ID — required if role_id is provided */
|
|
1910
|
-
node_id?: string;
|
|
1911
|
-
/**
|
|
1912
|
-
* @description Whether Canopy should send the invite email. Set false to suppress delivery and handle it yourself — the API response includes accept_url with the tokenized link. Defaults to true.
|
|
1913
|
-
* @default true
|
|
1914
|
-
*/
|
|
1915
|
-
send_email: boolean;
|
|
1916
|
-
};
|
|
1917
2152
|
ApiIdentityInviteResponseDto: {
|
|
1918
2153
|
id: string;
|
|
1919
2154
|
email: string;
|
|
@@ -1942,27 +2177,36 @@ interface components {
|
|
|
1942
2177
|
/** @description Tokenized URL the invitee would land on. Returned so callers that pass send_email=false can deliver it themselves. */
|
|
1943
2178
|
accept_url: string;
|
|
1944
2179
|
};
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
/** @description
|
|
1955
|
-
|
|
1956
|
-
/** @description
|
|
1957
|
-
|
|
1958
|
-
/** @description
|
|
1959
|
-
|
|
1960
|
-
/** @description
|
|
1961
|
-
|
|
1962
|
-
/**
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
2180
|
+
CreateIdentityInviteDto: {
|
|
2181
|
+
/** @description OAuth client ID — determines which app the invite links to. If omitted, uses Canopy hosted fallback. */
|
|
2182
|
+
client_id?: string;
|
|
2183
|
+
/**
|
|
2184
|
+
* @description Optional. `activate` (default) creates a net-new identity OR — if an identity with this email already exists in the Account but has no active membership in this App — auto-derives an `add_to_app` invite that adds them to this App without touching their existing password. `password_reset` is the explicit admin-driven credential-rotation flow for an existing identity; it cannot carry a role/node assignment. The legacy `onboard` value is accepted and treated as `activate`.
|
|
2185
|
+
* @enum {string}
|
|
2186
|
+
*/
|
|
2187
|
+
intent?: "activate" | "password_reset" | "onboard";
|
|
2188
|
+
email: string;
|
|
2189
|
+
/** @description Required for `activate`. Ignored for `add_to_app` (the existing identity's name wins) and for `password_reset`. */
|
|
2190
|
+
first_name?: string;
|
|
2191
|
+
/** @description Required for `activate`. Ignored for `add_to_app` and `password_reset`. */
|
|
2192
|
+
last_name?: string;
|
|
2193
|
+
/** @description Role ID — required if node_id is provided */
|
|
2194
|
+
role_id?: string;
|
|
2195
|
+
/** @description Node ID — required if role_id is provided */
|
|
2196
|
+
node_id?: string;
|
|
2197
|
+
/**
|
|
2198
|
+
* @description Whether Canopy should send the invite email. Set false to suppress delivery and handle it yourself — the API response includes accept_url with the tokenized link. Defaults to true.
|
|
2199
|
+
* @default true
|
|
2200
|
+
*/
|
|
2201
|
+
send_email: boolean;
|
|
2202
|
+
};
|
|
2203
|
+
BulkCreateIdentityInvitesDto: {
|
|
2204
|
+
invites: components["schemas"]["CreateIdentityInviteDto"][];
|
|
2205
|
+
};
|
|
2206
|
+
ApiIdentityInviteResendResponseDto: {
|
|
2207
|
+
message: string;
|
|
2208
|
+
/** @description Tokenized URL for the regenerated invite. Resend rotates the token, which invalidates any accept_url returned from the original create call. Self-delivery callers must replace the stored URL with this one. */
|
|
2209
|
+
accept_url: string;
|
|
1966
2210
|
};
|
|
1967
2211
|
NodeResponseDto: {
|
|
1968
2212
|
id: string;
|
|
@@ -1982,6 +2226,20 @@ interface components {
|
|
|
1982
2226
|
/** @description Optimistic-lock version. Send back as the `If-Match` header when updating, moving, or deleting to detect concurrent edits. */
|
|
1983
2227
|
version: number;
|
|
1984
2228
|
};
|
|
2229
|
+
CreateNodeDto: {
|
|
2230
|
+
/** @description Parent node ID (null for root) */
|
|
2231
|
+
parent_node_id?: string;
|
|
2232
|
+
/** @description Node type (org-defined, e.g. 'department', 'team') */
|
|
2233
|
+
node_type: string;
|
|
2234
|
+
/** @description Display name for the node */
|
|
2235
|
+
name: string;
|
|
2236
|
+
/** @description Optional free-text description shown under the node name */
|
|
2237
|
+
description?: string;
|
|
2238
|
+
/** @description URL-friendly slug (auto-generated if omitted) */
|
|
2239
|
+
slug?: string;
|
|
2240
|
+
/** @description Arbitrary metadata */
|
|
2241
|
+
metadata?: Record<string, unknown>;
|
|
2242
|
+
};
|
|
1985
2243
|
HierarchyTreeNodeDto: {
|
|
1986
2244
|
id: string;
|
|
1987
2245
|
name: string;
|
|
@@ -2107,6 +2365,163 @@ interface components {
|
|
|
2107
2365
|
distinct_role_count: number;
|
|
2108
2366
|
recent_identities: components["schemas"]["RecentIdentityDto"][];
|
|
2109
2367
|
};
|
|
2368
|
+
OrganizationResponseDto: {
|
|
2369
|
+
id: string;
|
|
2370
|
+
name: string;
|
|
2371
|
+
description?: string | null;
|
|
2372
|
+
/** @description Display label derived from the name at create; frozen afterwards. Organizations are addressed by `id`. */
|
|
2373
|
+
slug: string;
|
|
2374
|
+
metadata: Record<string, unknown>;
|
|
2375
|
+
/** @description Members (one role each) in this organization. */
|
|
2376
|
+
member_count: number;
|
|
2377
|
+
/** @description Unexpired, unaccepted, unrevoked invitations. */
|
|
2378
|
+
pending_invite_count: number;
|
|
2379
|
+
/** Format: date-time */
|
|
2380
|
+
created_at: string;
|
|
2381
|
+
/** Format: date-time */
|
|
2382
|
+
updated_at: string;
|
|
2383
|
+
/** @description Optimistic-lock version. Send back as the `If-Match` header when updating or deleting to detect concurrent edits. */
|
|
2384
|
+
version: number;
|
|
2385
|
+
};
|
|
2386
|
+
CreateOrganizationDto: {
|
|
2387
|
+
/** @description Organization name. The slug is auto-derived from it at create and never changes afterwards. */
|
|
2388
|
+
name: string;
|
|
2389
|
+
/** @description Organization description */
|
|
2390
|
+
description?: string;
|
|
2391
|
+
/** @description Free-form metadata stored on the organization, returned as sent. */
|
|
2392
|
+
metadata?: Record<string, unknown>;
|
|
2393
|
+
};
|
|
2394
|
+
UpdateOrganizationDto: {
|
|
2395
|
+
/** @description New organization name. The slug does not change. */
|
|
2396
|
+
name?: string;
|
|
2397
|
+
/** @description Organization description */
|
|
2398
|
+
description?: string;
|
|
2399
|
+
/** @description Free-form metadata stored on the organization, returned as sent. */
|
|
2400
|
+
metadata?: Record<string, unknown>;
|
|
2401
|
+
};
|
|
2402
|
+
EffectiveOrganizationPolicyDto: {
|
|
2403
|
+
mfa_required: boolean;
|
|
2404
|
+
mfa_factor_allowlist: ("totp" | "webauthn" | "email_otp")[];
|
|
2405
|
+
/** @enum {string} */
|
|
2406
|
+
mfa_after_sso: "exempt" | "require";
|
|
2407
|
+
require_sso: boolean;
|
|
2408
|
+
};
|
|
2409
|
+
OrganizationPolicyResponseDto: {
|
|
2410
|
+
/** @description The organization this policy belongs to. */
|
|
2411
|
+
organization_id: string;
|
|
2412
|
+
mfa_required?: boolean | null;
|
|
2413
|
+
mfa_factor_allowlist?: ("totp" | "webauthn" | "email_otp")[] | null;
|
|
2414
|
+
/** @enum {string|null} */
|
|
2415
|
+
mfa_after_sso?: "exempt" | "require" | null;
|
|
2416
|
+
require_sso: boolean;
|
|
2417
|
+
/** @description The Environment's own settings, the floor this organization's policy tightens from. */
|
|
2418
|
+
environment: components["schemas"]["EffectiveOrganizationPolicyDto"];
|
|
2419
|
+
/** @description The policy the organization's members sign in under. */
|
|
2420
|
+
effective: components["schemas"]["EffectiveOrganizationPolicyDto"];
|
|
2421
|
+
/** @description Optimistic-concurrency version. 0 until the organization sets a policy of its own. */
|
|
2422
|
+
version: number;
|
|
2423
|
+
};
|
|
2424
|
+
UpdateOrganizationPolicyDto: {
|
|
2425
|
+
/** @description Require MFA for this organization's members. `true` tightens an Environment that leaves MFA optional; `false` is only accepted where the Environment does not require MFA; `null` inherits. */
|
|
2426
|
+
mfa_required?: boolean | null;
|
|
2427
|
+
/** @description Factors this organization's members may enroll and use. Must be a non-empty subset of the Environment's allowlist; `null` inherits. */
|
|
2428
|
+
mfa_factor_allowlist?: ("totp" | "webauthn" | "email_otp")[] | null;
|
|
2429
|
+
/**
|
|
2430
|
+
* @description Whether an SSO login still owes an MFA challenge. `require` tightens an Environment that exempts SSO; `exempt` is only accepted where the Environment exempts; `null` inherits.
|
|
2431
|
+
* @enum {string|null}
|
|
2432
|
+
*/
|
|
2433
|
+
mfa_after_sso?: "exempt" | "require" | null;
|
|
2434
|
+
/** @description Members must sign in through SSO. Password and email-code logins are refused for the organization's members and for any email whose domain routes to a connection bound to this organization. */
|
|
2435
|
+
require_sso?: boolean;
|
|
2436
|
+
};
|
|
2437
|
+
OrganizationSsoConnectionSummaryDto: {
|
|
2438
|
+
id: string;
|
|
2439
|
+
name: string;
|
|
2440
|
+
/** @enum {string} */
|
|
2441
|
+
type: "saml" | "oidc";
|
|
2442
|
+
status: string;
|
|
2443
|
+
};
|
|
2444
|
+
OrganizationSsoRoleSummaryDto: {
|
|
2445
|
+
id: string;
|
|
2446
|
+
name: string;
|
|
2447
|
+
};
|
|
2448
|
+
OrganizationSsoConnectionResponseDto: {
|
|
2449
|
+
organization_node_id: string;
|
|
2450
|
+
sso_connection_id: string;
|
|
2451
|
+
sso_connection: components["schemas"]["OrganizationSsoConnectionSummaryDto"];
|
|
2452
|
+
/** @description The membership role a login through this connection receives when it joins the organization. */
|
|
2453
|
+
default_role_id: string;
|
|
2454
|
+
default_role: components["schemas"]["OrganizationSsoRoleSummaryDto"];
|
|
2455
|
+
/** Format: date-time */
|
|
2456
|
+
created_at: string;
|
|
2457
|
+
};
|
|
2458
|
+
BindOrganizationSsoConnectionDto: {
|
|
2459
|
+
/** @description An end-user SSO connection already bound to the organization's Environment. */
|
|
2460
|
+
sso_connection_id: string;
|
|
2461
|
+
/** @description The membership role a login through this connection receives when it joins the organization. Must belong to the organization's Environment. */
|
|
2462
|
+
default_role_id: string;
|
|
2463
|
+
};
|
|
2464
|
+
OrganizationMemberIdentityDto: {
|
|
2465
|
+
id: string;
|
|
2466
|
+
email: string;
|
|
2467
|
+
first_name?: string | null;
|
|
2468
|
+
last_name?: string | null;
|
|
2469
|
+
};
|
|
2470
|
+
OrganizationMemberRoleDto: {
|
|
2471
|
+
id: string;
|
|
2472
|
+
name: string;
|
|
2473
|
+
};
|
|
2474
|
+
OrganizationMemberNodeDto: {
|
|
2475
|
+
id: string;
|
|
2476
|
+
name: string;
|
|
2477
|
+
node_type: string;
|
|
2478
|
+
};
|
|
2479
|
+
OrganizationMemberNodeAssignmentDto: {
|
|
2480
|
+
/** @description The assignment id. */
|
|
2481
|
+
id: string;
|
|
2482
|
+
application_node: components["schemas"]["OrganizationMemberNodeDto"];
|
|
2483
|
+
role: components["schemas"]["OrganizationMemberRoleDto"];
|
|
2484
|
+
};
|
|
2485
|
+
OrganizationMemberResponseDto: {
|
|
2486
|
+
/** @description The membership (role assignment) id. */
|
|
2487
|
+
id: string;
|
|
2488
|
+
identity: components["schemas"]["OrganizationMemberIdentityDto"];
|
|
2489
|
+
role: components["schemas"]["OrganizationMemberRoleDto"];
|
|
2490
|
+
/** Format: date-time */
|
|
2491
|
+
effective_from?: string | null;
|
|
2492
|
+
/** Format: date-time */
|
|
2493
|
+
effective_to?: string | null;
|
|
2494
|
+
/**
|
|
2495
|
+
* Format: date-time
|
|
2496
|
+
* @description When the membership was created.
|
|
2497
|
+
*/
|
|
2498
|
+
created_at: string;
|
|
2499
|
+
/** @description Assignments the member also holds at nodes beneath the organization. Empty in a flat Environment. */
|
|
2500
|
+
node_assignments: components["schemas"]["OrganizationMemberNodeAssignmentDto"][];
|
|
2501
|
+
};
|
|
2502
|
+
AddOrganizationMemberDto: {
|
|
2503
|
+
/** @description Identity to add. Must already hold an active membership in this Environment; invite by email instead for someone who does not. */
|
|
2504
|
+
identity_id: string;
|
|
2505
|
+
/** @description The single role the member holds in this organization, from the Environment's roles. */
|
|
2506
|
+
role_id: string;
|
|
2507
|
+
};
|
|
2508
|
+
ChangeOrganizationMemberRoleDto: {
|
|
2509
|
+
/** @description The replacement role. A member holds exactly one role per organization, so this updates the existing membership in place. */
|
|
2510
|
+
role_id: string;
|
|
2511
|
+
};
|
|
2512
|
+
CreateOrganizationInviteDto: {
|
|
2513
|
+
/** @description Email to invite. Works for people with no identity in this Environment — one is created when they accept. */
|
|
2514
|
+
email: string;
|
|
2515
|
+
/** @description The role the member will hold in this organization on acceptance. */
|
|
2516
|
+
role_id: string;
|
|
2517
|
+
first_name?: string;
|
|
2518
|
+
last_name?: string;
|
|
2519
|
+
/**
|
|
2520
|
+
* @description Set false to skip the email and deliver the returned accept URL yourself.
|
|
2521
|
+
* @default true
|
|
2522
|
+
*/
|
|
2523
|
+
send_email: boolean;
|
|
2524
|
+
};
|
|
2110
2525
|
RoleResponseDto: {
|
|
2111
2526
|
id: string;
|
|
2112
2527
|
application_id: string;
|
|
@@ -2210,7 +2625,7 @@ interface components {
|
|
|
2210
2625
|
* @description Broad classification from the action catalog (e.g. `auth`, `rbac`). NULL on legacy rows whose action key was unknown at backfill time — those carry the `unknown` value in storage.
|
|
2211
2626
|
* @enum {string|null}
|
|
2212
2627
|
*/
|
|
2213
|
-
category?: "auth" | "identity" | "admin_user" | "tenancy" | "hierarchy" | "rbac" | "authorization" | "api_keys" | "oauth" | "webhooks" | "invites" | "mfa" | "audit" | "billing" | "sso" | "unknown" | null;
|
|
2628
|
+
category?: "auth" | "identity" | "admin_user" | "tenancy" | "hierarchy" | "organization" | "rbac" | "authorization" | "api_keys" | "oauth" | "webhooks" | "invites" | "mfa" | "audit" | "billing" | "sso" | "unknown" | null;
|
|
2214
2629
|
/**
|
|
2215
2630
|
* @description `info` for normal-flow events, `notice` for important state changes, `warning` for failures, `critical` for security events.
|
|
2216
2631
|
* @enum {string}
|
|
@@ -2221,6 +2636,44 @@ interface components {
|
|
|
2221
2636
|
/** @description Whether this row should appear on a future end-user `My security activity` surface. Not consumed by current reads. */
|
|
2222
2637
|
identity_visible: boolean;
|
|
2223
2638
|
};
|
|
2639
|
+
ExportJobDto: {
|
|
2640
|
+
/** Format: uuid */
|
|
2641
|
+
id: string;
|
|
2642
|
+
/**
|
|
2643
|
+
* @description `pending` (enqueued), `processing` (worker rendering), `completed` (file ready), or `failed` (see `error`).
|
|
2644
|
+
* @enum {string}
|
|
2645
|
+
*/
|
|
2646
|
+
status: "pending" | "processing" | "completed" | "failed";
|
|
2647
|
+
/**
|
|
2648
|
+
* @description The audit surface the export was taken from.
|
|
2649
|
+
* @enum {string}
|
|
2650
|
+
*/
|
|
2651
|
+
surface: "admin" | "identities";
|
|
2652
|
+
/**
|
|
2653
|
+
* @description Wire format of the rendered file.
|
|
2654
|
+
* @enum {string}
|
|
2655
|
+
*/
|
|
2656
|
+
format: "csv" | "ndjson";
|
|
2657
|
+
/** Format: uuid */
|
|
2658
|
+
application_id?: string | null;
|
|
2659
|
+
/** Format: uuid */
|
|
2660
|
+
environment_id?: string | null;
|
|
2661
|
+
/** @description Rows written, set once the job completes. */
|
|
2662
|
+
row_count?: number | null;
|
|
2663
|
+
/** @description Failure detail, present only when `status` is `failed`. */
|
|
2664
|
+
error?: string | null;
|
|
2665
|
+
/** Format: date-time */
|
|
2666
|
+
created_at: string;
|
|
2667
|
+
/** Format: date-time */
|
|
2668
|
+
completed_at?: string | null;
|
|
2669
|
+
/**
|
|
2670
|
+
* Format: date-time
|
|
2671
|
+
* @description When the stored file + this record become eligible for sweep.
|
|
2672
|
+
*/
|
|
2673
|
+
expires_at?: string | null;
|
|
2674
|
+
/** @description Short-lived signed download URL. Present only on the single-job read of a completed job; `null` otherwise. */
|
|
2675
|
+
download_url?: string | null;
|
|
2676
|
+
};
|
|
2224
2677
|
AuditExportQueryDto: {
|
|
2225
2678
|
/**
|
|
2226
2679
|
* Format: date-time
|
|
@@ -2235,7 +2688,7 @@ interface components {
|
|
|
2235
2688
|
/** @description Filter by one or more action keys. Repeat the query param (`?action=a&action=b`) or pass a comma-separated string. */
|
|
2236
2689
|
action?: string[];
|
|
2237
2690
|
/** @enum {string} */
|
|
2238
|
-
category?: "auth" | "identity" | "admin_user" | "tenancy" | "hierarchy" | "rbac" | "authorization" | "api_keys" | "oauth" | "webhooks" | "invites" | "mfa" | "audit" | "billing" | "sso" | "unknown";
|
|
2691
|
+
category?: "auth" | "identity" | "admin_user" | "tenancy" | "hierarchy" | "organization" | "rbac" | "authorization" | "api_keys" | "oauth" | "webhooks" | "invites" | "mfa" | "audit" | "billing" | "sso" | "unknown";
|
|
2239
2692
|
/** @enum {string} */
|
|
2240
2693
|
severity?: "info" | "notice" | "warning" | "critical";
|
|
2241
2694
|
/** @enum {string} */
|
|
@@ -2269,44 +2722,6 @@ interface components {
|
|
|
2269
2722
|
*/
|
|
2270
2723
|
format: "csv" | "ndjson";
|
|
2271
2724
|
};
|
|
2272
|
-
ExportJobDto: {
|
|
2273
|
-
/** Format: uuid */
|
|
2274
|
-
id: string;
|
|
2275
|
-
/**
|
|
2276
|
-
* @description `pending` (enqueued), `processing` (worker rendering), `completed` (file ready), or `failed` (see `error`).
|
|
2277
|
-
* @enum {string}
|
|
2278
|
-
*/
|
|
2279
|
-
status: "pending" | "processing" | "completed" | "failed";
|
|
2280
|
-
/**
|
|
2281
|
-
* @description The audit surface the export was taken from.
|
|
2282
|
-
* @enum {string}
|
|
2283
|
-
*/
|
|
2284
|
-
surface: "admin" | "identities";
|
|
2285
|
-
/**
|
|
2286
|
-
* @description Wire format of the rendered file.
|
|
2287
|
-
* @enum {string}
|
|
2288
|
-
*/
|
|
2289
|
-
format: "csv" | "ndjson";
|
|
2290
|
-
/** Format: uuid */
|
|
2291
|
-
application_id?: string | null;
|
|
2292
|
-
/** Format: uuid */
|
|
2293
|
-
environment_id?: string | null;
|
|
2294
|
-
/** @description Rows written, set once the job completes. */
|
|
2295
|
-
row_count?: number | null;
|
|
2296
|
-
/** @description Failure detail, present only when `status` is `failed`. */
|
|
2297
|
-
error?: string | null;
|
|
2298
|
-
/** Format: date-time */
|
|
2299
|
-
created_at: string;
|
|
2300
|
-
/** Format: date-time */
|
|
2301
|
-
completed_at?: string | null;
|
|
2302
|
-
/**
|
|
2303
|
-
* Format: date-time
|
|
2304
|
-
* @description When the stored file + this record become eligible for sweep.
|
|
2305
|
-
*/
|
|
2306
|
-
expires_at?: string | null;
|
|
2307
|
-
/** @description Short-lived signed download URL. Present only on the single-job read of a completed job; `null` otherwise. */
|
|
2308
|
-
download_url?: string | null;
|
|
2309
|
-
};
|
|
2310
2725
|
AuditLogDetailResponseDto: {
|
|
2311
2726
|
id: string;
|
|
2312
2727
|
account_id?: string | null;
|
|
@@ -2338,7 +2753,7 @@ interface components {
|
|
|
2338
2753
|
* @description Broad classification from the action catalog (e.g. `auth`, `rbac`). NULL on legacy rows whose action key was unknown at backfill time — those carry the `unknown` value in storage.
|
|
2339
2754
|
* @enum {string|null}
|
|
2340
2755
|
*/
|
|
2341
|
-
category?: "auth" | "identity" | "admin_user" | "tenancy" | "hierarchy" | "rbac" | "authorization" | "api_keys" | "oauth" | "webhooks" | "invites" | "mfa" | "audit" | "billing" | "sso" | "unknown" | null;
|
|
2756
|
+
category?: "auth" | "identity" | "admin_user" | "tenancy" | "hierarchy" | "organization" | "rbac" | "authorization" | "api_keys" | "oauth" | "webhooks" | "invites" | "mfa" | "audit" | "billing" | "sso" | "unknown" | null;
|
|
2342
2757
|
/**
|
|
2343
2758
|
* @description `info` for normal-flow events, `notice` for important state changes, `warning` for failures, `critical` for security events.
|
|
2344
2759
|
* @enum {string}
|
|
@@ -2399,11 +2814,6 @@ interface components {
|
|
|
2399
2814
|
/** @description Node type used when the root node is auto-created. Must be one of `node_types`. */
|
|
2400
2815
|
root_node_type: string;
|
|
2401
2816
|
};
|
|
2402
|
-
CreateWebhookDto: {
|
|
2403
|
-
url: string;
|
|
2404
|
-
event_types: string[];
|
|
2405
|
-
description?: string;
|
|
2406
|
-
};
|
|
2407
2817
|
WebhookCreatedResponseDto: {
|
|
2408
2818
|
id: string;
|
|
2409
2819
|
/** @enum {string} */
|
|
@@ -2417,6 +2827,11 @@ interface components {
|
|
|
2417
2827
|
/** @description HMAC secret — only shown once on creation */
|
|
2418
2828
|
secret: string;
|
|
2419
2829
|
};
|
|
2830
|
+
CreateWebhookDto: {
|
|
2831
|
+
url: string;
|
|
2832
|
+
event_types: string[];
|
|
2833
|
+
description?: string;
|
|
2834
|
+
};
|
|
2420
2835
|
WebhookResponseDto: {
|
|
2421
2836
|
id: string;
|
|
2422
2837
|
/** @enum {string} */
|
|
@@ -2452,21 +2867,6 @@ interface components {
|
|
|
2452
2867
|
description?: string | null;
|
|
2453
2868
|
is_active?: boolean;
|
|
2454
2869
|
};
|
|
2455
|
-
CreateApiKeyDto: {
|
|
2456
|
-
/** @description API key name */
|
|
2457
|
-
name: string;
|
|
2458
|
-
/** @description API key description */
|
|
2459
|
-
description?: string;
|
|
2460
|
-
/**
|
|
2461
|
-
* @description Required. `scoped` enforces the `scopes` array on every authorization check (deny if the requested permission isn't listed). `full_access` bypasses RBAC entirely within the key's Application — every permission is granted. Pick `scoped` whenever possible; `full_access` should be a deliberate choice (use cases: bootstrap automation, trusted backend services that legitimately need App-wide access). `scoped` requires a non-empty `scopes` array; `full_access` forbids `scopes`.
|
|
2462
|
-
* @enum {string}
|
|
2463
|
-
*/
|
|
2464
|
-
access_mode: "scoped" | "full_access";
|
|
2465
|
-
/** @description Permission scopes this key is authorized for. Required and must be non-empty when `access_mode` is `scoped`. Must be omitted when `access_mode` is `full_access`. */
|
|
2466
|
-
scopes?: string[];
|
|
2467
|
-
/** @description Expiration date (ISO 8601). Omit for no expiration. */
|
|
2468
|
-
expires_at?: string;
|
|
2469
|
-
};
|
|
2470
2870
|
ApiKeyCreatedResponseDto: {
|
|
2471
2871
|
id: string;
|
|
2472
2872
|
name: string;
|
|
@@ -2485,6 +2885,21 @@ interface components {
|
|
|
2485
2885
|
/** Format: date-time */
|
|
2486
2886
|
created_at: string;
|
|
2487
2887
|
};
|
|
2888
|
+
CreateApiKeyDto: {
|
|
2889
|
+
/** @description API key name */
|
|
2890
|
+
name: string;
|
|
2891
|
+
/** @description API key description */
|
|
2892
|
+
description?: string;
|
|
2893
|
+
/**
|
|
2894
|
+
* @description Required. `scoped` enforces the `scopes` array on every authorization check (deny if the requested permission isn't listed). `full_access` bypasses RBAC entirely within the key's Application — every permission is granted. Pick `scoped` whenever possible; `full_access` should be a deliberate choice (use cases: bootstrap automation, trusted backend services that legitimately need App-wide access). `scoped` requires a non-empty `scopes` array; `full_access` forbids `scopes`.
|
|
2895
|
+
* @enum {string}
|
|
2896
|
+
*/
|
|
2897
|
+
access_mode: "scoped" | "full_access";
|
|
2898
|
+
/** @description Permission scopes this key is authorized for. Required and must be non-empty when `access_mode` is `scoped`. Must be omitted when `access_mode` is `full_access`. */
|
|
2899
|
+
scopes?: string[];
|
|
2900
|
+
/** @description Expiration date (ISO 8601). Omit for no expiration. */
|
|
2901
|
+
expires_at?: string;
|
|
2902
|
+
};
|
|
2488
2903
|
ApiKeyResponseDto: {
|
|
2489
2904
|
id: string;
|
|
2490
2905
|
client_id: string;
|
|
@@ -2563,7 +2978,8 @@ interface operations {
|
|
|
2563
2978
|
ApiPermissionsController_listPermissions: {
|
|
2564
2979
|
parameters: {
|
|
2565
2980
|
query?: {
|
|
2566
|
-
|
|
2981
|
+
/** @description Filter by permission origin. */
|
|
2982
|
+
source?: "system" | "custom";
|
|
2567
2983
|
};
|
|
2568
2984
|
header?: never;
|
|
2569
2985
|
path?: never;
|
|
@@ -2645,7 +3061,9 @@ interface operations {
|
|
|
2645
3061
|
[name: string]: unknown;
|
|
2646
3062
|
};
|
|
2647
3063
|
content: {
|
|
2648
|
-
"application/json":
|
|
3064
|
+
"application/json": {
|
|
3065
|
+
data: components["schemas"]["PermissionResponseDto"];
|
|
3066
|
+
};
|
|
2649
3067
|
};
|
|
2650
3068
|
};
|
|
2651
3069
|
/** @description Invalid or expired token */
|
|
@@ -2709,7 +3127,9 @@ interface operations {
|
|
|
2709
3127
|
[name: string]: unknown;
|
|
2710
3128
|
};
|
|
2711
3129
|
content: {
|
|
2712
|
-
"application/json":
|
|
3130
|
+
"application/json": {
|
|
3131
|
+
data: components["schemas"]["PermissionResponseDto"];
|
|
3132
|
+
};
|
|
2713
3133
|
};
|
|
2714
3134
|
};
|
|
2715
3135
|
/** @description Invalid or expired token */
|
|
@@ -2868,7 +3288,9 @@ interface operations {
|
|
|
2868
3288
|
[name: string]: unknown;
|
|
2869
3289
|
};
|
|
2870
3290
|
content: {
|
|
2871
|
-
"application/json":
|
|
3291
|
+
"application/json": {
|
|
3292
|
+
data: components["schemas"]["PermissionResponseDto"];
|
|
3293
|
+
};
|
|
2872
3294
|
};
|
|
2873
3295
|
};
|
|
2874
3296
|
/** @description Invalid or expired token */
|
|
@@ -2936,26 +3358,115 @@ interface operations {
|
|
|
2936
3358
|
};
|
|
2937
3359
|
};
|
|
2938
3360
|
};
|
|
2939
|
-
|
|
3361
|
+
ApiPermissionsController_getPermissionUsage: {
|
|
2940
3362
|
parameters: {
|
|
2941
3363
|
query?: never;
|
|
2942
3364
|
header?: never;
|
|
2943
|
-
path
|
|
2944
|
-
|
|
2945
|
-
};
|
|
2946
|
-
requestBody: {
|
|
2947
|
-
content: {
|
|
2948
|
-
"application/json": components["schemas"]["EvaluatePermissionDto"];
|
|
3365
|
+
path: {
|
|
3366
|
+
id: string;
|
|
2949
3367
|
};
|
|
3368
|
+
cookie?: never;
|
|
2950
3369
|
};
|
|
3370
|
+
requestBody?: never;
|
|
2951
3371
|
responses: {
|
|
2952
|
-
/** @description
|
|
3372
|
+
/** @description Granting roles and identity reach returned */
|
|
2953
3373
|
200: {
|
|
2954
3374
|
headers: {
|
|
2955
3375
|
[name: string]: unknown;
|
|
2956
3376
|
};
|
|
2957
3377
|
content: {
|
|
2958
|
-
"application/json":
|
|
3378
|
+
"application/json": {
|
|
3379
|
+
data: components["schemas"]["PermissionUsageDto"];
|
|
3380
|
+
};
|
|
3381
|
+
};
|
|
3382
|
+
};
|
|
3383
|
+
/** @description Invalid or expired token */
|
|
3384
|
+
401: {
|
|
3385
|
+
headers: {
|
|
3386
|
+
[name: string]: unknown;
|
|
3387
|
+
};
|
|
3388
|
+
content: {
|
|
3389
|
+
/**
|
|
3390
|
+
* @example {
|
|
3391
|
+
* "error": {
|
|
3392
|
+
* "statusCode": 401,
|
|
3393
|
+
* "code": null,
|
|
3394
|
+
* "message": "Invalid or expired token",
|
|
3395
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
3396
|
+
* "path": "/api/v1/permissions",
|
|
3397
|
+
* "method": "GET"
|
|
3398
|
+
* }
|
|
3399
|
+
* }
|
|
3400
|
+
*/
|
|
3401
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3402
|
+
};
|
|
3403
|
+
};
|
|
3404
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
3405
|
+
403: {
|
|
3406
|
+
headers: {
|
|
3407
|
+
[name: string]: unknown;
|
|
3408
|
+
};
|
|
3409
|
+
content: {
|
|
3410
|
+
/**
|
|
3411
|
+
* @example {
|
|
3412
|
+
* "error": {
|
|
3413
|
+
* "statusCode": 403,
|
|
3414
|
+
* "code": null,
|
|
3415
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
3416
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
3417
|
+
* "path": "/api/v1/permissions",
|
|
3418
|
+
* "method": "GET"
|
|
3419
|
+
* }
|
|
3420
|
+
* }
|
|
3421
|
+
*/
|
|
3422
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3423
|
+
};
|
|
3424
|
+
};
|
|
3425
|
+
/** @description No permission with that id exists in this Environment */
|
|
3426
|
+
404: {
|
|
3427
|
+
headers: {
|
|
3428
|
+
[name: string]: unknown;
|
|
3429
|
+
};
|
|
3430
|
+
content: {
|
|
3431
|
+
/**
|
|
3432
|
+
* @example {
|
|
3433
|
+
* "error": {
|
|
3434
|
+
* "statusCode": 404,
|
|
3435
|
+
* "code": null,
|
|
3436
|
+
* "message": "No permission with that id exists in this Environment",
|
|
3437
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
3438
|
+
* "path": "/api/v1/permissions/{id}/usage",
|
|
3439
|
+
* "method": "GET"
|
|
3440
|
+
* }
|
|
3441
|
+
* }
|
|
3442
|
+
*/
|
|
3443
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3444
|
+
};
|
|
3445
|
+
};
|
|
3446
|
+
};
|
|
3447
|
+
};
|
|
3448
|
+
ApiPermissionsController_evaluate: {
|
|
3449
|
+
parameters: {
|
|
3450
|
+
query?: never;
|
|
3451
|
+
header?: never;
|
|
3452
|
+
path?: never;
|
|
3453
|
+
cookie?: never;
|
|
3454
|
+
};
|
|
3455
|
+
requestBody: {
|
|
3456
|
+
content: {
|
|
3457
|
+
"application/json": components["schemas"]["EvaluatePermissionDto"];
|
|
3458
|
+
};
|
|
3459
|
+
};
|
|
3460
|
+
responses: {
|
|
3461
|
+
/** @description Authorization decision returned */
|
|
3462
|
+
200: {
|
|
3463
|
+
headers: {
|
|
3464
|
+
[name: string]: unknown;
|
|
3465
|
+
};
|
|
3466
|
+
content: {
|
|
3467
|
+
"application/json": {
|
|
3468
|
+
data: components["schemas"]["EvaluateResponseDto"];
|
|
3469
|
+
};
|
|
2959
3470
|
};
|
|
2960
3471
|
};
|
|
2961
3472
|
/** @description Invalid or expired token */
|
|
@@ -3089,7 +3600,9 @@ interface operations {
|
|
|
3089
3600
|
[name: string]: unknown;
|
|
3090
3601
|
};
|
|
3091
3602
|
content: {
|
|
3092
|
-
"application/json":
|
|
3603
|
+
"application/json": {
|
|
3604
|
+
data: components["schemas"]["PermissionTraceDto"];
|
|
3605
|
+
};
|
|
3093
3606
|
};
|
|
3094
3607
|
};
|
|
3095
3608
|
/** @description Invalid or expired token */
|
|
@@ -3252,7 +3765,9 @@ interface operations {
|
|
|
3252
3765
|
[name: string]: unknown;
|
|
3253
3766
|
};
|
|
3254
3767
|
content: {
|
|
3255
|
-
"application/json":
|
|
3768
|
+
"application/json": {
|
|
3769
|
+
data: components["schemas"]["IdentityResponseDto"];
|
|
3770
|
+
};
|
|
3256
3771
|
};
|
|
3257
3772
|
};
|
|
3258
3773
|
/** @description Password rejected — appeared in a known data breach (HaveIBeenPwned check) */
|
|
@@ -3436,7 +3951,9 @@ interface operations {
|
|
|
3436
3951
|
[name: string]: unknown;
|
|
3437
3952
|
};
|
|
3438
3953
|
content: {
|
|
3439
|
-
"application/json":
|
|
3954
|
+
"application/json": {
|
|
3955
|
+
data: components["schemas"]["IdentitiesSummaryDto"];
|
|
3956
|
+
};
|
|
3440
3957
|
};
|
|
3441
3958
|
};
|
|
3442
3959
|
/** @description Invalid or expired token */
|
|
@@ -3624,7 +4141,9 @@ interface operations {
|
|
|
3624
4141
|
[name: string]: unknown;
|
|
3625
4142
|
};
|
|
3626
4143
|
content: {
|
|
3627
|
-
"application/json":
|
|
4144
|
+
"application/json": {
|
|
4145
|
+
data: components["schemas"]["IdentityResponseDto"];
|
|
4146
|
+
};
|
|
3628
4147
|
};
|
|
3629
4148
|
};
|
|
3630
4149
|
/** @description Invalid or expired token */
|
|
@@ -3796,7 +4315,9 @@ interface operations {
|
|
|
3796
4315
|
[name: string]: unknown;
|
|
3797
4316
|
};
|
|
3798
4317
|
content: {
|
|
3799
|
-
"application/json":
|
|
4318
|
+
"application/json": {
|
|
4319
|
+
data: components["schemas"]["IdentityResponseDto"];
|
|
4320
|
+
};
|
|
3800
4321
|
};
|
|
3801
4322
|
};
|
|
3802
4323
|
/** @description Invalid or expired token */
|
|
@@ -3881,7 +4402,9 @@ interface operations {
|
|
|
3881
4402
|
[name: string]: unknown;
|
|
3882
4403
|
};
|
|
3883
4404
|
content: {
|
|
3884
|
-
"application/json":
|
|
4405
|
+
"application/json": {
|
|
4406
|
+
data: components["schemas"]["IdentityDetailResponseDto"];
|
|
4407
|
+
};
|
|
3885
4408
|
};
|
|
3886
4409
|
};
|
|
3887
4410
|
/** @description Invalid or expired token */
|
|
@@ -3966,7 +4489,9 @@ interface operations {
|
|
|
3966
4489
|
[name: string]: unknown;
|
|
3967
4490
|
};
|
|
3968
4491
|
content: {
|
|
3969
|
-
"application/json":
|
|
4492
|
+
"application/json": {
|
|
4493
|
+
data: components["schemas"]["MessageResponseDto"];
|
|
4494
|
+
};
|
|
3970
4495
|
};
|
|
3971
4496
|
};
|
|
3972
4497
|
/** @description Invalid or expired token */
|
|
@@ -4051,7 +4576,9 @@ interface operations {
|
|
|
4051
4576
|
[name: string]: unknown;
|
|
4052
4577
|
};
|
|
4053
4578
|
content: {
|
|
4054
|
-
"application/json":
|
|
4579
|
+
"application/json": {
|
|
4580
|
+
data: components["schemas"]["MessageResponseDto"];
|
|
4581
|
+
};
|
|
4055
4582
|
};
|
|
4056
4583
|
};
|
|
4057
4584
|
/** @description Invalid or expired token */
|
|
@@ -4410,7 +4937,9 @@ interface operations {
|
|
|
4410
4937
|
[name: string]: unknown;
|
|
4411
4938
|
};
|
|
4412
4939
|
content: {
|
|
4413
|
-
"application/json":
|
|
4940
|
+
"application/json": {
|
|
4941
|
+
data: components["schemas"]["AccountIdentityMfaResponseDto"];
|
|
4942
|
+
};
|
|
4414
4943
|
};
|
|
4415
4944
|
};
|
|
4416
4945
|
/** @description Invalid or expired token */
|
|
@@ -4578,7 +5107,9 @@ interface operations {
|
|
|
4578
5107
|
[name: string]: unknown;
|
|
4579
5108
|
};
|
|
4580
5109
|
content: {
|
|
4581
|
-
"application/json":
|
|
5110
|
+
"application/json": {
|
|
5111
|
+
data: components["schemas"]["IdentityAuthStateResponseDto"];
|
|
5112
|
+
};
|
|
4582
5113
|
};
|
|
4583
5114
|
};
|
|
4584
5115
|
/** @description Invalid or expired token */
|
|
@@ -5080,7 +5611,9 @@ interface operations {
|
|
|
5080
5611
|
[name: string]: unknown;
|
|
5081
5612
|
};
|
|
5082
5613
|
content: {
|
|
5083
|
-
"application/json":
|
|
5614
|
+
"application/json": {
|
|
5615
|
+
data: components["schemas"]["ApiIdentityInviteResponseDto"];
|
|
5616
|
+
};
|
|
5084
5617
|
};
|
|
5085
5618
|
};
|
|
5086
5619
|
/** @description Invalid or expired token */
|
|
@@ -5142,7 +5675,9 @@ interface operations {
|
|
|
5142
5675
|
[name: string]: unknown;
|
|
5143
5676
|
};
|
|
5144
5677
|
content: {
|
|
5145
|
-
"application/json":
|
|
5678
|
+
"application/json": {
|
|
5679
|
+
data: components["schemas"]["IdentityInvitesSummaryDto"];
|
|
5680
|
+
};
|
|
5146
5681
|
};
|
|
5147
5682
|
};
|
|
5148
5683
|
/** @description Invalid or expired token */
|
|
@@ -5330,7 +5865,9 @@ interface operations {
|
|
|
5330
5865
|
[name: string]: unknown;
|
|
5331
5866
|
};
|
|
5332
5867
|
content: {
|
|
5333
|
-
"application/json":
|
|
5868
|
+
"application/json": {
|
|
5869
|
+
data: components["schemas"]["ApiIdentityInviteResendResponseDto"];
|
|
5870
|
+
};
|
|
5334
5871
|
};
|
|
5335
5872
|
};
|
|
5336
5873
|
/** @description Invite is no longer pending */
|
|
@@ -5541,7 +6078,9 @@ interface operations {
|
|
|
5541
6078
|
[name: string]: unknown;
|
|
5542
6079
|
};
|
|
5543
6080
|
content: {
|
|
5544
|
-
"application/json":
|
|
6081
|
+
"application/json": {
|
|
6082
|
+
data: components["schemas"]["ScopedHierarchyTreeResponseDto"];
|
|
6083
|
+
};
|
|
5545
6084
|
};
|
|
5546
6085
|
};
|
|
5547
6086
|
/** @description The hierarchy is unchanged since the supplied `ETag`. No body; keep using the cached tree. */
|
|
@@ -5614,7 +6153,9 @@ interface operations {
|
|
|
5614
6153
|
[name: string]: unknown;
|
|
5615
6154
|
};
|
|
5616
6155
|
content: {
|
|
5617
|
-
"application/json":
|
|
6156
|
+
"application/json": {
|
|
6157
|
+
data: components["schemas"]["NodeResponseDto"];
|
|
6158
|
+
};
|
|
5618
6159
|
};
|
|
5619
6160
|
};
|
|
5620
6161
|
/** @description Invalid parent-child relationship */
|
|
@@ -5794,7 +6335,9 @@ interface operations {
|
|
|
5794
6335
|
[name: string]: unknown;
|
|
5795
6336
|
};
|
|
5796
6337
|
content: {
|
|
5797
|
-
"application/json":
|
|
6338
|
+
"application/json": {
|
|
6339
|
+
data: components["schemas"]["NodeAccessResponseDto"];
|
|
6340
|
+
};
|
|
5798
6341
|
};
|
|
5799
6342
|
};
|
|
5800
6343
|
/** @description Invalid or expired token */
|
|
@@ -5995,7 +6538,9 @@ interface operations {
|
|
|
5995
6538
|
[name: string]: unknown;
|
|
5996
6539
|
};
|
|
5997
6540
|
content: {
|
|
5998
|
-
"application/json":
|
|
6541
|
+
"application/json": {
|
|
6542
|
+
data: components["schemas"]["NodeResponseDto"];
|
|
6543
|
+
};
|
|
5999
6544
|
};
|
|
6000
6545
|
};
|
|
6001
6546
|
/** @description Invalid parent-child relationship */
|
|
@@ -6122,7 +6667,141 @@ interface operations {
|
|
|
6122
6667
|
[name: string]: unknown;
|
|
6123
6668
|
};
|
|
6124
6669
|
content: {
|
|
6125
|
-
"application/json":
|
|
6670
|
+
"application/json": {
|
|
6671
|
+
data: components["schemas"]["HierarchyTreeNodeDto"];
|
|
6672
|
+
};
|
|
6673
|
+
};
|
|
6674
|
+
};
|
|
6675
|
+
/** @description Invalid or expired token */
|
|
6676
|
+
401: {
|
|
6677
|
+
headers: {
|
|
6678
|
+
[name: string]: unknown;
|
|
6679
|
+
};
|
|
6680
|
+
content: {
|
|
6681
|
+
/**
|
|
6682
|
+
* @example {
|
|
6683
|
+
* "error": {
|
|
6684
|
+
* "statusCode": 401,
|
|
6685
|
+
* "code": null,
|
|
6686
|
+
* "message": "Invalid or expired token",
|
|
6687
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6688
|
+
* "path": "/api/v1/nodes",
|
|
6689
|
+
* "method": "GET"
|
|
6690
|
+
* }
|
|
6691
|
+
* }
|
|
6692
|
+
*/
|
|
6693
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6694
|
+
};
|
|
6695
|
+
};
|
|
6696
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
6697
|
+
403: {
|
|
6698
|
+
headers: {
|
|
6699
|
+
[name: string]: unknown;
|
|
6700
|
+
};
|
|
6701
|
+
content: {
|
|
6702
|
+
/**
|
|
6703
|
+
* @example {
|
|
6704
|
+
* "error": {
|
|
6705
|
+
* "statusCode": 403,
|
|
6706
|
+
* "code": null,
|
|
6707
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
6708
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6709
|
+
* "path": "/api/v1/nodes",
|
|
6710
|
+
* "method": "GET"
|
|
6711
|
+
* }
|
|
6712
|
+
* }
|
|
6713
|
+
*/
|
|
6714
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6715
|
+
};
|
|
6716
|
+
};
|
|
6717
|
+
};
|
|
6718
|
+
};
|
|
6719
|
+
ApiNodesController_getAncestors: {
|
|
6720
|
+
parameters: {
|
|
6721
|
+
query?: never;
|
|
6722
|
+
header?: never;
|
|
6723
|
+
path: {
|
|
6724
|
+
id: string;
|
|
6725
|
+
};
|
|
6726
|
+
cookie?: never;
|
|
6727
|
+
};
|
|
6728
|
+
requestBody?: never;
|
|
6729
|
+
responses: {
|
|
6730
|
+
/** @description Ancestors returned root-first */
|
|
6731
|
+
200: {
|
|
6732
|
+
headers: {
|
|
6733
|
+
[name: string]: unknown;
|
|
6734
|
+
};
|
|
6735
|
+
content: {
|
|
6736
|
+
"application/json": {
|
|
6737
|
+
items: components["schemas"]["NodeResponseDto"][];
|
|
6738
|
+
};
|
|
6739
|
+
};
|
|
6740
|
+
};
|
|
6741
|
+
/** @description Invalid or expired token */
|
|
6742
|
+
401: {
|
|
6743
|
+
headers: {
|
|
6744
|
+
[name: string]: unknown;
|
|
6745
|
+
};
|
|
6746
|
+
content: {
|
|
6747
|
+
/**
|
|
6748
|
+
* @example {
|
|
6749
|
+
* "error": {
|
|
6750
|
+
* "statusCode": 401,
|
|
6751
|
+
* "code": null,
|
|
6752
|
+
* "message": "Invalid or expired token",
|
|
6753
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6754
|
+
* "path": "/api/v1/nodes",
|
|
6755
|
+
* "method": "GET"
|
|
6756
|
+
* }
|
|
6757
|
+
* }
|
|
6758
|
+
*/
|
|
6759
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6760
|
+
};
|
|
6761
|
+
};
|
|
6762
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
6763
|
+
403: {
|
|
6764
|
+
headers: {
|
|
6765
|
+
[name: string]: unknown;
|
|
6766
|
+
};
|
|
6767
|
+
content: {
|
|
6768
|
+
/**
|
|
6769
|
+
* @example {
|
|
6770
|
+
* "error": {
|
|
6771
|
+
* "statusCode": 403,
|
|
6772
|
+
* "code": null,
|
|
6773
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
6774
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6775
|
+
* "path": "/api/v1/nodes",
|
|
6776
|
+
* "method": "GET"
|
|
6777
|
+
* }
|
|
6778
|
+
* }
|
|
6779
|
+
*/
|
|
6780
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6781
|
+
};
|
|
6782
|
+
};
|
|
6783
|
+
};
|
|
6784
|
+
};
|
|
6785
|
+
ApiNodesController_getChildren: {
|
|
6786
|
+
parameters: {
|
|
6787
|
+
query?: never;
|
|
6788
|
+
header?: never;
|
|
6789
|
+
path: {
|
|
6790
|
+
id: string;
|
|
6791
|
+
};
|
|
6792
|
+
cookie?: never;
|
|
6793
|
+
};
|
|
6794
|
+
requestBody?: never;
|
|
6795
|
+
responses: {
|
|
6796
|
+
/** @description Children returned */
|
|
6797
|
+
200: {
|
|
6798
|
+
headers: {
|
|
6799
|
+
[name: string]: unknown;
|
|
6800
|
+
};
|
|
6801
|
+
content: {
|
|
6802
|
+
"application/json": {
|
|
6803
|
+
items: components["schemas"]["NodeResponseDto"][];
|
|
6804
|
+
};
|
|
6126
6805
|
};
|
|
6127
6806
|
};
|
|
6128
6807
|
/** @description Invalid or expired token */
|
|
@@ -6155,12 +6834,1601 @@ interface operations {
|
|
|
6155
6834
|
/**
|
|
6156
6835
|
* @example {
|
|
6157
6836
|
* "error": {
|
|
6158
|
-
* "statusCode": 403,
|
|
6837
|
+
* "statusCode": 403,
|
|
6838
|
+
* "code": null,
|
|
6839
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
6840
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6841
|
+
* "path": "/api/v1/nodes",
|
|
6842
|
+
* "method": "GET"
|
|
6843
|
+
* }
|
|
6844
|
+
* }
|
|
6845
|
+
*/
|
|
6846
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6847
|
+
};
|
|
6848
|
+
};
|
|
6849
|
+
};
|
|
6850
|
+
};
|
|
6851
|
+
ApiNodesController_moveNode: {
|
|
6852
|
+
parameters: {
|
|
6853
|
+
query?: never;
|
|
6854
|
+
header: {
|
|
6855
|
+
"if-match": string;
|
|
6856
|
+
/** @description Optimistic-lock version of the resource. Send the `version` field returned on read; the server rejects with 409 if the row has changed since. */
|
|
6857
|
+
"If-Match"?: string;
|
|
6858
|
+
};
|
|
6859
|
+
path: {
|
|
6860
|
+
id: string;
|
|
6861
|
+
};
|
|
6862
|
+
cookie?: never;
|
|
6863
|
+
};
|
|
6864
|
+
requestBody: {
|
|
6865
|
+
content: {
|
|
6866
|
+
"application/json": components["schemas"]["MoveNodeDto"];
|
|
6867
|
+
};
|
|
6868
|
+
};
|
|
6869
|
+
responses: {
|
|
6870
|
+
/** @description Node moved successfully */
|
|
6871
|
+
200: {
|
|
6872
|
+
headers: {
|
|
6873
|
+
[name: string]: unknown;
|
|
6874
|
+
};
|
|
6875
|
+
content: {
|
|
6876
|
+
"application/json": {
|
|
6877
|
+
data: components["schemas"]["NodeResponseDto"];
|
|
6878
|
+
};
|
|
6879
|
+
};
|
|
6880
|
+
};
|
|
6881
|
+
/** @description Invalid or expired token */
|
|
6882
|
+
401: {
|
|
6883
|
+
headers: {
|
|
6884
|
+
[name: string]: unknown;
|
|
6885
|
+
};
|
|
6886
|
+
content: {
|
|
6887
|
+
/**
|
|
6888
|
+
* @example {
|
|
6889
|
+
* "error": {
|
|
6890
|
+
* "statusCode": 401,
|
|
6891
|
+
* "code": null,
|
|
6892
|
+
* "message": "Invalid or expired token",
|
|
6893
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6894
|
+
* "path": "/api/v1/nodes",
|
|
6895
|
+
* "method": "GET"
|
|
6896
|
+
* }
|
|
6897
|
+
* }
|
|
6898
|
+
*/
|
|
6899
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6900
|
+
};
|
|
6901
|
+
};
|
|
6902
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
6903
|
+
403: {
|
|
6904
|
+
headers: {
|
|
6905
|
+
[name: string]: unknown;
|
|
6906
|
+
};
|
|
6907
|
+
content: {
|
|
6908
|
+
/**
|
|
6909
|
+
* @example {
|
|
6910
|
+
* "error": {
|
|
6911
|
+
* "statusCode": 403,
|
|
6912
|
+
* "code": null,
|
|
6913
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
6914
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6915
|
+
* "path": "/api/v1/nodes",
|
|
6916
|
+
* "method": "GET"
|
|
6917
|
+
* }
|
|
6918
|
+
* }
|
|
6919
|
+
*/
|
|
6920
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6921
|
+
};
|
|
6922
|
+
};
|
|
6923
|
+
/** @description Node not found */
|
|
6924
|
+
404: {
|
|
6925
|
+
headers: {
|
|
6926
|
+
[name: string]: unknown;
|
|
6927
|
+
};
|
|
6928
|
+
content: {
|
|
6929
|
+
/**
|
|
6930
|
+
* @example {
|
|
6931
|
+
* "error": {
|
|
6932
|
+
* "statusCode": 404,
|
|
6933
|
+
* "code": null,
|
|
6934
|
+
* "message": "Node not found",
|
|
6935
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6936
|
+
* "path": "/api/v1/nodes/{id}/move",
|
|
6937
|
+
* "method": "POST"
|
|
6938
|
+
* }
|
|
6939
|
+
* }
|
|
6940
|
+
*/
|
|
6941
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6942
|
+
};
|
|
6943
|
+
};
|
|
6944
|
+
/** @description Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry. */
|
|
6945
|
+
409: {
|
|
6946
|
+
headers: {
|
|
6947
|
+
[name: string]: unknown;
|
|
6948
|
+
};
|
|
6949
|
+
content: {
|
|
6950
|
+
/**
|
|
6951
|
+
* @example {
|
|
6952
|
+
* "error": {
|
|
6953
|
+
* "statusCode": 409,
|
|
6954
|
+
* "code": null,
|
|
6955
|
+
* "message": "Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry.",
|
|
6956
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6957
|
+
* "path": "/api/v1/nodes/{id}/move",
|
|
6958
|
+
* "method": "POST"
|
|
6959
|
+
* }
|
|
6960
|
+
* }
|
|
6961
|
+
*/
|
|
6962
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6963
|
+
};
|
|
6964
|
+
};
|
|
6965
|
+
};
|
|
6966
|
+
};
|
|
6967
|
+
ApiNodesController_listIdentityAssignments: {
|
|
6968
|
+
parameters: {
|
|
6969
|
+
query?: {
|
|
6970
|
+
/** @description Page number (1-based) */
|
|
6971
|
+
page?: number;
|
|
6972
|
+
/** @description Items per page (1-100, default 20) */
|
|
6973
|
+
take?: number;
|
|
6974
|
+
/** @description Search term */
|
|
6975
|
+
q?: string;
|
|
6976
|
+
/** @description Sort field */
|
|
6977
|
+
sort_by?: "name" | "role" | "access_type" | "created_at";
|
|
6978
|
+
/** @description Sort order */
|
|
6979
|
+
order?: "asc" | "desc";
|
|
6980
|
+
/** @description Filter by role ID */
|
|
6981
|
+
role_id?: string;
|
|
6982
|
+
/** @description Filter by access type */
|
|
6983
|
+
access_type?: "direct" | "inherited";
|
|
6984
|
+
/** @description Filter by assignment status */
|
|
6985
|
+
status?: "active" | "scheduled" | "expired";
|
|
6986
|
+
/** @description Filter by source node ID */
|
|
6987
|
+
source_node_id?: string;
|
|
6988
|
+
};
|
|
6989
|
+
header?: never;
|
|
6990
|
+
path: {
|
|
6991
|
+
id: string;
|
|
6992
|
+
};
|
|
6993
|
+
cookie?: never;
|
|
6994
|
+
};
|
|
6995
|
+
requestBody?: never;
|
|
6996
|
+
responses: {
|
|
6997
|
+
/** @description Paginated list */
|
|
6998
|
+
200: {
|
|
6999
|
+
headers: {
|
|
7000
|
+
[name: string]: unknown;
|
|
7001
|
+
};
|
|
7002
|
+
content: {
|
|
7003
|
+
"application/json": {
|
|
7004
|
+
items: components["schemas"]["IdentityAssignmentRowDto"][];
|
|
7005
|
+
pagination: components["schemas"]["PageMetaDto"];
|
|
7006
|
+
};
|
|
7007
|
+
};
|
|
7008
|
+
};
|
|
7009
|
+
/** @description Invalid or expired token */
|
|
7010
|
+
401: {
|
|
7011
|
+
headers: {
|
|
7012
|
+
[name: string]: unknown;
|
|
7013
|
+
};
|
|
7014
|
+
content: {
|
|
7015
|
+
/**
|
|
7016
|
+
* @example {
|
|
7017
|
+
* "error": {
|
|
7018
|
+
* "statusCode": 401,
|
|
7019
|
+
* "code": null,
|
|
7020
|
+
* "message": "Invalid or expired token",
|
|
7021
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7022
|
+
* "path": "/api/v1/nodes",
|
|
7023
|
+
* "method": "GET"
|
|
7024
|
+
* }
|
|
7025
|
+
* }
|
|
7026
|
+
*/
|
|
7027
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7028
|
+
};
|
|
7029
|
+
};
|
|
7030
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7031
|
+
403: {
|
|
7032
|
+
headers: {
|
|
7033
|
+
[name: string]: unknown;
|
|
7034
|
+
};
|
|
7035
|
+
content: {
|
|
7036
|
+
/**
|
|
7037
|
+
* @example {
|
|
7038
|
+
* "error": {
|
|
7039
|
+
* "statusCode": 403,
|
|
7040
|
+
* "code": null,
|
|
7041
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7042
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7043
|
+
* "path": "/api/v1/nodes",
|
|
7044
|
+
* "method": "GET"
|
|
7045
|
+
* }
|
|
7046
|
+
* }
|
|
7047
|
+
*/
|
|
7048
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7049
|
+
};
|
|
7050
|
+
};
|
|
7051
|
+
/** @description Node not found */
|
|
7052
|
+
404: {
|
|
7053
|
+
headers: {
|
|
7054
|
+
[name: string]: unknown;
|
|
7055
|
+
};
|
|
7056
|
+
content: {
|
|
7057
|
+
/**
|
|
7058
|
+
* @example {
|
|
7059
|
+
* "error": {
|
|
7060
|
+
* "statusCode": 404,
|
|
7061
|
+
* "code": null,
|
|
7062
|
+
* "message": "Node not found",
|
|
7063
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7064
|
+
* "path": "/api/v1/nodes/{id}/identities",
|
|
7065
|
+
* "method": "GET"
|
|
7066
|
+
* }
|
|
7067
|
+
* }
|
|
7068
|
+
*/
|
|
7069
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7070
|
+
};
|
|
7071
|
+
};
|
|
7072
|
+
};
|
|
7073
|
+
};
|
|
7074
|
+
ApiNodesController_getIdentityAssignmentsSummary: {
|
|
7075
|
+
parameters: {
|
|
7076
|
+
query?: never;
|
|
7077
|
+
header?: never;
|
|
7078
|
+
path: {
|
|
7079
|
+
id: string;
|
|
7080
|
+
};
|
|
7081
|
+
cookie?: never;
|
|
7082
|
+
};
|
|
7083
|
+
requestBody?: never;
|
|
7084
|
+
responses: {
|
|
7085
|
+
/** @description Identity counts by status returned */
|
|
7086
|
+
200: {
|
|
7087
|
+
headers: {
|
|
7088
|
+
[name: string]: unknown;
|
|
7089
|
+
};
|
|
7090
|
+
content: {
|
|
7091
|
+
"application/json": {
|
|
7092
|
+
data: components["schemas"]["NodeIdentitiesSummaryDto"];
|
|
7093
|
+
};
|
|
7094
|
+
};
|
|
7095
|
+
};
|
|
7096
|
+
/** @description Invalid or expired token */
|
|
7097
|
+
401: {
|
|
7098
|
+
headers: {
|
|
7099
|
+
[name: string]: unknown;
|
|
7100
|
+
};
|
|
7101
|
+
content: {
|
|
7102
|
+
/**
|
|
7103
|
+
* @example {
|
|
7104
|
+
* "error": {
|
|
7105
|
+
* "statusCode": 401,
|
|
7106
|
+
* "code": null,
|
|
7107
|
+
* "message": "Invalid or expired token",
|
|
7108
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7109
|
+
* "path": "/api/v1/nodes",
|
|
7110
|
+
* "method": "GET"
|
|
7111
|
+
* }
|
|
7112
|
+
* }
|
|
7113
|
+
*/
|
|
7114
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7115
|
+
};
|
|
7116
|
+
};
|
|
7117
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7118
|
+
403: {
|
|
7119
|
+
headers: {
|
|
7120
|
+
[name: string]: unknown;
|
|
7121
|
+
};
|
|
7122
|
+
content: {
|
|
7123
|
+
/**
|
|
7124
|
+
* @example {
|
|
7125
|
+
* "error": {
|
|
7126
|
+
* "statusCode": 403,
|
|
7127
|
+
* "code": null,
|
|
7128
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7129
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7130
|
+
* "path": "/api/v1/nodes",
|
|
7131
|
+
* "method": "GET"
|
|
7132
|
+
* }
|
|
7133
|
+
* }
|
|
7134
|
+
*/
|
|
7135
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7136
|
+
};
|
|
7137
|
+
};
|
|
7138
|
+
/** @description Node not found */
|
|
7139
|
+
404: {
|
|
7140
|
+
headers: {
|
|
7141
|
+
[name: string]: unknown;
|
|
7142
|
+
};
|
|
7143
|
+
content: {
|
|
7144
|
+
/**
|
|
7145
|
+
* @example {
|
|
7146
|
+
* "error": {
|
|
7147
|
+
* "statusCode": 404,
|
|
7148
|
+
* "code": null,
|
|
7149
|
+
* "message": "Node not found",
|
|
7150
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7151
|
+
* "path": "/api/v1/nodes/{id}/identities/summary",
|
|
7152
|
+
* "method": "GET"
|
|
7153
|
+
* }
|
|
7154
|
+
* }
|
|
7155
|
+
*/
|
|
7156
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7157
|
+
};
|
|
7158
|
+
};
|
|
7159
|
+
};
|
|
7160
|
+
};
|
|
7161
|
+
ApiOrganizationsController_listOrganizations: {
|
|
7162
|
+
parameters: {
|
|
7163
|
+
query?: {
|
|
7164
|
+
/** @description Page number (1-based) */
|
|
7165
|
+
page?: number;
|
|
7166
|
+
/** @description Items per page (1-100, default 20) */
|
|
7167
|
+
take?: number;
|
|
7168
|
+
/** @description Search term */
|
|
7169
|
+
q?: string;
|
|
7170
|
+
/** @description Column to sort by. Allowed values depend on the endpoint. */
|
|
7171
|
+
sort_by?: string;
|
|
7172
|
+
/** @description Sort direction */
|
|
7173
|
+
order?: "asc" | "desc";
|
|
7174
|
+
};
|
|
7175
|
+
header?: never;
|
|
7176
|
+
path?: never;
|
|
7177
|
+
cookie?: never;
|
|
7178
|
+
};
|
|
7179
|
+
requestBody?: never;
|
|
7180
|
+
responses: {
|
|
7181
|
+
/** @description Paginated list */
|
|
7182
|
+
200: {
|
|
7183
|
+
headers: {
|
|
7184
|
+
[name: string]: unknown;
|
|
7185
|
+
};
|
|
7186
|
+
content: {
|
|
7187
|
+
"application/json": {
|
|
7188
|
+
items: components["schemas"]["OrganizationResponseDto"][];
|
|
7189
|
+
pagination: components["schemas"]["PageMetaDto"];
|
|
7190
|
+
};
|
|
7191
|
+
};
|
|
7192
|
+
};
|
|
7193
|
+
/** @description Invalid or expired token */
|
|
7194
|
+
401: {
|
|
7195
|
+
headers: {
|
|
7196
|
+
[name: string]: unknown;
|
|
7197
|
+
};
|
|
7198
|
+
content: {
|
|
7199
|
+
/**
|
|
7200
|
+
* @example {
|
|
7201
|
+
* "error": {
|
|
7202
|
+
* "statusCode": 401,
|
|
7203
|
+
* "code": null,
|
|
7204
|
+
* "message": "Invalid or expired token",
|
|
7205
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7206
|
+
* "path": "/api/v1/organizations",
|
|
7207
|
+
* "method": "GET"
|
|
7208
|
+
* }
|
|
7209
|
+
* }
|
|
7210
|
+
*/
|
|
7211
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7212
|
+
};
|
|
7213
|
+
};
|
|
7214
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7215
|
+
403: {
|
|
7216
|
+
headers: {
|
|
7217
|
+
[name: string]: unknown;
|
|
7218
|
+
};
|
|
7219
|
+
content: {
|
|
7220
|
+
/**
|
|
7221
|
+
* @example {
|
|
7222
|
+
* "error": {
|
|
7223
|
+
* "statusCode": 403,
|
|
7224
|
+
* "code": null,
|
|
7225
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7226
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7227
|
+
* "path": "/api/v1/organizations",
|
|
7228
|
+
* "method": "GET"
|
|
7229
|
+
* }
|
|
7230
|
+
* }
|
|
7231
|
+
*/
|
|
7232
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7233
|
+
};
|
|
7234
|
+
};
|
|
7235
|
+
};
|
|
7236
|
+
};
|
|
7237
|
+
ApiOrganizationsController_createOrganization: {
|
|
7238
|
+
parameters: {
|
|
7239
|
+
query?: never;
|
|
7240
|
+
header?: never;
|
|
7241
|
+
path?: never;
|
|
7242
|
+
cookie?: never;
|
|
7243
|
+
};
|
|
7244
|
+
requestBody: {
|
|
7245
|
+
content: {
|
|
7246
|
+
"application/json": components["schemas"]["CreateOrganizationDto"];
|
|
7247
|
+
};
|
|
7248
|
+
};
|
|
7249
|
+
responses: {
|
|
7250
|
+
/** @description Organization created */
|
|
7251
|
+
201: {
|
|
7252
|
+
headers: {
|
|
7253
|
+
[name: string]: unknown;
|
|
7254
|
+
};
|
|
7255
|
+
content: {
|
|
7256
|
+
"application/json": {
|
|
7257
|
+
data: components["schemas"]["OrganizationResponseDto"];
|
|
7258
|
+
};
|
|
7259
|
+
};
|
|
7260
|
+
};
|
|
7261
|
+
/** @description Invalid or expired token */
|
|
7262
|
+
401: {
|
|
7263
|
+
headers: {
|
|
7264
|
+
[name: string]: unknown;
|
|
7265
|
+
};
|
|
7266
|
+
content: {
|
|
7267
|
+
/**
|
|
7268
|
+
* @example {
|
|
7269
|
+
* "error": {
|
|
7270
|
+
* "statusCode": 401,
|
|
7271
|
+
* "code": null,
|
|
7272
|
+
* "message": "Invalid or expired token",
|
|
7273
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7274
|
+
* "path": "/api/v1/organizations",
|
|
7275
|
+
* "method": "GET"
|
|
7276
|
+
* }
|
|
7277
|
+
* }
|
|
7278
|
+
*/
|
|
7279
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7280
|
+
};
|
|
7281
|
+
};
|
|
7282
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7283
|
+
403: {
|
|
7284
|
+
headers: {
|
|
7285
|
+
[name: string]: unknown;
|
|
7286
|
+
};
|
|
7287
|
+
content: {
|
|
7288
|
+
/**
|
|
7289
|
+
* @example {
|
|
7290
|
+
* "error": {
|
|
7291
|
+
* "statusCode": 403,
|
|
7292
|
+
* "code": null,
|
|
7293
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7294
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7295
|
+
* "path": "/api/v1/organizations",
|
|
7296
|
+
* "method": "GET"
|
|
7297
|
+
* }
|
|
7298
|
+
* }
|
|
7299
|
+
*/
|
|
7300
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7301
|
+
};
|
|
7302
|
+
};
|
|
7303
|
+
/** @description Organizations are not enabled on this Environment; switch the container on first */
|
|
7304
|
+
409: {
|
|
7305
|
+
headers: {
|
|
7306
|
+
[name: string]: unknown;
|
|
7307
|
+
};
|
|
7308
|
+
content: {
|
|
7309
|
+
/**
|
|
7310
|
+
* @example {
|
|
7311
|
+
* "error": {
|
|
7312
|
+
* "statusCode": 409,
|
|
7313
|
+
* "code": null,
|
|
7314
|
+
* "message": "Organizations are not enabled on this Environment; switch the container on first",
|
|
7315
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7316
|
+
* "path": "/api/v1/organizations",
|
|
7317
|
+
* "method": "POST"
|
|
7318
|
+
* }
|
|
7319
|
+
* }
|
|
7320
|
+
*/
|
|
7321
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7322
|
+
};
|
|
7323
|
+
};
|
|
7324
|
+
};
|
|
7325
|
+
};
|
|
7326
|
+
ApiOrganizationsController_deleteAllOrganizations: {
|
|
7327
|
+
parameters: {
|
|
7328
|
+
query?: never;
|
|
7329
|
+
header?: never;
|
|
7330
|
+
path?: never;
|
|
7331
|
+
cookie?: never;
|
|
7332
|
+
};
|
|
7333
|
+
requestBody?: never;
|
|
7334
|
+
responses: {
|
|
7335
|
+
/** @description Every organization deleted with its memberships, pending invitations, and subtree */
|
|
7336
|
+
204: {
|
|
7337
|
+
headers: {
|
|
7338
|
+
[name: string]: unknown;
|
|
7339
|
+
};
|
|
7340
|
+
content?: never;
|
|
7341
|
+
};
|
|
7342
|
+
/** @description Invalid or expired token */
|
|
7343
|
+
401: {
|
|
7344
|
+
headers: {
|
|
7345
|
+
[name: string]: unknown;
|
|
7346
|
+
};
|
|
7347
|
+
content: {
|
|
7348
|
+
/**
|
|
7349
|
+
* @example {
|
|
7350
|
+
* "error": {
|
|
7351
|
+
* "statusCode": 401,
|
|
7352
|
+
* "code": null,
|
|
7353
|
+
* "message": "Invalid or expired token",
|
|
7354
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7355
|
+
* "path": "/api/v1/organizations",
|
|
7356
|
+
* "method": "GET"
|
|
7357
|
+
* }
|
|
7358
|
+
* }
|
|
7359
|
+
*/
|
|
7360
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7361
|
+
};
|
|
7362
|
+
};
|
|
7363
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7364
|
+
403: {
|
|
7365
|
+
headers: {
|
|
7366
|
+
[name: string]: unknown;
|
|
7367
|
+
};
|
|
7368
|
+
content: {
|
|
7369
|
+
/**
|
|
7370
|
+
* @example {
|
|
7371
|
+
* "error": {
|
|
7372
|
+
* "statusCode": 403,
|
|
7373
|
+
* "code": null,
|
|
7374
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7375
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7376
|
+
* "path": "/api/v1/organizations",
|
|
7377
|
+
* "method": "GET"
|
|
7378
|
+
* }
|
|
7379
|
+
* }
|
|
7380
|
+
*/
|
|
7381
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7382
|
+
};
|
|
7383
|
+
};
|
|
7384
|
+
};
|
|
7385
|
+
};
|
|
7386
|
+
ApiOrganizationsController_getOrganization: {
|
|
7387
|
+
parameters: {
|
|
7388
|
+
query?: never;
|
|
7389
|
+
header?: never;
|
|
7390
|
+
path: {
|
|
7391
|
+
id: string;
|
|
7392
|
+
};
|
|
7393
|
+
cookie?: never;
|
|
7394
|
+
};
|
|
7395
|
+
requestBody?: never;
|
|
7396
|
+
responses: {
|
|
7397
|
+
/** @description Organization returned */
|
|
7398
|
+
200: {
|
|
7399
|
+
headers: {
|
|
7400
|
+
[name: string]: unknown;
|
|
7401
|
+
};
|
|
7402
|
+
content: {
|
|
7403
|
+
"application/json": {
|
|
7404
|
+
data: components["schemas"]["OrganizationResponseDto"];
|
|
7405
|
+
};
|
|
7406
|
+
};
|
|
7407
|
+
};
|
|
7408
|
+
/** @description Invalid or expired token */
|
|
7409
|
+
401: {
|
|
7410
|
+
headers: {
|
|
7411
|
+
[name: string]: unknown;
|
|
7412
|
+
};
|
|
7413
|
+
content: {
|
|
7414
|
+
/**
|
|
7415
|
+
* @example {
|
|
7416
|
+
* "error": {
|
|
7417
|
+
* "statusCode": 401,
|
|
7418
|
+
* "code": null,
|
|
7419
|
+
* "message": "Invalid or expired token",
|
|
7420
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7421
|
+
* "path": "/api/v1/organizations",
|
|
7422
|
+
* "method": "GET"
|
|
7423
|
+
* }
|
|
7424
|
+
* }
|
|
7425
|
+
*/
|
|
7426
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7427
|
+
};
|
|
7428
|
+
};
|
|
7429
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7430
|
+
403: {
|
|
7431
|
+
headers: {
|
|
7432
|
+
[name: string]: unknown;
|
|
7433
|
+
};
|
|
7434
|
+
content: {
|
|
7435
|
+
/**
|
|
7436
|
+
* @example {
|
|
7437
|
+
* "error": {
|
|
7438
|
+
* "statusCode": 403,
|
|
7439
|
+
* "code": null,
|
|
7440
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7441
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7442
|
+
* "path": "/api/v1/organizations",
|
|
7443
|
+
* "method": "GET"
|
|
7444
|
+
* }
|
|
7445
|
+
* }
|
|
7446
|
+
*/
|
|
7447
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7448
|
+
};
|
|
7449
|
+
};
|
|
7450
|
+
/** @description Organization not found */
|
|
7451
|
+
404: {
|
|
7452
|
+
headers: {
|
|
7453
|
+
[name: string]: unknown;
|
|
7454
|
+
};
|
|
7455
|
+
content: {
|
|
7456
|
+
/**
|
|
7457
|
+
* @example {
|
|
7458
|
+
* "error": {
|
|
7459
|
+
* "statusCode": 404,
|
|
7460
|
+
* "code": null,
|
|
7461
|
+
* "message": "Organization not found",
|
|
7462
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7463
|
+
* "path": "/api/v1/organizations/{id}",
|
|
7464
|
+
* "method": "GET"
|
|
7465
|
+
* }
|
|
7466
|
+
* }
|
|
7467
|
+
*/
|
|
7468
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7469
|
+
};
|
|
7470
|
+
};
|
|
7471
|
+
};
|
|
7472
|
+
};
|
|
7473
|
+
ApiOrganizationsController_deleteOrganization: {
|
|
7474
|
+
parameters: {
|
|
7475
|
+
query?: never;
|
|
7476
|
+
header: {
|
|
7477
|
+
"if-match": string;
|
|
7478
|
+
/** @description Optimistic-lock version of the resource. Send the `version` field returned on read; the server rejects with 409 if the row has changed since. */
|
|
7479
|
+
"If-Match"?: string;
|
|
7480
|
+
};
|
|
7481
|
+
path: {
|
|
7482
|
+
id: string;
|
|
7483
|
+
};
|
|
7484
|
+
cookie?: never;
|
|
7485
|
+
};
|
|
7486
|
+
requestBody?: never;
|
|
7487
|
+
responses: {
|
|
7488
|
+
/** @description Organization deleted */
|
|
7489
|
+
204: {
|
|
7490
|
+
headers: {
|
|
7491
|
+
[name: string]: unknown;
|
|
7492
|
+
};
|
|
7493
|
+
content?: never;
|
|
7494
|
+
};
|
|
7495
|
+
/** @description Invalid or expired token */
|
|
7496
|
+
401: {
|
|
7497
|
+
headers: {
|
|
7498
|
+
[name: string]: unknown;
|
|
7499
|
+
};
|
|
7500
|
+
content: {
|
|
7501
|
+
/**
|
|
7502
|
+
* @example {
|
|
7503
|
+
* "error": {
|
|
7504
|
+
* "statusCode": 401,
|
|
7505
|
+
* "code": null,
|
|
7506
|
+
* "message": "Invalid or expired token",
|
|
7507
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7508
|
+
* "path": "/api/v1/organizations",
|
|
7509
|
+
* "method": "GET"
|
|
7510
|
+
* }
|
|
7511
|
+
* }
|
|
7512
|
+
*/
|
|
7513
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7514
|
+
};
|
|
7515
|
+
};
|
|
7516
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7517
|
+
403: {
|
|
7518
|
+
headers: {
|
|
7519
|
+
[name: string]: unknown;
|
|
7520
|
+
};
|
|
7521
|
+
content: {
|
|
7522
|
+
/**
|
|
7523
|
+
* @example {
|
|
7524
|
+
* "error": {
|
|
7525
|
+
* "statusCode": 403,
|
|
7526
|
+
* "code": null,
|
|
7527
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7528
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7529
|
+
* "path": "/api/v1/organizations",
|
|
7530
|
+
* "method": "GET"
|
|
7531
|
+
* }
|
|
7532
|
+
* }
|
|
7533
|
+
*/
|
|
7534
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7535
|
+
};
|
|
7536
|
+
};
|
|
7537
|
+
/** @description Organization not found */
|
|
7538
|
+
404: {
|
|
7539
|
+
headers: {
|
|
7540
|
+
[name: string]: unknown;
|
|
7541
|
+
};
|
|
7542
|
+
content: {
|
|
7543
|
+
/**
|
|
7544
|
+
* @example {
|
|
7545
|
+
* "error": {
|
|
7546
|
+
* "statusCode": 404,
|
|
7547
|
+
* "code": null,
|
|
7548
|
+
* "message": "Organization not found",
|
|
7549
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7550
|
+
* "path": "/api/v1/organizations/{id}",
|
|
7551
|
+
* "method": "DELETE"
|
|
7552
|
+
* }
|
|
7553
|
+
* }
|
|
7554
|
+
*/
|
|
7555
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7556
|
+
};
|
|
7557
|
+
};
|
|
7558
|
+
/** @description Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry. */
|
|
7559
|
+
409: {
|
|
7560
|
+
headers: {
|
|
7561
|
+
[name: string]: unknown;
|
|
7562
|
+
};
|
|
7563
|
+
content: {
|
|
7564
|
+
/**
|
|
7565
|
+
* @example {
|
|
7566
|
+
* "error": {
|
|
7567
|
+
* "statusCode": 409,
|
|
7568
|
+
* "code": null,
|
|
7569
|
+
* "message": "Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry.",
|
|
7570
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7571
|
+
* "path": "/api/v1/organizations/{id}",
|
|
7572
|
+
* "method": "DELETE"
|
|
7573
|
+
* }
|
|
7574
|
+
* }
|
|
7575
|
+
*/
|
|
7576
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7577
|
+
};
|
|
7578
|
+
};
|
|
7579
|
+
};
|
|
7580
|
+
};
|
|
7581
|
+
ApiOrganizationsController_updateOrganization: {
|
|
7582
|
+
parameters: {
|
|
7583
|
+
query?: never;
|
|
7584
|
+
header: {
|
|
7585
|
+
"if-match": string;
|
|
7586
|
+
/** @description Optimistic-lock version of the resource. Send the `version` field returned on read; the server rejects with 409 if the row has changed since. */
|
|
7587
|
+
"If-Match"?: string;
|
|
7588
|
+
};
|
|
7589
|
+
path: {
|
|
7590
|
+
id: string;
|
|
7591
|
+
};
|
|
7592
|
+
cookie?: never;
|
|
7593
|
+
};
|
|
7594
|
+
requestBody: {
|
|
7595
|
+
content: {
|
|
7596
|
+
"application/json": components["schemas"]["UpdateOrganizationDto"];
|
|
7597
|
+
};
|
|
7598
|
+
};
|
|
7599
|
+
responses: {
|
|
7600
|
+
/** @description Organization updated */
|
|
7601
|
+
200: {
|
|
7602
|
+
headers: {
|
|
7603
|
+
[name: string]: unknown;
|
|
7604
|
+
};
|
|
7605
|
+
content: {
|
|
7606
|
+
"application/json": {
|
|
7607
|
+
data: components["schemas"]["OrganizationResponseDto"];
|
|
7608
|
+
};
|
|
7609
|
+
};
|
|
7610
|
+
};
|
|
7611
|
+
/** @description Invalid or expired token */
|
|
7612
|
+
401: {
|
|
7613
|
+
headers: {
|
|
7614
|
+
[name: string]: unknown;
|
|
7615
|
+
};
|
|
7616
|
+
content: {
|
|
7617
|
+
/**
|
|
7618
|
+
* @example {
|
|
7619
|
+
* "error": {
|
|
7620
|
+
* "statusCode": 401,
|
|
7621
|
+
* "code": null,
|
|
7622
|
+
* "message": "Invalid or expired token",
|
|
7623
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7624
|
+
* "path": "/api/v1/organizations",
|
|
7625
|
+
* "method": "GET"
|
|
7626
|
+
* }
|
|
7627
|
+
* }
|
|
7628
|
+
*/
|
|
7629
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7630
|
+
};
|
|
7631
|
+
};
|
|
7632
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7633
|
+
403: {
|
|
7634
|
+
headers: {
|
|
7635
|
+
[name: string]: unknown;
|
|
7636
|
+
};
|
|
7637
|
+
content: {
|
|
7638
|
+
/**
|
|
7639
|
+
* @example {
|
|
7640
|
+
* "error": {
|
|
7641
|
+
* "statusCode": 403,
|
|
7642
|
+
* "code": null,
|
|
7643
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7644
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7645
|
+
* "path": "/api/v1/organizations",
|
|
7646
|
+
* "method": "GET"
|
|
7647
|
+
* }
|
|
7648
|
+
* }
|
|
7649
|
+
*/
|
|
7650
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7651
|
+
};
|
|
7652
|
+
};
|
|
7653
|
+
/** @description Organization not found */
|
|
7654
|
+
404: {
|
|
7655
|
+
headers: {
|
|
7656
|
+
[name: string]: unknown;
|
|
7657
|
+
};
|
|
7658
|
+
content: {
|
|
7659
|
+
/**
|
|
7660
|
+
* @example {
|
|
7661
|
+
* "error": {
|
|
7662
|
+
* "statusCode": 404,
|
|
7663
|
+
* "code": null,
|
|
7664
|
+
* "message": "Organization not found",
|
|
7665
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7666
|
+
* "path": "/api/v1/organizations/{id}",
|
|
7667
|
+
* "method": "PATCH"
|
|
7668
|
+
* }
|
|
7669
|
+
* }
|
|
7670
|
+
*/
|
|
7671
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7672
|
+
};
|
|
7673
|
+
};
|
|
7674
|
+
/** @description Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry. */
|
|
7675
|
+
409: {
|
|
7676
|
+
headers: {
|
|
7677
|
+
[name: string]: unknown;
|
|
7678
|
+
};
|
|
7679
|
+
content: {
|
|
7680
|
+
/**
|
|
7681
|
+
* @example {
|
|
7682
|
+
* "error": {
|
|
7683
|
+
* "statusCode": 409,
|
|
7684
|
+
* "code": null,
|
|
7685
|
+
* "message": "Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry.",
|
|
7686
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7687
|
+
* "path": "/api/v1/organizations/{id}",
|
|
7688
|
+
* "method": "PATCH"
|
|
7689
|
+
* }
|
|
7690
|
+
* }
|
|
7691
|
+
*/
|
|
7692
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7693
|
+
};
|
|
7694
|
+
};
|
|
7695
|
+
};
|
|
7696
|
+
};
|
|
7697
|
+
ApiOrganizationsController_getPolicy: {
|
|
7698
|
+
parameters: {
|
|
7699
|
+
query?: never;
|
|
7700
|
+
header?: never;
|
|
7701
|
+
path: {
|
|
7702
|
+
id: string;
|
|
7703
|
+
};
|
|
7704
|
+
cookie?: never;
|
|
7705
|
+
};
|
|
7706
|
+
requestBody?: never;
|
|
7707
|
+
responses: {
|
|
7708
|
+
/** @description Policy returned */
|
|
7709
|
+
200: {
|
|
7710
|
+
headers: {
|
|
7711
|
+
[name: string]: unknown;
|
|
7712
|
+
};
|
|
7713
|
+
content: {
|
|
7714
|
+
"application/json": {
|
|
7715
|
+
data: components["schemas"]["OrganizationPolicyResponseDto"];
|
|
7716
|
+
};
|
|
7717
|
+
};
|
|
7718
|
+
};
|
|
7719
|
+
/** @description Invalid or expired token */
|
|
7720
|
+
401: {
|
|
7721
|
+
headers: {
|
|
7722
|
+
[name: string]: unknown;
|
|
7723
|
+
};
|
|
7724
|
+
content: {
|
|
7725
|
+
/**
|
|
7726
|
+
* @example {
|
|
7727
|
+
* "error": {
|
|
7728
|
+
* "statusCode": 401,
|
|
7729
|
+
* "code": null,
|
|
7730
|
+
* "message": "Invalid or expired token",
|
|
7731
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7732
|
+
* "path": "/api/v1/organizations",
|
|
7733
|
+
* "method": "GET"
|
|
7734
|
+
* }
|
|
7735
|
+
* }
|
|
7736
|
+
*/
|
|
7737
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7738
|
+
};
|
|
7739
|
+
};
|
|
7740
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7741
|
+
403: {
|
|
7742
|
+
headers: {
|
|
7743
|
+
[name: string]: unknown;
|
|
7744
|
+
};
|
|
7745
|
+
content: {
|
|
7746
|
+
/**
|
|
7747
|
+
* @example {
|
|
7748
|
+
* "error": {
|
|
7749
|
+
* "statusCode": 403,
|
|
7750
|
+
* "code": null,
|
|
7751
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7752
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7753
|
+
* "path": "/api/v1/organizations",
|
|
7754
|
+
* "method": "GET"
|
|
7755
|
+
* }
|
|
7756
|
+
* }
|
|
7757
|
+
*/
|
|
7758
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7759
|
+
};
|
|
7760
|
+
};
|
|
7761
|
+
/** @description Organization not found */
|
|
7762
|
+
404: {
|
|
7763
|
+
headers: {
|
|
7764
|
+
[name: string]: unknown;
|
|
7765
|
+
};
|
|
7766
|
+
content: {
|
|
7767
|
+
/**
|
|
7768
|
+
* @example {
|
|
7769
|
+
* "error": {
|
|
7770
|
+
* "statusCode": 404,
|
|
7771
|
+
* "code": null,
|
|
7772
|
+
* "message": "Organization not found",
|
|
7773
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7774
|
+
* "path": "/api/v1/organizations/{id}/policy",
|
|
7775
|
+
* "method": "GET"
|
|
7776
|
+
* }
|
|
7777
|
+
* }
|
|
7778
|
+
*/
|
|
7779
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7780
|
+
};
|
|
7781
|
+
};
|
|
7782
|
+
};
|
|
7783
|
+
};
|
|
7784
|
+
ApiOrganizationsController_updatePolicy: {
|
|
7785
|
+
parameters: {
|
|
7786
|
+
query?: never;
|
|
7787
|
+
header: {
|
|
7788
|
+
"if-match": string;
|
|
7789
|
+
/** @description Optimistic-lock version of the resource. Send the `version` field returned on read; the server rejects with 409 if the row has changed since. */
|
|
7790
|
+
"If-Match"?: string;
|
|
7791
|
+
};
|
|
7792
|
+
path: {
|
|
7793
|
+
id: string;
|
|
7794
|
+
};
|
|
7795
|
+
cookie?: never;
|
|
7796
|
+
};
|
|
7797
|
+
requestBody: {
|
|
7798
|
+
content: {
|
|
7799
|
+
"application/json": components["schemas"]["UpdateOrganizationPolicyDto"];
|
|
7800
|
+
};
|
|
7801
|
+
};
|
|
7802
|
+
responses: {
|
|
7803
|
+
/** @description Policy updated */
|
|
7804
|
+
200: {
|
|
7805
|
+
headers: {
|
|
7806
|
+
[name: string]: unknown;
|
|
7807
|
+
};
|
|
7808
|
+
content: {
|
|
7809
|
+
"application/json": {
|
|
7810
|
+
data: components["schemas"]["OrganizationPolicyResponseDto"];
|
|
7811
|
+
};
|
|
7812
|
+
};
|
|
7813
|
+
};
|
|
7814
|
+
/** @description The policy would loosen the Environment's authentication settings */
|
|
7815
|
+
400: {
|
|
7816
|
+
headers: {
|
|
7817
|
+
[name: string]: unknown;
|
|
7818
|
+
};
|
|
7819
|
+
content: {
|
|
7820
|
+
/**
|
|
7821
|
+
* @example {
|
|
7822
|
+
* "error": {
|
|
7823
|
+
* "statusCode": 400,
|
|
7824
|
+
* "code": null,
|
|
7825
|
+
* "message": "The policy would loosen the Environment's authentication settings",
|
|
7826
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7827
|
+
* "path": "/api/v1/organizations/{id}/policy",
|
|
7828
|
+
* "method": "PATCH"
|
|
7829
|
+
* }
|
|
7830
|
+
* }
|
|
7831
|
+
*/
|
|
7832
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7833
|
+
};
|
|
7834
|
+
};
|
|
7835
|
+
/** @description Invalid or expired token */
|
|
7836
|
+
401: {
|
|
7837
|
+
headers: {
|
|
7838
|
+
[name: string]: unknown;
|
|
7839
|
+
};
|
|
7840
|
+
content: {
|
|
7841
|
+
/**
|
|
7842
|
+
* @example {
|
|
7843
|
+
* "error": {
|
|
7844
|
+
* "statusCode": 401,
|
|
7845
|
+
* "code": null,
|
|
7846
|
+
* "message": "Invalid or expired token",
|
|
7847
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7848
|
+
* "path": "/api/v1/organizations",
|
|
7849
|
+
* "method": "GET"
|
|
7850
|
+
* }
|
|
7851
|
+
* }
|
|
7852
|
+
*/
|
|
7853
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7854
|
+
};
|
|
7855
|
+
};
|
|
7856
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7857
|
+
403: {
|
|
7858
|
+
headers: {
|
|
7859
|
+
[name: string]: unknown;
|
|
7860
|
+
};
|
|
7861
|
+
content: {
|
|
7862
|
+
/**
|
|
7863
|
+
* @example {
|
|
7864
|
+
* "error": {
|
|
7865
|
+
* "statusCode": 403,
|
|
7866
|
+
* "code": null,
|
|
7867
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7868
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7869
|
+
* "path": "/api/v1/organizations",
|
|
7870
|
+
* "method": "GET"
|
|
7871
|
+
* }
|
|
7872
|
+
* }
|
|
7873
|
+
*/
|
|
7874
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7875
|
+
};
|
|
7876
|
+
};
|
|
7877
|
+
/** @description Organization not found */
|
|
7878
|
+
404: {
|
|
7879
|
+
headers: {
|
|
7880
|
+
[name: string]: unknown;
|
|
7881
|
+
};
|
|
7882
|
+
content: {
|
|
7883
|
+
/**
|
|
7884
|
+
* @example {
|
|
7885
|
+
* "error": {
|
|
7886
|
+
* "statusCode": 404,
|
|
7887
|
+
* "code": null,
|
|
7888
|
+
* "message": "Organization not found",
|
|
7889
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7890
|
+
* "path": "/api/v1/organizations/{id}/policy",
|
|
7891
|
+
* "method": "PATCH"
|
|
7892
|
+
* }
|
|
7893
|
+
* }
|
|
7894
|
+
*/
|
|
7895
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7896
|
+
};
|
|
7897
|
+
};
|
|
7898
|
+
/** @description Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry. */
|
|
7899
|
+
409: {
|
|
7900
|
+
headers: {
|
|
7901
|
+
[name: string]: unknown;
|
|
7902
|
+
};
|
|
7903
|
+
content: {
|
|
7904
|
+
/**
|
|
7905
|
+
* @example {
|
|
7906
|
+
* "error": {
|
|
7907
|
+
* "statusCode": 409,
|
|
7908
|
+
* "code": null,
|
|
7909
|
+
* "message": "Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry.",
|
|
7910
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7911
|
+
* "path": "/api/v1/organizations/{id}/policy",
|
|
7912
|
+
* "method": "PATCH"
|
|
7913
|
+
* }
|
|
7914
|
+
* }
|
|
7915
|
+
*/
|
|
7916
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7917
|
+
};
|
|
7918
|
+
};
|
|
7919
|
+
};
|
|
7920
|
+
};
|
|
7921
|
+
ApiOrganizationsController_listSsoConnections: {
|
|
7922
|
+
parameters: {
|
|
7923
|
+
query?: never;
|
|
7924
|
+
header?: never;
|
|
7925
|
+
path: {
|
|
7926
|
+
id: string;
|
|
7927
|
+
};
|
|
7928
|
+
cookie?: never;
|
|
7929
|
+
};
|
|
7930
|
+
requestBody?: never;
|
|
7931
|
+
responses: {
|
|
7932
|
+
/** @description Bindings returned */
|
|
7933
|
+
200: {
|
|
7934
|
+
headers: {
|
|
7935
|
+
[name: string]: unknown;
|
|
7936
|
+
};
|
|
7937
|
+
content: {
|
|
7938
|
+
"application/json": {
|
|
7939
|
+
items: components["schemas"]["OrganizationSsoConnectionResponseDto"][];
|
|
7940
|
+
};
|
|
7941
|
+
};
|
|
7942
|
+
};
|
|
7943
|
+
/** @description Invalid or expired token */
|
|
7944
|
+
401: {
|
|
7945
|
+
headers: {
|
|
7946
|
+
[name: string]: unknown;
|
|
7947
|
+
};
|
|
7948
|
+
content: {
|
|
7949
|
+
/**
|
|
7950
|
+
* @example {
|
|
7951
|
+
* "error": {
|
|
7952
|
+
* "statusCode": 401,
|
|
7953
|
+
* "code": null,
|
|
7954
|
+
* "message": "Invalid or expired token",
|
|
7955
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7956
|
+
* "path": "/api/v1/organizations",
|
|
7957
|
+
* "method": "GET"
|
|
7958
|
+
* }
|
|
7959
|
+
* }
|
|
7960
|
+
*/
|
|
7961
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7962
|
+
};
|
|
7963
|
+
};
|
|
7964
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
7965
|
+
403: {
|
|
7966
|
+
headers: {
|
|
7967
|
+
[name: string]: unknown;
|
|
7968
|
+
};
|
|
7969
|
+
content: {
|
|
7970
|
+
/**
|
|
7971
|
+
* @example {
|
|
7972
|
+
* "error": {
|
|
7973
|
+
* "statusCode": 403,
|
|
7974
|
+
* "code": null,
|
|
7975
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
7976
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7977
|
+
* "path": "/api/v1/organizations",
|
|
7978
|
+
* "method": "GET"
|
|
7979
|
+
* }
|
|
7980
|
+
* }
|
|
7981
|
+
*/
|
|
7982
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
7983
|
+
};
|
|
7984
|
+
};
|
|
7985
|
+
/** @description Organization not found */
|
|
7986
|
+
404: {
|
|
7987
|
+
headers: {
|
|
7988
|
+
[name: string]: unknown;
|
|
7989
|
+
};
|
|
7990
|
+
content: {
|
|
7991
|
+
/**
|
|
7992
|
+
* @example {
|
|
7993
|
+
* "error": {
|
|
7994
|
+
* "statusCode": 404,
|
|
7995
|
+
* "code": null,
|
|
7996
|
+
* "message": "Organization not found",
|
|
7997
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
7998
|
+
* "path": "/api/v1/organizations/{id}/sso-connections",
|
|
7999
|
+
* "method": "GET"
|
|
8000
|
+
* }
|
|
8001
|
+
* }
|
|
8002
|
+
*/
|
|
8003
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8004
|
+
};
|
|
8005
|
+
};
|
|
8006
|
+
};
|
|
8007
|
+
};
|
|
8008
|
+
ApiOrganizationsController_bindSsoConnection: {
|
|
8009
|
+
parameters: {
|
|
8010
|
+
query?: never;
|
|
8011
|
+
header?: never;
|
|
8012
|
+
path: {
|
|
8013
|
+
id: string;
|
|
8014
|
+
};
|
|
8015
|
+
cookie?: never;
|
|
8016
|
+
};
|
|
8017
|
+
requestBody: {
|
|
8018
|
+
content: {
|
|
8019
|
+
"application/json": components["schemas"]["BindOrganizationSsoConnectionDto"];
|
|
8020
|
+
};
|
|
8021
|
+
};
|
|
8022
|
+
responses: {
|
|
8023
|
+
/** @description Connection bound */
|
|
8024
|
+
201: {
|
|
8025
|
+
headers: {
|
|
8026
|
+
[name: string]: unknown;
|
|
8027
|
+
};
|
|
8028
|
+
content: {
|
|
8029
|
+
"application/json": {
|
|
8030
|
+
data: components["schemas"]["OrganizationSsoConnectionResponseDto"];
|
|
8031
|
+
};
|
|
8032
|
+
};
|
|
8033
|
+
};
|
|
8034
|
+
/** @description The connection is not an end-user connection bound to the organization's Environment, or the role is not in that Environment */
|
|
8035
|
+
400: {
|
|
8036
|
+
headers: {
|
|
8037
|
+
[name: string]: unknown;
|
|
8038
|
+
};
|
|
8039
|
+
content: {
|
|
8040
|
+
/**
|
|
8041
|
+
* @example {
|
|
8042
|
+
* "error": {
|
|
8043
|
+
* "statusCode": 400,
|
|
8044
|
+
* "code": null,
|
|
8045
|
+
* "message": "The connection is not an end-user connection bound to the organization's Environment, or the role is not in that Environment",
|
|
8046
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8047
|
+
* "path": "/api/v1/organizations/{id}/sso-connections",
|
|
8048
|
+
* "method": "POST"
|
|
8049
|
+
* }
|
|
8050
|
+
* }
|
|
8051
|
+
*/
|
|
8052
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8053
|
+
};
|
|
8054
|
+
};
|
|
8055
|
+
/** @description Invalid or expired token */
|
|
8056
|
+
401: {
|
|
8057
|
+
headers: {
|
|
8058
|
+
[name: string]: unknown;
|
|
8059
|
+
};
|
|
8060
|
+
content: {
|
|
8061
|
+
/**
|
|
8062
|
+
* @example {
|
|
8063
|
+
* "error": {
|
|
8064
|
+
* "statusCode": 401,
|
|
8065
|
+
* "code": null,
|
|
8066
|
+
* "message": "Invalid or expired token",
|
|
8067
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8068
|
+
* "path": "/api/v1/organizations",
|
|
8069
|
+
* "method": "GET"
|
|
8070
|
+
* }
|
|
8071
|
+
* }
|
|
8072
|
+
*/
|
|
8073
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8074
|
+
};
|
|
8075
|
+
};
|
|
8076
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
8077
|
+
403: {
|
|
8078
|
+
headers: {
|
|
8079
|
+
[name: string]: unknown;
|
|
8080
|
+
};
|
|
8081
|
+
content: {
|
|
8082
|
+
/**
|
|
8083
|
+
* @example {
|
|
8084
|
+
* "error": {
|
|
8085
|
+
* "statusCode": 403,
|
|
8086
|
+
* "code": null,
|
|
8087
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
8088
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8089
|
+
* "path": "/api/v1/organizations",
|
|
8090
|
+
* "method": "GET"
|
|
8091
|
+
* }
|
|
8092
|
+
* }
|
|
8093
|
+
*/
|
|
8094
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8095
|
+
};
|
|
8096
|
+
};
|
|
8097
|
+
/** @description Organization not found */
|
|
8098
|
+
404: {
|
|
8099
|
+
headers: {
|
|
8100
|
+
[name: string]: unknown;
|
|
8101
|
+
};
|
|
8102
|
+
content: {
|
|
8103
|
+
/**
|
|
8104
|
+
* @example {
|
|
8105
|
+
* "error": {
|
|
8106
|
+
* "statusCode": 404,
|
|
8107
|
+
* "code": null,
|
|
8108
|
+
* "message": "Organization not found",
|
|
8109
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8110
|
+
* "path": "/api/v1/organizations/{id}/sso-connections",
|
|
8111
|
+
* "method": "POST"
|
|
8112
|
+
* }
|
|
8113
|
+
* }
|
|
8114
|
+
*/
|
|
8115
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8116
|
+
};
|
|
8117
|
+
};
|
|
8118
|
+
/** @description The connection is already bound to an organization in this Environment */
|
|
8119
|
+
409: {
|
|
8120
|
+
headers: {
|
|
8121
|
+
[name: string]: unknown;
|
|
8122
|
+
};
|
|
8123
|
+
content: {
|
|
8124
|
+
/**
|
|
8125
|
+
* @example {
|
|
8126
|
+
* "error": {
|
|
8127
|
+
* "statusCode": 409,
|
|
8128
|
+
* "code": null,
|
|
8129
|
+
* "message": "The connection is already bound to an organization in this Environment",
|
|
8130
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8131
|
+
* "path": "/api/v1/organizations/{id}/sso-connections",
|
|
8132
|
+
* "method": "POST"
|
|
8133
|
+
* }
|
|
8134
|
+
* }
|
|
8135
|
+
*/
|
|
8136
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8137
|
+
};
|
|
8138
|
+
};
|
|
8139
|
+
};
|
|
8140
|
+
};
|
|
8141
|
+
ApiOrganizationsController_unbindSsoConnection: {
|
|
8142
|
+
parameters: {
|
|
8143
|
+
query?: never;
|
|
8144
|
+
header?: never;
|
|
8145
|
+
path: {
|
|
8146
|
+
id: string;
|
|
8147
|
+
connectionId: string;
|
|
8148
|
+
};
|
|
8149
|
+
cookie?: never;
|
|
8150
|
+
};
|
|
8151
|
+
requestBody?: never;
|
|
8152
|
+
responses: {
|
|
8153
|
+
/** @description Connection unbound */
|
|
8154
|
+
204: {
|
|
8155
|
+
headers: {
|
|
8156
|
+
[name: string]: unknown;
|
|
8157
|
+
};
|
|
8158
|
+
content?: never;
|
|
8159
|
+
};
|
|
8160
|
+
/** @description Invalid or expired token */
|
|
8161
|
+
401: {
|
|
8162
|
+
headers: {
|
|
8163
|
+
[name: string]: unknown;
|
|
8164
|
+
};
|
|
8165
|
+
content: {
|
|
8166
|
+
/**
|
|
8167
|
+
* @example {
|
|
8168
|
+
* "error": {
|
|
8169
|
+
* "statusCode": 401,
|
|
8170
|
+
* "code": null,
|
|
8171
|
+
* "message": "Invalid or expired token",
|
|
8172
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8173
|
+
* "path": "/api/v1/organizations",
|
|
8174
|
+
* "method": "GET"
|
|
8175
|
+
* }
|
|
8176
|
+
* }
|
|
8177
|
+
*/
|
|
8178
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8179
|
+
};
|
|
8180
|
+
};
|
|
8181
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
8182
|
+
403: {
|
|
8183
|
+
headers: {
|
|
8184
|
+
[name: string]: unknown;
|
|
8185
|
+
};
|
|
8186
|
+
content: {
|
|
8187
|
+
/**
|
|
8188
|
+
* @example {
|
|
8189
|
+
* "error": {
|
|
8190
|
+
* "statusCode": 403,
|
|
8191
|
+
* "code": null,
|
|
8192
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
8193
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8194
|
+
* "path": "/api/v1/organizations",
|
|
8195
|
+
* "method": "GET"
|
|
8196
|
+
* }
|
|
8197
|
+
* }
|
|
8198
|
+
*/
|
|
8199
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8200
|
+
};
|
|
8201
|
+
};
|
|
8202
|
+
/** @description This SSO connection is not bound to the organization */
|
|
8203
|
+
404: {
|
|
8204
|
+
headers: {
|
|
8205
|
+
[name: string]: unknown;
|
|
8206
|
+
};
|
|
8207
|
+
content: {
|
|
8208
|
+
/**
|
|
8209
|
+
* @example {
|
|
8210
|
+
* "error": {
|
|
8211
|
+
* "statusCode": 404,
|
|
8212
|
+
* "code": null,
|
|
8213
|
+
* "message": "This SSO connection is not bound to the organization",
|
|
8214
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8215
|
+
* "path": "/api/v1/organizations/{id}/sso-connections/{connectionId}",
|
|
8216
|
+
* "method": "DELETE"
|
|
8217
|
+
* }
|
|
8218
|
+
* }
|
|
8219
|
+
*/
|
|
8220
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8221
|
+
};
|
|
8222
|
+
};
|
|
8223
|
+
};
|
|
8224
|
+
};
|
|
8225
|
+
ApiOrganizationsController_listMembers: {
|
|
8226
|
+
parameters: {
|
|
8227
|
+
query?: {
|
|
8228
|
+
/** @description Page number (1-based) */
|
|
8229
|
+
page?: number;
|
|
8230
|
+
/** @description Items per page (1-100, default 20) */
|
|
8231
|
+
take?: number;
|
|
8232
|
+
/** @description Search term */
|
|
8233
|
+
q?: string;
|
|
8234
|
+
/** @description Column to sort by. Allowed values depend on the endpoint. */
|
|
8235
|
+
sort_by?: string;
|
|
8236
|
+
/** @description Sort direction */
|
|
8237
|
+
order?: "asc" | "desc";
|
|
8238
|
+
/** @description Only members holding this role */
|
|
8239
|
+
role_id?: string;
|
|
8240
|
+
/** @description Filter by the membership's effective window: active now, scheduled to start, or already expired */
|
|
8241
|
+
status?: "active" | "scheduled" | "expired";
|
|
8242
|
+
};
|
|
8243
|
+
header?: never;
|
|
8244
|
+
path: {
|
|
8245
|
+
id: string;
|
|
8246
|
+
};
|
|
8247
|
+
cookie?: never;
|
|
8248
|
+
};
|
|
8249
|
+
requestBody?: never;
|
|
8250
|
+
responses: {
|
|
8251
|
+
/** @description Paginated list */
|
|
8252
|
+
200: {
|
|
8253
|
+
headers: {
|
|
8254
|
+
[name: string]: unknown;
|
|
8255
|
+
};
|
|
8256
|
+
content: {
|
|
8257
|
+
"application/json": {
|
|
8258
|
+
items: components["schemas"]["OrganizationMemberResponseDto"][];
|
|
8259
|
+
pagination: components["schemas"]["PageMetaDto"];
|
|
8260
|
+
};
|
|
8261
|
+
};
|
|
8262
|
+
};
|
|
8263
|
+
/** @description Invalid or expired token */
|
|
8264
|
+
401: {
|
|
8265
|
+
headers: {
|
|
8266
|
+
[name: string]: unknown;
|
|
8267
|
+
};
|
|
8268
|
+
content: {
|
|
8269
|
+
/**
|
|
8270
|
+
* @example {
|
|
8271
|
+
* "error": {
|
|
8272
|
+
* "statusCode": 401,
|
|
8273
|
+
* "code": null,
|
|
8274
|
+
* "message": "Invalid or expired token",
|
|
8275
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8276
|
+
* "path": "/api/v1/organizations",
|
|
8277
|
+
* "method": "GET"
|
|
8278
|
+
* }
|
|
8279
|
+
* }
|
|
8280
|
+
*/
|
|
8281
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8282
|
+
};
|
|
8283
|
+
};
|
|
8284
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
8285
|
+
403: {
|
|
8286
|
+
headers: {
|
|
8287
|
+
[name: string]: unknown;
|
|
8288
|
+
};
|
|
8289
|
+
content: {
|
|
8290
|
+
/**
|
|
8291
|
+
* @example {
|
|
8292
|
+
* "error": {
|
|
8293
|
+
* "statusCode": 403,
|
|
8294
|
+
* "code": null,
|
|
8295
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
8296
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8297
|
+
* "path": "/api/v1/organizations",
|
|
8298
|
+
* "method": "GET"
|
|
8299
|
+
* }
|
|
8300
|
+
* }
|
|
8301
|
+
*/
|
|
8302
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8303
|
+
};
|
|
8304
|
+
};
|
|
8305
|
+
/** @description Organization not found */
|
|
8306
|
+
404: {
|
|
8307
|
+
headers: {
|
|
8308
|
+
[name: string]: unknown;
|
|
8309
|
+
};
|
|
8310
|
+
content: {
|
|
8311
|
+
/**
|
|
8312
|
+
* @example {
|
|
8313
|
+
* "error": {
|
|
8314
|
+
* "statusCode": 404,
|
|
8315
|
+
* "code": null,
|
|
8316
|
+
* "message": "Organization not found",
|
|
8317
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8318
|
+
* "path": "/api/v1/organizations/{id}/members",
|
|
8319
|
+
* "method": "GET"
|
|
8320
|
+
* }
|
|
8321
|
+
* }
|
|
8322
|
+
*/
|
|
8323
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8324
|
+
};
|
|
8325
|
+
};
|
|
8326
|
+
};
|
|
8327
|
+
};
|
|
8328
|
+
ApiOrganizationsController_addMember: {
|
|
8329
|
+
parameters: {
|
|
8330
|
+
query?: never;
|
|
8331
|
+
header?: never;
|
|
8332
|
+
path: {
|
|
8333
|
+
id: string;
|
|
8334
|
+
};
|
|
8335
|
+
cookie?: never;
|
|
8336
|
+
};
|
|
8337
|
+
requestBody: {
|
|
8338
|
+
content: {
|
|
8339
|
+
"application/json": components["schemas"]["AddOrganizationMemberDto"];
|
|
8340
|
+
};
|
|
8341
|
+
};
|
|
8342
|
+
responses: {
|
|
8343
|
+
/** @description Member added */
|
|
8344
|
+
201: {
|
|
8345
|
+
headers: {
|
|
8346
|
+
[name: string]: unknown;
|
|
8347
|
+
};
|
|
8348
|
+
content: {
|
|
8349
|
+
"application/json": {
|
|
8350
|
+
data: components["schemas"]["OrganizationMemberResponseDto"];
|
|
8351
|
+
};
|
|
8352
|
+
};
|
|
8353
|
+
};
|
|
8354
|
+
/** @description Invalid or expired token */
|
|
8355
|
+
401: {
|
|
8356
|
+
headers: {
|
|
8357
|
+
[name: string]: unknown;
|
|
8358
|
+
};
|
|
8359
|
+
content: {
|
|
8360
|
+
/**
|
|
8361
|
+
* @example {
|
|
8362
|
+
* "error": {
|
|
8363
|
+
* "statusCode": 401,
|
|
8364
|
+
* "code": null,
|
|
8365
|
+
* "message": "Invalid or expired token",
|
|
8366
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8367
|
+
* "path": "/api/v1/organizations",
|
|
8368
|
+
* "method": "GET"
|
|
8369
|
+
* }
|
|
8370
|
+
* }
|
|
8371
|
+
*/
|
|
8372
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8373
|
+
};
|
|
8374
|
+
};
|
|
8375
|
+
/** @description This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa) */
|
|
8376
|
+
403: {
|
|
8377
|
+
headers: {
|
|
8378
|
+
[name: string]: unknown;
|
|
8379
|
+
};
|
|
8380
|
+
content: {
|
|
8381
|
+
/**
|
|
8382
|
+
* @example {
|
|
8383
|
+
* "error": {
|
|
8384
|
+
* "statusCode": 403,
|
|
8385
|
+
* "code": null,
|
|
8386
|
+
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
8387
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8388
|
+
* "path": "/api/v1/organizations",
|
|
8389
|
+
* "method": "GET"
|
|
8390
|
+
* }
|
|
8391
|
+
* }
|
|
8392
|
+
*/
|
|
8393
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8394
|
+
};
|
|
8395
|
+
};
|
|
8396
|
+
/** @description Organization not found */
|
|
8397
|
+
404: {
|
|
8398
|
+
headers: {
|
|
8399
|
+
[name: string]: unknown;
|
|
8400
|
+
};
|
|
8401
|
+
content: {
|
|
8402
|
+
/**
|
|
8403
|
+
* @example {
|
|
8404
|
+
* "error": {
|
|
8405
|
+
* "statusCode": 404,
|
|
8406
|
+
* "code": null,
|
|
8407
|
+
* "message": "Organization not found",
|
|
8408
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8409
|
+
* "path": "/api/v1/organizations/{id}/members",
|
|
8410
|
+
* "method": "POST"
|
|
8411
|
+
* }
|
|
8412
|
+
* }
|
|
8413
|
+
*/
|
|
8414
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8415
|
+
};
|
|
8416
|
+
};
|
|
8417
|
+
/** @description The identity is already a member of this organization */
|
|
8418
|
+
409: {
|
|
8419
|
+
headers: {
|
|
8420
|
+
[name: string]: unknown;
|
|
8421
|
+
};
|
|
8422
|
+
content: {
|
|
8423
|
+
/**
|
|
8424
|
+
* @example {
|
|
8425
|
+
* "error": {
|
|
8426
|
+
* "statusCode": 409,
|
|
6159
8427
|
* "code": null,
|
|
6160
|
-
* "message": "
|
|
8428
|
+
* "message": "The identity is already a member of this organization",
|
|
6161
8429
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6162
|
-
* "path": "/api/v1/
|
|
6163
|
-
* "method": "
|
|
8430
|
+
* "path": "/api/v1/organizations/{id}/members",
|
|
8431
|
+
* "method": "POST"
|
|
6164
8432
|
* }
|
|
6165
8433
|
* }
|
|
6166
8434
|
*/
|
|
@@ -6169,27 +8437,24 @@ interface operations {
|
|
|
6169
8437
|
};
|
|
6170
8438
|
};
|
|
6171
8439
|
};
|
|
6172
|
-
|
|
8440
|
+
ApiOrganizationsController_removeMember: {
|
|
6173
8441
|
parameters: {
|
|
6174
8442
|
query?: never;
|
|
6175
8443
|
header?: never;
|
|
6176
8444
|
path: {
|
|
6177
8445
|
id: string;
|
|
8446
|
+
identityId: string;
|
|
6178
8447
|
};
|
|
6179
8448
|
cookie?: never;
|
|
6180
8449
|
};
|
|
6181
8450
|
requestBody?: never;
|
|
6182
8451
|
responses: {
|
|
6183
|
-
/** @description
|
|
6184
|
-
|
|
8452
|
+
/** @description Member removed */
|
|
8453
|
+
204: {
|
|
6185
8454
|
headers: {
|
|
6186
8455
|
[name: string]: unknown;
|
|
6187
8456
|
};
|
|
6188
|
-
content
|
|
6189
|
-
"application/json": {
|
|
6190
|
-
items: components["schemas"]["NodeResponseDto"][];
|
|
6191
|
-
};
|
|
6192
|
-
};
|
|
8457
|
+
content?: never;
|
|
6193
8458
|
};
|
|
6194
8459
|
/** @description Invalid or expired token */
|
|
6195
8460
|
401: {
|
|
@@ -6204,7 +8469,7 @@ interface operations {
|
|
|
6204
8469
|
* "code": null,
|
|
6205
8470
|
* "message": "Invalid or expired token",
|
|
6206
8471
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6207
|
-
* "path": "/api/v1/
|
|
8472
|
+
* "path": "/api/v1/organizations",
|
|
6208
8473
|
* "method": "GET"
|
|
6209
8474
|
* }
|
|
6210
8475
|
* }
|
|
@@ -6225,7 +8490,7 @@ interface operations {
|
|
|
6225
8490
|
* "code": null,
|
|
6226
8491
|
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
6227
8492
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6228
|
-
* "path": "/api/v1/
|
|
8493
|
+
* "path": "/api/v1/organizations",
|
|
6229
8494
|
* "method": "GET"
|
|
6230
8495
|
* }
|
|
6231
8496
|
* }
|
|
@@ -6233,27 +8498,53 @@ interface operations {
|
|
|
6233
8498
|
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6234
8499
|
};
|
|
6235
8500
|
};
|
|
8501
|
+
/** @description The identity is not a member of this organization */
|
|
8502
|
+
404: {
|
|
8503
|
+
headers: {
|
|
8504
|
+
[name: string]: unknown;
|
|
8505
|
+
};
|
|
8506
|
+
content: {
|
|
8507
|
+
/**
|
|
8508
|
+
* @example {
|
|
8509
|
+
* "error": {
|
|
8510
|
+
* "statusCode": 404,
|
|
8511
|
+
* "code": null,
|
|
8512
|
+
* "message": "The identity is not a member of this organization",
|
|
8513
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8514
|
+
* "path": "/api/v1/organizations/{id}/members/{identityId}",
|
|
8515
|
+
* "method": "DELETE"
|
|
8516
|
+
* }
|
|
8517
|
+
* }
|
|
8518
|
+
*/
|
|
8519
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8520
|
+
};
|
|
8521
|
+
};
|
|
6236
8522
|
};
|
|
6237
8523
|
};
|
|
6238
|
-
|
|
8524
|
+
ApiOrganizationsController_changeMemberRole: {
|
|
6239
8525
|
parameters: {
|
|
6240
8526
|
query?: never;
|
|
6241
8527
|
header?: never;
|
|
6242
8528
|
path: {
|
|
6243
8529
|
id: string;
|
|
8530
|
+
identityId: string;
|
|
6244
8531
|
};
|
|
6245
8532
|
cookie?: never;
|
|
6246
8533
|
};
|
|
6247
|
-
requestBody
|
|
8534
|
+
requestBody: {
|
|
8535
|
+
content: {
|
|
8536
|
+
"application/json": components["schemas"]["ChangeOrganizationMemberRoleDto"];
|
|
8537
|
+
};
|
|
8538
|
+
};
|
|
6248
8539
|
responses: {
|
|
6249
|
-
/** @description
|
|
8540
|
+
/** @description Member role changed */
|
|
6250
8541
|
200: {
|
|
6251
8542
|
headers: {
|
|
6252
8543
|
[name: string]: unknown;
|
|
6253
8544
|
};
|
|
6254
8545
|
content: {
|
|
6255
8546
|
"application/json": {
|
|
6256
|
-
|
|
8547
|
+
data: components["schemas"]["OrganizationMemberResponseDto"];
|
|
6257
8548
|
};
|
|
6258
8549
|
};
|
|
6259
8550
|
};
|
|
@@ -6270,7 +8561,7 @@ interface operations {
|
|
|
6270
8561
|
* "code": null,
|
|
6271
8562
|
* "message": "Invalid or expired token",
|
|
6272
8563
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6273
|
-
* "path": "/api/v1/
|
|
8564
|
+
* "path": "/api/v1/organizations",
|
|
6274
8565
|
* "method": "GET"
|
|
6275
8566
|
* }
|
|
6276
8567
|
* }
|
|
@@ -6291,7 +8582,7 @@ interface operations {
|
|
|
6291
8582
|
* "code": null,
|
|
6292
8583
|
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
6293
8584
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6294
|
-
* "path": "/api/v1/
|
|
8585
|
+
* "path": "/api/v1/organizations",
|
|
6295
8586
|
* "method": "GET"
|
|
6296
8587
|
* }
|
|
6297
8588
|
* }
|
|
@@ -6299,34 +8590,63 @@ interface operations {
|
|
|
6299
8590
|
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6300
8591
|
};
|
|
6301
8592
|
};
|
|
8593
|
+
/** @description The identity is not a member of this organization */
|
|
8594
|
+
404: {
|
|
8595
|
+
headers: {
|
|
8596
|
+
[name: string]: unknown;
|
|
8597
|
+
};
|
|
8598
|
+
content: {
|
|
8599
|
+
/**
|
|
8600
|
+
* @example {
|
|
8601
|
+
* "error": {
|
|
8602
|
+
* "statusCode": 404,
|
|
8603
|
+
* "code": null,
|
|
8604
|
+
* "message": "The identity is not a member of this organization",
|
|
8605
|
+
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
8606
|
+
* "path": "/api/v1/organizations/{id}/members/{identityId}",
|
|
8607
|
+
* "method": "PATCH"
|
|
8608
|
+
* }
|
|
8609
|
+
* }
|
|
8610
|
+
*/
|
|
8611
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
8612
|
+
};
|
|
8613
|
+
};
|
|
6302
8614
|
};
|
|
6303
8615
|
};
|
|
6304
|
-
|
|
8616
|
+
ApiOrganizationsController_listInvites: {
|
|
6305
8617
|
parameters: {
|
|
6306
|
-
query?:
|
|
6307
|
-
|
|
6308
|
-
|
|
6309
|
-
/** @description
|
|
6310
|
-
|
|
8618
|
+
query?: {
|
|
8619
|
+
/** @description Page number (1-based) */
|
|
8620
|
+
page?: number;
|
|
8621
|
+
/** @description Items per page (1-100, default 20) */
|
|
8622
|
+
take?: number;
|
|
8623
|
+
/** @description Search term */
|
|
8624
|
+
q?: string;
|
|
8625
|
+
/** @description Column to sort by. Allowed values depend on the endpoint. */
|
|
8626
|
+
sort_by?: string;
|
|
8627
|
+
/** @description Sort direction */
|
|
8628
|
+
order?: "asc" | "desc";
|
|
8629
|
+
/** @description Filter by invitation status */
|
|
8630
|
+
status?: "pending" | "accepted" | "revoked" | "expired";
|
|
6311
8631
|
};
|
|
8632
|
+
header?: never;
|
|
6312
8633
|
path: {
|
|
6313
8634
|
id: string;
|
|
6314
8635
|
};
|
|
6315
8636
|
cookie?: never;
|
|
6316
8637
|
};
|
|
6317
|
-
requestBody
|
|
6318
|
-
content: {
|
|
6319
|
-
"application/json": components["schemas"]["MoveNodeDto"];
|
|
6320
|
-
};
|
|
6321
|
-
};
|
|
8638
|
+
requestBody?: never;
|
|
6322
8639
|
responses: {
|
|
6323
|
-
/** @description
|
|
8640
|
+
/** @description Paginated list */
|
|
6324
8641
|
200: {
|
|
6325
8642
|
headers: {
|
|
6326
8643
|
[name: string]: unknown;
|
|
6327
8644
|
};
|
|
6328
8645
|
content: {
|
|
6329
|
-
"application/json":
|
|
8646
|
+
"application/json": {
|
|
8647
|
+
items: components["schemas"]["IdentityInviteResponseDto"][];
|
|
8648
|
+
pagination: components["schemas"]["PageMetaDto"];
|
|
8649
|
+
};
|
|
6330
8650
|
};
|
|
6331
8651
|
};
|
|
6332
8652
|
/** @description Invalid or expired token */
|
|
@@ -6342,7 +8662,7 @@ interface operations {
|
|
|
6342
8662
|
* "code": null,
|
|
6343
8663
|
* "message": "Invalid or expired token",
|
|
6344
8664
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6345
|
-
* "path": "/api/v1/
|
|
8665
|
+
* "path": "/api/v1/organizations",
|
|
6346
8666
|
* "method": "GET"
|
|
6347
8667
|
* }
|
|
6348
8668
|
* }
|
|
@@ -6363,7 +8683,7 @@ interface operations {
|
|
|
6363
8683
|
* "code": null,
|
|
6364
8684
|
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
6365
8685
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6366
|
-
* "path": "/api/v1/
|
|
8686
|
+
* "path": "/api/v1/organizations",
|
|
6367
8687
|
* "method": "GET"
|
|
6368
8688
|
* }
|
|
6369
8689
|
* }
|
|
@@ -6371,7 +8691,7 @@ interface operations {
|
|
|
6371
8691
|
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6372
8692
|
};
|
|
6373
8693
|
};
|
|
6374
|
-
/** @description
|
|
8694
|
+
/** @description Organization not found */
|
|
6375
8695
|
404: {
|
|
6376
8696
|
headers: {
|
|
6377
8697
|
[name: string]: unknown;
|
|
@@ -6382,31 +8702,10 @@ interface operations {
|
|
|
6382
8702
|
* "error": {
|
|
6383
8703
|
* "statusCode": 404,
|
|
6384
8704
|
* "code": null,
|
|
6385
|
-
* "message": "
|
|
6386
|
-
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6387
|
-
* "path": "/api/v1/nodes/{id}/move",
|
|
6388
|
-
* "method": "POST"
|
|
6389
|
-
* }
|
|
6390
|
-
* }
|
|
6391
|
-
*/
|
|
6392
|
-
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6393
|
-
};
|
|
6394
|
-
};
|
|
6395
|
-
/** @description Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry. */
|
|
6396
|
-
409: {
|
|
6397
|
-
headers: {
|
|
6398
|
-
[name: string]: unknown;
|
|
6399
|
-
};
|
|
6400
|
-
content: {
|
|
6401
|
-
/**
|
|
6402
|
-
* @example {
|
|
6403
|
-
* "error": {
|
|
6404
|
-
* "statusCode": 409,
|
|
6405
|
-
* "code": null,
|
|
6406
|
-
* "message": "Version mismatch — the resource was modified since the version supplied in If-Match. Refresh and retry.",
|
|
8705
|
+
* "message": "Organization not found",
|
|
6407
8706
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6408
|
-
* "path": "/api/v1/
|
|
6409
|
-
* "method": "
|
|
8707
|
+
* "path": "/api/v1/organizations/{id}/invites",
|
|
8708
|
+
* "method": "GET"
|
|
6410
8709
|
* }
|
|
6411
8710
|
* }
|
|
6412
8711
|
*/
|
|
@@ -6415,45 +8714,29 @@ interface operations {
|
|
|
6415
8714
|
};
|
|
6416
8715
|
};
|
|
6417
8716
|
};
|
|
6418
|
-
|
|
8717
|
+
ApiOrganizationsController_createInvite: {
|
|
6419
8718
|
parameters: {
|
|
6420
|
-
query?:
|
|
6421
|
-
/** @description Page number (1-based) */
|
|
6422
|
-
page?: number;
|
|
6423
|
-
/** @description Items per page (1-100, default 20) */
|
|
6424
|
-
take?: number;
|
|
6425
|
-
/** @description Search term */
|
|
6426
|
-
q?: string;
|
|
6427
|
-
/** @description Sort field */
|
|
6428
|
-
sort_by?: "name" | "role" | "access_type" | "created_at";
|
|
6429
|
-
/** @description Sort order */
|
|
6430
|
-
order?: "asc" | "desc";
|
|
6431
|
-
/** @description Filter by role ID */
|
|
6432
|
-
role_id?: string;
|
|
6433
|
-
/** @description Filter by access type */
|
|
6434
|
-
access_type?: "direct" | "inherited";
|
|
6435
|
-
/** @description Filter by assignment status */
|
|
6436
|
-
status?: "active" | "scheduled" | "expired";
|
|
6437
|
-
/** @description Filter by source node ID */
|
|
6438
|
-
source_node_id?: string;
|
|
6439
|
-
};
|
|
8719
|
+
query?: never;
|
|
6440
8720
|
header?: never;
|
|
6441
8721
|
path: {
|
|
6442
8722
|
id: string;
|
|
6443
8723
|
};
|
|
6444
8724
|
cookie?: never;
|
|
6445
8725
|
};
|
|
6446
|
-
requestBody
|
|
8726
|
+
requestBody: {
|
|
8727
|
+
content: {
|
|
8728
|
+
"application/json": components["schemas"]["CreateOrganizationInviteDto"];
|
|
8729
|
+
};
|
|
8730
|
+
};
|
|
6447
8731
|
responses: {
|
|
6448
|
-
/** @description
|
|
6449
|
-
|
|
8732
|
+
/** @description Invitation created */
|
|
8733
|
+
201: {
|
|
6450
8734
|
headers: {
|
|
6451
8735
|
[name: string]: unknown;
|
|
6452
8736
|
};
|
|
6453
8737
|
content: {
|
|
6454
8738
|
"application/json": {
|
|
6455
|
-
|
|
6456
|
-
pagination: components["schemas"]["PageMetaDto"];
|
|
8739
|
+
data: components["schemas"]["ApiIdentityInviteResponseDto"];
|
|
6457
8740
|
};
|
|
6458
8741
|
};
|
|
6459
8742
|
};
|
|
@@ -6470,7 +8753,7 @@ interface operations {
|
|
|
6470
8753
|
* "code": null,
|
|
6471
8754
|
* "message": "Invalid or expired token",
|
|
6472
8755
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6473
|
-
* "path": "/api/v1/
|
|
8756
|
+
* "path": "/api/v1/organizations",
|
|
6474
8757
|
* "method": "GET"
|
|
6475
8758
|
* }
|
|
6476
8759
|
* }
|
|
@@ -6491,7 +8774,7 @@ interface operations {
|
|
|
6491
8774
|
* "code": null,
|
|
6492
8775
|
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
6493
8776
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6494
|
-
* "path": "/api/v1/
|
|
8777
|
+
* "path": "/api/v1/organizations",
|
|
6495
8778
|
* "method": "GET"
|
|
6496
8779
|
* }
|
|
6497
8780
|
* }
|
|
@@ -6499,7 +8782,7 @@ interface operations {
|
|
|
6499
8782
|
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6500
8783
|
};
|
|
6501
8784
|
};
|
|
6502
|
-
/** @description
|
|
8785
|
+
/** @description Organization not found */
|
|
6503
8786
|
404: {
|
|
6504
8787
|
headers: {
|
|
6505
8788
|
[name: string]: unknown;
|
|
@@ -6510,10 +8793,10 @@ interface operations {
|
|
|
6510
8793
|
* "error": {
|
|
6511
8794
|
* "statusCode": 404,
|
|
6512
8795
|
* "code": null,
|
|
6513
|
-
* "message": "
|
|
8796
|
+
* "message": "Organization not found",
|
|
6514
8797
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6515
|
-
* "path": "/api/v1/
|
|
6516
|
-
* "method": "
|
|
8798
|
+
* "path": "/api/v1/organizations/{id}/invites",
|
|
8799
|
+
* "method": "POST"
|
|
6517
8800
|
* }
|
|
6518
8801
|
* }
|
|
6519
8802
|
*/
|
|
@@ -6522,25 +8805,24 @@ interface operations {
|
|
|
6522
8805
|
};
|
|
6523
8806
|
};
|
|
6524
8807
|
};
|
|
6525
|
-
|
|
8808
|
+
ApiOrganizationsController_revokeInvite: {
|
|
6526
8809
|
parameters: {
|
|
6527
8810
|
query?: never;
|
|
6528
8811
|
header?: never;
|
|
6529
8812
|
path: {
|
|
6530
8813
|
id: string;
|
|
8814
|
+
inviteId: string;
|
|
6531
8815
|
};
|
|
6532
8816
|
cookie?: never;
|
|
6533
8817
|
};
|
|
6534
8818
|
requestBody?: never;
|
|
6535
8819
|
responses: {
|
|
6536
|
-
/** @description
|
|
6537
|
-
|
|
8820
|
+
/** @description Invitation revoked */
|
|
8821
|
+
204: {
|
|
6538
8822
|
headers: {
|
|
6539
8823
|
[name: string]: unknown;
|
|
6540
8824
|
};
|
|
6541
|
-
content
|
|
6542
|
-
"application/json": components["schemas"]["NodeIdentitiesSummaryDto"];
|
|
6543
|
-
};
|
|
8825
|
+
content?: never;
|
|
6544
8826
|
};
|
|
6545
8827
|
/** @description Invalid or expired token */
|
|
6546
8828
|
401: {
|
|
@@ -6555,7 +8837,7 @@ interface operations {
|
|
|
6555
8837
|
* "code": null,
|
|
6556
8838
|
* "message": "Invalid or expired token",
|
|
6557
8839
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6558
|
-
* "path": "/api/v1/
|
|
8840
|
+
* "path": "/api/v1/organizations",
|
|
6559
8841
|
* "method": "GET"
|
|
6560
8842
|
* }
|
|
6561
8843
|
* }
|
|
@@ -6576,7 +8858,7 @@ interface operations {
|
|
|
6576
8858
|
* "code": null,
|
|
6577
8859
|
* "message": "This token is not authorized for this endpoint (wrong principal type — e.g., admin token on identity-only endpoint, or vice versa)",
|
|
6578
8860
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6579
|
-
* "path": "/api/v1/
|
|
8861
|
+
* "path": "/api/v1/organizations",
|
|
6580
8862
|
* "method": "GET"
|
|
6581
8863
|
* }
|
|
6582
8864
|
* }
|
|
@@ -6584,7 +8866,7 @@ interface operations {
|
|
|
6584
8866
|
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
6585
8867
|
};
|
|
6586
8868
|
};
|
|
6587
|
-
/** @description
|
|
8869
|
+
/** @description No such invitation on this organization */
|
|
6588
8870
|
404: {
|
|
6589
8871
|
headers: {
|
|
6590
8872
|
[name: string]: unknown;
|
|
@@ -6595,10 +8877,10 @@ interface operations {
|
|
|
6595
8877
|
* "error": {
|
|
6596
8878
|
* "statusCode": 404,
|
|
6597
8879
|
* "code": null,
|
|
6598
|
-
* "message": "
|
|
8880
|
+
* "message": "No such invitation on this organization",
|
|
6599
8881
|
* "timestamp": "2026-04-20T12:00:00.000Z",
|
|
6600
|
-
* "path": "/api/v1/
|
|
6601
|
-
* "method": "
|
|
8882
|
+
* "path": "/api/v1/organizations/{id}/invites/{inviteId}",
|
|
8883
|
+
* "method": "DELETE"
|
|
6602
8884
|
* }
|
|
6603
8885
|
* }
|
|
6604
8886
|
*/
|
|
@@ -6610,8 +8892,10 @@ interface operations {
|
|
|
6610
8892
|
ApiRolesController_listRoles: {
|
|
6611
8893
|
parameters: {
|
|
6612
8894
|
query?: {
|
|
6613
|
-
|
|
6614
|
-
|
|
8895
|
+
/** @description Include deactivated roles in the list. */
|
|
8896
|
+
include_inactive?: "true" | "false";
|
|
8897
|
+
/** @description Filter by role origin. */
|
|
8898
|
+
type?: "system" | "custom";
|
|
6615
8899
|
};
|
|
6616
8900
|
header?: never;
|
|
6617
8901
|
path?: never;
|
|
@@ -6693,7 +8977,9 @@ interface operations {
|
|
|
6693
8977
|
[name: string]: unknown;
|
|
6694
8978
|
};
|
|
6695
8979
|
content: {
|
|
6696
|
-
"application/json":
|
|
8980
|
+
"application/json": {
|
|
8981
|
+
data: components["schemas"]["RoleResponseDto"];
|
|
8982
|
+
};
|
|
6697
8983
|
};
|
|
6698
8984
|
};
|
|
6699
8985
|
/** @description Invalid or expired token */
|
|
@@ -6778,7 +9064,9 @@ interface operations {
|
|
|
6778
9064
|
[name: string]: unknown;
|
|
6779
9065
|
};
|
|
6780
9066
|
content: {
|
|
6781
|
-
"application/json":
|
|
9067
|
+
"application/json": {
|
|
9068
|
+
data: components["schemas"]["RoleResponseDto"];
|
|
9069
|
+
};
|
|
6782
9070
|
};
|
|
6783
9071
|
};
|
|
6784
9072
|
/** @description Invalid or expired token */
|
|
@@ -6979,7 +9267,9 @@ interface operations {
|
|
|
6979
9267
|
[name: string]: unknown;
|
|
6980
9268
|
};
|
|
6981
9269
|
content: {
|
|
6982
|
-
"application/json":
|
|
9270
|
+
"application/json": {
|
|
9271
|
+
data: components["schemas"]["RoleResponseDto"];
|
|
9272
|
+
};
|
|
6983
9273
|
};
|
|
6984
9274
|
};
|
|
6985
9275
|
/** @description Invalid or expired token */
|
|
@@ -7176,7 +9466,9 @@ interface operations {
|
|
|
7176
9466
|
[name: string]: unknown;
|
|
7177
9467
|
};
|
|
7178
9468
|
content: {
|
|
7179
|
-
"application/json":
|
|
9469
|
+
"application/json": {
|
|
9470
|
+
data: components["schemas"]["MessageResponseDto"];
|
|
9471
|
+
};
|
|
7180
9472
|
};
|
|
7181
9473
|
};
|
|
7182
9474
|
/** @description Invalid or expired token */
|
|
@@ -7341,7 +9633,9 @@ interface operations {
|
|
|
7341
9633
|
[name: string]: unknown;
|
|
7342
9634
|
};
|
|
7343
9635
|
content: {
|
|
7344
|
-
"application/json":
|
|
9636
|
+
"application/json": {
|
|
9637
|
+
data: components["schemas"]["AssignmentsSummaryDto"];
|
|
9638
|
+
};
|
|
7345
9639
|
};
|
|
7346
9640
|
};
|
|
7347
9641
|
/** @description Invalid or expired token */
|
|
@@ -7407,7 +9701,9 @@ interface operations {
|
|
|
7407
9701
|
[name: string]: unknown;
|
|
7408
9702
|
};
|
|
7409
9703
|
content: {
|
|
7410
|
-
"application/json":
|
|
9704
|
+
"application/json": {
|
|
9705
|
+
data: components["schemas"]["AssignmentResponseDto"];
|
|
9706
|
+
};
|
|
7411
9707
|
};
|
|
7412
9708
|
};
|
|
7413
9709
|
/** @description System roles cannot be assigned to identities — they are reserved for platform administration */
|
|
@@ -7600,7 +9896,9 @@ interface operations {
|
|
|
7600
9896
|
[name: string]: unknown;
|
|
7601
9897
|
};
|
|
7602
9898
|
content: {
|
|
7603
|
-
"application/json":
|
|
9899
|
+
"application/json": {
|
|
9900
|
+
data: components["schemas"]["AssignmentResponseDto"];
|
|
9901
|
+
};
|
|
7604
9902
|
};
|
|
7605
9903
|
};
|
|
7606
9904
|
/** @description System roles cannot be assigned to identities — they are reserved for platform administration */
|
|
@@ -7772,7 +10070,9 @@ interface operations {
|
|
|
7772
10070
|
[name: string]: unknown;
|
|
7773
10071
|
};
|
|
7774
10072
|
content: {
|
|
7775
|
-
"application/json":
|
|
10073
|
+
"application/json": {
|
|
10074
|
+
data: components["schemas"]["MessageResponseDto"];
|
|
10075
|
+
};
|
|
7776
10076
|
};
|
|
7777
10077
|
};
|
|
7778
10078
|
/** @description System roles cannot be assigned to identities — they are reserved for platform administration */
|
|
@@ -7970,7 +10270,7 @@ interface operations {
|
|
|
7970
10270
|
to?: string;
|
|
7971
10271
|
/** @description Filter by one or more action keys. Repeat the query param (`?action=a&action=b`) or pass a comma-separated string. */
|
|
7972
10272
|
action?: string[];
|
|
7973
|
-
category?: "auth" | "identity" | "admin_user" | "tenancy" | "hierarchy" | "rbac" | "authorization" | "api_keys" | "oauth" | "webhooks" | "invites" | "mfa" | "audit" | "billing" | "sso" | "unknown";
|
|
10273
|
+
category?: "auth" | "identity" | "admin_user" | "tenancy" | "hierarchy" | "organization" | "rbac" | "authorization" | "api_keys" | "oauth" | "webhooks" | "invites" | "mfa" | "audit" | "billing" | "sso" | "unknown";
|
|
7974
10274
|
severity?: "info" | "notice" | "warning" | "critical";
|
|
7975
10275
|
outcome?: "success" | "failure" | "denied";
|
|
7976
10276
|
actor_id?: string;
|
|
@@ -8160,7 +10460,9 @@ interface operations {
|
|
|
8160
10460
|
[name: string]: unknown;
|
|
8161
10461
|
};
|
|
8162
10462
|
content: {
|
|
8163
|
-
"application/json":
|
|
10463
|
+
"application/json": {
|
|
10464
|
+
data: components["schemas"]["ExportJobDto"];
|
|
10465
|
+
};
|
|
8164
10466
|
};
|
|
8165
10467
|
};
|
|
8166
10468
|
/** @description Invalid or expired token */
|
|
@@ -8224,7 +10526,9 @@ interface operations {
|
|
|
8224
10526
|
[name: string]: unknown;
|
|
8225
10527
|
};
|
|
8226
10528
|
content: {
|
|
8227
|
-
"application/json":
|
|
10529
|
+
"application/json": {
|
|
10530
|
+
data: components["schemas"]["ExportJobDto"];
|
|
10531
|
+
};
|
|
8228
10532
|
};
|
|
8229
10533
|
};
|
|
8230
10534
|
/** @description Invalid or expired token */
|
|
@@ -8392,7 +10696,9 @@ interface operations {
|
|
|
8392
10696
|
[name: string]: unknown;
|
|
8393
10697
|
};
|
|
8394
10698
|
content: {
|
|
8395
|
-
"application/json":
|
|
10699
|
+
"application/json": {
|
|
10700
|
+
data: components["schemas"]["AuditLogDetailResponseDto"];
|
|
10701
|
+
};
|
|
8396
10702
|
};
|
|
8397
10703
|
};
|
|
8398
10704
|
/** @description Invalid or expired token */
|
|
@@ -8569,7 +10875,9 @@ interface operations {
|
|
|
8569
10875
|
[name: string]: unknown;
|
|
8570
10876
|
};
|
|
8571
10877
|
content: {
|
|
8572
|
-
"application/json":
|
|
10878
|
+
"application/json": {
|
|
10879
|
+
data: components["schemas"]["HierarchySchemaResponseDto"];
|
|
10880
|
+
};
|
|
8573
10881
|
};
|
|
8574
10882
|
};
|
|
8575
10883
|
/** @description Invalid or expired token */
|
|
@@ -8639,7 +10947,9 @@ interface operations {
|
|
|
8639
10947
|
[name: string]: unknown;
|
|
8640
10948
|
};
|
|
8641
10949
|
content: {
|
|
8642
|
-
"application/json":
|
|
10950
|
+
"application/json": {
|
|
10951
|
+
data: components["schemas"]["HierarchySchemaResponseDto"];
|
|
10952
|
+
};
|
|
8643
10953
|
};
|
|
8644
10954
|
};
|
|
8645
10955
|
/** @description Invalid or expired token */
|
|
@@ -8802,7 +11112,9 @@ interface operations {
|
|
|
8802
11112
|
[name: string]: unknown;
|
|
8803
11113
|
};
|
|
8804
11114
|
content: {
|
|
8805
|
-
"application/json":
|
|
11115
|
+
"application/json": {
|
|
11116
|
+
data: components["schemas"]["WebhookCreatedResponseDto"];
|
|
11117
|
+
};
|
|
8806
11118
|
};
|
|
8807
11119
|
};
|
|
8808
11120
|
/** @description One or more event types are not supported */
|
|
@@ -9050,7 +11362,9 @@ interface operations {
|
|
|
9050
11362
|
[name: string]: unknown;
|
|
9051
11363
|
};
|
|
9052
11364
|
content: {
|
|
9053
|
-
"application/json":
|
|
11365
|
+
"application/json": {
|
|
11366
|
+
data: components["schemas"]["WebhookResponseDto"];
|
|
11367
|
+
};
|
|
9054
11368
|
};
|
|
9055
11369
|
};
|
|
9056
11370
|
/** @description Invalid or expired token */
|
|
@@ -9222,7 +11536,9 @@ interface operations {
|
|
|
9222
11536
|
[name: string]: unknown;
|
|
9223
11537
|
};
|
|
9224
11538
|
content: {
|
|
9225
|
-
"application/json":
|
|
11539
|
+
"application/json": {
|
|
11540
|
+
data: components["schemas"]["WebhookResponseDto"];
|
|
11541
|
+
};
|
|
9226
11542
|
};
|
|
9227
11543
|
};
|
|
9228
11544
|
/** @description One or more event types are not supported */
|
|
@@ -9406,7 +11722,9 @@ interface operations {
|
|
|
9406
11722
|
[name: string]: unknown;
|
|
9407
11723
|
};
|
|
9408
11724
|
content: {
|
|
9409
|
-
"application/json":
|
|
11725
|
+
"application/json": {
|
|
11726
|
+
data: components["schemas"]["ApiKeyCreatedResponseDto"];
|
|
11727
|
+
};
|
|
9410
11728
|
};
|
|
9411
11729
|
};
|
|
9412
11730
|
/** @description Invalid or expired token */
|
|
@@ -9557,7 +11875,9 @@ interface operations {
|
|
|
9557
11875
|
[name: string]: unknown;
|
|
9558
11876
|
};
|
|
9559
11877
|
content: {
|
|
9560
|
-
"application/json":
|
|
11878
|
+
"application/json": {
|
|
11879
|
+
data: components["schemas"]["ApiKeyResponseDto"];
|
|
11880
|
+
};
|
|
9561
11881
|
};
|
|
9562
11882
|
};
|
|
9563
11883
|
/** @description Invalid or expired token */
|
|
@@ -9642,7 +11962,9 @@ interface operations {
|
|
|
9642
11962
|
[name: string]: unknown;
|
|
9643
11963
|
};
|
|
9644
11964
|
content: {
|
|
9645
|
-
"application/json":
|
|
11965
|
+
"application/json": {
|
|
11966
|
+
data: components["schemas"]["ApiKeyCreatedResponseDto"];
|
|
11967
|
+
};
|
|
9646
11968
|
};
|
|
9647
11969
|
};
|
|
9648
11970
|
/** @description Invalid or expired token */
|
|
@@ -9829,8 +12151,8 @@ declare class Assignments {
|
|
|
9829
12151
|
/** Same partial-success contract as `bulkCreate`. */
|
|
9830
12152
|
bulkChangeRole(input: RequestBody<"ApiAssignmentsController_bulkChangeRole">): Promise<ResponseBody<"ApiAssignmentsController_bulkChangeRole">>;
|
|
9831
12153
|
}
|
|
9832
|
-
type AssignmentItem = ItemOf$
|
|
9833
|
-
type ItemOf$
|
|
12154
|
+
type AssignmentItem = ItemOf$4<ResponseBody<"ApiAssignmentsController_listAppWideAssignments">>;
|
|
12155
|
+
type ItemOf$4<T> = T extends {
|
|
9834
12156
|
items: (infer Item)[];
|
|
9835
12157
|
} ? Item : never;
|
|
9836
12158
|
|
|
@@ -9871,9 +12193,71 @@ declare class Identities {
|
|
|
9871
12193
|
*/
|
|
9872
12194
|
permissions(id: string): Promise<ResponseBody<"ApiIdentitiesController_getIdentityPermissions">>;
|
|
9873
12195
|
}
|
|
9874
|
-
type IdentityItem = ItemOf$
|
|
12196
|
+
type IdentityItem = ItemOf$3<ResponseBody<"ApiIdentitiesController_listIdentities">>;
|
|
9875
12197
|
/** One role grant from an identity's assignments collection. */
|
|
9876
|
-
type IdentityAssignmentItem = ItemOf$
|
|
12198
|
+
type IdentityAssignmentItem = ItemOf$3<ResponseBody<"ApiIdentitiesController_getIdentityAssignments">>;
|
|
12199
|
+
type ItemOf$3<T> = T extends {
|
|
12200
|
+
items: (infer Item)[];
|
|
12201
|
+
} ? Item : never;
|
|
12202
|
+
|
|
12203
|
+
/**
|
|
12204
|
+
* Tenant organizations: one per business customer, a role per membership,
|
|
12205
|
+
* each with its own authentication policy and identity provider. Every
|
|
12206
|
+
* call here needs the Environment's organizations container switched on.
|
|
12207
|
+
*/
|
|
12208
|
+
declare class Organizations {
|
|
12209
|
+
private readonly client;
|
|
12210
|
+
constructor(client: CanopyClient);
|
|
12211
|
+
list(query?: QueryParams<"ApiOrganizationsController_listOrganizations">): Paginator<OrganizationItem>;
|
|
12212
|
+
get(id: string): Promise<ResponseBody<"ApiOrganizationsController_getOrganization">>;
|
|
12213
|
+
create(input: RequestBody<"ApiOrganizationsController_createOrganization">): Promise<ResponseBody<"ApiOrganizationsController_createOrganization">>;
|
|
12214
|
+
/**
|
|
12215
|
+
* Pass `ifMatch` with the organization's current `version` to make a
|
|
12216
|
+
* read-modify-write safe — a concurrent edit answers 409 instead of being
|
|
12217
|
+
* silently overwritten.
|
|
12218
|
+
*/
|
|
12219
|
+
update(id: string, input: RequestBody<"ApiOrganizationsController_updateOrganization">, options?: ConcurrencyOptions): Promise<ResponseBody<"ApiOrganizationsController_updateOrganization">>;
|
|
12220
|
+
/**
|
|
12221
|
+
* Removes the organization with its memberships, pending invitations,
|
|
12222
|
+
* policy, connection bindings, and the tree beneath it. Member identities
|
|
12223
|
+
* survive.
|
|
12224
|
+
*/
|
|
12225
|
+
delete(id: string, options?: ConcurrencyOptions): Promise<void>;
|
|
12226
|
+
/** Empties the container: every organization goes, the step before switching it off. */
|
|
12227
|
+
deleteAll(): Promise<void>;
|
|
12228
|
+
listMembers(id: string, query?: QueryParams<"ApiOrganizationsController_listMembers">): Paginator<OrganizationMemberItem>;
|
|
12229
|
+
addMember(id: string, input: RequestBody<"ApiOrganizationsController_addMember">): Promise<ResponseBody<"ApiOrganizationsController_addMember">>;
|
|
12230
|
+
changeMemberRole(id: string, identityId: string, input: RequestBody<"ApiOrganizationsController_changeMemberRole">): Promise<ResponseBody<"ApiOrganizationsController_changeMemberRole">>;
|
|
12231
|
+
/** Revokes that organization's one role; the identity and its other memberships are untouched. */
|
|
12232
|
+
removeMember(id: string, identityId: string): Promise<void>;
|
|
12233
|
+
listInvites(id: string, query?: QueryParams<"ApiOrganizationsController_listInvites">): Paginator<OrganizationInviteItem>;
|
|
12234
|
+
createInvite(id: string, input: RequestBody<"ApiOrganizationsController_createInvite">): Promise<ResponseBody<"ApiOrganizationsController_createInvite">>;
|
|
12235
|
+
revokeInvite(id: string, inviteId: string): Promise<void>;
|
|
12236
|
+
/**
|
|
12237
|
+
* The organization's own values (null inherits), the Environment baseline
|
|
12238
|
+
* they tighten from, and the effective policy its members sign in under.
|
|
12239
|
+
*/
|
|
12240
|
+
getPolicy(id: string): Promise<ResponseBody<"ApiOrganizationsController_getPolicy">>;
|
|
12241
|
+
/**
|
|
12242
|
+
* Can only tighten the Environment: a value that would loosen it answers
|
|
12243
|
+
* 400 `organization.policy_loosens`. Pass `ifMatch` with the policy's
|
|
12244
|
+
* `version` (0 until the organization sets one) for a safe
|
|
12245
|
+
* read-modify-write.
|
|
12246
|
+
*/
|
|
12247
|
+
updatePolicy(id: string, input: RequestBody<"ApiOrganizationsController_updatePolicy">, options?: ConcurrencyOptions): Promise<ResponseBody<"ApiOrganizationsController_updatePolicy">>;
|
|
12248
|
+
listSsoConnections(id: string): Promise<ResponseBody<"ApiOrganizationsController_listSsoConnections">>;
|
|
12249
|
+
/**
|
|
12250
|
+
* Sign-ins through the connection then land in this organization, joining
|
|
12251
|
+
* as a member with `default_role_id`. The connection must already be bound
|
|
12252
|
+
* to the organization's Environment, and a connection binds to one
|
|
12253
|
+
* organization per Environment.
|
|
12254
|
+
*/
|
|
12255
|
+
bindSsoConnection(id: string, input: RequestBody<"ApiOrganizationsController_bindSsoConnection">): Promise<ResponseBody<"ApiOrganizationsController_bindSsoConnection">>;
|
|
12256
|
+
unbindSsoConnection(id: string, connectionId: string): Promise<void>;
|
|
12257
|
+
}
|
|
12258
|
+
type OrganizationItem = ItemOf$2<ResponseBody<"ApiOrganizationsController_listOrganizations">>;
|
|
12259
|
+
type OrganizationMemberItem = ItemOf$2<ResponseBody<"ApiOrganizationsController_listMembers">>;
|
|
12260
|
+
type OrganizationInviteItem = ItemOf$2<ResponseBody<"ApiOrganizationsController_listInvites">>;
|
|
9877
12261
|
type ItemOf$2<T> = T extends {
|
|
9878
12262
|
items: (infer Item)[];
|
|
9879
12263
|
} ? Item : never;
|
|
@@ -9980,7 +12364,7 @@ type ItemOf<T> = T extends {
|
|
|
9980
12364
|
* ```
|
|
9981
12365
|
*
|
|
9982
12366
|
* `client` is public because the wrapped resources cover the paths integrators
|
|
9983
|
-
* hit most, not all
|
|
12367
|
+
* hit most, not all 102 operations. Anything not wrapped is still reachable —
|
|
9984
12368
|
* `canopy.client.request("GET", "/api/v1/audit-events")` — with the same
|
|
9985
12369
|
* envelope handling, typed errors and retry policy, so no endpoint is a dead
|
|
9986
12370
|
* end while the ergonomic surface catches up.
|
|
@@ -9991,6 +12375,7 @@ declare class Canopy {
|
|
|
9991
12375
|
readonly identities: Identities;
|
|
9992
12376
|
readonly roles: Roles;
|
|
9993
12377
|
readonly assignments: Assignments;
|
|
12378
|
+
readonly organizations: Organizations;
|
|
9994
12379
|
constructor(options: CanopyClientOptions);
|
|
9995
12380
|
}
|
|
9996
12381
|
|
|
@@ -10075,10 +12460,26 @@ declare class LocalAuthorizer {
|
|
|
10075
12460
|
/** Counters for observability — how much traffic the cache is actually saving. */
|
|
10076
12461
|
snapshot(): LocalAuthorizerStats;
|
|
10077
12462
|
/**
|
|
10078
|
-
* Drop
|
|
10079
|
-
*
|
|
12463
|
+
* Drop what is held so the next evaluate refetches.
|
|
12464
|
+
*
|
|
12465
|
+
* With an `identityId`, only that identity's grants are dropped — the
|
|
12466
|
+
* cached hierarchy and every other identity's entries stay warm. This is
|
|
12467
|
+
* the shape an assignment webhook wants: the event names the identity
|
|
12468
|
+
* whose authority moved, and nothing else needs to pay a refetch for it.
|
|
12469
|
+
*
|
|
12470
|
+
* With no argument, everything goes: grants and the hierarchy tree. Not
|
|
12471
|
+
* needed in normal operation, where entries expire on their own; useful in
|
|
12472
|
+
* tests and after a change whose reach you cannot name (a role's
|
|
12473
|
+
* permissions edited, a node moved).
|
|
12474
|
+
*
|
|
12475
|
+
* Multi-instance honesty: an invalidation reaches THIS process only. A
|
|
12476
|
+
* webhook lands on one instance behind a load balancer; the others serve
|
|
12477
|
+
* their cached grants until their own TTL expires. Unless the app fans the
|
|
12478
|
+
* event out over its own pub/sub, the fleet-wide revocation guarantee is
|
|
12479
|
+
* the TTL, and webhook-driven invalidation is a latency optimization on
|
|
12480
|
+
* top of it — size the TTL to the revocation latency you can promise.
|
|
10080
12481
|
*/
|
|
10081
|
-
invalidate(): void;
|
|
12482
|
+
invalidate(identityId?: string): void;
|
|
10082
12483
|
/** Climb from `nodeId` and look for a grant root among its ancestors. */
|
|
10083
12484
|
private holdsAtNode;
|
|
10084
12485
|
private grantRootsFor;
|
|
@@ -10315,8 +12716,54 @@ interface CanopyTokenClaims {
|
|
|
10315
12716
|
permissions?: string[];
|
|
10316
12717
|
/** True when `permissions` was truncated; query the API for the full set. */
|
|
10317
12718
|
permissions_overflow?: boolean;
|
|
12719
|
+
/**
|
|
12720
|
+
* How the session was proven: `pwd`, `otp`, or `sso`, plus `mfa` once a
|
|
12721
|
+
* second factor was verified. Identity tokens carry it; check for `mfa`
|
|
12722
|
+
* before allowing a sensitive action.
|
|
12723
|
+
*/
|
|
12724
|
+
amr?: string[];
|
|
12725
|
+
/**
|
|
12726
|
+
* The organization this session is acting in — present only on identity
|
|
12727
|
+
* tokens from an Environment with the organizations container on, for an
|
|
12728
|
+
* identity that belongs to at least one organization. Always minted
|
|
12729
|
+
* together with `org_role`; read the pair through {@link orgContext}
|
|
12730
|
+
* rather than separately.
|
|
12731
|
+
*/
|
|
12732
|
+
org_id?: string;
|
|
12733
|
+
/** The name of the single role the identity holds in `org_id`. */
|
|
12734
|
+
org_role?: string;
|
|
10318
12735
|
[claim: string]: unknown;
|
|
10319
12736
|
}
|
|
12737
|
+
/**
|
|
12738
|
+
* The organization context a verified token carries: which organization the
|
|
12739
|
+
* session is acting in, and the one role it holds there.
|
|
12740
|
+
*/
|
|
12741
|
+
interface CanopyOrgContext {
|
|
12742
|
+
/** The organization's id — also a hierarchy node id, usable as `node_id`. */
|
|
12743
|
+
orgId: string;
|
|
12744
|
+
/** The role's name (not its id): what `org_role` carries. */
|
|
12745
|
+
orgRole: string;
|
|
12746
|
+
}
|
|
12747
|
+
/**
|
|
12748
|
+
* The organization context of a verified token, or `null` when it has none.
|
|
12749
|
+
*
|
|
12750
|
+
* `null` is an ordinary answer, not a failure: it is every token from an
|
|
12751
|
+
* Environment without the organizations container on, and every identity
|
|
12752
|
+
* that belongs to no organization yet. Branch on it rather than on the raw claims —
|
|
12753
|
+
* Canopy mints `org_id` and `org_role` together, and this helper refuses a
|
|
12754
|
+
* half-present pair instead of letting one claim be read as though the other
|
|
12755
|
+
* were there.
|
|
12756
|
+
*
|
|
12757
|
+
* ```ts
|
|
12758
|
+
* const claims = await verifier.verify(token);
|
|
12759
|
+
* const org = orgContext(claims);
|
|
12760
|
+
*
|
|
12761
|
+
* if (org) {
|
|
12762
|
+
* // acting inside org.orgId as org.orgRole
|
|
12763
|
+
* }
|
|
12764
|
+
* ```
|
|
12765
|
+
*/
|
|
12766
|
+
declare function orgContext(claims: CanopyTokenClaims): CanopyOrgContext | null;
|
|
10320
12767
|
declare class TokenVerifier {
|
|
10321
12768
|
private readonly issuer;
|
|
10322
12769
|
private readonly audience;
|
|
@@ -10376,4 +12823,4 @@ declare class TokenVerifier {
|
|
|
10376
12823
|
private fetchKeys;
|
|
10377
12824
|
}
|
|
10378
12825
|
|
|
10379
|
-
export { type AssignmentItem, Assignments, type CallOptions, Canopy, CanopyAuthorizerError, CanopyClient, type CanopyClientOptions, CanopyConnectionError, CanopyError, type CanopyErrorBody, type CanopyTokenClaims, CanopyTokenError, type Collection, type ConcurrencyOptions, type ConditionalResult, type CursorPagination, Identities, type IdentityAssignmentItem, type IdentityItem, type LocalAuthorizationQuery, LocalAuthorizer, type LocalAuthorizerOptions, type LocalAuthorizerStats, type OffsetPagination, type OperationId, type PageFetcher, type PageParams, type PaginateOptions, type Pagination, Paginator, type PartialSuccess, type PermissionItem, Permissions, type QueryParams, type RequestBody, type RequestOptions, type ResponseBody, type RoleItem, Roles, type Schema, TokenVerifier, type TokenVerifierOptions, type components, isCanopyAuthorizerError, isCanopyConnectionError, isCanopyError, isCanopyTokenError, isCursorPagination, type operations, paginate, type paths, withConcurrency };
|
|
12826
|
+
export { type AssignmentItem, Assignments, type CallOptions, Canopy, CanopyAuthorizerError, CanopyClient, type CanopyClientOptions, CanopyConnectionError, CanopyError, type CanopyErrorBody, type CanopyOrgContext, type CanopyTokenClaims, CanopyTokenError, type Collection, type ConcurrencyOptions, type ConditionalResult, type CursorPagination, Identities, type IdentityAssignmentItem, type IdentityItem, type LocalAuthorizationQuery, LocalAuthorizer, type LocalAuthorizerOptions, type LocalAuthorizerStats, type OffsetPagination, type OperationId, type OrganizationInviteItem, type OrganizationItem, type OrganizationMemberItem, Organizations, type PageFetcher, type PageParams, type PaginateOptions, type Pagination, Paginator, type PartialSuccess, type PermissionItem, Permissions, type QueryParams, type RequestBody, type RequestOptions, type ResponseBody, type RoleItem, Roles, type Schema, TokenVerifier, type TokenVerifierOptions, type components, isCanopyAuthorizerError, isCanopyConnectionError, isCanopyError, isCanopyTokenError, isCursorPagination, type operations, orgContext, paginate, type paths, withConcurrency };
|