Auth & IAM
52 endpoints
Auth
4 endpoints
/api/v1/auth/me/orgsList My Org Memberships
List org memberships for the authenticated user. This endpoint does NOT require an org_id — it is used during initial login to discover which organizations the user belongs to before an org is selected.
Responses
is_platform_adminbooleanWhether the current user has a platform admin role.
orgsobject[]requiredOrganization memberships for the current user.
curl -X GET "https://api.example.com/api/v1/auth/me/orgs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/auth/me/orgs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/auth/change-passwordChange Password
Change password for authenticated actor.
Request Body
current_passwordstringrequirednew_passwordstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/auth/change-password" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"current_password": "string",
"new_password": "string"
}'curl -X POST "https://api.example.com/api/v1/auth/change-password" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"current_password": "string",
"new_password": "string"
}'/api/v1/auth/forgot-passwordSend Password Reset Email
Request a reset email. Always succeeds to avoid enumeration.
Request Body
emailstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/auth/forgot-password" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "string"
}'curl -X POST "https://api.example.com/api/v1/auth/forgot-password" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "string"
}'/api/v1/auth/resend-verificationResend Verification Email
Resend verification email for authenticated actor.
Responses
curl -X POST "https://api.example.com/api/v1/auth/resend-verification" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/auth/resend-verification" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"Iam
47 endpoints
/api/v1/{org_id}/iam/approvalsList Approvals
List approvals with optional status filter. When status is omitted, returns all approvals. When status is 'pending', auto-expires stale approvals first.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
status"approved" | "expired" | "pending" | "rejected"pageintegerDefault: 1
page_sizeintegerDefault: 50
Responses
itemsobject[]requiredpageintegerrequiredpage_sizeintegerrequiredtotalintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/approvals" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/approvals" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/approvals/{approval_uuid}Get Approval
Get an approval by ID.
Parameters
Path Parameters
approval_uuidstringrequiredorg_idstringrequiredResponses
contains_phibooleanexpires_atstring (date-time)requiredidstring (uuid)requiredoperation_payloadobjectrequiredoperation_typestringrequiredorg_idstring (uuid)requiredpinned_group_versionsobjectrequiredpinned_scope_node_idstring (uuid)pinned_scope_node_pathstringrequested_atstring (date-time)requiredrequested_bystring (uuid)requiredreview_notestringreviewed_atstring (date-time)reviewed_bystring (uuid)statusenumrequiredapprovedexpiredpendingrejecteddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/approvals/{approval_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/approvals/{approval_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/assignmentsList Iam Assignments
List assignments with optional filters.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
user_idstringgroup_uuidstringscope_node_uuidstringstatus"active" | "expired" | "pending_activation" | "suspended"limitintegerDefault: 100
offsetintegerDefault: 0
Responses
itemsobject[]requiredtotalintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/assignments" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/assignments" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/effective-permissionsGet Effective Permissions
Get effective permissions for a user at a given scope/context.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
user_idstringrequiredscope_node_uuidstringcontext"all" | "location" | "org" | "provider" | "self"Evaluation context: 'all' (default) returns permissions across every scope/context; 'org', 'location', 'self', 'provider' filter to a specific context.
alllocationorgproviderselfDefault: "all"
Responses
cache_versionintegerrequiredCache version for staleness detection.
permissionsstring[]requiredGranted permission keys.
registry_versionintegerrequiredPermission registry version for staleness detection.
scope_tree_versionintegerrequiredScope tree version for staleness detection.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/effective-permissions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/effective-permissions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/effective-permissions/compareCompare effective permissions across locations
Compare a user's effective permissions across all accessible locations. Returns org-level permissions that apply everywhere, per-location permission sets, and a ``varies`` list of permission keys that differ across locations. Raises 404 if the user is not found.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
user_idstringrequiredPublic UUID of the target user.
Responses
locationsobject[]requiredPer-location permission sets.
org_permissionsstring[]requiredPermission keys granted at org level (apply everywhere).
variesstring[]requiredPermission keys that are granted at some locations but not others.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/effective-permissions/compare" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/effective-permissions/compare" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/effective-permissions/diagnosticGet Effective Permissions Diagnostic
Get effective permissions with provenance for diagnostic/admin workflows.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
user_idstringrequiredscope_node_uuidstringcontext"all" | "location" | "org" | "provider" | "self"Evaluation context: 'all' (default) returns permissions across every scope/context; 'org', 'location', 'self', 'provider' filter to a specific context.
alllocationorgproviderselfDefault: "all"
Responses
cache_versionintegerrequiredCache version for staleness detection.
permissionsobject[]requiredPermissions with grant chain details.
registry_versionintegerrequiredPermission registry version for staleness detection.
scope_tree_versionintegerrequiredScope tree version for staleness detection.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/effective-permissions/diagnostic" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/effective-permissions/diagnostic" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/groupsList Groups
List permission groups for the organization.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerDefault: 1
page_sizeintegerDefault: 50
status"active" | "archived"Responses
itemsobject[]requiredpageintegerrequiredpage_sizeintegerrequiredtotalintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/groups" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/groups" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/groups/{group_uuid}Get Group
Get a permission group by ID.
Parameters
Path Parameters
group_uuidstringrequiredorg_idstringrequiredResponses
contains_phibooleanrequiredcontext_typesstring[]requiredcreated_atstring (date-time)requiredcreated_bystring (uuid)descriptionstringrequiredidstring (uuid)requiredis_org_adminbooleanrequiredis_systembooleanrequirednamestringrequiredorg_idstring (uuid)requiredscope_applicabilitystring[]requiredstatusenumrequiredactivearchivedupdated_atstring (date-time)requiredupdated_bystring (uuid)versionintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/groups/{group_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/groups/{group_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/groups/{group_uuid}/permission-idsGet Group Permission Ids
Get the permission IDs for a group.
Parameters
Path Parameters
group_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/groups/{group_uuid}/permission-ids" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/groups/{group_uuid}/permission-ids" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/location-access/{location_uuid}Get Location Access
Get all users with access to a location.
Parameters
Path Parameters
location_uuidstringrequiredorg_idstringrequiredResponses
usersobject[]requiredUsers with access at this location.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/location-access/{location_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/location-access/{location_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/permission-keysGet Permission Keys
Return all non-retired permission keys and current registry version. Used by frontend for TypeScript codegen of permission constants.
Parameters
Path Parameters
org_idstringrequiredResponses
keysstring[]requiredregistry_versionintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/permission-keys" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/permission-keys" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/permission-registryGet Permission Registry
Return all non-retired permissions with full details and registry version.
Parameters
Path Parameters
org_idstringrequiredResponses
permissionsobject[]requiredregistry_versionintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/permission-registry" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/permission-registry" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/scope-treeGet Scope Tree
Return flat scope tree nodes with resolved entity names.
Parameters
Path Parameters
org_idstringrequiredResponses
nodesobject[]requiredscope_tree_versionintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/scope-tree" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/scope-tree" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/user-access/{user_id}Get User Access
Get all assignments for a user.
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredResponses
assignmentsobject[]requiredList of assignment details.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/user-access/{user_id}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/user-access/{user_id}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/usersList users
List organization members with search, sort, and pagination. Raises 422 if sort_by is not a valid column or sort_order is invalid.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based).
Default: 1
page_sizeintegerNumber of items per page.
Default: 50
status"active" | "invited" | "removed" | "suspended"Filter by membership status.
searchstringSearch by email or display name (ILIKE).
sort_by"display_name" | "email" | "joined_at" | "last_login_at" | "membership_status"Sort column. One of: display_name, email, joined_at, last_login_at, membership_status.
display_nameemailjoined_atlast_login_atmembership_statusDefault: "display_name"
sort_order"asc" | "desc"Sort direction. One of: asc, desc.
ascdescDefault: "asc"
Responses
itemsobject[]requiredpageintegerrequiredpage_sizeintegerrequiredtotalintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/users" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/users" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/users/{user_id}Get user detail
Get detailed user information for the user detail page. Returns user profile, membership status, provider link, and assignment counts. Raises 404 if the user is not a member of this organization.
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredResponses
accepted_atstring (date-time)assignment_countintegeravatar_urlstringdisplay_namestringrequiredDisplay name.
emailstringrequiredUser email address.
email_verifiedbooleanWhether the user's email is verified.
group_countintegerinvited_atstring (date-time)invited_bystring (uuid)joined_atstring (date-time)requiredTimestamp when membership was created.
last_activity_atstring (date-time)last_login_atstring (date-time)membership_statusstringrequiredMembership status in this organization.
phonestringprovider_idstring (uuid)role_hintstringsuspended_atstring (date-time)user_idstring (uuid)requiredUser UUID.
user_statusstringrequiredGlobal user status (active, suspended, deactivated).
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/users/exportExport Users
Export users list as CSV.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/iam/users/export" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/iam/users/export" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/approvals/{approval_uuid}/reviewReview Approval
Review a pending approval (approve or reject).
Parameters
Path Parameters
approval_uuidstringrequiredorg_idstringrequiredRequest Body
actionenumrequiredapproverejectnotestringphi_acknowledgedbooleanResponses
created_atstring (date-time)requiredeffective_fromstring (date-time)effective_tostring (date-time)granted_atstring (date-time)requiredgranted_bystring (uuid)requiredidstring (uuid)requiredorg_idstring (uuid)requiredpermission_group_idstring (uuid)requiredprovider_idstring (uuid)reasonstringrequiredscope_node_idstring (uuid)requiredstatusenumrequiredactiveexpiredpending_activationsuspendedsuspended_atstring (date-time)suspended_bystring (uuid)updated_atstring (date-time)requireduser_idstring (uuid)requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/approvals/{approval_uuid}/review" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": "approve",
"note": "",
"phi_acknowledged": false
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/approvals/{approval_uuid}/review" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": "approve",
"note": "",
"phi_acknowledged": false
}'/api/v1/{org_id}/iam/assignmentsGrant Assignment
Grant a permission assignment. Returns 201 with assignment on success, or 202 with pending approval if two-person control is triggered.
Parameters
Path Parameters
org_idstringrequiredRequest Body
effective_fromstring (date-time)effective_tostring (date-time)permission_group_uuidstring (uuid)requiredprovider_uuidstring (uuid)reasonstringscope_node_uuidstring (uuid)requireduser_uuidstring (uuid)requiredResponses
created_atstring (date-time)requiredeffective_fromstring (date-time)effective_tostring (date-time)granted_atstring (date-time)requiredgranted_bystring (uuid)requiredidstring (uuid)requiredorg_idstring (uuid)requiredpermission_group_idstring (uuid)requiredprovider_idstring (uuid)reasonstringrequiredscope_node_idstring (uuid)requiredstatusenumrequiredactiveexpiredpending_activationsuspendedsuspended_atstring (date-time)suspended_bystring (uuid)updated_atstring (date-time)requireduser_idstring (uuid)requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"effective_from": "string",
"effective_to": "string",
"permission_group_uuid": "00000000-0000-0000-0000-000000000000",
"provider_uuid": "string",
"reason": "",
"scope_node_uuid": "00000000-0000-0000-0000-000000000000",
"user_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"effective_from": "string",
"effective_to": "string",
"permission_group_uuid": "00000000-0000-0000-0000-000000000000",
"provider_uuid": "string",
"reason": "",
"scope_node_uuid": "00000000-0000-0000-0000-000000000000",
"user_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/iam/assignments/bulkBulk Assignments
Bulk grant assignments for multiple users.
Parameters
Path Parameters
org_idstringrequiredRequest Body
effective_fromstring (date-time)effective_tostring (date-time)permission_group_uuidstring (uuid)requiredprovider_idstring (uuid)reasonstringscope_node_uuidstring (uuid)requireduser_emailsstring[]requiredResponses
failedintegerrequiredpendingintegerresultsobject[]requiredskippedintegerrequiredsucceededintegerrequiredtotalintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments/bulk" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"effective_from": "string",
"effective_to": "string",
"permission_group_uuid": "00000000-0000-0000-0000-000000000000",
"provider_id": "string",
"reason": "",
"scope_node_uuid": "00000000-0000-0000-0000-000000000000",
"user_emails": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments/bulk" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"effective_from": "string",
"effective_to": "string",
"permission_group_uuid": "00000000-0000-0000-0000-000000000000",
"provider_id": "string",
"reason": "",
"scope_node_uuid": "00000000-0000-0000-0000-000000000000",
"user_emails": []
}'/api/v1/{org_id}/iam/assignments/bulk-revokeBulk Revoke Assignments
Bulk revoke assignments for multiple users.
Parameters
Path Parameters
org_idstringrequiredRequest Body
permission_group_uuidstring (uuid)requireduser_emailsstring[]requiredResponses
failedintegerrequiredpendingintegerresultsobject[]requiredskippedintegerrequiredsucceededintegerrequiredtotalintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments/bulk-revoke" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"permission_group_uuid": "00000000-0000-0000-0000-000000000000",
"user_emails": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments/bulk-revoke" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"permission_group_uuid": "00000000-0000-0000-0000-000000000000",
"user_emails": []
}'/api/v1/{org_id}/iam/assignments/bulk-uploadBulk Assignments Upload
Bulk grant/revoke assignments from CSV-parsed rows.
Parameters
Path Parameters
org_idstringrequiredRequest Body
rowsobject[]requiredResponses
failedintegerrequiredpendingintegerresultsobject[]requiredskippedintegerrequiredsucceededintegerrequiredtotalintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments/bulk-upload" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rows": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments/bulk-upload" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rows": []
}'/api/v1/{org_id}/iam/assignments/copyCopy Assignments
Copy assignments from one user to another.
Parameters
Path Parameters
org_idstringrequiredRequest Body
assignment_uuidsstring (uuid)[]source_user_emailstringrequiredtarget_user_emailstringrequiredResponses
failedintegerrequiredpendingintegerresultsobject[]requiredskippedintegerrequiredsucceededintegerrequiredtotalintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments/copy" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"assignment_uuids": null,
"source_user_email": "string",
"target_user_email": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/assignments/copy" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"assignment_uuids": null,
"source_user_email": "string",
"target_user_email": "string"
}'/api/v1/{org_id}/iam/groupsCreate Group
Create a new permission group.
Parameters
Path Parameters
org_idstringrequiredRequest Body
context_typesenum[]descriptionstringnamestringrequiredpermission_idsinteger[]scope_applicabilityenum[]Responses
contains_phibooleanrequiredcontext_typesstring[]requiredcreated_atstring (date-time)requiredcreated_bystring (uuid)descriptionstringrequiredidstring (uuid)requiredis_org_adminbooleanrequiredis_systembooleanrequirednamestringrequiredorg_idstring (uuid)requiredscope_applicabilitystring[]requiredstatusenumrequiredactivearchivedupdated_atstring (date-time)requiredupdated_bystring (uuid)versionintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/groups" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"context_types": null,
"description": "",
"name": "string",
"permission_ids": null,
"scope_applicability": null
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/groups" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"context_types": null,
"description": "",
"name": "string",
"permission_ids": null,
"scope_applicability": null
}'/api/v1/{org_id}/iam/groups/import-standardImport Standard Groups
Import missing standard permission groups for the organization.
Parameters
Path Parameters
org_idstringrequiredResponses
created_countintegerrequiredcreated_groupsobject[]requiredskipped_countintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/groups/import-standard" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/iam/groups/import-standard" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/preview/assignmentPreview Assignment
Preview the effect of granting an assignment.
Parameters
Path Parameters
org_idstringrequiredRequest Body
permission_group_uuidstring (uuid)requiredscope_node_uuidstring (uuid)requireduser_uuidstring (uuid)requiredResponses
affected_locationsstring[]requiredcontains_phi_additionsbooleanrequirednew_permissionsstring[]requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/preview/assignment" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"permission_group_uuid": "00000000-0000-0000-0000-000000000000",
"scope_node_uuid": "00000000-0000-0000-0000-000000000000",
"user_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/preview/assignment" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"permission_group_uuid": "00000000-0000-0000-0000-000000000000",
"scope_node_uuid": "00000000-0000-0000-0000-000000000000",
"user_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/iam/preview/group-editPreview Group Edit
Preview the effect of editing a permission group.
Parameters
Path Parameters
org_idstringrequiredRequest Body
add_permissionsinteger[]group_uuidstring (uuid)requiredremove_permissionsinteger[]Responses
affected_location_countintegerrequiredaffected_user_countintegerrequiredpermissions_gainedstring[]requiredpermissions_loststring[]requiredphi_impactstringrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/preview/group-edit" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"add_permissions": null,
"group_uuid": "00000000-0000-0000-0000-000000000000",
"remove_permissions": null
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/preview/group-edit" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"add_permissions": null,
"group_uuid": "00000000-0000-0000-0000-000000000000",
"remove_permissions": null
}'/api/v1/{org_id}/iam/preview/hierarchy-movePreview Hierarchy Move
Preview the effect of moving a scope node in the hierarchy.
Parameters
Path Parameters
org_idstringrequiredRequest Body
new_parent_uuidstring (uuid)requiredscope_node_uuidstring (uuid)requiredResponses
unaffected_usersobject[]requiredusers_gaining_accessobject[]requiredusers_losing_accessobject[]requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/preview/hierarchy-move" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"new_parent_uuid": "00000000-0000-0000-0000-000000000000",
"scope_node_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/preview/hierarchy-move" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"new_parent_uuid": "00000000-0000-0000-0000-000000000000",
"scope_node_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/iam/preview/revokePreview Revoke
Preview the effect of revoking an assignment.
Parameters
Path Parameters
org_idstringrequiredRequest Body
assignment_uuidstring (uuid)requiredResponses
affected_locationsintegerrequiredassignment_idstring (uuid)requiredgroup_namestringrequiredpermissions_loststring[]requiredphi_permissions_lostintegerrequiredscope_namestringrequireduser_idstring (uuid)requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/preview/revoke" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"assignment_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/preview/revoke" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"assignment_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/iam/scope-tree/rebuildRebuild Scope Tree
Rebuild the scope tree hierarchy from org structure M2M relationships.
Parameters
Path Parameters
org_idstringrequiredResponses
nodes_updatedintegerrequiredscope_tree_versionintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/scope-tree/rebuild" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/iam/scope-tree/rebuild" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/users/{user_id}/deactivateDeactivate User
Deactivate a user in the organization.
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/deactivate" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/deactivate" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/users/{user_id}/provider-linkLink User To Provider
Link a user to a provider (required for self-context permissions).
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredRequest Body
base_versionintegerprovider_uuidstring (uuid)requiredProvider UUID to link to this user.
Responses
is_primarybooleanrequiredorg_idstring (uuid)requiredprovider_idstring (uuid)requireduser_idstring (uuid)requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/provider-link" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/provider-link" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/iam/users/{user_id}/removeRemove user
Remove a user from the organization. Works on active or suspended memberships. Sets membership to removed, suspends all assignments, and clears permission cache. Raises 404 if the user is not a member. Raises 400 if the user is not in active or suspended status.
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/remove" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/remove" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/users/{user_id}/resend-inviteResend Invite
Resend invite email for a pending user.
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/resend-invite" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/resend-invite" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/users/{user_id}/restoreRestore user
Restore a suspended or removed user in the organization. SUSPENDED -> ACTIVE (does not restore assignments). REMOVED -> INVITED (re-sends invite). Raises 404 if the user is not a member. Raises 400 if the user is not in suspended or removed status.
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/restore" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/restore" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/users/{user_id}/revoke-inviteRevoke invite
Revoke a pending invitation for a user. Only works on memberships with status=invited. Sets membership to removed. Raises 404 if the user is not a member. Raises 400 if the user is not in invited status.
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/revoke-invite" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/revoke-invite" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/users/{user_id}/suspendSuspend user
Suspend an active user in the organization. Sets membership to suspended, suspends all assignments, and invalidates permission cache. Blocks auth if no other active memberships remain. Raises 404 if the user is not a member. Raises 400 if the user is not active.
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/suspend" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}/suspend" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/users/bulkBulk User Action
Bulk user actions (suspend, restore, resend_invite) by email.
Parameters
Path Parameters
org_idstringrequiredRequest Body
actionenumrequiredresend_inviterestoresuspenduser_emailsstring[]user_uuidsstring (uuid)[]Responses
failedintegerrequiredpendingintegerresultsobject[]requiredskippedintegerrequiredsucceededintegerrequiredtotalintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/bulk" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": "resend_invite",
"user_emails": null,
"user_uuids": null
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/bulk" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": "resend_invite",
"user_emails": null,
"user_uuids": null
}'/api/v1/{org_id}/iam/users/bulk-inviteBulk Invite
Bulk invite users from CSV-parsed rows.
Parameters
Path Parameters
org_idstringrequiredRequest Body
rowsobject[]usersobject[]Responses
failedintegerrequiredpendingintegerresultsobject[]requiredskippedintegerrequiredsucceededintegerrequiredtotalintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/bulk-invite" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rows": null,
"users": null
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/bulk-invite" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rows": null,
"users": null
}'/api/v1/{org_id}/iam/users/bulk-restoreBulk Restore
Bulk restore users from CSV-parsed rows.
Parameters
Path Parameters
org_idstringrequiredRequest Body
rowsobject[]requiredResponses
failedintegerrequiredpendingintegerresultsobject[]requiredskippedintegerrequiredsucceededintegerrequiredtotalintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/bulk-restore" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rows": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/bulk-restore" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rows": []
}'/api/v1/{org_id}/iam/users/bulk-suspendBulk Suspend
Bulk suspend users from CSV-parsed rows.
Parameters
Path Parameters
org_idstringrequiredRequest Body
rowsobject[]requiredResponses
failedintegerrequiredpendingintegerresultsobject[]requiredskippedintegerrequiredsucceededintegerrequiredtotalintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/bulk-suspend" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rows": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/bulk-suspend" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rows": []
}'/api/v1/{org_id}/iam/users/existsUsers Exist
Check which emails already exist in the organization.
Parameters
Path Parameters
org_idstringrequiredRequest Body
emailsstring[]requiredResponses
existing_emailsstring[]requiredmissing_emailsstring[]requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/exists" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"emails": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/exists" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"emails": []
}'/api/v1/{org_id}/iam/users/inviteInvite user
Invite a user to the organization. Creates the user in the auth provider if they don't exist, then creates an org membership with status=invited. Optionally accepts a role_hint for UI display. Raises 400 if the user is already an active member. Raises 403 if the user is globally deactivated.
Parameters
Path Parameters
org_idstringrequiredRequest Body
display_namestringrequiredDisplay name for the invited user.
emailstringrequiredEmail address of the user to invite.
role_hintstringResponses
created_atstring (date-time)requireddisplay_namestringrequiredemailstringrequiredidstring (uuid)requiredstatusstringrequiredupdated_atstring (date-time)requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/invite" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "string",
"email": "string",
"role_hint": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/iam/users/invite" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "string",
"email": "string",
"role_hint": "string"
}'/api/v1/{org_id}/iam/groups/{group_uuid}Edit Group
Edit a permission group.
Parameters
Path Parameters
group_uuidstringrequiredorg_idstringrequiredRequest Body
add_permissionsinteger[]base_versionintegerrequiredchange_reasonstringdescriptionstringnamestringremove_permissionsinteger[]Responses
contains_phibooleanrequiredcontext_typesstring[]requiredcreated_atstring (date-time)requiredcreated_bystring (uuid)descriptionstringrequiredidstring (uuid)requiredis_org_adminbooleanrequiredis_systembooleanrequirednamestringrequiredorg_idstring (uuid)requiredscope_applicabilitystring[]requiredstatusenumrequiredactivearchivedupdated_atstring (date-time)requiredupdated_bystring (uuid)versionintegerrequireddetailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/iam/groups/{group_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"add_permissions": null,
"base_version": 1,
"change_reason": "",
"description": "string",
"name": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/iam/groups/{group_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"add_permissions": null,
"base_version": 1,
"change_reason": "",
"description": "string",
"name": "string"
}'/api/v1/{org_id}/iam/users/{user_id}Update User Profile
Update user profile fields (display name; email updates may be blocked).
Parameters
Path Parameters
user_idstringrequiredorg_idstringrequiredRequest Body
avatar_urlstringdisplay_namestringemailstringphonestringrole_hintstringResponses
display_namestringrequiredemailstringrequiredupdated_atstring (date-time)requireduser_idstring (uuid)requireddetailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"avatar_url": "string",
"display_name": "string",
"email": "string",
"phone": "string",
"role_hint": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/iam/users/{user_id}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"avatar_url": "string",
"display_name": "string",
"email": "string",
"phone": "string",
"role_hint": "string"
}'/api/v1/{org_id}/iam/assignments/{assignment_uuid}Revoke Assignment
Revoke (suspend) a permission assignment.
Parameters
Path Parameters
assignment_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/iam/assignments/{assignment_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/iam/assignments/{assignment_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/iam/groups/{group_uuid}Archive Group
Archive a permission group.
Parameters
Path Parameters
group_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/iam/groups/{group_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/iam/groups/{group_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"Session
1 endpoint
/api/v1/{org_id}/session/bootstrapSession Bootstrap
Bootstrap session data for frontend app startup.
Parameters
Path Parameters
org_idstringrequiredResponses
accessible_locationsobject[]requiredcache_versionintegerrequiredis_org_adminbooleanrequiredis_platform_adminbooleanis_providerbooleanrequiredmembershipobjectrequiredorgobjectrequiredorg_permissionsstring[]requiredorgsobject[]preferencesobjectprovider_idstringregistry_versionintegerrequiredscope_tree_versionintegerrequireduserobjectrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/session/bootstrap" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/session/bootstrap" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"