Team#
- SAClient.get_team_metadata()#
Returns team metadata
- Returns:
team metadata
- Return type:
dict
- SAClient.get_integrations()#
Get all integrations per team
- Returns:
metadata objects of all integrations of the team.
- Return type:
list of dicts
- SAClient.invite_contributors_to_team(emails, admin=False)#
Invites contributors to the team.
- Parameters:
emails (list) – list of contributor emails
admin (bool) – enables admin privileges for the contributor
- Returns:
lists of invited, skipped contributors of the team
- Return type:
tuple (2 members) of lists of strs
- SAClient.search_team_contributors(email=None, first_name=None, last_name=None, return_metadata=True)#
Search for contributors in the team
- Parameters:
email (str) – filter by email
first_name (str) – filter by first name
last_name (str) – filter by last name
return_metadata (bool) – return metadata of contributors instead of names
- Returns:
metadata of found users
- Return type:
list of dicts
- SAClient.get_user_metadata(pk, include=None)#
Returns user metadata including optionally, custom fields
- Parameters:
pk (str or int) – The email address or ID of the team user.
include (list of str, optional) –
Specifies additional fields to include in the response.
Possible values are
”custom_fields”: If provided, the response will include custom fields associated with the team user.
- Returns:
metadata of team user.
- Return type:
dict
Request Example:
client.get_user_metadata( "example@email.com", include=["custom_fields"] )
Response Example:
{ "createdAt": "2023-11-27T07:10:24.000Z", "updatedAt": "2025-02-03T13:35:09.000Z", "custom_fields": { "ann_quality_threshold": 80, "tag": ["Tag1", "Tag2", "Tag3"], "due_date": 1738671238.7, }, "email": "example@email.com", "id": 124341, "role": "Contributor", "state": "Confirmed", "team_id": 23245, }
- SAClient.set_user_custom_field(pk, custom_field_name, value)#
Set the custom field for team user.
- Parameters:
pk (str or int) – The email address or ID of the team user.
custom_field_name (str) – The name of the existing custom field assigned to the user.
value (Any) –
The new value for the custom field.
This can be a string, a list of strings, a number, or None depending on the custom field type.
Multi-select fields must be provided as a list of strings (e.g., [“Tag1”, “Tag2”]).
Date fields must be in Unix timestamp format (e.g., “1738281600”).
Other fields (e.g., text, numbers) should match the expected type as defined in the project schema.
Request Example:
client.set_user_custom_field( "example@email.com", custom_field_name="due_date", value=1738671238.7 )
- SAClient.list_users(*, project=None, include=None, **filters)#
Search users, including their scores, by filtering criteria.
- Parameters:
project (str or int) – Project name or ID, if provided, results will be for project-level, otherwise results will be for team level.
include (List[typing_extensions.Literal[custom_fields]]) –
Specifies additional fields to be included in the response.
Possible values are
”custom_fields”: Includes custom fields and scores assigned to each user.
filters (UserFilters, optional) –
Specifies filtering criteria, with all conditions combined using logical AND.
Only users matching all filter conditions are returned.
If no filter operation is provided, an exact match is applied
Supported operations:
__in: Value is in the provided list.
__notin: Value is not in the provided list.
__ne: Value is not equal to the given value.
__contains: Value contains the specified substring.
__starts: Value starts with the given prefix.
__ends: Value ends with the given suffix.
__gt: Value is greater than the given number.
__gte: Value is greater than or equal to the given number.
__lt: Value is less than the given number.
__lte: Value is less than or equal to the given number.
Filter params:
- id: int - id__in: list[int] - email: str - email__in: list[str] - email__contains: str - email__starts: str - email__ends: str
Following params if project is not selected:
- state: Literal[“Confirmed”, “Pending”] - state__in: List[Literal[“Confirmed”, “Pending”]] - role: Literal[“admin”, “contributor”] - role__in: List[Literal[“admin”, “contributor”]]
Scores and Custom Field Filtering:
Scores and other custom fields must be prefixed with custom_field__ .
Example: custom_field__Due_date__gte=”1738281600” (filtering users whose Due_date is after the given Unix timestamp).
Text custom field only works with the following filter params: __in, __notin, __contains
Numeric custom field only works with the following filter params: __in, __notin, __ne, __gt, __gte, __lt, __lte
Single-select custom field only works with the following filter params: __in, __notin, __contains
Multi-select custom field only works with the following filter params: __in, __notin
Date picker custom field only works with the following filter params: __gt, __gte, __lt, __lte
If custom field has a space, please use the following format to filter them:
user_filters = {"custom_field__accuracy score 30D__lt": 90} client.list_users(include=["custom_fields"], **user_filters)
- Returns:
A list of team/project users metadata that matches the filtering criteria
- Return type:
list of dicts
Request Example:
client.list_users( email__contains="@superannotate.com", include=["custom_fields"], state__in=["Confirmed"] custom_fields__Tag__in=["Tag1", "Tag3"] )
Response Example:
[ { "createdAt": "2023-02-02T14:25:42.000Z", "updatedAt": "2025-01-23T16:39:03.000Z", "custom_fields": { "Ann Quality threshold": 80, "Tag": ["Tag1", "Tag2", "Tag3"], }, "email": "example@superannotate.com", "id": 30328, "role": "TeamOwner", "state": "Confirmed", "team_id": 44311, } ]
Request Example:
# Project level scores scores = client.list_users( include=["custom_fields"], project="my_multimodal", email__contains="@superannotate.com", custom_field__speed__gte=90, custom_field__weight__lte=1, )
Response Example:
# Project level scores [ { "createdAt": "2025-03-07T13:19:59.000Z", "updatedAt": "2025-03-07T13:19:59.000Z", "custom_fields": {"speed": 92, "weight": 0.8}, "email": "example@superannotate.com", "id": 715121, "role": "Annotator", "state": "Confirmed", "team_id": 1234, } ]
Request Example:
# Team level scores user_filters = { "custom_field__accuracy score 30D__lt": 95, "custom_field__speed score 7D__lt": 15 } scores = client.list_users( include=["custom_fields"], email__contains="@superannotate.com", role="Contributor", **user_filters )
Response Example:
# Team level scores [ { "createdAt": "2025-03-07T13:19:59.000Z", "updatedAt": "2025-03-07T13:19:59.000Z", "custom_fields": { "Test custom field": 80, "Tag custom fields": ["Tag1", "Tag2"], "accuracy score 30D": 95, "accuracy score 14D": 47, "accuracy score 7D": 24, "speed score 30D": 33, "speed score 14D": 22, "speed score 7D": 11, }, "email": "example@superannotate.com", "id": 715121, "role": "Contributor", "state": "Confirmed", "team_id": 1234, } ]
- SAClient.pause_user_activity(pk, projects)#
Block the team contributor from requesting items from the projects.
- Parameters:
pk (str or int) – The email address or user ID of the team contributor.
projects (Union[List[int], List[str], Literal["*"]]) – A list of project names or IDs from which the user should be blocked. The special value “*” means block access to all projects
- SAClient.resume_user_activity(pk, projects)#
Resume the team contributor from requesting items from the projects.
- Parameters:
pk (str or int) – The email address or user ID of the team contributor.
projects (Union[List[int], List[str], Literal["*"]]) – A list of project names or IDs from which the user should be resumed. The special value “*” means resume access to all projects
- SAClient.get_user_scores(project, item, scored_user, *, score_names=None)#
Retrieve score metadata for a user for a specific item in a specific project.
- Parameters:
project (Union[str, Tuple[int, int], Tuple[str, str]]) – Project and folder as a tuple, folder is optional.
item (Union[str, int]) – The unique ID or name of the item.
scored_user (str) – The email address of the project user.
score_names (Optional[List[str]]) – A list of score names to filter by. If None, returns all scores.
- Returns:
A list of dictionaries containing score metadata for the user.
- Return type:
list of dicts
Request Example:
client.get_user_scores( project=("my_multimodal", "folder1"), item="item1", scored_user="example@superannotate.com", score_names=["Accuracy Score", "Speed"] )
Response Example:
[ { "createdAt": "2024-06-01T13:00:00", "updatedAt": "2024-06-01T13:00:00", "id": 3217575, "name": "Accuracy Score", "value": 98, "weight": 4, }, { "createdAt": "2024-06-01T13:00:00", "updatedAt": "2024-06-01T13:00:00", "id": 5657575, "name": "Speed", "value": 9, "weight": 0.4, }, ]
- SAClient.set_user_scores(project, item, scored_user, scores)#
Assign score metadata for a user in a scoring component.
- Parameters:
project (Union[str, Tuple[int, int], Tuple[str, str]]) – Project and folder as a tuple, folder is optional.
item (Union[str, int]) – The unique ID or name of the item.
scored_user (str) – Set the email of the user being scored.
scores (List[Dict[str, Any]) –
- A list of dictionaries containing the following key-value pairs:
component_id (str): The component_id of the score (required).
value (Any): The score value (required).
weight (Union[float, int], optional): The weight of the score. Defaults to 1 if not provided.
Example:
scores = [ { "component_id": "<component_id_for_score>", # str (required) "value": 90, # Any (required) "weight": 1 # Union[float, int] (optional, defaults to 1.0 if not provided) } ]
Request Example:
client.set_user_scores( project=("my_multimodal", "folder1"), item_=12345, scored_user="example@superannotate.com", scores=[ {"component_id": "r_kfrp3n", "value": 90}, {"component_id": "h_jbrp4v", "value": 9, "weight": 4.0}, {"component_id": "m_kf8pss", "value": None, "weight": None}, ] )