REST API#
User Info Service exposes a REST (HTTP/JSON) API that provides read-only access to user and group information from the organization’s directory.
All endpoints return JSON responses. All error responses use a consistent body with error (machine-readable code) and message (human-readable description) fields.
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this section are to be interpreted as described in RFC 2119.
Error codes#
Status Code |
Error Code |
Condition |
|---|---|---|
|
|
Missing or invalid bearer token. |
|
|
The authenticated user does not have permission to perform this operation. |
|
|
The requested user or group does not exist, or membership check failed. |
|
|
The identity provider’s rate limit has been exceeded. The |
|
|
The identity provider returned an unexpected error. |
|
|
An unexpected internal error occurred. |
Response models#
User — a user account in the organization’s directory.
Field |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Unique identifier of the user in the identity provider. |
|
string |
yes |
Full display name (e.g. “Jane Doe”). |
|
string |
no |
First/given name. |
|
string |
no |
Last/family name. |
|
string |
no |
Primary email address. |
|
string |
yes |
Login username (user principal name). |
|
boolean |
no |
Whether the account is enabled in the directory. |
|
string |
no |
Job title as recorded in the directory. |
Group — a security or distribution group in the organization’s directory.
Field |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Unique identifier of the group in the identity provider. |
|
string |
yes |
Display name of the group. |
|
string |
no |
Human-readable description of the group’s purpose. |
GET /api/v1alpha/users/me — Get current user#
Returns the profile of the currently authenticated user. The caller’s identity is determined from the Authorization: Bearer <token> header and resolved against the local directory cache. This means the response reflects the same synchronized directory state as all other endpoints.
A typical use case is displaying the current user’s name and email in an application header or profile menu after sign-in.
Parameters: None.
Response: 200 OK — User object.
Example:
Request:
GET /api/v1alpha/users/me
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"display_name": "Jane Doe",
"given_name": "Jane",
"family_name": "Doe",
"email": "jane.doe@example.com",
"username": "jane.doe@example.com",
"active": true,
"job_title": "Senior Engineer"
}
GET /api/v1alpha/users — List users#
Lists users in the directory with optional filtering. Results are paginated.
This endpoint supports two primary usage patterns. First, it can resolve a known email address to a user profile — for example, during migration from email-based Nucleus ACLs to identifier-based policies, the migration tool queries by email to obtain the corresponding stable id. Second, it can search by display name to power auto-completion in user interfaces — an administrator types a partial name and the UI presents matching results for selection.
Query parameters:
Parameter |
Required |
Description |
|---|---|---|
|
no |
Filter by exact email address. |
|
no |
Filter by display name. Append |
|
no |
Maximum number of results per page. Default: 20. Maximum: 100. |
|
no |
Opaque pagination token from a previous response’s |
Response: 200 OK — Paginated list of User objects.
Field |
Type |
Description |
|---|---|---|
|
array of User |
Users matching the request filters. |
|
string or null |
Opaque token to retrieve the next page. Null when there are no more results. |
Example — resolve an email to a user ID:
Request:
GET /api/v1alpha/users?email=jane.doe@example.com
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"items": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"display_name": "Jane Doe",
"email": "jane.doe@example.com"
}
],
"next_cursor": null
}
Example — auto-complete by display name prefix:
Request:
GET /api/v1alpha/users?display_name=Jan*&limit=5
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"items": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"display_name": "Jane Doe",
"email": "jane.doe@example.com"
},
{
"id": "f9e8d7c6-b5a4-3210-fedc-ba0987654321",
"display_name": "Jan Smith",
"email": "jan.smith@example.com"
}
],
"next_cursor": null
}
GET /api/v1alpha/users/{userId} — Get user by ID#
Returns a single user by their unique identity provider identifier.
This endpoint is used when a service or UI already has a user identifier — for example, from an authorization policy — and needs to retrieve the corresponding human-readable profile (display name, email, job title) for presentation.
Path parameters:
Parameter |
Description |
|---|---|
|
Unique identifier of the user. |
Response: 200 OK — User object.
Example:
Request:
GET /api/v1alpha/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"display_name": "Jane Doe",
"email": "jane.doe@example.com",
"active": true,
"job_title": "Senior Engineer"
}
GET /api/v1alpha/users/{userId}/groups — List groups for a user#
Lists the groups that the specified user is a direct member of. Supports optional display-name filtering. Results are paginated.
This endpoint is used to determine what groups a user directly belongs to — for example, to display a user’s group memberships in an administration panel, or to evaluate group-based access control decisions.
Path parameters:
Parameter |
Description |
|---|---|
|
Unique identifier of the user. |
Query parameters:
Parameter |
Required |
Description |
|---|---|---|
|
no |
Filter by group display name. Append |
|
no |
Maximum number of results per page. Default: 20. Maximum: 100. |
|
no |
Opaque pagination token from a previous response. Omit for the first page. |
Response: 200 OK — Paginated list of Group objects.
Field |
Type |
Description |
|---|---|---|
|
array of Group |
Groups the user is a direct member of, matching any filters. |
|
string or null |
Opaque token to retrieve the next page. Null when there are no more results. |
Example:
Request:
GET /api/v1alpha/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890/groups
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"items": [
{
"id": "g1h2i3j4-k5l6-7890-mnop-qr1234567890",
"display_name": "Engineering",
"description": "All engineering staff"
},
{
"id": "s1t2u3v4-w5x6-7890-yzab-cd1234567890",
"display_name": "Project Alpha",
"description": "Project Alpha team members"
}
],
"next_cursor": null
}
GET /api/v1alpha/users/{userId}/groups/{groupId} — Check user group membership#
Checks whether the specified user is a direct member of the specified group. If the user is a member, returns the group details. Returns 404 Not Found if the user is not a direct member of the group or if either the user or group does not exist.
This endpoint is useful for point membership checks — for example, verifying that a user directly belongs to an “Administrators” group before granting elevated access, without fetching the user’s entire group list.
Path parameters:
Parameter |
Description |
|---|---|
|
Unique identifier of the user. |
|
Unique identifier of the group. |
Response: 200 OK — Group object (confirming membership).
Example:
Request:
GET /api/v1alpha/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890/groups/g1h2i3j4-k5l6-7890-mnop-qr1234567890
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "g1h2i3j4-k5l6-7890-mnop-qr1234567890",
"display_name": "Engineering",
"description": "All engineering staff"
}
GET /api/v1alpha/groups — List groups#
Lists groups in the directory with optional display-name filtering. Results are paginated.
This endpoint is used for group discovery and auto-completion — for example, when an administrator is configuring an access policy on an Omniverse Storage directory and begins typing a group name to grant permissions to.
Query parameters:
Parameter |
Required |
Description |
|---|---|---|
|
no |
Filter by group display name. Append |
|
no |
Maximum number of results per page. Default: 20. Maximum: 100. |
|
no |
Opaque pagination token from a previous response. Omit for the first page. |
Response: 200 OK — Paginated list of Group objects.
Field |
Type |
Description |
|---|---|---|
|
array of Group |
Groups matching the request filters. |
|
string or null |
Opaque token to retrieve the next page. Null when there are no more results. |
Example — search for groups starting with “Eng”:
Request:
GET /api/v1alpha/groups?display_name=Eng*&limit=5
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"items": [
{
"id": "g1h2i3j4-k5l6-7890-mnop-qr1234567890",
"display_name": "Engineering",
"description": "All engineering staff"
},
{
"id": "e2f3g4h5-i6j7-8901-klmn-op2345678901",
"display_name": "Engineering Leads",
"description": "Engineering team leads"
}
],
"next_cursor": null
}
GET /api/v1alpha/groups/{groupId} — Get group by ID#
Returns a single group by its unique identity provider identifier.
This endpoint is used when a service or UI has a group identifier — for example, from an authorization policy entry — and needs to display the group’s name and description to an administrator.
Path parameters:
Parameter |
Description |
|---|---|
|
Unique identifier of the group. |
Response: 200 OK — Group object.
Example:
Request:
GET /api/v1alpha/groups/g1h2i3j4-k5l6-7890-mnop-qr1234567890
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "g1h2i3j4-k5l6-7890-mnop-qr1234567890",
"display_name": "Engineering",
"description": "All engineering staff"
}
GET /api/v1alpha/groups/{groupId}/users — List group members#
Lists the users that are direct members of the specified group. Supports optional email and display-name filtering. Results are paginated.
This endpoint is the inverse of listing a user’s groups — it answers “who belongs to this group?” rather than “what groups does this user belong to?”. A typical use case is displaying the member list of a group in an administration panel or verifying which users have been granted access through a group-based policy.
Path parameters:
Parameter |
Description |
|---|---|
|
Unique identifier of the group. |
Query parameters:
Parameter |
Required |
Description |
|---|---|---|
|
no |
Filter by exact email address. |
|
no |
Filter by display name. Append |
|
no |
Maximum number of results per page. Default: 20. Maximum: 100. |
|
no |
Opaque pagination token from a previous response’s |
Response: 200 OK — Paginated list of User objects.
Field |
Type |
Description |
|---|---|---|
|
array of User |
Users that are members of the group, matching any filters. |
|
string or null |
Opaque token to retrieve the next page. Null when there are no more results. |
Example:
Request:
GET /api/v1alpha/groups/g1h2i3j4-k5l6-7890-mnop-qr1234567890/users
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"items": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"display_name": "Jane Doe",
"email": "jane.doe@example.com",
"active": true,
"job_title": "Senior Engineer"
},
{
"id": "f9e8d7c6-b5a4-3210-fedc-ba0987654321",
"display_name": "Jan Smith",
"email": "jan.smith@example.com",
"active": true,
"job_title": "Staff Engineer"
}
],
"next_cursor": null
}
GET /api/v1alpha/groups/{groupId}/users/{userId} — Get group member#
Checks whether the specified user is a direct member of the specified group. If the user is a member, returns the user details. Returns 404 Not Found if the user is not a direct member of the group or if either the user or group does not exist.
This endpoint is the inverse of GET /api/v1alpha/users/{userId}/groups/{groupId} — it answers “is this user in the group?” from the group’s perspective and returns the user object rather than the group object.
Path parameters:
Parameter |
Description |
|---|---|
|
Unique identifier of the group. |
|
Unique identifier of the user. |
Response: 200 OK — User object.
Example:
Request:
GET /api/v1alpha/groups/g1h2i3j4-k5l6-7890-mnop-qr1234567890/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890
Authorization: Bearer eyJhbG...
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"display_name": "Jane Doe",
"email": "jane.doe@example.com",
"active": true,
"job_title": "Senior Engineer"
}
OpenAPI 3.0 Specification#
openapi: 3.0.3
info:
title: User Info Service
description: >-
Read-only identity service providing user and group information
from the organization's directory for the NVIDIA Omniverse platform.
version: v1alpha
contact:
name: NVIDIA Omniverse
paths:
/api/v1alpha/users/me:
get:
summary: Get current user
description: >-
Returns the profile of the currently authenticated user.
The caller's identity is determined from the bearer token
and resolved against the local directory cache.
operationId: getCurrentUser
tags: [Users]
security:
- bearerAuth: []
responses:
"200":
description: The current user's profile.
content:
application/json:
schema:
$ref: "#/components/schemas/User"
"401":
$ref: "#/components/responses/Unauthorized"
/api/v1alpha/users:
get:
summary: List users
description: >-
Lists users in the directory with optional filtering
by email or display name.
operationId: listUsers
tags: [Users]
security:
- bearerAuth: []
parameters:
- $ref: "#/components/parameters/UserEmail"
- $ref: "#/components/parameters/DisplayName"
- $ref: "#/components/parameters/Limit"
- $ref: "#/components/parameters/Cursor"
responses:
"200":
description: A paginated list of users.
content:
application/json:
schema:
$ref: "#/components/schemas/UserPage"
"401":
$ref: "#/components/responses/Unauthorized"
/api/v1alpha/users/{userId}:
get:
summary: Get user by ID
description: Returns a single user by their unique identity provider identifier.
operationId: getUser
tags: [Users]
security:
- bearerAuth: []
parameters:
- $ref: "#/components/parameters/UserId"
responses:
"200":
description: The requested user.
content:
application/json:
schema:
$ref: "#/components/schemas/User"
"401":
$ref: "#/components/responses/Unauthorized"
"404":
$ref: "#/components/responses/NotFound"
/api/v1alpha/users/{userId}/groups:
get:
summary: List groups for a user
description: Lists the groups that the specified user is a direct member of.
operationId: listUserGroups
tags: [Users]
security:
- bearerAuth: []
parameters:
- $ref: "#/components/parameters/UserId"
- $ref: "#/components/parameters/DisplayName"
- $ref: "#/components/parameters/Limit"
- $ref: "#/components/parameters/Cursor"
responses:
"200":
description: A paginated list of groups the user belongs to.
content:
application/json:
schema:
$ref: "#/components/schemas/GroupPage"
"401":
$ref: "#/components/responses/Unauthorized"
"404":
$ref: "#/components/responses/NotFound"
/api/v1alpha/users/{userId}/groups/{groupId}:
get:
summary: Check user group membership
description: >-
Checks whether the specified user is a direct member of the specified group.
Returns the group details if the user is a member.
operationId: getUserGroup
tags: [Users]
security:
- bearerAuth: []
parameters:
- $ref: "#/components/parameters/UserId"
- $ref: "#/components/parameters/GroupId"
responses:
"200":
description: The user is a member of the group.
content:
application/json:
schema:
$ref: "#/components/schemas/Group"
"401":
$ref: "#/components/responses/Unauthorized"
"404":
$ref: "#/components/responses/NotFound"
/api/v1alpha/groups:
get:
summary: List groups
description: Lists groups in the directory with optional display-name filtering.
operationId: listGroups
tags: [Groups]
security:
- bearerAuth: []
parameters:
- $ref: "#/components/parameters/DisplayName"
- $ref: "#/components/parameters/Limit"
- $ref: "#/components/parameters/Cursor"
responses:
"200":
description: A paginated list of groups.
content:
application/json:
schema:
$ref: "#/components/schemas/GroupPage"
"401":
$ref: "#/components/responses/Unauthorized"
/api/v1alpha/groups/{groupId}:
get:
summary: Get group by ID
description: Returns a single group by its unique identity provider identifier.
operationId: getGroup
tags: [Groups]
security:
- bearerAuth: []
parameters:
- $ref: "#/components/parameters/GroupId"
responses:
"200":
description: The requested group.
content:
application/json:
schema:
$ref: "#/components/schemas/Group"
"401":
$ref: "#/components/responses/Unauthorized"
"404":
$ref: "#/components/responses/NotFound"
/api/v1alpha/groups/{groupId}/users:
get:
summary: List group members
description: Lists the users that are direct members of the specified group.
operationId: listGroupMembers
tags: [Groups]
security:
- bearerAuth: []
parameters:
- $ref: "#/components/parameters/GroupId"
- $ref: "#/components/parameters/UserEmail"
- $ref: "#/components/parameters/DisplayName"
- $ref: "#/components/parameters/Limit"
- $ref: "#/components/parameters/Cursor"
responses:
"200":
description: A paginated list of users that are members of the group.
content:
application/json:
schema:
$ref: "#/components/schemas/UserPage"
"401":
$ref: "#/components/responses/Unauthorized"
"404":
$ref: "#/components/responses/NotFound"
/api/v1alpha/groups/{groupId}/users/{userId}:
get:
summary: Get group member
description: >-
Checks whether the specified user is a direct member of the group.
Returns the user details if the user is a member.
operationId: getGroupMember
tags: [Groups]
security:
- bearerAuth: []
parameters:
- $ref: "#/components/parameters/GroupId"
- $ref: "#/components/parameters/UserId"
responses:
"200":
description: The user is a member of the group.
content:
application/json:
schema:
$ref: "#/components/schemas/User"
"401":
$ref: "#/components/responses/Unauthorized"
"404":
$ref: "#/components/responses/NotFound"
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
parameters:
UserId:
name: userId
in: path
required: true
description: Unique identifier of the user.
schema:
type: string
GroupId:
name: groupId
in: path
required: true
description: Unique identifier of the group.
schema:
type: string
UserEmail:
name: email
in: query
required: false
description: Filter by exact email address.
schema:
type: string
DisplayName:
name: display_name
in: query
required: false
description: >-
Filter by display name. Append * for prefix matching (e.g. "Jan*"),
otherwise performs substring search.
schema:
type: string
Limit:
name: limit
in: query
required: false
description: Maximum number of results per page (default 20, max 100).
schema:
type: integer
default: 20
minimum: 1
maximum: 100
Cursor:
name: cursor
in: query
required: false
description: Opaque pagination token from a previous response.
schema:
type: string
schemas:
User:
type: object
required: [id, display_name, username]
properties:
id:
type: string
description: Unique identifier of the user in the identity provider.
display_name:
type: string
description: Full display name (e.g. "Jane Doe").
given_name:
type: string
description: First/given name.
family_name:
type: string
description: Last/family name.
email:
type: string
description: Primary email address.
username:
type: string
description: Login username (user principal name).
active:
type: boolean
description: Whether the account is enabled in the directory.
job_title:
type: string
description: Job title as recorded in the directory.
Group:
type: object
required: [id, display_name]
properties:
id:
type: string
description: Unique identifier of the group in the identity provider.
display_name:
type: string
description: Display name of the group.
description:
type: string
description: Human-readable description of the group's purpose.
UserPage:
type: object
required: [items]
properties:
items:
type: array
items:
$ref: "#/components/schemas/User"
next_cursor:
type: string
nullable: true
description: >-
Opaque token to retrieve the next page.
Null when there are no more results.
GroupPage:
type: object
required: [items]
properties:
items:
type: array
items:
$ref: "#/components/schemas/Group"
next_cursor:
type: string
nullable: true
description: >-
Opaque token to retrieve the next page.
Null when there are no more results.
Error:
type: object
required: [error, message]
properties:
error:
type: string
description: Machine-readable error code.
message:
type: string
description: Human-readable error description.
responses:
Unauthorized:
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
NotFound:
description: The requested resource does not exist.
content:
application/json:
schema:
$ref: "#/components/schemas/Error"