Skip to content

UserOperations

Access via client.users.

Note

Most user management operations require admin privileges.

For self-service profile and API key operations see client.account.

crucible.resources.users.UserOperations

User-related API operations.

Access via: client.users.get(), client.users.create(), etc.

get(orcid=None, email=None, username=None)

Get user details by ORCID, email, or username.

ORCID and email lookups require admin. Username lookup returns a public profile (no email) and is open to all authenticated users.

Parameters:

Name Type Description Default
orcid str

User ORCID identifier

None
email str

User's email address

None
username str

User's username

None

Returns:

Name Type Description
Dict Dict

UserRead (ORCID/email) or UserPublicRead (username)

Raises:

Type Description
ValueError

If no identifier provided, no user found, or email matches multiple accounts.

Note

ORCID is the canonical identifier. If multiple are provided, orcid > username > email in precedence.

search(q, limit=20)

Search for users by name or username. Available to all authenticated users.

Matches the query term against username, first name, and last name simultaneously (case-insensitive). Returns UserPublicRead — no email exposed. Hard-capped at 50 results.

Use client.users.list() for admin-level field-specific filtering.

Parameters:

Name Type Description Default
q str

Search term (e.g. "fabrice", "ron")

required

Returns:

Type Description
List[Dict]

List[Dict]: Matching users (username, first_name, last_name, orcid)

list(limit=DEFAULT_LIMIT, offset=0, **kwargs)

List all users in the system.

Requires admin permissions.

Parameters:

Name Type Description Default
limit int

Maximum number of results to return (default: 100)

DEFAULT_LIMIT
offset int

Starting position in the full result set (default: 0)

0
**kwargs

Additional query parameters for filtering

{}

Returns:

Type Description
List[Dict]

List[Dict]: List of user objects with unique_id, name, email, is_service_account

Example

users = client.users.list(limit=50) for user in users: ... print(f"{user['first_name']} {user['last_name']} ({user['orcid']})")

resolve(orcids=None, usernames=None, emails=None)

Batch-resolve users by any mix of ORCIDs, usernames, or emails.

Open to all authenticated users. Returns public profiles (no email).

Parameters:

Name Type Description Default
orcids Optional[List[str]]

List of ORCID strings

None
usernames Optional[List[str]]

List of username strings

None
emails Optional[List[str]]

List of email strings

None

Returns:

Name Type Description
Dict Dict

Mapping of ORCID → UserPublicRead. Unresolved identifiers map to null.

create(user, project_ids=None)

Add or update a user in the system (upsert by ORCID).

If a user with the given ORCID already exists their record is updated. Project memberships and access groups are always re-applied.

Requires admin permissions.

Parameters:

Name Type Description Default
user

User model or dict with user information. Required fields: first_name, last_name, orcid. Optional: email, is_service_account. If a dict, may include a 'projects' key (list of project IDs) as an alternative to the project_ids parameter.

required
project_ids list

Project IDs to associate with the user.

None

Returns:

Name Type Description
Dict Dict

Created or updated user object

Example

from crucible.models import User user = User(first_name="Jane", last_name="Doe", orcid="0000-0000-0000-0000") new_user = client.users.create(user, project_ids=["project1"])

update(orcid, **kwargs)

Partially update a user record.

Requires admin permissions.

Parameters:

Name Type Description Default
orcid str

User ORCID identifier

required
**kwargs

Fields to update. Accepted: first_name, last_name, email, is_service_account.

{}

Returns:

Name Type Description
Dict Dict

Updated user object

list_datasets(orcid)

List dataset IDs accessible to a user.

Requires admin permissions.

Parameters:

Name Type Description Default
orcid str

User ORCID identifier

required

Returns:

Type Description
List[str]

List[str]: Dataset unique IDs the user has access to

check_dataset_access(orcid, dsid)

Check a user's read/write access to a specific dataset.

Requires admin permissions.

Parameters:

Name Type Description Default
orcid str

User ORCID identifier

required
dsid str

Dataset unique identifier

required

Returns:

Name Type Description
Dict Dict

Permissions dict with 'read' and 'write' boolean keys

list_access_groups(orcid)

List access group names for a user.

Parameters:

Name Type Description Default
orcid str

User ORCID identifier

required

Returns:

Type Description
List[str]

List[str]: Access group names the user belongs to

add_to_access_group(orcid, group_name)

Add a user to an access group.

Requires admin permissions.

Parameters:

Name Type Description Default
orcid str

User ORCID identifier

required
group_name str

Name of the access group

required

Returns:

Name Type Description
Dict Dict

Updated access group object

remove_from_access_group(orcid, group_name)

Remove a user from an access group.

Requires admin permissions.

Parameters:

Name Type Description Default
orcid str

User ORCID identifier

required
group_name str

Name of the access group

required

Returns:

Name Type Description
Dict Dict

Response message

verify_api_key(orcid)

Verify the API key for any user. Admin only.

Parameters:

Name Type Description Default
orcid str

User's ORCID identifier

required

Returns:

Name Type Description
Dict Dict

{valid: bool, created_at: str, expires_at: str}